@the-open-engine/zeroshot 6.38.0 → 6.39.0

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 (381) hide show
  1. package/cli/event-copy.js +8 -7
  2. package/cli/event-copy.ts +12 -0
  3. package/cli/index.js +7 -31
  4. package/cli/json-export.js +61 -64
  5. package/cli/json-export.ts +112 -0
  6. package/cli/message-formatter-utils.js +68 -56
  7. package/cli/message-formatter-utils.ts +121 -0
  8. package/cli/message-formatters-normal.js +124 -259
  9. package/cli/message-formatters-normal.ts +250 -0
  10. package/cli/message-formatters-watch.js +81 -84
  11. package/cli/message-formatters-watch.ts +189 -0
  12. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
  13. package/lib/agent-cli-provider/adapters/codex.js +3 -1
  14. package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
  15. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  16. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  17. package/lib/cluster/generated/protocol.d.cts +8 -0
  18. package/lib/cluster/generated/protocol.d.mts +8 -0
  19. package/lib/cluster/generated/protocol.d.ts +8 -0
  20. package/lib/clusters-registry.d.ts +23 -0
  21. package/lib/clusters-registry.js +17 -29
  22. package/lib/completion.d.ts +12 -0
  23. package/lib/completion.js +84 -94
  24. package/lib/compose-utils.d.ts +32 -0
  25. package/lib/compose-utils.js +57 -72
  26. package/lib/detached-startup.d.ts +83 -0
  27. package/lib/detached-startup.js +231 -302
  28. package/lib/docker-config.d.ts +43 -0
  29. package/lib/docker-config.js +150 -325
  30. package/lib/docker-env-auth.d.ts +17 -0
  31. package/lib/docker-env-auth.js +75 -0
  32. package/lib/git-remote-utils.d.ts +48 -0
  33. package/lib/git-remote-utils.js +147 -213
  34. package/lib/id-detector.d.ts +15 -0
  35. package/lib/id-detector.js +37 -41
  36. package/lib/path-check.d.ts +30 -0
  37. package/lib/path-check.js +42 -45
  38. package/lib/process-liveness.d.ts +16 -0
  39. package/lib/process-liveness.js +19 -12
  40. package/lib/provider-credential-path.d.ts +16 -0
  41. package/lib/provider-credential-path.js +31 -29
  42. package/lib/provider-defaults.d.ts +30 -0
  43. package/lib/provider-defaults.js +47 -42
  44. package/lib/provider-detection.d.ts +11 -0
  45. package/lib/provider-detection.js +91 -54
  46. package/lib/provider-names.d.ts +38 -0
  47. package/lib/provider-names.js +56 -64
  48. package/lib/repo-settings.d.ts +28 -0
  49. package/lib/repo-settings.js +83 -59
  50. package/lib/run-mode.d.ts +21 -0
  51. package/lib/run-mode.js +21 -20
  52. package/lib/run-plan.d.ts +28 -0
  53. package/lib/run-plan.js +17 -16
  54. package/lib/settings/claude-auth.d.ts +35 -0
  55. package/lib/settings/claude-auth.js +30 -47
  56. package/lib/settings-defaults.d.ts +20 -0
  57. package/lib/settings-defaults.js +149 -0
  58. package/lib/settings-error.d.ts +7 -0
  59. package/lib/settings-error.js +8 -0
  60. package/lib/settings-issue-providers.d.ts +10 -0
  61. package/lib/settings-issue-providers.js +12 -0
  62. package/lib/settings-models.d.ts +22 -0
  63. package/lib/settings-models.js +93 -0
  64. package/lib/settings-storage.d.ts +23 -0
  65. package/lib/settings-storage.js +205 -0
  66. package/lib/settings-validation.d.ts +7 -0
  67. package/lib/settings-validation.js +182 -0
  68. package/lib/settings.d.ts +29 -0
  69. package/lib/settings.js +41 -736
  70. package/lib/setup-apply-types.d.ts +66 -0
  71. package/lib/setup-apply-types.js +2 -0
  72. package/lib/setup-apply.d.ts +39 -0
  73. package/lib/setup-apply.js +267 -264
  74. package/lib/setup-journal.d.ts +41 -0
  75. package/lib/setup-journal.js +119 -76
  76. package/lib/setup-plan-types.d.ts +102 -0
  77. package/lib/setup-plan-types.js +2 -0
  78. package/lib/setup-plan.d.ts +30 -0
  79. package/lib/setup-plan.js +300 -324
  80. package/lib/setup-undo.d.ts +44 -0
  81. package/lib/setup-undo.js +61 -74
  82. package/lib/start-cluster-config.d.ts +26 -0
  83. package/lib/start-cluster-config.js +56 -0
  84. package/lib/start-cluster-environment.d.ts +40 -0
  85. package/lib/start-cluster-environment.js +134 -0
  86. package/lib/start-cluster-run-options.d.ts +53 -0
  87. package/lib/start-cluster-run-options.js +147 -0
  88. package/lib/start-cluster.d.ts +64 -0
  89. package/lib/start-cluster.js +98 -454
  90. package/lib/stream-json-parser.d.ts +17 -0
  91. package/lib/stream-json-parser.js +51 -52
  92. package/npm-shrinkwrap.json +2 -2
  93. package/package.json +12 -6
  94. package/scripts/postinstall.js +27 -0
  95. package/scripts/rust-distribution.js +23 -14
  96. package/src/agent/agent-command-proofs-context.js +35 -45
  97. package/src/agent/agent-command-proofs-context.ts +87 -0
  98. package/src/agent/agent-config-settings.js +19 -0
  99. package/src/agent/agent-config-settings.ts +41 -0
  100. package/src/agent/agent-config.js +122 -231
  101. package/src/agent/agent-config.ts +285 -0
  102. package/src/agent/agent-context-builder.js +38 -273
  103. package/src/agent/agent-context-builder.ts +51 -0
  104. package/src/agent/agent-context-environment-sections.js +105 -0
  105. package/src/agent/agent-context-environment-sections.ts +134 -0
  106. package/src/agent/agent-context-packs.js +165 -0
  107. package/src/agent/agent-context-packs.ts +296 -0
  108. package/src/agent/agent-context-prompt-sections.js +100 -0
  109. package/src/agent/agent-context-prompt-sections.ts +148 -0
  110. package/src/agent/agent-context-sections.js +25 -334
  111. package/src/agent/agent-context-sections.ts +36 -0
  112. package/src/agent/agent-context-sources.js +96 -149
  113. package/src/agent/agent-context-sources.ts +253 -0
  114. package/src/agent/agent-context-types.js +2 -0
  115. package/src/agent/agent-context-types.ts +132 -0
  116. package/src/agent/agent-context-validation-sections.js +73 -0
  117. package/src/agent/agent-context-validation-sections.ts +129 -0
  118. package/src/agent/agent-input-injector.js +99 -118
  119. package/src/agent/agent-input-injector.ts +195 -0
  120. package/src/agent/agent-liveness-poll.js +74 -78
  121. package/src/agent/agent-liveness-poll.ts +163 -0
  122. package/src/agent/agent-quality-gate-schema.js +77 -86
  123. package/src/agent/agent-quality-gate-schema.ts +135 -0
  124. package/src/agent/agent-quality-gates-context.js +44 -50
  125. package/src/agent/agent-quality-gates-context.ts +91 -0
  126. package/src/agent/agent-stuck-detector.js +171 -239
  127. package/src/agent/agent-stuck-detector.ts +288 -0
  128. package/src/agent/agent-trigger-evaluator.js +29 -46
  129. package/src/agent/agent-trigger-evaluator.ts +98 -0
  130. package/src/agent/context-metrics.js +110 -141
  131. package/src/agent/context-metrics.ts +261 -0
  132. package/src/agent/context-pack-builder.js +72 -358
  133. package/src/agent/context-pack-builder.ts +105 -0
  134. package/src/agent/context-pack-core.js +70 -0
  135. package/src/agent/context-pack-core.ts +96 -0
  136. package/src/agent/context-pack-selection.js +119 -0
  137. package/src/agent/context-pack-selection.ts +187 -0
  138. package/src/agent/context-pack-truncation.js +139 -0
  139. package/src/agent/context-pack-truncation.ts +208 -0
  140. package/src/agent/context-pack-types.js +2 -0
  141. package/src/agent/context-pack-types.ts +98 -0
  142. package/src/agent/context-replay-policy.js +30 -39
  143. package/src/agent/context-replay-policy.ts +71 -0
  144. package/src/agent/critical-agent-policy.js +6 -10
  145. package/src/agent/critical-agent-policy.ts +20 -0
  146. package/src/agent/guidance-queue.js +74 -87
  147. package/src/agent/guidance-queue.ts +166 -0
  148. package/src/agent/output-extraction-error-detail.js +45 -0
  149. package/src/agent/output-extraction-error-detail.ts +49 -0
  150. package/src/agent/output-extraction-failures.js +125 -0
  151. package/src/agent/output-extraction-failures.ts +149 -0
  152. package/src/agent/output-extraction-json.js +234 -0
  153. package/src/agent/output-extraction-json.ts +235 -0
  154. package/src/agent/output-extraction-pi.js +124 -0
  155. package/src/agent/output-extraction-pi.ts +137 -0
  156. package/src/agent/output-extraction-types.js +2 -0
  157. package/src/agent/output-extraction-types.ts +49 -0
  158. package/src/agent/output-extraction.js +17 -617
  159. package/src/agent/output-extraction.ts +30 -0
  160. package/src/agent/output-reformatter-errors.js +83 -0
  161. package/src/agent/output-reformatter-errors.ts +106 -0
  162. package/src/agent/output-reformatter-types.js +2 -0
  163. package/src/agent/output-reformatter-types.ts +86 -0
  164. package/src/agent/output-reformatter.js +140 -185
  165. package/src/agent/output-reformatter.ts +238 -0
  166. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  167. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  168. package/src/agent/pi-terminal-lifecycle.js +186 -206
  169. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  170. package/src/agent/provider-control-plane.js +22 -21
  171. package/src/agent/provider-control-plane.ts +52 -0
  172. package/src/agent/provider-terminal-failure-types.js +2 -0
  173. package/src/agent/provider-terminal-failure-types.ts +60 -0
  174. package/src/agent/provider-terminal-failure.js +194 -191
  175. package/src/agent/provider-terminal-failure.ts +262 -0
  176. package/src/agent/rate-limit-backoff.js +31 -74
  177. package/src/agent/rate-limit-backoff.ts +71 -0
  178. package/src/agent/schema-utils.js +85 -125
  179. package/src/agent/schema-utils.ts +148 -0
  180. package/src/agent/structured-output-error.js +34 -33
  181. package/src/agent/structured-output-error.ts +105 -0
  182. package/src/agent/validation-platform.js +27 -27
  183. package/src/agent/validation-platform.ts +49 -0
  184. package/src/agent-cli-provider/adapters/codex.ts +3 -1
  185. package/src/attach/attach-client.js +232 -405
  186. package/src/attach/attach-client.ts +300 -0
  187. package/src/attach/attach-server-cleanup.js +43 -0
  188. package/src/attach/attach-server-cleanup.ts +39 -0
  189. package/src/attach/attach-server-clients.js +117 -0
  190. package/src/attach/attach-server-clients.ts +122 -0
  191. package/src/attach/attach-server-events.js +38 -0
  192. package/src/attach/attach-server-events.ts +36 -0
  193. package/src/attach/attach-server-pty.js +45 -0
  194. package/src/attach/attach-server-pty.ts +64 -0
  195. package/src/attach/attach-server-runtime.js +73 -0
  196. package/src/attach/attach-server-runtime.ts +62 -0
  197. package/src/attach/attach-server-socket.js +28 -0
  198. package/src/attach/attach-server-socket.ts +23 -0
  199. package/src/attach/attach-server-types.js +2 -0
  200. package/src/attach/attach-server-types.ts +82 -0
  201. package/src/attach/attach-server.js +106 -523
  202. package/src/attach/attach-server.ts +158 -0
  203. package/src/attach/index.js +18 -35
  204. package/src/attach/index.ts +18 -0
  205. package/src/attach/protocol.js +95 -184
  206. package/src/attach/protocol.ts +181 -0
  207. package/src/attach/ring-buffer.js +76 -102
  208. package/src/attach/ring-buffer.ts +109 -0
  209. package/src/attach/send-input.js +64 -75
  210. package/src/attach/send-input.ts +94 -0
  211. package/src/attach/socket-discovery.js +164 -218
  212. package/src/attach/socket-discovery.ts +230 -0
  213. package/src/attach/socket-paths.js +42 -61
  214. package/src/attach/socket-paths.ts +81 -0
  215. package/src/claude-credentials.js +51 -54
  216. package/src/claude-credentials.ts +89 -0
  217. package/src/cluster/generated/protocol-schema.ts +1 -1
  218. package/src/cluster/generated/protocol.ts +2 -1
  219. package/src/command-proofs.js +110 -141
  220. package/src/command-proofs.ts +216 -0
  221. package/src/config-router.js +81 -73
  222. package/src/config-router.ts +131 -0
  223. package/src/copy-worker.js +53 -29
  224. package/src/copy-worker.ts +75 -0
  225. package/src/darwin-keychain-boundary.js +80 -111
  226. package/src/darwin-keychain-boundary.ts +148 -0
  227. package/src/guidance-topics.js +4 -5
  228. package/src/guidance-topics.ts +10 -0
  229. package/src/input-helpers.js +33 -54
  230. package/src/input-helpers.ts +58 -0
  231. package/src/ledger-sequence.js +45 -48
  232. package/src/ledger-sequence.ts +63 -0
  233. package/src/legacy-lib/clusters-registry.ts +40 -0
  234. package/src/legacy-lib/completion.ts +148 -0
  235. package/src/legacy-lib/compose-utils.ts +102 -0
  236. package/src/legacy-lib/detached-startup.ts +449 -0
  237. package/src/legacy-lib/docker-config.ts +282 -0
  238. package/src/legacy-lib/docker-env-auth.ts +116 -0
  239. package/src/legacy-lib/git-remote-utils.ts +244 -0
  240. package/src/legacy-lib/id-detector.ts +57 -0
  241. package/src/legacy-lib/js-yaml.d.ts +3 -0
  242. package/src/legacy-lib/omelette.d.ts +15 -0
  243. package/src/legacy-lib/path-check.ts +89 -0
  244. package/src/legacy-lib/process-liveness.ts +36 -0
  245. package/src/legacy-lib/provider-credential-path.ts +57 -0
  246. package/src/legacy-lib/provider-defaults.ts +114 -0
  247. package/src/legacy-lib/provider-detection.ts +67 -0
  248. package/src/legacy-lib/provider-names.ts +126 -0
  249. package/src/legacy-lib/repo-settings.ts +88 -0
  250. package/src/legacy-lib/run-mode.ts +58 -0
  251. package/src/legacy-lib/run-plan.ts +49 -0
  252. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  253. package/src/legacy-lib/settings-defaults.ts +212 -0
  254. package/src/legacy-lib/settings-error.ts +8 -0
  255. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  256. package/src/legacy-lib/settings-models.ts +124 -0
  257. package/src/legacy-lib/settings-storage.ts +277 -0
  258. package/src/legacy-lib/settings-validation.ts +220 -0
  259. package/src/legacy-lib/settings.ts +87 -0
  260. package/src/legacy-lib/setup-apply-types.ts +70 -0
  261. package/src/legacy-lib/setup-apply.ts +456 -0
  262. package/src/legacy-lib/setup-journal.ts +185 -0
  263. package/src/legacy-lib/setup-plan-types.ts +96 -0
  264. package/src/legacy-lib/setup-plan.ts +500 -0
  265. package/src/legacy-lib/setup-undo.ts +142 -0
  266. package/src/legacy-lib/start-cluster-config.ts +124 -0
  267. package/src/legacy-lib/start-cluster-environment.ts +165 -0
  268. package/src/legacy-lib/start-cluster-run-options.ts +279 -0
  269. package/src/legacy-lib/start-cluster.ts +237 -0
  270. package/src/legacy-lib/stream-json-parser.ts +88 -0
  271. package/src/message-buffer.js +55 -71
  272. package/src/message-buffer.ts +107 -0
  273. package/src/message-bus-bridge.js +92 -133
  274. package/src/message-bus-bridge.ts +149 -0
  275. package/src/name-generator-shared.js +220 -0
  276. package/src/name-generator-shared.ts +231 -0
  277. package/src/name-generator.js +8 -217
  278. package/src/name-generator.ts +27 -0
  279. package/src/omp-blob-root.js +83 -64
  280. package/src/omp-blob-root.ts +116 -0
  281. package/src/omp-config-overlay.js +65 -38
  282. package/src/omp-config-overlay.ts +110 -0
  283. package/src/omp-execution-fingerprint.js +38 -43
  284. package/src/omp-execution-fingerprint.ts +92 -0
  285. package/src/omp-session-limits.js +10 -15
  286. package/src/omp-session-limits.ts +53 -0
  287. package/src/omp-session-partition.js +2 -2
  288. package/src/omp-session-verifier.js +1 -1
  289. package/src/orchestrator.js +19 -4
  290. package/src/providers/anthropic/index.js +3 -1
  291. package/src/providers/anthropic/index.ts +13 -0
  292. package/src/providers/capabilities.js +19 -27
  293. package/src/providers/capabilities.ts +44 -0
  294. package/src/providers/google/index.js +3 -1
  295. package/src/providers/google/index.ts +13 -0
  296. package/src/providers/openai/index.js +3 -1
  297. package/src/providers/openai/index.ts +13 -0
  298. package/src/providers/opencode/index.js +3 -1
  299. package/src/providers/opencode/index.ts +13 -0
  300. package/src/quality-gates.js +67 -127
  301. package/src/quality-gates.ts +149 -0
  302. package/src/repo-settings-access.js +40 -0
  303. package/src/repo-settings-access.ts +64 -0
  304. package/src/schemas/sub-cluster.js +127 -183
  305. package/src/schemas/sub-cluster.ts +238 -0
  306. package/src/state-snapshot-normalization.js +224 -0
  307. package/src/state-snapshot-normalization.ts +222 -0
  308. package/src/state-snapshot.js +192 -359
  309. package/src/state-snapshot.ts +291 -0
  310. package/src/state-snapshotter.js +118 -130
  311. package/src/state-snapshotter.ts +167 -0
  312. package/src/sub-cluster-wrapper.js +4 -13
  313. package/src/task-run-model-args.js +87 -124
  314. package/src/task-run-model-args.ts +204 -0
  315. package/src/task-runner.js +5 -25
  316. package/src/task-runner.ts +28 -0
  317. package/src/task-startup-error.js +73 -58
  318. package/src/task-startup-error.ts +126 -0
  319. package/src/template-validation/consensus-gate-contracts.js +2 -0
  320. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  321. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  322. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  323. package/src/template-validation/consensus-gate-stage.js +34 -0
  324. package/src/template-validation/consensus-gate-stage.ts +56 -0
  325. package/src/template-validation/random-topology-contracts.js +2 -0
  326. package/src/template-validation/random-topology-contracts.ts +54 -0
  327. package/src/template-validation/random-topology-dispatch.js +25 -0
  328. package/src/template-validation/random-topology-dispatch.ts +33 -0
  329. package/src/template-validation/random-topology-message-loop.js +53 -0
  330. package/src/template-validation/random-topology-message-loop.ts +73 -0
  331. package/src/template-validation/random-topology-operations.js +79 -0
  332. package/src/template-validation/random-topology-operations.ts +101 -0
  333. package/src/template-validation/random-topology-runtime.js +25 -0
  334. package/src/template-validation/random-topology-runtime.ts +43 -0
  335. package/src/template-validation/random-topology-scenario.js +52 -0
  336. package/src/template-validation/random-topology-scenario.ts +57 -0
  337. package/src/template-validation/random-topology-schema.js +159 -0
  338. package/src/template-validation/random-topology-schema.ts +190 -0
  339. package/src/template-validation/random-topology-state.js +28 -0
  340. package/src/template-validation/random-topology-state.ts +30 -0
  341. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  342. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  343. package/src/template-validation/random-topology-trigger.js +75 -0
  344. package/src/template-validation/random-topology-trigger.ts +88 -0
  345. package/src/template-validation/report-formatter.js +40 -46
  346. package/src/template-validation/report-formatter.ts +101 -0
  347. package/src/template-validation/simulate-consensus-gates.js +111 -302
  348. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  349. package/src/template-validation/simulate-random-topology.js +26 -519
  350. package/src/template-validation/simulate-random-topology.ts +57 -0
  351. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  352. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  353. package/src/template-validation/simulation-agent-runtime.js +25 -0
  354. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  355. package/src/template-validation/simulation-agent.js +29 -0
  356. package/src/template-validation/simulation-agent.ts +73 -0
  357. package/src/template-validation/simulation-runtime.js +34 -0
  358. package/src/template-validation/simulation-runtime.ts +72 -0
  359. package/src/template-validation/two-stage-contracts.js +2 -0
  360. package/src/template-validation/two-stage-contracts.ts +41 -0
  361. package/src/template-validation/two-stage-inputs.js +21 -0
  362. package/src/template-validation/two-stage-inputs.ts +29 -0
  363. package/src/template-validation/two-stage-results.js +30 -0
  364. package/src/template-validation/two-stage-results.ts +40 -0
  365. package/src/template-validation/two-stage-scenario.js +86 -0
  366. package/src/template-validation/two-stage-scenario.ts +120 -0
  367. package/src/worktree-claude-config.js +182 -220
  368. package/src/worktree-claude-config.ts +272 -0
  369. package/src/worktree-tooling-env.js +103 -125
  370. package/src/worktree-tooling-env.ts +142 -0
  371. package/task-lib/completion.js +2 -3
  372. package/task-lib/completion.ts +9 -0
  373. package/task-lib/config.js +1 -4
  374. package/task-lib/config.ts +11 -0
  375. package/task-lib/name-generator.js +4 -226
  376. package/task-lib/name-generator.ts +11 -0
  377. package/task-lib/omp-session-cleanup.js +1 -1
  378. package/task-lib/omp-storage-root.js +8 -12
  379. package/task-lib/omp-storage-root.ts +62 -0
  380. package/task-lib/process-termination.js +143 -166
  381. package/task-lib/process-termination.ts +268 -0
