neoctl 0.2.40 → 0.2.42

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 (206) hide show
  1. package/README.md +43 -585
  2. package/dist/context/prompts.js +2 -1
  3. package/dist/context/prompts.js.map +1 -1
  4. package/dist/core/run-agent.js +2 -0
  5. package/dist/core/run-agent.js.map +1 -1
  6. package/dist/repl/index.js +13 -1
  7. package/dist/repl/index.js.map +1 -1
  8. package/dist/tools/builtins/image-capabilities.d.ts +21 -0
  9. package/dist/tools/builtins/image-capabilities.js +97 -0
  10. package/dist/tools/builtins/image-capabilities.js.map +1 -0
  11. package/dist/tools/builtins/image-generation-tool.d.ts +14 -7
  12. package/dist/tools/builtins/image-generation-tool.js +141 -143
  13. package/dist/tools/builtins/image-generation-tool.js.map +1 -1
  14. package/dist/tools/builtins/image-output-verification.d.ts +14 -0
  15. package/dist/tools/builtins/image-output-verification.js +183 -0
  16. package/dist/tools/builtins/image-output-verification.js.map +1 -0
  17. package/dist/tools/registry.d.ts +2 -0
  18. package/dist/tools/registry.js +6 -0
  19. package/dist/tools/registry.js.map +1 -1
  20. package/dist/tools/run-tool-use.js +5 -0
  21. package/dist/tools/run-tool-use.js.map +1 -1
  22. package/dist/web/image-result-metadata.d.ts +20 -0
  23. package/dist/web/image-result-metadata.js +20 -0
  24. package/dist/web/image-result-metadata.js.map +1 -0
  25. package/dist/web/index.d.ts +4 -1
  26. package/dist/web/index.js +20 -5
  27. package/dist/web/index.js.map +1 -1
  28. package/docs/prompt-config.md +1 -1
  29. package/package.json +22 -20
  30. package/dist/agents/agent-report-security.test.d.ts +0 -1
  31. package/dist/agents/agent-report-security.test.js +0 -301
  32. package/dist/agents/agent-report-security.test.js.map +0 -1
  33. package/dist/agents/agent-tool-persistence.test.d.ts +0 -1
  34. package/dist/agents/agent-tool-persistence.test.js +0 -319
  35. package/dist/agents/agent-tool-persistence.test.js.map +0 -1
  36. package/dist/agents/coordination-boundary.test.d.ts +0 -1
  37. package/dist/agents/coordination-boundary.test.js +0 -58
  38. package/dist/agents/coordination-boundary.test.js.map +0 -1
  39. package/dist/agents/live-preview-redaction-security.test.d.ts +0 -1
  40. package/dist/agents/live-preview-redaction-security.test.js +0 -286
  41. package/dist/agents/live-preview-redaction-security.test.js.map +0 -1
  42. package/dist/agents/no-nested-delegation.test.d.ts +0 -1
  43. package/dist/agents/no-nested-delegation.test.js +0 -38
  44. package/dist/agents/no-nested-delegation.test.js.map +0 -1
  45. package/dist/agents/obs07-11-run-facts.test.d.ts +0 -1
  46. package/dist/agents/obs07-11-run-facts.test.js +0 -459
  47. package/dist/agents/obs07-11-run-facts.test.js.map +0 -1
  48. package/dist/agents/smoke-agent-lifecycle.d.ts +0 -1
  49. package/dist/agents/smoke-agent-lifecycle.js +0 -192
  50. package/dist/agents/smoke-agent-lifecycle.js.map +0 -1
  51. package/dist/agents/smoke-agents.d.ts +0 -1
  52. package/dist/agents/smoke-agents.js +0 -362
  53. package/dist/agents/smoke-agents.js.map +0 -1
  54. package/dist/context/prompt-config.test.d.ts +0 -1
  55. package/dist/context/prompt-config.test.js +0 -128
  56. package/dist/context/prompt-config.test.js.map +0 -1
  57. package/dist/context/smoke-context.d.ts +0 -1
  58. package/dist/context/smoke-context.js +0 -502
  59. package/dist/context/smoke-context.js.map +0 -1
  60. package/dist/core/obs04-visible-data.test.d.ts +0 -1
  61. package/dist/core/obs04-visible-data.test.js +0 -147
  62. package/dist/core/obs04-visible-data.test.js.map +0 -1
  63. package/dist/core/query-session-settings.test.d.ts +0 -1
  64. package/dist/core/query-session-settings.test.js +0 -252
  65. package/dist/core/query-session-settings.test.js.map +0 -1
  66. package/dist/core/run-agent-pause.test.d.ts +0 -1
  67. package/dist/core/run-agent-pause.test.js +0 -52
  68. package/dist/core/run-agent-pause.test.js.map +0 -1
  69. package/dist/core/run-agent-persistence.test.d.ts +0 -1
  70. package/dist/core/run-agent-persistence.test.js +0 -222
  71. package/dist/core/run-agent-persistence.test.js.map +0 -1
  72. package/dist/core/session-prompt-inheritance.test.d.ts +0 -1
  73. package/dist/core/session-prompt-inheritance.test.js +0 -132
  74. package/dist/core/session-prompt-inheritance.test.js.map +0 -1
  75. package/dist/core/session-settings-prompt.test.d.ts +0 -1
  76. package/dist/core/session-settings-prompt.test.js +0 -266
  77. package/dist/core/session-settings-prompt.test.js.map +0 -1
  78. package/dist/core/smoke-core-loop.d.ts +0 -1
  79. package/dist/core/smoke-core-loop.js +0 -290
  80. package/dist/core/smoke-core-loop.js.map +0 -1
  81. package/dist/core/smoke-image-integrity.d.ts +0 -1
  82. package/dist/core/smoke-image-integrity.js +0 -67
  83. package/dist/core/smoke-image-integrity.js.map +0 -1
  84. package/dist/execution/docker.test.d.ts +0 -1
  85. package/dist/execution/docker.test.js +0 -57
  86. package/dist/execution/docker.test.js.map +0 -1
  87. package/dist/model/openai-native-image-guard.test.d.ts +0 -1
  88. package/dist/model/openai-native-image-guard.test.js +0 -101
  89. package/dist/model/openai-native-image-guard.test.js.map +0 -1
  90. package/dist/model/openai-responses-instructions.test.d.ts +0 -1
  91. package/dist/model/openai-responses-instructions.test.js +0 -64
  92. package/dist/model/openai-responses-instructions.test.js.map +0 -1
  93. package/dist/model/smoke-openai.d.ts +0 -1
  94. package/dist/model/smoke-openai.js +0 -44
  95. package/dist/model/smoke-openai.js.map +0 -1
  96. package/dist/model/smoke-responses-mapper.d.ts +0 -1
  97. package/dist/model/smoke-responses-mapper.js +0 -156
  98. package/dist/model/smoke-responses-mapper.js.map +0 -1
  99. package/dist/plugins/smoke-plugin-system.d.ts +0 -1
  100. package/dist/plugins/smoke-plugin-system.js +0 -63
  101. package/dist/plugins/smoke-plugin-system.js.map +0 -1
  102. package/dist/repl/smoke-run-command.d.ts +0 -1
  103. package/dist/repl/smoke-run-command.js +0 -43
  104. package/dist/repl/smoke-run-command.js.map +0 -1
  105. package/dist/secrets/smoke-secrets.d.ts +0 -1
  106. package/dist/secrets/smoke-secrets.js +0 -73
  107. package/dist/secrets/smoke-secrets.js.map +0 -1
  108. package/dist/session/session-store-safety.test.d.ts +0 -1
  109. package/dist/session/session-store-safety.test.js +0 -107
  110. package/dist/session/session-store-safety.test.js.map +0 -1
  111. package/dist/session/smoke-session.d.ts +0 -1
  112. package/dist/session/smoke-session.js +0 -233
  113. package/dist/session/smoke-session.js.map +0 -1
  114. package/dist/skills/smoke-skills.d.ts +0 -1
  115. package/dist/skills/smoke-skills.js +0 -109
  116. package/dist/skills/smoke-skills.js.map +0 -1
  117. package/dist/tasks/subagent-tools.test.d.ts +0 -1
  118. package/dist/tasks/subagent-tools.test.js +0 -159
  119. package/dist/tasks/subagent-tools.test.js.map +0 -1
  120. package/dist/tasks/task-ack-size.test.d.ts +0 -1
  121. package/dist/tasks/task-ack-size.test.js +0 -101
  122. package/dist/tasks/task-ack-size.test.js.map +0 -1
  123. package/dist/tasks/task-persistence.test.d.ts +0 -1
  124. package/dist/tasks/task-persistence.test.js +0 -331
  125. package/dist/tasks/task-persistence.test.js.map +0 -1
  126. package/dist/tools/smoke-exec-process.d.ts +0 -1
  127. package/dist/tools/smoke-exec-process.js +0 -127
  128. package/dist/tools/smoke-exec-process.js.map +0 -1
  129. package/dist/tools/smoke-terminal-output-chain.d.ts +0 -1
  130. package/dist/tools/smoke-terminal-output-chain.js +0 -245
  131. package/dist/tools/smoke-terminal-output-chain.js.map +0 -1
  132. package/dist/tools/smoke-tool-system.d.ts +0 -1
  133. package/dist/tools/smoke-tool-system.js +0 -412
  134. package/dist/tools/smoke-tool-system.js.map +0 -1
  135. package/dist/tools/terminal-background-history.test.d.ts +0 -1
  136. package/dist/tools/terminal-background-history.test.js +0 -77
  137. package/dist/tools/terminal-background-history.test.js.map +0 -1
  138. package/dist/tools/terminal-output-persistence.test.d.ts +0 -1
  139. package/dist/tools/terminal-output-persistence.test.js +0 -50
  140. package/dist/tools/terminal-output-persistence.test.js.map +0 -1
  141. package/dist/tools/terminal-output-store.test.d.ts +0 -1
  142. package/dist/tools/terminal-output-store.test.js +0 -364
  143. package/dist/tools/terminal-output-store.test.js.map +0 -1
  144. package/dist/web/agent-content-detail.test.d.ts +0 -1
  145. package/dist/web/agent-content-detail.test.js +0 -307
  146. package/dist/web/agent-content-detail.test.js.map +0 -1
  147. package/dist/web/agent-parent-messages.test.d.ts +0 -1
  148. package/dist/web/agent-parent-messages.test.js +0 -58
  149. package/dist/web/agent-parent-messages.test.js.map +0 -1
  150. package/dist/web/agent-tool-payload-security.test.d.ts +0 -1
  151. package/dist/web/agent-tool-payload-security.test.js +0 -120
  152. package/dist/web/agent-tool-payload-security.test.js.map +0 -1
  153. package/dist/web/prompt-config-protocol.test.d.ts +0 -1
  154. package/dist/web/prompt-config-protocol.test.js +0 -78
  155. package/dist/web/prompt-config-protocol.test.js.map +0 -1
  156. package/dist/web/session-prompt-integration.test.d.ts +0 -1
  157. package/dist/web/session-prompt-integration.test.js +0 -57
  158. package/dist/web/session-prompt-integration.test.js.map +0 -1
  159. package/dist/web/session-settings.test.d.ts +0 -1
  160. package/dist/web/session-settings.test.js +0 -254
  161. package/dist/web/session-settings.test.js.map +0 -1
  162. package/dist/web/smoke-agent-content-http.d.ts +0 -1
  163. package/dist/web/smoke-agent-content-http.js +0 -446
  164. package/dist/web/smoke-agent-content-http.js.map +0 -1
  165. package/dist/web/smoke-plan-payload.d.ts +0 -1
  166. package/dist/web/smoke-plan-payload.js +0 -30
  167. package/dist/web/smoke-plan-payload.js.map +0 -1
  168. package/dist/web/smoke-runtime-context-protocol.d.ts +0 -1
  169. package/dist/web/smoke-runtime-context-protocol.js +0 -42
  170. package/dist/web/smoke-runtime-context-protocol.js.map +0 -1
  171. package/dist/web/smoke-status-semantics.d.ts +0 -1
  172. package/dist/web/smoke-status-semantics.js +0 -90
  173. package/dist/web/smoke-status-semantics.js.map +0 -1
  174. package/dist/web/smoke-task-session-entrypoints.d.ts +0 -1
  175. package/dist/web/smoke-task-session-entrypoints.js +0 -96
  176. package/dist/web/smoke-task-session-entrypoints.js.map +0 -1
  177. package/dist/web/smoke-terminal-output-http.d.ts +0 -1
  178. package/dist/web/smoke-terminal-output-http.js +0 -377
  179. package/dist/web/smoke-terminal-output-http.js.map +0 -1
  180. package/dist/web/smoke-tool-call-detail.d.ts +0 -1
  181. package/dist/web/smoke-tool-call-detail.js +0 -106
  182. package/dist/web/smoke-tool-call-detail.js.map +0 -1
  183. package/dist/web/smoke-tool-call-http.d.ts +0 -1
  184. package/dist/web/smoke-tool-call-http.js +0 -100
  185. package/dist/web/smoke-tool-call-http.js.map +0 -1
  186. package/dist/web/smoke-tool-detail-fields-http.d.ts +0 -1
  187. package/dist/web/smoke-tool-detail-fields-http.js +0 -121
  188. package/dist/web/smoke-tool-detail-fields-http.js.map +0 -1
  189. package/dist/web/smoke-web-agent-tasks.d.ts +0 -1
  190. package/dist/web/smoke-web-agent-tasks.js +0 -50
  191. package/dist/web/smoke-web-agent-tasks.js.map +0 -1
  192. package/dist/web/smoke-web-history.d.ts +0 -1
  193. package/dist/web/smoke-web-history.js +0 -183
  194. package/dist/web/smoke-web-history.js.map +0 -1
  195. package/dist/web/smoke-web-queue.d.ts +0 -1
  196. package/dist/web/smoke-web-queue.js +0 -7
  197. package/dist/web/smoke-web-queue.js.map +0 -1
  198. package/dist/web/smoke-web-terminal-tasks.d.ts +0 -1
  199. package/dist/web/smoke-web-terminal-tasks.js +0 -238
  200. package/dist/web/smoke-web-terminal-tasks.js.map +0 -1
  201. package/dist/web/terminal-presentation.test.d.ts +0 -1
  202. package/dist/web/terminal-presentation.test.js +0 -33
  203. package/dist/web/terminal-presentation.test.js.map +0 -1
  204. package/dist/web/tool-detail-fields.test.d.ts +0 -1
  205. package/dist/web/tool-detail-fields.test.js +0 -121
  206. package/dist/web/tool-detail-fields.test.js.map +0 -1
