@selesai/code 0.9.5 → 0.9.8

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 (284) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cli/credential-print.js +4 -4
  3. package/dist/cli.js +0 -0
  4. package/dist/core/agent-session-runtime.js +1 -4
  5. package/dist/core/agent-session.d.ts +2 -0
  6. package/dist/core/agent-session.js +26 -0
  7. package/dist/core/compaction/branch-summarization.js +30 -30
  8. package/dist/core/compaction/compaction.js +81 -81
  9. package/dist/core/compaction/utils.js +2 -2
  10. package/dist/core/export-html/template.css +1066 -1066
  11. package/dist/core/export-html/template.html +55 -55
  12. package/dist/core/export-html/template.js +1864 -1864
  13. package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
  14. package/dist/core/export-html/vendor/marked.min.js +78 -78
  15. package/dist/core/handoff.d.ts +11 -0
  16. package/dist/core/handoff.js +49 -0
  17. package/dist/core/messages.js +7 -7
  18. package/dist/extensions/context-compaction-reminder.test.ts +82 -82
  19. package/dist/extensions/context-compaction-reminder.ts +28 -28
  20. package/dist/extensions/handoff-new.ts +14 -75
  21. package/dist/extensions/pi-intercom/LICENSE +21 -21
  22. package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
  23. package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -387
  24. package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
  25. package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -153
  26. package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
  27. package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
  28. package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
  29. package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
  30. package/dist/extensions/pi-intercom/cwd.ts +31 -31
  31. package/dist/extensions/pi-intercom/extension-api.ts +44 -44
  32. package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
  33. package/dist/extensions/pi-intercom/format-context.ts +32 -32
  34. package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
  35. package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
  36. package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
  37. package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +286 -286
  38. package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +108 -108
  39. package/dist/extensions/pi-powerline-footer/separators.ts +57 -57
  40. package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +47 -47
  41. package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +39 -39
  42. package/dist/extensions/pi-powerline-footer/theme.example.json +24 -24
  43. package/dist/extensions/pi-powerline-footer/theme.json +12 -12
  44. package/dist/extensions/pi-powerline-footer/tps.ts +345 -345
  45. package/dist/extensions/pi-rewind-hook/README.md +245 -245
  46. package/dist/extensions/pi-rewind-hook/index.ts +1445 -1445
  47. package/dist/extensions/pi-rewind-hook/package.json +29 -29
  48. package/dist/extensions/pi-subagents/install.mjs +0 -0
  49. package/dist/extensions/pi-web-agent/package.json +31 -31
  50. package/dist/extensions/pi-web-agent/src/backends/config.ts +205 -205
  51. package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -136
  52. package/dist/extensions/pi-web-agent/src/backends/factory.ts +152 -152
  53. package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
  54. package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
  55. package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
  56. package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +946 -946
  57. package/dist/extensions/pi-web-agent/src/extension.ts +126 -126
  58. package/dist/extensions/pi-web-agent/src/extract/readability.ts +118 -118
  59. package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
  60. package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
  61. package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
  62. package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
  63. package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
  64. package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +50 -50
  65. package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +52 -52
  66. package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +105 -105
  67. package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +45 -45
  68. package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
  69. package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
  70. package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +376 -376
  71. package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +64 -64
  72. package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +181 -181
  73. package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +101 -101
  74. package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
  75. package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
  76. package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
  77. package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +61 -61
  78. package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
  79. package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +41 -41
  80. package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
  81. package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
  82. package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
  83. package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +72 -72
  84. package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
  85. package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
  86. package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
  87. package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
  88. package/dist/extensions/pi-web-agent/src/tools/web-search.ts +157 -157
  89. package/dist/extensions/pi-web-agent/src/types.ts +88 -88
  90. package/dist/extensions/ponytail/package.json +8 -8
  91. package/dist/extensions/question/batch.ts +103 -103
  92. package/dist/extensions/question/constants.ts +30 -30
  93. package/dist/extensions/question/helpers.ts +58 -58
  94. package/dist/extensions/question/navigation.ts +14 -14
  95. package/dist/extensions/question/package.json +19 -19
  96. package/dist/extensions/question/schemas.ts +43 -43
  97. package/dist/extensions/question/selection-mode.ts +46 -46
  98. package/dist/extensions/question/shortcuts.ts +44 -44
  99. package/dist/extensions/question/types.ts +132 -132
  100. package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
  101. package/dist/extensions/test-resolve-hook.mjs +6 -6
  102. package/dist/extensions/web-agent-onboarding.ts +222 -222
  103. package/dist/extensions/workflow/package.json +17 -17
  104. package/dist/modes/interactive/components/model-selector.d.ts +1 -0
  105. package/dist/modes/interactive/components/model-selector.js +8 -4
  106. package/dist/modes/interactive/interactive-mode.js +9 -5
  107. package/dist/modes/rpc/rpc-mode.js +24 -0
  108. package/dist/modes/rpc/rpc-types.d.ts +19 -0
  109. package/dist/package-manager-cli.js +71 -71
  110. package/dist/rpc-entry.js +0 -0
  111. package/dist/skills/agent-browser/SKILL.md +52 -52
  112. package/dist/skills/batch-grill-me/SKILL.md +19 -19
  113. package/dist/skills/grill-me/SKILL.md +10 -10
  114. package/dist/skills/handoff/SKILL.md +16 -16
  115. package/dist/skills/handoff-text/SKILL.md +14 -14
  116. package/dist/skills/implanger/SKILL.md +69 -69
  117. package/dist/skills/improve-codebase/REFERENCE.md +78 -78
  118. package/dist/skills/improve-codebase/SKILL.md +178 -178
  119. package/dist/skills/planger/SKILL.md +166 -166
  120. package/dist/skills/ponytail/SKILL.md +116 -116
  121. package/dist/skills/ponytail-audit/SKILL.md +42 -42
  122. package/dist/skills/ponytail-debt/SKILL.md +45 -45
  123. package/dist/skills/ponytail-gain/SKILL.md +51 -51
  124. package/dist/skills/ponytail-help/SKILL.md +70 -70
  125. package/dist/skills/ponytail-review/SKILL.md +58 -58
  126. package/dist/skills/selesai-handoff/SKILL.md +20 -20
  127. package/dist/skills/workflow-creation/SKILL.md +73 -73
  128. package/dist/themes/powerline-footer/theme.json +33 -33
  129. package/docs/compaction.md +396 -396
  130. package/docs/containerization.md +111 -111
  131. package/docs/development.md +71 -71
  132. package/docs/docs.json +164 -164
  133. package/docs/environment-variables.md +86 -86
  134. package/docs/index.md +83 -83
  135. package/docs/json.md +82 -82
  136. package/docs/models.md +502 -502
  137. package/docs/packages.md +227 -227
  138. package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
  139. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
  140. package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
  141. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
  142. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
  143. package/docs/prompt-templates.md +95 -95
  144. package/docs/providers.md +293 -293
  145. package/docs/sdk.md +1143 -1143
  146. package/docs/security.md +59 -59
  147. package/docs/session-format.md +414 -414
  148. package/docs/sessions.md +145 -145
  149. package/docs/shared-host-extensions.md +109 -109
  150. package/docs/shell-aliases.md +13 -13
  151. package/docs/skills.md +231 -231
  152. package/docs/terminal-setup.md +142 -142
  153. package/docs/termux.md +127 -127
  154. package/docs/themes.md +295 -295
  155. package/docs/tmux.md +63 -63
  156. package/docs/tui.md +927 -927
  157. package/docs/windows.md +17 -17
  158. package/examples/README.md +25 -25
  159. package/examples/extensions/README.md +211 -211
  160. package/examples/extensions/auto-commit-on-exit.ts +49 -49
  161. package/examples/extensions/bash-spawn-hook.ts +30 -30
  162. package/examples/extensions/bookmark.ts +50 -50
  163. package/examples/extensions/border-status-editor.ts +150 -150
  164. package/examples/extensions/built-in-tool-renderer.ts +249 -249
  165. package/examples/extensions/claude-rules.ts +86 -86
  166. package/examples/extensions/commands.ts +72 -72
  167. package/examples/extensions/confirm-destructive.ts +59 -59
  168. package/examples/extensions/custom-compaction.ts +130 -130
  169. package/examples/extensions/custom-footer.ts +64 -64
  170. package/examples/extensions/custom-header.ts +73 -73
  171. package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
  172. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
  173. package/examples/extensions/custom-provider-anthropic/package.json +19 -19
  174. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
  175. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
  176. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
  177. package/examples/extensions/dirty-repo-guard.ts +56 -56
  178. package/examples/extensions/doom-overlay/README.md +46 -46
  179. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
  180. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  181. package/examples/extensions/doom-overlay/doom/build.sh +152 -152
  182. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
  183. package/examples/extensions/doom-overlay/doom-component.ts +132 -132
  184. package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
  185. package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
  186. package/examples/extensions/doom-overlay/index.ts +74 -74
  187. package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
  188. package/examples/extensions/dynamic-resources/SKILL.md +8 -8
  189. package/examples/extensions/dynamic-resources/dynamic.json +79 -79
  190. package/examples/extensions/dynamic-resources/dynamic.md +5 -5
  191. package/examples/extensions/dynamic-resources/index.ts +15 -15
  192. package/examples/extensions/dynamic-tools.ts +74 -74
  193. package/examples/extensions/event-bus.ts +43 -43
  194. package/examples/extensions/file-trigger.ts +41 -41
  195. package/examples/extensions/git-checkpoint.ts +53 -53
  196. package/examples/extensions/git-merge-and-resolve.ts +115 -115
  197. package/examples/extensions/github-issue-autocomplete.ts +185 -185
  198. package/examples/extensions/gondolin/index.ts +531 -531
  199. package/examples/extensions/gondolin/package-lock.json +185 -185
  200. package/examples/extensions/gondolin/package.json +19 -19
  201. package/examples/extensions/handoff.ts +199 -199
  202. package/examples/extensions/hello.ts +26 -26
  203. package/examples/extensions/hidden-thinking-label.ts +53 -53
  204. package/examples/extensions/inline-bash.ts +94 -94
  205. package/examples/extensions/input-transform-streaming.ts +39 -39
  206. package/examples/extensions/input-transform.ts +43 -43
  207. package/examples/extensions/interactive-shell.ts +196 -196
  208. package/examples/extensions/mac-system-theme.ts +47 -47
  209. package/examples/extensions/message-renderer.ts +59 -59
  210. package/examples/extensions/minimal-mode.ts +426 -426
  211. package/examples/extensions/modal-editor.ts +85 -85
  212. package/examples/extensions/model-status.ts +31 -31
  213. package/examples/extensions/notify.ts +55 -55
  214. package/examples/extensions/overlay-qa-tests.ts +1450 -1450
  215. package/examples/extensions/overlay-test.ts +153 -153
  216. package/examples/extensions/permission-gate.ts +34 -34
  217. package/examples/extensions/pirate.ts +47 -47
  218. package/examples/extensions/plan-mode/README.md +66 -66
  219. package/examples/extensions/plan-mode/index.ts +390 -390
  220. package/examples/extensions/plan-mode/utils.ts +168 -168
  221. package/examples/extensions/preset.ts +436 -436
  222. package/examples/extensions/project-trust.ts +64 -64
  223. package/examples/extensions/prompt-customizer.ts +97 -97
  224. package/examples/extensions/protected-paths.ts +30 -30
  225. package/examples/extensions/provider-payload.ts +18 -18
  226. package/examples/extensions/qna.ts +122 -122
  227. package/examples/extensions/question.ts +285 -285
  228. package/examples/extensions/questionnaire.ts +448 -448
  229. package/examples/extensions/rainbow-editor.ts +88 -88
  230. package/examples/extensions/reload-runtime.ts +37 -37
  231. package/examples/extensions/rpc-demo.ts +118 -118
  232. package/examples/extensions/sandbox/index.ts +321 -321
  233. package/examples/extensions/sandbox/package-lock.json +92 -92
  234. package/examples/extensions/sandbox/package.json +19 -19
  235. package/examples/extensions/send-user-message.ts +97 -97
  236. package/examples/extensions/session-name.ts +27 -27
  237. package/examples/extensions/shutdown-command.ts +63 -63
  238. package/examples/extensions/snake.ts +343 -343
  239. package/examples/extensions/space-invaders.ts +560 -560
  240. package/examples/extensions/ssh.ts +220 -220
  241. package/examples/extensions/status-line.ts +32 -32
  242. package/examples/extensions/structured-output.ts +65 -65
  243. package/examples/extensions/subagent/README.md +175 -175
  244. package/examples/extensions/subagent/agents/planner.md +37 -37
  245. package/examples/extensions/subagent/agents/reviewer.md +35 -35
  246. package/examples/extensions/subagent/agents/scout.md +50 -50
  247. package/examples/extensions/subagent/agents/worker.md +24 -24
  248. package/examples/extensions/subagent/agents.ts +126 -126
  249. package/examples/extensions/subagent/index.ts +1015 -1015
  250. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
  251. package/examples/extensions/subagent/prompts/implement.md +10 -10
  252. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
  253. package/examples/extensions/summarize.ts +209 -209
  254. package/examples/extensions/system-prompt-header.ts +17 -17
  255. package/examples/extensions/tic-tac-toe.ts +1008 -1008
  256. package/examples/extensions/timed-confirm.ts +70 -70
  257. package/examples/extensions/titlebar-spinner.ts +58 -58
  258. package/examples/extensions/todo.ts +297 -297
  259. package/examples/extensions/tool-override.ts +144 -144
  260. package/examples/extensions/tools.ts +146 -146
  261. package/examples/extensions/trigger-compact.ts +50 -50
  262. package/examples/extensions/truncated-tool.ts +195 -195
  263. package/examples/extensions/widget-placement.ts +9 -9
  264. package/examples/extensions/with-deps/index.ts +32 -32
  265. package/examples/extensions/with-deps/package-lock.json +31 -31
  266. package/examples/extensions/with-deps/package.json +22 -22
  267. package/examples/extensions/working-indicator.ts +123 -123
  268. package/examples/extensions/working-message-test.ts +25 -25
  269. package/examples/rpc-extension-ui.ts +632 -632
  270. package/examples/sdk/01-minimal.ts +26 -26
  271. package/examples/sdk/02-custom-model.ts +53 -53
  272. package/examples/sdk/03-custom-prompt.ts +75 -75
  273. package/examples/sdk/04-skills.ts +55 -55
  274. package/examples/sdk/05-tools.ts +48 -48
  275. package/examples/sdk/06-extensions.ts +99 -99
  276. package/examples/sdk/07-context-files.ts +47 -47
  277. package/examples/sdk/08-prompt-templates.ts +51 -51
  278. package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
  279. package/examples/sdk/10-settings.ts +53 -53
  280. package/examples/sdk/11-sessions.ts +52 -52
  281. package/examples/sdk/12-full-control.ts +79 -79
  282. package/examples/sdk/13-session-runtime.ts +67 -67
  283. package/examples/sdk/README.md +144 -144
  284. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to `@selesai/code` will be documented in this file.
