neoctl 0.2.36 → 0.2.37

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 (149) hide show
  1. package/dist/agents/agent-report-security.test.d.ts +1 -0
  2. package/dist/agents/agent-report-security.test.js +301 -0
  3. package/dist/agents/agent-report-security.test.js.map +1 -0
  4. package/dist/agents/agent-tool-persistence.test.js +9 -3
  5. package/dist/agents/agent-tool-persistence.test.js.map +1 -1
  6. package/dist/agents/agent-tool.d.ts +3 -0
  7. package/dist/agents/agent-tool.js +127 -34
  8. package/dist/agents/agent-tool.js.map +1 -1
  9. package/dist/agents/live-preview-redaction-security.test.d.ts +1 -0
  10. package/dist/agents/live-preview-redaction-security.test.js +286 -0
  11. package/dist/agents/live-preview-redaction-security.test.js.map +1 -0
  12. package/dist/agents/local-agent-task.d.ts +27 -1
  13. package/dist/agents/local-agent-task.js +75 -5
  14. package/dist/agents/local-agent-task.js.map +1 -1
  15. package/dist/agents/obs07-11-run-facts.test.d.ts +1 -0
  16. package/dist/agents/obs07-11-run-facts.test.js +459 -0
  17. package/dist/agents/obs07-11-run-facts.test.js.map +1 -0
  18. package/dist/agents/smoke-agent-lifecycle.js +8 -4
  19. package/dist/agents/smoke-agent-lifecycle.js.map +1 -1
  20. package/dist/agents/smoke-agents.js +7 -3
  21. package/dist/agents/smoke-agents.js.map +1 -1
  22. package/dist/context/context-manager.d.ts +1 -0
  23. package/dist/context/context-manager.js +10 -6
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/smoke-context.js +46 -3
  26. package/dist/context/smoke-context.js.map +1 -1
  27. package/dist/core/image-registry.js +1 -1
  28. package/dist/core/image-registry.js.map +1 -1
  29. package/dist/core/obs04-visible-data.test.d.ts +1 -0
  30. package/dist/core/obs04-visible-data.test.js +147 -0
  31. package/dist/core/obs04-visible-data.test.js.map +1 -0
  32. package/dist/core/query-engine.d.ts +5 -0
  33. package/dist/core/query-engine.js +35 -2
  34. package/dist/core/query-engine.js.map +1 -1
  35. package/dist/core/query.d.ts +2 -0
  36. package/dist/core/query.js +104 -15
  37. package/dist/core/query.js.map +1 -1
  38. package/dist/core/run-agent.d.ts +2 -0
  39. package/dist/core/run-agent.js +20 -10
  40. package/dist/core/run-agent.js.map +1 -1
  41. package/dist/model/model-gateway.d.ts +1 -0
  42. package/dist/model/model-metadata.json +99 -99
  43. package/dist/model/openai-native-image-guard.test.d.ts +1 -0
  44. package/dist/model/openai-native-image-guard.test.js +101 -0
  45. package/dist/model/openai-native-image-guard.test.js.map +1 -0
  46. package/dist/model/openai-responses-mapper.js +91 -16
  47. package/dist/model/openai-responses-mapper.js.map +1 -1
  48. package/dist/plugins/smoke-plugin-system.js +14 -14
  49. package/dist/repl/index.js +2 -2
  50. package/dist/repl/index.js.map +1 -1
  51. package/dist/secrets/secret-redaction.d.ts +6 -5
  52. package/dist/secrets/secret-redaction.js +7 -79
  53. package/dist/secrets/secret-redaction.js.map +1 -1
  54. package/dist/secrets/secret-types.d.ts +4 -1
  55. package/dist/secrets/secret-types.js.map +1 -1
  56. package/dist/session/session-store.d.ts +4 -1
  57. package/dist/session/session-store.js +5 -2
  58. package/dist/session/session-store.js.map +1 -1
  59. package/dist/tasks/subagent-tools.test.js +1 -0
  60. package/dist/tasks/subagent-tools.test.js.map +1 -1
  61. package/dist/tasks/task-ack-size.test.js +6 -5
  62. package/dist/tasks/task-ack-size.test.js.map +1 -1
  63. package/dist/tasks/task-persistence.d.ts +1 -0
  64. package/dist/tasks/task-persistence.js +31 -9
  65. package/dist/tasks/task-persistence.js.map +1 -1
  66. package/dist/tasks/task-store.d.ts +6 -4
  67. package/dist/tasks/task-store.js +46 -20
  68. package/dist/tasks/task-store.js.map +1 -1
  69. package/dist/tools/builtins/exec-process-manager.d.ts +97 -2
  70. package/dist/tools/builtins/exec-process-manager.js +218 -19
  71. package/dist/tools/builtins/exec-process-manager.js.map +1 -1
  72. package/dist/tools/builtins/exec-tool.js +14 -1
  73. package/dist/tools/builtins/exec-tool.js.map +1 -1
  74. package/dist/tools/builtins/image-generation-tool.js +24 -24
  75. package/dist/tools/builtins/image-generation-tool.js.map +1 -1
  76. package/dist/tools/smoke-exec-process.js +2 -1
  77. package/dist/tools/smoke-exec-process.js.map +1 -1
  78. package/dist/tools/smoke-terminal-output-chain.d.ts +1 -0
  79. package/dist/tools/smoke-terminal-output-chain.js +245 -0
  80. package/dist/tools/smoke-terminal-output-chain.js.map +1 -0
  81. package/dist/tools/smoke-tool-system.js +6 -6
  82. package/dist/tools/smoke-tool-system.js.map +1 -1
  83. package/dist/tools/terminal-output-persistence.test.d.ts +1 -0
  84. package/dist/tools/terminal-output-persistence.test.js +50 -0
  85. package/dist/tools/terminal-output-persistence.test.js.map +1 -0
  86. package/dist/tools/terminal-output-store.d.ts +150 -0
  87. package/dist/tools/terminal-output-store.js +562 -0
  88. package/dist/tools/terminal-output-store.js.map +1 -0
  89. package/dist/tools/terminal-output-store.test.d.ts +1 -0
  90. package/dist/tools/terminal-output-store.test.js +364 -0
  91. package/dist/tools/terminal-output-store.test.js.map +1 -0
  92. package/dist/types/events.d.ts +1 -0
  93. package/dist/types/messages.d.ts +1 -0
  94. package/dist/web/agent-content-detail.d.ts +78 -0
  95. package/dist/web/agent-content-detail.js +495 -0
  96. package/dist/web/agent-content-detail.js.map +1 -0
  97. package/dist/web/agent-content-detail.test.d.ts +1 -0
  98. package/dist/web/agent-content-detail.test.js +307 -0
  99. package/dist/web/agent-content-detail.test.js.map +1 -0
  100. package/dist/web/agent-parent-messages.test.d.ts +1 -0
  101. package/dist/web/agent-parent-messages.test.js +58 -0
  102. package/dist/web/agent-parent-messages.test.js.map +1 -0
  103. package/dist/web/agent-tool-payload-security.test.d.ts +1 -0
  104. package/dist/web/agent-tool-payload-security.test.js +120 -0
  105. package/dist/web/agent-tool-payload-security.test.js.map +1 -0
  106. package/dist/web/index.d.ts +114 -3
  107. package/dist/web/index.js +182 -67
  108. package/dist/web/index.js.map +1 -1
  109. package/dist/web/smoke-agent-content-http.d.ts +1 -0
  110. package/dist/web/smoke-agent-content-http.js +446 -0
  111. package/dist/web/smoke-agent-content-http.js.map +1 -0
  112. package/dist/web/smoke-status-semantics.d.ts +1 -0
  113. package/dist/web/smoke-status-semantics.js +90 -0
  114. package/dist/web/smoke-status-semantics.js.map +1 -0
  115. package/dist/web/smoke-task-session-entrypoints.js +22 -1
  116. package/dist/web/smoke-task-session-entrypoints.js.map +1 -1
  117. package/dist/web/smoke-terminal-output-http.d.ts +1 -0
  118. package/dist/web/smoke-terminal-output-http.js +372 -0
  119. package/dist/web/smoke-terminal-output-http.js.map +1 -0
  120. package/dist/web/smoke-tool-call-detail.d.ts +1 -0
  121. package/dist/web/smoke-tool-call-detail.js +106 -0
  122. package/dist/web/smoke-tool-call-detail.js.map +1 -0
  123. package/dist/web/smoke-tool-call-http.d.ts +1 -0
  124. package/dist/web/smoke-tool-call-http.js +100 -0
  125. package/dist/web/smoke-tool-call-http.js.map +1 -0
  126. package/dist/web/smoke-tool-detail-fields-http.d.ts +1 -0
  127. package/dist/web/smoke-tool-detail-fields-http.js +121 -0
  128. package/dist/web/smoke-tool-detail-fields-http.js.map +1 -0
  129. package/dist/web/smoke-web-terminal-tasks.js +126 -76
  130. package/dist/web/smoke-web-terminal-tasks.js.map +1 -1
  131. package/dist/web/status-semantics.d.ts +11 -0
  132. package/dist/web/status-semantics.js +59 -0
  133. package/dist/web/status-semantics.js.map +1 -0
  134. package/dist/web/terminal-presentation.d.ts +15 -0
  135. package/dist/web/terminal-presentation.js +61 -0
  136. package/dist/web/terminal-presentation.js.map +1 -0
  137. package/dist/web/terminal-presentation.test.d.ts +1 -0
  138. package/dist/web/terminal-presentation.test.js +33 -0
  139. package/dist/web/terminal-presentation.test.js.map +1 -0
  140. package/dist/web/tool-call-detail.d.ts +40 -0
  141. package/dist/web/tool-call-detail.js +167 -0
  142. package/dist/web/tool-call-detail.js.map +1 -0
  143. package/dist/web/tool-detail-fields.d.ts +59 -0
  144. package/dist/web/tool-detail-fields.js +119 -0
  145. package/dist/web/tool-detail-fields.js.map +1 -0
  146. package/dist/web/tool-detail-fields.test.d.ts +1 -0
  147. package/dist/web/tool-detail-fields.test.js +121 -0
  148. package/dist/web/tool-detail-fields.test.js.map +1 -0
  149. package/package.json +93 -93
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-status-semantics.js","sourceRoot":"","sources":["../../src/web/smoke-status-semantics.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,13 @@ const root = await mkdtemp(path.join(os.tmpdir(), "neo-entrypoint-tasks-"));
11
11
  try {
12
12
  const a = path.join(root, "session-a");
13
13
  const b = path.join(root, "session-b");
14
- await Promise.all([mkdir(a), mkdir(b)]);
14
+ const c = path.join(root, "session-c");
15
+ await Promise.all([mkdir(a), mkdir(b), mkdir(c)]);
16
+ let recoveryHints = 0;
17
+ let consumeRecoveryHint;
15
18
  const fakeEngine = (sessionId, sessionDir) => ({
16
19
  snapshot: () => ({ agentId: "parent", messages: 0, model: "fake-model", session: sessionDir === undefined ? undefined : { sessionId, sessionDir } }),
20
+ noteRecoverableSubagents: (onConsumed) => { recoveryHints += 1; consumeRecoveryHint = onConsumed; },
17
21
  });
18
22
  const runtime = { engine: fakeEngine("a", a), taskStore: new TaskStore() };
19
23
  activateSession(runtime);
@@ -23,6 +27,23 @@ try {
23
27
  runtime.engine = fakeEngine("b", b);
24
28
  activateSession(runtime);
25
29
  assert.equal(runtime.taskStore.get(task.taskId)?.status, "running", "switch must not stop another session's background work");
30
+ const interrupted = createLocalAgentTask({ taskId: "task-c", agentId: "child-c", prompt: "resume", description: "resume", outputFile: path.join(c, "task-output.txt") });
31
+ const persistedInterruptedStore = new TaskStore();
32
+ persistedInterruptedStore.bindSession(c);
33
+ persistedInterruptedStore.upsert(interrupted);
34
+ persistedInterruptedStore.markRunning(interrupted.taskId);
35
+ const recoveryRuntime = { engine: fakeEngine("c", c), taskStore: new TaskStore() };
36
+ activateSession(recoveryRuntime);
37
+ assert.equal(recoveryRuntime.taskStore.recoverableInterruptedTasks(c)[0]?.taskId, interrupted.taskId);
38
+ assert.equal(recoveryHints, 1, "restart interruption emits one short recovery hint");
39
+ assert.equal(createTaskNotificationSource(recoveryRuntime.taskStore).collectUnnotifiedCompletions(c).length, 0, "recoverable interruption is not a failure completion");
40
+ activateSession(recoveryRuntime);
41
+ assert.equal(recoveryHints, 1, "already loaded session does not repeat the recovery hint");
42
+ consumeRecoveryHint?.();
43
+ assert.equal(recoveryRuntime.taskStore.get(interrupted.taskId)?.notified, true, "model-request consumption persists the recovery acknowledgement");
44
+ const restartedRecoveryRuntime = { engine: fakeEngine("c", c), taskStore: new TaskStore() };
45
+ activateSession(restartedRecoveryRuntime);
46
+ assert.equal(recoveryHints, 1, "persisted acknowledgement prevents another-process repeat");
26
47
  assert.equal(sessionAgentTasks(runtime).length, 0);
27
48
  runtime.taskStore.fail(task.taskId, "fake terminal result");
28
49
  const source = createTaskNotificationSource(runtime.taskStore);
@@ -1 +1 @@
1
- {"version":3,"file":"smoke-task-session-entrypoints.js","sourceRoot":"","sources":["../../src/web/smoke-task-session-entrypoints.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAElI,8EAA8E;AAC9E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAC5E,IAAI,CAAC;IACH,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACvC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,UAAmB,EAAE,EAAE,CAAC,CAAC;QAC9D,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC;KACrJ,CAA2B,CAAC;IAC7B,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,SAAS,EAAE,EAAE,CAAC;IAC3E,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC9J,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpC,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,wDAAwD,CAAC,CAAC;IAC9H,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,4BAA4B,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,4BAA6E,CAAC;IACrG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,qDAAqD,CAAC,CAAC;IAC1F,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;IACrG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAElE,OAAO,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IACpC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpC,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpC,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5C,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,EAAE,0CAA0C,CAAC,CAAC;IACxG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE/F,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAA0B,EAAE,CAAC;IAC/G,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,0CAA0C,CAAC,CAAC;IAC9F,kFAAkF;IAClF,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAe,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE;QACvG,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;QACjC,cAAc,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,IAAI,OAAO,CAAC;KACrE,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAY,CAAC;IAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QACrB,OAAO,EAAE,qBAAqB,EAAE,IAAI,GAAG,EAAE;QACzC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;QAC1C,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;QACzC,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;QACvC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;KAC1C,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC;QAAS,CAAC;IACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"smoke-task-session-entrypoints.js","sourceRoot":"","sources":["../../src/web/smoke-task-session-entrypoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,372 @@
1
+ // Real runWebServer/router/WebRepl + real child processes and owner-bound disk store.
2
+ // No model/provider, real user session, production-file changes, or transcript writes.
3
+ // Run: .\node_modules\.bin\tsx.cmd src/web/smoke-terminal-output-http.ts
4
+ import assert from 'node:assert/strict';
5
+ import http from 'node:http';
6
+ import fs from 'node:fs/promises';
7
+ import os from 'node:os';
8
+ import path from 'node:path';
9
+ import { runWebServer, WebRepl } from './index.js';
10
+ import { ExecProcessManager } from '../tools/builtins/exec-process-manager.js';
11
+ import { TerminalOutputStore, redactedTerminalChunk, TERMINAL_OUTPUT_RETENTION_MS } from '../tools/terminal-output-store.js';
12
+ import { InMemorySecretRedactionRegistry } from '../secrets/secret-redaction.js';
13
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), 'obs-terminal-http-'));
14
+ const dirs = new Map(['A', 'B'].map(id => [id, path.join(root, 'runtime-sessions', `actual-${id}`)]));
15
+ const redactions = new InMemorySecretRedactionRegistry();
16
+ let clock = Date.now();
17
+ let assertions = 0;
18
+ let requests = 0;
19
+ let modelCalls = 0;
20
+ let mutationCalls = 0;
21
+ let runtimeCreations = 0;
22
+ let server;
23
+ let base = '';
24
+ const originalCreateServer = http.createServer;
25
+ const managers = [];
26
+ const phases = [];
27
+ function check(value, message) { assert.ok(value, message); assertions++; }
28
+ function equal(actual, expected, message) { assert.deepEqual(actual, expected, message); assertions++; }
29
+ function value(result, message) { check(result.ok, message); return result.value; }
30
+ const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
31
+ function createStore() {
32
+ return new TerminalOutputStore({ sessionsRoot: root, now: () => clock, resolveOwnerSessionDir: id => dirs.get(id) });
33
+ }
34
+ let store = createStore();
35
+ function createManager() {
36
+ const manager = new ExecProcessManager({ outputStore: store, completedRetentionMs: 600_000, maxProcesses: 20 });
37
+ managers.push(manager);
38
+ return manager;
39
+ }
40
+ let manager = createManager();
41
+ function options(owner, script, extra = {}) {
42
+ return { ownerId: owner, sessionDir: dirs.get(owner), command: 'node terminal HTTP fixture',
43
+ cwd: root, shell: { requested: 'node', file: process.execPath, args: ['-e', script, '--'] },
44
+ env: {}, timeoutMs: 60_000, maxOutputChars: 400_000, tty: false, ...extra };
45
+ }
46
+ async function closeServer() {
47
+ const current = server;
48
+ server = undefined;
49
+ if (current) {
50
+ current.closeAllConnections();
51
+ await new Promise(resolve => current.close(() => resolve()));
52
+ }
53
+ }
54
+ async function startServer() {
55
+ // Same capture fixture as smoke-tool-detail-fields-http.ts: the production private route is untouched.
56
+ const probe = originalCreateServer();
57
+ await new Promise(resolve => probe.listen(0, '127.0.0.1', resolve));
58
+ const address = probe.address();
59
+ check(address && typeof address === 'object', 'temporary port allocated');
60
+ const port = address.port;
61
+ await new Promise(resolve => probe.close(() => resolve()));
62
+ http.createServer = (...args) => {
63
+ server = originalCreateServer(...args);
64
+ return server;
65
+ };
66
+ try {
67
+ await runWebServer(['--host', '127.0.0.1', '--port', String(port)], {
68
+ createRuntime: async (config) => {
69
+ runtimeCreations++;
70
+ const owner = config?.sessionId ?? 'A';
71
+ const session = dirs.has(owner) ? { sessionId: owner, sessionDir: dirs.get(owner) } : undefined;
72
+ const denyMutation = () => { mutationCalls++; throw new Error('GET attempted an engine mutation'); };
73
+ return {
74
+ execProcessManager: manager,
75
+ taskStore: { subscribe: () => () => { }, list: () => [], isTerminal: () => false },
76
+ engine: {
77
+ snapshot: () => ({ session, messages: 0 }), getDisplayEntries: () => [], getHistoryMessages: () => [],
78
+ redactDisplayValue: (v) => redactions.redact(v), isFastMode: () => false,
79
+ getAppPrompt: () => ({ hasActivePrompt: false }), onSessionTitleChange: () => () => { },
80
+ submit: denyMutation, query: denyMutation, appendMessage: denyMutation,
81
+ },
82
+ model: { generate: () => { modelCalls++; throw new Error('model must never run'); } },
83
+ envPath: path.join(root, 'fixture.env'), initialMetrics: {},
84
+ };
85
+ },
86
+ createRepl: runtime => {
87
+ const repl = new WebRepl(runtime);
88
+ repl.submit = (() => { modelCalls++; throw new Error('GET attempted submit'); });
89
+ return repl;
90
+ },
91
+ });
92
+ }
93
+ finally {
94
+ http.createServer = originalCreateServer;
95
+ }
96
+ check(server?.listening, 'real server listening');
97
+ base = `http://127.0.0.1:${port}`;
98
+ }
99
+ function outputUrl(owner, run, changes = {}) {
100
+ return `${base}/api/terminal-output?${new URLSearchParams({ sessionId: owner, runId: run, stream: 'stdout', offset: '0', limitBytes: '65536', ...changes })}`;
101
+ }
102
+ async function request(url, init) {
103
+ requests++;
104
+ return fetch(url, { ...init, signal: AbortSignal.timeout(10_000) });
105
+ }
106
+ async function page(owner, run, changes = {}) {
107
+ const response = await request(outputUrl(owner, run, changes));
108
+ equal(response.status, 200, `HTTP output 200 ${owner}/${run}`);
109
+ equal(response.headers.get('cache-control'), 'no-store', 'output is non-cacheable');
110
+ const body = await response.json();
111
+ equal(body.sessionId, owner, 'response owner');
112
+ equal(body.runId, run, 'response run');
113
+ equal(body.record.ownerSessionId, owner, 'stored owner');
114
+ equal(body.record.runId, run, 'stored run');
115
+ return body;
116
+ }
117
+ async function state(owner) {
118
+ const response = await request(`${base}/api/state?${new URLSearchParams({ sessionId: owner })}`);
119
+ equal(response.status, 200, 'real snapshot HTTP 200');
120
+ const body = await response.json();
121
+ equal(body.session.sessionId, owner, 'snapshot owner');
122
+ return body;
123
+ }
124
+ async function waitFor(run, predicate) {
125
+ const deadline = Date.now() + 10_000;
126
+ while (Date.now() < deadline) {
127
+ const entry = manager.list().find(item => item.session_id === run);
128
+ if (entry && predicate(entry))
129
+ return entry;
130
+ await delay(20);
131
+ }
132
+ throw new Error(`Timed out waiting for real process ${run}`);
133
+ }
134
+ async function nonOutputFiles(dir, excludeOutput = true) {
135
+ const result = {};
136
+ async function visit(folder) {
137
+ for (const item of await fs.readdir(folder, { withFileTypes: true })) {
138
+ if (excludeOutput && item.name === 'terminal-output')
139
+ continue;
140
+ const full = path.join(folder, item.name);
141
+ if (item.isDirectory())
142
+ await visit(full);
143
+ else
144
+ result[path.relative(dir, full)] = (await fs.readFile(full)).toString('base64');
145
+ }
146
+ }
147
+ await visit(dir);
148
+ return result;
149
+ }
150
+ try {
151
+ for (const [owner, dir] of dirs) {
152
+ await fs.mkdir(dir, { recursive: true });
153
+ await fs.writeFile(path.join(dir, 'transcript.jsonl'), '{"fixture":"unchanged"}\n', 'utf8');
154
+ value(manager.registerOwnerSession(owner, dir), `bind actual ${owner} runtime directory`);
155
+ }
156
+ await fs.writeFile(path.join(root, 'fixture.env'), '', 'utf8');
157
+ const beforeFiles = await nonOutputFiles(root);
158
+ await startServer();
159
+ // Real stream bytes, including repeated identical lines and identical stdout/stderr.
160
+ const expected = 'first\n\n \t\nrepeat\nrepeat\n相同🙂\nlast\n';
161
+ const run = manager.start(options('A', `process.stdout.write(${JSON.stringify(expected)});process.stderr.write(${JSON.stringify(expected)});process.stdin.once('data',()=>process.exit(7));`));
162
+ await waitFor(run, entry => entry.output.includes('last\n') && entry.output.includes('[stderr]'));
163
+ const running = await page('A', run);
164
+ equal(running.text, expected, 'all multiline/blank/repeated stdout preserved');
165
+ equal(running.record.lifecycle, 'running', 'real running lifecycle');
166
+ equal(running.record.exit, null, 'running has no fabricated exit');
167
+ equal((await page('A', run, { stream: 'stderr' })).text, expected, 'identical stderr preserved independently');
168
+ equal((await page('A', run)).text, expected, 'repeated GET is non-consuming');
169
+ const firstDrain = await manager.interact(run, { ownerId: 'A', yieldTimeMs: 0 });
170
+ equal(firstDrain.stdout, expected, 'HTTP did not consume stdout drain');
171
+ equal(firstDrain.stderr, expected, 'HTTP did not consume stderr drain');
172
+ const emptyDrain = await manager.interact(run, { ownerId: 'A', yieldTimeMs: 0 });
173
+ equal(emptyDrain.stdout, '', 'second explicit stdout drain empty');
174
+ equal(emptyDrain.stderr, '', 'second explicit stderr drain empty');
175
+ equal((await page('A', run)).text, expected, 'store survives explicit consuming drain');
176
+ const finished = await manager.interact(run, { ownerId: 'A', chars: 'exit\n', yieldTimeMs: 5_000 });
177
+ equal(finished.exit_code, 7, 'actual nonzero process exit');
178
+ const terminal = await page('A', run);
179
+ equal(terminal.record.lifecycle, 'terminal', 'running becomes terminal over HTTP');
180
+ equal(terminal.record.exit?.exitCode, 7, 'HTTP nonzero fact');
181
+ equal(terminal.record.exit?.status, finished.status, 'HTTP status equals manager fact');
182
+ equal(terminal.record.exit?.terminationReason, 'failed', 'HTTP failed reason');
183
+ phases.push('real-process-multiline-dual-stream-drain-nonzero');
184
+ // Same run identity in a second owner is intentionally created via the independent store fixture.
185
+ value(store.start('B', dirs.get('B'), run, { startedAt: clock, command: 'B identity fixture' }), 'B same-run start');
186
+ value(store.append('B', run, redactedTerminalChunk('stdout', 0, 'B_ONLY\n')), 'B same-run append');
187
+ value(store.finalize('B', run, { status: 'exited', finishedAt: clock, exitCode: 0, signal: null, terminationReason: 'completed', durationMs: 0 }), 'B same-run finish');
188
+ equal((await page('B', run)).text, 'B_ONLY\n', 'same run B resolves only B bytes');
189
+ equal((await page('A', run)).text, expected, 'same run A still resolves only A bytes');
190
+ // Boundaries deliberately land inside a 4-byte scalar at 65536 and later pages.
191
+ const large = 'x'.repeat(65535) + '🙂中\n\n'.repeat(10_000) + 'tail\n';
192
+ const bigRun = manager.start(options('A', "process.stdout.write('x'.repeat(65535)+'🙂中\\n\\n'.repeat(10000)+'tail\\n');process.stdin.once('data',()=>process.exit(0));"));
193
+ await waitFor(bigRun, entry => entry.output.includes('tail\n'));
194
+ const bigRunning = await page('A', bigRun);
195
+ equal(bigRunning.record.lifecycle, 'running', 'zero-exit process first observed running over HTTP');
196
+ equal(bigRunning.record.exit, null, 'zero-exit process has no exit facts while running');
197
+ const zeroExit = await manager.interact(bigRun, { ownerId: 'A', chars: 'exit\n', yieldTimeMs: 5_000 });
198
+ equal(zeroExit.exit_code, 0, 'actual process exits zero after running observation');
199
+ let offset = 0;
200
+ let joined = '';
201
+ let pages = 0;
202
+ do {
203
+ const current = await page('A', bigRun, { offset: String(offset) });
204
+ equal(current.offset, offset, 'page starts at requested UTF8 byte cursor');
205
+ check(typeof current.text === 'string', 'available page has text');
206
+ equal(current.nextOffset - offset, Buffer.byteLength(current.text), 'cursor delta is exact UTF8 bytes');
207
+ check(Buffer.byteLength(current.text) <= 65536, '64KiB maximum page');
208
+ check(!current.text.includes('\ufffd'), 'no replacement scalar at page boundary');
209
+ check(current.nextOffset > offset, 'nonempty page advances');
210
+ if (!pages)
211
+ equal(current.nextOffset, 65535, 'first page stops before split emoji');
212
+ joined += current.text;
213
+ offset = current.nextOffset;
214
+ pages++;
215
+ if (current.endOfStoredOutput)
216
+ break;
217
+ check(pages < 10, 'pagination bounded');
218
+ } while (true);
219
+ equal(pages, 3, 'crosses three 64KiB HTTP pages');
220
+ equal(joined, large, 'UTF8 pages concatenate without loss or duplication');
221
+ equal(offset, Buffer.byteLength(large), 'last cursor equals total UTF8 bytes');
222
+ const eof = await page('A', bigRun, { offset: String(offset) });
223
+ equal(eof.text, '', 'available EOF is empty string, not unavailable null');
224
+ equal(eof.nextOffset, offset, 'EOF stable cursor');
225
+ equal(eof.endOfStoredOutput, true, 'EOF fact');
226
+ equal((await page('A', bigRun, { stream: 'stderr' })).text, '', 'genuinely empty separate stream');
227
+ equal((await request(outputUrl('B', bigRun))).status, 404, 'other owner cannot read A-only run');
228
+ phases.push('owner-run-isolation-64KiB-UTF8-pagination');
229
+ const stopRun = (await manager.execute(options('A', "process.stdout.write('STOP_READY\\n');setInterval(()=>{},1000);"), 0)).session_id;
230
+ const bLive = (await manager.execute(options('B', "process.stdout.write('B_ACTIVE_ONLY\\n');setInterval(()=>{},1000);"), 0)).session_id;
231
+ await waitFor(stopRun, entry => entry.output.includes('STOP_READY'));
232
+ await waitFor(bLive, entry => entry.output.includes('B_ACTIVE_ONLY'));
233
+ for (const owner of ['A', 'B']) {
234
+ const snapshot = await state(owner);
235
+ equal(snapshot.backgroundTaskCount, 1, 'active count is owner-scoped');
236
+ equal(snapshot.backgroundTasks.map(task => task.sessionId), [owner === 'A' ? stopRun : bLive], 'active task identity isolated');
237
+ check(snapshot.backgroundTasks.every(task => task.ownerSessionId === owner), 'active owner identity');
238
+ check(snapshot.terminalTaskHistory.every(task => task.ownerSessionId === owner), 'history owner identity');
239
+ equal(snapshot.terminalTaskHistory.find(task => task.sessionId === run)?.exitCode, owner === 'A' ? 7 : 0, 'same-run history resolves owner-specific exit facts');
240
+ check(snapshot.terminalTaskHistory.every(task => !('output' in task)), 'history does not embed terminal output');
241
+ check(snapshot.backgroundTasks.every(task => !('output' in task)), 'snapshot does not embed terminal output');
242
+ equal(snapshot.lines, [], 'terminal reads did not create transcript lines');
243
+ }
244
+ const stopped = await manager.interact(stopRun, { ownerId: 'A', signal: 'kill', yieldTimeMs: 5_000 });
245
+ equal(stopped.status, 'killed', 'actual killed process');
246
+ const stopPage = await page('A', stopRun);
247
+ equal(stopPage.record.exit?.status, 'killed', 'HTTP killed status');
248
+ equal(stopPage.record.exit?.terminationReason, 'user_kill', 'HTTP user stop reason');
249
+ equal(stopPage.record.exit?.exitCode, stopped.exit_code, 'stop exit not fabricated as success');
250
+ equal(stopPage.record.exit?.signal, stopped.signal, 'actual platform stop signal retained');
251
+ const success = await page('A', bigRun);
252
+ equal(success.record.exit?.exitCode, 0, 'zero exit fact');
253
+ equal(success.record.exit?.status, 'exited', 'zero exit manager status');
254
+ equal(success.record.exit?.terminationReason, 'completed', 'zero completion reason');
255
+ const afterStop = await state('A');
256
+ equal(afterStop.backgroundTaskCount, 0, 'stopped task leaves active list');
257
+ const stopHistory = afterStop.terminalTaskHistory.find(task => task.sessionId === stopRun);
258
+ equal(stopHistory?.status, 'killed', 'stopped task retained in HTTP history');
259
+ equal(stopHistory?.terminationReason, 'user_kill', 'history stop fact');
260
+ phases.push('snapshot-owner-active-history-stop-zero');
261
+ const secret = 'HTTP_FIXTURE_SECRET_8efb312a';
262
+ redactions.record('http_fixture', secret);
263
+ const secretRun = manager.start(options('A', `process.stdout.write(${JSON.stringify(secret.slice(0, 12))});setTimeout(()=>{process.stdout.write(${JSON.stringify(secret.slice(12) + '\n')});process.stderr.write(${JSON.stringify(secret + '\n')});},30);`, {
264
+ command: `node secret fixture ${secret}`, redactOutput: text => redactions.redactString(text), createStreamingRedactor: () => redactions.createStreamingRedactor(),
265
+ }));
266
+ await waitFor(secretRun, entry => entry.status !== 'running');
267
+ const secretPage = await page('A', secretRun);
268
+ equal(secretPage.text, '[secret:http_fixture]\n', 'split registered secret redacted before persistence');
269
+ equal((await page('A', secretRun, { stream: 'stderr' })).text, '[secret:http_fixture]\n', 'secret stderr redacted');
270
+ check(!JSON.stringify(secretPage).includes(secret), 'HTTP secret absent including metadata');
271
+ const diskText = Object.values(await nonOutputFiles(root, false)).map(encoded => Buffer.from(encoded, 'base64').toString('utf8')).join('\n');
272
+ check(diskText.includes('[secret:http_fixture]'), 'redacted marker actually persisted on disk');
273
+ check(!diskText.includes(secret), 'registered secret absent from all fixture disk files');
274
+ // Late registration exercises the WebRepl final display-redaction boundary, not just process redaction.
275
+ const lateSecret = 'LATE_HTTP_SECRET_a71e32';
276
+ const lateRun = manager.start(options('A', `process.stdout.write(${JSON.stringify(lateSecret + '\n')});`));
277
+ await waitFor(lateRun, entry => entry.status !== 'running');
278
+ redactions.record('late_http', lateSecret);
279
+ const latePage = await page('A', lateRun);
280
+ equal(latePage.text, '[secret:late_http]\n', 'final response redacts newly registered secret');
281
+ equal(latePage.nextOffset, Buffer.byteLength(lateSecret + '\n'), 'final redaction does not rewrite stored byte cursor');
282
+ check(!JSON.stringify(await state('A')).includes(secret), 'history metadata secret redacted');
283
+ phases.push('streaming-and-final-response-secret-redaction');
284
+ const invalid = [
285
+ { runId: '../B' }, { runId: '..\\B' }, { runId: '/etc/passwd' }, { runId: 'C:\\Windows\\win.ini' },
286
+ { runId: 'NUL' }, { runId: 'a\u0000b' }, { runId: '' }, { runId: 'absent' },
287
+ { sessionId: 'absent' }, { sessionId: '../B' }, { stream: 'combined' },
288
+ { offset: '-1' }, { offset: '1.5' }, { offset: 'NaN' }, { offset: 'Infinity' }, { offset: '9007199254740992' },
289
+ { offset: '65536' }, // continuation byte of first emoji
290
+ { offset: String(Buffer.byteLength(large) + 1) },
291
+ { limitBytes: '0' }, { limitBytes: '3' }, { limitBytes: '262145' }, { limitBytes: '1.5' }, { limitBytes: 'NaN' },
292
+ ];
293
+ for (const changes of invalid)
294
+ equal((await request(outputUrl('A', bigRun, changes))).status, 404, `reject invalid ${JSON.stringify(changes)}`);
295
+ for (const missing of ['sessionId', 'runId']) {
296
+ const url = new URL(outputUrl('A', run));
297
+ url.searchParams.delete(missing);
298
+ equal((await request(url.href)).status, 404, `reject missing ${missing}`);
299
+ }
300
+ equal((await request(outputUrl('A', run), { method: 'POST' })).status, 404, 'non-GET refused');
301
+ const creationsBefore = runtimeCreations;
302
+ equal((await request(outputUrl('uncreated-owner', run), { headers: { Origin: 'https://evil.invalid', 'Sec-Fetch-Site': 'cross-site' } })).status, 403, 'cross-origin guard before runtime creation');
303
+ equal(runtimeCreations, creationsBefore, '403 does not create runtime');
304
+ equal((await request(outputUrl('A', run), { headers: { Origin: 'https://evil.invalid' } })).status, 403, 'host-mismatching origin refused');
305
+ equal((await request(outputUrl('A', run), { headers: { Origin: base, 'Sec-Fetch-Site': 'same-origin' } })).status, 200, 'same-origin accepted');
306
+ phases.push('invalid-path-cursor-missing-404-cross-origin-403');
307
+ // Reconstruct BOTH manager/store and server/router/runtime. A genuinely live real child in B is
308
+ // intentionally left running in the old manager, reproducing persisted running-record recovery.
309
+ // This is a recovery-boundary test, not a claim that an OS host crash was simulated.
310
+ check(manager.list('B').some(entry => entry.session_id === bLive && entry.status === 'running'), 'residual process genuinely live before manager rebuild');
311
+ const creationsAtRefresh = runtimeCreations;
312
+ await closeServer();
313
+ store = createStore();
314
+ manager = createManager();
315
+ await startServer();
316
+ equal((await page('A', run)).text, expected, 'new manager+runtime reads persisted full output');
317
+ equal((await page('B', run)).text, 'B_ONLY\n', 'refresh keeps same-run owner isolation');
318
+ check(runtimeCreations > creationsAtRefresh, 'refresh constructs fresh runtime fixtures');
319
+ const lost = await page('B', bLive);
320
+ equal(lost.record.lifecycle, 'lost', 'real running residual becomes lost after manager rebuild');
321
+ equal(lost.record.availability, 'lost', 'lost availability');
322
+ equal(lost.text, null, 'lost output unavailable, not empty');
323
+ equal(lost.record.exit, null, 'lost does not invent exit success or failure');
324
+ check(lost.record.lostAt !== null, 'lost timestamp recorded');
325
+ const recoveredB = await state('B');
326
+ equal(recoveredB.backgroundTaskCount, 0, 'lost residual not active after refresh');
327
+ equal(recoveredB.terminalTaskHistory.find(task => task.sessionId === bLive)?.status, 'lost', 'HTTP history exposes lost');
328
+ const recoveredA = await state('A');
329
+ equal(recoveredA.terminalTaskHistory.find(task => task.sessionId === run)?.exitCode, 7, 'refresh history retains nonzero exit');
330
+ phases.push('fresh-manager-store-server-runtime-recovery-real-running-lost');
331
+ const expiresAt = terminal.record.expiresAt;
332
+ check(expiresAt !== null, 'finished output has retention deadline');
333
+ equal(expiresAt - terminal.record.exit.finishedAt, TERMINAL_OUTPUT_RETENTION_MS, 'five minute retention contract');
334
+ clock = expiresAt - 1;
335
+ equal((await page('A', run)).text, expected, 'output available immediately before TTL');
336
+ clock = expiresAt;
337
+ const expired = await page('A', run);
338
+ equal(expired.record.availability, 'expired', 'TTL boundary expiration');
339
+ equal(expired.text, null, 'expired output null, not empty string');
340
+ equal(expired.record.exit, terminal.record.exit, 'all exit facts survive TTL');
341
+ equal(expired.record.lifecycle, 'terminal', 'expiration never changes process lifecycle');
342
+ equal((await page('A', run, { stream: 'stderr' })).text, null, 'both streams expire');
343
+ const expiredHistory = (await state('A')).terminalTaskHistory.find(task => task.sessionId === run);
344
+ equal(expiredHistory?.exitCode, 7, 'expired history retains exit');
345
+ equal(expiredHistory?.outputAvailability, 'expired', 'expired history availability');
346
+ // Another full refresh proves TTL does not get renewed and facts stay durable.
347
+ await closeServer();
348
+ store = createStore();
349
+ manager = createManager();
350
+ await startServer();
351
+ const reexpired = await page('A', run);
352
+ equal(reexpired.text, null, 'refresh does not resurrect expired bytes');
353
+ equal(reexpired.record.exit, terminal.record.exit, 'refresh retains expired exit facts');
354
+ phases.push('fake-clock-exact-TTL-null-durable-exit');
355
+ equal(await nonOutputFiles(root), beforeFiles, 'no non-output file changed/created, including transcript');
356
+ equal(mutationCalls, 0, 'no engine mutation entry points called');
357
+ equal(modelCalls, 0, 'no submit/model calls');
358
+ }
359
+ finally {
360
+ http.createServer = originalCreateServer;
361
+ await closeServer();
362
+ for (const instance of managers)
363
+ instance.terminateAll();
364
+ const deadline = Date.now() + 10_000;
365
+ while (managers.some(instance => instance.list().some(entry => entry.status === 'running')) && Date.now() < deadline)
366
+ await delay(25);
367
+ equal(managers.flatMap(instance => instance.list()).filter(entry => entry.status === 'running').length, 0, 'all real child processes released');
368
+ await fs.rm(root, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 });
369
+ equal(await fs.stat(root).then(() => true, () => false), false, 'temporary session root removed');
370
+ }
371
+ console.log(JSON.stringify({ ok: true, assertions, requests, modelCalls, mutationCalls, phases, cleanup: 'HTTP listeners closed; all real processes exited; temp root removed' }, null, 2));
372
+ //# sourceMappingURL=smoke-terminal-output-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-terminal-output-http.js","sourceRoot":"","sources":["../../src/web/smoke-terminal-output-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};