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,245 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import fs from "node:fs";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { ExecProcessManager } from "./builtins/exec-process-manager.js";
6
- import { TerminalOutputStore, TERMINAL_OUTPUT_RETENTION_MS } from "./terminal-output-store.js";
7
- import { InMemorySecretRedactionRegistry } from "../secrets/secret-redaction.js";
8
- const root = fs.mkdtempSync(path.join(os.tmpdir(), "neo-terminal-chain-"));
9
- const owner = "owner-a";
10
- const dir = path.join(root, owner);
11
- fs.mkdirSync(dir);
12
- const managers = [];
13
- const checks = [];
14
- function manager(options = {}) {
15
- const m = new ExecProcessManager({ sessionsRoot: root, ...options });
16
- managers.push(m);
17
- return m;
18
- }
19
- function value(result) {
20
- if (!result.ok)
21
- throw new Error(`Store failed: ${result.reason}`);
22
- return result.value;
23
- }
24
- function options(command, overrides = {}) {
25
- return { ownerId: owner, sessionDir: dir, command, cwd: process.cwd(),
26
- shell: { requested: "node", file: process.execPath, args: ["-e"] }, env: {},
27
- timeoutMs: 10_000, maxOutputChars: 1_000, tty: false, ...overrides };
28
- }
29
- function full(m, id, stream, ownerId = owner, limitBytes = 997) {
30
- let offset = 0;
31
- let text = "";
32
- for (let i = 0; i < 100000; i++) {
33
- const page = value(m.readOutput(ownerId, id, { stream, offset, limitBytes }));
34
- assert.equal(page.record.availability, "available");
35
- assert.notEqual(page.text, null);
36
- assert.equal(page.offset, offset);
37
- assert.equal(page.nextOffset - offset, Buffer.byteLength(page.text));
38
- text += page.text;
39
- if (page.endOfStoredOutput)
40
- return text;
41
- assert.ok(page.nextOffset > offset);
42
- offset = page.nextOffset;
43
- }
44
- throw new Error("Pagination did not terminate");
45
- }
46
- function check(name) { checks.push(name); }
47
- const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
48
- async function main() {
49
- const m = manager();
50
- const expected = "HEAD\n\n 中文😀\n" + "x中😀\n".repeat(30000) + "TAIL\n";
51
- const err = "ERR\n\n 缩进😀\n";
52
- const long = await m.execute(options(`process.stdout.write('HEAD\\n\\n 中文😀\\n' + 'x中😀\\n'.repeat(30000) + 'TAIL\\n'); process.stderr.write(${JSON.stringify(err)})`), 5000);
53
- assert.equal(long.exit_code, 0);
54
- assert.equal(long.output_kind, "incremental");
55
- assert.ok(long.output_ranges.stdout.truncated);
56
- assert.equal(long.output_ranges.stdout.start, 0);
57
- assert.equal(long.output_ranges.stdout.end, Buffer.byteLength(expected));
58
- assert.equal(full(m, long.session_id, "stdout"), expected);
59
- assert.equal(full(m, long.session_id, "stderr"), err);
60
- assert.equal(full(m, long.session_id, "stdout"), expected);
61
- assert.ok(!long.output_ref.truncated);
62
- const emptyDrain = await m.interact(long.session_id, { ownerId: owner, yieldTimeMs: 0 });
63
- assert.equal(emptyDrain.stdout, "");
64
- assert.equal(emptyDrain.output_ranges.stdout.start, long.output_ranges.stdout.end);
65
- assert.equal(emptyDrain.output_ranges.stdout.end, long.output_ranges.stdout.end);
66
- const live = m.list(owner).find((r) => r.session_id === long.session_id);
67
- assert.equal(live.output_kind, "snapshot");
68
- assert.equal(live.output_truncated, true);
69
- assert.ok(live.output.length < 1100);
70
- check("long split output, multiline/Unicode, bounded drain gaps, snapshot, repeat pagination without duplicate");
71
- const echo = await m.execute(options(`process.stdin.setEncoding('utf8'); process.stdin.on('data', s => { process.stdout.write(s); if(s.includes('DONE')) process.exit(0); });`), 0);
72
- for (let i = 0; i < 3; i++) {
73
- const registered = value(m.registerOwnerSession(owner, dir));
74
- const current = registered.records.find((r) => r.record.runId === echo.session_id);
75
- assert.equal(current.record.lifecycle, "running");
76
- assert.equal(current.record.exit, null);
77
- assert.equal(current.record.availability, "available");
78
- }
79
- assert.ok(!value(m.listHistory(owner)).records.some((r) => r.record.runId === echo.session_id));
80
- check("repeated same-instance owner registration leaves real running process running, not lost/history");
81
- let cursor = 0;
82
- let gathered = "";
83
- for (const input of ["A中😀\n", "B\n\n", "DONE\n"]) {
84
- const r = await m.interact(echo.session_id, { ownerId: owner, chars: input, yieldTimeMs: input.includes("DONE") ? 5000 : 250 });
85
- assert.equal(r.output_ranges.stdout.start, cursor);
86
- cursor = r.output_ranges.stdout.end;
87
- gathered += r.stdout;
88
- }
89
- assert.equal(gathered, "A中😀\nB\n\nDONE\n");
90
- assert.equal(full(m, echo.session_id, "stdout", owner, 4), gathered);
91
- check("continuous real-process drains and four-byte Unicode pagination share per-stream cursors");
92
- const registry = new InMemorySecretRedactionRegistry();
93
- registry.record("token", "super-secret-token");
94
- const emitted = [];
95
- const secret = await m.execute(options(`process.stdout.write('out:super-'); process.stderr.write('err:super-'); setTimeout(()=>{process.stdout.write('secret-token😀\\r');process.stderr.write('secret-token\\n');setTimeout(()=>process.stdout.write('\\n end\\n'),30)},30)`, {
96
- redactOutput: (s) => registry.redact(s), createStreamingRedactor: () => registry.createStreamingRedactor(),
97
- }), 5000, (delta) => emitted.push(delta));
98
- assert.equal(secret.stdout, "out:[secret:token]😀\n end\n");
99
- assert.equal(secret.stderr, "err:[secret:token]\n");
100
- assert.equal(full(m, secret.session_id, "stdout"), secret.stdout);
101
- assert.equal(full(m, secret.session_id, "stderr"), secret.stderr);
102
- assert.ok(!JSON.stringify([secret, emitted, m.list(owner)]).includes("super-secret-token"));
103
- for (const stream of ["stdout", "stderr"]) {
104
- let end = 0;
105
- for (const d of emitted.filter((d) => d.stream === stream)) {
106
- assert.equal(d.streamStart, end);
107
- assert.equal(d.streamEnd - end, Buffer.byteLength(d.text));
108
- end = d.streamEnd;
109
- }
110
- assert.equal(end, secret.output_ranges[stream].end);
111
- }
112
- check("cross-chunk secrets isolated by stream, final flush, emoji and split CRLF without leak or double newline");
113
- const failed = await m.execute(options("process.stderr.write('failed\\n'); process.exitCode=7"), 5000);
114
- assert.equal(failed.status, "exited");
115
- assert.equal(failed.exit_code, 7);
116
- assert.equal(failed.termination_reason, "failed");
117
- const id = m.start(options("setInterval(()=>{},1000)"));
118
- const killed = await m.interact(id, { ownerId: owner, signal: "kill", yieldTimeMs: 5000 });
119
- assert.equal(killed.status, "killed");
120
- assert.equal(killed.termination_reason, "user_kill");
121
- const history = value(m.listHistory(owner)).records;
122
- for (const r of [long, failed, killed]) {
123
- const record = history.find((h) => h.record.runId === r.session_id).record;
124
- assert.equal(record.exit?.status, r.status);
125
- assert.equal(record.exit?.exitCode, r.exit_code);
126
- assert.equal(record.exit?.signal, r.signal);
127
- assert.equal(record.exit?.durationMs, r.duration_ms);
128
- assert.equal(record.exit?.terminationReason, r.termination_reason);
129
- assert.equal(record.expiresAt, r.finished_at + TERMINAL_OUTPUT_RETENTION_MS);
130
- }
131
- check("0/nonzero/kill exit facts retained exactly, not success inferred from exited");
132
- const otherDir = path.join(root, "owner-b");
133
- fs.mkdirSync(otherDir);
134
- value(m.registerOwnerSession("owner-b", otherDir));
135
- assert.equal(m.readOutput("owner-b", long.session_id, { stream: "stdout" }).ok, false);
136
- assert.deepEqual(value(m.listHistory("owner-b")).records, []);
137
- assert.deepEqual(m.list("owner-b"), []);
138
- await assert.rejects(m.interact(long.session_id, { ownerId: "owner-b", yieldTimeMs: 0 }));
139
- assert.equal(m.registerOwnerSession(owner, otherDir).ok, false);
140
- const childDir = path.join(dir, "subagents", "child");
141
- fs.mkdirSync(childDir, { recursive: true });
142
- const child = await m.execute(options("console.log('child')", { ownerId: "child", sessionDir: childDir }), 5000);
143
- assert.equal(full(m, child.session_id, "stdout", "child"), "child\n");
144
- assert.equal(m.readOutput(owner, child.session_id, { stream: "stdout" }).ok, false);
145
- check("history/read/live/control cross-owner isolation and actual nested child session directory");
146
- const restored = manager();
147
- value(restored.registerOwnerSession(owner, dir));
148
- assert.equal(full(restored, long.session_id, "stdout"), expected);
149
- assert.equal(value(restored.listHistory(owner)).records.find((r) => r.record.runId === failed.session_id)?.record.exit?.exitCode, 7);
150
- assert.deepEqual(restored.list(owner), []);
151
- check("fresh manager/store reloads terminal history/output, never reconstructs running live tasks");
152
- // Stale persisted running metadata is a crash fixture, NOT a second manager recovering a live process.
153
- const lostDir = path.join(root, "lost-owner");
154
- fs.mkdirSync(lostDir);
155
- const abandonedStore = new TerminalOutputStore({ sessionsRoot: root });
156
- value(abandonedStore.start("lost-owner", lostDir, "abandoned", { startedAt: Date.now(), status: "running" }));
157
- const lostManager = manager();
158
- const recovery = value(lostManager.registerOwnerSession("lost-owner", lostDir));
159
- assert.equal(recovery.records[0]?.record.lifecycle, "lost");
160
- assert.equal(recovery.records[0]?.record.exit, null);
161
- assert.equal(value(lostManager.readOutput("lost-owner", "abandoned", { stream: "stdout" })).text, null);
162
- check("restart residue is lost, no synthetic exit/success or readable stale output");
163
- const capDir = path.join(root, "cap-owner");
164
- fs.mkdirSync(capDir);
165
- let now = Date.now();
166
- const capStore = new TerminalOutputStore({ sessionsRoot: root, now: () => now, maxBytesPerRun: 17 });
167
- const capManager = manager({ outputStore: capStore, maxProcesses: 1 });
168
- const cap = await capManager.execute(options("process.stdout.write('中😀'.repeat(50));process.stderr.write('ERR')", { ownerId: "cap-owner", sessionDir: capDir }), 5000);
169
- assert.equal(cap.output_ref.truncated, true);
170
- const capped = value(capManager.readOutput("cap-owner", cap.session_id, { stream: "stdout" }));
171
- assert.ok(capped.record.streams.stdout.storedBytes + capped.record.streams.stderr.storedBytes <= 17);
172
- assert.equal(capped.record.streams.stdout.observedBytes, 350);
173
- assert.ok(capped.text !== null && !capped.text.includes("�"));
174
- const next = await capManager.execute(options("console.log('next')", { ownerId: "cap-owner", sessionDir: capDir }), 5000);
175
- assert.equal(value(capManager.readOutput("cap-owner", cap.session_id, { stream: "stdout" })).record.availability, "evicted");
176
- assert.equal(value(capManager.listHistory("cap-owner")).records.length, 2);
177
- now = next.finished_at + TERMINAL_OUTPUT_RETENTION_MS;
178
- const expired = value(capManager.readOutput("cap-owner", next.session_id, { stream: "stdout" }));
179
- assert.equal(expired.record.availability, "expired");
180
- assert.equal(expired.text, null);
181
- assert.equal(expired.record.exit?.exitCode, 0);
182
- capManager.sweepOutput();
183
- check("shared byte cap explicit, global manager slot eviction cleans output not facts, exact TTL revokes reads");
184
- const ioDir = path.join(root, "io-owner");
185
- fs.mkdirSync(ioDir);
186
- const ioManager = manager();
187
- const io = await ioManager.execute(options("console.log('safe')", { ownerId: "io-owner", sessionDir: ioDir }), 5000);
188
- const outputFolder = fs.readdirSync(path.join(ioDir, "terminal-output"))[0];
189
- fs.unlinkSync(path.join(ioDir, "terminal-output", outputFolder, "stdout.txt"));
190
- const ioRead = value(ioManager.readOutput("io-owner", io.session_id, { stream: "stdout" }));
191
- assert.equal(ioRead.text, null);
192
- assert.equal(ioRead.record.availability, "io-error");
193
- const ioAgain = await ioManager.interact(io.session_id, { ownerId: "io-owner", yieldTimeMs: 0 });
194
- assert.equal(ioAgain.exit_code, 0);
195
- assert.equal(ioAgain.status, "exited");
196
- assert.equal(ioAgain.output_ref.availability, "io-error");
197
- const unavailable = await ioManager.execute(options("console.log('still runs')", { ownerId: "no-dir", sessionDir: path.join(root, "missing") }), 5000);
198
- assert.equal(unavailable.exit_code, 0);
199
- assert.equal(unavailable.output_ref.availability, "unavailable");
200
- check("store read/start I/O failures do not change process execution result");
201
- const meta = await m.execute(options("/*" + "中".repeat(1800) + "*/console.log('metadata')", { description: "😀".repeat(800) }), 5000);
202
- assert.equal(meta.exit_code, 0);
203
- const metaRecord = value(m.listHistory(owner)).records.find((r) => r.record.runId === meta.session_id).record;
204
- assert.deepEqual(metaRecord.metadata.truncatedFields, ["command", "description"]);
205
- assert.ok(Buffer.byteLength(metaRecord.metadata.command) <= 4096);
206
- assert.ok(Buffer.byteLength(metaRecord.metadata.description) <= 2048);
207
- assert.equal(full(m, meta.session_id, "stdout"), "metadata\n");
208
- const metadataReload = manager();
209
- value(metadataReload.registerOwnerSession(owner, dir));
210
- const reloadedMetadata = value(metadataReload.listHistory(owner)).records.find((r) => r.record.runId === meta.session_id).record.metadata;
211
- assert.deepEqual(reloadedMetadata.truncatedFields, ["command", "description"]);
212
- assert.equal(reloadedMetadata.command, metaRecord.metadata.command);
213
- check("oversize redacted metadata is Unicode-bounded and marked, run/history never rejected for long command");
214
- const tty = await m.execute(options("console.log('TTY:'+!!process.stdout.isTTY);console.error('merged')", { tty: true }), 5000);
215
- assert.equal(tty.exit_code, 0);
216
- assert.equal(tty.stream_mode, "tty_merged");
217
- assert.equal(tty.stderr, "");
218
- const ttyText = full(m, tty.session_id, "stdout");
219
- assert.ok(ttyText.includes("TTY:true") && ttyText.includes("merged"));
220
- assert.equal(full(m, tty.session_id, "stderr"), "");
221
- check("real PTY reports merged stream honestly, no fabricated stderr separation");
222
- // Default existing global policy remains 64 slots, across owners (small real processes).
223
- const slotDir = path.join(root, "slots");
224
- fs.mkdirSync(slotDir);
225
- const slotManager = manager();
226
- let first = "";
227
- for (let i = 0; i < 65; i++) {
228
- const r = await slotManager.execute(options("process.exit(0)", { ownerId: "slots", sessionDir: slotDir }), 5000);
229
- if (!i)
230
- first = r.session_id;
231
- }
232
- assert.equal(slotManager.list("slots").length, 64);
233
- assert.equal(value(slotManager.listHistory("slots", { limit: 100 })).records.length, 65);
234
- assert.equal(value(slotManager.readOutput("slots", first, { stream: "stdout" })).record.availability, "evicted");
235
- check("65 real runs verify unchanged global 64-slot retention with persistent exit history");
236
- console.log(JSON.stringify({ ok: true, count: checks.length, checks }, null, 2));
237
- }
238
- void main().catch((error) => { console.error(error); console.error({ passed: checks }); process.exitCode = 1; })
239
- .finally(async () => {
240
- for (const m of managers)
241
- m.terminateAll();
242
- await delay(150);
243
- fs.rmSync(root, { recursive: true, force: true });
244
- });
245
- //# sourceMappingURL=smoke-terminal-output-chain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smoke-terminal-output-chain.js","sourceRoot":"","sources":["../../src/tools/smoke-terminal-output-chain.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};