xcoder-dna 0.0.0-stage → 1.3.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 (390) hide show
  1. package/LICENSE +66 -0
  2. package/README.md +87 -2
  3. package/dist/agents/ai-chat-debate.d.ts +36 -0
  4. package/dist/agents/ai-chat-debate.js +300 -0
  5. package/dist/agents/ai-chat-report-writer.d.ts +7 -0
  6. package/dist/agents/ai-chat-report-writer.js +100 -0
  7. package/dist/agents/duplicate-detector.d.ts +41 -0
  8. package/dist/agents/duplicate-detector.js +65 -0
  9. package/dist/agents/genesis-agent.d.ts +61 -0
  10. package/dist/agents/genesis-agent.js +340 -0
  11. package/dist/agents/samurai-agent.d.ts +53 -0
  12. package/dist/agents/samurai-agent.js +279 -0
  13. package/dist/agents/sub-agent.d.ts +56 -0
  14. package/dist/agents/sub-agent.js +353 -0
  15. package/dist/backlog/backlog-requirement-validator.d.ts +10 -0
  16. package/dist/backlog/backlog-requirement-validator.js +60 -0
  17. package/dist/backlog/backlog-store.d.ts +29 -0
  18. package/dist/backlog/backlog-store.js +148 -0
  19. package/dist/backlog/po-agent.d.ts +16 -0
  20. package/dist/backlog/po-agent.js +121 -0
  21. package/dist/backlog/types.d.ts +25 -0
  22. package/dist/backlog/types.js +4 -0
  23. package/dist/bench/run.d.ts +11 -0
  24. package/dist/bench/run.js +185 -0
  25. package/dist/bench/types.d.ts +50 -0
  26. package/dist/bench/types.js +1 -0
  27. package/dist/cli/swarm.d.ts +10 -0
  28. package/dist/cli/swarm.js +100 -0
  29. package/dist/cli/task.d.ts +14 -0
  30. package/dist/cli/task.js +121 -0
  31. package/dist/cli/wbc-arg.d.ts +6 -0
  32. package/dist/cli/wbc-arg.js +40 -0
  33. package/dist/cli/wbc.d.ts +45 -0
  34. package/dist/cli/wbc.js +98 -0
  35. package/dist/commands/license.d.ts +9 -0
  36. package/dist/commands/license.js +140 -0
  37. package/dist/commands/release.d.ts +44 -0
  38. package/dist/commands/release.js +180 -0
  39. package/dist/commands/test.d.ts +50 -0
  40. package/dist/commands/test.js +385 -0
  41. package/dist/config/loadConfig.d.ts +82 -0
  42. package/dist/config/loadConfig.js +240 -0
  43. package/dist/config/secure-mode.d.ts +29 -0
  44. package/dist/config/secure-mode.js +63 -0
  45. package/dist/config/user-config.d.ts +39 -0
  46. package/dist/config/user-config.js +202 -0
  47. package/dist/engine/reasoning-engine.d.ts +21 -0
  48. package/dist/engine/reasoning-engine.js +59 -0
  49. package/dist/events/bus.d.ts +22 -0
  50. package/dist/events/bus.js +18 -0
  51. package/dist/index.d.ts +79 -0
  52. package/dist/index.js +77 -0
  53. package/dist/indexing/ignoreRules.d.ts +1 -0
  54. package/dist/indexing/ignoreRules.js +53 -0
  55. package/dist/instance-swarm/instance-swarm-orchestrator.d.ts +57 -0
  56. package/dist/instance-swarm/instance-swarm-orchestrator.js +204 -0
  57. package/dist/instance-swarm/protocol-name-resolver.d.ts +23 -0
  58. package/dist/instance-swarm/protocol-name-resolver.js +64 -0
  59. package/dist/license/gate.d.ts +31 -0
  60. package/dist/license/gate.js +188 -0
  61. package/dist/license/http-client.d.ts +43 -0
  62. package/dist/license/http-client.js +195 -0
  63. package/dist/license/manager.d.ts +39 -0
  64. package/dist/license/manager.js +175 -0
  65. package/dist/license/receipt.d.ts +27 -0
  66. package/dist/license/receipt.js +108 -0
  67. package/dist/license/state-codec.d.ts +72 -0
  68. package/dist/license/state-codec.js +218 -0
  69. package/dist/license/state-paths.d.ts +17 -0
  70. package/dist/license/state-paths.js +64 -0
  71. package/dist/license/store.d.ts +44 -0
  72. package/dist/license/store.js +223 -0
  73. package/dist/license/trust-anchor.d.ts +24 -0
  74. package/dist/license/trust-anchor.js +74 -0
  75. package/dist/license/types.d.ts +34 -0
  76. package/dist/license/types.js +19 -0
  77. package/dist/llm/budget.d.ts +23 -0
  78. package/dist/llm/budget.js +58 -0
  79. package/dist/llm/client.d.ts +53 -0
  80. package/dist/llm/client.js +122 -0
  81. package/dist/llm/factory.d.ts +14 -0
  82. package/dist/llm/factory.js +32 -0
  83. package/dist/orchestrator/defect-logger.d.ts +31 -0
  84. package/dist/orchestrator/defect-logger.js +101 -0
  85. package/dist/orchestrator/defect-manager.d.ts +118 -0
  86. package/dist/orchestrator/defect-manager.js +338 -0
  87. package/dist/orchestrator/defect-migration.d.ts +14 -0
  88. package/dist/orchestrator/defect-migration.js +174 -0
  89. package/dist/orchestrator/defect-store.d.ts +48 -0
  90. package/dist/orchestrator/defect-store.js +76 -0
  91. package/dist/orchestrator/healing.d.ts +14 -0
  92. package/dist/orchestrator/healing.js +11 -0
  93. package/dist/orchestrator/interactive-steering.d.ts +64 -0
  94. package/dist/orchestrator/interactive-steering.js +107 -0
  95. package/dist/orchestrator/interrupt-handler.d.ts +30 -0
  96. package/dist/orchestrator/interrupt-handler.js +70 -0
  97. package/dist/orchestrator/lesson-manager.d.ts +25 -0
  98. package/dist/orchestrator/lesson-manager.js +122 -0
  99. package/dist/orchestrator/progress-summary.d.ts +15 -0
  100. package/dist/orchestrator/progress-summary.js +106 -0
  101. package/dist/orchestrator/reasoning-score.d.ts +49 -0
  102. package/dist/orchestrator/reasoning-score.js +117 -0
  103. package/dist/orchestrator/swarm.d.ts +36 -0
  104. package/dist/orchestrator/swarm.js +77 -0
  105. package/dist/orchestrator/task-factory.d.ts +15 -0
  106. package/dist/orchestrator/task-factory.js +176 -0
  107. package/dist/orchestrator/validation-gate.d.ts +23 -0
  108. package/dist/orchestrator/validation-gate.js +155 -0
  109. package/dist/protocol/react-contract.d.ts +136 -0
  110. package/dist/protocol/react-contract.js +698 -0
  111. package/dist/protocol/wks-protocol-manager.d.ts +22 -0
  112. package/dist/protocol/wks-protocol-manager.js +72 -0
  113. package/dist/sdlc-runtime/conversation-runner.d.ts +8 -0
  114. package/dist/sdlc-runtime/conversation-runner.js +64 -0
  115. package/dist/sdlc-runtime/dag-utils.d.ts +15 -0
  116. package/dist/sdlc-runtime/dag-utils.js +67 -0
  117. package/dist/sdlc-runtime/defect-integration.d.ts +7 -0
  118. package/dist/sdlc-runtime/defect-integration.js +99 -0
  119. package/dist/sdlc-runtime/execution-loop.d.ts +38 -0
  120. package/dist/sdlc-runtime/execution-loop.js +274 -0
  121. package/dist/sdlc-runtime/lesson-recorder.d.ts +9 -0
  122. package/dist/sdlc-runtime/lesson-recorder.js +27 -0
  123. package/dist/sdlc-runtime/plan-initializer.d.ts +47 -0
  124. package/dist/sdlc-runtime/plan-initializer.js +135 -0
  125. package/dist/sdlc-runtime/progress-persister.d.ts +10 -0
  126. package/dist/sdlc-runtime/progress-persister.js +34 -0
  127. package/dist/sdlc-runtime/protocol-loader.d.ts +10 -0
  128. package/dist/sdlc-runtime/protocol-loader.js +21 -0
  129. package/dist/sdlc-runtime/reporting.d.ts +24 -0
  130. package/dist/sdlc-runtime/reporting.js +68 -0
  131. package/dist/sdlc-runtime/sdlc-orchestrator.d.ts +59 -0
  132. package/dist/sdlc-runtime/sdlc-orchestrator.js +170 -0
  133. package/dist/sdlc-runtime/sdlc-skill.d.ts +44 -0
  134. package/dist/sdlc-runtime/sdlc-skill.js +148 -0
  135. package/dist/sdlc-runtime/steering-handler.d.ts +14 -0
  136. package/dist/sdlc-runtime/steering-handler.js +51 -0
  137. package/dist/sdlc-runtime/trace-recorder.d.ts +10 -0
  138. package/dist/sdlc-runtime/trace-recorder.js +7 -0
  139. package/dist/security/index.d.ts +16 -0
  140. package/dist/security/index.js +12 -0
  141. package/dist/security/input-screen.d.ts +30 -0
  142. package/dist/security/input-screen.js +75 -0
  143. package/dist/security/tool-call-guard.d.ts +16 -0
  144. package/dist/security/tool-call-guard.js +163 -0
  145. package/dist/security/untrusted-content.d.ts +34 -0
  146. package/dist/security/untrusted-content.js +63 -0
  147. package/dist/skills/advanced-dfir/SKILL.md +85 -0
  148. package/dist/skills/advanced-pentest-lab/SKILL.md +88 -0
  149. package/dist/skills/analyst/SKILL.md +55 -0
  150. package/dist/skills/architect/SKILL.md +54 -0
  151. package/dist/skills/aws/SKILL.md +92 -0
  152. package/dist/skills/azure/SKILL.md +90 -0
  153. package/dist/skills/bylaw-context.d.ts +45 -0
  154. package/dist/skills/bylaw-context.js +61 -0
  155. package/dist/skills/bylaw-review.d.ts +20 -0
  156. package/dist/skills/bylaw-review.js +101 -0
  157. package/dist/skills/conversation/SKILL.md +29 -0
  158. package/dist/skills/design-patterns/SKILL.md +190 -0
  159. package/dist/skills/devops/SKILL.md +55 -0
  160. package/dist/skills/directives.d.ts +20 -0
  161. package/dist/skills/directives.js +313 -0
  162. package/dist/skills/docker/SKILL.md +76 -0
  163. package/dist/skills/docker-expert/SKILL.md +56 -0
  164. package/dist/skills/enterprise-systems-analyst/SKILL.md +83 -0
  165. package/dist/skills/enterprise-systems-analyst/references/crm.md +41 -0
  166. package/dist/skills/enterprise-systems-analyst/references/erp.md +40 -0
  167. package/dist/skills/enterprise-systems-analyst/references/financial-systems.md +35 -0
  168. package/dist/skills/enterprise-systems-analyst/references/hcm.md +38 -0
  169. package/dist/skills/enterprise-systems-analyst/references/mrp.md +37 -0
  170. package/dist/skills/enterprise-systems-analyst/references/scm.md +32 -0
  171. package/dist/skills/ethical-hacking-methodology/SKILL.md +119 -0
  172. package/dist/skills/externalSkillLoader.d.ts +25 -0
  173. package/dist/skills/externalSkillLoader.js +65 -0
  174. package/dist/skills/externalSkillRegistry.d.ts +33 -0
  175. package/dist/skills/externalSkillRegistry.js +94 -0
  176. package/dist/skills/filesystem-management/SKILL.md +61 -0
  177. package/dist/skills/first-run-seed.d.ts +26 -0
  178. package/dist/skills/first-run-seed.js +75 -0
  179. package/dist/skills/git-vcs/SKILL.md +84 -0
  180. package/dist/skills/kafka/SKILL.md +89 -0
  181. package/dist/skills/kubernetes/SKILL.md +93 -0
  182. package/dist/skills/kubernetes-expert/SKILL.md +54 -0
  183. package/dist/skills/openshift/SKILL.md +93 -0
  184. package/dist/skills/pentester/SKILL.md +59 -0
  185. package/dist/skills/performance-tester/SKILL.md +57 -0
  186. package/dist/skills/playwright-ui-tester/SKILL.md +67 -0
  187. package/dist/skills/programmer/SKILL.md +58 -0
  188. package/dist/skills/project-scaffolding/SKILL.md +133 -0
  189. package/dist/skills/qa-engineer/SKILL.md +91 -0
  190. package/dist/skills/rca/SKILL.md +58 -0
  191. package/dist/skills/redhat/SKILL.md +92 -0
  192. package/dist/skills/rosa/SKILL.md +80 -0
  193. package/dist/skills/scrum-framework/SKILL.md +74 -0
  194. package/dist/skills/scrum-framework/references/artifacts_and_quality.md +79 -0
  195. package/dist/skills/scrum-framework/references/roles_and_events.md +105 -0
  196. package/dist/skills/scrum-master-agent/SKILL.md +74 -0
  197. package/dist/skills/scrum-master-agent/references/behaviors.md +56 -0
  198. package/dist/skills/sdlc-skill.d.ts +1 -0
  199. package/dist/skills/sdlc-skill.js +4 -0
  200. package/dist/skills/secops/SKILL.md +52 -0
  201. package/dist/skills/secure-architect.bylaws.d.ts +68 -0
  202. package/dist/skills/secure-architect.bylaws.js +525 -0
  203. package/dist/skills/seed-skills.d.ts +48 -0
  204. package/dist/skills/seed-skills.js +213 -0
  205. package/dist/skills/skill-authoring/SKILL.md +123 -0
  206. package/dist/skills/skill-header.d.ts +51 -0
  207. package/dist/skills/skill-header.js +163 -0
  208. package/dist/skills/skill-path-guard.d.ts +41 -0
  209. package/dist/skills/skill-path-guard.js +95 -0
  210. package/dist/skills/skillRouter.d.ts +51 -0
  211. package/dist/skills/skillRouter.js +90 -0
  212. package/dist/skills/skills-root.d.ts +64 -0
  213. package/dist/skills/skills-root.js +168 -0
  214. package/dist/skills/software-architect/SKILL.md +77 -0
  215. package/dist/skills/software-engineer/SKILL.md +74 -0
  216. package/dist/skills/solid-principles/SKILL.md +94 -0
  217. package/dist/skills/task-planning/SKILL.md +115 -0
  218. package/dist/skills/tester/SKILL.md +54 -0
  219. package/dist/skills/ubuntu/SKILL.md +87 -0
  220. package/dist/skills/ui-ux-design/SKILL.md +114 -0
  221. package/dist/skills/workspace-context/SKILL.md +103 -0
  222. package/dist/sprint/controller.d.ts +37 -0
  223. package/dist/sprint/controller.js +220 -0
  224. package/dist/sprint/dag-builder.d.ts +14 -0
  225. package/dist/sprint/dag-builder.js +105 -0
  226. package/dist/sprint/reporter.d.ts +11 -0
  227. package/dist/sprint/reporter.js +97 -0
  228. package/dist/sprint/state-store.d.ts +10 -0
  229. package/dist/sprint/state-store.js +71 -0
  230. package/dist/sprint/types.d.ts +24 -0
  231. package/dist/sprint/types.js +4 -0
  232. package/dist/store/file-version-store.d.ts +24 -0
  233. package/dist/store/file-version-store.js +73 -0
  234. package/dist/store/task-store.d.ts +90 -0
  235. package/dist/store/task-store.js +166 -0
  236. package/dist/task-ingest/architect-detailer.d.ts +43 -0
  237. package/dist/task-ingest/architect-detailer.js +141 -0
  238. package/dist/task-ingest/detail-schema.d.ts +9 -0
  239. package/dist/task-ingest/detail-schema.js +195 -0
  240. package/dist/task-ingest/detailed-run.d.ts +36 -0
  241. package/dist/task-ingest/detailed-run.js +108 -0
  242. package/dist/task-ingest/extract-id.d.ts +9 -0
  243. package/dist/task-ingest/extract-id.js +24 -0
  244. package/dist/task-ingest/index.d.ts +23 -0
  245. package/dist/task-ingest/index.js +14 -0
  246. package/dist/task-ingest/ingest.d.ts +45 -0
  247. package/dist/task-ingest/ingest.js +163 -0
  248. package/dist/task-ingest/list-ingested.d.ts +13 -0
  249. package/dist/task-ingest/list-ingested.js +30 -0
  250. package/dist/task-ingest/pending-filter.d.ts +30 -0
  251. package/dist/task-ingest/pending-filter.js +59 -0
  252. package/dist/task-ingest/scanner.d.ts +56 -0
  253. package/dist/task-ingest/scanner.js +216 -0
  254. package/dist/task-ingest/source-reader.d.ts +25 -0
  255. package/dist/task-ingest/source-reader.js +93 -0
  256. package/dist/task-ingest/spec-builder.d.ts +34 -0
  257. package/dist/task-ingest/spec-builder.js +89 -0
  258. package/dist/task-ingest/wbs-extract.d.ts +50 -0
  259. package/dist/task-ingest/wbs-extract.js +226 -0
  260. package/dist/task-ingest/wbs-parser.d.ts +36 -0
  261. package/dist/task-ingest/wbs-parser.js +170 -0
  262. package/dist/tools/apiTestTool.d.ts +37 -0
  263. package/dist/tools/apiTestTool.js +128 -0
  264. package/dist/tools/ast-tools.d.ts +183 -0
  265. package/dist/tools/ast-tools.js +853 -0
  266. package/dist/tools/browse-tool.d.ts +105 -0
  267. package/dist/tools/browse-tool.js +394 -0
  268. package/dist/tools/credential.d.ts +17 -0
  269. package/dist/tools/credential.js +32 -0
  270. package/dist/tools/dependency-graph.d.ts +23 -0
  271. package/dist/tools/dependency-graph.js +164 -0
  272. package/dist/tools/edit-tool.d.ts +34 -0
  273. package/dist/tools/edit-tool.js +95 -0
  274. package/dist/tools/file-header-manager.d.ts +27 -0
  275. package/dist/tools/file-header-manager.js +153 -0
  276. package/dist/tools/fs-tools.d.ts +154 -0
  277. package/dist/tools/fs-tools.js +337 -0
  278. package/dist/tools/git-tools.d.ts +79 -0
  279. package/dist/tools/git-tools.js +348 -0
  280. package/dist/tools/github-tool.d.ts +48 -0
  281. package/dist/tools/github-tool.js +147 -0
  282. package/dist/tools/globTool.d.ts +20 -0
  283. package/dist/tools/globTool.js +34 -0
  284. package/dist/tools/grepTool.d.ts +19 -0
  285. package/dist/tools/grepTool.js +44 -0
  286. package/dist/tools/index-freshness.d.ts +58 -0
  287. package/dist/tools/index-freshness.js +190 -0
  288. package/dist/tools/index-glob.d.ts +48 -0
  289. package/dist/tools/index-glob.js +175 -0
  290. package/dist/tools/load-skill-tool.d.ts +15 -0
  291. package/dist/tools/load-skill-tool.js +114 -0
  292. package/dist/tools/patch-tools.d.ts +58 -0
  293. package/dist/tools/patch-tools.js +153 -0
  294. package/dist/tools/playwright-tool.d.ts +66 -0
  295. package/dist/tools/playwright-tool.js +121 -0
  296. package/dist/tools/project-detect.d.ts +20 -0
  297. package/dist/tools/project-detect.js +87 -0
  298. package/dist/tools/prompt-guidance.d.ts +22 -0
  299. package/dist/tools/prompt-guidance.js +23 -0
  300. package/dist/tools/scheduleTool.d.ts +19 -0
  301. package/dist/tools/scheduleTool.js +181 -0
  302. package/dist/tools/search-tools.d.ts +27 -0
  303. package/dist/tools/search-tools.js +78 -0
  304. package/dist/tools/sed-tool.d.ts +66 -0
  305. package/dist/tools/sed-tool.js +402 -0
  306. package/dist/tools/shell-result.d.ts +11 -0
  307. package/dist/tools/shell-result.js +1 -0
  308. package/dist/tools/shell-tool.d.ts +45 -0
  309. package/dist/tools/shell-tool.js +141 -0
  310. package/dist/tools/siteCrawlerTool.d.ts +32 -0
  311. package/dist/tools/siteCrawlerTool.js +205 -0
  312. package/dist/tools/tool-registry.d.ts +67 -0
  313. package/dist/tools/tool-registry.js +596 -0
  314. package/dist/tools/validate-tool.d.ts +23 -0
  315. package/dist/tools/validate-tool.js +201 -0
  316. package/dist/tools/workspace-index.d.ts +46 -0
  317. package/dist/tools/workspace-index.js +173 -0
  318. package/dist/types.d.ts +222 -0
  319. package/dist/types.js +7 -0
  320. package/dist/updater/index.d.ts +14 -0
  321. package/dist/updater/index.js +120 -0
  322. package/dist/util/banner.d.ts +25 -0
  323. package/dist/util/banner.js +140 -0
  324. package/dist/util/command-suggester.d.ts +6 -0
  325. package/dist/util/command-suggester.js +25 -0
  326. package/dist/util/confirm-interrupt.d.ts +10 -0
  327. package/dist/util/confirm-interrupt.js +31 -0
  328. package/dist/util/continue-trigger.d.ts +11 -0
  329. package/dist/util/continue-trigger.js +20 -0
  330. package/dist/util/env-info.d.ts +18 -0
  331. package/dist/util/env-info.js +37 -0
  332. package/dist/util/file-access-log.d.ts +35 -0
  333. package/dist/util/file-access-log.js +140 -0
  334. package/dist/util/footer-manager.d.ts +124 -0
  335. package/dist/util/footer-manager.js +195 -0
  336. package/dist/util/footer-renderer.d.ts +67 -0
  337. package/dist/util/footer-renderer.js +319 -0
  338. package/dist/util/footer-state.d.ts +34 -0
  339. package/dist/util/footer-state.js +18 -0
  340. package/dist/util/footer-text.d.ts +51 -0
  341. package/dist/util/footer-text.js +74 -0
  342. package/dist/util/ids.d.ts +1 -0
  343. package/dist/util/ids.js +4 -0
  344. package/dist/util/levenshtein.d.ts +6 -0
  345. package/dist/util/levenshtein.js +34 -0
  346. package/dist/util/logger.d.ts +10 -0
  347. package/dist/util/logger.js +41 -0
  348. package/dist/util/logs.d.ts +26 -0
  349. package/dist/util/logs.js +88 -0
  350. package/dist/util/output-handler.d.ts +89 -0
  351. package/dist/util/output-handler.js +193 -0
  352. package/dist/util/output-interceptor.d.ts +18 -0
  353. package/dist/util/output-interceptor.js +49 -0
  354. package/dist/util/output-paths.d.ts +43 -0
  355. package/dist/util/output-paths.js +121 -0
  356. package/dist/util/package-json.d.ts +6 -0
  357. package/dist/util/package-json.js +36 -0
  358. package/dist/util/process-kill.d.ts +27 -0
  359. package/dist/util/process-kill.js +148 -0
  360. package/dist/util/protocol-error-logger.d.ts +33 -0
  361. package/dist/util/protocol-error-logger.js +73 -0
  362. package/dist/util/redact.d.ts +25 -0
  363. package/dist/util/redact.js +103 -0
  364. package/dist/util/scroll-region-guard.d.ts +33 -0
  365. package/dist/util/scroll-region-guard.js +63 -0
  366. package/dist/util/spinner.d.ts +15 -0
  367. package/dist/util/spinner.js +49 -0
  368. package/dist/util/terminal-output.d.ts +34 -0
  369. package/dist/util/terminal-output.js +1 -0
  370. package/dist/util/terminal-silent.d.ts +6 -0
  371. package/dist/util/terminal-silent.js +20 -0
  372. package/dist/util/terminal.d.ts +56 -0
  373. package/dist/util/terminal.js +124 -0
  374. package/dist/util/text-sanitize.d.ts +8 -0
  375. package/dist/util/text-sanitize.js +45 -0
  376. package/dist/util/thinking-spinner.d.ts +27 -0
  377. package/dist/util/thinking-spinner.js +189 -0
  378. package/dist/util/tool-error-logger.d.ts +33 -0
  379. package/dist/util/tool-error-logger.js +77 -0
  380. package/dist/util/tty.d.ts +13 -0
  381. package/dist/util/tty.js +16 -0
  382. package/dist/util/xcoder-paths.d.ts +56 -0
  383. package/dist/util/xcoder-paths.js +63 -0
  384. package/dist/version.d.ts +2 -0
  385. package/dist/version.js +4 -0
  386. package/dist/worker-agent/to-subtask-node.d.ts +35 -0
  387. package/dist/worker-agent/to-subtask-node.js +41 -0
  388. package/dist/worker-agent/worker-orchestrator.d.ts +104 -0
  389. package/dist/worker-agent/worker-orchestrator.js +201 -0
  390. package/package.json +39 -4
