takt 0.45.0 → 0.47.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 (845) hide show
  1. package/README.md +55 -2
  2. package/builtins/en/config.yaml +37 -12
  3. package/builtins/en/facets/instructions/findings-manager.md +13 -0
  4. package/builtins/en/facets/instructions/fix.md +9 -4
  5. package/builtins/en/facets/instructions/implement-maintenance.md +5 -32
  6. package/builtins/en/facets/instructions/implement.md +3 -2
  7. package/builtins/en/facets/instructions/loop-monitor-reviewers-fix.md +5 -1
  8. package/builtins/en/facets/instructions/plan-test.md +4 -3
  9. package/builtins/en/facets/instructions/review-arch.md +1 -1
  10. package/builtins/en/facets/instructions/review-coding.md +11 -5
  11. package/builtins/en/facets/instructions/review-cqrs-es.md +1 -1
  12. package/builtins/en/facets/instructions/review-pure.md +9 -0
  13. package/builtins/en/facets/instructions/review-qa.md +2 -0
  14. package/builtins/en/facets/instructions/review-terraform.md +1 -1
  15. package/builtins/en/facets/instructions/review-test.md +3 -0
  16. package/builtins/en/facets/instructions/supervise-maintenance.md +7 -77
  17. package/builtins/en/facets/instructions/supervise.md +12 -65
  18. package/builtins/en/facets/instructions/write-tests-first.md +1 -0
  19. package/builtins/en/facets/instructions/write-tests-maintenance.md +1 -0
  20. package/builtins/en/facets/knowledge/architecture.md +31 -0
  21. package/builtins/en/facets/knowledge/backend.md +25 -1
  22. package/builtins/en/facets/knowledge/cqrs-es.md +57 -0
  23. package/builtins/en/facets/knowledge/e2e-testing.md +11 -1
  24. package/builtins/en/facets/knowledge/unit-testing.md +11 -0
  25. package/builtins/en/facets/output-contracts/ai-antipattern-review-finding-contract.md +31 -0
  26. package/builtins/en/facets/output-contracts/architecture-review-finding-contract.md +35 -0
  27. package/builtins/en/facets/output-contracts/coding-review-finding-contract.md +25 -0
  28. package/builtins/en/facets/output-contracts/coding-review.md +11 -4
  29. package/builtins/en/facets/output-contracts/cqrs-es-review-finding-contract.md +31 -0
  30. package/builtins/en/facets/output-contracts/findings-manager.md +45 -0
  31. package/builtins/en/facets/output-contracts/frontend-review-finding-contract.md +30 -0
  32. package/builtins/en/facets/output-contracts/maintenance-scope.md +5 -0
  33. package/builtins/en/facets/output-contracts/pure-review-finding-contract.md +45 -0
  34. package/builtins/en/facets/output-contracts/pure-review.md +61 -0
  35. package/builtins/en/facets/output-contracts/qa-review-finding-contract.md +35 -0
  36. package/builtins/en/facets/output-contracts/qa-review.md +15 -3
  37. package/builtins/en/facets/output-contracts/security-review-finding-contract.md +36 -0
  38. package/builtins/en/facets/output-contracts/supervisor-validation.md +35 -11
  39. package/builtins/en/facets/output-contracts/terraform-review-finding-contract.md +31 -0
  40. package/builtins/en/facets/output-contracts/testing-review-finding-contract.md +41 -0
  41. package/builtins/en/facets/output-contracts/testing-review.md +6 -1
  42. package/builtins/en/facets/personas/ai-antipattern-reviewer.md +2 -2
  43. package/builtins/en/facets/personas/architecture-reviewer.md +1 -1
  44. package/builtins/en/facets/personas/findings-manager.md +18 -0
  45. package/builtins/en/facets/personas/pr-commenter.md +2 -2
  46. package/builtins/en/facets/personas/pure-reviewer.md +22 -0
  47. package/builtins/en/facets/personas/supervisor.md +1 -1
  48. package/builtins/en/facets/personas/terraform-reviewer.md +3 -3
  49. package/builtins/en/facets/policies/ai-antipattern.md +33 -0
  50. package/builtins/en/facets/policies/coding.md +36 -0
  51. package/builtins/en/facets/policies/review.md +90 -17
  52. package/builtins/en/facets/policies/testing.md +49 -0
  53. package/builtins/en/provider-options/edit.yaml +21 -0
  54. package/builtins/en/provider-options/review-files.yaml +10 -0
  55. package/builtins/en/provider-options/review-readonly.yaml +16 -0
  56. package/builtins/en/provider-options/review-web.yaml +14 -0
  57. package/builtins/en/workflow-categories.yaml +1 -0
  58. package/builtins/en/workflows/audit-architecture-backend.yaml +8 -0
  59. package/builtins/en/workflows/audit-architecture-dual.yaml +8 -0
  60. package/builtins/en/workflows/audit-architecture-frontend.yaml +8 -0
  61. package/builtins/en/workflows/audit-architecture.yaml +8 -0
  62. package/builtins/en/workflows/audit-e2e.yaml +8 -0
  63. package/builtins/en/workflows/audit-security.yaml +8 -0
  64. package/builtins/en/workflows/audit-unit.yaml +8 -0
  65. package/builtins/en/workflows/auto-improvement-loop.yaml +6 -0
  66. package/builtins/en/workflows/backend-cqrs-mini.yaml +20 -0
  67. package/builtins/en/workflows/backend-cqrs.yaml +60 -1
  68. package/builtins/en/workflows/backend-mini.yaml +20 -0
  69. package/builtins/en/workflows/backend.yaml +60 -1
  70. package/builtins/en/workflows/compound-eye.yaml +8 -0
  71. package/builtins/en/workflows/deep-research.yaml +8 -0
  72. package/builtins/en/workflows/default-draft.yaml +6 -0
  73. package/builtins/en/workflows/default-high.yaml +7 -1
  74. package/builtins/en/workflows/default-mini.yaml +2 -0
  75. package/builtins/en/workflows/default-peer-review.yaml +41 -4
  76. package/builtins/en/workflows/default.yaml +4 -0
  77. package/builtins/en/workflows/draft.yaml +12 -32
  78. package/builtins/en/workflows/dual-cqrs-mini.yaml +20 -0
  79. package/builtins/en/workflows/dual-cqrs.yaml +56 -1
  80. package/builtins/en/workflows/dual-mini.yaml +20 -0
  81. package/builtins/en/workflows/dual.yaml +44 -6
  82. package/builtins/en/workflows/frontend-maintenance.yaml +62 -1
  83. package/builtins/en/workflows/frontend-mini.yaml +20 -0
  84. package/builtins/en/workflows/frontend.yaml +62 -1
  85. package/builtins/en/workflows/magi.yaml +6 -0
  86. package/builtins/en/workflows/peer-review-with-fc.yaml +206 -0
  87. package/builtins/en/workflows/peer-review.yaml +35 -72
  88. package/builtins/en/workflows/research.yaml +6 -0
  89. package/builtins/en/workflows/review-backend-cqrs.yaml +42 -1
  90. package/builtins/en/workflows/review-backend.yaml +40 -1
  91. package/builtins/en/workflows/review-default.yaml +27 -7
  92. package/builtins/en/workflows/review-dual-cqrs.yaml +44 -1
  93. package/builtins/en/workflows/review-dual.yaml +42 -1
  94. package/builtins/en/workflows/review-fix-backend-cqrs.yaml +46 -1
  95. package/builtins/en/workflows/review-fix-backend.yaml +44 -1
  96. package/builtins/en/workflows/review-fix-default.yaml +31 -7
  97. package/builtins/en/workflows/review-fix-dual-cqrs.yaml +48 -1
  98. package/builtins/en/workflows/review-fix-dual.yaml +46 -1
  99. package/builtins/en/workflows/review-fix-frontend.yaml +46 -1
  100. package/builtins/en/workflows/review-fix-takt-default.yaml +38 -6
  101. package/builtins/en/workflows/review-frontend.yaml +42 -1
  102. package/builtins/en/workflows/review-takt-default.yaml +29 -7
  103. package/builtins/en/workflows/takt-default-refresh-all.yaml +36 -6
  104. package/builtins/en/workflows/takt-default-refresh-fast.yaml +35 -5
  105. package/builtins/en/workflows/takt-default-with-fc.yaml +110 -0
  106. package/builtins/en/workflows/takt-default.yaml +10 -27
  107. package/builtins/en/workflows/terraform.yaml +52 -3
  108. package/builtins/ja/config.yaml +37 -12
  109. package/builtins/ja/facets/instructions/findings-manager.md +13 -0
  110. package/builtins/ja/facets/instructions/fix.md +9 -4
  111. package/builtins/ja/facets/instructions/implement-maintenance.md +5 -32
  112. package/builtins/ja/facets/instructions/implement.md +3 -2
  113. package/builtins/ja/facets/instructions/loop-monitor-reviewers-fix.md +5 -1
  114. package/builtins/ja/facets/instructions/plan-test.md +4 -3
  115. package/builtins/ja/facets/instructions/review-arch.md +1 -1
  116. package/builtins/ja/facets/instructions/review-coding.md +11 -5
  117. package/builtins/ja/facets/instructions/review-cqrs-es.md +1 -1
  118. package/builtins/ja/facets/instructions/review-pure.md +9 -0
  119. package/builtins/ja/facets/instructions/review-qa.md +2 -0
  120. package/builtins/ja/facets/instructions/review-terraform.md +1 -1
  121. package/builtins/ja/facets/instructions/review-test.md +3 -0
  122. package/builtins/ja/facets/instructions/supervise-maintenance.md +7 -77
  123. package/builtins/ja/facets/instructions/supervise.md +12 -66
  124. package/builtins/ja/facets/instructions/write-tests-first.md +1 -0
  125. package/builtins/ja/facets/instructions/write-tests-maintenance.md +1 -0
  126. package/builtins/ja/facets/knowledge/architecture.md +31 -0
  127. package/builtins/ja/facets/knowledge/backend.md +25 -1
  128. package/builtins/ja/facets/knowledge/cqrs-es.md +31 -0
  129. package/builtins/ja/facets/knowledge/e2e-testing.md +11 -1
  130. package/builtins/ja/facets/knowledge/unit-testing.md +11 -0
  131. package/builtins/ja/facets/output-contracts/ai-antipattern-review-finding-contract.md +31 -0
  132. package/builtins/ja/facets/output-contracts/architecture-review-finding-contract.md +35 -0
  133. package/builtins/ja/facets/output-contracts/coding-review-finding-contract.md +25 -0
  134. package/builtins/ja/facets/output-contracts/coding-review.md +11 -4
  135. package/builtins/ja/facets/output-contracts/cqrs-es-review-finding-contract.md +31 -0
  136. package/builtins/ja/facets/output-contracts/findings-manager.md +45 -0
  137. package/builtins/ja/facets/output-contracts/frontend-review-finding-contract.md +30 -0
  138. package/builtins/ja/facets/output-contracts/maintenance-scope.md +5 -0
  139. package/builtins/ja/facets/output-contracts/pure-review-finding-contract.md +45 -0
  140. package/builtins/ja/facets/output-contracts/pure-review.md +61 -0
  141. package/builtins/ja/facets/output-contracts/qa-review-finding-contract.md +35 -0
  142. package/builtins/ja/facets/output-contracts/qa-review.md +15 -3
  143. package/builtins/ja/facets/output-contracts/security-review-finding-contract.md +36 -0
  144. package/builtins/ja/facets/output-contracts/supervisor-validation.md +35 -11
  145. package/builtins/ja/facets/output-contracts/terraform-review-finding-contract.md +31 -0
  146. package/builtins/ja/facets/output-contracts/testing-review-finding-contract.md +41 -0
  147. package/builtins/ja/facets/output-contracts/testing-review.md +6 -1
  148. package/builtins/ja/facets/personas/ai-antipattern-reviewer.md +2 -2
  149. package/builtins/ja/facets/personas/architecture-reviewer.md +2 -2
  150. package/builtins/ja/facets/personas/findings-manager.md +18 -0
  151. package/builtins/ja/facets/personas/pr-commenter.md +3 -3
  152. package/builtins/ja/facets/personas/pure-reviewer.md +22 -0
  153. package/builtins/ja/facets/personas/supervisor.md +1 -1
  154. package/builtins/ja/facets/personas/terraform-reviewer.md +3 -3
  155. package/builtins/ja/facets/policies/ai-antipattern.md +17 -0
  156. package/builtins/ja/facets/policies/coding.md +36 -0
  157. package/builtins/ja/facets/policies/review.md +88 -17
  158. package/builtins/ja/facets/policies/testing.md +49 -0
  159. package/builtins/ja/provider-options/edit.yaml +21 -0
  160. package/builtins/ja/provider-options/review-files.yaml +10 -0
  161. package/builtins/ja/provider-options/review-readonly.yaml +16 -0
  162. package/builtins/ja/provider-options/review-web.yaml +14 -0
  163. package/builtins/ja/workflow-categories.yaml +1 -0
  164. package/builtins/ja/workflows/audit-architecture-backend.yaml +8 -0
  165. package/builtins/ja/workflows/audit-architecture-dual.yaml +8 -0
  166. package/builtins/ja/workflows/audit-architecture-frontend.yaml +8 -0
  167. package/builtins/ja/workflows/audit-architecture.yaml +8 -0
  168. package/builtins/ja/workflows/audit-e2e.yaml +8 -0
  169. package/builtins/ja/workflows/audit-security.yaml +8 -0
  170. package/builtins/ja/workflows/audit-unit.yaml +8 -0
  171. package/builtins/ja/workflows/auto-improvement-loop.yaml +6 -0
  172. package/builtins/ja/workflows/backend-cqrs-mini.yaml +20 -0
  173. package/builtins/ja/workflows/backend-cqrs.yaml +60 -1
  174. package/builtins/ja/workflows/backend-mini.yaml +20 -0
  175. package/builtins/ja/workflows/backend.yaml +60 -1
  176. package/builtins/ja/workflows/compound-eye.yaml +8 -0
  177. package/builtins/ja/workflows/deep-research.yaml +8 -0
  178. package/builtins/ja/workflows/default-draft.yaml +6 -0
  179. package/builtins/ja/workflows/default-high.yaml +7 -1
  180. package/builtins/ja/workflows/default-mini.yaml +2 -0
  181. package/builtins/ja/workflows/default-peer-review.yaml +41 -4
  182. package/builtins/ja/workflows/default.yaml +4 -0
  183. package/builtins/ja/workflows/draft.yaml +12 -32
  184. package/builtins/ja/workflows/dual-cqrs-mini.yaml +20 -0
  185. package/builtins/ja/workflows/dual-cqrs.yaml +56 -1
  186. package/builtins/ja/workflows/dual-mini.yaml +20 -0
  187. package/builtins/ja/workflows/dual.yaml +44 -6
  188. package/builtins/ja/workflows/frontend-maintenance.yaml +62 -1
  189. package/builtins/ja/workflows/frontend-mini.yaml +20 -0
  190. package/builtins/ja/workflows/frontend.yaml +62 -1
  191. package/builtins/ja/workflows/magi.yaml +6 -0
  192. package/builtins/ja/workflows/peer-review-with-fc.yaml +206 -0
  193. package/builtins/ja/workflows/peer-review.yaml +35 -72
  194. package/builtins/ja/workflows/research.yaml +6 -0
  195. package/builtins/ja/workflows/review-backend-cqrs.yaml +42 -1
  196. package/builtins/ja/workflows/review-backend.yaml +40 -1
  197. package/builtins/ja/workflows/review-default.yaml +28 -8
  198. package/builtins/ja/workflows/review-dual-cqrs.yaml +44 -1
  199. package/builtins/ja/workflows/review-dual.yaml +42 -1
  200. package/builtins/ja/workflows/review-fix-backend-cqrs.yaml +46 -1
  201. package/builtins/ja/workflows/review-fix-backend.yaml +44 -1
  202. package/builtins/ja/workflows/review-fix-default.yaml +31 -7
  203. package/builtins/ja/workflows/review-fix-dual-cqrs.yaml +48 -1
  204. package/builtins/ja/workflows/review-fix-dual.yaml +46 -1
  205. package/builtins/ja/workflows/review-fix-frontend.yaml +46 -1
  206. package/builtins/ja/workflows/review-fix-takt-default.yaml +39 -7
  207. package/builtins/ja/workflows/review-frontend.yaml +42 -1
  208. package/builtins/ja/workflows/review-takt-default.yaml +30 -8
  209. package/builtins/ja/workflows/takt-default-refresh-all.yaml +36 -6
  210. package/builtins/ja/workflows/takt-default-refresh-fast.yaml +35 -5
  211. package/builtins/ja/workflows/takt-default-with-fc.yaml +110 -0
  212. package/builtins/ja/workflows/takt-default.yaml +10 -27
  213. package/builtins/ja/workflows/terraform.yaml +51 -2
  214. package/builtins/skill/references/yaml-schema.md +4 -0
  215. package/builtins/skill-codex/references/yaml-schema.md +4 -0
  216. package/dist/agents/decompose-task-usecase.d.ts +2 -1
  217. package/dist/agents/decompose-task-usecase.d.ts.map +1 -1
  218. package/dist/agents/decompose-task-usecase.js +7 -5
  219. package/dist/agents/decompose-task-usecase.js.map +1 -1
  220. package/dist/agents/judge-status-usecase.d.ts +4 -1
  221. package/dist/agents/judge-status-usecase.d.ts.map +1 -1
  222. package/dist/agents/judge-status-usecase.js +5 -0
  223. package/dist/agents/judge-status-usecase.js.map +1 -1
  224. package/dist/agents/runner-prompt.d.ts +3 -1
  225. package/dist/agents/runner-prompt.d.ts.map +1 -1
  226. package/dist/agents/runner-prompt.js +11 -4
  227. package/dist/agents/runner-prompt.js.map +1 -1
  228. package/dist/agents/runner.d.ts.map +1 -1
  229. package/dist/agents/runner.js +23 -5
  230. package/dist/agents/runner.js.map +1 -1
  231. package/dist/agents/structured-caller/capability-aware-structured-caller.d.ts +1 -1
  232. package/dist/agents/structured-caller/capability-aware-structured-caller.d.ts.map +1 -1
  233. package/dist/agents/structured-caller/capability-aware-structured-caller.js +3 -3
  234. package/dist/agents/structured-caller/capability-aware-structured-caller.js.map +1 -1
  235. package/dist/agents/structured-caller/contracts.d.ts +1 -1
  236. package/dist/agents/structured-caller/contracts.d.ts.map +1 -1
  237. package/dist/agents/structured-caller/default-structured-caller.d.ts +1 -1
  238. package/dist/agents/structured-caller/default-structured-caller.d.ts.map +1 -1
  239. package/dist/agents/structured-caller/default-structured-caller.js +2 -2
  240. package/dist/agents/structured-caller/default-structured-caller.js.map +1 -1
  241. package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts +1 -1
  242. package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts.map +1 -1
  243. package/dist/agents/structured-caller/prompt-based-structured-caller.js +9 -3
  244. package/dist/agents/structured-caller/prompt-based-structured-caller.js.map +1 -1
  245. package/dist/agents/team-leader-structured-output.d.ts +3 -3
  246. package/dist/agents/team-leader-structured-output.d.ts.map +1 -1
  247. package/dist/agents/team-leader-structured-output.js +14 -10
  248. package/dist/agents/team-leader-structured-output.js.map +1 -1
  249. package/dist/agents/types.d.ts +1 -0
  250. package/dist/agents/types.d.ts.map +1 -1
  251. package/dist/app/cli/routing-inputs.d.ts +1 -0
  252. package/dist/app/cli/routing-inputs.d.ts.map +1 -1
  253. package/dist/app/cli/routing-inputs.js +5 -2
  254. package/dist/app/cli/routing-inputs.js.map +1 -1
  255. package/dist/app/cli/routing.d.ts.map +1 -1
  256. package/dist/app/cli/routing.js +14 -0
  257. package/dist/app/cli/routing.js.map +1 -1
  258. package/dist/commands/repertoire/add.d.ts.map +1 -1
  259. package/dist/commands/repertoire/add.js +45 -4
  260. package/dist/commands/repertoire/add.js.map +1 -1
  261. package/dist/commands/repertoire/remove.d.ts.map +1 -1
  262. package/dist/commands/repertoire/remove.js +19 -3
  263. package/dist/commands/repertoire/remove.js.map +1 -1
  264. package/dist/core/models/config-schemas.d.ts +787 -0
  265. package/dist/core/models/config-schemas.d.ts.map +1 -1
  266. package/dist/core/models/config-schemas.js +6 -0
  267. package/dist/core/models/config-schemas.js.map +1 -1
  268. package/dist/core/models/config-types.d.ts +8 -0
  269. package/dist/core/models/config-types.d.ts.map +1 -1
  270. package/dist/core/models/finding-schemas.d.ts +447 -0
  271. package/dist/core/models/finding-schemas.d.ts.map +1 -0
  272. package/dist/core/models/finding-schemas.js +234 -0
  273. package/dist/core/models/finding-schemas.js.map +1 -0
  274. package/dist/core/models/finding-types.d.ts +146 -0
  275. package/dist/core/models/finding-types.d.ts.map +1 -0
  276. package/dist/core/models/finding-types.js +5 -0
  277. package/dist/core/models/finding-types.js.map +1 -0
  278. package/dist/core/models/index.d.ts +1 -1
  279. package/dist/core/models/index.d.ts.map +1 -1
  280. package/dist/core/models/index.js.map +1 -1
  281. package/dist/core/models/part.d.ts +2 -1
  282. package/dist/core/models/part.d.ts.map +1 -1
  283. package/dist/core/models/schema-base.d.ts +66 -0
  284. package/dist/core/models/schema-base.d.ts.map +1 -1
  285. package/dist/core/models/schema-base.js +7 -2
  286. package/dist/core/models/schema-base.js.map +1 -1
  287. package/dist/core/models/types.d.ts +2 -2
  288. package/dist/core/models/types.d.ts.map +1 -1
  289. package/dist/core/models/workflow-condition-expression.d.ts +3 -0
  290. package/dist/core/models/workflow-condition-expression.d.ts.map +1 -1
  291. package/dist/core/models/workflow-condition-expression.js +223 -4
  292. package/dist/core/models/workflow-condition-expression.js.map +1 -1
  293. package/dist/core/models/workflow-provider-options.d.ts +5 -0
  294. package/dist/core/models/workflow-provider-options.d.ts.map +1 -1
  295. package/dist/core/models/workflow-provider-options.js.map +1 -1
  296. package/dist/core/models/workflow-schemas.d.ts +197 -31
  297. package/dist/core/models/workflow-schemas.d.ts.map +1 -1
  298. package/dist/core/models/workflow-schemas.js +67 -18
  299. package/dist/core/models/workflow-schemas.js.map +1 -1
  300. package/dist/core/models/workflow-system-schemas.d.ts.map +1 -1
  301. package/dist/core/models/workflow-system-schemas.js +1 -0
  302. package/dist/core/models/workflow-system-schemas.js.map +1 -1
  303. package/dist/core/models/workflow-types.d.ts +14 -1
  304. package/dist/core/models/workflow-types.d.ts.map +1 -1
  305. package/dist/core/models/workflow-types.js.map +1 -1
  306. package/dist/core/workflow/engine/ArpeggioRunner.d.ts +2 -0
  307. package/dist/core/workflow/engine/ArpeggioRunner.d.ts.map +1 -1
  308. package/dist/core/workflow/engine/ArpeggioRunner.js +1 -0
  309. package/dist/core/workflow/engine/ArpeggioRunner.js.map +1 -1
  310. package/dist/core/workflow/engine/OptionsBuilder.d.ts +4 -1
  311. package/dist/core/workflow/engine/OptionsBuilder.d.ts.map +1 -1
  312. package/dist/core/workflow/engine/OptionsBuilder.js +23 -8
  313. package/dist/core/workflow/engine/OptionsBuilder.js.map +1 -1
  314. package/dist/core/workflow/engine/ParallelRunner.d.ts +15 -0
  315. package/dist/core/workflow/engine/ParallelRunner.d.ts.map +1 -1
  316. package/dist/core/workflow/engine/ParallelRunner.js +155 -18
  317. package/dist/core/workflow/engine/ParallelRunner.js.map +1 -1
  318. package/dist/core/workflow/engine/StepExecutor.d.ts +4 -2
  319. package/dist/core/workflow/engine/StepExecutor.d.ts.map +1 -1
  320. package/dist/core/workflow/engine/StepExecutor.js +11 -3
  321. package/dist/core/workflow/engine/StepExecutor.js.map +1 -1
  322. package/dist/core/workflow/engine/TeamLeaderRunner.d.ts.map +1 -1
  323. package/dist/core/workflow/engine/TeamLeaderRunner.js +9 -4
  324. package/dist/core/workflow/engine/TeamLeaderRunner.js.map +1 -1
  325. package/dist/core/workflow/engine/WorkflowCallExecutor.d.ts +3 -1
  326. package/dist/core/workflow/engine/WorkflowCallExecutor.d.ts.map +1 -1
  327. package/dist/core/workflow/engine/WorkflowCallExecutor.js +23 -5
  328. package/dist/core/workflow/engine/WorkflowCallExecutor.js.map +1 -1
  329. package/dist/core/workflow/engine/WorkflowCallRunner.d.ts +1 -0
  330. package/dist/core/workflow/engine/WorkflowCallRunner.d.ts.map +1 -1
  331. package/dist/core/workflow/engine/WorkflowCallRunner.js +5 -1
  332. package/dist/core/workflow/engine/WorkflowCallRunner.js.map +1 -1
  333. package/dist/core/workflow/engine/WorkflowEngine.d.ts +7 -1
  334. package/dist/core/workflow/engine/WorkflowEngine.d.ts.map +1 -1
  335. package/dist/core/workflow/engine/WorkflowEngine.js +63 -9
  336. package/dist/core/workflow/engine/WorkflowEngine.js.map +1 -1
  337. package/dist/core/workflow/engine/WorkflowEngineSetup.d.ts +3 -0
  338. package/dist/core/workflow/engine/WorkflowEngineSetup.d.ts.map +1 -1
  339. package/dist/core/workflow/engine/WorkflowEngineSetup.js +29 -1
  340. package/dist/core/workflow/engine/WorkflowEngineSetup.js.map +1 -1
  341. package/dist/core/workflow/engine/WorkflowRunLoop.d.ts +11 -7
  342. package/dist/core/workflow/engine/WorkflowRunLoop.d.ts.map +1 -1
  343. package/dist/core/workflow/engine/WorkflowRunLoop.js +66 -33
  344. package/dist/core/workflow/engine/WorkflowRunLoop.js.map +1 -1
  345. package/dist/core/workflow/engine/WorkflowValidator.d.ts.map +1 -1
  346. package/dist/core/workflow/engine/WorkflowValidator.js +78 -1
  347. package/dist/core/workflow/engine/WorkflowValidator.js.map +1 -1
  348. package/dist/core/workflow/engine/engine-provider-options.d.ts.map +1 -1
  349. package/dist/core/workflow/engine/engine-provider-options.js +3 -3
  350. package/dist/core/workflow/engine/engine-provider-options.js.map +1 -1
  351. package/dist/core/workflow/engine/parallel-logger.d.ts +1 -1
  352. package/dist/core/workflow/engine/parallel-logger.d.ts.map +1 -1
  353. package/dist/core/workflow/engine/parallel-logger.js +3 -1
  354. package/dist/core/workflow/engine/parallel-logger.js.map +1 -1
  355. package/dist/core/workflow/engine/task-decomposer.d.ts +1 -1
  356. package/dist/core/workflow/engine/task-decomposer.d.ts.map +1 -1
  357. package/dist/core/workflow/engine/task-decomposer.js +3 -3
  358. package/dist/core/workflow/engine/task-decomposer.js.map +1 -1
  359. package/dist/core/workflow/engine/team-leader-budget-errors.d.ts +2 -0
  360. package/dist/core/workflow/engine/team-leader-budget-errors.d.ts.map +1 -0
  361. package/dist/core/workflow/engine/team-leader-budget-errors.js +12 -0
  362. package/dist/core/workflow/engine/team-leader-budget-errors.js.map +1 -0
  363. package/dist/core/workflow/engine/team-leader-common.d.ts.map +1 -1
  364. package/dist/core/workflow/engine/team-leader-common.js +11 -0
  365. package/dist/core/workflow/engine/team-leader-common.js.map +1 -1
  366. package/dist/core/workflow/engine/team-leader-execution.d.ts.map +1 -1
  367. package/dist/core/workflow/engine/team-leader-execution.js +16 -2
  368. package/dist/core/workflow/engine/team-leader-execution.js.map +1 -1
  369. package/dist/core/workflow/engine/team-leader-part-runner.d.ts.map +1 -1
  370. package/dist/core/workflow/engine/team-leader-part-runner.js +22 -1
  371. package/dist/core/workflow/engine/team-leader-part-runner.js.map +1 -1
  372. package/dist/core/workflow/evaluation/AggregateEvaluator.d.ts.map +1 -1
  373. package/dist/core/workflow/evaluation/AggregateEvaluator.js +7 -4
  374. package/dist/core/workflow/evaluation/AggregateEvaluator.js.map +1 -1
  375. package/dist/core/workflow/evaluation/RuleEvaluator.d.ts +3 -0
  376. package/dist/core/workflow/evaluation/RuleEvaluator.d.ts.map +1 -1
  377. package/dist/core/workflow/evaluation/RuleEvaluator.js +16 -1
  378. package/dist/core/workflow/evaluation/RuleEvaluator.js.map +1 -1
  379. package/dist/core/workflow/evaluation/rule-utils.d.ts +5 -1
  380. package/dist/core/workflow/evaluation/rule-utils.d.ts.map +1 -1
  381. package/dist/core/workflow/evaluation/rule-utils.js +34 -1
  382. package/dist/core/workflow/evaluation/rule-utils.js.map +1 -1
  383. package/dist/core/workflow/evaluation/when-evaluator.d.ts.map +1 -1
  384. package/dist/core/workflow/evaluation/when-evaluator.js +4 -1
  385. package/dist/core/workflow/evaluation/when-evaluator.js.map +1 -1
  386. package/dist/core/workflow/findings/context.d.ts +5 -0
  387. package/dist/core/workflow/findings/context.d.ts.map +1 -0
  388. package/dist/core/workflow/findings/context.js +82 -0
  389. package/dist/core/workflow/findings/context.js.map +1 -0
  390. package/dist/core/workflow/findings/ledger-validation.d.ts +3 -0
  391. package/dist/core/workflow/findings/ledger-validation.d.ts.map +1 -0
  392. package/dist/core/workflow/findings/ledger-validation.js +26 -0
  393. package/dist/core/workflow/findings/ledger-validation.js.map +1 -0
  394. package/dist/core/workflow/findings/manager-output-validation.d.ts +15 -0
  395. package/dist/core/workflow/findings/manager-output-validation.d.ts.map +1 -0
  396. package/dist/core/workflow/findings/manager-output-validation.js +221 -0
  397. package/dist/core/workflow/findings/manager-output-validation.js.map +1 -0
  398. package/dist/core/workflow/findings/manager-runner.d.ts +89 -0
  399. package/dist/core/workflow/findings/manager-runner.d.ts.map +1 -0
  400. package/dist/core/workflow/findings/manager-runner.js +291 -0
  401. package/dist/core/workflow/findings/manager-runner.js.map +1 -0
  402. package/dist/core/workflow/findings/reconciler.d.ts +10 -0
  403. package/dist/core/workflow/findings/reconciler.d.ts.map +1 -0
  404. package/dist/core/workflow/findings/reconciler.js +413 -0
  405. package/dist/core/workflow/findings/reconciler.js.map +1 -0
  406. package/dist/core/workflow/findings/schemas.d.ts +2 -0
  407. package/dist/core/workflow/findings/schemas.d.ts.map +1 -0
  408. package/dist/core/workflow/findings/schemas.js +2 -0
  409. package/dist/core/workflow/findings/schemas.js.map +1 -0
  410. package/dist/core/workflow/findings/store.d.ts +33 -0
  411. package/dist/core/workflow/findings/store.d.ts.map +1 -0
  412. package/dist/core/workflow/findings/store.js +169 -0
  413. package/dist/core/workflow/findings/store.js.map +1 -0
  414. package/dist/core/workflow/findings/types.d.ts +3 -0
  415. package/dist/core/workflow/findings/types.d.ts.map +1 -0
  416. package/dist/core/workflow/findings/types.js +2 -0
  417. package/dist/core/workflow/findings/types.js.map +1 -0
  418. package/dist/core/workflow/instruction/InstructionBuilder.d.ts +1 -0
  419. package/dist/core/workflow/instruction/InstructionBuilder.d.ts.map +1 -1
  420. package/dist/core/workflow/instruction/InstructionBuilder.js +35 -11
  421. package/dist/core/workflow/instruction/InstructionBuilder.js.map +1 -1
  422. package/dist/core/workflow/instruction/ReportInstructionBuilder.d.ts +4 -0
  423. package/dist/core/workflow/instruction/ReportInstructionBuilder.d.ts.map +1 -1
  424. package/dist/core/workflow/instruction/ReportInstructionBuilder.js +22 -1
  425. package/dist/core/workflow/instruction/ReportInstructionBuilder.js.map +1 -1
  426. package/dist/core/workflow/instruction/fenced-json.d.ts +2 -0
  427. package/dist/core/workflow/instruction/fenced-json.d.ts.map +1 -0
  428. package/dist/core/workflow/instruction/fenced-json.js +11 -0
  429. package/dist/core/workflow/instruction/fenced-json.js.map +1 -0
  430. package/dist/core/workflow/instruction/instruction-context.d.ts +8 -0
  431. package/dist/core/workflow/instruction/instruction-context.d.ts.map +1 -1
  432. package/dist/core/workflow/instruction/instruction-context.js.map +1 -1
  433. package/dist/core/workflow/observability/traceDiscovery.d.ts +33 -0
  434. package/dist/core/workflow/observability/traceDiscovery.d.ts.map +1 -0
  435. package/dist/core/workflow/observability/traceDiscovery.js +104 -0
  436. package/dist/core/workflow/observability/traceDiscovery.js.map +1 -0
  437. package/dist/core/workflow/observability/workflowSpans.d.ts +5 -2
  438. package/dist/core/workflow/observability/workflowSpans.d.ts.map +1 -1
  439. package/dist/core/workflow/observability/workflowSpans.js +60 -13
  440. package/dist/core/workflow/observability/workflowSpans.js.map +1 -1
  441. package/dist/core/workflow/phase-runner.d.ts +4 -0
  442. package/dist/core/workflow/phase-runner.d.ts.map +1 -1
  443. package/dist/core/workflow/phase-runner.js.map +1 -1
  444. package/dist/core/workflow/promotion/PromotionEvaluator.d.ts +2 -0
  445. package/dist/core/workflow/promotion/PromotionEvaluator.d.ts.map +1 -1
  446. package/dist/core/workflow/promotion/PromotionEvaluator.js +1 -0
  447. package/dist/core/workflow/promotion/PromotionEvaluator.js.map +1 -1
  448. package/dist/core/workflow/promotion/promotion-runtime.d.ts +2 -0
  449. package/dist/core/workflow/promotion/promotion-runtime.d.ts.map +1 -1
  450. package/dist/core/workflow/promotion/promotion-runtime.js +1 -0
  451. package/dist/core/workflow/promotion/promotion-runtime.js.map +1 -1
  452. package/dist/core/workflow/provider-options-trace.d.ts +3 -2
  453. package/dist/core/workflow/provider-options-trace.d.ts.map +1 -1
  454. package/dist/core/workflow/provider-resolution.d.ts +11 -3
  455. package/dist/core/workflow/provider-resolution.d.ts.map +1 -1
  456. package/dist/core/workflow/provider-resolution.js +68 -2
  457. package/dist/core/workflow/provider-resolution.js.map +1 -1
  458. package/dist/core/workflow/quality-gates/commandGateRunner.d.ts +1 -1
  459. package/dist/core/workflow/quality-gates/commandGateRunner.d.ts.map +1 -1
  460. package/dist/core/workflow/quality-gates/commandGateRunner.js +11 -6
  461. package/dist/core/workflow/quality-gates/commandGateRunner.js.map +1 -1
  462. package/dist/core/workflow/quality-gates/qualityGateRunner.d.ts +1 -1
  463. package/dist/core/workflow/quality-gates/qualityGateRunner.d.ts.map +1 -1
  464. package/dist/core/workflow/quality-gates/qualityGateRunner.js +2 -2
  465. package/dist/core/workflow/quality-gates/qualityGateRunner.js.map +1 -1
  466. package/dist/core/workflow/quality-gates/types.d.ts +2 -0
  467. package/dist/core/workflow/quality-gates/types.d.ts.map +1 -1
  468. package/dist/core/workflow/report-phase-runner.d.ts.map +1 -1
  469. package/dist/core/workflow/report-phase-runner.js +59 -44
  470. package/dist/core/workflow/report-phase-runner.js.map +1 -1
  471. package/dist/core/workflow/report-writer.d.ts +2 -0
  472. package/dist/core/workflow/report-writer.d.ts.map +1 -0
  473. package/dist/core/workflow/report-writer.js +42 -0
  474. package/dist/core/workflow/report-writer.js.map +1 -0
  475. package/dist/core/workflow/run/run-meta.d.ts +5 -0
  476. package/dist/core/workflow/run/run-meta.d.ts.map +1 -1
  477. package/dist/core/workflow/run/run-meta.js.map +1 -1
  478. package/dist/core/workflow/state/workflow-state-access.d.ts +2 -2
  479. package/dist/core/workflow/state/workflow-state-access.d.ts.map +1 -1
  480. package/dist/core/workflow/state/workflow-state-access.js +17 -2
  481. package/dist/core/workflow/state/workflow-state-access.js.map +1 -1
  482. package/dist/core/workflow/status-judgment-phase.d.ts.map +1 -1
  483. package/dist/core/workflow/status-judgment-phase.js +1 -0
  484. package/dist/core/workflow/status-judgment-phase.js.map +1 -1
  485. package/dist/core/workflow/types.d.ts +27 -1
  486. package/dist/core/workflow/types.d.ts.map +1 -1
  487. package/dist/features/analytics/events.d.ts +1 -1
  488. package/dist/features/analytics/events.d.ts.map +1 -1
  489. package/dist/features/analytics/index.d.ts +1 -1
  490. package/dist/features/analytics/index.d.ts.map +1 -1
  491. package/dist/features/analytics/index.js +1 -1
  492. package/dist/features/analytics/index.js.map +1 -1
  493. package/dist/features/analytics/report-parser.d.ts +5 -3
  494. package/dist/features/analytics/report-parser.d.ts.map +1 -1
  495. package/dist/features/analytics/report-parser.js +42 -7
  496. package/dist/features/analytics/report-parser.js.map +1 -1
  497. package/dist/features/interactive/aiCaller.d.ts.map +1 -1
  498. package/dist/features/interactive/aiCaller.js +4 -2
  499. package/dist/features/interactive/aiCaller.js.map +1 -1
  500. package/dist/features/pipeline/execute.d.ts.map +1 -1
  501. package/dist/features/pipeline/execute.js +2 -3
  502. package/dist/features/pipeline/execute.js.map +1 -1
  503. package/dist/features/pipeline/steps.d.ts +4 -3
  504. package/dist/features/pipeline/steps.d.ts.map +1 -1
  505. package/dist/features/pipeline/steps.js +46 -8
  506. package/dist/features/pipeline/steps.js.map +1 -1
  507. package/dist/features/repertoire/file-filter.d.ts +3 -3
  508. package/dist/features/repertoire/file-filter.d.ts.map +1 -1
  509. package/dist/features/repertoire/file-filter.js +3 -3
  510. package/dist/features/repertoire/file-filter.js.map +1 -1
  511. package/dist/features/repertoire/pack-summary.d.ts +21 -7
  512. package/dist/features/repertoire/pack-summary.d.ts.map +1 -1
  513. package/dist/features/repertoire/pack-summary.js +156 -24
  514. package/dist/features/repertoire/pack-summary.js.map +1 -1
  515. package/dist/features/repertoire/remove.d.ts +5 -2
  516. package/dist/features/repertoire/remove.d.ts.map +1 -1
  517. package/dist/features/repertoire/remove.js +9 -2
  518. package/dist/features/repertoire/remove.js.map +1 -1
  519. package/dist/features/repertoire/takt-repertoire-config.d.ts +3 -3
  520. package/dist/features/repertoire/takt-repertoire-config.d.ts.map +1 -1
  521. package/dist/features/repertoire/takt-repertoire-config.js +31 -16
  522. package/dist/features/repertoire/takt-repertoire-config.js.map +1 -1
  523. package/dist/features/tasks/add/index.d.ts +1 -0
  524. package/dist/features/tasks/add/index.d.ts.map +1 -1
  525. package/dist/features/tasks/add/index.js +1 -0
  526. package/dist/features/tasks/add/index.js.map +1 -1
  527. package/dist/features/tasks/execute/analyticsEmitter.d.ts +4 -1
  528. package/dist/features/tasks/execute/analyticsEmitter.d.ts.map +1 -1
  529. package/dist/features/tasks/execute/analyticsEmitter.js +30 -3
  530. package/dist/features/tasks/execute/analyticsEmitter.js.map +1 -1
  531. package/dist/features/tasks/execute/runAllTasks.d.ts.map +1 -1
  532. package/dist/features/tasks/execute/runAllTasks.js +2 -2
  533. package/dist/features/tasks/execute/runAllTasks.js.map +1 -1
  534. package/dist/features/tasks/execute/runMeta.d.ts +5 -1
  535. package/dist/features/tasks/execute/runMeta.d.ts.map +1 -1
  536. package/dist/features/tasks/execute/runMeta.js +6 -1
  537. package/dist/features/tasks/execute/runMeta.js.map +1 -1
  538. package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
  539. package/dist/features/tasks/execute/selectAndExecute.js +12 -0
  540. package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
  541. package/dist/features/tasks/execute/slackSummaryAdapter.d.ts +0 -1
  542. package/dist/features/tasks/execute/slackSummaryAdapter.d.ts.map +1 -1
  543. package/dist/features/tasks/execute/slackSummaryAdapter.js +0 -5
  544. package/dist/features/tasks/execute/slackSummaryAdapter.js.map +1 -1
  545. package/dist/features/tasks/execute/taskExecution.d.ts.map +1 -1
  546. package/dist/features/tasks/execute/taskExecution.js +9 -0
  547. package/dist/features/tasks/execute/taskExecution.js.map +1 -1
  548. package/dist/features/tasks/execute/taskWorkflowExecution.d.ts.map +1 -1
  549. package/dist/features/tasks/execute/taskWorkflowExecution.js +20 -1
  550. package/dist/features/tasks/execute/taskWorkflowExecution.js.map +1 -1
  551. package/dist/features/tasks/execute/traceTaskMetadata.d.ts +20 -0
  552. package/dist/features/tasks/execute/traceTaskMetadata.d.ts.map +1 -0
  553. package/dist/features/tasks/execute/traceTaskMetadata.js +54 -0
  554. package/dist/features/tasks/execute/traceTaskMetadata.js.map +1 -0
  555. package/dist/features/tasks/execute/types.d.ts +13 -1
  556. package/dist/features/tasks/execute/types.d.ts.map +1 -1
  557. package/dist/features/tasks/execute/workflowExecution.d.ts.map +1 -1
  558. package/dist/features/tasks/execute/workflowExecution.js +44 -1
  559. package/dist/features/tasks/execute/workflowExecution.js.map +1 -1
  560. package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts +2 -0
  561. package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts.map +1 -1
  562. package/dist/features/tasks/execute/workflowExecutionBootstrap.js +16 -2
  563. package/dist/features/tasks/execute/workflowExecutionBootstrap.js.map +1 -1
  564. package/dist/features/tasks/execute/workflowExecutionEvents.d.ts +2 -0
  565. package/dist/features/tasks/execute/workflowExecutionEvents.d.ts.map +1 -1
  566. package/dist/features/tasks/execute/workflowExecutionEvents.js +16 -2
  567. package/dist/features/tasks/execute/workflowExecutionEvents.js.map +1 -1
  568. package/dist/features/tasks/execute/workflowExecutionReporting.d.ts +3 -2
  569. package/dist/features/tasks/execute/workflowExecutionReporting.d.ts.map +1 -1
  570. package/dist/features/tasks/execute/workflowExecutionReporting.js +14 -2
  571. package/dist/features/tasks/execute/workflowExecutionReporting.js.map +1 -1
  572. package/dist/features/tasks/index.d.ts +1 -1
  573. package/dist/features/tasks/index.d.ts.map +1 -1
  574. package/dist/features/tasks/index.js.map +1 -1
  575. package/dist/features/tasks/resume/index.d.ts.map +1 -1
  576. package/dist/features/tasks/resume/index.js +5 -0
  577. package/dist/features/tasks/resume/index.js.map +1 -1
  578. package/dist/infra/claude/client.d.ts.map +1 -1
  579. package/dist/infra/claude/client.js +1 -0
  580. package/dist/infra/claude/client.js.map +1 -1
  581. package/dist/infra/claude/options-builder.d.ts.map +1 -1
  582. package/dist/infra/claude/options-builder.js +2 -3
  583. package/dist/infra/claude/options-builder.js.map +1 -1
  584. package/dist/infra/claude/types.d.ts +2 -0
  585. package/dist/infra/claude/types.d.ts.map +1 -1
  586. package/dist/infra/claude-headless/headless-spawn.d.ts.map +1 -1
  587. package/dist/infra/claude-headless/headless-spawn.js +2 -1
  588. package/dist/infra/claude-headless/headless-spawn.js.map +1 -1
  589. package/dist/infra/claude-headless/types.d.ts +1 -0
  590. package/dist/infra/claude-headless/types.d.ts.map +1 -1
  591. package/dist/infra/claude-terminal/client.d.ts.map +1 -1
  592. package/dist/infra/claude-terminal/client.js +1 -0
  593. package/dist/infra/claude-terminal/client.js.map +1 -1
  594. package/dist/infra/claude-terminal/response-normalizer.js.map +1 -1
  595. package/dist/infra/claude-terminal/tmux-backend.d.ts.map +1 -1
  596. package/dist/infra/claude-terminal/tmux-backend.js +15 -1
  597. package/dist/infra/claude-terminal/tmux-backend.js.map +1 -1
  598. package/dist/infra/claude-terminal/types.d.ts +2 -0
  599. package/dist/infra/claude-terminal/types.d.ts.map +1 -1
  600. package/dist/infra/codex/client.d.ts.map +1 -1
  601. package/dist/infra/codex/client.js +3 -1
  602. package/dist/infra/codex/client.js.map +1 -1
  603. package/dist/infra/codex/types.d.ts +1 -0
  604. package/dist/infra/codex/types.d.ts.map +1 -1
  605. package/dist/infra/config/configNormalizers.d.ts +18 -7
  606. package/dist/infra/config/configNormalizers.d.ts.map +1 -1
  607. package/dist/infra/config/configNormalizers.js +55 -14
  608. package/dist/infra/config/configNormalizers.js.map +1 -1
  609. package/dist/infra/config/env/global-current-env-specs.d.ts.map +1 -1
  610. package/dist/infra/config/env/global-current-env-specs.js +1 -0
  611. package/dist/infra/config/env/global-current-env-specs.js.map +1 -1
  612. package/dist/infra/config/env/project-current-env-specs.d.ts.map +1 -1
  613. package/dist/infra/config/env/project-current-env-specs.js +1 -0
  614. package/dist/infra/config/env/project-current-env-specs.js.map +1 -1
  615. package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
  616. package/dist/infra/config/global/globalConfigCore.js +2 -1
  617. package/dist/infra/config/global/globalConfigCore.js.map +1 -1
  618. package/dist/infra/config/global/globalConfigSerializer.d.ts.map +1 -1
  619. package/dist/infra/config/global/globalConfigSerializer.js +5 -1
  620. package/dist/infra/config/global/globalConfigSerializer.js.map +1 -1
  621. package/dist/infra/config/loaders/namedResourceResolver.d.ts +18 -0
  622. package/dist/infra/config/loaders/namedResourceResolver.d.ts.map +1 -0
  623. package/dist/infra/config/loaders/namedResourceResolver.js +49 -0
  624. package/dist/infra/config/loaders/namedResourceResolver.js.map +1 -0
  625. package/dist/infra/config/loaders/providerOptionsLookupDirectories.d.ts +13 -0
  626. package/dist/infra/config/loaders/providerOptionsLookupDirectories.d.ts.map +1 -0
  627. package/dist/infra/config/loaders/providerOptionsLookupDirectories.js +61 -0
  628. package/dist/infra/config/loaders/providerOptionsLookupDirectories.js.map +1 -0
  629. package/dist/infra/config/loaders/workflowDiscovery.js +1 -1
  630. package/dist/infra/config/loaders/workflowDiscovery.js.map +1 -1
  631. package/dist/infra/config/loaders/workflowLoopMonitorNormalizer.d.ts.map +1 -1
  632. package/dist/infra/config/loaders/workflowLoopMonitorNormalizer.js +1 -1
  633. package/dist/infra/config/loaders/workflowLoopMonitorNormalizer.js.map +1 -1
  634. package/dist/infra/config/loaders/workflowParser.d.ts.map +1 -1
  635. package/dist/infra/config/loaders/workflowParser.js +64 -3
  636. package/dist/infra/config/loaders/workflowParser.js.map +1 -1
  637. package/dist/infra/config/loaders/workflowPreview.d.ts.map +1 -1
  638. package/dist/infra/config/loaders/workflowPreview.js +8 -3
  639. package/dist/infra/config/loaders/workflowPreview.js.map +1 -1
  640. package/dist/infra/config/loaders/workflowProviderOptionsResolver.d.ts +25 -0
  641. package/dist/infra/config/loaders/workflowProviderOptionsResolver.d.ts.map +1 -0
  642. package/dist/infra/config/loaders/workflowProviderOptionsResolver.js +150 -0
  643. package/dist/infra/config/loaders/workflowProviderOptionsResolver.js.map +1 -0
  644. package/dist/infra/config/loaders/workflowRuleNormalizer.d.ts.map +1 -1
  645. package/dist/infra/config/loaders/workflowRuleNormalizer.js +5 -16
  646. package/dist/infra/config/loaders/workflowRuleNormalizer.js.map +1 -1
  647. package/dist/infra/config/loaders/workflowStepFeaturesNormalizer.d.ts.map +1 -1
  648. package/dist/infra/config/loaders/workflowStepFeaturesNormalizer.js +5 -3
  649. package/dist/infra/config/loaders/workflowStepFeaturesNormalizer.js.map +1 -1
  650. package/dist/infra/config/loaders/workflowStepNormalizer.d.ts +3 -2
  651. package/dist/infra/config/loaders/workflowStepNormalizer.d.ts.map +1 -1
  652. package/dist/infra/config/loaders/workflowStepNormalizer.js +65 -13
  653. package/dist/infra/config/loaders/workflowStepNormalizer.js.map +1 -1
  654. package/dist/infra/config/paths.d.ts +4 -0
  655. package/dist/infra/config/paths.d.ts.map +1 -1
  656. package/dist/infra/config/paths.js +13 -0
  657. package/dist/infra/config/paths.js.map +1 -1
  658. package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
  659. package/dist/infra/config/project/projectConfig.js +12 -3
  660. package/dist/infra/config/project/projectConfig.js.map +1 -1
  661. package/dist/infra/config/providerOptions.d.ts +24 -7
  662. package/dist/infra/config/providerOptions.d.ts.map +1 -1
  663. package/dist/infra/config/providerOptions.js +85 -11
  664. package/dist/infra/config/providerOptions.js.map +1 -1
  665. package/dist/infra/config/providerOptionsContract.d.ts +3 -3
  666. package/dist/infra/config/providerOptionsContract.d.ts.map +1 -1
  667. package/dist/infra/config/providerOptionsContract.js +8 -0
  668. package/dist/infra/config/providerOptionsContract.js.map +1 -1
  669. package/dist/infra/config/traced/tracedConfigSchema.d.ts.map +1 -1
  670. package/dist/infra/config/traced/tracedConfigSchema.js +8 -0
  671. package/dist/infra/config/traced/tracedConfigSchema.js.map +1 -1
  672. package/dist/infra/copilot/client.d.ts.map +1 -1
  673. package/dist/infra/copilot/client.js +7 -8
  674. package/dist/infra/copilot/client.js.map +1 -1
  675. package/dist/infra/copilot/types.d.ts +1 -0
  676. package/dist/infra/copilot/types.d.ts.map +1 -1
  677. package/dist/infra/cursor/client.d.ts.map +1 -1
  678. package/dist/infra/cursor/client.js +120 -55
  679. package/dist/infra/cursor/client.js.map +1 -1
  680. package/dist/infra/cursor/types.d.ts +1 -0
  681. package/dist/infra/cursor/types.d.ts.map +1 -1
  682. package/dist/infra/kiro/client.d.ts.map +1 -1
  683. package/dist/infra/kiro/client.js +10 -0
  684. package/dist/infra/kiro/client.js.map +1 -1
  685. package/dist/infra/kiro/process.d.ts.map +1 -1
  686. package/dist/infra/kiro/process.js +4 -2
  687. package/dist/infra/kiro/process.js.map +1 -1
  688. package/dist/infra/kiro/types.d.ts +2 -0
  689. package/dist/infra/kiro/types.d.ts.map +1 -1
  690. package/dist/infra/observability/otelFoundation.d.ts.map +1 -1
  691. package/dist/infra/observability/otelFoundation.js +93 -20
  692. package/dist/infra/observability/otelFoundation.js.map +1 -1
  693. package/dist/infra/opencode/OpenCodeStreamHandler.d.ts +19 -0
  694. package/dist/infra/opencode/OpenCodeStreamHandler.d.ts.map +1 -1
  695. package/dist/infra/opencode/OpenCodeStreamHandler.js +10 -0
  696. package/dist/infra/opencode/OpenCodeStreamHandler.js.map +1 -1
  697. package/dist/infra/opencode/allowedTools.d.ts +2 -0
  698. package/dist/infra/opencode/allowedTools.d.ts.map +1 -0
  699. package/dist/infra/opencode/allowedTools.js +10 -0
  700. package/dist/infra/opencode/allowedTools.js.map +1 -0
  701. package/dist/infra/opencode/client.d.ts +4 -2
  702. package/dist/infra/opencode/client.d.ts.map +1 -1
  703. package/dist/infra/opencode/client.js +304 -124
  704. package/dist/infra/opencode/client.js.map +1 -1
  705. package/dist/infra/opencode/index.d.ts +1 -1
  706. package/dist/infra/opencode/index.d.ts.map +1 -1
  707. package/dist/infra/opencode/index.js +1 -1
  708. package/dist/infra/opencode/index.js.map +1 -1
  709. package/dist/infra/opencode/types.d.ts +12 -10
  710. package/dist/infra/opencode/types.d.ts.map +1 -1
  711. package/dist/infra/opencode/types.js +101 -36
  712. package/dist/infra/opencode/types.js.map +1 -1
  713. package/dist/infra/opencode/unavailable-tool-loop.d.ts +7 -0
  714. package/dist/infra/opencode/unavailable-tool-loop.d.ts.map +1 -0
  715. package/dist/infra/opencode/unavailable-tool-loop.js +33 -0
  716. package/dist/infra/opencode/unavailable-tool-loop.js.map +1 -0
  717. package/dist/infra/providers/allowed-tool-edit-policy.d.ts +3 -0
  718. package/dist/infra/providers/allowed-tool-edit-policy.d.ts.map +1 -0
  719. package/dist/infra/providers/allowed-tool-edit-policy.js +10 -0
  720. package/dist/infra/providers/allowed-tool-edit-policy.js.map +1 -0
  721. package/dist/infra/providers/claude-headless.d.ts +2 -0
  722. package/dist/infra/providers/claude-headless.d.ts.map +1 -1
  723. package/dist/infra/providers/claude-headless.js +8 -0
  724. package/dist/infra/providers/claude-headless.js.map +1 -1
  725. package/dist/infra/providers/claude-terminal.d.ts +2 -0
  726. package/dist/infra/providers/claude-terminal.d.ts.map +1 -1
  727. package/dist/infra/providers/claude-terminal.js +8 -0
  728. package/dist/infra/providers/claude-terminal.js.map +1 -1
  729. package/dist/infra/providers/claude.d.ts +2 -0
  730. package/dist/infra/providers/claude.d.ts.map +1 -1
  731. package/dist/infra/providers/claude.js +8 -0
  732. package/dist/infra/providers/claude.js.map +1 -1
  733. package/dist/infra/providers/codex.d.ts +2 -0
  734. package/dist/infra/providers/codex.d.ts.map +1 -1
  735. package/dist/infra/providers/codex.js +7 -0
  736. package/dist/infra/providers/codex.js.map +1 -1
  737. package/dist/infra/providers/copilot.d.ts +2 -0
  738. package/dist/infra/providers/copilot.d.ts.map +1 -1
  739. package/dist/infra/providers/copilot.js +7 -0
  740. package/dist/infra/providers/copilot.js.map +1 -1
  741. package/dist/infra/providers/cursor.d.ts +2 -0
  742. package/dist/infra/providers/cursor.d.ts.map +1 -1
  743. package/dist/infra/providers/cursor.js +7 -0
  744. package/dist/infra/providers/cursor.js.map +1 -1
  745. package/dist/infra/providers/kiro.d.ts +2 -0
  746. package/dist/infra/providers/kiro.d.ts.map +1 -1
  747. package/dist/infra/providers/kiro.js +8 -0
  748. package/dist/infra/providers/kiro.js.map +1 -1
  749. package/dist/infra/providers/mock.d.ts +2 -0
  750. package/dist/infra/providers/mock.d.ts.map +1 -1
  751. package/dist/infra/providers/mock.js +7 -0
  752. package/dist/infra/providers/mock.js.map +1 -1
  753. package/dist/infra/providers/opencode.d.ts +3 -1
  754. package/dist/infra/providers/opencode.d.ts.map +1 -1
  755. package/dist/infra/providers/opencode.js +16 -3
  756. package/dist/infra/providers/opencode.js.map +1 -1
  757. package/dist/infra/providers/provider-capabilities.d.ts +2 -0
  758. package/dist/infra/providers/provider-capabilities.d.ts.map +1 -1
  759. package/dist/infra/providers/provider-capabilities.js +13 -1
  760. package/dist/infra/providers/provider-capabilities.js.map +1 -1
  761. package/dist/infra/providers/runtimeSystemPrompt.d.ts +2 -0
  762. package/dist/infra/providers/runtimeSystemPrompt.d.ts.map +1 -0
  763. package/dist/infra/providers/runtimeSystemPrompt.js +11 -0
  764. package/dist/infra/providers/runtimeSystemPrompt.js.map +1 -0
  765. package/dist/infra/providers/types.d.ts +3 -0
  766. package/dist/infra/providers/types.d.ts.map +1 -1
  767. package/dist/infra/rate-limit/detection.d.ts +1 -1
  768. package/dist/infra/rate-limit/detection.d.ts.map +1 -1
  769. package/dist/infra/rate-limit/detection.js +6 -7
  770. package/dist/infra/rate-limit/detection.js.map +1 -1
  771. package/dist/infra/resources/schema-loader.d.ts +1 -1
  772. package/dist/infra/resources/schema-loader.d.ts.map +1 -1
  773. package/dist/infra/resources/schema-loader.js +8 -4
  774. package/dist/infra/resources/schema-loader.js.map +1 -1
  775. package/dist/infra/service/runSyncConflictResolver.d.ts.map +1 -1
  776. package/dist/infra/service/runSyncConflictResolver.js +3 -1
  777. package/dist/infra/service/runSyncConflictResolver.js.map +1 -1
  778. package/dist/infra/task/clone-base-branch.d.ts +1 -0
  779. package/dist/infra/task/clone-base-branch.d.ts.map +1 -1
  780. package/dist/infra/task/clone-base-branch.js +22 -14
  781. package/dist/infra/task/clone-base-branch.js.map +1 -1
  782. package/dist/infra/task/clone.d.ts +2 -0
  783. package/dist/infra/task/clone.d.ts.map +1 -1
  784. package/dist/infra/task/clone.js +7 -1
  785. package/dist/infra/task/clone.js.map +1 -1
  786. package/dist/infra/task/index.d.ts +1 -1
  787. package/dist/infra/task/index.d.ts.map +1 -1
  788. package/dist/infra/task/index.js +1 -1
  789. package/dist/infra/task/index.js.map +1 -1
  790. package/dist/infra/task/mapper.d.ts.map +1 -1
  791. package/dist/infra/task/mapper.js +1 -0
  792. package/dist/infra/task/mapper.js.map +1 -1
  793. package/dist/infra/task/summarize.d.ts.map +1 -1
  794. package/dist/infra/task/summarize.js +3 -1
  795. package/dist/infra/task/summarize.js.map +1 -1
  796. package/dist/infra/task/taskExecutionSchemas.d.ts +3 -3
  797. package/dist/infra/task/taskRecordSchemas.d.ts +2 -2
  798. package/dist/infra/task/types.d.ts +1 -0
  799. package/dist/infra/task/types.d.ts.map +1 -1
  800. package/dist/shared/constants.d.ts +2 -0
  801. package/dist/shared/constants.d.ts.map +1 -1
  802. package/dist/shared/constants.js +2 -0
  803. package/dist/shared/constants.js.map +1 -1
  804. package/dist/shared/prompts/en/perform_agent_system_prompt.md +9 -1
  805. package/dist/shared/prompts/en/perform_phase2_message.md +1 -0
  806. package/dist/shared/prompts/en/provider_runtime_system_prompt.md +18 -0
  807. package/dist/shared/prompts/index.d.ts +1 -1
  808. package/dist/shared/prompts/index.d.ts.map +1 -1
  809. package/dist/shared/prompts/index.js +7 -1
  810. package/dist/shared/prompts/index.js.map +1 -1
  811. package/dist/shared/prompts/ja/perform_agent_system_prompt.md +9 -1
  812. package/dist/shared/prompts/ja/perform_phase2_message.md +1 -0
  813. package/dist/shared/prompts/ja/provider_runtime_system_prompt.md +18 -0
  814. package/dist/shared/telemetry/childProcessEnv.d.ts +7 -0
  815. package/dist/shared/telemetry/childProcessEnv.d.ts.map +1 -0
  816. package/dist/shared/telemetry/childProcessEnv.js +176 -0
  817. package/dist/shared/telemetry/childProcessEnv.js.map +1 -0
  818. package/dist/shared/telemetry/index.d.ts +3 -0
  819. package/dist/shared/telemetry/index.d.ts.map +1 -0
  820. package/dist/shared/telemetry/index.js +3 -0
  821. package/dist/shared/telemetry/index.js.map +1 -0
  822. package/dist/shared/telemetry/otlp.d.ts +40 -0
  823. package/dist/shared/telemetry/otlp.d.ts.map +1 -0
  824. package/dist/shared/telemetry/otlp.js +72 -0
  825. package/dist/shared/telemetry/otlp.js.map +1 -0
  826. package/dist/shared/types/provider.d.ts +25 -0
  827. package/dist/shared/types/provider.d.ts.map +1 -1
  828. package/dist/shared/ui/StreamDisplay.d.ts.map +1 -1
  829. package/dist/shared/ui/StreamDisplay.js +2 -1
  830. package/dist/shared/ui/StreamDisplay.js.map +1 -1
  831. package/dist/shared/utils/index.d.ts +1 -0
  832. package/dist/shared/utils/index.d.ts.map +1 -1
  833. package/dist/shared/utils/index.js +1 -0
  834. package/dist/shared/utils/index.js.map +1 -1
  835. package/dist/shared/utils/runId.d.ts +2 -0
  836. package/dist/shared/utils/runId.d.ts.map +1 -0
  837. package/dist/shared/utils/runId.js +18 -0
  838. package/dist/shared/utils/runId.js.map +1 -0
  839. package/package.json +25 -10
  840. package/builtins/en/facets/instructions/review-requirements.md +0 -17
  841. package/builtins/en/facets/output-contracts/requirements-review.md +0 -56
  842. package/builtins/en/facets/personas/requirements-reviewer.md +0 -33
  843. package/builtins/ja/facets/instructions/review-requirements.md +0 -17
  844. package/builtins/ja/facets/output-contracts/requirements-review.md +0 -56
  845. package/builtins/ja/facets/personas/requirements-reviewer.md +0 -33
