@qduc/term2 0.31.1 → 0.32.1

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 (294) hide show
  1. package/README.md +52 -370
  2. package/dist/agent.d.ts +2 -1
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +11 -1
  5. package/dist/agent.js.map +1 -1
  6. package/dist/app.d.ts +3 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +44 -4
  9. package/dist/app.js.map +1 -1
  10. package/dist/build-info.json +2 -2
  11. package/dist/cli.js +13 -3
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/goal-command.d.ts.map +1 -1
  14. package/dist/commands/goal-command.js +9 -8
  15. package/dist/commands/goal-command.js.map +1 -1
  16. package/dist/commands/retry-failed-turn-command.d.ts.map +1 -1
  17. package/dist/commands/retry-failed-turn-command.js +3 -4
  18. package/dist/commands/retry-failed-turn-command.js.map +1 -1
  19. package/dist/components/InputBox.js +16 -9
  20. package/dist/components/InputBox.js.map +1 -1
  21. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  22. package/dist/components/layout/BackgroundTasksPanel.js +6 -8
  23. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  24. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  25. package/dist/components/layout/BottomArea.js +13 -11
  26. package/dist/components/layout/BottomArea.js.map +1 -1
  27. package/dist/components/message/MessageList.d.ts +3 -1
  28. package/dist/components/message/MessageList.d.ts.map +1 -1
  29. package/dist/components/message/MessageList.js +5 -2
  30. package/dist/components/message/MessageList.js.map +1 -1
  31. package/dist/components/message/SessionBoundary.d.ts +11 -0
  32. package/dist/components/message/SessionBoundary.d.ts.map +1 -0
  33. package/dist/components/message/SessionBoundary.js +22 -0
  34. package/dist/components/message/SessionBoundary.js.map +1 -0
  35. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  36. package/dist/components/prompt/ApprovalPrompt.js +22 -1
  37. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  38. package/dist/contracts/provider-input.d.ts +10 -0
  39. package/dist/contracts/provider-input.d.ts.map +1 -1
  40. package/dist/contracts/provider-input.js.map +1 -1
  41. package/dist/contracts/run-termination.d.ts +3 -1
  42. package/dist/contracts/run-termination.d.ts.map +1 -1
  43. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  44. package/dist/hooks/settings-completion-config.js +1 -0
  45. package/dist/hooks/settings-completion-config.js.map +1 -1
  46. package/dist/lib/agent-chat-service.d.ts +6 -0
  47. package/dist/lib/agent-chat-service.d.ts.map +1 -1
  48. package/dist/lib/agent-chat-service.js +29 -5
  49. package/dist/lib/agent-chat-service.js.map +1 -1
  50. package/dist/lib/agent-client.d.ts +6 -0
  51. package/dist/lib/agent-client.d.ts.map +1 -1
  52. package/dist/lib/agent-client.js +82 -24
  53. package/dist/lib/agent-client.js.map +1 -1
  54. package/dist/lib/agent-configuration.d.ts +7 -3
  55. package/dist/lib/agent-configuration.d.ts.map +1 -1
  56. package/dist/lib/agent-configuration.js +10 -4
  57. package/dist/lib/agent-configuration.js.map +1 -1
  58. package/dist/lib/agent-factory.d.ts.map +1 -1
  59. package/dist/lib/agent-factory.js +15 -4
  60. package/dist/lib/agent-factory.js.map +1 -1
  61. package/dist/non-interactive.d.ts +5 -0
  62. package/dist/non-interactive.d.ts.map +1 -1
  63. package/dist/non-interactive.js +63 -6
  64. package/dist/non-interactive.js.map +1 -1
  65. package/dist/prompts/durable-goal-context.d.ts.map +1 -1
  66. package/dist/prompts/durable-goal-context.js +12 -2
  67. package/dist/prompts/durable-goal-context.js.map +1 -1
  68. package/dist/prompts/durable-goal-context.ts +13 -2
  69. package/dist/providers/ai-sdk-openrouter.provider.js +3 -2
  70. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
  71. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
  72. package/dist/providers/ai-sdk-streamed-model.js +12 -2
  73. package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
  74. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  75. package/dist/providers/codex-responses-model.js +35 -16
  76. package/dist/providers/codex-responses-model.js.map +1 -1
  77. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  78. package/dist/providers/openai-chat-completions-model.js +11 -3
  79. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  80. package/dist/services/agent-runtime/application-run-loop.d.ts +34 -1
  81. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  82. package/dist/services/agent-runtime/application-run-loop.js +174 -33
  83. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  84. package/dist/services/agent-runtime/context-compaction/index.d.ts.map +1 -1
  85. package/dist/services/agent-runtime/context-compaction/index.js +65 -16
  86. package/dist/services/agent-runtime/context-compaction/index.js.map +1 -1
  87. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +7 -1
  88. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
  89. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +115 -20
  90. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
  91. package/dist/services/agent-runtime/model-context-policy.d.ts +21 -0
  92. package/dist/services/agent-runtime/model-context-policy.d.ts.map +1 -0
  93. package/dist/services/agent-runtime/model-context-policy.js +46 -0
  94. package/dist/services/agent-runtime/model-context-policy.js.map +1 -0
  95. package/dist/services/agent-runtime/request-input-limit.d.ts +31 -0
  96. package/dist/services/agent-runtime/request-input-limit.d.ts.map +1 -0
  97. package/dist/services/agent-runtime/request-input-limit.js +86 -0
  98. package/dist/services/agent-runtime/request-input-limit.js.map +1 -0
  99. package/dist/services/agent-runtime/run-budget.d.ts +3 -5
  100. package/dist/services/agent-runtime/run-budget.d.ts.map +1 -1
  101. package/dist/services/agent-runtime/run-budget.js.map +1 -1
  102. package/dist/services/agent-runtime/tool-call-execution.d.ts +24 -2
  103. package/dist/services/agent-runtime/tool-call-execution.d.ts.map +1 -1
  104. package/dist/services/agent-runtime/tool-call-execution.js +36 -6
  105. package/dist/services/agent-runtime/tool-call-execution.js.map +1 -1
  106. package/dist/services/agent-runtime/tool-invocation-context.d.ts +24 -12
  107. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
  108. package/dist/services/agent-runtime/tool-invocation-context.js +38 -27
  109. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -1
  110. package/dist/services/approval/approval-replay.d.ts +15 -24
  111. package/dist/services/approval/approval-replay.d.ts.map +1 -1
  112. package/dist/services/approval/approval-replay.js +12 -30
  113. package/dist/services/approval/approval-replay.js.map +1 -1
  114. package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -1
  115. package/dist/services/approval/non-interactive-approval-policy.js +11 -0
  116. package/dist/services/approval/non-interactive-approval-policy.js.map +1 -1
  117. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  118. package/dist/services/approval/tool-approval-batch-coordinator.js +0 -5
  119. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  120. package/dist/services/conversation/conversation-checkpoint-provenance.d.ts.map +1 -1
  121. package/dist/services/conversation/conversation-checkpoint-provenance.js +10 -2
  122. package/dist/services/conversation/conversation-checkpoint-provenance.js.map +1 -1
  123. package/dist/services/conversation/conversation-events.d.ts +2 -0
  124. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  125. package/dist/services/conversation/conversation-events.js.map +1 -1
  126. package/dist/services/conversation/conversation-orchestrator.d.ts +1 -1
  127. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  128. package/dist/services/conversation/conversation-orchestrator.js +14 -2
  129. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  130. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  131. package/dist/services/conversation/conversation-replay.js +78 -3
  132. package/dist/services/conversation/conversation-replay.js.map +1 -1
  133. package/dist/services/conversation/conversation-service.d.ts +2 -2
  134. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  135. package/dist/services/conversation/conversation-service.js +5 -1
  136. package/dist/services/conversation/conversation-service.js.map +1 -1
  137. package/dist/services/conversation/conversation-state-projector.d.ts +1 -0
  138. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  139. package/dist/services/conversation/conversation-state-projector.js +5 -1
  140. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  141. package/dist/services/conversation/durable-goal-stop-check.d.ts +141 -0
  142. package/dist/services/conversation/durable-goal-stop-check.d.ts.map +1 -0
  143. package/dist/services/conversation/durable-goal-stop-check.js +351 -0
  144. package/dist/services/conversation/durable-goal-stop-check.js.map +1 -0
  145. package/dist/services/conversation/durable-goal.d.ts +16 -1
  146. package/dist/services/conversation/durable-goal.d.ts.map +1 -1
  147. package/dist/services/conversation/durable-goal.js +8 -0
  148. package/dist/services/conversation/durable-goal.js.map +1 -1
  149. package/dist/services/conversation/local-checkpoint-projection.d.ts.map +1 -1
  150. package/dist/services/conversation/local-checkpoint-projection.js +12 -1
  151. package/dist/services/conversation/local-checkpoint-projection.js.map +1 -1
  152. package/dist/services/conversation/session-browser.d.ts +2 -0
  153. package/dist/services/conversation/session-browser.d.ts.map +1 -1
  154. package/dist/services/conversation/session-browser.js +23 -8
  155. package/dist/services/conversation/session-browser.js.map +1 -1
  156. package/dist/services/conversation/session-index/session-index-worker-client.d.ts +3 -0
  157. package/dist/services/conversation/session-index/session-index-worker-client.d.ts.map +1 -1
  158. package/dist/services/conversation/session-index/session-index-worker-client.js +6 -1
  159. package/dist/services/conversation/session-index/session-index-worker-client.js.map +1 -1
  160. package/dist/services/conversation/session-index/session-index-worker.d.ts +16 -1
  161. package/dist/services/conversation/session-index/session-index-worker.d.ts.map +1 -1
  162. package/dist/services/conversation/session-index/session-index-worker.js +16 -0
  163. package/dist/services/conversation/session-index/session-index-worker.js.map +1 -1
  164. package/dist/services/conversation-agent-client.d.ts +1 -0
  165. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  166. package/dist/services/logging/conversation-log-events.d.ts +7 -0
  167. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  168. package/dist/services/logging/conversation-log-events.js.map +1 -1
  169. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  170. package/dist/services/retry/retry-classifier.js +2 -1
  171. package/dist/services/retry/retry-classifier.js.map +1 -1
  172. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  173. package/dist/services/retry/retry-error-classification.js +1 -0
  174. package/dist/services/retry/retry-error-classification.js.map +1 -1
  175. package/dist/services/service-interfaces.d.ts +2 -0
  176. package/dist/services/service-interfaces.d.ts.map +1 -1
  177. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  178. package/dist/services/session/initial-turn-recovery-handler.js +6 -0
  179. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  180. package/dist/services/session/session-composition.d.ts.map +1 -1
  181. package/dist/services/session/session-composition.js +7 -5
  182. package/dist/services/session/session-composition.js.map +1 -1
  183. package/dist/services/session/session-manager.d.ts +2 -0
  184. package/dist/services/session/session-manager.d.ts.map +1 -1
  185. package/dist/services/session/session-manager.js +10 -0
  186. package/dist/services/session/session-manager.js.map +1 -1
  187. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  188. package/dist/services/session/session-stream-processor.js +11 -0
  189. package/dist/services/session/session-stream-processor.js.map +1 -1
  190. package/dist/services/session/session-tool-tracker.d.ts +18 -1
  191. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  192. package/dist/services/session/session-tool-tracker.js +38 -1
  193. package/dist/services/session/session-tool-tracker.js.map +1 -1
  194. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  195. package/dist/services/session/terminal-result-collector.js +3 -0
  196. package/dist/services/session/terminal-result-collector.js.map +1 -1
  197. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  198. package/dist/services/session/turn-workflow.js +3 -0
  199. package/dist/services/session/turn-workflow.js.map +1 -1
  200. package/dist/services/settings/settings-env.d.ts.map +1 -1
  201. package/dist/services/settings/settings-env.js +6 -0
  202. package/dist/services/settings/settings-env.js.map +1 -1
  203. package/dist/services/settings/settings-persistence.d.ts +2 -1
  204. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  205. package/dist/services/settings/settings-persistence.js +1 -1
  206. package/dist/services/settings/settings-persistence.js.map +1 -1
  207. package/dist/services/settings/settings-schema.d.ts +7 -1
  208. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  209. package/dist/services/settings/settings-schema.js +17 -6
  210. package/dist/services/settings/settings-schema.js.map +1 -1
  211. package/dist/services/settings/settings-service.d.ts +3 -0
  212. package/dist/services/settings/settings-service.d.ts.map +1 -1
  213. package/dist/services/settings/settings-service.js +74 -31
  214. package/dist/services/settings/settings-service.js.map +1 -1
  215. package/dist/services/settings/settings-sources.d.ts +1 -0
  216. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  217. package/dist/services/settings/settings-sources.js +1 -0
  218. package/dist/services/settings/settings-sources.js.map +1 -1
  219. package/dist/services/settings/settings-ui-metadata.js +1 -1
  220. package/dist/services/settings/settings-ui-metadata.js.map +1 -1
  221. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
  222. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
  223. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +1 -0
  224. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
  225. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  226. package/dist/services/subagents/execution-runner.js +16 -3
  227. package/dist/services/subagents/execution-runner.js.map +1 -1
  228. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  229. package/dist/services/subagents/nested-runner.js +3 -2
  230. package/dist/services/subagents/nested-runner.js.map +1 -1
  231. package/dist/services/tool-execution-ledger.d.ts +22 -0
  232. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  233. package/dist/services/tool-execution-ledger.js +40 -3
  234. package/dist/services/tool-execution-ledger.js.map +1 -1
  235. package/dist/services/workflow-evolution/cli.d.ts +2 -0
  236. package/dist/services/workflow-evolution/cli.d.ts.map +1 -0
  237. package/dist/services/workflow-evolution/cli.js +26 -0
  238. package/dist/services/workflow-evolution/cli.js.map +1 -0
  239. package/dist/services/workflow-evolution/demo.d.ts +18 -0
  240. package/dist/services/workflow-evolution/demo.d.ts.map +1 -0
  241. package/dist/services/workflow-evolution/demo.js +177 -0
  242. package/dist/services/workflow-evolution/demo.js.map +1 -0
  243. package/dist/services/workflow-evolution/experiment.d.ts +304 -0
  244. package/dist/services/workflow-evolution/experiment.d.ts.map +1 -0
  245. package/dist/services/workflow-evolution/experiment.js +251 -0
  246. package/dist/services/workflow-evolution/experiment.js.map +1 -0
  247. package/dist/services/workflow-evolution/ledger.d.ts +5 -0
  248. package/dist/services/workflow-evolution/ledger.d.ts.map +1 -0
  249. package/dist/services/workflow-evolution/ledger.js +57 -0
  250. package/dist/services/workflow-evolution/ledger.js.map +1 -0
  251. package/dist/skins/rail/status.d.ts.map +1 -1
  252. package/dist/skins/rail/status.js +21 -11
  253. package/dist/skins/rail/status.js.map +1 -1
  254. package/dist/tools/agent/goal-check.d.ts +23 -0
  255. package/dist/tools/agent/goal-check.d.ts.map +1 -0
  256. package/dist/tools/agent/goal-check.js +79 -0
  257. package/dist/tools/agent/goal-check.js.map +1 -0
  258. package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -1
  259. package/dist/tools/system/run-code/run-code-runtime.js +3 -1
  260. package/dist/tools/system/run-code/run-code-runtime.js.map +1 -1
  261. package/dist/tools/tool-names.d.ts +1 -0
  262. package/dist/tools/tool-names.d.ts.map +1 -1
  263. package/dist/tools/tool-names.js +1 -0
  264. package/dist/tools/tool-names.js.map +1 -1
  265. package/dist/tools/types.d.ts +21 -0
  266. package/dist/tools/types.d.ts.map +1 -1
  267. package/dist/tools/types.js +7 -0
  268. package/dist/tools/types.js.map +1 -1
  269. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  270. package/dist/utils/conversation/conversation-event-handler.js +7 -1
  271. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  272. package/dist/utils/output/text-snippet.js +25 -33
  273. package/dist/utils/output/text-snippet.js.map +1 -1
  274. package/dist/utils/streaming/extract-command-messages.d.ts +2 -0
  275. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  276. package/dist/utils/streaming/extract-command-messages.js +4 -0
  277. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  278. package/dist/utils/value-suggestions.d.ts.map +1 -1
  279. package/dist/utils/value-suggestions.js +1 -0
  280. package/dist/utils/value-suggestions.js.map +1 -1
  281. package/package.json +3 -5
  282. package/dist/prompts/durable-goal-context.test.ts +0 -56
  283. package/dist/prompts/explorer-delegation-contract.test.ts +0 -44
  284. package/dist/prompts/memory-recall-notice.test.ts +0 -50
  285. package/dist/prompts/orchestrator-prompt.test.ts +0 -111
  286. package/dist/prompts/prefix-quality.test.ts +0 -115
  287. package/dist/prompts/prompt-constructor.test.ts +0 -423
  288. package/dist/prompts/prompt-profiles.test.ts +0 -22
  289. package/dist/prompts/reasoning-efficiency.test.ts +0 -12
  290. package/dist/prompts/search-via-shell.test.ts +0 -69
  291. package/dist/prompts/steering-notice.test.ts +0 -36
  292. package/dist/prompts/subagent-delegation.test.ts +0 -112
  293. package/dist/prompts/subagents/worker-prompt.test.ts +0 -54
  294. package/dist/prompts/unified-gpt-prompt.test.ts +0 -53