@@ -0,0 +1,297 @@
1
+ import providerControlPlane = require('./provider-control-plane');
2
+ import type {
3
+ ExtractProviderFailure,
4
+ JsonRecord,
5
+ PiLifecycleState,
6
+ PiTokenUsage,
7
+ ProviderFailure,
8
+ } from './pi-terminal-lifecycle-types';
9
+
10
+ const { parseProviderEvent, providerFailureFields } = providerControlPlane;
11
+
12
+ const ZEROSHOT_PI_METADATA_PREFIXES = [
13
+ '[ZEROSHOT] Earlier provider output omitted',
14
+ '[ZEROSHOT][PROVIDER_STDERR] ',
15
+ '[ZEROSHOT][FATAL] ',
16
+ ];
17
+ const ZEROSHOT_RETAINED_RECORD_PREFIX = '[ZEROSHOT] Provider output record retained';
18
+ const PI_STOP_REASONS = new Set(['stop', 'length', 'toolUse', 'error', 'aborted', 'deferred']);
19
+ const PI_REQUIRED_TOKEN_FIELDS = ['input', 'output', 'cacheRead', 'cacheWrite', 'totalTokens'];
20
+ const PI_OPTIONAL_TOKEN_FIELDS = ['cacheWrite1h', 'reasoning'];
21
+ const PI_TOKEN_FIELDS = [...PI_REQUIRED_TOKEN_FIELDS, ...PI_OPTIONAL_TOKEN_FIELDS];
22
+ const PI_COST_FIELDS = ['input', 'output', 'cacheRead', 'cacheWrite', 'total'];
23
+ const PI_PENDING_EVENT_TYPES = new Set([
24
+ 'turn_end',
25
+ 'agent_end',
26
+ 'auto_retry_start',
27
+ 'auto_retry_end',
28
+ ]);
29
+
30
+ function isRecord(value: unknown): value is JsonRecord {
31
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
32
+ }
33
+
34
+ function pendingFailureMetadata(failure: ProviderFailure): JsonRecord {
35
+ return {
36
+ zeroshot_pending_failure: {
37
+ provider: failure.provider,
38
+ category: failure.category,
39
+ kind: failure.classification.kind,
40
+ retryable: failure.classification.retryable,
41
+ diagnostic: failure.diagnostic,
42
+ },
43
+ };
44
+ }
45
+
46
+ function numericFields(fields: readonly string[], source: JsonRecord): Record<string, number> {
47
+ return Object.fromEntries(
48
+ fields.map((field) => [field, typeof source[field] === 'number' ? source[field] : 0])
49
+ );
50
+ }
51
+
52
+ function redactedUsage(usage: unknown): JsonRecord {
53
+ const value = isRecord(usage) ? usage : {};
54
+ return {
55
+ ...numericFields(PI_REQUIRED_TOKEN_FIELDS, value),
56
+ ...(typeof value.cacheWrite1h === 'number' ? { cacheWrite1h: value.cacheWrite1h } : {}),
57
+ ...(typeof value.reasoning === 'number' ? { reasoning: value.reasoning } : {}),
58
+ cost: numericFields(PI_COST_FIELDS, isRecord(value.cost) ? value.cost : {}),
59
+ };
60
+ }
61
+
62
+ function hasNumericFields(value: unknown, fields: readonly string[]): value is JsonRecord {
63
+ return isRecord(value) && fields.every((field) => typeof value[field] === 'number');
64
+ }
65
+
66
+ function addNumericFields(
67
+ target: Record<string, number>,
68
+ source: JsonRecord,
69
+ fields: readonly string[]
70
+ ): void {
71
+ for (const field of fields) {
72
+ if (typeof source[field] === 'number') target[field] = (target[field] || 0) + source[field];
73
+ }
74
+ }
75
+
76
+ function rememberTokenUsage(state: PiLifecycleState, usage: unknown): boolean {
77
+ if (!hasNumericFields(usage, PI_REQUIRED_TOKEN_FIELDS)) return false;
78
+ if (!hasNumericFields(usage.cost, PI_COST_FIELDS)) return false;
79
+ if (
80
+ !PI_OPTIONAL_TOKEN_FIELDS.every(
81
+ (field) => usage[field] === undefined || typeof usage[field] === 'number'
82
+ )
83
+ ) {
84
+ return false;
85
+ }
86
+ state.piUsage = state.piUsage || { tokens: {}, cost: {} };
87
+ addNumericFields(state.piUsage.tokens, usage, PI_TOKEN_FIELDS);
88
+ addNumericFields(state.piUsage.cost, usage.cost, PI_COST_FIELDS);
89
+ return true;
90
+ }
91
+
92
+ function getPiTokenUsage(state: PiLifecycleState | null | undefined): PiTokenUsage | null {
93
+ if (!state?.piUsage) return null;
94
+ const { tokens, cost } = state.piUsage;
95
+ return {
96
+ inputTokens: tokens.input || 0,
97
+ outputTokens: tokens.output || 0,
98
+ cacheReadInputTokens: tokens.cacheRead || 0,
99
+ cacheCreationInputTokens: tokens.cacheWrite || 0,
100
+ totalCostUsd: cost.total || 0,
101
+ durationMs: null,
102
+ modelUsage: { ...tokens, cost: { ...cost } },
103
+ };
104
+ }
105
+
106
+ function hasValidMessageUsage(
107
+ state: PiLifecycleState,
108
+ role: string,
109
+ message: JsonRecord
110
+ ): boolean {
111
+ const hasCountedUsage = role === 'assistant' || message.usage !== undefined;
112
+ return (
113
+ !(['assistant', 'toolResult'].includes(role) && hasCountedUsage) ||
114
+ rememberTokenUsage(state, message.usage)
115
+ );
116
+ }
117
+
118
+ function isValidAssistantMessage(message: unknown): boolean {
119
+ return (
120
+ isRecord(message) &&
121
+ Array.isArray(message.content) &&
122
+ typeof message.stopReason === 'string' &&
123
+ PI_STOP_REASONS.has(message.stopReason)
124
+ );
125
+ }
126
+
127
+ function redactPendingFailure(failure: ProviderFailure, parsed: JsonRecord): string {
128
+ const pending = pendingFailureMetadata(failure);
129
+ if (parsed.type === 'agent_end') {
130
+ return JSON.stringify({
131
+ type: parsed.type,
132
+ messages: [],
133
+ willRetry: parsed.willRetry === true,
134
+ ...pending,
135
+ });
136
+ }
137
+ if (parsed.type === 'auto_retry_end') {
138
+ return JSON.stringify({ type: parsed.type, success: false, ...pending });
139
+ }
140
+ if (parsed.type === 'auto_retry_start') {
141
+ return JSON.stringify({
142
+ type: parsed.type,
143
+ ...numericFields(
144
+ ['attempt', 'maxAttempts', 'delayMs'].filter(
145
+ (field) => typeof parsed[field] === 'number'
146
+ ),
147
+ parsed
148
+ ),
149
+ ...pending,
150
+ });
151
+ }
152
+ const message = isRecord(parsed.message) ? parsed.message : {};
153
+ return JSON.stringify({
154
+ type: parsed.type,
155
+ message: {
156
+ role: 'assistant',
157
+ content: [],
158
+ usage: redactedUsage(message.usage),
159
+ stopReason: 'error',
160
+ errorMessage: 'Pi provider turn failed; awaiting agent settlement.',
161
+ },
162
+ ...(parsed.type === 'turn_end' ? { toolResults: [] } : {}),
163
+ ...pending,
164
+ });
165
+ }
166
+
167
+ function finalFailureEnvelope(failure: ProviderFailure): string {
168
+ return JSON.stringify({ type: 'agent_settled', ...providerFailureFields(failure) });
169
+ }
170
+
171
+ function rememberProtocolFailure(
172
+ state: PiLifecycleState,
173
+ content: string,
174
+ extractProviderFailure: ExtractProviderFailure
175
+ ): ProviderFailure | null {
176
+ const failure = extractProviderFailure(content, 'pi');
177
+ if (failure) {
178
+ state.piProtocolFailure = failure;
179
+ state.providerFailure = failure;
180
+ }
181
+ return failure;
182
+ }
183
+
184
+ function failProtocolLine(
185
+ state: PiLifecycleState,
186
+ content: string,
187
+ extractProviderFailure: ExtractProviderFailure
188
+ ): string {
189
+ const failure = rememberProtocolFailure(state, content, extractProviderFailure);
190
+ return failure ? finalFailureEnvelope(failure) : content;
191
+ }
192
+
193
+ function handleMessageEnd(
194
+ state: PiLifecycleState,
195
+ content: string,
196
+ parsed: JsonRecord,
197
+ extractProviderFailure: ExtractProviderFailure
198
+ ): string {
199
+ const message = isRecord(parsed.message) ? parsed.message : null;
200
+ const role = message?.role;
201
+ if (typeof role !== 'string') return failProtocolLine(state, content, extractProviderFailure);
202
+ if (!hasValidMessageUsage(state, role, message ?? {})) {
203
+ return failProtocolLine(state, 'invalid Pi usage', extractProviderFailure);
204
+ }
205
+ if (role !== 'assistant') return content;
206
+ if (!isValidAssistantMessage(message)) {
207
+ return failProtocolLine(state, content, extractProviderFailure);
208
+ }
209
+ const failure = extractProviderFailure(
210
+ `${content}\n${JSON.stringify({ type: 'agent_settled' })}`,
211
+ 'pi'
212
+ );
213
+ state.piLatestAssistantObserved = true;
214
+ state.pendingPiFailure = failure;
215
+ if (failure) return redactPendingFailure(failure, parsed);
216
+ if (!state.piProtocolFailure) state.providerFailure = null;
217
+ return content;
218
+ }
219
+
220
+ function usageForEvent(parsed: JsonRecord): unknown {
221
+ const result = isRecord(parsed.result) ? parsed.result : null;
222
+ if (parsed.type === 'compaction_end' && result?.usage !== undefined) return result.usage;
223
+ const entry = isRecord(parsed.entry) ? parsed.entry : null;
224
+ if (
225
+ parsed.type === 'entry_appended' &&
226
+ entry?.type === 'branch_summary' &&
227
+ entry.usage !== undefined
228
+ ) {
229
+ return entry.usage;
230
+ }
231
+ return undefined;
232
+ }
233
+
234
+ function handleSettlement(
235
+ state: PiLifecycleState,
236
+ content: string,
237
+ extractProviderFailure: ExtractProviderFailure
238
+ ): string {
239
+ state.piProtocolSettled = true;
240
+ const missingAssistantFailure = state.piLatestAssistantObserved
241
+ ? null
242
+ : extractProviderFailure(JSON.stringify({ type: 'agent_settled' }), 'pi');
243
+ const failure = state.piProtocolFailure || state.pendingPiFailure || missingAssistantFailure;
244
+ state.pendingPiFailure = null;
245
+ state.providerFailure = failure || null;
246
+ return failure ? finalFailureEnvelope(failure) : content;
247
+ }
248
+
249
+ function handleProtocolEvent(
250
+ state: PiLifecycleState,
251
+ content: string,
252
+ parsed: JsonRecord,
253
+ extractProviderFailure: ExtractProviderFailure
254
+ ): string {
255
+ const eventType = parsed.type;
256
+ if (typeof eventType !== 'string') return content;
257
+ if (eventType === 'message_end') {
258
+ return handleMessageEnd(state, content, parsed, extractProviderFailure);
259
+ }
260
+ const usage = usageForEvent(parsed);
261
+ if (usage !== undefined && !rememberTokenUsage(state, usage)) {
262
+ return failProtocolLine(state, 'invalid Pi usage', extractProviderFailure);
263
+ }
264
+ if (state.pendingPiFailure && PI_PENDING_EVENT_TYPES.has(eventType)) {
265
+ return redactPendingFailure(state.pendingPiFailure, parsed);
266
+ }
267
+ return eventType === 'agent_settled'
268
+ ? handleSettlement(state, content, extractProviderFailure)
269
+ : content;
270
+ }
271
+
272
+ function redactPiFailureForControlPlane(
273
+ state: PiLifecycleState,
274
+ content: string,
275
+ extractProviderFailure: ExtractProviderFailure
276
+ ): string {
277
+ if (content.startsWith(ZEROSHOT_RETAINED_RECORD_PREFIX)) {
278
+ state.piProtocolPrefixOmitted = true;
279
+ return content;
280
+ }
281
+ if (ZEROSHOT_PI_METADATA_PREFIXES.some((prefix) => content.startsWith(prefix))) return content;
282
+ const parsed = parseProviderEvent(content);
283
+ if (parsed === null || typeof parsed.type !== 'string') {
284
+ return failProtocolLine(state, content, extractProviderFailure);
285
+ }
286
+ if (state.piProtocolSettled) {
287
+ return failProtocolLine(
288
+ state,
289
+ `${JSON.stringify({ type: 'agent_settled' })}\n${content}`,
290
+ extractProviderFailure
291
+ );
292
+ }
293
+ state.piProtocolObserved = true;
294
+ return handleProtocolEvent(state, content, parsed, extractProviderFailure);
295
+ }
296
+
297
+ export = { getPiTokenUsage, redactPiFailureForControlPlane };
@@ -1,26 +1,27 @@
1
- // @ts-nocheck
2
-
1
+ "use strict";
2
+ function isJsonRecord(value) {
3
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
4
+ }
3
5
  function parseProviderEvent(content) {
4
- try {
5
- const parsed = JSON.parse(content);
6
- return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
7
- } catch {
8
- return null;
9
- }
6
+ try {
7
+ const parsed = JSON.parse(content);
8
+ return isJsonRecord(parsed) ? parsed : null;
9
+ }
10
+ catch {
11
+ return null;
12
+ }
10
13
  }