@@ -7,10 +7,12 @@
7
7
  import { createOpencode } from '@opencode-ai/sdk/v2';
8
8
  import { createServer } from 'node:net';
9
9
  import { AskUserQuestionDeniedError } from '../../core/workflow/ask-user-question-error.js';
10
- import { createLogger, getErrorMessage, createStreamDiagnostics, parseStructuredOutput } from '../../shared/utils/index.js';
10
+ import { createLogger, getErrorMessage, createStreamDiagnostics } from '../../shared/utils/index.js';
11
+ import { getNestedObservabilityEnvFingerprint, runWithNestedObservabilityProcessEnv, } from '../../shared/telemetry/index.js';
11
12
  import { parseProviderModel } from '../../shared/utils/providerModel.js';
12
- import { buildOpenCodePermissionRuleset, mapToOpenCodePermissionReply, mapToOpenCodeTools, } from './types.js';
13
- import { createStreamTrackingState, emitInit, emitText, emitResult, handlePartUpdated, } from './OpenCodeStreamHandler.js';
13
+ import { buildOpenCodePermissionRuleset, resolveOpenCodePermissionReply, } from './types.js';
14
+ import { createStreamTrackingState, emitInit, emitText, emitPermissionAsked, emitPermissionSummary, emitResult, handlePartUpdated, } from './OpenCodeStreamHandler.js';
15
+ import { UnavailableToolLoopDetector } from './unavailable-tool-loop.js';
14
16
  import { buildRateLimitedResponseFields, containsRateLimitError } from '../rate-limit/detection.js';
