@duetso/agent 0.1.140 → 0.1.142

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +21 -0
  2. package/dist/package.json +1 -1
  3. package/dist/src/cli/inline-slash.d.ts +22 -0
  4. package/dist/src/cli/inline-slash.d.ts.map +1 -0
  5. package/dist/src/cli/inline-slash.js +48 -0
  6. package/dist/src/cli/inline-slash.js.map +1 -0
  7. package/dist/src/cli/run.d.ts.map +1 -1
  8. package/dist/src/cli/run.js +23 -0
  9. package/dist/src/cli/run.js.map +1 -1
  10. package/dist/src/core/serializer.d.ts +8 -0
  11. package/dist/src/core/serializer.d.ts.map +1 -1
  12. package/dist/src/core/serializer.js +16 -0
  13. package/dist/src/core/serializer.js.map +1 -1
  14. package/dist/src/session/session.d.ts +29 -0
  15. package/dist/src/session/session.d.ts.map +1 -1
  16. package/dist/src/session/session.js +41 -0
  17. package/dist/src/session/session.js.map +1 -1
  18. package/dist/src/session/thinking-level.d.ts +19 -0
  19. package/dist/src/session/thinking-level.d.ts.map +1 -0
  20. package/dist/src/session/thinking-level.js +32 -0
  21. package/dist/src/session/thinking-level.js.map +1 -0
  22. package/dist/src/tui/app.d.ts.map +1 -1
  23. package/dist/src/tui/app.js +17 -4
  24. package/dist/src/tui/app.js.map +1 -1
  25. package/dist/src/tui/autocomplete-controller.d.ts +7 -0
  26. package/dist/src/tui/autocomplete-controller.d.ts.map +1 -1
  27. package/dist/src/tui/autocomplete-controller.js +6 -0
  28. package/dist/src/tui/autocomplete-controller.js.map +1 -1
  29. package/dist/src/tui/boot-screen.d.ts.map +1 -1
  30. package/dist/src/tui/boot-screen.js +2 -10
  31. package/dist/src/tui/boot-screen.js.map +1 -1
  32. package/dist/src/tui/controllers.d.ts.map +1 -1
  33. package/dist/src/tui/controllers.js +24 -0
  34. package/dist/src/tui/controllers.js.map +1 -1
  35. package/dist/src/tui/dino/index.d.ts +3 -3
  36. package/dist/src/tui/dino/index.d.ts.map +1 -1
  37. package/dist/src/tui/dino/index.js +14 -25
  38. package/dist/src/tui/dino/index.js.map +1 -1
  39. package/dist/src/tui/dino/render.d.ts +4 -5
  40. package/dist/src/tui/dino/render.d.ts.map +1 -1
  41. package/dist/src/tui/dino/render.js +4 -7
  42. package/dist/src/tui/dino/render.js.map +1 -1
  43. package/dist/src/tui/dino/visibility.d.ts.map +1 -1
  44. package/dist/src/tui/dino/visibility.js +2 -1
  45. package/dist/src/tui/dino/visibility.js.map +1 -1
  46. package/dist/src/tui/layout.d.ts.map +1 -1
  47. package/dist/src/tui/layout.js +4 -1
  48. package/dist/src/tui/layout.js.map +1 -1
  49. package/dist/src/tui/slash-commands.d.ts +102 -8
  50. package/dist/src/tui/slash-commands.d.ts.map +1 -1
  51. package/dist/src/tui/slash-commands.js +155 -5
  52. package/dist/src/tui/slash-commands.js.map +1 -1
  53. package/dist/src/turn-runner/prompts.d.ts.map +1 -1
  54. package/dist/src/turn-runner/prompts.js +1 -0
  55. package/dist/src/turn-runner/prompts.js.map +1 -1
  56. package/dist/src/turn-runner/shell-state-handle.d.ts +8 -1
  57. package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -1
  58. package/dist/src/turn-runner/shell-state-handle.js +4 -1
  59. package/dist/src/turn-runner/shell-state-handle.js.map +1 -1
  60. package/dist/src/turn-runner/skill-context.d.ts +6 -0
  61. package/dist/src/turn-runner/skill-context.d.ts.map +1 -1
  62. package/dist/src/turn-runner/skill-context.js +12 -0
  63. package/dist/src/turn-runner/skill-context.js.map +1 -1
  64. package/dist/src/turn-runner/state-machine-controller.d.ts +8 -2
  65. package/dist/src/turn-runner/state-machine-controller.d.ts.map +1 -1
  66. package/dist/src/turn-runner/state-machine-controller.js +51 -20
  67. package/dist/src/turn-runner/state-machine-controller.js.map +1 -1
  68. package/dist/src/turn-runner/turn-runner.d.ts +15 -3
  69. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
  70. package/dist/src/turn-runner/turn-runner.js +32 -19
  71. package/dist/src/turn-runner/turn-runner.js.map +1 -1
  72. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import type { Skill } from "@earendil-works/pi-coding-agent";