@@ -1,112 +0,0 @@
1
- import { it, expect } from 'vitest';
2
- import { getSubagentDelegationAddendum } from './subagent-delegation.js';
3
- import { getAsyncSubagentDelegationAddendum } from './async-subagent-delegation.js';
4
-
5
- it('getSubagentDelegationAddendum returns non-empty delegation guidance', () => {
6
- const result = getSubagentDelegationAddendum();
7
-
8
- expect(typeof result).toBe('string');
9
- expect(result.length > 0).toBe(true);
10
- expect(result.includes('Delegating to subagents')).toBe(true);
11
- expect(result.includes('run_subagent')).toBe(true);
12
- expect(result).toContain('agent.run({ spec, worktree? })');
13
- });
14
-
15
- it('getSubagentDelegationAddendum does not encourage orchestrators to keep working directly', () => {
16
- const result = getSubagentDelegationAddendum({ orchestratorMode: true });
17
-
18
- expect(result.includes('Orchestrator mode')).toBe(true);
19
- expect(result).toContain('Delegate when it provides meaningful leverage');
20
- expect(result).not.toContain('directly inspect, edit, run commands, and test small or clear work');
21
- expect(result).not.toContain('Delegate workspace inspection');
22
- });
23
-
24
- it('async delegation guidance does not tell the parent to find other work before yielding', () => {
25
- const result = getAsyncSubagentDelegationAddendum({ orchestratorMode: true });
26
-
27
- expect(result).not.toContain('other useful work to do first');
28
- expect(result.toLowerCase()).toContain('end the current turn and wait for the completion notification');
29
- });
30
-
31
- it('getSubagentDelegationAddendum includes self-service fallback when orchestratorMode is false', () => {
32
- const result = getSubagentDelegationAddendum({ orchestratorMode: false });
33
-
34
- expect(result.includes('just do it yourself')).toBe(true);
35
- });
36
-
37
- it('keeps diagnosis and recommendations with the parent when delegating evidence collection', () => {
38
- const result = getSubagentDelegationAddendum({ orchestratorMode: false });
39
-
40
- expect(result).toContain('Explorer is an evidence collector, not a reasoning delegate');
41
- expect(result).toContain(
42
- "Do not pass the user's entire investigation, diagnosis, review, or planning task to explorer",
43
- );
44
- expect(result).toContain('You retain responsibility for hypotheses, causal analysis, judgments, and recommendations');
45
- });
46
-
47
- it('orchestrator mode protects outcome ownership and safe coordination', () => {
48
- const result = getSubagentDelegationAddendum({ orchestratorMode: true });
49
- expect(result).toContain('Delegation transfers execution, never outcome ownership');
50
- expect(result).toContain('Avoid concurrent overlapping edits');
51
- expect(result).not.toContain('Coordination checklist');
52
- expect(result).not.toContain('First delegate investigation');
53
- });
54
-
55
- it('includes task framing guidance about autonomous workers', () => {
56
- const result = getSubagentDelegationAddendum();
57
- expect(result.includes('Task framing')).toBe(true);
58
- expect(result.includes('autonomous agents')).toBe(true);
59
- expect(result.includes('goal, relevant context, and constraints')).toBe(true);
60
- expect(result.includes('not implementation steps')).toBe(true);
61
- });
62
-
63
- it('requires task-specific context without repeating automatically supplied context', () => {
64
- const result = getSubagentDelegationAddendum();
65
-
66
- expect(result).toContain(
67
- 'Do not repeat automatically supplied context: role instructions, generic tool guidance, worktree hygiene, environment metadata, root `AGENTS.md`, or skills catalog.',
68
- );
69
- expect(result).toContain(
70
- 'objective, task-specific scope, non-discoverable parent findings or decisions, constraints',
71
- );
72
- expect(result).toContain('deliverable or acceptance criteria, and validation when applicable');
73
- expect(result).toContain('The subagent does not see your conversation or reasoning');
74
- });
75
-
76
- it('retains worker autonomy without mandatory pre-delegation ceremony', () => {
77
- const result = getSubagentDelegationAddendum({ orchestratorMode: true });
78
- expect(result.includes('one cohesive unit that can be understood, implemented, and verified')).toBe(true);
79
- expect(result.includes('The orchestrator decides where execution units begin and end')).toBe(true);
80
- expect(result).not.toContain('Before any `run_subagent` call, plan silently');
81
- });
82
-
83
- it('routes prior-session history digging to the librarian when session tools exist', () => {
84
- const result = getSubagentDelegationAddendum({ memoryEnabled: true, sessionsEnabled: true });
85
- expect(result).toContain('from prior sessions or several memories → `librarian`');
86
- expect(result).toContain('- `librarian`:');
87
- });
88
-
89
- it('routes memory-only history to the librarian without promising transcripts', () => {
90
- const result = getSubagentDelegationAddendum({ memoryEnabled: true, sessionsEnabled: false });
91
- expect(result).toContain('several memories, or memory maintenance → `librarian`');
92
- expect(result).not.toContain('prior-session transcripts');
93
- });
94
-
95
- it('does not advertise the librarian when persistent memory is disabled', () => {
96
- const result = getSubagentDelegationAddendum({ memoryEnabled: false });
97
- expect(result.includes('librarian')).toBe(false);
98
- });
99
-
100
- it('async control guidance distinguishes steering, cancellation, answers, and fresh-turn limits honestly', () => {
101
- const result = getAsyncSubagentDelegationAddendum({ orchestratorMode: true, controlsEnabled: true });
102
-
103
- expect(result).toContain('`tools.send_message(...)`');
104
- expect(result).toContain('`tools.cancel_run(...)`');
105
- expect(result).toContain('name or runId');
106
- expect(result).toContain('`reply_to`');
107
- expect(result).toContain('fresh session turn');
108
- expect(result).toContain('maximum of three continuation segments');
109
- expect(result).toContain('not SDK live injection');
110
- expect(result).toContain('single point of contact');
111
- expect(result).toContain('do NOT call `tools.get_subagent_result(...)` immediately');
112
- });
@@ -1,54 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { it, expect } from 'vitest';
4
-
5
- const workerPrompt = fs.readFileSync(path.join(import.meta.dirname, 'worker.md'), 'utf-8');
6
- const explorerPrompt = fs.readFileSync(path.join(import.meta.dirname, 'explorer.md'), 'utf-8');
7
-
8
- it('worker prompt scales validation to behavioral impact while retaining required checks', () => {
9
- const lower = workerPrompt.toLowerCase();
10
- expect(lower).toContain('validation command');
11
- expect(lower).toContain('project-required checks');
12
- expect(lower).toContain('for inert changes such as docs or comments');
13
- expect(lower).toContain('diff review is sufficient');
14
- expect(lower).toContain('why no command was needed');
15
- expect(lower).not.toContain('you still need to run a validation command');
16
- });
17
-
18
- it('worker prompt notes that validation and diff stat are auto-captured', () => {
19
- const lower = workerPrompt.toLowerCase();
20
- expect(lower).toContain('automatically captures');
21
- expect(lower).toContain('diff stat');
22
- expect(lower).toContain('do not need to paste the full output');
23
- });
24
-
25
- it('worker report distinguishes recorded checks before and after the edit', () => {
26
- expect(workerPrompt).toContain('Before-edit validation:');
27
- expect(workerPrompt).toContain('After-edit validation:');
28
- expect(workerPrompt).toContain('tool-result history');
29
- expect(workerPrompt).toContain('even if they were not required');
30
- });
31
-
32
- it('worker prompt mentions that shell-driven edits may not appear in diff stat', () => {
33
- const lower = workerPrompt.toLowerCase();
34
- expect(lower).toContain('shell-driven edits');
35
- expect(lower).toContain('may not appear');
36
- });
37
-
38
- it('execution role prompts reserve ask_orchestrator for genuine blockers and never direct user contact', () => {
39
- for (const prompt of [workerPrompt, explorerPrompt]) {
40
- const lower = prompt.toLowerCase();
41
- expect(lower).toContain('ask_orchestrator');
42
- expect(lower).toContain('genuine blocker');
43
- expect(lower).toContain('decision needed');
44
- expect(lower).toContain('continue after');
45
- expect(lower).toContain('do not contact the user');
46
- }
47
- });
48
-
49
- it('explorer prompt names web tools directly instead of routing through unregistered run_code', () => {
50
- expect(explorerPrompt).toContain('Use `web_search` to find relevant external documentation');
51
- expect(explorerPrompt).toContain('Use `web_fetch` to retrieve the content of specific URLs');
52
- expect(explorerPrompt).not.toContain('Inside `run_code`, use `tools.web_search`');
53
- expect(explorerPrompt).not.toContain('Inside `run_code`, use `tools.web_fetch`');
54
- });
@@ -1,53 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { describe, expect, it } from 'vitest';
4
- import { buildPromptSpec } from './prompt-constructor.js';
5
- import { resolveProfile } from '../services/profiles/index.js';
6
-
7
- const standard = resolveProfile('builtin:standard');
8
-
9
- describe('unified main-agent GPT prompt', () => {
10
- it.each([
11
- 'gpt-5.2',
12
- 'gpt-5.3-codex',
13
- 'gpt-5.4',
14
- 'gpt-5.4-mini',
15
- 'gpt-5.5',
16
- 'gpt-5.6-luna',
17
- 'gpt-6-astra',
18
- 'gpt-6-sol',
19
- 'gpt-6-luna',
20
- 'gpt-6-luna-codex',
21
- ])('selects one base without GPT-only fragments for %s', (model) => {
22
- const spec = buildPromptSpec({ model, profile: standard });
23
- expect(spec.basePromptFile).toBe('gpt.md');
24
- expect(spec.fragmentFiles).not.toContain('fragments/gpt-6.md');
25
- expect(spec.fragmentFiles).not.toContain('fragments/skill-instruction-conflicts.md');
26
- });
27
-
28
- it.each(['gpt-4o', 'glm-5.3-flash', 'deepseek-flash', 'unknown-model'])(
29
- 'keeps the simpler generic base for %s',
30
- (model) => {
31
- const spec = buildPromptSpec({ model, profile: standard });
32
- expect(spec.basePromptFile).toBe('simple_v4.md');
33
- expect(spec.fragmentFiles).toContain('approval-model.md');
34
- },
35
- );
36
-
37
- it('keeps the action, approval, verification, and skill-conflict rules in the base', () => {
38
- const text = readFileSync(join(import.meta.dirname, 'gpt.md'), 'utf8');
39
- expect(text).toContain('Default to action');
40
- expect(text).toContain('approval layer');
41
- expect(text).toContain('Run the checks appropriate to the change');
42
- expect(text).toContain('Explicit user instructions override conflicting skill instructions');
43
- expect(buildPromptSpec({ model: 'gpt-6-luna', profile: standard }).fragmentFiles).toContain('approval-model.md');
44
- });
45
-
46
- it('leaves non-GPT and lite profile routing unchanged', () => {
47
- expect(buildPromptSpec({ model: 'claude-sonnet-4', profile: standard }).basePromptFile).toBe('anthropic.md');
48
- expect(buildPromptSpec({ model: 'kimi-k2', profile: standard }).basePromptFile).toBe('kimi.md');
49
- const lite = buildPromptSpec({ model: 'gpt-6-luna', profile: resolveProfile('builtin:lite') });
50
- expect(lite.basePromptContent).toBeDefined();
51
- expect(lite.fragmentFiles).toEqual([]);
52
- });
53
- });