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.
- package/README.md +43 -585
- package/dist/context/prompts.js +2 -1
- package/dist/context/prompts.js.map +1 -1
- package/dist/core/run-agent.js +2 -0
- package/dist/core/run-agent.js.map +1 -1
- package/dist/repl/index.js +13 -1
- package/dist/repl/index.js.map +1 -1
- package/dist/tools/builtins/image-capabilities.d.ts +21 -0
- package/dist/tools/builtins/image-capabilities.js +97 -0
- package/dist/tools/builtins/image-capabilities.js.map +1 -0
- package/dist/tools/builtins/image-generation-tool.d.ts +14 -7
- package/dist/tools/builtins/image-generation-tool.js +141 -143
- package/dist/tools/builtins/image-generation-tool.js.map +1 -1
- package/dist/tools/builtins/image-output-verification.d.ts +14 -0
- package/dist/tools/builtins/image-output-verification.js +183 -0
- package/dist/tools/builtins/image-output-verification.js.map +1 -0
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.js +6 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-tool-use.js +5 -0
- package/dist/tools/run-tool-use.js.map +1 -1
- package/dist/web/image-result-metadata.d.ts +20 -0
- package/dist/web/image-result-metadata.js +20 -0
- package/dist/web/image-result-metadata.js.map +1 -0
- package/dist/web/index.d.ts +4 -1
- package/dist/web/index.js +20 -5
- package/dist/web/index.js.map +1 -1
- package/docs/prompt-config.md +1 -1
- package/package.json +22 -20
- package/dist/agents/agent-report-security.test.d.ts +0 -1
- package/dist/agents/agent-report-security.test.js +0 -301
- package/dist/agents/agent-report-security.test.js.map +0 -1
- package/dist/agents/agent-tool-persistence.test.d.ts +0 -1
- package/dist/agents/agent-tool-persistence.test.js +0 -319
- package/dist/agents/agent-tool-persistence.test.js.map +0 -1
- package/dist/agents/coordination-boundary.test.d.ts +0 -1
- package/dist/agents/coordination-boundary.test.js +0 -58
- package/dist/agents/coordination-boundary.test.js.map +0 -1
- package/dist/agents/live-preview-redaction-security.test.d.ts +0 -1
- package/dist/agents/live-preview-redaction-security.test.js +0 -286
- package/dist/agents/live-preview-redaction-security.test.js.map +0 -1
- package/dist/agents/no-nested-delegation.test.d.ts +0 -1
- package/dist/agents/no-nested-delegation.test.js +0 -38
- package/dist/agents/no-nested-delegation.test.js.map +0 -1
- package/dist/agents/obs07-11-run-facts.test.d.ts +0 -1
- package/dist/agents/obs07-11-run-facts.test.js +0 -459
- package/dist/agents/obs07-11-run-facts.test.js.map +0 -1
- package/dist/agents/smoke-agent-lifecycle.d.ts +0 -1
- package/dist/agents/smoke-agent-lifecycle.js +0 -192
- package/dist/agents/smoke-agent-lifecycle.js.map +0 -1
- package/dist/agents/smoke-agents.d.ts +0 -1
- package/dist/agents/smoke-agents.js +0 -362
- package/dist/agents/smoke-agents.js.map +0 -1
- package/dist/context/prompt-config.test.d.ts +0 -1
- package/dist/context/prompt-config.test.js +0 -128
- package/dist/context/prompt-config.test.js.map +0 -1
- package/dist/context/smoke-context.d.ts +0 -1
- package/dist/context/smoke-context.js +0 -502
- package/dist/context/smoke-context.js.map +0 -1
- package/dist/core/obs04-visible-data.test.d.ts +0 -1
- package/dist/core/obs04-visible-data.test.js +0 -147
- package/dist/core/obs04-visible-data.test.js.map +0 -1
- package/dist/core/query-session-settings.test.d.ts +0 -1
- package/dist/core/query-session-settings.test.js +0 -252
- package/dist/core/query-session-settings.test.js.map +0 -1
- package/dist/core/run-agent-pause.test.d.ts +0 -1
- package/dist/core/run-agent-pause.test.js +0 -52
- package/dist/core/run-agent-pause.test.js.map +0 -1
- package/dist/core/run-agent-persistence.test.d.ts +0 -1
- package/dist/core/run-agent-persistence.test.js +0 -222
- package/dist/core/run-agent-persistence.test.js.map +0 -1
- package/dist/core/session-prompt-inheritance.test.d.ts +0 -1
- package/dist/core/session-prompt-inheritance.test.js +0 -132
- package/dist/core/session-prompt-inheritance.test.js.map +0 -1
- package/dist/core/session-settings-prompt.test.d.ts +0 -1
- package/dist/core/session-settings-prompt.test.js +0 -266
- package/dist/core/session-settings-prompt.test.js.map +0 -1
- package/dist/core/smoke-core-loop.d.ts +0 -1
- package/dist/core/smoke-core-loop.js +0 -290
- package/dist/core/smoke-core-loop.js.map +0 -1
- package/dist/core/smoke-image-integrity.d.ts +0 -1
- package/dist/core/smoke-image-integrity.js +0 -67
- package/dist/core/smoke-image-integrity.js.map +0 -1
- package/dist/execution/docker.test.d.ts +0 -1
- package/dist/execution/docker.test.js +0 -57
- package/dist/execution/docker.test.js.map +0 -1
- package/dist/model/openai-native-image-guard.test.d.ts +0 -1
- package/dist/model/openai-native-image-guard.test.js +0 -101
- package/dist/model/openai-native-image-guard.test.js.map +0 -1
- package/dist/model/openai-responses-instructions.test.d.ts +0 -1
- package/dist/model/openai-responses-instructions.test.js +0 -64
- package/dist/model/openai-responses-instructions.test.js.map +0 -1
- package/dist/model/smoke-openai.d.ts +0 -1
- package/dist/model/smoke-openai.js +0 -44
- package/dist/model/smoke-openai.js.map +0 -1
- package/dist/model/smoke-responses-mapper.d.ts +0 -1
- package/dist/model/smoke-responses-mapper.js +0 -156
- package/dist/model/smoke-responses-mapper.js.map +0 -1
- package/dist/plugins/smoke-plugin-system.d.ts +0 -1
- package/dist/plugins/smoke-plugin-system.js +0 -63
- package/dist/plugins/smoke-plugin-system.js.map +0 -1
- package/dist/repl/smoke-run-command.d.ts +0 -1
- package/dist/repl/smoke-run-command.js +0 -43
- package/dist/repl/smoke-run-command.js.map +0 -1
- package/dist/secrets/smoke-secrets.d.ts +0 -1
- package/dist/secrets/smoke-secrets.js +0 -73
- package/dist/secrets/smoke-secrets.js.map +0 -1
- package/dist/session/session-store-safety.test.d.ts +0 -1
- package/dist/session/session-store-safety.test.js +0 -107
- package/dist/session/session-store-safety.test.js.map +0 -1
- package/dist/session/smoke-session.d.ts +0 -1
- package/dist/session/smoke-session.js +0 -233
- package/dist/session/smoke-session.js.map +0 -1
- package/dist/skills/smoke-skills.d.ts +0 -1
- package/dist/skills/smoke-skills.js +0 -109
- package/dist/skills/smoke-skills.js.map +0 -1
- package/dist/tasks/subagent-tools.test.d.ts +0 -1
- package/dist/tasks/subagent-tools.test.js +0 -159
- package/dist/tasks/subagent-tools.test.js.map +0 -1
- package/dist/tasks/task-ack-size.test.d.ts +0 -1
- package/dist/tasks/task-ack-size.test.js +0 -101
- package/dist/tasks/task-ack-size.test.js.map +0 -1
- package/dist/tasks/task-persistence.test.d.ts +0 -1
- package/dist/tasks/task-persistence.test.js +0 -331
- package/dist/tasks/task-persistence.test.js.map +0 -1
- package/dist/tools/smoke-exec-process.d.ts +0 -1
- package/dist/tools/smoke-exec-process.js +0 -127
- package/dist/tools/smoke-exec-process.js.map +0 -1
- package/dist/tools/smoke-terminal-output-chain.d.ts +0 -1
- package/dist/tools/smoke-terminal-output-chain.js +0 -245
- package/dist/tools/smoke-terminal-output-chain.js.map +0 -1
- package/dist/tools/smoke-tool-system.d.ts +0 -1
- package/dist/tools/smoke-tool-system.js +0 -412
- package/dist/tools/smoke-tool-system.js.map +0 -1
- package/dist/tools/terminal-background-history.test.d.ts +0 -1
- package/dist/tools/terminal-background-history.test.js +0 -77
- package/dist/tools/terminal-background-history.test.js.map +0 -1
- package/dist/tools/terminal-output-persistence.test.d.ts +0 -1
- package/dist/tools/terminal-output-persistence.test.js +0 -50
- package/dist/tools/terminal-output-persistence.test.js.map +0 -1
- package/dist/tools/terminal-output-store.test.d.ts +0 -1
- package/dist/tools/terminal-output-store.test.js +0 -364
- package/dist/tools/terminal-output-store.test.js.map +0 -1
- package/dist/web/agent-content-detail.test.d.ts +0 -1
- package/dist/web/agent-content-detail.test.js +0 -307
- package/dist/web/agent-content-detail.test.js.map +0 -1
- package/dist/web/agent-parent-messages.test.d.ts +0 -1
- package/dist/web/agent-parent-messages.test.js +0 -58
- package/dist/web/agent-parent-messages.test.js.map +0 -1
- package/dist/web/agent-tool-payload-security.test.d.ts +0 -1
- package/dist/web/agent-tool-payload-security.test.js +0 -120
- package/dist/web/agent-tool-payload-security.test.js.map +0 -1
- package/dist/web/prompt-config-protocol.test.d.ts +0 -1
- package/dist/web/prompt-config-protocol.test.js +0 -78
- package/dist/web/prompt-config-protocol.test.js.map +0 -1
- package/dist/web/session-prompt-integration.test.d.ts +0 -1
- package/dist/web/session-prompt-integration.test.js +0 -57
- package/dist/web/session-prompt-integration.test.js.map +0 -1
- package/dist/web/session-settings.test.d.ts +0 -1
- package/dist/web/session-settings.test.js +0 -254
- package/dist/web/session-settings.test.js.map +0 -1
- package/dist/web/smoke-agent-content-http.d.ts +0 -1
- package/dist/web/smoke-agent-content-http.js +0 -446
- package/dist/web/smoke-agent-content-http.js.map +0 -1
- package/dist/web/smoke-plan-payload.d.ts +0 -1
- package/dist/web/smoke-plan-payload.js +0 -30
- package/dist/web/smoke-plan-payload.js.map +0 -1
- package/dist/web/smoke-runtime-context-protocol.d.ts +0 -1
- package/dist/web/smoke-runtime-context-protocol.js +0 -42
- package/dist/web/smoke-runtime-context-protocol.js.map +0 -1
- package/dist/web/smoke-status-semantics.d.ts +0 -1
- package/dist/web/smoke-status-semantics.js +0 -90
- package/dist/web/smoke-status-semantics.js.map +0 -1
- package/dist/web/smoke-task-session-entrypoints.d.ts +0 -1
- package/dist/web/smoke-task-session-entrypoints.js +0 -96
- package/dist/web/smoke-task-session-entrypoints.js.map +0 -1
- package/dist/web/smoke-terminal-output-http.d.ts +0 -1
- package/dist/web/smoke-terminal-output-http.js +0 -377
- package/dist/web/smoke-terminal-output-http.js.map +0 -1
- package/dist/web/smoke-tool-call-detail.d.ts +0 -1
- package/dist/web/smoke-tool-call-detail.js +0 -106
- package/dist/web/smoke-tool-call-detail.js.map +0 -1
- package/dist/web/smoke-tool-call-http.d.ts +0 -1
- package/dist/web/smoke-tool-call-http.js +0 -100
- package/dist/web/smoke-tool-call-http.js.map +0 -1
- package/dist/web/smoke-tool-detail-fields-http.d.ts +0 -1
- package/dist/web/smoke-tool-detail-fields-http.js +0 -121
- package/dist/web/smoke-tool-detail-fields-http.js.map +0 -1
- package/dist/web/smoke-web-agent-tasks.d.ts +0 -1
- package/dist/web/smoke-web-agent-tasks.js +0 -50
- package/dist/web/smoke-web-agent-tasks.js.map +0 -1
- package/dist/web/smoke-web-history.d.ts +0 -1
- package/dist/web/smoke-web-history.js +0 -183
- package/dist/web/smoke-web-history.js.map +0 -1
- package/dist/web/smoke-web-queue.d.ts +0 -1
- package/dist/web/smoke-web-queue.js +0 -7
- package/dist/web/smoke-web-queue.js.map +0 -1
- package/dist/web/smoke-web-terminal-tasks.d.ts +0 -1
- package/dist/web/smoke-web-terminal-tasks.js +0 -238
- package/dist/web/smoke-web-terminal-tasks.js.map +0 -1
- package/dist/web/terminal-presentation.test.d.ts +0 -1
- package/dist/web/terminal-presentation.test.js +0 -33
- package/dist/web/terminal-presentation.test.js.map +0 -1
- package/dist/web/tool-detail-fields.test.d.ts +0 -1
- package/dist/web/tool-detail-fields.test.js +0 -121
- 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 {};
|