1
2
  import type { SkillAutocompleteItem } from "./autocomplete.js";
2
3
  import type { CopyController } from "./copy-controller.js";
3
4
  import type { PasteController } from "./paste-controller.js";
@@ -9,9 +10,18 @@ import type { TranscriptWriter } from "./transcript-writer.js";
9
10
  * `submit()` can short-circuit before the message reaches `session.prompt()`.
10
11
  */
11
12
  export interface SlashCommandContext {
12
- pasteController: PasteController;
13
- copyController: CopyController;
14
- transcriptWriter: TranscriptWriter;
13
+ /**
14
+ * Controllers are optional because not every consumer of this
15
+ * interface wires the full TUI. The non-TUI CLI applies inline
16
+ * `/model` and `/thinking` against a stripped-down context that
17
+ * has no clipboard, transcript, or reset surface — those commands
18
+ * are filtered out via `applyInlineSlashCommands`'s `onlyCommands`
19
+ * before they could ever run, so the handlers that depend on these
20
+ * controllers never see a missing one in practice.
21
+ */
22
+ pasteController?: PasteController;
23
+ copyController?: CopyController;
24
+ transcriptWriter?: TranscriptWriter;
15
25
  appendBlock(label: string | null, body: string, fg: string): void;
16
26
  /**
17
27
  * Invoked by `/reset` to ask the outer dispatcher to dispose the
@@ -19,13 +29,51 @@ export interface SlashCommandContext {
19
29
  * tears its renderer down immediately after so the parent `while`
20
30
  * loop in `cli/run.ts` wakes and performs the swap.
21
31
  */
22
- onReset(): void;
32
+ onReset?(): void;
33
+ /**
34
+ * Invoked by `/model <name>` to swap the model used for subsequent
35
+ * turns. Returns the canonicalized name the session will use on the
36
+ * next prompt, or throws if validation fails (unknown shorthand /
37
+ * missing provider credentials). The change is queued: the current
38
+ * in-flight turn keeps the model it started with.
39
+ */
40
+ setModel(model: string): {
41
+ modelName: string;
42
+ };
43
+ /**
44
+ * Invoked by `/thinking <level>` to swap the thinking level used for
45
+ * subsequent turns. Returns the normalized level, or throws if the
46
+ * value is not one of minimal / low / medium / high / xhigh. The
47
+ * change is queued: the current in-flight turn keeps the level it
48
+ * started with.
49
+ */
50
+ setThinkingLevel(level: string): {
51
+ thinkingLevel: string;
52
+ };
23
53
  }
24
54
  /**
25
- * One built-in slash command. The same record drives both the dispatcher
26
- * (`matches` + `handle`) and the autocomplete picker (`name` +
27
- * `description`), so a command added here automatically shows up in `/`
28
- * suggestions without a second registration step.
55
+ * Shape of inline matching for a command i.e. the form the command
56
+ * takes when it appears anywhere in a longer prompt rather than as the
57
+ * whole submitted message.
58
+ *
59
+ * - `"none"`: bare invocation only (`/reset`). Matches `/name` with
60
+ * whitespace / start / end boundaries on both sides.
61
+ * - `"token"`: requires one whitespace-bounded argument (`/model X`).
62
+ * Matches `/name <token>` with whitespace / start before and consumes
63
+ * the next non-whitespace run as the argument.
64
+ *
65
+ * Commands that take rest-of-line arguments (`/feedback`, `/copy`,
66
+ * `/image`) intentionally have no inline shape — there is no
67
+ * unambiguous way to split "the argument" from "the rest of the
68
+ * prompt" mid-message, so they remain whole-message only.
69
+ */
70
+ type InlineShape = "none" | "token";
71
+ /**
72
+ * One built-in slash command. The same record drives the whole-message
73
+ * dispatcher (`matches` + `handle`), the inline extractor (`inline`),
74
+ * and the autocomplete picker (`name` + `description`), so a command
75
+ * added here automatically shows up in `/` suggestions without a
76
+ * second registration step.
29
77
  */
