| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import z from "zod"
- import { Config } from "../config/config"
- import { Instance } from "../project/instance"
- import { Bus } from "../bus"
- import { Identifier } from "../id/id"
- import PROMPT_INITIALIZE from "./template/initialize.txt"
- import PROMPT_REVIEW from "./template/review.txt"
- export namespace Command {
- export const Event = {
- Executed: Bus.event(
- "command.executed",
- z.object({
- name: z.string(),
- sessionID: Identifier.schema("session"),
- arguments: z.string(),
- messageID: Identifier.schema("message"),
- }),
- ),
- }
- export const Info = z
- .object({
- name: z.string(),
- description: z.string().optional(),
- agent: z.string().optional(),
- model: z.string().optional(),
- template: z.string(),
- subtask: z.boolean().optional(),
- })
- .meta({
- ref: "Command",
- })
- export type Info = z.infer<typeof Info>
- export const Default = {
- INIT: "init",
- REVIEW: "review",
- } as const
- const state = Instance.state(async () => {
- const cfg = await Config.get()
- const result: Record<string, Info> = {
- [Default.INIT]: {
- name: Default.INIT,
- description: "create/update AGENTS.md",
- template: PROMPT_INITIALIZE.replace("${path}", Instance.worktree),
- },
- [Default.REVIEW]: {
- name: Default.REVIEW,
- description: "review changes [commit|branch|pr], defaults to uncommitted",
- template: PROMPT_REVIEW.replace("${path}", Instance.worktree),
- subtask: true,
- },
- }
- for (const [name, command] of Object.entries(cfg.command ?? {})) {
- result[name] = {
- name,
- agent: command.agent,
- model: command.model,
- description: command.description,
- template: command.template,
- subtask: command.subtask,
- }
- }
- return result
- })
- export async function get(name: string) {
- return state().then((x) => x[name])
- }
- export async function list() {
- return state().then((x) => Object.values(x))
- }
- }
|