15
17
  const log = createLogger('opencode-sdk');
16
18
  const OPENCODE_STREAM_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
@@ -31,60 +33,132 @@ const OPENCODE_RETRYABLE_ERROR_PATTERNS = [
31
33
  'failed to start server on port',
32
34
  'timeout waiting for server',
33
35
  ];
34
- let sharedServer = null;
35
- let initPromise = null;
36
- async function acquireClient(model, apiKey) {
37
- if (initPromise) {
38
- await initPromise;
36
+ const sharedServers = new Map();
37
+ async function acquireClient(model, apiKey, childProcessEnv, abortSignal) {
38
+ throwIfAborted(abortSignal);
39
+ const key = buildSharedServerKey(model, apiKey, childProcessEnv);
40
+ const entry = getSharedServerEntry(key);
41
+ if (entry.initPromise) {
42
+ const server = await entry.initPromise;
43
+ throwIfAborted(abortSignal);
44
+ return acquireSharedServer(server, abortSignal);
39
45
  }
40
- if (sharedServer?.model === model && sharedServer.apiKey === apiKey) {
41
- if (sharedServer.queue.length === 0) {
42
- return { client: sharedServer.client, release: () => releaseClient() };
46
+ if (entry.server) {
47
+ return acquireSharedServer(entry.server, abortSignal);
48
+ }
49
+ entry.initPromise = createSharedServer(model, apiKey, childProcessEnv)
50
+ .then((server) => {
51
+ entry.server = server;
52
+ return server;
53
+ })
54
+ .finally(() => {
55
+ entry.initPromise = undefined;
56
+ });
57
+ const server = await entry.initPromise;
58
+ throwIfAborted(abortSignal);
59
+ return acquireSharedServer(server, abortSignal);
60
+ }
61
+ function buildSharedServerKey(model, apiKey, childProcessEnv) {
62
+ return JSON.stringify([model, apiKey, getNestedObservabilityEnvFingerprint(childProcessEnv)]);
63
+ }
64
+ function getSharedServerEntry(key) {
65
+ const existing = sharedServers.get(key);
66
+ if (existing) {
67
+ return existing;
68
+ }
69
+ const entry = {};
70
+ sharedServers.set(key, entry);
71
+ return entry;
72
+ }
73
+ async function createSharedServer(model, apiKey, childProcessEnv) {
74
+ const port = await getFreePort();
75
+ const { client, server } = await runWithNestedObservabilityProcessEnv(childProcessEnv, () => createOpencode({
76
+ port,
77
+ config: {
78
+ model,
79
+ small_model: model,
80
+ ...(apiKey ? { provider: { opencode: { options: { apiKey } } } } : {}),
81
+ },
82
+ timeout: OPENCODE_SERVER_START_TIMEOUT_MS,
83
+ }));
84
+ const closeServer = () => {
85
+ try {
86
+ server.close();
43
87
  }
44
- return new Promise((resolve) => {
45
- sharedServer.queue.push((client) => resolve({ client, release: () => releaseClient() }));
46
- });
88
+ catch (error) {
89
+ log.debug(`Failed to close OpenCode server: ${getErrorMessage(error)}`, { model });
90
+ }
91
+ };
92
+ log.debug('OpenCode server started', { model, port });
93
+ return { client, close: closeServer, model, apiKey, busy: false, queue: [] };
94
+ }
95
+ function acquireSharedServer(server, abortSignal) {
96
+ throwIfAborted(abortSignal);
97
+ if (!server.busy) {
98
+ server.busy = true;
99
+ return { client: server.client, release: createReleaseHandle(server) };
47
100
  }
48
- sharedServer?.close();
49
- let resolveInit;
50
- initPromise = new Promise((resolve) => { resolveInit = resolve; });
101
+ return new Promise((resolve, reject) => {
102
+ const entry = { resolve, reject, signal: abortSignal };
103
+ if (abortSignal) {
104
+ entry.onAbort = () => {
105
+ removeQueuedClient(server, entry);
106
+ reject(new Error(OPENCODE_STREAM_ABORTED_MESSAGE));
107
+ };
108
+ abortSignal.addEventListener('abort', entry.onAbort, { once: true });
109
+ }
110
+ server.queue.push(entry);
111
+ });
112
+ }
113
+ export async function getOpenCodeSessionSnapshot(model, sessionID, directory, apiKey) {
114
+ const { client, release } = await acquireClient(model, apiKey, undefined);
51
115
  try {
52
- const port = await getFreePort();
53
- const { client, server } = await createOpencode({
54
- port,
55
- config: {
56
- model,
57
- small_model: model,
58
- ...(apiKey ? { provider: { opencode: { options: { apiKey } } } } : {}),
59
- },
60
- timeout: OPENCODE_SERVER_START_TIMEOUT_MS,
61
- });
62
- const closeServer = () => {
63
- try {
64
- server.close();
65
- }
66
- catch {
67
- // Ignore close errors
68
- }
69
- };
70
- sharedServer = { client, close: closeServer, model, apiKey, queue: [] };
71
- log.debug('OpenCode server started', { model, port });
72
- return { client, release: () => releaseClient() };
116
+ const result = await client.session.get({ sessionID, directory });
117
+ if (!result.data) {
118
+ throw new Error(`OpenCode session not found: ${sessionID}`);
119
+ }
120
+ return result.data;
73
121
  }
74
122
  finally {
75
- initPromise = null;
76
- resolveInit();
123
+ release();
77
124
  }
78
125
  }
79
- function releaseClient() {
80
- if (!sharedServer)
126
+ function releaseClient(server) {
127
+ const next = server.queue.shift();
128
+ if (next) {
129
+ if (next.signal && next.onAbort) {
130
+ next.signal.removeEventListener('abort', next.onAbort);
131
+ }
132
+ next.resolve({ client: server.client, release: createReleaseHandle(server) });
81
133
  return;
82
- const next = sharedServer.queue.shift();
83
- next?.(sharedServer.client);
134
+ }
135
+ server.busy = false;
136
+ }
137
+ function removeQueuedClient(server, entry) {
138
+ server.queue = server.queue.filter((queued) => queued !== entry);
139
+ if (entry.signal && entry.onAbort) {
140
+ entry.signal.removeEventListener('abort', entry.onAbort);
141
+ }
142
+ }
143
+ function throwIfAborted(signal) {
144
+ if (signal?.aborted) {
145
+ throw new Error(OPENCODE_STREAM_ABORTED_MESSAGE);
146
+ }
147
+ }
148
+ function createReleaseHandle(server) {
149
+ let released = false;
150
+ return () => {
151
+ if (released)
152
+ return;
153
+ released = true;
154
+ releaseClient(server);
155
+ };
84
156
  }
85
157
  export function resetSharedServer() {
86
- sharedServer?.close();
87
- sharedServer = null;
158
+ for (const entry of sharedServers.values()) {
159
+ entry.server?.close();
160
+ }
161
+ sharedServers.clear();
88
162
  }
89
163
  async function withTimeout(operation, timeoutMs, timeoutErrorMessage) {
90
164
  const controller = new AbortController();
@@ -123,25 +197,33 @@ function extractOpenCodeErrorMessage(error) {
123
197
  }
124
198
  return undefined;
125
199
  }
126
- function getCommonPrefixLength(a, b) {
127
- const max = Math.min(a.length, b.length);
128
- let i = 0;
129
- while (i < max && a[i] === b[i]) {
130
- i += 1;
131
- }
132
- return i;
133
- }
134
200
  function stripPromptEcho(chunk, echoState) {
135
201
  if (!chunk)
136
202
  return '';
137
- if (!echoState.remainingPrompt)
203
+ if (echoState.remainingPrompts.length === 0)
138
204
  return chunk;
139
- const consumeLength = getCommonPrefixLength(chunk, echoState.remainingPrompt);
140
- if (consumeLength > 0) {
141
- echoState.remainingPrompt = echoState.remainingPrompt.slice(consumeLength);
142
- return chunk.slice(consumeLength);
205
+ const matchingPrompts = echoState.remainingPrompts.filter((remainingPrompt) => (remainingPrompt.startsWith(chunk) || chunk.startsWith(remainingPrompt)));
206
+ if (matchingPrompts.length === 0) {
207
+ echoState.remainingPrompts = [];
208
+ return chunk;
209
+ }
210
+ const consumedPrompt = matchingPrompts
211
+ .filter((remainingPrompt) => chunk.startsWith(remainingPrompt))
212
+ .sort((a, b) => b.length - a.length)[0];
213
+ if (consumedPrompt !== undefined) {
214
+ const visible = chunk.slice(consumedPrompt.length);
215
+ echoState.remainingPrompts = [];
216
+ return visible;
143
217
  }
144
- return chunk;
218
+ echoState.remainingPrompts = matchingPrompts.map((remainingPrompt) => (remainingPrompt.slice(chunk.length)));
219
+ return '';
220
+ }
221
+ function buildPromptEchoCandidates(prompt, systemPrompt) {
222
+ const prompts = [prompt];
223
+ if (systemPrompt !== undefined && systemPrompt.length > 0) {
224
+ prompts.unshift(`${systemPrompt}\n\n${prompt}`);
225
+ }
226
+ return Array.from(new Set(prompts)).filter((candidate) => candidate.length > 0);
145
227
  }
146
228
  function toQuestionInput(props) {
147
229
  return {
@@ -165,6 +247,12 @@ function toQuestionAnswers(props, answers) {
165
247
  return [value];
166
248
  });
167
249
  }
250
+ function buildPermissionRejectedMessage(permission) {
251
+ if (permission && permission.length > 0) {
252
+ return `OpenCode permission rejected: ${permission}`;
253
+ }
254
+ return 'OpenCode permission rejected';
255
+ }
168
256
  async function getFreePort() {
169
257
  return new Promise((resolve, reject) => {
170
258
  const server = createServer();
@@ -198,6 +286,10 @@ export class OpenCodeClient {
198
286
  if (abortCause === 'timeout') {
199
287
  return true;
200
288
  }
289
+ if (abortCause === 'prompt') {
290
+ const lower = message.toLowerCase();
291
+ return OPENCODE_RETRYABLE_ERROR_PATTERNS.some((pattern) => lower.includes(pattern));
292
+ }
201
293
  if (aborted || abortCause) {
202
294
  return false;
203
295
  }
@@ -229,17 +321,6 @@ export class OpenCodeClient {
229
321
  }
230
322
  });
231
323
  }
232
- /** Build a prompt suffix that instructs the agent to return JSON matching the schema */
233
- buildStructuredOutputSuffix(schema) {
234
- return [
235
- '',
236
- '---',
237
- 'IMPORTANT: You MUST respond with ONLY a valid JSON object matching this schema. No other text, no markdown code blocks, no explanation.',
238
- '```',
239
- JSON.stringify(schema, null, 2),
240
- '```',
241
- ].join('\n');
242
- }
243
324
  buildRateLimitedResponse(agentType, sessionId, message) {
244
325
  return {
245
326
  persona: agentType,
@@ -250,14 +331,6 @@ export class OpenCodeClient {
250
331
  }
251
332
  /** Call OpenCode with an agent prompt */
252
333
  async call(agentType, prompt, options) {
253
- const basePrompt = options.systemPrompt
254
- ? `${options.systemPrompt}\n\n${prompt}`
255
- : prompt;
256
- // OpenCode SDK does not natively support structured output via outputFormat.
257
- // Inject JSON output instructions into the prompt to make the agent return JSON.
258
- const fullPrompt = options.outputSchema
259
- ? `${basePrompt}${this.buildStructuredOutputSuffix(options.outputSchema)}`
260
- : basePrompt;
261
334
  for (let attempt = 1; attempt <= OPENCODE_RETRY_MAX_ATTEMPTS; attempt++) {
262
335
  let idleTimeoutId;
263
336
  const streamAbortController = new AbortController();
@@ -267,7 +340,38 @@ export class OpenCodeClient {
267
340
  let release;
268
341
  let opencodeApiClient;
269
342
  let sessionId = options.sessionId;
343
+ let promptCompletion;
344
+ let promptCompletionWait;
345
+ let promptError;
270
346
  const interactionTimeoutMs = options.interactionTimeoutMs ?? OPENCODE_INTERACTION_TIMEOUT_MS;
347
+ const promptCompletionTimeoutMessage = 'OpenCode prompt completion timed out';
348
+ const awaitPromptCompletion = () => {
349
+ if (!promptCompletion) {
350
+ return Promise.resolve();
351
+ }
352
+ promptCompletionWait ??= (async () => {
353
+ let timeoutId;
354
+ try {
355
+ await Promise.race([
356
+ promptCompletion,
357
+ new Promise((_, reject) => {
358
+ timeoutId = setTimeout(() => {
359
+ reject(new Error(promptCompletionTimeoutMessage));
360
+ }, interactionTimeoutMs);
361
+ }),
362
+ ]);
363
+ }
364
+ catch (error) {
365
+ promptError ??= getErrorMessage(error);
366
+ }
367
+ finally {
368
+ if (timeoutId !== undefined) {
369
+ clearTimeout(timeoutId);
370
+ }
371
+ }
372
+ })();
373
+ return promptCompletionWait;
374
+ };
271
375
  const resetIdleTimeout = () => {
272
376
  if (idleTimeoutId !== undefined) {
273
377
  clearTimeout(idleTimeoutId);
@@ -284,6 +388,7 @@ export class OpenCodeClient {
284
388
  };
285
389
  if (options.abortSignal) {
286
390
  if (options.abortSignal.aborted) {
391
+ abortCause = 'external';
287
392
  streamAbortController.abort();
288
393
  }
289
394
  else {
@@ -301,48 +406,79 @@ export class OpenCodeClient {
301
406
  diagRef = diag;
302
407
  const parsedModel = parseProviderModel(options.model, 'OpenCode model');
303
408
  const fullModel = `${parsedModel.providerID}/${parsedModel.modelID}`;
304
- const acquired = await acquireClient(fullModel, options.opencodeApiKey);
409
+ const acquired = await acquireClient(fullModel, options.opencodeApiKey, options.childProcessEnv, options.abortSignal);
305
410
  opencodeApiClient = acquired.client;
306
411
  release = acquired.release;
307
- const sessionResult = sessionId
308
- ? { data: { id: sessionId } }
309
- : await opencodeApiClient.session.create({
412
+ if (streamAbortController.signal.aborted) {
413
+ release();
414
+ release = undefined;
415
+ throw new Error(OPENCODE_STREAM_ABORTED_MESSAGE);
416
+ }
417
+ const permissionRuleset = buildOpenCodePermissionRuleset(options.permissionMode, options.networkAccess, options.allowedTools);
418
+ const shouldCreateSession = sessionId === undefined || options.allowedTools !== undefined;
419
+ const appliedPermissionRuleset = shouldCreateSession;
420
+ if (sessionId === undefined) {
421
+ const sessionResult = await opencodeApiClient.session.create({
310
422
  directory: options.cwd,
311
- permission: buildOpenCodePermissionRuleset(options.permissionMode, options.networkAccess),
423
+ permission: permissionRuleset,
312
424
  });
313
- sessionId = sessionResult.data?.id;
314
- if (!sessionId) {
315
- release();
316
- throw new Error('Failed to create OpenCode session');
425
+ sessionId = sessionResult.data?.id;
426
+ if (!sessionId) {
427
+ throw new Error('Failed to create OpenCode session');
428
+ }
429
+ }
430
+ else if (options.allowedTools !== undefined) {
431
+ const sessionResult = await opencodeApiClient.session.create({
432
+ directory: options.cwd,
433
+ parentID: sessionId,
434
+ permission: permissionRuleset,
435
+ });
436
+ sessionId = sessionResult.data?.id;
437
+ if (!sessionId) {
438
+ throw new Error('Failed to create OpenCode session');
439
+ }
440
+ }
441
+ const activeSessionId = sessionId;
442
+ if (activeSessionId === undefined) {
443
+ throw new Error('OpenCode session ID is required');
317
444
  }
318
445
  const { stream } = await opencodeApiClient.event.subscribe({ directory: options.cwd }, { signal: streamAbortController.signal });
319
446
  resetIdleTimeout();
320
447
  diag.onConnected();
321
- const tools = mapToOpenCodeTools(options.allowedTools);
448
+ if (appliedPermissionRuleset) {
449
+ emitPermissionSummary(options.onStream, {
450
+ sessionId: activeSessionId,
451
+ ...(options.permissionMode !== undefined ? { permissionMode: options.permissionMode } : {}),
452
+ ...(options.allowedTools !== undefined ? { allowedTools: options.allowedTools } : {}),
453
+ ...(options.networkAccess !== undefined ? { networkAccess: options.networkAccess } : {}),
454
+ resolvedPermissions: permissionRuleset,
455
+ });
456
+ }
322
457
  const promptPayload = {
323
- sessionID: sessionId,
458
+ sessionID: activeSessionId,
324
459
  directory: options.cwd,
325
460
  model: parsedModel,
326
461
  ...(options.variant !== undefined ? { variant: options.variant } : {}),
327
- ...(tools ? { tools } : {}),
328
- parts: [{ type: 'text', text: fullPrompt }],
462
+ ...(options.systemPrompt !== undefined ? { system: options.systemPrompt } : {}),
463
+ parts: [{ type: 'text', text: prompt }],
329
464
  };
330
- if (options.outputSchema) {
331
- promptPayload.outputFormat = {
332
- type: 'json_schema',
333
- schema: options.outputSchema,
334
- };
335
- }
336
465
  const promptPayloadForSdk = promptPayload;
337
- await opencodeApiClient.session.promptAsync(promptPayloadForSdk, {
466
+ promptCompletion = opencodeApiClient.session.promptAsync(promptPayloadForSdk, {
338
467
  signal: streamAbortController.signal,
468
+ }).catch((error) => {
469
+ promptError = getErrorMessage(error);
470
+ if (!streamAbortController.signal.aborted) {
471
+ abortCause = 'prompt';
472
+ streamAbortController.abort();
473
+ }
339
474
  });
340
- emitInit(options.onStream, options.model, sessionId);
475
+ emitInit(options.onStream, options.model, activeSessionId);
341
476
  let content = '';
342
477
  let success = true;
343
478
  let failureMessage = '';
344
479
  const state = createStreamTrackingState();
345
- const echoState = { remainingPrompt: fullPrompt };
480
+ const unavailableToolLoopDetector = new UnavailableToolLoopDetector();
481
+ const echoState = { remainingPrompts: buildPromptEchoCandidates(prompt, options.systemPrompt) };
346
482
  const textOffsets = new Map();
347
483
  const textContentParts = new Map();
348
484
  // Consume a raw text delta for a part: strip the prompt echo, stream the
@@ -374,6 +510,7 @@ export class OpenCodeClient {
374
510
  const part = props.part;
375
511
  const delta = props.delta;
376
512
  if (part.type === 'text') {
513
+ unavailableToolLoopDetector.reset();
377
514
  const textPart = part;
378
515
  const prev = textOffsets.get(textPart.id) ?? 0;
379
516
  const rawDelta = delta
@@ -381,28 +518,57 @@ export class OpenCodeClient {
381
518
  consumeTextDelta(textPart.id, rawDelta);
382
519
  continue;
383
520
  }
521
+ if (part.type === 'tool') {
522
+ const toolPart = part;
523
+ const loopError = toolPart.state.status === 'error'
524
+ ? unavailableToolLoopDetector.observe(toolPart.callID || toolPart.id, toolPart.tool, toolPart.state.error)
525
+ : undefined;
526
+ if (toolPart.state.status !== 'error') {
527
+ unavailableToolLoopDetector.reset();
528
+ }
529
+ handlePartUpdated(part, delta, options.onStream, state);
530
+ if (loopError !== undefined) {
531
+ success = false;
532
+ failureMessage = loopError;
533
+ diag.onStreamError('message.part.updated', loopError);
534
+ break;
535
+ }
536
+ continue;
537
+ }
384
538
  handlePartUpdated(part, delta, options.onStream, state);
385
539
  continue;
386
540
  }
387
541
  if (sseEvent.type === 'message.part.delta') {
388
542
  const deltaProps = sseEvent.properties;
389
543
  if (deltaProps.field === 'text' && deltaProps.delta) {
544
+ unavailableToolLoopDetector.reset();
390
545
  consumeTextDelta(deltaProps.partID, deltaProps.delta);
391
546
  }
392
547
  continue;
393
548
  }
394
549
  if (sseEvent.type === 'permission.asked') {
395
550
  const permProps = sseEvent.properties;
396
- if (permProps.sessionID === sessionId) {
551
+ if (permProps.sessionID === activeSessionId) {
397
552
  try {
398
- const reply = options.permissionMode
399
- ? mapToOpenCodePermissionReply(options.permissionMode)
400
- : 'once';
553
+ const reply = resolveOpenCodePermissionReply(options.permissionMode, permProps.permission, options.allowedTools !== undefined ? permissionRuleset : undefined);
554
+ emitPermissionAsked(options.onStream, {
555
+ requestId: permProps.id,
556
+ sessionId: permProps.sessionID,
557
+ permission: permProps.permission ?? '',
558
+ patterns: Array.isArray(permProps.patterns) ? permProps.patterns : [],
559
+ always: Array.isArray(permProps.always) ? permProps.always : [],
560
+ reply,
561
+ });
401
562
  await withTimeout((signal) => opencodeApiClient.permission.reply({
402
563
  requestID: permProps.id,
403
564
  directory: options.cwd,
404
565
  reply,
405
566
  }, { signal }), interactionTimeoutMs, 'OpenCode permission reply timed out');
567
+ if (reply === 'reject') {
568
+ success = false;
569
+ failureMessage = buildPermissionRejectedMessage(permProps.permission);
570
+ break;
571
+ }
406
572
  }
407
573
  catch (e) {
408
574
  success = false;
@@ -414,7 +580,7 @@ export class OpenCodeClient {
414
580
  }
415
581
  if (sseEvent.type === 'question.asked') {
416
582
  const questionProps = sseEvent.properties;
417
- if (questionProps.sessionID === sessionId) {
583
+ if (questionProps.sessionID === activeSessionId) {
418
584
  const rejectQuestion = () => withTimeout((signal) => opencodeApiClient.question.reject({
419
585
  requestID: questionProps.id,
420
586
  directory: options.cwd,
@@ -461,7 +627,7 @@ export class OpenCodeClient {
461
627
  if (sseEvent.type === 'message.updated') {
462
628
  const messageProps = sseEvent.properties;
463
629
  const info = messageProps.info;
464
- const isCurrentAssistantMessage = info?.sessionID === sessionId && info.role === 'assistant';
630
+ const isCurrentAssistantMessage = info?.sessionID === activeSessionId && info?.role === 'assistant';
465
631
  if (isCurrentAssistantMessage) {
466
632
  const streamError = extractOpenCodeErrorMessage(info?.error);
467
633
  if (streamError) {
@@ -476,7 +642,7 @@ export class OpenCodeClient {
476
642
  if (sseEvent.type === 'message.completed') {
477
643
  const completedProps = sseEvent.properties;
478
644
  const info = completedProps.info;
479
- const isCurrentAssistantMessage = info?.sessionID === sessionId && info.role === 'assistant';
645
+ const isCurrentAssistantMessage = info?.sessionID === activeSessionId && info?.role === 'assistant';
480
646
  if (isCurrentAssistantMessage) {
481
647
  const streamError = extractOpenCodeErrorMessage(info?.error);
482
648
  if (streamError) {
@@ -491,7 +657,7 @@ export class OpenCodeClient {
491
657
  if (sseEvent.type === 'message.failed') {
492
658
  const failedProps = sseEvent.properties;
493
659
  const info = failedProps.info;
494
- const isCurrentAssistantMessage = info?.sessionID === sessionId && info.role === 'assistant';
660
+ const isCurrentAssistantMessage = info?.sessionID === activeSessionId && info?.role === 'assistant';
495
661
  if (isCurrentAssistantMessage) {
496
662
  success = false;
497
663
  failureMessage = extractOpenCodeErrorMessage(info?.error) ?? 'OpenCode message failed';
@@ -502,23 +668,23 @@ export class OpenCodeClient {
502
668
  }
503
669
  if (sseEvent.type === 'session.status') {
504
670
  const statusProps = sseEvent.properties;
505
- if (statusProps.sessionID === sessionId && statusProps.status?.type === 'idle') {
671
+ if (statusProps.sessionID === activeSessionId && statusProps.status?.type === 'idle') {
506
672
  break;
507
673
  }
508
674
  continue;
509
675
  }
510
676
  if (sseEvent.type === 'session.idle') {
511
677
  const idleProps = sseEvent.properties;
512
- if (idleProps.sessionID === sessionId) {
678
+ if (idleProps.sessionID === activeSessionId) {
513
679
  break;
514
680
  }
515
681
  continue;
516
682
  }
517
683
  if (sseEvent.type === 'session.error') {
518
684
  const errorProps = sseEvent.properties;
519
- if (!errorProps.sessionID || errorProps.sessionID === sessionId) {
685
+ if (!errorProps.sessionID || errorProps.sessionID === activeSessionId) {
520
686
  success = false;
521
- failureMessage = errorProps.error?.data?.message ?? 'OpenCode session error';
687
+ failureMessage = extractOpenCodeErrorMessage(errorProps.error) ?? 'OpenCode session error';
522
688
  diag.onStreamError('session.error', failureMessage);
523
689
  break;
524
690
  }
@@ -526,12 +692,25 @@ export class OpenCodeClient {
526
692
  }
527
693
  }
528
694
  content = [...textContentParts.values()].join('\n');
695
+ if (!success && !streamAbortController.signal.aborted) {
696
+ streamAbortController.abort();
697
+ }
698
+ await awaitPromptCompletion();
699
+ if (promptError !== undefined) {
700
+ if (success) {
701
+ success = false;
702
+ failureMessage = promptError;
703
+ }
704
+ else if (!failureMessage) {
705
+ failureMessage = promptError;
706
+ }
707
+ }
529
708
  diag.onCompleted(success ? 'normal' : 'error', success ? undefined : failureMessage);
530
709
  if (!success) {
531
710
  const message = failureMessage || 'OpenCode execution failed';
532
711
  if (containsRateLimitError(message)) {
533
- const rateLimitedResponse = this.buildRateLimitedResponse(agentType, sessionId, message);
534
- emitResult(options.onStream, false, rateLimitedResponse.error ?? rateLimitedResponse.content, sessionId);
712
+ const rateLimitedResponse = this.buildRateLimitedResponse(agentType, activeSessionId, message);
713
+ emitResult(options.onStream, false, rateLimitedResponse.error ?? rateLimitedResponse.content, activeSessionId);
535
714
  return rateLimitedResponse;
536
715
  }
537
716
  const retriable = this.isRetriableError(message, streamAbortController.signal.aborted, abortCause);
@@ -540,25 +719,23 @@ export class OpenCodeClient {
540
719
  await this.waitForRetryDelay(attempt, options.abortSignal);
541
720
  continue;
542
721
  }
543
- emitResult(options.onStream, false, message, sessionId);
722
+ emitResult(options.onStream, false, message, activeSessionId);
544
723
  return {
545
724
  persona: agentType,
546
725
  status: 'error',
547
726
  content: message,
548
727
  timestamp: new Date(),
549
- sessionId,
728
+ sessionId: activeSessionId,
550
729
  };
551
730
  }
552
731
  const trimmed = content.trim();
553
- const structuredOutput = parseStructuredOutput(trimmed, !!options.outputSchema);
554
- emitResult(options.onStream, true, trimmed, sessionId);
732
+ emitResult(options.onStream, true, trimmed, activeSessionId);
555
733
  return {
556
734
  persona: agentType,
557
735
  status: 'done',
558
736
  content: trimmed,
559
737
  timestamp: new Date(),
560
- sessionId,
561
- structuredOutput,
738
+ sessionId: activeSessionId,
562
739
  };
563
740
  }
564
741
  catch (error) {
@@ -566,7 +743,9 @@ export class OpenCodeClient {
566
743
  const errorMessage = streamAbortController.signal.aborted
567
744
  ? abortCause === 'timeout'
568
745
  ? timeoutMessage
569
- : OPENCODE_STREAM_ABORTED_MESSAGE
746
+ : abortCause === 'prompt' && promptError !== undefined
747
+ ? promptError
748
+ : OPENCODE_STREAM_ABORTED_MESSAGE
570
749
  : message;
571
750
  if (containsRateLimitError(errorMessage)) {
572
751
  const rateLimitedResponse = this.buildRateLimitedResponse(agentType, sessionId, errorMessage);
@@ -575,7 +754,7 @@ export class OpenCodeClient {
575
754
  }
576
755
  return rateLimitedResponse;
577
756
  }
578
- diagRef?.onCompleted(abortCause === 'timeout' ? 'timeout' : streamAbortController.signal.aborted ? 'abort' : 'error', errorMessage);
757
+ diagRef?.onCompleted(abortCause === 'timeout' ? 'timeout' : streamAbortController.signal.aborted && abortCause !== 'prompt' ? 'abort' : 'error', errorMessage);
579
758
  const retriable = this.isRetriableError(errorMessage, streamAbortController.signal.aborted, abortCause);
580
759
  if (retriable && attempt < OPENCODE_RETRY_MAX_ATTEMPTS) {
581
760
  log.info('Retrying OpenCode call after transient exception', { agentType, attempt, errorMessage });
@@ -600,10 +779,11 @@ export class OpenCodeClient {
600
779
  if (options.abortSignal) {
601
780
  options.abortSignal.removeEventListener('abort', onExternalAbort);
602
781
  }
603
- release?.();
604
782
  if (!streamAbortController.signal.aborted) {
605
783
  streamAbortController.abort();
606
784
  }
785
+ await awaitPromptCompletion();
786
+ release?.();
607
787
  }
608
788
  }
609
789
  throw new Error('Unreachable: OpenCode retry loop exhausted without returning');