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