@selesai/code 0.9.6 → 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 (281) hide show
  1. package/CHANGELOG.md +13 -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/rpc/rpc-mode.js +24 -0
  105. package/dist/modes/rpc/rpc-types.d.ts +19 -0
  106. package/dist/package-manager-cli.js +71 -71
  107. package/dist/rpc-entry.js +0 -0
  108. package/dist/skills/agent-browser/SKILL.md +52 -52
  109. package/dist/skills/batch-grill-me/SKILL.md +19 -19
  110. package/dist/skills/grill-me/SKILL.md +10 -10
  111. package/dist/skills/handoff/SKILL.md +16 -16
  112. package/dist/skills/handoff-text/SKILL.md +14 -14
  113. package/dist/skills/implanger/SKILL.md +69 -69
  114. package/dist/skills/improve-codebase/REFERENCE.md +78 -78
  115. package/dist/skills/improve-codebase/SKILL.md +178 -178
  116. package/dist/skills/planger/SKILL.md +166 -166
  117. package/dist/skills/ponytail/SKILL.md +116 -116
  118. package/dist/skills/ponytail-audit/SKILL.md +42 -42
  119. package/dist/skills/ponytail-debt/SKILL.md +45 -45
  120. package/dist/skills/ponytail-gain/SKILL.md +51 -51
  121. package/dist/skills/ponytail-help/SKILL.md +70 -70
  122. package/dist/skills/ponytail-review/SKILL.md +58 -58
  123. package/dist/skills/selesai-handoff/SKILL.md +20 -20
  124. package/dist/skills/workflow-creation/SKILL.md +73 -73
  125. package/dist/themes/powerline-footer/theme.json +33 -33
  126. package/docs/compaction.md +396 -396
  127. package/docs/containerization.md +111 -111
  128. package/docs/development.md +71 -71
  129. package/docs/docs.json +164 -164
  130. package/docs/environment-variables.md +86 -86
  131. package/docs/index.md +83 -83
  132. package/docs/json.md +82 -82
  133. package/docs/models.md +502 -502
  134. package/docs/packages.md +227 -227
  135. package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
  136. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
  137. package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
  138. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
  139. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
  140. package/docs/prompt-templates.md +95 -95
  141. package/docs/providers.md +293 -293
  142. package/docs/sdk.md +1143 -1143
  143. package/docs/security.md +59 -59
  144. package/docs/session-format.md +414 -414
  145. package/docs/sessions.md +145 -145
  146. package/docs/shared-host-extensions.md +109 -109
  147. package/docs/shell-aliases.md +13 -13
  148. package/docs/skills.md +231 -231
  149. package/docs/terminal-setup.md +142 -142
  150. package/docs/termux.md +127 -127
  151. package/docs/themes.md +295 -295
  152. package/docs/tmux.md +63 -63
  153. package/docs/tui.md +927 -927
  154. package/docs/windows.md +17 -17
  155. package/examples/README.md +25 -25
  156. package/examples/extensions/README.md +211 -211
  157. package/examples/extensions/auto-commit-on-exit.ts +49 -49
  158. package/examples/extensions/bash-spawn-hook.ts +30 -30
  159. package/examples/extensions/bookmark.ts +50 -50
  160. package/examples/extensions/border-status-editor.ts +150 -150
  161. package/examples/extensions/built-in-tool-renderer.ts +249 -249
  162. package/examples/extensions/claude-rules.ts +86 -86
  163. package/examples/extensions/commands.ts +72 -72
  164. package/examples/extensions/confirm-destructive.ts +59 -59
  165. package/examples/extensions/custom-compaction.ts +130 -130
  166. package/examples/extensions/custom-footer.ts +64 -64
  167. package/examples/extensions/custom-header.ts +73 -73
  168. package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
  169. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
  170. package/examples/extensions/custom-provider-anthropic/package.json +19 -19
  171. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
  172. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
  173. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
  174. package/examples/extensions/dirty-repo-guard.ts +56 -56
  175. package/examples/extensions/doom-overlay/README.md +46 -46
  176. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
  177. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  178. package/examples/extensions/doom-overlay/doom/build.sh +152 -152
  179. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
  180. package/examples/extensions/doom-overlay/doom-component.ts +132 -132
  181. package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
  182. package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
  183. package/examples/extensions/doom-overlay/index.ts +74 -74
  184. package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
  185. package/examples/extensions/dynamic-resources/SKILL.md +8 -8
  186. package/examples/extensions/dynamic-resources/dynamic.json +79 -79
  187. package/examples/extensions/dynamic-resources/dynamic.md +5 -5
  188. package/examples/extensions/dynamic-resources/index.ts +15 -15
  189. package/examples/extensions/dynamic-tools.ts +74 -74
  190. package/examples/extensions/event-bus.ts +43 -43
  191. package/examples/extensions/file-trigger.ts +41 -41
  192. package/examples/extensions/git-checkpoint.ts +53 -53
  193. package/examples/extensions/git-merge-and-resolve.ts +115 -115
  194. package/examples/extensions/github-issue-autocomplete.ts +185 -185
  195. package/examples/extensions/gondolin/index.ts +531 -531
  196. package/examples/extensions/gondolin/package-lock.json +185 -185
  197. package/examples/extensions/gondolin/package.json +19 -19
  198. package/examples/extensions/handoff.ts +199 -199
  199. package/examples/extensions/hello.ts +26 -26
  200. package/examples/extensions/hidden-thinking-label.ts +53 -53
  201. package/examples/extensions/inline-bash.ts +94 -94
  202. package/examples/extensions/input-transform-streaming.ts +39 -39
  203. package/examples/extensions/input-transform.ts +43 -43
  204. package/examples/extensions/interactive-shell.ts +196 -196
  205. package/examples/extensions/mac-system-theme.ts +47 -47
  206. package/examples/extensions/message-renderer.ts +59 -59
  207. package/examples/extensions/minimal-mode.ts +426 -426
  208. package/examples/extensions/modal-editor.ts +85 -85
  209. package/examples/extensions/model-status.ts +31 -31
  210. package/examples/extensions/notify.ts +55 -55
  211. package/examples/extensions/overlay-qa-tests.ts +1450 -1450
  212. package/examples/extensions/overlay-test.ts +153 -153
  213. package/examples/extensions/permission-gate.ts +34 -34
  214. package/examples/extensions/pirate.ts +47 -47
  215. package/examples/extensions/plan-mode/README.md +66 -66
  216. package/examples/extensions/plan-mode/index.ts +390 -390
  217. package/examples/extensions/plan-mode/utils.ts +168 -168
  218. package/examples/extensions/preset.ts +436 -436
  219. package/examples/extensions/project-trust.ts +64 -64
  220. package/examples/extensions/prompt-customizer.ts +97 -97
  221. package/examples/extensions/protected-paths.ts +30 -30
  222. package/examples/extensions/provider-payload.ts +18 -18
  223. package/examples/extensions/qna.ts +122 -122
  224. package/examples/extensions/question.ts +285 -285
  225. package/examples/extensions/questionnaire.ts +448 -448
  226. package/examples/extensions/rainbow-editor.ts +88 -88
  227. package/examples/extensions/reload-runtime.ts +37 -37
  228. package/examples/extensions/rpc-demo.ts +118 -118
  229. package/examples/extensions/sandbox/index.ts +321 -321
  230. package/examples/extensions/sandbox/package-lock.json +92 -92
  231. package/examples/extensions/sandbox/package.json +19 -19
  232. package/examples/extensions/send-user-message.ts +97 -97
  233. package/examples/extensions/session-name.ts +27 -27
  234. package/examples/extensions/shutdown-command.ts +63 -63
  235. package/examples/extensions/snake.ts +343 -343
  236. package/examples/extensions/space-invaders.ts +560 -560
  237. package/examples/extensions/ssh.ts +220 -220
  238. package/examples/extensions/status-line.ts +32 -32
  239. package/examples/extensions/structured-output.ts +65 -65
  240. package/examples/extensions/subagent/README.md +175 -175
  241. package/examples/extensions/subagent/agents/planner.md +37 -37
  242. package/examples/extensions/subagent/agents/reviewer.md +35 -35
  243. package/examples/extensions/subagent/agents/scout.md +50 -50
  244. package/examples/extensions/subagent/agents/worker.md +24 -24
  245. package/examples/extensions/subagent/agents.ts +126 -126
  246. package/examples/extensions/subagent/index.ts +1015 -1015
  247. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
  248. package/examples/extensions/subagent/prompts/implement.md +10 -10
  249. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
  250. package/examples/extensions/summarize.ts +209 -209
  251. package/examples/extensions/system-prompt-header.ts +17 -17
  252. package/examples/extensions/tic-tac-toe.ts +1008 -1008
  253. package/examples/extensions/timed-confirm.ts +70 -70
  254. package/examples/extensions/titlebar-spinner.ts +58 -58
  255. package/examples/extensions/todo.ts +297 -297
  256. package/examples/extensions/tool-override.ts +144 -144
  257. package/examples/extensions/tools.ts +146 -146
  258. package/examples/extensions/trigger-compact.ts +50 -50
  259. package/examples/extensions/truncated-tool.ts +195 -195
  260. package/examples/extensions/widget-placement.ts +9 -9
  261. package/examples/extensions/with-deps/index.ts +32 -32
  262. package/examples/extensions/with-deps/package-lock.json +31 -31
  263. package/examples/extensions/with-deps/package.json +22 -22
  264. package/examples/extensions/working-indicator.ts +123 -123
  265. package/examples/extensions/working-message-test.ts +25 -25
  266. package/examples/rpc-extension-ui.ts +632 -632
  267. package/examples/sdk/01-minimal.ts +26 -26
  268. package/examples/sdk/02-custom-model.ts +53 -53
  269. package/examples/sdk/03-custom-prompt.ts +75 -75
  270. package/examples/sdk/04-skills.ts +55 -55
  271. package/examples/sdk/05-tools.ts +48 -48
  272. package/examples/sdk/06-extensions.ts +99 -99
  273. package/examples/sdk/07-context-files.ts +47 -47
  274. package/examples/sdk/08-prompt-templates.ts +51 -51
  275. package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
  276. package/examples/sdk/10-settings.ts +53 -53
  277. package/examples/sdk/11-sessions.ts +52 -52
  278. package/examples/sdk/12-full-control.ts +79 -79
  279. package/examples/sdk/13-session-runtime.ts +67 -67
  280. package/examples/sdk/README.md +144 -144
  281. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
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
+
5
18
  ## [0.9.6] - 2026-08-23
6
19
 
7
20
  ### Fixed
@@ -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.`;