11
-
12
14
  function providerFailureFields(failure) {
13
- return {
14
- error: { message: failure.error },
15
- zeroshot_failure: {
16
- provider: failure.provider,
17
- event: failure.event,
18
- category: failure.category,
19
- kind: failure.classification.kind,
20
- retryable: failure.classification.retryable,
21
- diagnostic: failure.diagnostic,
22
- },
23
- };
15
+ return {
16
+ error: { message: failure.error },
17
+ zeroshot_failure: {
18
+ provider: failure.provider,
19
+ event: failure.event,
20
+ category: failure.category,
21
+ kind: failure.classification.kind,
22
+ retryable: failure.classification.retryable,
23
+ diagnostic: failure.diagnostic,
24
+ },
25
+ };
24
26
  }
25
-
26
27
  module.exports = { parseProviderEvent, providerFailureFields };
@@ -0,0 +1,52 @@
1
+ type JsonRecord = Record<string, unknown>;
2
+
3
+ interface ProviderFailure {
4
+ readonly error: string;
5
+ readonly provider: string;
6
+ readonly event: string;
7
+ readonly category: string;
8
+ readonly classification: {
9
+ readonly kind: string;
10
+ readonly retryable: boolean;
11
+ };
12
+ readonly diagnostic: unknown;
13
+ }
14
+
15
+ function isJsonRecord(value: unknown): value is JsonRecord {
16
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
17
+ }
18
+
19
+ function parseProviderEvent(content: string): JsonRecord | null {
20
+ try {
21
+ const parsed: unknown = JSON.parse(content);
22
+ return isJsonRecord(parsed) ? parsed : null;
23
+ } catch {
24
+ return null;
25
+ }
26
+ }
27
+
28
+ function providerFailureFields(failure: ProviderFailure): {
29
+ error: { message: string };
30
+ zeroshot_failure: {
31
+ provider: string;
32
+ event: string;
33
+ category: string;
34
+ kind: string;
35
+ retryable: boolean;
36
+ diagnostic: unknown;
37
+ };
38
+ } {
39
+ return {
40
+ error: { message: failure.error },
41
+ zeroshot_failure: {
42
+ provider: failure.provider,
43
+ event: failure.event,
44
+ category: failure.category,
45
+ kind: failure.classification.kind,
46
+ retryable: failure.classification.retryable,
47
+ diagnostic: failure.diagnostic,
48
+ },
49
+ };
50
+ }
51
+
52
+ export = { parseProviderEvent, providerFailureFields };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,60 @@
1
+ export interface ProviderClassification {
2
+ retryable: boolean;
3
+ kind: string;
4
+ }
5
+
6
+ export interface ProviderAdapterBoundary {
7
+ classifyError(error: unknown): unknown;
8
+ }
9
+
10
+ export interface RuntimeProviderBoundary {
11
+ adapter: ProviderAdapterBoundary;
12
+ }
13
+
14
+ export interface ProvidersBoundary {
15
+ getProvider(name: string): RuntimeProviderBoundary;
16
+ }
17
+
18
+ export interface FailureMetadata {
19
+ provider?: string | null;
20
+ providerEvent?: string | null;
21
+ providerCategory?: string | null;
22
+ classification?: ProviderClassification | null;
23
+ providerDiagnostic?: unknown;
24
+ permanent?: boolean;
25
+ }
26
+
27
+ export interface TerminalFailureError extends Error, FailureMetadata {
28
+ hookFailure?: unknown;
29
+ vertexModelError?: unknown;
30
+ terminationExhausted?: unknown;
31
+ taskId?: string | null;
32
+ code?: string;
33
+ capability?: unknown;
34
+ details?: unknown;
35
+ }
36
+
37
+ export interface FailureAgent {
38
+ id: string;
39
+ role: unknown;
40
+ iteration: unknown;
41
+ currentTaskId: string | null;
42
+ cluster: {
43
+ failureInfo: Record<string, unknown>;
44
+ };
45
+ _publish(message: Record<string, unknown>): unknown;
46
+ }
47
+
48
+ export interface WorkerFailure {
49
+ code: 'crash' | 'refusal';
50
+ reason: 'authentication_required' | 'declared_failure';
51
+ }
52
+
53
+ export interface TerminalFailureArguments {
54
+ agent: FailureAgent;
55
+ error: TerminalFailureError;
56
+ attempts: number;
57
+ worker: WorkerFailure;
58
+ unsupportedCapability: boolean;
59
+ structuredOutputInvalid: boolean;
60
+ }