@@ -0,0 +1,279 @@
1
+ import { buildAgentSystemPrompt, parseReactMessage } from "../protocol/react-contract.js";
2
+ import { buildToolManifest, dispatchTool } from "../tools/tool-registry.js";
3
+ import { getOrBuildIndex } from "../tools/workspace-index.js";
4
+ import { detectProjectCommands } from "../tools/project-detect.js";
5
+ import { getEnvironmentInfo } from "../util/env-info.js";
6
+ import { log } from "../util/logger.js";
7
+ import { startThinking } from "../util/terminal.js";
8
+ import { isProtocolErrorLoggingEnabled, logProtocolError } from "../util/protocol-error-logger.js";
9
+ import { isToolErrorLoggingEnabled, logToolError } from "../util/tool-error-logger.js";
10
+ import { DuplicateActionDetector } from "./duplicate-detector.js";
11
+ import { recordLesson } from "../orchestrator/lesson-manager.js";
12
+ const SAMURAI_DIRECTIVE = `Act as a general-purpose AI assistant with full access to the tool suite. Use tools when they give a better answer than guessing. Be direct and concrete. Prefer glob/grep/read_file over shell commands for file operations. Respect the shell denylist. Surface the OS platform in the first response.`.trim();
13
+ const SAMURAI_SKILLS = [
14
+ "File Management: reading, writing, editing, globbing, grepping files across the workspace.",
15
+ "OS awareness: Windows, Linux, and macOS — adapting shell syntax and paths per platform.",
16
+ "Security: never passing raw secrets; using credentialRef for credential hygiene.",
17
+ "Directness: answering the question asked before volunteering tangential information.",
18
+ ];
19
+ /**
20
+ * A standalone single-agent ReAct loop. Loads all registered tools, runs a
21
+ * conversation loop against the LLM, dispatches tool calls through the shared
22
+ * tool registry, and returns a result (or keeps looping in chat mode).
23
+ * Not coupled to SubtaskNode, TaskSpec, or the orchestrator.
24
+ */
25
+ export class SamuraiAgent {
26
+ opts;
27
+ constructor(opts) {
28
+ this.opts = opts;
29
+ }
30
+ // ── System prompt (built once per run to amortise index/project-detection cost) ──
31
+ async buildPrompt(goal) {
32
+ const index = await getOrBuildIndex(this.opts.workspaceRoot);
33
+ const detectedCommands = await detectProjectCommands(this.opts.workspaceRoot, index);
34
+ const environment = getEnvironmentInfo();
35
+ const promptOpts = {
36
+ agentName: "samurai",
37
+ roleDescription: SAMURAI_DIRECTIVE,
38
+ directive: SAMURAI_DIRECTIVE,
39
+ skills: SAMURAI_SKILLS,
40
+ tools: buildToolManifest({ lessonLearned: this.opts.lessonLearned ?? false }),
41
+ environment,
42
+ detectedCommands,
43
+ goal,
44
+ upstreamContext: this.opts.packageJsonContext ?? undefined,
45
+ isStandalone: true,
46
+ lessonContext: this.opts.lessonContext,
47
+ };
48
+ return buildAgentSystemPrompt(promptOpts);
49
+ }
50
+ // ── Core ReAct loop ──
51
+ async loop(systemPrompt, transcript, maxIterations, onStep, onTokens) {
52
+ const raoTrace = [];
53
+ const filesTouched = new Set();
54
+ const cumulative = { inputTokens: 0, outputTokens: 0 };
55
+ const hasCallbacks = !!onStep || !!onTokens;
56
+ const dupDetector = new DuplicateActionDetector();
57
+ for (let i = 0; i < maxIterations; i++) {
58
+ let spinner = hasCallbacks ? null : startThinking("samurai");
59
+ let raw;
60
+ let completion;
61
+ try {
62
+ completion = await this.opts.llm.complete(systemPrompt, transcript);
63
+ raw = completion.text;
64
+ cumulative.inputTokens += completion.usage.inputTokens;
65
+ cumulative.outputTokens += completion.usage.outputTokens;
66
+ onTokens?.(cumulative);
67
+ }
68
+ catch (e) {
69
+ const message = e.message;
70
+ if (spinner)
71
+ spinner.fail(`llm_error: ${message}`);
72
+ transcript.push({ role: "user", content: `Observation: llm_error: ${message}\nTry again.` });
73
+ const step = { thought: "(llm call failed)", action: null, observation: `llm_error: ${message}` };
74
+ raoTrace.push(step);
75
+ onStep?.(step);
76
+ continue;
77
+ }
78
+ transcript.push({ role: "assistant", content: raw });
79
+ const parsed = parseReactMessage(raw);
80
+ if (!parsed.ok) {
81
+ if (spinner)
82
+ spinner.stop("(unparseable response)");
83
+ const errObservation = `protocol_error: ${parsed.error}`;
84
+ if (this.opts.protocolErrorLog || isProtocolErrorLoggingEnabled()) {
85
+ logProtocolError({
86
+ ts: new Date().toISOString(),
87
+ taskId: "samurai",
88
+ agentId: "samurai",
89
+ iteration: i,
90
+ error: parsed.error,
91
+ raw,
92
+ model: completion.model ?? "unknown",
93
+ stopReason: completion.stopReason,
94
+ inputTokens: completion.usage.inputTokens,
95
+ outputTokens: completion.usage.outputTokens,
96
+ });
97
+ }
98
+ transcript.push({ role: "user", content: `Observation: ${errObservation}\nRe-read the contract and try again.` });
99
+ const step = { thought: "(unparseable response)", action: null, observation: errObservation };
100
+ raoTrace.push(step);
101
+ onStep?.(step);
102
+ continue;
103
+ }
104
+ const { thought, action, final_answer } = parsed.message;
105
+ if (spinner)
106
+ spinner.stop(thought);
107
+ if (final_answer) {
108
+ const step = { thought, action: null, observation: "final_answer submitted" };
109
+ raoTrace.push(step);
110
+ onStep?.(step);
111
+ return {
112
+ summary: final_answer.summary,
113
+ deliverable: final_answer.deliverable,
114
+ filesTouched: [...filesTouched, ...(final_answer.files_touched ?? [])],
115
+ raoTrace,
116
+ tokenUsage: cumulative,
117
+ iterations: i + 1,
118
+ };
119
+ }
120
+ // Prose-only recovery: parseReactMessage's Layer 4a/4b can return
121
+ // { action: null, final_answer: null } when the model sends pure
122
+ // reasoning prose. Treat the thought as an observation and continue.
123
+ if (!action) {
124
+ const obs = `prose_recovery: no action or final_answer in response — model sent reasoning prose only. Thought: ${thought}`;
125
+ const step = { thought, action: null, observation: obs };
126
+ raoTrace.push(step);
127
+ onStep?.(step);
128
+ transcript.push({ role: "user", content: `Observation: ${obs}\nYou must respond with either an action or a final_answer.` });
129
+ continue;
130
+ }
131
+ const { tool, input } = action;
132
+ const dup = dupDetector.check(thought, tool, input, i + 1);
133
+ if (dup.stuck) {
134
+ // Programmatic lesson recording (samurai-driven): when the agent
135
+ // gets stuck, record the pattern so the next run benefits.
136
+ if (this.opts.lessonLearned) {
137
+ recordLesson(this.opts.workspaceRoot, {
138
+ source: "samurai",
139
+ taskId: "N/A",
140
+ tags: ["stuck-loop", "samurai"],
141
+ context: `Samurai agent got stuck in a repeated action loop after ${i + 1} iterations. The duplicate detector flagged ${dupDetector.duplicateCount} duplicate actions.`,
142
+ lesson: `When a Samurai agent gets stuck in a loop: check the observation text for actionable hints, reduce the max iterations, and consider re-running with a clearer goal.`,
143
+ }).catch(() => { });
144
+ }
145
+ return {
146
+ summary: `stuck in a repeated action loop: ${dupDetector.duplicateCount} duplicate actions detected — aborted after ${i + 1} iterations instead of running to the full ${maxIterations}-iteration cap.`,
147
+ deliverable: null,
148
+ filesTouched: [...filesTouched],
149
+ raoTrace,
150
+ tokenUsage: cumulative,
151
+ iterations: i + 1,
152
+ stuckLoop: true,
153
+ };
154
+ }
155
+ let result;
156
+ try {
157
+ result = await dispatchTool(this.opts.workspaceRoot, tool, input, undefined);
158
+ }
159
+ catch (e) {
160
+ result = { tool, ok: false, output: { error: `unexpected tool failure: ${e.message}` } };
161
+ }
162
+ // log tool errors when --debug-tools is active
163
+ if (!result.ok && isToolErrorLoggingEnabled()) {
164
+ logToolError({
165
+ ts: new Date().toISOString(),
166
+ tool,
167
+ error: result.output?.error ?? "unknown",
168
+ ok: false,
169
+ input: JSON.stringify(input),
170
+ iteration: i + 1,
171
+ });
172
+ }
173
+ if ((tool === "write_file" || tool === "edit_file") && result.ok) {
174
+ const out = result.output;
175
+ if (out.relPath)
176
+ filesTouched.add(out.relPath);
177
+ }
178
+ if (tool === "sed_tool" && result.ok) {
179
+ const out = result.output;
180
+ if (out.results) {
181
+ for (const r of out.results) {
182
+ if (r.matched)
183
+ filesTouched.add(r.relPath);
184
+ }
185
+ }
186
+ }
187
+ const observation = JSON.stringify(result.output).slice(0, 4000);
188
+ const step = { thought, action: { tool, input }, observation };
189
+ raoTrace.push(step);
190
+ onStep?.(step);
191
+ transcript.push({ role: "user", content: `Observation: ${observation}` });
192
+ }
193
+ return {
194
+ summary: `did not reach a final_answer within ${maxIterations} iterations`,
195
+ deliverable: null,
196
+ filesTouched: [...filesTouched],
197
+ raoTrace,
198
+ tokenUsage: cumulative,
199
+ iterations: maxIterations,
200
+ };
201
+ }
202
+ /**
203
+ * Run a single agent invocation for a given goal. Returns when the agent
204
+ * calls final_answer or exhausts iterations.
205
+ */
206
+ async runOnce(goal, opts) {
207
+ const maxIterations = this.opts.maxIterations ?? 200;
208
+ const systemPrompt = await this.buildPrompt(goal);
209
+ const transcript = [
210
+ { role: "user", content: "Begin. Respond with your first contract message now." },
211
+ ];
212
+ return this.loop(systemPrompt, transcript, maxIterations, opts?.onStep, opts?.onTokens);
213
+ }
214
+ /**
215
+ * Start an interactive REPL session. Reads lines from stdin, runs the agent
216
+ * loop per turn, and prints the result. The system prompt is built once
217
+ * and reused across turns; the transcript accumulates the full conversation
218
+ * (not cleared between user lines).
219
+ */
220
+ async runChat(onChunk) {
221
+ const maxIterations = this.opts.maxIterations ?? 200;
222
+ const systemPrompt = await this.buildPrompt();
223
+ const transcript = [];
224
+ // Use Node.js readline for a cross-platform line-by-line interface.
225
+ const readline = await import("node:readline");
226
+ const rl = readline.createInterface({
227
+ input: process.stdin,
228
+ output: process.stdout,
229
+ });
230
+ log.ok("samurai chat — type /exit or press Ctrl+C to quit.");
231
+ log.dim(`workspace: ${this.opts.workspaceRoot}`);
232
+ log.dim(`model: ${this.opts.model ?? process.env.XCODER_MODEL ?? "deepseek-chat"}`);
233
+ log.raw("");
234
+ // Wrap readline in an async iterator so we can await each line.
235
+ const getLine = () => new Promise((resolve) => {
236
+ rl.question("samurai> ", (answer) => {
237
+ resolve(answer.trim());
238
+ });
239
+ });
240
+ process.stdout.write("samurai> ");
241
+ while (true) {
242
+ const line = await getLine();
243
+ if (!line) {
244
+ // Ctrl+C or empty on exit
245
+ rl.close();
246
+ break;
247
+ }
248
+ const trimmed = line.trim();
249
+ if (trimmed === "/exit" || trimmed === "/quit") {
250
+ rl.close();
251
+ break;
252
+ }
253
+ if (!trimmed) {
254
+ process.stdout.write("samurai> ");
255
+ continue;
256
+ }
257
+ // Inject user message as a goal for this turn
258
+ transcript.push({ role: "user", content: trimmed });
259
+ log.dim("thinking…");
260
+ const result = await this.loop(systemPrompt, transcript, maxIterations);
261
+ // Merge filesTouched from this run
262
+ if (result.summary) {
263
+ log.ok(result.summary);
264
+ }
265
+ if (result.deliverable !== null && result.deliverable !== undefined) {
266
+ log.raw(JSON.stringify(result.deliverable, null, 2));
267
+ }
268
+ log.dim(`iterations: ${result.iterations} tokens: ${result.tokenUsage.inputTokens} in / ${result.tokenUsage.outputTokens} out`);
269
+ log.raw("");
270
+ if (onChunk) {
271
+ onChunk(result.summary);
272
+ if (result.deliverable)
273
+ onChunk(JSON.stringify(result.deliverable));
274
+ }
275
+ }
276
+ rl.close();
277
+ log.ok("samurai chat ended.");
278
+ }
279
+ }
@@ -0,0 +1,56 @@
1
+ import type { SubtaskNode, SubtaskResult } from "../types.js";
2
+ import type { WksProtocolMap } from "../protocol/wks-protocol-manager.js";
3
+ import { LlmClient } from "../llm/client.js";
4
+ import { type RoleDirective } from "../skills/directives.js";
5
+ export interface SubAgentOptions {
6
+ taskId: string;
7
+ workspaceRoot: string;
8
+ llm: LlmClient;
9
+ maxIterations?: number;
10
+ /** Appended to the subtask goal on a healing retry — see orchestrator/healing.ts. */
11
+ healingHint?: string;
12
+ /** Optional per-role protocol overrides from wks_protocol.md. */
13
+ protocolOverrides?: WksProtocolMap;
14
+ /**
15
+ * If set, overrides the role directive and/or skills (the system prompt's
16
+ * "Your directive" block and "## Relevant skills" section).
17
+ * - A plain `string` uses it as the directive text, skills fall back to
18
+ * ROLE_DIRECTIVES[subtask.role].skills (backward compat).
19
+ * - A `RoleDirective` object carries both `directive` and `skills`,
20
+ * enabling a full override of both. If the object has no `skills`
21
+ * array, skills also fall back to the role defaults.
22
+ * Allows the --ba path to inject a specialized directive without changing
23
+ * ROLE_DIRECTIVES, which existing callers (orchestrator, healing, etc.) rely on.
24
+ */
25
+ directiveOverride?: string | RoleDirective;
26
+ /** Enable diagnostic logging of protocol_error parse failures to protocol_error.log. */
27
+ protocolErrorLog?: boolean;
28
+ /** When true, register record_lesson tool and inject lesson context. */
29
+ lessonLearned?: boolean;
30
+ /** Pre-loaded lesson content (avoid re-reading per Sub Agent). */
31
+ lessonContext?: string;
32
+ /** When true, use SilentTerminal to suppress console output. */
33
+ quiet?: boolean;
34
+ }
35
+ /**
36
+ * The "Instance Agent" of the design brief, mapped 1:1 onto Xcoder SDLC's Sub
37
+ * Agent: role and engine are config on the subtask node (`role`, `engine`),
38
+ * not baked into a special-purpose class.
39
+ *
40
+ * Isolation contract: `run()` NEVER throws. Every failure mode inside the
41
+ * loop — an LLM API error, a tool exception that somehow escaped
42
+ * `dispatchTool`'s own try/catch, an unparseable response — is caught,
43
+ * logged to `sys.log`, surfaced to the terminal, and turned into either a
44
+ * recoverable observation (the loop continues) or, if truly fatal, a
45
+ * `crashed: true` result the Master Orchestrator can route through its
46
+ * normal bounded healing/escalation path. The caller in `orchestrator/
47
+ * swarm.ts` still wraps this in its own try/catch as defense in depth, but
48
+ * this class is designed not to need that safety net.
49
+ */
50
+ export declare class SubAgent {
51
+ private opts;
52
+ constructor(opts: SubAgentOptions);
53
+ private get term();
54
+ run(subtask: SubtaskNode): Promise<SubtaskResult>;
55
+ private crashResult;
56
+ }