@the-open-engine/zeroshot 6.38.1 → 6.39.1

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 (383) hide show
  1. package/README.md +6 -0
  2. package/cli/event-copy.js +8 -7
  3. package/cli/event-copy.ts +12 -0
  4. package/cli/index.js +67 -48
  5. package/cli/json-export.js +61 -64
  6. package/cli/json-export.ts +112 -0
  7. package/cli/message-formatter-utils.js +68 -56
  8. package/cli/message-formatter-utils.ts +121 -0
  9. package/cli/message-formatters-normal.js +124 -259
  10. package/cli/message-formatters-normal.ts +250 -0
  11. package/cli/message-formatters-watch.js +81 -84
  12. package/cli/message-formatters-watch.ts +189 -0
  13. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  14. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  15. package/lib/cluster/generated/protocol.d.cts +8 -0
  16. package/lib/cluster/generated/protocol.d.mts +8 -0
  17. package/lib/cluster/generated/protocol.d.ts +8 -0
  18. package/lib/clusters-registry.d.ts +23 -0
  19. package/lib/clusters-registry.js +17 -29
  20. package/lib/completion.d.ts +12 -0
  21. package/lib/completion.js +84 -94
  22. package/lib/compose-utils.d.ts +32 -0
  23. package/lib/compose-utils.js +57 -72
  24. package/lib/detached-startup.d.ts +84 -0
  25. package/lib/detached-startup.js +232 -302
  26. package/lib/docker-config.d.ts +43 -0
  27. package/lib/docker-config.js +150 -325
  28. package/lib/docker-env-auth.d.ts +17 -0
  29. package/lib/docker-env-auth.js +75 -0
  30. package/lib/git-remote-utils.d.ts +48 -0
  31. package/lib/git-remote-utils.js +147 -213
  32. package/lib/id-detector.d.ts +15 -0
  33. package/lib/id-detector.js +37 -41
  34. package/lib/path-check.d.ts +30 -0
  35. package/lib/path-check.js +42 -45
  36. package/lib/process-liveness.d.ts +16 -0
  37. package/lib/process-liveness.js +19 -12
  38. package/lib/provider-credential-path.d.ts +16 -0
  39. package/lib/provider-credential-path.js +31 -29
  40. package/lib/provider-defaults.d.ts +30 -0
  41. package/lib/provider-defaults.js +47 -42
  42. package/lib/provider-detection.d.ts +11 -0
  43. package/lib/provider-detection.js +91 -54
  44. package/lib/provider-names.d.ts +38 -0
  45. package/lib/provider-names.js +56 -64
  46. package/lib/repo-settings.d.ts +28 -0
  47. package/lib/repo-settings.js +83 -59
  48. package/lib/run-mode.d.ts +21 -0
  49. package/lib/run-mode.js +21 -20
  50. package/lib/run-plan.d.ts +28 -0
  51. package/lib/run-plan.js +17 -16
  52. package/lib/settings/claude-auth.d.ts +35 -0
  53. package/lib/settings/claude-auth.js +30 -47
  54. package/lib/settings-defaults.d.ts +20 -0
  55. package/lib/settings-defaults.js +149 -0
  56. package/lib/settings-error.d.ts +7 -0
  57. package/lib/settings-error.js +8 -0
  58. package/lib/settings-issue-providers.d.ts +10 -0
  59. package/lib/settings-issue-providers.js +12 -0
  60. package/lib/settings-models.d.ts +22 -0
  61. package/lib/settings-models.js +93 -0
  62. package/lib/settings-storage.d.ts +23 -0
  63. package/lib/settings-storage.js +205 -0
  64. package/lib/settings-validation.d.ts +7 -0
  65. package/lib/settings-validation.js +182 -0
  66. package/lib/settings.d.ts +29 -0
  67. package/lib/settings.js +41 -736
  68. package/lib/setup-apply-types.d.ts +66 -0
  69. package/lib/setup-apply-types.js +2 -0
  70. package/lib/setup-apply.d.ts +39 -0
  71. package/lib/setup-apply.js +267 -264
  72. package/lib/setup-journal.d.ts +41 -0
  73. package/lib/setup-journal.js +119 -76
  74. package/lib/setup-plan-types.d.ts +102 -0
  75. package/lib/setup-plan-types.js +2 -0
  76. package/lib/setup-plan.d.ts +30 -0
  77. package/lib/setup-plan.js +300 -324
  78. package/lib/setup-undo.d.ts +44 -0
  79. package/lib/setup-undo.js +61 -74
  80. package/lib/start-cluster-config.d.ts +26 -0
  81. package/lib/start-cluster-config.js +56 -0
  82. package/lib/start-cluster-environment.d.ts +41 -0
  83. package/lib/start-cluster-environment.js +134 -0
  84. package/lib/start-cluster-run-options.d.ts +54 -0
  85. package/lib/start-cluster-run-options.js +148 -0
  86. package/lib/start-cluster.d.ts +64 -0
  87. package/lib/start-cluster.js +98 -454
  88. package/lib/stream-json-parser.d.ts +17 -0
  89. package/lib/stream-json-parser.js +51 -52
  90. package/npm-shrinkwrap.json +6 -8
  91. package/package.json +14 -8
  92. package/scripts/postinstall.js +27 -0
  93. package/scripts/rust-distribution.js +36 -45
  94. package/src/agent/agent-command-proofs-context.js +35 -45
  95. package/src/agent/agent-command-proofs-context.ts +87 -0
  96. package/src/agent/agent-config-settings.js +19 -0
  97. package/src/agent/agent-config-settings.ts +41 -0
  98. package/src/agent/agent-config.js +122 -231
  99. package/src/agent/agent-config.ts +285 -0
  100. package/src/agent/agent-context-builder.js +38 -273
  101. package/src/agent/agent-context-builder.ts +51 -0
  102. package/src/agent/agent-context-environment-sections.js +105 -0
  103. package/src/agent/agent-context-environment-sections.ts +134 -0
  104. package/src/agent/agent-context-packs.js +165 -0
  105. package/src/agent/agent-context-packs.ts +296 -0
  106. package/src/agent/agent-context-prompt-sections.js +100 -0
  107. package/src/agent/agent-context-prompt-sections.ts +148 -0
  108. package/src/agent/agent-context-sections.js +25 -334
  109. package/src/agent/agent-context-sections.ts +36 -0
  110. package/src/agent/agent-context-sources.js +96 -149
  111. package/src/agent/agent-context-sources.ts +253 -0
  112. package/src/agent/agent-context-types.js +2 -0
  113. package/src/agent/agent-context-types.ts +132 -0
  114. package/src/agent/agent-context-validation-sections.js +73 -0
  115. package/src/agent/agent-context-validation-sections.ts +129 -0
  116. package/src/agent/agent-input-injector.js +99 -118
  117. package/src/agent/agent-input-injector.ts +195 -0
  118. package/src/agent/agent-liveness-poll.js +74 -78
  119. package/src/agent/agent-liveness-poll.ts +163 -0
  120. package/src/agent/agent-quality-gate-schema.js +77 -86
  121. package/src/agent/agent-quality-gate-schema.ts +135 -0
  122. package/src/agent/agent-quality-gates-context.js +44 -50
  123. package/src/agent/agent-quality-gates-context.ts +91 -0
  124. package/src/agent/agent-stuck-detector.js +171 -239
  125. package/src/agent/agent-stuck-detector.ts +288 -0
  126. package/src/agent/agent-trigger-evaluator.js +29 -46
  127. package/src/agent/agent-trigger-evaluator.ts +98 -0
  128. package/src/agent/context-metrics.js +110 -141
  129. package/src/agent/context-metrics.ts +261 -0
  130. package/src/agent/context-pack-builder.js +72 -358
  131. package/src/agent/context-pack-builder.ts +105 -0
  132. package/src/agent/context-pack-core.js +70 -0
  133. package/src/agent/context-pack-core.ts +96 -0
  134. package/src/agent/context-pack-selection.js +119 -0
  135. package/src/agent/context-pack-selection.ts +187 -0
  136. package/src/agent/context-pack-truncation.js +139 -0
  137. package/src/agent/context-pack-truncation.ts +208 -0
  138. package/src/agent/context-pack-types.js +2 -0
  139. package/src/agent/context-pack-types.ts +98 -0
  140. package/src/agent/context-replay-policy.js +30 -39
  141. package/src/agent/context-replay-policy.ts +71 -0
  142. package/src/agent/critical-agent-policy.js +6 -10
  143. package/src/agent/critical-agent-policy.ts +20 -0
  144. package/src/agent/guidance-queue.js +74 -87
  145. package/src/agent/guidance-queue.ts +166 -0
  146. package/src/agent/output-extraction-error-detail.js +45 -0
  147. package/src/agent/output-extraction-error-detail.ts +49 -0
  148. package/src/agent/output-extraction-failures.js +125 -0
  149. package/src/agent/output-extraction-failures.ts +149 -0
  150. package/src/agent/output-extraction-json.js +234 -0
  151. package/src/agent/output-extraction-json.ts +235 -0
  152. package/src/agent/output-extraction-pi.js +124 -0
  153. package/src/agent/output-extraction-pi.ts +137 -0
  154. package/src/agent/output-extraction-types.js +2 -0
  155. package/src/agent/output-extraction-types.ts +49 -0
  156. package/src/agent/output-extraction.js +17 -617
  157. package/src/agent/output-extraction.ts +30 -0
  158. package/src/agent/output-reformatter-errors.js +83 -0
  159. package/src/agent/output-reformatter-errors.ts +106 -0
  160. package/src/agent/output-reformatter-types.js +2 -0
  161. package/src/agent/output-reformatter-types.ts +86 -0
  162. package/src/agent/output-reformatter.js +140 -185
  163. package/src/agent/output-reformatter.ts +238 -0
  164. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  165. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  166. package/src/agent/pi-terminal-lifecycle.js +186 -206
  167. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  168. package/src/agent/provider-control-plane.js +22 -21
  169. package/src/agent/provider-control-plane.ts +52 -0
  170. package/src/agent/provider-terminal-failure-types.js +2 -0
  171. package/src/agent/provider-terminal-failure-types.ts +60 -0
  172. package/src/agent/provider-terminal-failure.js +194 -191
  173. package/src/agent/provider-terminal-failure.ts +262 -0
  174. package/src/agent/rate-limit-backoff.js +31 -74
  175. package/src/agent/rate-limit-backoff.ts +71 -0
  176. package/src/agent/schema-utils.js +85 -125
  177. package/src/agent/schema-utils.ts +148 -0
  178. package/src/agent/structured-output-error.js +34 -33
  179. package/src/agent/structured-output-error.ts +105 -0
  180. package/src/agent/validation-platform.js +27 -27
  181. package/src/agent/validation-platform.ts +49 -0
  182. package/src/agents/git-pusher-template.js +17 -34
  183. package/src/attach/attach-client.js +232 -405
  184. package/src/attach/attach-client.ts +300 -0
  185. package/src/attach/attach-server-cleanup.js +43 -0
  186. package/src/attach/attach-server-cleanup.ts +39 -0
  187. package/src/attach/attach-server-clients.js +117 -0
  188. package/src/attach/attach-server-clients.ts +122 -0
  189. package/src/attach/attach-server-events.js +38 -0
  190. package/src/attach/attach-server-events.ts +36 -0
  191. package/src/attach/attach-server-pty.js +45 -0
  192. package/src/attach/attach-server-pty.ts +64 -0
  193. package/src/attach/attach-server-runtime.js +73 -0
  194. package/src/attach/attach-server-runtime.ts +62 -0
  195. package/src/attach/attach-server-socket.js +28 -0
  196. package/src/attach/attach-server-socket.ts +23 -0
  197. package/src/attach/attach-server-types.js +2 -0
  198. package/src/attach/attach-server-types.ts +82 -0
  199. package/src/attach/attach-server.js +106 -523
  200. package/src/attach/attach-server.ts +158 -0
  201. package/src/attach/index.js +18 -35
  202. package/src/attach/index.ts +18 -0
  203. package/src/attach/protocol.js +95 -184
  204. package/src/attach/protocol.ts +181 -0
  205. package/src/attach/ring-buffer.js +76 -102
  206. package/src/attach/ring-buffer.ts +109 -0
  207. package/src/attach/send-input.js +64 -75
  208. package/src/attach/send-input.ts +94 -0
  209. package/src/attach/socket-discovery.js +164 -218
  210. package/src/attach/socket-discovery.ts +230 -0
  211. package/src/attach/socket-paths.js +42 -61
  212. package/src/attach/socket-paths.ts +81 -0
  213. package/src/claude-credentials.js +51 -54
  214. package/src/claude-credentials.ts +89 -0
  215. package/src/cluster/generated/protocol-schema.ts +1 -1
  216. package/src/cluster/generated/protocol.ts +2 -1
  217. package/src/command-proofs.js +110 -141
  218. package/src/command-proofs.ts +216 -0
  219. package/src/config-router.js +81 -73
  220. package/src/config-router.ts +131 -0
  221. package/src/copy-containment.js +191 -0
  222. package/src/copy-containment.ts +259 -0
  223. package/src/copy-worker.js +53 -30
  224. package/src/copy-worker.ts +88 -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/isolation-manager.js +59 -20
  232. package/src/ledger-sequence.js +45 -48
  233. package/src/ledger-sequence.ts +63 -0
  234. package/src/legacy-lib/clusters-registry.ts +40 -0
  235. package/src/legacy-lib/completion.ts +148 -0
  236. package/src/legacy-lib/compose-utils.ts +102 -0
  237. package/src/legacy-lib/detached-startup.ts +451 -0
  238. package/src/legacy-lib/docker-config.ts +282 -0
  239. package/src/legacy-lib/docker-env-auth.ts +116 -0
  240. package/src/legacy-lib/git-remote-utils.ts +244 -0
  241. package/src/legacy-lib/id-detector.ts +57 -0
  242. package/src/legacy-lib/js-yaml.d.ts +3 -0
  243. package/src/legacy-lib/omelette.d.ts +15 -0
  244. package/src/legacy-lib/path-check.ts +89 -0
  245. package/src/legacy-lib/process-liveness.ts +36 -0
  246. package/src/legacy-lib/provider-credential-path.ts +57 -0
  247. package/src/legacy-lib/provider-defaults.ts +114 -0
  248. package/src/legacy-lib/provider-detection.ts +67 -0
  249. package/src/legacy-lib/provider-names.ts +126 -0
  250. package/src/legacy-lib/repo-settings.ts +88 -0
  251. package/src/legacy-lib/run-mode.ts +58 -0
  252. package/src/legacy-lib/run-plan.ts +49 -0
  253. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  254. package/src/legacy-lib/settings-defaults.ts +212 -0
  255. package/src/legacy-lib/settings-error.ts +8 -0
  256. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  257. package/src/legacy-lib/settings-models.ts +124 -0
  258. package/src/legacy-lib/settings-storage.ts +277 -0
  259. package/src/legacy-lib/settings-validation.ts +220 -0
  260. package/src/legacy-lib/settings.ts +87 -0
  261. package/src/legacy-lib/setup-apply-types.ts +70 -0
  262. package/src/legacy-lib/setup-apply.ts +456 -0
  263. package/src/legacy-lib/setup-journal.ts +185 -0
  264. package/src/legacy-lib/setup-plan-types.ts +96 -0
  265. package/src/legacy-lib/setup-plan.ts +500 -0
  266. package/src/legacy-lib/setup-undo.ts +142 -0
  267. package/src/legacy-lib/start-cluster-config.ts +124 -0
  268. package/src/legacy-lib/start-cluster-environment.ts +166 -0
  269. package/src/legacy-lib/start-cluster-run-options.ts +281 -0
  270. package/src/legacy-lib/start-cluster.ts +237 -0
  271. package/src/legacy-lib/stream-json-parser.ts +88 -0
  272. package/src/message-buffer.js +55 -71
  273. package/src/message-buffer.ts +107 -0
  274. package/src/message-bus-bridge.js +92 -133
  275. package/src/message-bus-bridge.ts +149 -0
  276. package/src/name-generator-shared.js +220 -0
  277. package/src/name-generator-shared.ts +231 -0
  278. package/src/name-generator.js +8 -217
  279. package/src/name-generator.ts +27 -0
  280. package/src/omp-blob-root.js +83 -64
  281. package/src/omp-blob-root.ts +116 -0
  282. package/src/omp-config-overlay.js +65 -38
  283. package/src/omp-config-overlay.ts +110 -0
  284. package/src/omp-execution-fingerprint.js +38 -43
  285. package/src/omp-execution-fingerprint.ts +92 -0
  286. package/src/omp-session-limits.js +10 -15
  287. package/src/omp-session-limits.ts +53 -0
  288. package/src/omp-session-partition.js +2 -2
  289. package/src/omp-session-verifier.js +1 -1
  290. package/src/orchestrator.js +32 -7
  291. package/src/pr-body-template.js +71 -0
  292. package/src/providers/anthropic/index.js +3 -1
  293. package/src/providers/anthropic/index.ts +13 -0
  294. package/src/providers/capabilities.js +19 -27
  295. package/src/providers/capabilities.ts +44 -0
  296. package/src/providers/google/index.js +3 -1
  297. package/src/providers/google/index.ts +13 -0
  298. package/src/providers/openai/index.js +3 -1
  299. package/src/providers/openai/index.ts +13 -0
  300. package/src/providers/opencode/index.js +3 -1
  301. package/src/providers/opencode/index.ts +13 -0
  302. package/src/quality-gates.js +67 -127
  303. package/src/quality-gates.ts +149 -0
  304. package/src/repo-settings-access.js +40 -0
  305. package/src/repo-settings-access.ts +64 -0
  306. package/src/schemas/sub-cluster.js +127 -183
  307. package/src/schemas/sub-cluster.ts +238 -0
  308. package/src/state-snapshot-normalization.js +224 -0
  309. package/src/state-snapshot-normalization.ts +222 -0
  310. package/src/state-snapshot.js +192 -359
  311. package/src/state-snapshot.ts +291 -0
  312. package/src/state-snapshotter.js +118 -130
  313. package/src/state-snapshotter.ts +167 -0
  314. package/src/sub-cluster-wrapper.js +4 -13
  315. package/src/task-run-model-args.js +87 -124
  316. package/src/task-run-model-args.ts +204 -0
  317. package/src/task-runner.js +5 -25
  318. package/src/task-runner.ts +28 -0
  319. package/src/task-startup-error.js +73 -58
  320. package/src/task-startup-error.ts +126 -0
  321. package/src/template-validation/consensus-gate-contracts.js +2 -0
  322. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  323. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  324. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  325. package/src/template-validation/consensus-gate-stage.js +34 -0
  326. package/src/template-validation/consensus-gate-stage.ts +56 -0
  327. package/src/template-validation/random-topology-contracts.js +2 -0
  328. package/src/template-validation/random-topology-contracts.ts +54 -0
  329. package/src/template-validation/random-topology-dispatch.js +25 -0
  330. package/src/template-validation/random-topology-dispatch.ts +33 -0
  331. package/src/template-validation/random-topology-message-loop.js +53 -0
  332. package/src/template-validation/random-topology-message-loop.ts +73 -0
  333. package/src/template-validation/random-topology-operations.js +79 -0
  334. package/src/template-validation/random-topology-operations.ts +101 -0
  335. package/src/template-validation/random-topology-runtime.js +25 -0
  336. package/src/template-validation/random-topology-runtime.ts +43 -0
  337. package/src/template-validation/random-topology-scenario.js +52 -0
  338. package/src/template-validation/random-topology-scenario.ts +57 -0
  339. package/src/template-validation/random-topology-schema.js +159 -0
  340. package/src/template-validation/random-topology-schema.ts +190 -0
  341. package/src/template-validation/random-topology-state.js +28 -0
  342. package/src/template-validation/random-topology-state.ts +30 -0
  343. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  344. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  345. package/src/template-validation/random-topology-trigger.js +75 -0
  346. package/src/template-validation/random-topology-trigger.ts +88 -0
  347. package/src/template-validation/report-formatter.js +40 -46
  348. package/src/template-validation/report-formatter.ts +101 -0
  349. package/src/template-validation/simulate-consensus-gates.js +111 -302
  350. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  351. package/src/template-validation/simulate-random-topology.js +26 -519
  352. package/src/template-validation/simulate-random-topology.ts +57 -0
  353. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  354. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  355. package/src/template-validation/simulation-agent-runtime.js +25 -0
  356. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  357. package/src/template-validation/simulation-agent.js +29 -0
  358. package/src/template-validation/simulation-agent.ts +73 -0
  359. package/src/template-validation/simulation-runtime.js +34 -0
  360. package/src/template-validation/simulation-runtime.ts +72 -0
  361. package/src/template-validation/two-stage-contracts.js +2 -0
  362. package/src/template-validation/two-stage-contracts.ts +41 -0
  363. package/src/template-validation/two-stage-inputs.js +21 -0
  364. package/src/template-validation/two-stage-inputs.ts +29 -0
  365. package/src/template-validation/two-stage-results.js +30 -0
  366. package/src/template-validation/two-stage-results.ts +40 -0
  367. package/src/template-validation/two-stage-scenario.js +86 -0
  368. package/src/template-validation/two-stage-scenario.ts +120 -0
  369. package/src/worktree-claude-config.js +182 -220
  370. package/src/worktree-claude-config.ts +272 -0
  371. package/src/worktree-tooling-env.js +103 -125
  372. package/src/worktree-tooling-env.ts +142 -0
  373. package/task-lib/completion.js +2 -3
  374. package/task-lib/completion.ts +9 -0
  375. package/task-lib/config.js +1 -4
  376. package/task-lib/config.ts +11 -0
  377. package/task-lib/name-generator.js +4 -226
  378. package/task-lib/name-generator.ts +11 -0
  379. package/task-lib/omp-session-cleanup.js +1 -1
  380. package/task-lib/omp-storage-root.js +8 -12
  381. package/task-lib/omp-storage-root.ts +62 -0
  382. package/task-lib/process-termination.js +143 -166
  383. 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
+ }