@@ -1,502 +0,0 @@
1
- import { resolve } from "node:path";
2
- import { ModelAPIError } from "../model/errors.js";
3
- import { QueryEngine } from "../core/query-engine.js";
4
- import { buildContextMetrics, estimateTextTokens } from "../core/context-metrics.js";
5
- import { buildPromptCacheIdentity } from "../core/prompt-cache-key.js";
6
- import { resolveContextWindowTokens } from "../model/context-window.js";
7
- import { applyRuntimeContextForPromptCache, applyToolResultBudget, ensureToolResultPairing, getMessagesAfterCompactBoundary, hasValidToolResultPairing, insertUserContextBeforeLatestUser } from "../core/message-pipeline.js";
8
- import { ToolRegistry } from "../tools/registry.js";
9
- import { createTextMessage, createThinkingMessage, createToolResultMessage } from "../types/messages.js";
10
- import { CLEARED_TOOL_RESULT_CONTENT, DeterministicCompactor, ManualOnlyCompactor, microCompactIfNeeded, ModelDrivenCompactor, withCompactionReport } from "./compaction.js";
11
- import { AdditionalPromptContextManager, DefaultContextManager } from "./context-manager.js";
12
- import { buildEffectiveSystemPrompt, splitSystemPromptPrefix, SYSTEM_PROMPT_DYNAMIC_BOUNDARY } from "./prompts.js";
13
- class CapturingGateway {
14
- requests = [];
15
- async *stream(request) {
16
- this.requests.push(request);
17
- yield { type: "assistant_message", message: createTextMessage("assistant", "ok") };
18
- yield { type: "response_completed", responseId: `capture_${this.requests.length}`, stopReason: "completed" };
19
- }
20
- }
21
- class ContextOverflowThenSuccessGateway {
22
- calls = 0;
23
- sawBoundaryOnRetry = false;
24
- sawUserContext = false;
25
- sawSystemContext = false;
26
- async *stream(request) {
27
- this.calls += 1;
28
- this.sawUserContext ||= request.messages.some((message) => message.metadata?.userContext === true);
29
- this.sawSystemContext ||= request.messages.some((message) => message.metadata?.systemContext === true);
30
- if (this.calls === 1) {
31
- throw new ModelAPIError({
32
- category: "context_length",
33
- provider: "fake",
34
- message: "context length exceeded",
35
- retryable: false,
36
- });
37
- }
38
- this.sawBoundaryOnRetry = request.messages.some((message) => message.metadata?.compactBoundary === true);
39
- yield { type: "assistant_message", message: createTextMessage("assistant", "compacted") };
40
- yield { type: "response_completed", responseId: "resp_context", stopReason: "completed" };
41
- }
42
- }
43
- class SummaryGateway {
44
- compactCalls = 0;
45
- requestText = "";
46
- lastRequest;
47
- async *stream(request) {
48
- if (request.queryOrigin !== "compact")
49
- throw new Error(`Unexpected query origin: ${request.queryOrigin}`);
50
- this.compactCalls += 1;
51
- this.lastRequest = request;
52
- this.requestText += JSON.stringify(request.messages);
53
- yield {
54
- type: "assistant_delta",
55
- text: "目标:提高压缩摘要质量。\n关键路径:C:\\Users\\qyq\\Desktop\\work\\codex\n当前状态:已完成调查。\n下一步:finish validation. AUTHORITY_SUMMARY_END",
56
- };
57
- yield { type: "response_completed", responseId: "compact_1", stopReason: "completed" };
58
- }
59
- }
60
- class SequenceSummaryGateway {
61
- requests = [];
62
- async *stream(request) {
63
- this.requests.push(request);
64
- const text = this.requests.length === 1
65
- ? "Goal: original goal. Status: investigation pending. OLDER_CHECKPOINT"
66
- : "Goal: corrected goal. Status: implementation approved and in progress. LATEST_CHECKPOINT";
67
- yield { type: "assistant_delta", text };
68
- yield { type: "response_completed", responseId: `compact_${this.requests.length}`, stopReason: "completed" };
69
- }
70
- }
71
- class ThresholdAutoCompactGateway {
72
- compactCalls = 0;
73
- modelCalls = 0;
74
- sawBoundary = false;
75
- async *stream(request) {
76
- if (request.queryOrigin === "compact") {
77
- this.compactCalls += 1;
78
- yield { type: "assistant_delta", text: "Goal: preserve the current request. Status: ready after automatic compaction." };
79
- yield { type: "response_completed", responseId: "compact_threshold", stopReason: "completed" };
80
- return;
81
- }
82
- this.modelCalls += 1;
83
- this.sawBoundary = request.messages.some((message) => message.metadata?.compactBoundary === true);
84
- yield { type: "assistant_message", message: createTextMessage("assistant", "automatic compact succeeded") };
85
- yield { type: "response_completed", responseId: "response_threshold", stopReason: "completed" };
86
- }
87
- }
88
- async function main() {
89
- const prompt = buildEffectiveSystemPrompt([
90
- { name: "Stable", content: "cache me", cacheStable: true },
91
- { name: "Dynamic", content: "session only", cacheStable: false },
92
- ]);
93
- const split = splitSystemPromptPrefix(prompt);
94
- const promptOk = prompt.includes(SYSTEM_PROMPT_DYNAMIC_BOUNDARY) &&
95
- split.stablePrefix.includes("cache me") &&
96
- split.dynamicSuffix.includes("session only");
97
- const contextManager = new DefaultContextManager({ currentDate: () => "2026-05-05" });
98
- const sessionDir = resolve(".neo-session-stable");
99
- const toolUseContext = { session: { sessionId: "stable", sessionDir }, agentId: "main" };
100
- const runtime = await contextManager.build({ agentId: "main", messages: [createTextMessage("user", "hello")], toolUseContext });
101
- const extendedRuntime = await new AdditionalPromptContextManager(contextManager, [{
102
- name: "Web Plugin",
103
- content: "stable plugin contract",
104
- cacheStable: true,
105
- }]).build({ agentId: "main", messages: [createTextMessage("user", "hello")] });
106
- const extensionOk = extendedRuntime.promptSections.some((section) => section.name === "Web Plugin" && section.cacheStable === true) &&
107
- splitSystemPromptPrefix(extendedRuntime.systemPrompt).stablePrefix.includes("stable plugin contract");
108
- const firstHistory = [createTextMessage("user", "first")];
109
- const secondHistory = [...firstHistory, createTextMessage("assistant", "answer"), createTextMessage("user", "second")];
110
- const runtimeContextMessages = applyRuntimeContextForPromptCache(firstHistory, runtime.userContext, runtime.systemContext);
111
- const nextRuntimeContextMessages = applyRuntimeContextForPromptCache(secondHistory, runtime.userContext, runtime.systemContext);
112
- const changedCwdMessages = applyRuntimeContextForPromptCache(secondHistory, runtime.userContext, { ...runtime.systemContext, cwd: `${runtime.systemContext.cwd}-next` });
113
- const changedSessionMessages = applyRuntimeContextForPromptCache(secondHistory, runtime.userContext, { ...runtime.systemContext, sessionDir: `${sessionDir}-next` });
114
- const cwdTransitionMessages = insertUserContextBeforeLatestUser(changedCwdMessages, { cwdTransition: { paths: ["A", "B", "C"], current: "C" } });
115
- const lastRuntimeBlock = runtimeContextMessages.at(-1)?.blocks[0];
116
- const firstRuntimeBlock = runtimeContextMessages[0]?.blocks[0];
117
- const nextFirstRuntimeBlock = nextRuntimeContextMessages[0]?.blocks[0];
118
- const changedFirstRuntimeBlock = changedCwdMessages[0]?.blocks[0];
119
- const changedSessionRuntimeBlock = changedSessionMessages[0]?.blocks[0];
120
- const cwdTransitionBlock = cwdTransitionMessages.at(-2)?.blocks[0];
121
- const cacheIdentity = buildPromptCacheIdentity(runtime.systemPrompt, [], "fake", runtimeContextMessages);
122
- const changedCwdIdentity = buildPromptCacheIdentity(runtime.systemPrompt, [], "fake", changedCwdMessages);
123
- const changedSessionIdentity = buildPromptCacheIdentity(runtime.systemPrompt, [], "fake", changedSessionMessages);
124
- const toolBudgetPromptOccurrences = runtime.systemPrompt.split("Tool results use a default context budget").length - 1;
125
- const contextOk = toolBudgetPromptOccurrences === 1 &&
126
- runtime.systemPrompt.includes("48000 serialized characters") &&
127
- runtime.systemPrompt.includes("within 1-200000") &&
128
- runtime.userContext.currentDate === "2026-05-05" &&
129
- Boolean(runtime.systemContext.cwd) &&
130
- runtime.systemContext.sessionDir === sessionDir &&
131
- !runtime.systemPrompt.includes("## System Context") &&
132
- runtimeContextMessages[0]?.metadata?.userContext === true &&
133
- runtimeContextMessages[0]?.metadata?.systemContext === true &&
134
- firstRuntimeBlock?.type === "text" &&
135
- nextFirstRuntimeBlock?.type === "text" &&
136
- changedFirstRuntimeBlock?.type === "text" &&
137
- changedSessionRuntimeBlock?.type === "text" &&
138
- firstRuntimeBlock.text === nextFirstRuntimeBlock.text &&
139
- firstRuntimeBlock.text === changedFirstRuntimeBlock.text &&
140
- firstRuntimeBlock.text !== changedSessionRuntimeBlock.text &&
141
- firstRuntimeBlock.text.split(`sessionDir: ${sessionDir}`).length - 1 === 1 &&
142
- cacheIdentity.key === changedCwdIdentity.key &&
143
- cacheIdentity.key !== changedSessionIdentity.key &&
144
- changedCwdMessages.at(-2)?.metadata?.cacheStableRuntimeContext === false &&
145
- cwdTransitionBlock?.type === "text" &&
146
- cwdTransitionBlock.text.includes('"paths":["A","B","C"]') === true &&
147
- lastRuntimeBlock?.type === "text" &&
148
- lastRuntimeBlock.text === "first";
149
- const recoveryGateway = new CapturingGateway();
150
- const recoveryEngine = new QueryEngine({
151
- modelGateway: recoveryGateway,
152
- tools: new ToolRegistry(),
153
- session: { enabled: false },
154
- });
155
- let recoveryConsumed = 0;
156
- recoveryEngine.noteRecoverableSubagents(() => { recoveryConsumed += 1; });
157
- const preAborted = new AbortController();
158
- preAborted.abort();
159
- for await (const _event of recoveryEngine.sendUserText("aborted before model", { abortSignal: preAborted.signal })) { /* consume */ }
160
- for await (const _event of recoveryEngine.sendUserText("first recovery turn")) { /* consume */ }
161
- for await (const _event of recoveryEngine.sendUserText("second turn")) { /* consume */ }
162
- const recoveryFirstText = JSON.stringify(recoveryGateway.requests[0]?.messages ?? []);
163
- const recoverySecondText = JSON.stringify(recoveryGateway.requests[1]?.messages ?? []);
164
- const recoveryHintOk = recoveryGateway.requests.length === 2 &&
165
- recoveryConsumed === 1 &&
166
- recoveryFirstText.split("Interrupted subagents can be resumed.").length - 1 === 1 &&
167
- !recoverySecondText.includes("Interrupted subagents can be resumed.") &&
168
- !JSON.stringify(recoveryGateway.requests[0]?.messages[0]).includes("Interrupted subagents can be resumed.");
169
- const toolResult = createToolResultMessage({ id: "call_big", name: "big", input: {} }, true, "x".repeat(120));
170
- const budgeted = applyToolResultBudget([toolResult], { maxSerializedLength: 20 });
171
- const budgetOk = budgeted[0].metadata?.budgeted === true;
172
- const compactor = new DeterministicCompactor();
173
- const longHistory = Array.from({ length: 12 }, (_, index) => createTextMessage(index % 2 ? "assistant" : "user", `${index}: ${"x".repeat(600)}`));
174
- const compacted = await compactor.compact(longHistory, {
175
- snipMaxChars: 2000,
176
- microCompactMaxChars: 1800,
177
- autoCompactMaxChars: 1500,
178
- keepRecentMessages: 4,
179
- });
180
- const reportedCompaction = withCompactionReport(compacted, longHistory.length);
181
- const compactBoundary = reportedCompaction.messages.find((message) => message.metadata?.compactBoundary === true);
182
- const preservedUsers = reportedCompaction.messages.filter((message) => message.metadata?.compactPreservedUser === true);
183
- const compactReportOk = reportedCompaction.report?.sourceMessages === longHistory.length &&
184
- reportedCompaction.report.preservedUserMessages === preservedUsers.length &&
185
- reportedCompaction.report.newWindowMessages === reportedCompaction.messages.length &&
186
- reportedCompaction.report.summary.length > 0 &&
187
- reportedCompaction.report.continuationState.length > 0 &&
188
- compactBoundary?.metadata?.compactionReport !== undefined;
189
- const compactOk = compacted.changed &&
190
- compactBoundary?.role === "system" &&
191
- reportedCompaction.messages.at(-1)?.metadata?.compactBoundary === true &&
192
- reportedCompaction.messages.slice(0, -1).every((message) => message.role === "user" && message.isMeta !== true) &&
193
- getMessagesAfterCompactBoundary(reportedCompaction.messages).length === reportedCompaction.messages.length &&
194
- JSON.stringify(compactBoundary).includes("Internal continuation state") &&
195
- !JSON.stringify(compactBoundary).includes("Conversation summary");
196
- const metaUser = { ...createTextMessage("user", "runtime metadata"), isMeta: true, metadata: { runtimeContext: true } };
197
- const imageUser = {
198
- ...createTextMessage("user", "latest request with image"),
199
- blocks: [
200
- { type: "text", text: "latest request with image" },
201
- { type: "image", mimeType: "image/png", data: "aGVsbG8=", label: "latest-image" },
202
- ],
203
- };
204
- const oversizedUser = createTextMessage("user", `old oversized request ${"long-token ".repeat(120)}`);
205
- const budgetHistory = [
206
- oversizedUser,
207
- createTextMessage("assistant", "assistant content must not survive"),
208
- createToolResultMessage({ id: "budget-tool", name: "file_read", input: {} }, true, "tool content must not survive"),
209
- metaUser,
210
- imageUser,
211
- ];
212
- const budgetCompacted = await compactor.manualCompact(budgetHistory, { keepRecentTokenBudget: 80, summaryMaxChars: 2000 });
213
- const budgetPreserved = budgetCompacted.messages.slice(0, -1);
214
- const budgetPreservedTokens = budgetPreserved.reduce((total, message) => total + estimateTextTokens(message.blocks.map((block) => {
215
- if (block.type === "text")
216
- return block.text;
217
- if (block.type === "image")
218
- return `[image ${block.label ?? "unlabeled"} ${block.mimeType}; estimated visual token chars=340; pixels are not text-summarized]`;
219
- return "";
220
- }).join("\n")), 0);
221
- const budgetWindowOk = budgetCompacted.messages.at(-1)?.metadata?.compactBoundary === true &&
222
- budgetPreserved.every((message) => message.role === "user" && message.isMeta !== true) &&
223
- budgetPreserved[0]?.id === oversizedUser.id &&
224
- budgetPreserved.at(-1)?.id === imageUser.id &&
225
- budgetPreserved.some((message) => message.blocks.some((block) => block.type === "image" && block.label === "latest-image")) &&
226
- budgetPreserved.some((message) => message.blocks.some((block) => block.type === "text" && block.text.includes("truncated for compaction token budget"))) &&
227
- budgetCompacted.summary?.includes("assistant content must not survive") === true &&
228
- budgetCompacted.summary.includes("tool content must not survive") &&
229
- budgetPreservedTokens <= 80 &&
230
- !JSON.stringify(budgetPreserved).includes("assistant content must not survive") &&
231
- !JSON.stringify(budgetPreserved).includes("tool content must not survive") &&
232
- !JSON.stringify(budgetPreserved).includes("runtime metadata");
233
- const defaultBudgetHistory = [
234
- createTextMessage("user", `default budget boundary ${"token-word ".repeat(30_000)}`),
235
- createTextMessage("assistant", "not preserved"),
236
- ];
237
- const defaultBudgetCompacted = await compactor.manualCompact(defaultBudgetHistory, { summaryMaxChars: 500 });
238
- const defaultBudgetTokens = defaultBudgetCompacted.messages.slice(0, -1)
239
- .reduce((total, message) => total + estimateTextTokens(message.blocks.map((block) => block.type === "text" ? block.text : "").join("\n")), 0);
240
- const defaultBudgetOk = defaultBudgetTokens <= 20_000 &&
241
- defaultBudgetTokens >= 19_500 &&
242
- defaultBudgetCompacted.messages.slice(0, -1).every((message) => message.role === "user") &&
243
- defaultBudgetCompacted.messages.at(-1)?.metadata?.compactBoundary === true;
244
- const fallbackToolUse = {
245
- id: "assistant_fallback_tool",
246
- role: "assistant",
247
- createdAt: new Date().toISOString(),
248
- blocks: [{ type: "tool_use", id: "fallback_call", name: "file_search", input: { query: "codex" } }],
249
- };
250
- const fallbackHistory = [
251
- createTextMessage("user", "提高摘要质量,参考仓库 C:\\Users\\qyq\\Desktop\\work\\codex,不要使用子代理。"),
252
- createTextMessage("assistant", "已完成 Codex 调查,等待实施。"),
253
- fallbackToolUse,
254
- ...Array.from({ length: 8 }, (_, index) => createToolResultMessage({ id: `fallback_fail_${index}`, name: "file_search", input: {} }, false, `transient failure ${index}`)),
255
- createToolResultMessage({ id: "fallback_call", name: "file_search", input: {} }, true, "Codex compaction prompt located."),
256
- ];
257
- const fallbackCompacted = await compactor.manualCompact(fallbackHistory, { keepRecentTokenBudget: 200, summaryMaxChars: 1800 });
258
- const fallbackSummary = fallbackCompacted.summary ?? "";
259
- const fallbackQualityOk = fallbackSummary.includes("提高摘要质量") &&
260
- fallbackSummary.includes("C:\\Users\\qyq\\Desktop\\work\\codex") &&
261
- fallbackSummary.includes("已完成 Codex 调查") &&
262
- fallbackSummary.includes("Next step:") &&
263
- !fallbackSummary.includes("Persistent facts:") &&
264
- !fallbackSummary.includes("transient failure 0") &&
265
- !fallbackSummary.includes("transient failure 7");
266
- const consecutiveHistory = [...budgetCompacted.messages, createTextMessage("assistant", "new assistant"), createTextMessage("user", "newest real request")];
267
- const secondCompacted = await compactor.manualCompact(consecutiveHistory, { keepRecentTokenBudget: 200, summaryMaxChars: 3000 });
268
- const consecutiveCompactOk = secondCompacted.messages.at(-1)?.metadata?.compactBoundary === true &&
269
- secondCompacted.messages.filter((message) => message.metadata?.compactBoundary === true).length === 1 &&
270
- secondCompacted.messages.slice(0, -1).every((message) => message.role === "user" && message.isMeta !== true) &&
271
- getMessagesAfterCompactBoundary(secondCompacted.messages).length === secondCompacted.messages.length &&
272
- secondCompacted.summary?.includes("newest real request") === true;
273
- const toolUseOld = {
274
- id: "assistant_old_tool",
275
- role: "assistant",
276
- createdAt: new Date().toISOString(),
277
- blocks: [{ type: "tool_use", id: "call_old", name: "file_search", input: { query: "old" } }],
278
- };
279
- const toolUseNew = {
280
- id: "assistant_new_tool",
281
- role: "assistant",
282
- createdAt: new Date().toISOString(),
283
- blocks: [{ type: "tool_use", id: "call_new", name: "file_search", input: { query: "new" } }],
284
- };
285
- const oldResult = createToolResultMessage({ id: "call_old", name: "file_search", input: {} }, true, "old".repeat(1200));
286
- const newResult = createToolResultMessage({ id: "call_new", name: "file_search", input: {} }, true, "new".repeat(1200));
287
- const micro = microCompactIfNeeded([toolUseOld, oldResult, toolUseNew, newResult], { microCompactMaxChars: 100, keepRecentToolResults: 1 });
288
- const oldOutput = micro.messages[1]?.blocks[0]?.type === "tool_result" ? micro.messages[1].blocks[0].output : undefined;
289
- const newOutput = micro.messages[3]?.blocks[0]?.type === "tool_result" ? micro.messages[3].blocks[0].output : undefined;
290
- const microOk = micro.changed && oldOutput === CLEARED_TOOL_RESULT_CONTENT && typeof newOutput === "string" && newOutput.startsWith("new");
291
- const orphanResult = createToolResultMessage({ id: "call_orphan", name: "file_search", input: {} }, true, "orphan");
292
- const paired = ensureToolResultPairing([toolUseOld, createTextMessage("assistant", "done"), orphanResult]);
293
- const pairedJson = JSON.stringify(paired);
294
- const pairingOk = hasValidToolResultPairing(paired) &&
295
- pairedJson.includes("call_old") &&
296
- pairedJson.includes("synthetic failure result") &&
297
- !pairedJson.includes("call_orphan");
298
- const bigGrepUse = {
299
- id: "assistant_big_grep",
300
- role: "assistant",
301
- createdAt: new Date().toISOString(),
302
- blocks: [{ type: "tool_use", id: "call_big_grep", name: "file_search", input: { query: "^|\\S", root: ".." } }],
303
- };
304
- const bigGrepResult = createToolResultMessage({ id: "call_big_grep", name: "file_search", input: {} }, true, JSON.stringify({ query: "^|\\S", root: "..", matches: Array.from({ length: 600 }, (_, index) => `match ${index}: ${"x".repeat(80)}`) }));
305
- const budgetedGrep = applyToolResultBudget([bigGrepUse, bigGrepResult], { maxSerializedLength: 1200 });
306
- const microGrep = microCompactIfNeeded(budgetedGrep, { microCompactMaxChars: 100, keepRecentToolResults: 1 });
307
- const repairedGrep = ensureToolResultPairing(microGrep.messages);
308
- const grepOutput = repairedGrep[1]?.blocks[0]?.type === "tool_result" ? String(repairedGrep[1].blocks[0].output) : "";
309
- const grepRegressionOk = hasValidToolResultPairing(repairedGrep) &&
310
- grepOutput.startsWith("[Tool result truncated for context budget: original ") &&
311
- !grepOutput.includes('"preview"') &&
312
- !grepOutput.includes('"truncated"');
313
- const summaryGateway = new SummaryGateway();
314
- const modelCompactor = new ModelDrivenCompactor(summaryGateway);
315
- const summaryToolUse = {
316
- id: "assistant_summary_tool",
317
- role: "assistant",
318
- createdAt: new Date().toISOString(),
319
- blocks: [{ type: "tool_use", id: "summary_call", name: "file_read", input: { path: "C:\\Users\\qyq\\Desktop\\work\\codex" } }],
320
- };
321
- const summaryToolResult = createToolResultMessage({ id: "summary_call", name: "file_read", input: {} }, false, "temporary read failure");
322
- const summaryImageUser = {
323
- ...createTextMessage("user", "historical image reference"),
324
- blocks: [
325
- { type: "text", text: "historical image reference" },
326
- { type: "image", mimeType: "image/png", data: "aGVsbG8=", label: "summary-history-image" },
327
- ],
328
- };
329
- const largeSummaryToolUse = {
330
- id: "assistant_large_summary_tool",
331
- role: "assistant",
332
- createdAt: new Date().toISOString(),
333
- blocks: [{ type: "tool_use", id: "large_summary_call", name: "file_read", input: { path: "large.log" } }],
334
- };
335
- const largeSummaryToolResult = createToolResultMessage({ id: "large_summary_call", name: "file_read", input: {} }, true, `START_SENTINEL ${"large-output ".repeat(1500)} END_SENTINEL`);
336
- const modelHistory = [
337
- createTextMessage("user", "Please improve summary quality. Codex repository: C:\\Users\\qyq\\Desktop\\work\\codex"),
338
- createThinkingMessage("private persisted reasoning"),
339
- summaryImageUser,
340
- summaryToolUse,
341
- summaryToolResult,
342
- largeSummaryToolUse,
343
- largeSummaryToolResult,
344
- ...longHistory,
345
- ];
346
- const modelCompacted = await modelCompactor.compact(modelHistory, {
347
- snipMaxChars: 20000,
348
- microCompactMaxChars: 19000,
349
- autoCompactMaxChars: 1500,
350
- keepRecentMessages: 3,
351
- summaryMaxChars: 24,
352
- });
353
- const compactRequestMessages = summaryGateway.lastRequest?.messages ?? [];
354
- const compactInstruction = compactRequestMessages.at(-1);
355
- const modelCompactOk = summaryGateway.compactCalls === 1 &&
356
- compactRequestMessages.length === modelHistory.length &&
357
- compactRequestMessages[0]?.role === "user" &&
358
- compactRequestMessages.some((message) => message.blocks.some((block) => block.type === "tool_use" && block.id === "summary_call")) &&
359
- compactRequestMessages.some((message) => message.blocks.some((block) => block.type === "tool_result" && block.toolUseId === "summary_call")) &&
360
- compactRequestMessages.some((message) => message.metadata?.compactInputNormalized === true && message.blocks.some((block) => block.type === "text" && block.text.includes("summary-history-image"))) &&
361
- !compactRequestMessages.some((message) => message.blocks.some((block) => block.type === "image")) &&
362
- summaryGateway.requestText.includes("Tool result normalized for compaction") &&
363
- summaryGateway.requestText.includes("START_SENTINEL") &&
364
- summaryGateway.requestText.includes("END_SENTINEL") &&
365
- compactInstruction?.role === "user" &&
366
- compactInstruction.metadata?.compactInstruction === true &&
367
- compactInstruction.blocks.some((block) => block.type === "text" && block.text.includes("CONTEXT CHECKPOINT COMPACTION")) &&
368
- summaryGateway.lastRequest?.instructions === undefined &&
369
- summaryGateway.lastRequest?.toolChoice === "none" &&
370
- !summaryGateway.requestText.includes("private persisted reasoning") &&
371
- modelCompacted.changed &&
372
- modelCompacted.summary?.includes("C:\\Users\\qyq\\Desktop\\work\\codex") === true &&
373
- modelCompacted.summary.includes("AUTHORITY_SUMMARY_END") &&
374
- !modelCompacted.summary.includes("Persistent facts:") &&
375
- modelCompacted.messages.some((message) => message.metadata?.modelDriven === true);
376
- const sequenceGateway = new SequenceSummaryGateway();
377
- const sequenceCompactor = new ModelDrivenCompactor(sequenceGateway);
378
- const firstSequenceCompact = await sequenceCompactor.manualCompact?.([
379
- createTextMessage("user", "original request"),
380
- createTextMessage("assistant", "investigating"),
381
- ], { keepRecentTokenBudget: 200 });
382
- const secondSequenceCompact = await sequenceCompactor.manualCompact?.([
383
- ...(firstSequenceCompact?.messages ?? []),
384
- createTextMessage("user", "corrected request; implementation is approved"),
385
- ], { keepRecentTokenBudget: 200 });
386
- const secondSequenceRequest = sequenceGateway.requests[1];
387
- const consecutiveModelCompactOk = sequenceGateway.requests.length === 2 &&
388
- secondSequenceRequest?.messages.some((message) => message.metadata?.compactBoundary === true && JSON.stringify(message).includes("OLDER_CHECKPOINT")) === true &&
389
- secondSequenceRequest.messages.some((message) => message.role === "user" && JSON.stringify(message).includes("corrected request")) &&
390
- secondSequenceRequest.messages.at(-1)?.metadata?.compactInstruction === true &&
391
- secondSequenceCompact?.summary?.includes("LATEST_CHECKPOINT") === true &&
392
- !secondSequenceCompact.summary.includes("OLDER_CHECKPOINT") &&
393
- !secondSequenceCompact.summary.includes("Persistent facts:");
394
- const manualOnly = new ManualOnlyCompactor(modelCompactor);
395
- const gpt56WindowOk = resolveContextWindowTokens("gpt-5.6", {}).source === "unknown"
396
- && resolveContextWindowTokens("gpt-6", {}).source === "unknown"
397
- && resolveContextWindowTokens("gpt-6-astra", {}).tokens === 256000
398
- && resolveContextWindowTokens("gpt-5.6-sol", {}).tokens === 256000
399
- && resolveContextWindowTokens("gpt-5.6-terra", {}).tokens === 256000
400
- && resolveContextWindowTokens("gpt-5.6-luna", {}).tokens === 256000;
401
- const sessionWindowMetrics = buildContextMetrics({
402
- model: "gpt-5.6",
403
- contextWindowTokensOverride: 64000,
404
- messages: [],
405
- systemPrompt: "smoke",
406
- tools: [],
407
- });
408
- const sessionWindowOk = sessionWindowMetrics.contextWindowTokens === 64000
409
- && sessionWindowMetrics.contextWindowSource === "session";
410
- const automaticDisabled = await manualOnly.compact(longHistory, {
411
- autoCompactMaxChars: 1,
412
- estimatedInputTokens: 1000,
413
- contextWindowTokens: 1000,
414
- });
415
- const reactiveDisabled = await manualOnly.reactiveCompact?.(longHistory, new Error("prompt too long"), {
416
- keepRecentMessages: 1,
417
- });
418
- const automaticDisabledOk = automaticDisabled.changed === false &&
419
- reactiveDisabled?.changed === false &&
420
- summaryGateway.compactCalls === 1;
421
- const gateway = new ContextOverflowThenSuccessGateway();
422
- const engine = new QueryEngine({
423
- modelGateway: gateway,
424
- tools: new ToolRegistry(),
425
- contextManager,
426
- compactor,
427
- contextBudget: { keepRecentMessages: 3, summaryMaxChars: 1000 },
428
- maxTurns: 4,
429
- });
430
- const events = [];
431
- let telemetryOk = false;
432
- let reactiveCompactionReportOk = false;
433
- for await (const event of engine.sendUserText("trigger reactive compact")) {
434
- events.push(event.type === "terminal" ? `${event.type}:${event.reason}` : event.type);
435
- if (event.type === "context.compacted") {
436
- reactiveCompactionReportOk =
437
- event.compaction.reason === "reactive_compact" &&
438
- event.compaction.sourceMessages > 0 &&
439
- event.compaction.newWindowMessages > 0 &&
440
- event.compaction.preservedUserMessages > 0 &&
441
- event.compaction.summary.length > 0 &&
442
- event.compaction.continuationState.length > 0;
443
- }
444
- if (event.type === "context.metrics") {
445
- telemetryOk ||= Boolean(event.metrics.cacheDiagnostics?.systemPromptHash &&
446
- event.metrics.cacheDiagnostics.stablePrefixHash &&
447
- event.metrics.cacheDiagnostics.promptCacheKey &&
448
- event.metrics.cacheDiagnostics.cacheablePrefixTokens >= 0 &&
449
- event.metrics.cacheDiagnostics.toolDefinitionsHash &&
450
- event.metrics.cacheDiagnostics.promptSections.length > 0);
451
- }
452
- }
453
- const reactiveOk = gateway.calls === 2 &&
454
- gateway.sawBoundaryOnRetry &&
455
- gateway.sawUserContext &&
456
- gateway.sawSystemContext &&
457
- events.includes("terminal:completed");
458
- const defaultGateway = new ContextOverflowThenSuccessGateway();
459
- const defaultEngine = new QueryEngine({
460
- modelGateway: defaultGateway,
461
- tools: new ToolRegistry(),
462
- contextManager,
463
- maxTurns: 4,
464
- });
465
- const defaultEvents = [];
466
- for await (const event of defaultEngine.sendUserText("recover from a provider context error")) {
467
- defaultEvents.push(event.type === "terminal" ? `${event.type}:${event.reason}` : event.type);
468
- }
469
- const defaultAutomaticEnabledOk = defaultGateway.calls === 3 &&
470
- defaultGateway.sawBoundaryOnRetry &&
471
- defaultEvents.includes("context.compacted") &&
472
- defaultEvents.includes("terminal:completed");
473
- const thresholdGateway = new ThresholdAutoCompactGateway();
474
- const thresholdEngine = new QueryEngine({
475
- model: "gpt-5.6-sol",
476
- contextWindowTokensOverride: 1000,
477
- modelGateway: thresholdGateway,
478
- tools: new ToolRegistry(),
479
- contextManager,
480
- contextBudget: { autoCompactTriggerRatio: 0.92, keepRecentTokenBudget: 100 },
481
- maxTurns: 2,
482
- });
483
- const thresholdEvents = [];
484
- for await (const event of thresholdEngine.sendUserText("x".repeat(5000))) {
485
- thresholdEvents.push(event.type === "terminal" ? `${event.type}:${event.reason}` : event.type);
486
- }
487
- const thresholdAutomaticOk = thresholdGateway.compactCalls === 1 &&
488
- thresholdGateway.modelCalls === 1 &&
489
- thresholdGateway.sawBoundary &&
490
- thresholdEvents.includes("context.compacted") &&
491
- thresholdEvents.includes("terminal:completed") &&
492
- thresholdEngine.getHistoryMessages().some((message) => message.metadata?.compactBoundary === true);
493
- const ok = promptOk && contextOk && recoveryHintOk && extensionOk && budgetOk && compactOk && compactReportOk && budgetWindowOk && defaultBudgetOk && fallbackQualityOk && consecutiveCompactOk && microOk && pairingOk && grepRegressionOk && modelCompactOk && consecutiveModelCompactOk && gpt56WindowOk && sessionWindowOk && automaticDisabledOk && reactiveOk && reactiveCompactionReportOk && defaultAutomaticEnabledOk && thresholdAutomaticOk && telemetryOk;
494
- console.log(JSON.stringify({ ok, promptOk, contextOk, recoveryHintOk, extensionOk, budgetOk, compactOk, compactReportOk, budgetWindowOk, defaultBudgetOk, fallbackQualityOk, consecutiveCompactOk, microOk, pairingOk, grepRegressionOk, modelCompactOk, consecutiveModelCompactOk, gpt56WindowOk, sessionWindowOk, automaticDisabledOk, reactiveOk, reactiveCompactionReportOk, defaultAutomaticEnabledOk, thresholdAutomaticOk, telemetryOk, events, defaultEvents, thresholdEvents, calls: gateway.calls, defaultCalls: defaultGateway.calls, thresholdCompactCalls: thresholdGateway.compactCalls }, null, 2));
495
- if (!ok)
496
- process.exitCode = 1;
497
- }
498
- main().catch((error) => {
499
- console.error(error instanceof Error ? error.stack ?? error.message : String(error));
500
- process.exitCode = 1;
501
- });
502
- //# sourceMappingURL=smoke-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smoke-context.js","sourceRoot":"","sources":["../../src/context/smoke-context.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};