neoctl 0.2.28 → 0.2.30

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.
@@ -0,0 +1,59 @@
1
+ import { ExecProcessManager } from "../tools/builtins/exec-process-manager.js";
2
+ import { WebRepl } from "./index.js";
3
+ async function main() {
4
+ const processManager = new ExecProcessManager({ completedRetentionMs: 2_000 });
5
+ const started = await processManager.execute(terminalOptions(), 0);
6
+ const sessionId = started.session_id;
7
+ const foregroundId = processManager.start({ ...terminalOptions(), description: "尚在前台等待" });
8
+ const runtime = {
9
+ execProcessManager: processManager,
10
+ taskStore: {
11
+ activeCount: () => 0,
12
+ subscribe: () => () => undefined,
13
+ list: () => [],
14
+ isTerminal: () => false,
15
+ },
16
+ engine: {
17
+ getHistoryMessages: () => [],
18
+ snapshot: () => ({ messages: 0, session: { sessionId: "web-smoke" } }),
19
+ isFastMode: () => false,
20
+ getAppPrompt: () => ({ hasActivePrompt: false }),
21
+ onSessionTitleChange: () => () => undefined,
22
+ },
23
+ initialMetrics: {},
24
+ };
25
+ const repl = new WebRepl(runtime);
26
+ const snapshot = repl.snapshot();
27
+ const terminal = snapshot.backgroundTasks[0];
28
+ const visible = snapshot.backgroundTaskCount === 1
29
+ && snapshot.backgroundTasks.length === 1
30
+ && terminal?.kind === "terminal"
31
+ && terminal?.sessionId === sessionId
32
+ && terminal?.command === "node background terminal smoke";
33
+ const foregroundHidden = snapshot.backgroundTasks.every((task) => task.sessionId !== foregroundId);
34
+ await processManager.interact(sessionId, { signal: "kill", yieldTimeMs: 3_000 });
35
+ await processManager.interact(foregroundId, { signal: "kill", yieldTimeMs: 3_000 });
36
+ const cleared = repl.snapshot().backgroundTasks.length === 0;
37
+ const checks = { runningTerminalIsListed: visible, foregroundTerminalIsHidden: foregroundHidden, terminalIsRemovedAfterExit: cleared };
38
+ const ok = Object.values(checks).every(Boolean);
39
+ console.log(JSON.stringify({ ok, checks }, null, 2));
40
+ if (!ok)
41
+ process.exitCode = 1;
42
+ }
43
+ function terminalOptions() {
44
+ return {
45
+ command: "node background terminal smoke",
46
+ description: "后台终端冒烟测试",
47
+ cwd: process.cwd(),
48
+ shell: { requested: "node", file: process.execPath, args: ["-e", "setTimeout(() => {}, 5000);", "--"] },
49
+ env: {},
50
+ timeoutMs: 10_000,
51
+ maxOutputChars: 4_000,
52
+ tty: false,
53
+ };
54
+ }
55
+ void main().catch((error) => {
56
+ console.error(error);
57
+ process.exitCode = 1;
58
+ });
59
+ //# sourceMappingURL=smoke-web-terminal-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-web-terminal-tasks.js","sourceRoot":"","sources":["../../src/web/smoke-web-terminal-tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoctl",
3
- "version": "0.2.28",
3
+ "version": "0.2.30",
4
4
  "description": "TypeScript scaffold for a streaming agent runtime with a REPL UI layer.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -53,6 +53,7 @@
53
53
  "smoke:cli": "tsx src/repl/smoke-run-command.ts",
54
54
  "smoke:web-plan": "tsx src/web/smoke-plan-payload.ts",
55
55
  "smoke:web-context": "tsx src/web/smoke-runtime-context-protocol.ts",
56
+ "smoke:web-terminal-tasks": "tsx src/web/smoke-web-terminal-tasks.ts",
56
57
  "smoke:web-queue": "tsx src/web/smoke-web-queue.ts",
57
58
  "smoke:openai": "tsx src/model/smoke-openai.ts"
58
59
  },
@@ -64,7 +65,7 @@
64
65
  },
65
66
  "dependencies": {
66
67
  "@highlightjs/cdn-assets": "^11.11.1",
67
- "@lydell/node-pty": "^1.2.0-beta.14",
68
+ "@lydell/node-pty": "1.2.0-beta.14",
68
69
  "@types/react": "^19.2.4",
69
70
  "chalk": "^5.6.2",
70
71
  "figures": "^6.1.0",