30
78
  interface BuiltInSlashCommand {
31
79
  /** Bare command name, no leading slash. Picker renders this as `/name`. */
@@ -36,6 +84,14 @@ interface BuiltInSlashCommand {
36
84
  matches(message: string): boolean;
37
85
  /** Side-effecting handler. Errors are surfaced through `appendBlock`. */
38
86
  handle(message: string, ctx: SlashCommandContext): void;
87
+ /**
88
+ * When set, the command also runs when it appears anywhere inside a
89
+ * longer prompt. The inline extractor reconstructs a synthetic
90
+ * whole-message form (`/name` or `/name <arg>`) and calls `handle`
91
+ * with it, so the inline path reuses the same logic the whole-message
92
+ * path already uses.
93
+ */
94
+ inline?: InlineShape;
39
95
  }
40
96
  /**
41
97
  * Single source of truth for TUI-intercepted slash commands. Order here is
@@ -49,6 +105,13 @@ export declare const BUILT_IN_SLASH_COMMANDS: readonly BuiltInSlashCommand[];
49
105
  * cannot be wired into one surface without the other.
50
106
  */
51
107
  export declare const BUILT_IN_SLASH_COMMAND_ITEMS: readonly SkillAutocompleteItem[];
108
+ /**
109
+ * Build the slash-picker catalog from a list of discovered skills. Built-in
110
+ * commands lead, discovered skills follow under the `skills` group. Shared
111
+ * between the initial boot seed and the per-open background reload so both
112
+ * surfaces stay in lockstep.
113
+ */
114
+ export declare function buildSkillAutocompleteCatalog(skills: readonly Skill[]): readonly SkillAutocompleteItem[];
52
115
  /**
53
116
  * Routes the message to a local handler when it matches a built-in command.
54
117
  * Returns true when handled (caller must not forward the message to the
@@ -56,5 +119,36 @@ export declare const BUILT_IN_SLASH_COMMAND_ITEMS: readonly SkillAutocompleteIte
56
119
  * prompt path.
57
120
  */
58
121
  export declare function tryDispatchSlashCommand(message: string, ctx: SlashCommandContext): boolean;
122
+ /**
123
+ * Result of `applyInlineSlashCommands`: which commands fired, plus the
124
+ * leftover prompt after stripping every matched slash form. The residue
125
+ * is what the caller should dispatch to the agent; if `.trim()` on it
126
+ * is empty, the whole prompt was just slash commands and no agent turn
127
+ * needs to run.
128
+ */
129
+ export interface InlineSlashResult {
130
+ /** Commands whose handler fired, in BUILT_IN_SLASH_COMMANDS order. */
131
+ handledCommands: string[];
132
+ /** Prompt with matched slash forms removed and whitespace collapsed. */
133
+ residue: string;
134
+ }
135
+ /**
136
+ * Apply every inline-eligible slash command found inside a longer
137
+ * prompt: fire its handler (so users see the same `[model]` confirmation
138
+ * block they would for a whole-message `/model`), and strip the slash
139
+ * form out of the message so the agent does not have to re-parse local
140
+ * UI commands as user content. The returned `residue` is the message
141
+ * the caller should actually dispatch — callers check `.trim() === ""`
142
+ * to detect the "whole prompt was just slash commands" case and skip
143
+ * the agent turn entirely.
144
+ *
145
+ * Boundary characters are preserved on the inside of the strip so that
146
+ * adjacent words do not fuse: `"hey /model X please"` becomes
147
+ * `"hey please"` mid-strip and then collapses to `"hey please"` at the
148
+ * end. Multi-line prompts keep their newlines.
149
+ */
150
+ export declare function applyInlineSlashCommands(message: string, ctx: SlashCommandContext, options?: {
151
+ onlyCommands?: ReadonlySet<string>;
152
+ }): InlineSlashResult;
59
153
  export {};
60
154
  //# sourceMappingURL=slash-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/slash-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE;;;;;OAKG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,UAAU,mBAAmB;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,yEAAyE;IACzE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACzD;AAYD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,mBAAmB,EA0DjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,qBAAqB,EAKpE,CAAC;AAEN;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAQ1F"}
1
+ {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/slash-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE;;;;;OAKG;IACH,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpC;;;;;;GAMG;AACH,UAAU,mBAAmB;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,yEAAyE;IACzE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAYD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,mBAAmB,EA8EjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,qBAAqB,EAKpE,CAAC;AAEN;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,KAAK,EAAE,GACvB,SAAS,qBAAqB,EAAE,CAUlC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAQ1F;AA6BD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,mBAAmB,EACxB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAO,GACnD,iBAAiB,CA+BnB"}
@@ -27,24 +27,26 @@ export const BUILT_IN_SLASH_COMMANDS = [
27
27
  description: "Probe the OS clipboard for an image (fallback when Cmd+V is swallowed)",
28
28
  matches: (message) => isBare(message, "paste"),
29
29
  handle: (_, ctx) => {
30
- void ctx.pasteController.triggerClipboardProbe("slash");
30
+ void ctx.pasteController?.triggerClipboardProbe("slash");
31
31
  },
32
+ inline: "none",
32
33
  },
33
34
  {
34
35
  name: "clear-images",
35
36
  description: "Drop pending image attachments before submit",
36
37
  matches: (message) => isBare(message, "clear-images"),
37
38
  handle: (_, ctx) => {
38
- ctx.pasteController.clearPendingImages();
39
+ ctx.pasteController?.clearPendingImages();
39
40
  ctx.appendBlock("[paste]", "cleared pending image attachments", COLORS.system);
40
41
  },
42
+ inline: "none",
41
43
  },
42
44
  {
43
45
  name: "copy",
44
46
  description: "Copy text to your clipboard: /copy [last|all|<N>] (default: last agent reply)",
45
47
  matches: (message) => isInvocation(message, "copy"),
46
48
  handle: (message, ctx) => {
47
- void ctx.copyController.handleCopySlashCommand(message);
49
+ void ctx.copyController?.handleCopySlashCommand(message);
48
50
  },
49
51
  },
50
52
  {
@@ -52,6 +54,7 @@ export const BUILT_IN_SLASH_COMMANDS = [
52
54
  description: "Toggle diagnostic logging (keys, selection events) for surfacing terminal-specific issues",
53
55
  matches: (message) => isInvocation(message, "diag"),
54
56
  handle: handleDiagSlashCommand,
57
+ inline: "none",
55
58
  },
56
59
  {
57
60
  name: "feedback",
@@ -67,8 +70,23 @@ export const BUILT_IN_SLASH_COMMANDS = [
67
70
  matches: (message) => isBare(message, "reset"),
68
71
  handle: (_, ctx) => {
69
72
  ctx.appendBlock("[reset]", "starting a new session…", COLORS.system);
70
- ctx.onReset();
73
+ ctx.onReset?.();
71
74
  },
75
+ inline: "none",
76
+ },
77
+ {
78
+ name: "model",
79
+ description: "Switch the model for the next turn (does not affect the current turn): /model <name>",
80
+ matches: (message) => isInvocation(message, "model"),
81
+ handle: handleModelSlashCommand,
82
+ inline: "token",
83
+ },
84
+ {
85
+ name: "thinking",
86
+ description: "Switch the thinking level for the next turn (minimal|low|medium|high|xhigh): /thinking <level>",
87
+ matches: (message) => isInvocation(message, "thinking"),
88
+ handle: handleThinkingSlashCommand,
89
+ inline: "token",
72
90
  },
73
91
  ];
74
92
  /**
@@ -81,6 +99,23 @@ export const BUILT_IN_SLASH_COMMAND_ITEMS = BUILT_IN_SLASH_COMMANDS.map((command
81
99
  description: command.description,
82
100
  group: "commands",
83
101
  }));
102
+ /**
103
+ * Build the slash-picker catalog from a list of discovered skills. Built-in
104
+ * commands lead, discovered skills follow under the `skills` group. Shared
105
+ * between the initial boot seed and the per-open background reload so both
106
+ * surfaces stay in lockstep.
107
+ */
108
+ export function buildSkillAutocompleteCatalog(skills) {
109
+ return [
110
+ ...BUILT_IN_SLASH_COMMAND_ITEMS,
111
+ ...skills.map((skill) => ({
112
+ name: skill.name,
113
+ description: skill.description,
114
+ path: skill.baseDir,
115
+ group: "skills",
116
+ })),
117
+ ];
118
+ }
84
119
  /**
85
120
  * Routes the message to a local handler when it matches a built-in command.
86
121
  * Returns true when handled (caller must not forward the message to the
@@ -96,6 +131,76 @@ export function tryDispatchSlashCommand(message, ctx) {
96
131
  }
97
132
  return false;
98
133
  }
134
+ /** Escape a literal command name for safe inclusion in a RegExp pattern. */
135
+ function escapeRegex(source) {
136
+ return source.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
137
+ }
138
+ /**
139
+ * Build the global RegExp that matches one inline slash command.
140
+ * Boundary `(^|\s)` keeps `/model` from matching mid-word (e.g. inside
141
+ * a URL `https://example.com/model`) and is captured so the strip step
142
+ * can put the boundary character back — otherwise adjacent words would
143
+ * fuse. For the token shape, group 2 captures the argument and bounds
144
+ * the right edge; the bare shape uses a `\s|$` lookahead for the same
145
+ * reason.
146
+ */
147
+ function inlinePattern(name, shape) {
148
+ const namePattern = escapeRegex(name);
149
+ // Capture group 1 = boundary character (empty at start-of-string, else
150
+ // the one whitespace char before the slash). The replace callback
151
+ // returns it as-is so adjacent words do not fuse after stripping.
152
+ // Token shape additionally captures the next non-whitespace run as
153
+ // the argument; bare shape uses a lookahead for the right edge so
154
+ // neighboring text is not consumed.
155
+ return shape === "token"
156
+ ? new RegExp(`(^|\\s)\\/${namePattern}[ \\t]+(\\S+)`, "g")
157
+ : new RegExp(`(^|\\s)\\/${namePattern}(?=\\s|$)`, "g");
158
+ }
159
+ /**
160
+ * Apply every inline-eligible slash command found inside a longer
161
+ * prompt: fire its handler (so users see the same `[model]` confirmation
162
+ * block they would for a whole-message `/model`), and strip the slash
163
+ * form out of the message so the agent does not have to re-parse local
164
+ * UI commands as user content. The returned `residue` is the message
165
+ * the caller should actually dispatch — callers check `.trim() === ""`
166
+ * to detect the "whole prompt was just slash commands" case and skip
167
+ * the agent turn entirely.
168
+ *
169
+ * Boundary characters are preserved on the inside of the strip so that
170
+ * adjacent words do not fuse: `"hey /model X please"` becomes
171
+ * `"hey please"` mid-strip and then collapses to `"hey please"` at the
172
+ * end. Multi-line prompts keep their newlines.
173
+ */
174
+ export function applyInlineSlashCommands(message, ctx, options = {}) {
175
+ const handledCommands = [];
176
+ let residue = message;
177
+ for (const command of BUILT_IN_SLASH_COMMANDS) {
178
+ if (!command.inline)
179
+ continue;
180
+ if (options.onlyCommands && !options.onlyCommands.has(command.name))
181
+ continue;
182
+ residue = residue.replace(inlinePattern(command.name, command.inline), (_match, lead, arg) => {
183
+ const synthetic = command.inline === "token" && arg ? `/${command.name} ${arg}` : `/${command.name}`;
184
+ command.handle(synthetic, ctx);
185
+ handledCommands.push(command.name);
186
+ // Preserve the boundary character (space, tab, newline, or empty
187
+ // for start-of-string) so words on either side of the stripped
188
+ // command stay separated.
189
+ return lead;
190
+ });
191
+ }
192
+ if (handledCommands.length > 0) {
193
+ // Collapse the holes left by stripped commands. Only flatten runs
194
+ // of spaces/tabs so multi-line prompts keep their newlines, and
195
+ // trim the outer edges to avoid leading/trailing whitespace from a
196
+ // command that sat at the very start or end of the message.
197
+ residue = residue
198
+ .replace(/[ \t]+/g, " ")
199
+ .replace(/ ?\n ?/g, "\n")
200
+ .trim();
201
+ }
202
+ return { handledCommands, residue };
203
+ }
99
204
  /**
100
205
  * `/diag` toggles a key + selection event log so users can show us exactly
101
206
  * what their terminal forwards when something silently fails (a keystroke
@@ -106,6 +211,11 @@ export function tryDispatchSlashCommand(message, ctx) {
106
211
  function handleDiagSlashCommand(raw, ctx) {
107
212
  const argument = raw === "/diag" ? "" : raw.slice("/diag ".length).trim();
108
213
  if (argument === "" || argument === "keys") {
214
+ // `transcriptWriter` is only optional for the non-TUI CLI shim,
215
+ // which filters /diag out before it can run — in the TUI (the only
216
+ // surface that exposes /diag) it is always wired.
217
+ if (!ctx.transcriptWriter)
218
+ return;
109
219
  const enabled = !ctx.transcriptWriter.isKeyDiagnosticsEnabled();
110
220
  ctx.transcriptWriter.setKeyDiagnosticsEnabled(enabled);
111
221
  ctx.appendBlock("[diag]", enabled
@@ -130,12 +240,52 @@ async function handleFeedbackSlashCommand(raw, ctx) {
130
240
  ctx.appendBlock("[feedback]", error instanceof Error ? error.message : String(error), COLORS.error);
131
241
  }
132
242
  }
243
+ /**
244
+ * `/thinking <level>` validates the requested level against the pi-ai
245
+ * `ThinkingLevel` set, then mutates session config so the next prompt
246
+ * picks it up. Like `/model`, the swap is queued for the next turn and
247
+ * does not interrupt the in-flight one.
248
+ */
249
+ function handleThinkingSlashCommand(raw, ctx) {
250
+ const argument = raw === "/thinking" ? "" : raw.slice("/thinking ".length).trim();
251
+ if (!argument) {
252
+ ctx.appendBlock("[thinking]", "Usage: /thinking <level> — one of minimal, low, medium, high, xhigh", COLORS.system);
253
+ return;
254
+ }
255
+ try {
256
+ const { thinkingLevel } = ctx.setThinkingLevel(argument);
257
+ ctx.appendBlock("[thinking]", `next turn will think at ${thinkingLevel}. The current turn (if any) keeps its level.`, COLORS.system);
258
+ }
259
+ catch (error) {
260
+ ctx.appendBlock("[thinking]", error instanceof Error ? error.message : String(error), COLORS.error);
261
+ }
262
+ }
263
+ /**
264
+ * `/model <name>` validates the requested model against the same resolver
265
+ * the CLI uses at boot, then mutates session config so the next prompt
266
+ * picks it up. The handler intentionally does not interrupt or restart
267
+ * an in-flight turn; the swap applies starting at the next user turn.
268
+ */
269
+ function handleModelSlashCommand(raw, ctx) {
270
+ const argument = raw === "/model" ? "" : raw.slice("/model ".length).trim();
271
+ if (!argument) {
272
+ ctx.appendBlock("[model]", "Usage: /model <name> — switch the model for the next turn (e.g. /model sonnet-4.6)", COLORS.system);
273
+ return;
274
+ }
275
+ try {
276
+ const { modelName } = ctx.setModel(argument);
277
+ ctx.appendBlock("[model]", `next turn will use ${modelName}. The current turn (if any) keeps its model.`, COLORS.system);
278
+ }
279
+ catch (error) {
280
+ ctx.appendBlock("[model]", error instanceof Error ? error.message : String(error), COLORS.error);
281
+ }
282
+ }
133
283
  async function handleImageSlashCommand(raw, ctx) {
134
284
  const rest = raw.slice("/image".length).trim();
135
285
  if (!rest) {
136
286
  ctx.appendBlock("[paste]", "Usage: /image <path> — attach a PNG/JPEG/GIF/WebP from disk", COLORS.system);
137
287
  return;
138
288
  }
139
- await ctx.pasteController.attachImageFromPath(rest);
289
+ await ctx.pasteController?.attachImageFromPath(rest);
140
290
  }
141
291
  //# sourceMappingURL=slash-commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/tui/slash-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/tui/slash-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAkChE,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACnC,GAAG,MAAM,CAYT;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,GAAG,MAAM,CA6CT"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAkChE,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACnC,GAAG,MAAM,CAYT;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,GAAG,MAAM,CA8CT"}
@@ -74,6 +74,7 @@ export function createStateMachineSystemPromptLayer(input) {
74
74
  "State prompts and script commands may use template strings like {{ input.email }}. Add inputSchema to states that need template input, and pass matching input when selecting that state.",
75
75
  "Each agent state runs in a fresh sub-agent context. It does not see the prior sub-agent's transcript, tool output, or output value — only the rendered prompt and the input you pass when selecting it. So when a previous state discovered concrete facts the next state will need (file paths, IDs, error messages, decisions, summaries, root causes), you must carry them forward yourself: pass them as `input` when the next state has an inputSchema with matching fields, or use `override.prompt` to inline the findings into that state's prompt before selecting it. Vague references like \"using the findings from the previous step\" in a static prompt will not work — the sub-agent has no way to read those findings. Treat every transition as a chance to update the next state's prompt or input with whatever the orchestrator now knows that the sub-agent will need.",
76
76
  'Poll states run recurring script checks and must set intervalMs. Timer states are separate: use kind "timer" with wakeAt to pause until one absolute Unix epoch millisecond timestamp. Poll states fail the state machine when timeoutMs is exceeded.',
77
+ 'Wait-then-do promises must be backed by a sleeping primitive. If your reply to the user commits to anything shaped like "I\'ll wait N minutes/hours and then X", "give it a moment then check Y", "after CI finishes I\'ll triage Z", or "I\'ll keep an eye on Q", the wait itself must live in a timer state (single future wake) or a poll state (recurring check) on a state machine, with a follow-up agent or script state that does the X/Y/Z work when the wait completes. A pure-agent state machine is not actually waiting — agent states run immediately, so the wait would be skipped. Never make a wait-then-act promise as a bare reply or as a pure-agent state machine: set up the timer/poll mechanism before the turn ends, or do not make the promise.',
77
78
  "Poll intervalMs must be at least 15 minutes and timer wakeAt must be at least 15 minutes in the future. If the work needs anything shorter-term, run it directly in your turn instead of through a state machine — orchestration overhead is not worth it for sub-15-minute waits.",
78
79
  'Every state-machine definition must include at least one terminal state with status "completed" for the happy-path exit. The runner auto-injects "failed" and "cancelled" terminal states when missing, so you always have escape hatches without writing boilerplate terminals.',
79
80
  "Use allowedSkills on agent states only when that sub-agent should receive a restricted skill set.",
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/turn-runner/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/turn-runner/prompts.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,15 @@ export declare class ShellCommandError extends Error {
10
10
  }
11
11
  export interface ShellStateHandle {
12
12
  run(): Promise<ShellCommandOutput>;
13
- interrupt(): void;
13
+ /**
14
+ * Abort the running command and remember why. After `run()` rejects,
15
+ * callers consult `interruptedReason()` to tell our intentional
16
+ * cancellation apart from other shell errors.
17
+ */
18
+ interrupt(reason: string): void;
14
19
  partialOutput(): ShellPartialOutput | undefined;
20
+ /** The reason passed to `interrupt()`, or undefined if not interrupted. */
21
+ interruptedReason(): string | undefined;
15
22
  }
16
23
  export declare function createShellStateHandle(input: {
17
24
  command: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shell-state-handle.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/shell-state-handle.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAE/E,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,QAAQ,CAAC,MAAM,EAAE,kBAAkB;gBADnC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,kBAAkB;CAKtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnC,SAAS,IAAI,IAAI,CAAC;IAClB,aAAa,IAAI,kBAAkB,GAAG,SAAS,CAAC;CACjD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG,gBAAgB,CAoBnB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjD,GACA,OAAO,CAAC,kBAAkB,CAAC,CAyE7B;AAeD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQvF"}
1
+ {"version":3,"file":"shell-state-handle.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/shell-state-handle.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAE/E,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,QAAQ,CAAC,MAAM,EAAE,kBAAkB;gBADnC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,kBAAkB;CAKtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,IAAI,kBAAkB,GAAG,SAAS,CAAC;IAChD,2EAA2E;IAC3E,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG,gBAAgB,CAuBnB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjD,GACA,OAAO,CAAC,kBAAkB,CAAC,CAyE7B;AAeD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQvF"}
@@ -12,6 +12,7 @@ export class ShellCommandError extends Error {
12
12
  export function createShellStateHandle(input) {
13
13
  const abortController = new AbortController();
14
14
  let partial;
15
+ let interruptedReason;
15
16
  return {
16
17
  run: () => runShellCommand(input.command, {
17
18
  cwd: input.cwd,
@@ -22,10 +23,12 @@ export function createShellStateHandle(input) {
22
23
  partial = output;
23
24
  },
24
25
  }),
25
- interrupt: () => {
26
+ interrupt: (reason) => {
27
+ interruptedReason = reason;
26
28
  abortController.abort();
27
29
  },
28
30
  partialOutput: () => partial,
31
+ interruptedReason: () => interruptedReason,
29
32
  };
30
33
  }
31
34
  export async function runShellCommand(command, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"shell-state-handle.js","sourceRoot":"","sources":["../../../src/turn-runner/shell-state-handle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-state-handle.js","sourceRoot":"","sources":["../../../src/turn-runner/shell-state-handle.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,12 @@ export declare class SkillContext {
10
10
  private loaded;
11
11
  constructor(config: TurnRunnerConfig);
12
12
  ensureLoaded(): Promise<void>;
13
+ /**
14
+ * Re-run skill discovery so newly installed skills show up without
15
+ * restarting the session. The initial explicit skill list from
16
+ * `config.skills` is preserved; on-disk discovery is re-read.
17
+ */
18
+ reload(): Promise<void>;
13
19
  getSkills(): readonly Skill[];
14
20
  getSkillCollisions(): readonly SkillCollision[];
15
21
  getSkillInstructions(skillId: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"skill-context.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/skill-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAY;IAKX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAEM,MAAM,EAAE,gBAAgB;IAI/C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnC,SAAS,IAAI,SAAS,KAAK,EAAE;IAI7B,kBAAkB,IAAI,SAAS,cAAc,EAAE;IAI/C,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK7C,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,KAAK,EAAE,GAAG,SAAS;IAY3E,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IA2B/C,oCAAoC,CAAC,KAAK,CAAC,EAAE;QAC3C,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;KAC3B,GAAG,MAAM;IASV,qEAAqE;IACrE,qBAAqB,IAAI,aAAa,EAAE;IAkBxC,OAAO,CAAC,0BAA0B;CAcnC"}
1
+ {"version":3,"file":"skill-context.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/skill-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAY;IAKX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAEM,MAAM,EAAE,gBAAgB;IAI/C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnC;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,SAAS,IAAI,SAAS,KAAK,EAAE;IAI7B,kBAAkB,IAAI,SAAS,cAAc,EAAE;IAI/C,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK7C,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,KAAK,EAAE,GAAG,SAAS;IAY3E,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IA2B/C,oCAAoC,CAAC,KAAK,CAAC,EAAE;QAC3C,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;KAC3B,GAAG,MAAM;IASV,qEAAqE;IACrE,qBAAqB,IAAI,aAAa,EAAE;IAkBxC,OAAO,CAAC,0BAA0B;CAcnC"}
@@ -20,6 +20,18 @@ export class SkillContext {
20
20
  this.skills = mergeSkillsByName(this.skills, discovered.skills);
21
21
  this.collisions = discovered.collisions;
22
22
  }
23
+ /**
24
+ * Re-run skill discovery so newly installed skills show up without
25
+ * restarting the session. The initial explicit skill list from
26
+ * `config.skills` is preserved; on-disk discovery is re-read.
27
+ */
28
+ async reload() {
29
+ const baseline = this.config.skills ? prepareExplicitSkills(this.config.skills) : [];
30
+ const discovered = loadDiscoveredSkills(this.config.skillDiscovery, this.config.cwd ?? process.cwd());
31
+ this.skills = mergeSkillsByName(baseline, discovered.skills);
32
+ this.collisions = discovered.collisions;
33
+ this.loaded = true;
34
+ }
23
35
  getSkills() {
24
36
  return [...this.skills];
25
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill-context.js","sourceRoot":"","sources":["../../../src/turn-runner/skill-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-context.js","sourceRoot":"","sources":["../../../src/turn-runner/skill-context.ts"],"names":[],"mappings":"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"}
@@ -35,10 +35,16 @@ export type StateAgentResult = {
35
35
  export interface StateAgentHandle {
36
36
  /** Starts the state agent from a fresh transcript owned by the host. */
37
37
  prompt(): Promise<StateAgentResult>;
38
- /** Aborts the in-process state agent; persisted state-agent messages are discarded. */
39
- interrupt(): void;
38
+ /**
39
+ * Abort the state agent and remember why. The handle is responsible for
40
+ * making `prompt()` settle as `{ type: "interrupted" }` after this is
41
+ * called — callers do not classify the abort themselves.
42
+ */
43
+ interrupt(reason: string): void;
40
44
  /** Text-only partial output used for interruption history without persisting messages. */
41
45
  partialAssistantText(): string | undefined;
46
+ /** The reason passed to `interrupt()`, or undefined if not interrupted. */
47
+ interruptedReason(): string | undefined;
42
48
  }
43
49
  export type ActiveStateOutput = {
44
50
  state?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"state-machine-controller.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-machine-controller.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-controller.ts"],"names":[],"mappings":"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"}