4
4
 
5
+ ## [0.9.8] - 2026-08-25
6
+
7
+ ### Added
8
+ - **RPC session handoff.** RPC clients can now use `handoff_new` to summarize the current session and start a clean child session seeded with the generated handoff, optionally tailored to a goal.
9
+
10
+ ### Changed
11
+ - **Shared handoff generation.** Handoff context and summary generation now live in reusable core code shared by the TUI extension and RPC mode.
12
+
13
+ ## [0.9.7] - 2026-08-25
14
+
15
+ ### Added
16
+ - **RPC queue state and replacement.** RPC `get_state` now exposes pending steering and follow-up messages, and the new `replace_queue` command replaces both queues while preserving their routing. Parent sessions created through RPC are now passed directly to the session manager.
17
+
18
+ ## [0.9.6] - 2026-08-23
19
+
20
+ ### Fixed
21
+ - **Vision caption model selector.** Opening the selector from `/settings` now shows the available image-capable models instead of filtering the list by the configured model ID, highlights the current caption model, and preserves the Disabled option when switching model scopes.
22
+
5
23
  ## [0.9.5] - 2026-08-23
6
24
 
7
25
  ### Added
@@ -7,10 +7,10 @@ export function isCredentialPrintHelp(args) {
7
7
  return (args[0] === "auth" && (args[1] === undefined || args[1] === "help" || args[1] === "--help" || args[1] === "-h"));
8
8
  }
9
9
  export function printCredentialPrintHelp() {
10
- console.log(`Usage:
11
- ${APP_NAME} auth print-api-key --model <model> [--provider <provider>]
12
- ${APP_NAME} auth print-bearer-token --model <model> [--provider <provider>] [--min-expiry <duration>]
13
-
10
+ console.log(`Usage:
11
+ ${APP_NAME} auth print-api-key --model <model> [--provider <provider>]
12
+ ${APP_NAME} auth print-bearer-token --model <model> [--provider <provider>] [--min-expiry <duration>]
13
+
14
14
  Prints the configured credential alone on stdout. Provider inference uses configured credentials; specify --provider to select explicitly. Bearer tokens have a 30-minute minimum expiry by default. --min-expiry accepts ms, s, m, or h (for example, 30m).`);
15
15
  }
16
16
  /** Parse the auth command surface before normal startup. */
package/dist/cli.js CHANGED
File without changes
@@ -152,11 +152,8 @@ export class AgentSessionRuntime {
152
152
  const previousSessionFile = this.session.sessionFile;
153
153
  const sessionDir = this.session.sessionManager.getSessionDir();
154
154
  const sessionManager = this.session.sessionManager.isPersisted()
155
- ? SessionManager.create(this.cwd, sessionDir)
155
+ ? SessionManager.create(this.cwd, sessionDir, { parentSession: options?.parentSession })
156
156
  : SessionManager.inMemory(this.cwd);
157
- if (options?.parentSession) {
158
- sessionManager.newSession({ parentSession: options.parentSession });
159
- }
160
157
  await this.teardownCurrent("new", sessionManager.getSessionFile());
161
158
  this.apply(await this.createRuntime({
162
159
  cwd: this.cwd,
@@ -458,6 +458,8 @@ export declare class AgentSession {
458
458
  steering: string[];
459
459
  followUp: string[];
460
460
  };
461
+ /** Replace pending messages without changing their steer/follow-up routing. */
462
+ replaceQueue(steering: readonly string[], followUp: readonly string[]): void;
461
463
  /** Number of pending messages (includes both steering and follow-up) */
462
464
  get pendingMessageCount(): number;
463
465
  /** Get pending steering messages (read-only) */
@@ -972,6 +972,21 @@ export class AgentSession {
972
972
  this._systemPromptOverride = undefined;
973
973
  this.agent.state.systemPrompt = this._baseSystemPrompt;
974
974
  }
975
+ // Another prompt may have started while this one was preflighting (auth
976
+ // checks, compaction, and extension events can take seconds). The agent is
977
+ // now streaming, so queue instead of racing the active run: the RPC layer
978
+ // has already reported preflight success, so throwing here would silently
979
+ // drop the message. Default to a follow-up so it runs after the current turn.
980
+ if (this.isStreaming) {
981
+ if (options?.streamingBehavior === "steer") {
982
+ await this._queueSteer(expandedText, currentImages);
983
+ }
984
+ else {
985
+ await this._queueFollowUp(expandedText, currentImages);
986
+ }
987
+ preflightResult?.(true);
988
+ return;
989
+ }
975
990
  }
976
991
  catch (error) {
977
992
  preflightResult?.(false);
@@ -1363,6 +1378,17 @@ export class AgentSession {
1363
1378
  this._emitQueueUpdate();
1364
1379
  return { steering, followUp };
1365
1380
  }
1381
+ /** Replace pending messages without changing their steer/follow-up routing. */
1382
+ replaceQueue(steering, followUp) {
1383
+ this._steeringMessages = [...steering];
1384
+ this._followUpMessages = [...followUp];
1385
+ this.agent.clearAllQueues();
1386
+ for (const text of steering)
1387
+ this.agent.steer({ role: "user", content: [{ type: "text", text }], timestamp: Date.now() });
1388
+ for (const text of followUp)
1389
+ this.agent.followUp({ role: "user", content: [{ type: "text", text }], timestamp: Date.now() });
1390
+ this._emitQueueUpdate();
1391
+ }
1366
1392
  /** Number of pending messages (includes both steering and follow-up) */
1367
1393
  get pendingMessageCount() {
1368
1394
  return this._steeringMessages.length + this._followUpMessages.length;
@@ -146,37 +146,37 @@ export function prepareBranchEntries(entries, tokenBudget = 0) {
146
146
  // ============================================================================
147
147
  // Summary Generation
148
148
  // ============================================================================
149
- const BRANCH_SUMMARY_PREAMBLE = `The user explored a different conversation branch before returning here.
150
- Summary of that exploration:
151
-
149
+ const BRANCH_SUMMARY_PREAMBLE = `The user explored a different conversation branch before returning here.
150
+ Summary of that exploration:
151
+
152
152
  `;
153
- const BRANCH_SUMMARY_PROMPT = `Create a structured summary of this conversation branch for context when returning later.
154
-
155
- Use this EXACT format:
156
-
157
- ## Goal
158
- [What was the user trying to accomplish in this branch?]
159
-
160
- ## Constraints & Preferences
161
- - [Any constraints, preferences, or requirements mentioned]
162
- - [Or "(none)" if none were mentioned]
163
-
164
- ## Progress
165
- ### Done
166
- - [x] [Completed tasks/changes]
167
-
168
- ### In Progress
169
- - [ ] [Work that was started but not finished]
170
-
171
- ### Blocked
172
- - [Issues preventing progress, if any]
173
-
174
- ## Key Decisions
175
- - **[Decision]**: [Brief rationale]
176
-
177
- ## Next Steps
178
- 1. [What should happen next to continue this work]
179
-
153
+ const BRANCH_SUMMARY_PROMPT = `Create a structured summary of this conversation branch for context when returning later.
154
+
155
+ Use this EXACT format:
156
+
157
+ ## Goal
158
+ [What was the user trying to accomplish in this branch?]
159
+
160
+ ## Constraints & Preferences
161
+ - [Any constraints, preferences, or requirements mentioned]
162
+ - [Or "(none)" if none were mentioned]
163
+
164
+ ## Progress
165
+ ### Done
166
+ - [x] [Completed tasks/changes]
167
+
168
+ ### In Progress
169
+ - [ ] [Work that was started but not finished]
170
+
171
+ ### Blocked
172
+ - [Issues preventing progress, if any]
173
+
174
+ ## Key Decisions
175
+ - **[Decision]**: [Brief rationale]
176
+
177
+ ## Next Steps
178
+ 1. [What should happen next to continue this work]
179
+
180
180
  Keep each section concise. Preserve exact file paths, function names, and error messages.`;
181
181
  /**
182
182
  * Generate a summary of abandoned branch entries.
@@ -353,75 +353,75 @@ export function findCutPoint(entries, startIndex, endIndex, keepRecentTokens) {
353
353
  // ============================================================================
354
354
  // Summarization
355
355
  // ============================================================================
356
- const SUMMARIZATION_PROMPT = `The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.
357
-
358
- Use this EXACT format:
359
-
360
- ## Goal
361
- [What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]
362
-
363
- ## Constraints & Preferences
364
- - [Any constraints, preferences, or requirements mentioned by user]
365
- - [Or "(none)" if none were mentioned]
366
-
367
- ## Progress
368
- ### Done
369
- - [x] [Completed tasks/changes]
370
-
371
- ### In Progress
372
- - [ ] [Current work]
373
-
374
- ### Blocked
375
- - [Issues preventing progress, if any]
376
-
377
- ## Key Decisions
378
- - **[Decision]**: [Brief rationale]
379
-
380
- ## Next Steps
381
- 1. [Ordered list of what should happen next]
382
-
383
- ## Critical Context
384
- - [Any data, examples, or references needed to continue]
385
- - [Or "(none)" if not applicable]
386
-
356
+ const SUMMARIZATION_PROMPT = `The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.
357
+
358
+ Use this EXACT format:
359
+
360
+ ## Goal
361
+ [What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]
362
+
363
+ ## Constraints & Preferences
364
+ - [Any constraints, preferences, or requirements mentioned by user]
365
+ - [Or "(none)" if none were mentioned]
366
+
367
+ ## Progress
368
+ ### Done
369
+ - [x] [Completed tasks/changes]
370
+
371
+ ### In Progress
372
+ - [ ] [Current work]
373
+
374
+ ### Blocked
375
+ - [Issues preventing progress, if any]
376
+
377
+ ## Key Decisions
378
+ - **[Decision]**: [Brief rationale]
379
+
380
+ ## Next Steps
381
+ 1. [Ordered list of what should happen next]
382
+
383
+ ## Critical Context
384
+ - [Any data, examples, or references needed to continue]
385
+ - [Or "(none)" if not applicable]
386
+
387
387
  Keep each section concise. Preserve exact file paths, function names, and error messages.`;
388
- const UPDATE_SUMMARIZATION_PROMPT = `The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.
389
-
390
- Update the existing structured summary with new information. RULES:
391
- - PRESERVE all existing information from the previous summary
392
- - ADD new progress, decisions, and context from the new messages
393
- - UPDATE the Progress section: move items from "In Progress" to "Done" when completed
394
- - UPDATE "Next Steps" based on what was accomplished
395
- - PRESERVE exact file paths, function names, and error messages
396
- - If something is no longer relevant, you may remove it
397
-
398
- Use this EXACT format:
399
-
400
- ## Goal
401
- [Preserve existing goals, add new ones if the task expanded]
402
-
403
- ## Constraints & Preferences
404
- - [Preserve existing, add new ones discovered]
405
-
406
- ## Progress
407
- ### Done
408
- - [x] [Include previously done items AND newly completed items]
409
-
410
- ### In Progress
411
- - [ ] [Current work - update based on progress]
412
-
413
- ### Blocked
414
- - [Current blockers - remove if resolved]
415
-
416
- ## Key Decisions
417
- - **[Decision]**: [Brief rationale] (preserve all previous, add new)
418
-
419
- ## Next Steps
420
- 1. [Update based on current state]
421
-
422
- ## Critical Context
423
- - [Preserve important context, add new if needed]
424
-
388
+ const UPDATE_SUMMARIZATION_PROMPT = `The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.
389
+
390
+ Update the existing structured summary with new information. RULES:
391
+ - PRESERVE all existing information from the previous summary
392
+ - ADD new progress, decisions, and context from the new messages
393
+ - UPDATE the Progress section: move items from "In Progress" to "Done" when completed
394
+ - UPDATE "Next Steps" based on what was accomplished
395
+ - PRESERVE exact file paths, function names, and error messages
396
+ - If something is no longer relevant, you may remove it
397
+
398
+ Use this EXACT format:
399
+
400
+ ## Goal
401
+ [Preserve existing goals, add new ones if the task expanded]
402
+
403
+ ## Constraints & Preferences
404
+ - [Preserve existing, add new ones discovered]
405
+
406
+ ## Progress
407
+ ### Done
408
+ - [x] [Include previously done items AND newly completed items]
409
+
410
+ ### In Progress
411
+ - [ ] [Current work - update based on progress]
412
+
413
+ ### Blocked
414
+ - [Current blockers - remove if resolved]
415
+
416
+ ## Key Decisions
417
+ - **[Decision]**: [Brief rationale] (preserve all previous, add new)
418
+
419
+ ## Next Steps
420
+ 1. [Update based on current state]
421
+
422
+ ## Critical Context
423
+ - [Preserve important context, add new if needed]
424
+
425
425
  Keep each section concise. Preserve exact file paths, function names, and error messages.`;
426
426
  function createSummarizationOptions(model, maxTokens, apiKey, headers, env, signal, thinkingLevel) {
427
427
  const options = { maxTokens, signal, apiKey, headers, env };
@@ -559,19 +559,19 @@ export function prepareCompaction(pathEntries, settings) {
559
559
  // ============================================================================
560
560
  // Main compaction function
561
561
  // ============================================================================
562
- const TURN_PREFIX_SUMMARIZATION_PROMPT = `This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.
563
-
564
- Summarize the prefix to provide context for the retained suffix:
565
-
566
- ## Original Request
567
- [What did the user ask for in this turn?]
568
-
569
- ## Early Progress
570
- - [Key decisions and work done in the prefix]
571
-
572
- ## Context for Suffix
573
- - [Information needed to understand the retained recent work]
574
-
562
+ const TURN_PREFIX_SUMMARIZATION_PROMPT = `This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.
563
+
564
+ Summarize the prefix to provide context for the retained suffix:
565
+
566
+ ## Original Request
567
+ [What did the user ask for in this turn?]
568
+
569
+ ## Early Progress
570
+ - [Key decisions and work done in the prefix]
571
+
572
+ ## Context for Suffix
573
+ - [Information needed to understand the retained recent work]
574
+
575
575
  Be concise. Focus on what's needed to understand the kept suffix.`;
576
576
  /**
577
577
  * Generate summaries for compaction using prepared data.
@@ -136,6 +136,6 @@ export function serializeConversation(messages) {
136
136
  // ============================================================================
137
137
  // Summarization System Prompt
138
138
  // ============================================================================
139
- export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.
140
-
139
+ export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.
140
+
141
141
  Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;