atabey 0.0.37 → 0.1.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 (513) hide show
  1. package/ATABEY.md +1 -1
  2. package/PRIVACY.md +2 -2
  3. package/README.md +58 -46
  4. package/bin/completion.sh +1 -1
  5. package/dist/atabey/src/cli/commands/api.d.ts +1 -0
  6. package/dist/atabey/src/cli/commands/api.js +90 -0
  7. package/dist/atabey/src/cli/commands/api.js.map +1 -0
  8. package/dist/atabey/src/cli/commands/audit.d.ts +9 -0
  9. package/dist/atabey/src/cli/commands/audit.js +73 -0
  10. package/dist/atabey/src/cli/commands/audit.js.map +1 -0
  11. package/dist/atabey/src/cli/commands/check.js +15 -6
  12. package/dist/atabey/src/cli/commands/check.js.map +1 -1
  13. package/dist/atabey/src/cli/commands/contract.js +51 -8
  14. package/dist/atabey/src/cli/commands/contract.js.map +1 -1
  15. package/dist/atabey/src/cli/commands/coverage.js +17 -12
  16. package/dist/atabey/src/cli/commands/coverage.js.map +1 -1
  17. package/dist/atabey/src/cli/commands/dashboard.js +101 -16
  18. package/dist/atabey/src/cli/commands/dashboard.js.map +1 -1
  19. package/dist/atabey/src/cli/commands/db.d.ts +1 -0
  20. package/dist/atabey/src/cli/commands/db.js +58 -0
  21. package/dist/atabey/src/cli/commands/db.js.map +1 -0
  22. package/dist/atabey/src/cli/commands/hitl.js +2 -1
  23. package/dist/atabey/src/cli/commands/hitl.js.map +1 -1
  24. package/dist/atabey/src/cli/commands/index-codebase.js +10 -0
  25. package/dist/atabey/src/cli/commands/index-codebase.js.map +1 -1
  26. package/dist/atabey/src/cli/commands/init/scaffold-app.js +82 -7
  27. package/dist/atabey/src/cli/commands/init/scaffold-app.js.map +1 -1
  28. package/dist/atabey/src/cli/commands/init/scaffold-core.js +3 -3
  29. package/dist/atabey/src/cli/commands/init/scaffold-core.js.map +1 -1
  30. package/dist/atabey/src/cli/commands/init/scaffold-docs.js +1 -1
  31. package/dist/atabey/src/cli/commands/init/scaffold-docs.js.map +1 -1
  32. package/dist/atabey/src/cli/commands/init/scaffold-ops.js +47 -7
  33. package/dist/atabey/src/cli/commands/init/scaffold-ops.js.map +1 -1
  34. package/dist/atabey/src/cli/commands/init/scaffold-standards.js +8 -15
  35. package/dist/atabey/src/cli/commands/init/scaffold-standards.js.map +1 -1
  36. package/dist/atabey/src/cli/commands/init.js +28 -62
  37. package/dist/atabey/src/cli/commands/init.js.map +1 -1
  38. package/dist/atabey/src/cli/commands/lint.d.ts +2 -1
  39. package/dist/atabey/src/cli/commands/lint.js +20 -1
  40. package/dist/atabey/src/cli/commands/lint.js.map +1 -1
  41. package/dist/atabey/src/cli/commands/mcp.js +71 -33
  42. package/dist/atabey/src/cli/commands/mcp.js.map +1 -1
  43. package/dist/atabey/src/cli/commands/orchestrate.d.ts +4 -4
  44. package/dist/atabey/src/cli/commands/orchestrate.js +1 -1
  45. package/dist/atabey/src/cli/commands/orchestrate.js.map +1 -1
  46. package/dist/atabey/src/cli/commands/plan.d.ts +1 -1
  47. package/dist/atabey/src/cli/commands/plan.js +10 -0
  48. package/dist/atabey/src/cli/commands/plan.js.map +1 -1
  49. package/dist/atabey/src/cli/commands/quickstart.js +1 -1
  50. package/dist/atabey/src/cli/commands/quickstart.js.map +1 -1
  51. package/dist/atabey/src/cli/commands/script.js +4 -0
  52. package/dist/atabey/src/cli/commands/script.js.map +1 -1
  53. package/dist/atabey/src/cli/commands/secrets.d.ts +1 -0
  54. package/dist/atabey/src/cli/commands/secrets.js +146 -0
  55. package/dist/atabey/src/cli/commands/secrets.js.map +1 -0
  56. package/dist/atabey/src/cli/commands/worktree.d.ts +10 -0
  57. package/dist/atabey/src/cli/commands/worktree.js +90 -0
  58. package/dist/atabey/src/cli/commands/worktree.js.map +1 -0
  59. package/dist/atabey/src/cli/index.js +75 -16
  60. package/dist/atabey/src/cli/index.js.map +1 -1
  61. package/dist/atabey/src/cli/platforms/core.d.ts +0 -1
  62. package/dist/atabey/src/cli/platforms/core.js +0 -14
  63. package/dist/atabey/src/cli/platforms/core.js.map +1 -1
  64. package/dist/atabey/src/cli/platforms/index.d.ts +2 -2
  65. package/dist/atabey/src/cli/platforms/index.js +1 -1
  66. package/dist/atabey/src/cli/platforms/index.js.map +1 -1
  67. package/dist/atabey/src/cli/platforms/paths.d.ts +0 -2
  68. package/dist/atabey/src/cli/platforms/paths.js +1 -8
  69. package/dist/atabey/src/cli/platforms/paths.js.map +1 -1
  70. package/dist/atabey/src/cli/platforms/scaffold.js +1 -1
  71. package/dist/atabey/src/cli/platforms/scaffold.js.map +1 -1
  72. package/dist/atabey/src/cli/utils/claude.js +6 -0
  73. package/dist/atabey/src/cli/utils/claude.js.map +1 -1
  74. package/dist/atabey/src/cli/utils/compliance.d.ts +1 -1
  75. package/dist/atabey/src/cli/utils/compliance.js +33 -20
  76. package/dist/atabey/src/cli/utils/compliance.js.map +1 -1
  77. package/dist/atabey/src/cli/utils/fs.js +1 -1
  78. package/dist/atabey/src/cli/utils/fs.js.map +1 -1
  79. package/dist/atabey/src/cli/utils/i18n.js +2 -2
  80. package/dist/atabey/src/cli/utils/i18n.js.map +1 -1
  81. package/dist/atabey/src/cli/utils/memory.js +27 -16
  82. package/dist/atabey/src/cli/utils/memory.js.map +1 -1
  83. package/dist/atabey/src/cli/utils/pkg.js +5 -2
  84. package/dist/atabey/src/cli/utils/pkg.js.map +1 -1
  85. package/dist/atabey/src/cli/utils/quality.d.ts +1 -1
  86. package/dist/atabey/src/cli/utils/ui.d.ts +1 -1
  87. package/dist/atabey/src/cli/utils/ui.js +1 -1
  88. package/dist/atabey/src/modules/agents/definitions.d.ts +1 -1
  89. package/dist/atabey/src/modules/agents/definitions.js +13 -9
  90. package/dist/atabey/src/modules/agents/definitions.js.map +1 -1
  91. package/dist/atabey/src/modules/agents/registry/analyst.js +0 -2
  92. package/dist/atabey/src/modules/agents/registry/analyst.js.map +1 -1
  93. package/dist/atabey/src/modules/agents/registry/architect.js +0 -2
  94. package/dist/atabey/src/modules/agents/registry/architect.js.map +1 -1
  95. package/dist/atabey/src/modules/agents/registry/backend.js +0 -2
  96. package/dist/atabey/src/modules/agents/registry/backend.js.map +1 -1
  97. package/dist/atabey/src/modules/agents/registry/database.js +0 -2
  98. package/dist/atabey/src/modules/agents/registry/database.js.map +1 -1
  99. package/dist/atabey/src/modules/agents/registry/devops.js +0 -2
  100. package/dist/atabey/src/modules/agents/registry/devops.js.map +1 -1
  101. package/dist/atabey/src/modules/agents/registry/explorer.js +0 -2
  102. package/dist/atabey/src/modules/agents/registry/explorer.js.map +1 -1
  103. package/dist/atabey/src/modules/agents/registry/frontend.js +0 -2
  104. package/dist/atabey/src/modules/agents/registry/frontend.js.map +1 -1
  105. package/dist/atabey/src/modules/agents/registry/git.js +0 -2
  106. package/dist/atabey/src/modules/agents/registry/git.js.map +1 -1
  107. package/dist/atabey/src/modules/agents/registry/manager.js +0 -3
  108. package/dist/atabey/src/modules/agents/registry/manager.js.map +1 -1
  109. package/dist/atabey/src/modules/agents/registry/mobile.js +0 -2
  110. package/dist/atabey/src/modules/agents/registry/mobile.js.map +1 -1
  111. package/dist/atabey/src/modules/agents/registry/native.js +0 -2
  112. package/dist/atabey/src/modules/agents/registry/native.js.map +1 -1
  113. package/dist/atabey/src/modules/agents/registry/quality.js +3 -5
  114. package/dist/atabey/src/modules/agents/registry/quality.js.map +1 -1
  115. package/dist/atabey/src/modules/agents/registry/security.js +0 -2
  116. package/dist/atabey/src/modules/agents/registry/security.js.map +1 -1
  117. package/dist/atabey/src/modules/agents/types.d.ts +0 -1
  118. package/dist/atabey/src/modules/audit/export.d.ts +22 -0
  119. package/dist/atabey/src/modules/audit/export.js +58 -0
  120. package/dist/atabey/src/modules/audit/export.js.map +1 -0
  121. package/dist/atabey/src/modules/contracts/api.d.ts +2 -2
  122. package/dist/atabey/src/modules/engines/agent-executor.js +37 -0
  123. package/dist/atabey/src/modules/engines/agent-executor.js.map +1 -1
  124. package/dist/atabey/src/modules/engines/evaluation-engine.js +10 -0
  125. package/dist/atabey/src/modules/engines/evaluation-engine.js.map +1 -1
  126. package/dist/atabey/src/modules/engines/quality-gate.js +2 -2
  127. package/dist/atabey/src/modules/engines/quality-gate.js.map +1 -1
  128. package/dist/atabey/src/modules/engines/routing-engine.js +1 -1
  129. package/dist/atabey/src/modules/engines/routing-engine.js.map +1 -1
  130. package/dist/atabey/src/modules/memory/code-graph.d.ts +44 -0
  131. package/dist/atabey/src/modules/memory/code-graph.js +180 -0
  132. package/dist/atabey/src/modules/memory/code-graph.js.map +1 -0
  133. package/dist/atabey/src/modules/memory/context-assembler.d.ts +50 -0
  134. package/dist/atabey/src/modules/memory/context-assembler.js +146 -0
  135. package/dist/atabey/src/modules/memory/context-assembler.js.map +1 -0
  136. package/dist/atabey/src/modules/providers/definitions.js +78 -41
  137. package/dist/atabey/src/modules/providers/definitions.js.map +1 -1
  138. package/dist/atabey/src/modules/providers/shared.d.ts +1 -1
  139. package/dist/atabey/src/modules/providers/shared.js +34 -15
  140. package/dist/atabey/src/modules/providers/shared.js.map +1 -1
  141. package/dist/atabey/src/modules/providers/types.d.ts +0 -4
  142. package/dist/atabey/src/modules/runtime/adapters/headless-cli.d.ts +35 -0
  143. package/dist/atabey/src/modules/runtime/adapters/headless-cli.js +115 -0
  144. package/dist/atabey/src/modules/runtime/adapters/headless-cli.js.map +1 -0
  145. package/dist/atabey/src/modules/runtime/adapters/index.d.ts +2 -0
  146. package/dist/atabey/src/modules/runtime/adapters/index.js +3 -0
  147. package/dist/atabey/src/modules/runtime/adapters/index.js.map +1 -0
  148. package/dist/atabey/src/modules/runtime/adapters/types.d.ts +48 -0
  149. package/dist/atabey/src/modules/runtime/adapters/types.js +12 -0
  150. package/dist/atabey/src/modules/runtime/adapters/types.js.map +1 -0
  151. package/dist/atabey/src/modules/runtime/agent-runtime.d.ts +54 -0
  152. package/dist/atabey/src/modules/runtime/agent-runtime.js +203 -0
  153. package/dist/atabey/src/modules/runtime/agent-runtime.js.map +1 -0
  154. package/dist/atabey/src/modules/runtime/dispatcher.d.ts +75 -0
  155. package/dist/atabey/src/modules/runtime/dispatcher.js +255 -0
  156. package/dist/atabey/src/modules/runtime/dispatcher.js.map +1 -0
  157. package/dist/atabey/src/modules/runtime/evidence.d.ts +39 -0
  158. package/dist/atabey/src/modules/runtime/evidence.js +53 -0
  159. package/dist/atabey/src/modules/runtime/evidence.js.map +1 -0
  160. package/dist/atabey/src/modules/runtime/worktree.d.ts +44 -0
  161. package/dist/atabey/src/modules/runtime/worktree.js +259 -0
  162. package/dist/atabey/src/modules/runtime/worktree.js.map +1 -0
  163. package/dist/atabey/src/modules/skills/adapter-skills.d.ts +0 -29
  164. package/dist/atabey/src/modules/skills/adapter-skills.js +0 -61
  165. package/dist/atabey/src/modules/skills/adapter-skills.js.map +1 -1
  166. package/dist/atabey/src/modules/skills/definitions.d.ts +1 -1
  167. package/dist/atabey/src/modules/skills/definitions.js +8 -8
  168. package/dist/atabey/src/schema/agent-lifecycle.d.ts +36 -0
  169. package/dist/atabey/src/schema/agent-lifecycle.js +96 -0
  170. package/dist/atabey/src/schema/agent-lifecycle.js.map +1 -0
  171. package/dist/atabey-mcp/src/mcp/utils/ast-scan.d.ts +21 -0
  172. package/dist/atabey-mcp/src/mcp/utils/ast-scan.js +64 -0
  173. package/dist/atabey-mcp/src/mcp/utils/ast-scan.js.map +1 -0
  174. package/dist/atabey-mcp/src/mcp/utils/auth.d.ts +73 -0
  175. package/dist/atabey-mcp/src/mcp/utils/auth.js +316 -0
  176. package/dist/atabey-mcp/src/mcp/utils/auth.js.map +1 -0
  177. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.d.ts +83 -0
  178. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js +418 -0
  179. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js.map +1 -0
  180. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.d.ts +85 -0
  181. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js +296 -0
  182. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js.map +1 -0
  183. package/dist/atabey-mcp/src/mcp/utils/discipline.d.ts +72 -0
  184. package/dist/atabey-mcp/src/mcp/utils/discipline.js +385 -0
  185. package/dist/atabey-mcp/src/mcp/utils/discipline.js.map +1 -0
  186. package/dist/atabey-mcp/src/mcp/utils/finops.d.ts +81 -0
  187. package/dist/atabey-mcp/src/mcp/utils/finops.js +274 -0
  188. package/dist/atabey-mcp/src/mcp/utils/finops.js.map +1 -0
  189. package/dist/atabey-mcp/src/mcp/utils/loop-detector.d.ts +106 -0
  190. package/dist/atabey-mcp/src/mcp/utils/loop-detector.js +419 -0
  191. package/dist/atabey-mcp/src/mcp/utils/loop-detector.js.map +1 -0
  192. package/dist/atabey-mcp/src/mcp/utils/rules-engine.d.ts +80 -0
  193. package/dist/atabey-mcp/src/mcp/utils/rules-engine.js +296 -0
  194. package/dist/atabey-mcp/src/mcp/utils/rules-engine.js.map +1 -0
  195. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.d.ts +133 -0
  196. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js +400 -0
  197. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js.map +1 -0
  198. package/dist/atabey-mcp/src/shared/logger.d.ts +1 -0
  199. package/dist/atabey-mcp/src/shared/logger.js +2 -0
  200. package/dist/atabey-mcp/src/shared/logger.js.map +1 -0
  201. package/dist/atabey-mcp/src/shared/pii.d.ts +1 -0
  202. package/dist/atabey-mcp/src/shared/pii.js +2 -0
  203. package/dist/atabey-mcp/src/shared/pii.js.map +1 -0
  204. package/dist/atabey-mcp/src/shared/storage.d.ts +2 -0
  205. package/dist/atabey-mcp/src/shared/storage.js +3 -0
  206. package/dist/atabey-mcp/src/shared/storage.js.map +1 -0
  207. package/dist/shared/src/agent-identity.d.ts +1 -0
  208. package/dist/shared/src/agent-identity.js +2 -0
  209. package/dist/shared/src/agent-identity.js.map +1 -0
  210. package/dist/shared/src/api-catalog.d.ts +1 -0
  211. package/dist/shared/src/api-catalog.js +2 -0
  212. package/dist/shared/src/api-catalog.js.map +1 -0
  213. package/dist/shared/src/audit-chain.d.ts +1 -51
  214. package/dist/shared/src/audit-chain.js +1 -84
  215. package/dist/shared/src/audit-chain.js.map +1 -1
  216. package/dist/shared/src/audit.d.ts +1 -113
  217. package/dist/shared/src/audit.js +1 -284
  218. package/dist/shared/src/audit.js.map +1 -1
  219. package/dist/shared/src/constants.d.ts +1 -152
  220. package/dist/shared/src/constants.js +1 -215
  221. package/dist/shared/src/constants.js.map +1 -1
  222. package/dist/shared/src/database.d.ts +1 -5
  223. package/dist/shared/src/database.js +1 -12
  224. package/dist/shared/src/database.js.map +1 -1
  225. package/dist/shared/src/errors.d.ts +1 -46
  226. package/dist/shared/src/errors.js +1 -68
  227. package/dist/shared/src/errors.js.map +1 -1
  228. package/dist/shared/src/file-lock.d.ts +1 -88
  229. package/dist/shared/src/file-lock.js +1 -250
  230. package/dist/shared/src/file-lock.js.map +1 -1
  231. package/dist/shared/src/fs.d.ts +1 -9
  232. package/dist/shared/src/fs.js +1 -53
  233. package/dist/shared/src/fs.js.map +1 -1
  234. package/dist/shared/src/index.d.ts +2 -22
  235. package/dist/shared/src/index.js +2 -22
  236. package/dist/shared/src/index.js.map +1 -1
  237. package/dist/shared/src/job-queue.d.ts +1 -53
  238. package/dist/shared/src/job-queue.js +1 -126
  239. package/dist/shared/src/job-queue.js.map +1 -1
  240. package/dist/shared/src/lock.d.ts +1 -82
  241. package/dist/shared/src/lock.js +1 -158
  242. package/dist/shared/src/lock.js.map +1 -1
  243. package/dist/shared/src/logger.d.ts +1 -30
  244. package/dist/shared/src/logger.js +1 -126
  245. package/dist/shared/src/logger.js.map +1 -1
  246. package/dist/shared/src/memory-prune.d.ts +1 -0
  247. package/dist/shared/src/memory-prune.js +2 -0
  248. package/dist/shared/src/memory-prune.js.map +1 -0
  249. package/dist/shared/src/migrations.d.ts +1 -0
  250. package/dist/shared/src/migrations.js +2 -0
  251. package/dist/shared/src/migrations.js.map +1 -0
  252. package/dist/shared/src/modules/agent/agent-identity.d.ts +34 -0
  253. package/dist/shared/src/modules/agent/agent-identity.js +77 -0
  254. package/dist/shared/src/modules/agent/agent-identity.js.map +1 -0
  255. package/dist/shared/src/modules/agent/api-catalog.d.ts +57 -0
  256. package/dist/shared/src/modules/agent/api-catalog.js +254 -0
  257. package/dist/shared/src/modules/agent/api-catalog.js.map +1 -0
  258. package/dist/shared/src/modules/agent/index.d.ts +3 -0
  259. package/dist/shared/src/modules/agent/index.js +4 -0
  260. package/dist/shared/src/modules/agent/index.js.map +1 -0
  261. package/dist/shared/src/modules/agent/tokenizer.d.ts +54 -0
  262. package/dist/shared/src/modules/agent/tokenizer.js +272 -0
  263. package/dist/shared/src/modules/agent/tokenizer.js.map +1 -0
  264. package/dist/shared/src/modules/concurrency/file-lock.d.ts +93 -0
  265. package/dist/shared/src/modules/concurrency/file-lock.js +240 -0
  266. package/dist/shared/src/modules/concurrency/file-lock.js.map +1 -0
  267. package/dist/shared/src/modules/concurrency/index.d.ts +6 -0
  268. package/dist/shared/src/modules/concurrency/index.js +7 -0
  269. package/dist/shared/src/modules/concurrency/index.js.map +1 -0
  270. package/dist/shared/src/modules/concurrency/job-queue.d.ts +76 -0
  271. package/dist/shared/src/modules/concurrency/job-queue.js +200 -0
  272. package/dist/shared/src/modules/concurrency/job-queue.js.map +1 -0
  273. package/dist/shared/src/modules/concurrency/lock.d.ts +82 -0
  274. package/dist/shared/src/modules/concurrency/lock.js +159 -0
  275. package/dist/shared/src/modules/concurrency/lock.js.map +1 -0
  276. package/dist/shared/src/modules/concurrency/resilience.d.ts +84 -0
  277. package/dist/shared/src/modules/concurrency/resilience.js +217 -0
  278. package/dist/shared/src/modules/concurrency/resilience.js.map +1 -0
  279. package/dist/shared/src/modules/concurrency/worker-pool.d.ts +52 -0
  280. package/dist/shared/src/modules/concurrency/worker-pool.js +229 -0
  281. package/dist/shared/src/modules/concurrency/worker-pool.js.map +1 -0
  282. package/dist/shared/src/modules/concurrency/worker-thread.d.ts +21 -0
  283. package/dist/shared/src/modules/concurrency/worker-thread.js +67 -0
  284. package/dist/shared/src/modules/concurrency/worker-thread.js.map +1 -0
  285. package/dist/shared/src/modules/index.d.ts +14 -0
  286. package/dist/shared/src/modules/index.js +15 -0
  287. package/dist/shared/src/modules/index.js.map +1 -0
  288. package/dist/shared/src/modules/observability/audit-chain.d.ts +80 -0
  289. package/dist/shared/src/modules/observability/audit-chain.js +262 -0
  290. package/dist/shared/src/modules/observability/audit-chain.js.map +1 -0
  291. package/dist/shared/src/modules/observability/audit.d.ts +121 -0
  292. package/dist/shared/src/modules/observability/audit.js +322 -0
  293. package/dist/shared/src/modules/observability/audit.js.map +1 -0
  294. package/dist/shared/src/modules/observability/index.d.ts +4 -0
  295. package/dist/shared/src/modules/observability/index.js +5 -0
  296. package/dist/shared/src/modules/observability/index.js.map +1 -0
  297. package/dist/shared/src/modules/observability/logger.d.ts +31 -0
  298. package/dist/shared/src/modules/observability/logger.js +153 -0
  299. package/dist/shared/src/modules/observability/logger.js.map +1 -0
  300. package/dist/shared/src/modules/observability/otel.d.ts +39 -0
  301. package/dist/shared/src/modules/observability/otel.js +93 -0
  302. package/dist/shared/src/modules/observability/otel.js.map +1 -0
  303. package/dist/shared/src/modules/primitives/constants.d.ts +150 -0
  304. package/dist/shared/src/modules/primitives/constants.js +212 -0
  305. package/dist/shared/src/modules/primitives/constants.js.map +1 -0
  306. package/dist/shared/src/modules/primitives/errors.d.ts +46 -0
  307. package/dist/shared/src/modules/primitives/errors.js +69 -0
  308. package/dist/shared/src/modules/primitives/errors.js.map +1 -0
  309. package/dist/shared/src/modules/primitives/fs.d.ts +9 -0
  310. package/dist/shared/src/modules/primitives/fs.js +54 -0
  311. package/dist/shared/src/modules/primitives/fs.js.map +1 -0
  312. package/dist/shared/src/modules/primitives/index.d.ts +7 -0
  313. package/dist/shared/src/modules/primitives/index.js +8 -0
  314. package/dist/shared/src/modules/primitives/index.js.map +1 -0
  315. package/dist/shared/src/modules/primitives/outbound-http.d.ts +32 -0
  316. package/dist/shared/src/modules/primitives/outbound-http.js +88 -0
  317. package/dist/shared/src/modules/primitives/outbound-http.js.map +1 -0
  318. package/dist/shared/src/modules/primitives/string.d.ts +1 -0
  319. package/dist/shared/src/modules/primitives/string.js +30 -0
  320. package/dist/shared/src/modules/primitives/string.js.map +1 -0
  321. package/dist/shared/src/modules/primitives/time.d.ts +5 -0
  322. package/dist/shared/src/modules/primitives/time.js +35 -0
  323. package/dist/shared/src/modules/primitives/time.js.map +1 -0
  324. package/dist/shared/src/modules/primitives/types.d.ts +27 -0
  325. package/dist/shared/src/modules/primitives/types.js +17 -0
  326. package/dist/shared/src/modules/primitives/types.js.map +1 -0
  327. package/dist/shared/src/modules/sandbox/index.d.ts +3 -0
  328. package/dist/shared/src/modules/sandbox/index.js +4 -0
  329. package/dist/shared/src/modules/sandbox/index.js.map +1 -0
  330. package/dist/shared/src/modules/sandbox/sandbox-fs.d.ts +28 -0
  331. package/dist/shared/src/modules/sandbox/sandbox-fs.js +143 -0
  332. package/dist/shared/src/modules/sandbox/sandbox-fs.js.map +1 -0
  333. package/dist/shared/src/modules/sandbox/sandbox-runtime.d.ts +78 -0
  334. package/dist/shared/src/modules/sandbox/sandbox-runtime.js +282 -0
  335. package/dist/shared/src/modules/sandbox/sandbox-runtime.js.map +1 -0
  336. package/dist/shared/src/modules/sandbox/sandbox.d.ts +54 -0
  337. package/dist/shared/src/modules/sandbox/sandbox.js +179 -0
  338. package/dist/shared/src/modules/sandbox/sandbox.js.map +1 -0
  339. package/dist/shared/src/modules/security/index.d.ts +5 -0
  340. package/dist/shared/src/modules/security/index.js +6 -0
  341. package/dist/shared/src/modules/security/index.js.map +1 -0
  342. package/dist/shared/src/modules/security/pii.d.ts +70 -0
  343. package/dist/shared/src/modules/security/pii.js +276 -0
  344. package/dist/shared/src/modules/security/pii.js.map +1 -0
  345. package/dist/shared/src/modules/security/policy-gate.d.ts +42 -0
  346. package/dist/shared/src/modules/security/policy-gate.js +172 -0
  347. package/dist/shared/src/modules/security/policy-gate.js.map +1 -0
  348. package/dist/shared/src/modules/security/retention.d.ts +68 -0
  349. package/dist/shared/src/modules/security/retention.js +218 -0
  350. package/dist/shared/src/modules/security/retention.js.map +1 -0
  351. package/dist/shared/src/modules/security/secrets.d.ts +99 -0
  352. package/dist/shared/src/modules/security/secrets.js +371 -0
  353. package/dist/shared/src/modules/security/secrets.js.map +1 -0
  354. package/dist/shared/src/modules/security/tls.d.ts +87 -0
  355. package/dist/shared/src/modules/security/tls.js +154 -0
  356. package/dist/shared/src/modules/security/tls.js.map +1 -0
  357. package/dist/shared/src/modules/storage/database.d.ts +6 -0
  358. package/dist/shared/src/modules/storage/database.js +16 -0
  359. package/dist/shared/src/modules/storage/database.js.map +1 -0
  360. package/dist/shared/src/modules/storage/index.d.ts +4 -0
  361. package/dist/shared/src/modules/storage/index.js +5 -0
  362. package/dist/shared/src/modules/storage/index.js.map +1 -0
  363. package/dist/shared/src/modules/storage/memory-prune.d.ts +18 -0
  364. package/dist/shared/src/modules/storage/memory-prune.js +48 -0
  365. package/dist/shared/src/modules/storage/memory-prune.js.map +1 -0
  366. package/dist/shared/src/modules/storage/migrations.d.ts +69 -0
  367. package/dist/shared/src/modules/storage/migrations.js +394 -0
  368. package/dist/shared/src/modules/storage/migrations.js.map +1 -0
  369. package/dist/shared/src/modules/storage/storage.d.ts +341 -0
  370. package/dist/shared/src/modules/storage/storage.js +1004 -0
  371. package/dist/shared/src/modules/storage/storage.js.map +1 -0
  372. package/dist/shared/src/otel.d.ts +1 -0
  373. package/dist/shared/src/otel.js +2 -0
  374. package/dist/shared/src/otel.js.map +1 -0
  375. package/dist/shared/src/outbound-http.d.ts +1 -0
  376. package/dist/shared/src/outbound-http.js +2 -0
  377. package/dist/shared/src/outbound-http.js.map +1 -0
  378. package/dist/shared/src/pii.d.ts +1 -69
  379. package/dist/shared/src/pii.js +1 -219
  380. package/dist/shared/src/pii.js.map +1 -1
  381. package/dist/shared/src/policy-gate.d.ts +1 -42
  382. package/dist/shared/src/policy-gate.js +1 -147
  383. package/dist/shared/src/policy-gate.js.map +1 -1
  384. package/dist/shared/src/resilience.d.ts +1 -84
  385. package/dist/shared/src/resilience.js +1 -216
  386. package/dist/shared/src/resilience.js.map +1 -1
  387. package/dist/shared/src/retention.d.ts +1 -63
  388. package/dist/shared/src/retention.js +1 -170
  389. package/dist/shared/src/retention.js.map +1 -1
  390. package/dist/shared/src/sandbox-fs.d.ts +1 -28
  391. package/dist/shared/src/sandbox-fs.js +1 -149
  392. package/dist/shared/src/sandbox-fs.js.map +1 -1
  393. package/dist/shared/src/sandbox-runtime.d.ts +1 -85
  394. package/dist/shared/src/sandbox-runtime.js +1 -249
  395. package/dist/shared/src/sandbox-runtime.js.map +1 -1
  396. package/dist/shared/src/sandbox.d.ts +1 -54
  397. package/dist/shared/src/sandbox.js +1 -178
  398. package/dist/shared/src/sandbox.js.map +1 -1
  399. package/dist/shared/src/secrets.d.ts +1 -0
  400. package/dist/shared/src/secrets.js +2 -0
  401. package/dist/shared/src/secrets.js.map +1 -0
  402. package/dist/shared/src/storage.d.ts +1 -274
  403. package/dist/shared/src/storage.js +1 -723
  404. package/dist/shared/src/storage.js.map +1 -1
  405. package/dist/shared/src/string.d.ts +1 -1
  406. package/dist/shared/src/string.js +1 -29
  407. package/dist/shared/src/string.js.map +1 -1
  408. package/dist/shared/src/time.d.ts +1 -5
  409. package/dist/shared/src/time.js +1 -30
  410. package/dist/shared/src/time.js.map +1 -1
  411. package/dist/shared/src/tls.d.ts +1 -0
  412. package/dist/shared/src/tls.js +2 -0
  413. package/dist/shared/src/tls.js.map +1 -0
  414. package/dist/shared/src/tokenizer.d.ts +1 -0
  415. package/dist/shared/src/tokenizer.js +2 -0
  416. package/dist/shared/src/tokenizer.js.map +1 -0
  417. package/dist/shared/src/types.d.ts +1 -27
  418. package/dist/shared/src/types.js +1 -16
  419. package/dist/shared/src/types.js.map +1 -1
  420. package/dist/shared/src/worker-pool.d.ts +1 -52
  421. package/dist/shared/src/worker-pool.js +1 -209
  422. package/dist/shared/src/worker-pool.js.map +1 -1
  423. package/dist/shared/src/worker-thread.d.ts +1 -21
  424. package/dist/shared/src/worker-thread.js +1 -66
  425. package/dist/shared/src/worker-thread.js.map +1 -1
  426. package/package.json +4 -6
  427. package/templates/docs/tech-stack.md +21 -0
  428. package/templates/full/ATABEY_FULL.md +38 -50
  429. package/templates/prompts/security-audit-recipe.md +1 -1
  430. package/templates/standards/architecture-standards.md +6 -4
  431. package/templates/standards/crud-governance.md +1 -1
  432. package/templates/standards/deployment-standards.md +1 -1
  433. package/templates/standards/enterprise-systems-standards.md +5 -1
  434. package/templates/standards/eslint-standards.md +10 -0
  435. package/templates/standards/frontend-standards.md +2 -2
  436. package/templates/standards/governance-standards.md +2 -2
  437. package/templates/standards/i18n-standards.md +1 -1
  438. package/templates/standards/logging-and-secrets.md +1 -1
  439. package/templates/standards/native-standards.md +1 -1
  440. package/templates/standards/quality-standards.md +1 -1
  441. package/templates/standards/security-audit-standards.md +1 -1
  442. package/templates/standards/security-standards.md +1 -1
  443. package/templates/standards/testing-standards.md +1 -1
  444. package/templates/standards/token-economy.md +27 -0
  445. package/dist/atabey/src/cli/commands/init/create-agent.d.ts +0 -4
  446. package/dist/atabey/src/cli/commands/init/create-agent.js +0 -59
  447. package/dist/atabey/src/cli/commands/init/create-agent.js.map +0 -1
  448. package/dist/atabey/src/cli/utils/config-schema.d.ts +0 -213
  449. package/dist/atabey/src/cli/utils/config-schema.js +0 -58
  450. package/dist/atabey/src/cli/utils/config-schema.js.map +0 -1
  451. package/dist/atabey/src/cli/utils/schemas.d.ts +0 -49
  452. package/dist/atabey/src/cli/utils/schemas.js +0 -20
  453. package/dist/atabey/src/cli/utils/schemas.js.map +0 -1
  454. package/dist/atabey/src/contracts/index.d.ts +0 -1
  455. package/dist/atabey/src/contracts/index.js +0 -2
  456. package/dist/atabey/src/contracts/index.js.map +0 -1
  457. package/dist/atabey/src/contracts/tasks.d.ts +0 -44
  458. package/dist/atabey/src/contracts/tasks.js +0 -21
  459. package/dist/atabey/src/contracts/tasks.js.map +0 -1
  460. package/dist/atabey/src/modules/contracts/index.d.ts +0 -5
  461. package/dist/atabey/src/modules/contracts/index.js +0 -6
  462. package/dist/atabey/src/modules/contracts/index.js.map +0 -1
  463. package/dist/atabey/src/modules/engines/contract-engine.d.ts +0 -46
  464. package/dist/atabey/src/modules/engines/contract-engine.js +0 -116
  465. package/dist/atabey/src/modules/engines/contract-engine.js.map +0 -1
  466. package/dist/atabey/src/modules/engines/discovery-engine.d.ts +0 -42
  467. package/dist/atabey/src/modules/engines/discovery-engine.js +0 -161
  468. package/dist/atabey/src/modules/engines/discovery-engine.js.map +0 -1
  469. package/dist/atabey/src/modules/engines/file-lock.d.ts +0 -56
  470. package/dist/atabey/src/modules/engines/file-lock.js +0 -171
  471. package/dist/atabey/src/modules/engines/file-lock.js.map +0 -1
  472. package/dist/atabey/src/modules/engines/phase-engine.d.ts +0 -82
  473. package/dist/atabey/src/modules/engines/phase-engine.js +0 -204
  474. package/dist/atabey/src/modules/engines/phase-engine.js.map +0 -1
  475. package/dist/atabey/src/modules/engines/policy-engine.d.ts +0 -63
  476. package/dist/atabey/src/modules/engines/policy-engine.js +0 -188
  477. package/dist/atabey/src/modules/engines/policy-engine.js.map +0 -1
  478. package/dist/atabey/src/modules/engines/sandbox.d.ts +0 -31
  479. package/dist/atabey/src/modules/engines/sandbox.js +0 -57
  480. package/dist/atabey/src/modules/engines/sandbox.js.map +0 -1
  481. package/dist/atabey/src/modules/engines/session-engine.d.ts +0 -68
  482. package/dist/atabey/src/modules/engines/session-engine.js +0 -141
  483. package/dist/atabey/src/modules/engines/session-engine.js.map +0 -1
  484. package/dist/atabey/src/modules/engines/worker-pool.d.ts +0 -8
  485. package/dist/atabey/src/modules/engines/worker-pool.js +0 -9
  486. package/dist/atabey/src/modules/engines/worker-pool.js.map +0 -1
  487. package/dist/atabey/src/modules/providers/llm-provider.d.ts +0 -87
  488. package/dist/atabey/src/modules/providers/llm-provider.js +0 -242
  489. package/dist/atabey/src/modules/providers/llm-provider.js.map +0 -1
  490. package/dist/atabey/src/shared/file-lock.d.ts +0 -1
  491. package/dist/atabey/src/shared/file-lock.js +0 -2
  492. package/dist/atabey/src/shared/file-lock.js.map +0 -1
  493. package/dist/atabey/src/shared/job-queue.d.ts +0 -1
  494. package/dist/atabey/src/shared/job-queue.js +0 -2
  495. package/dist/atabey/src/shared/job-queue.js.map +0 -1
  496. package/dist/atabey/src/shared/lock.d.ts +0 -1
  497. package/dist/atabey/src/shared/lock.js +0 -2
  498. package/dist/atabey/src/shared/lock.js.map +0 -1
  499. package/dist/atabey/src/shared/resilience.d.ts +0 -1
  500. package/dist/atabey/src/shared/resilience.js +0 -2
  501. package/dist/atabey/src/shared/resilience.js.map +0 -1
  502. package/dist/atabey/src/shared/retention.d.ts +0 -1
  503. package/dist/atabey/src/shared/retention.js +0 -2
  504. package/dist/atabey/src/shared/retention.js.map +0 -1
  505. package/dist/atabey/src/shared/sandbox-runtime.d.ts +0 -1
  506. package/dist/atabey/src/shared/sandbox-runtime.js +0 -2
  507. package/dist/atabey/src/shared/sandbox-runtime.js.map +0 -1
  508. package/dist/atabey/src/shared/sandbox.d.ts +0 -1
  509. package/dist/atabey/src/shared/sandbox.js +0 -2
  510. package/dist/atabey/src/shared/sandbox.js.map +0 -1
  511. package/dist/atabey/src/shared/worker-pool.d.ts +0 -1
  512. package/dist/atabey/src/shared/worker-pool.js +0 -2
  513. package/dist/atabey/src/shared/worker-pool.js.map +0 -1
@@ -0,0 +1,115 @@
1
+ import { spawn } from "child_process";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ /**
5
+ * Built-in headless CLI presets — all non-interactive ("print" mode).
6
+ * Overridable per project via `.atabey/config.json` (`runtime.cli`) or by
7
+ * passing a custom `CliPreset` to the constructor.
8
+ */
9
+ export const CLI_PRESETS = {
10
+ claude: { command: "claude", buildArgs: (p) => ["-p", p, "--output-format", "text"] },
11
+ gemini: { command: "gemini", buildArgs: (p) => ["-p", p] },
12
+ codex: { command: "codex", buildArgs: (p) => ["exec", p] },
13
+ opencode: { command: "opencode", buildArgs: (p) => ["run", "--standalone", "--auto", p] },
14
+ };
15
+ const DEFAULT_TIMEOUT_MS = 120_000;
16
+ const DEFAULT_MAX_OUTPUT_CHARS = 200_000;
17
+ /**
18
+ * Drives a single headless CLI invocation as one agent "turn".
19
+ *
20
+ * Safety: `shell: false` (no shell interpolation), hard timeout with SIGKILL,
21
+ * output capping, and never-throws result contract.
22
+ */
23
+ export class HeadlessCliAdapter {
24
+ id;
25
+ preset;
26
+ constructor(cliId, preset) {
27
+ this.id = cliId;
28
+ const resolved = preset ?? CLI_PRESETS[cliId];
29
+ if (!resolved)
30
+ throw new Error(`Unknown CLI adapter: ${cliId}`);
31
+ this.preset = resolved;
32
+ }
33
+ /** Resolve the command on PATH (or as an absolute path). */
34
+ async isAvailable() {
35
+ const { command } = this.preset;
36
+ if (path.isAbsolute(command))
37
+ return fs.existsSync(command);
38
+ const pathEnv = process.env.PATH || "";
39
+ const exts = process.platform === "win32" ? [".exe", ".cmd", ".bat", ""] : [""];
40
+ return pathEnv.split(path.delimiter).some((dir) => exts.some((ext) => dir && fs.existsSync(path.join(dir, command + ext))));
41
+ }
42
+ /** Expose the resolved command + argv (used by the sandbox runtime). */
43
+ buildCommand(prompt) {
44
+ return { command: this.preset.command, args: this.preset.buildArgs(prompt), useStdin: this.preset.useStdin };
45
+ }
46
+ runTurn(req) {
47
+ const started = Date.now();
48
+ const timeoutMs = req.timeoutMs ?? DEFAULT_TIMEOUT_MS;
49
+ const maxChars = req.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS;
50
+ const composed = req.systemPrompt ? `${req.systemPrompt}\n\n${req.prompt}` : req.prompt;
51
+ const args = this.preset.buildArgs(composed);
52
+ return new Promise((resolve) => {
53
+ let stdout = "";
54
+ let stderr = "";
55
+ let timedOut = false;
56
+ let settled = false;
57
+ const child = spawn(this.preset.command, args, {
58
+ cwd: req.cwd,
59
+ // Keep PWD in sync with cwd — some CLIs (e.g. opencode) resolve
60
+ // their project root from PWD, not the real process cwd.
61
+ env: { ...process.env, PWD: req.cwd, ...(req.env || {}) },
62
+ stdio: [this.preset.useStdin ? "pipe" : "ignore", "pipe", "pipe"],
63
+ shell: false,
64
+ });
65
+ const timer = setTimeout(() => {
66
+ timedOut = true;
67
+ try {
68
+ child.kill("SIGKILL");
69
+ }
70
+ catch {
71
+ /* already dead */
72
+ }
73
+ }, timeoutMs);
74
+ const finish = (exitCode, error) => {
75
+ if (settled)
76
+ return;
77
+ settled = true;
78
+ clearTimeout(timer);
79
+ let output = stdout.trim();
80
+ if (output.length > maxChars) {
81
+ output = output.slice(0, maxChars) + `\n[... truncated ${stdout.length - maxChars} chars]`;
82
+ }
83
+ const ok = !timedOut && exitCode === 0;
84
+ let reason = error;
85
+ if (!ok && !reason) {
86
+ reason = timedOut
87
+ ? `Timeout after ${timeoutMs}ms`
88
+ : stderr.trim().slice(0, 2000) || `Process exited with code ${exitCode}`;
89
+ }
90
+ resolve({
91
+ ok,
92
+ output,
93
+ exitCode,
94
+ durationMs: Date.now() - started,
95
+ timedOut,
96
+ adapterId: this.id,
97
+ error: ok ? undefined : reason,
98
+ });
99
+ };
100
+ child.stdout?.on("data", (d) => {
101
+ stdout += d.toString();
102
+ });
103
+ child.stderr?.on("data", (d) => {
104
+ stderr += d.toString();
105
+ });
106
+ child.on("error", (err) => finish(null, `spawn failed: ${err.message}`));
107
+ child.on("close", (code) => finish(code));
108
+ if (this.preset.useStdin && child.stdin) {
109
+ child.stdin.write(composed);
110
+ child.stdin.end();
111
+ }
112
+ });
113
+ }
114
+ }
115
+ //# sourceMappingURL=headless-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-cli.js","sourceRoot":"","sources":["../../../../../../src/modules/runtime/adapters/headless-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./types.js";
2
+ export { HeadlessCliAdapter, CLI_PRESETS, type CliPreset } from "./headless-cli.js";
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export { HeadlessCliAdapter, CLI_PRESETS } from "./headless-cli.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/modules/runtime/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * ─── AGENT ADAPTER INTERFACE ─────────────────────────────────────────
3
+ *
4
+ * An AgentAdapter turns a single task prompt into real work by driving an
5
+ * external non-interactive runtime (a headless AI CLI, or a local model).
6
+ *
7
+ * Atabey itself does NOT call an LLM API directly — it orchestrates headless
8
+ * CLIs (Claude / Gemini / Codex / Aider / Ollama). This preserves the project
9
+ * identity: "we do not write code, we coordinate."
10
+ */
11
+ export interface AgentTurnRequest {
12
+ /** Target agent, e.g. "@backend". */
13
+ agentName: string;
14
+ /** The task / instruction to execute. */
15
+ prompt: string;
16
+ /** Optional role/system context prepended to the prompt. */
17
+ systemPrompt?: string;
18
+ /** Working directory (typically a per-agent git worktree). */
19
+ cwd: string;
20
+ /** Hard wall-clock timeout in ms (default 120000). */
21
+ timeoutMs?: number;
22
+ /** Cap on captured output characters (default 200000). */
23
+ maxOutputChars?: number;
24
+ /** Extra environment variables for the child process. */
25
+ env?: Record<string, string>;
26
+ }
27
+ export interface AgentTurnResult {
28
+ ok: boolean;
29
+ output: string;
30
+ exitCode: number | null;
31
+ durationMs: number;
32
+ timedOut: boolean;
33
+ adapterId: string;
34
+ error?: string;
35
+ }
36
+ export interface AgentAdapter {
37
+ readonly id: string;
38
+ /** Whether the underlying CLI/runtime can be resolved on this machine. */
39
+ isAvailable(): Promise<boolean>;
40
+ /** Execute exactly one non-interactive turn and return its output. */
41
+ runTurn(req: AgentTurnRequest): Promise<AgentTurnResult>;
42
+ /** Optional: expose the command + argv so a caller (e.g. the sandbox runtime) can spawn it. */
43
+ buildCommand?(prompt: string): {
44
+ command: string;
45
+ args: string[];
46
+ useStdin?: boolean;
47
+ };
48
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * ─── AGENT ADAPTER INTERFACE ─────────────────────────────────────────
3
+ *
4
+ * An AgentAdapter turns a single task prompt into real work by driving an
5
+ * external non-interactive runtime (a headless AI CLI, or a local model).
6
+ *
7
+ * Atabey itself does NOT call an LLM API directly — it orchestrates headless
8
+ * CLIs (Claude / Gemini / Codex / Aider / Ollama). This preserves the project
9
+ * identity: "we do not write code, we coordinate."
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/modules/runtime/adapters/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,54 @@
1
+ import { type AgentAdapter, type AgentTurnResult } from "./adapters/index.js";
2
+ export interface RunTurnOptions {
3
+ /** Hard wall-clock timeout in ms. */
4
+ timeoutMs?: number;
5
+ /** Advisory output-token cap; exceeding it is reported, not fatal. */
6
+ tokenBudget?: number;
7
+ /** Optional role/system context prepended to the prompt. */
8
+ systemPrompt?: string;
9
+ /** Working directory. Defaults to cwd. */
10
+ cwd?: string;
11
+ /** Extra environment variables for the child process. */
12
+ env?: Record<string, string>;
13
+ /** Explicit CLI id override (else resolved from env/config/default). */
14
+ cliId?: string;
15
+ /** Pre-built adapter (dependency injection — used by tests). */
16
+ adapter?: AgentAdapter;
17
+ /** Run in an isolated git worktree (`.atabey/worktrees/<agent>`). */
18
+ worktree?: boolean;
19
+ /** Route the spawn through the sandbox runtime (fail-closed if required). */
20
+ sandbox?: boolean;
21
+ /** Run the QualityGate on the turn output. */
22
+ qualityGate?: boolean;
23
+ /** Inject a targeted context bundle (CodeGraph + ContextAssembler) into the prompt. */
24
+ context?: boolean;
25
+ }
26
+ export interface AgentTurnReport extends AgentTurnResult {
27
+ agent: string;
28
+ inputTokens: number;
29
+ outputTokens: number;
30
+ isolation: "worktree" | "main-tree";
31
+ sandbox: string;
32
+ quality?: {
33
+ passed: boolean;
34
+ reason: string;
35
+ };
36
+ }
37
+ /**
38
+ * Resolve which headless CLI backs a given agent.
39
+ *
40
+ * Priority: explicit → ATABEY_AGENT_CLI → ATABEY_CLI_<AGENT> → default "claude".
41
+ */
42
+ export declare function resolveAgentCli(agentName: string, explicit?: string): string;
43
+ /**
44
+ * ─── AGENT RUNTIME ───────────────────────────────────────────────────
45
+ *
46
+ * Drives real, non-interactive work for a single agent by orchestrating a
47
+ * headless AI CLI. Optionally isolates the turn in a git worktree, routes it
48
+ * through the sandbox runtime, and runs the QualityGate + emits an OTel span.
49
+ *
50
+ * Never throws for runtime failures — always returns a report.
51
+ */
52
+ export declare class AgentRuntime {
53
+ static runTurn(agentName: string, prompt: string, options?: RunTurnOptions): Promise<AgentTurnReport>;
54
+ }
@@ -0,0 +1,203 @@
1
+ import { countTokens } from "atabey-shared/tokenizer.js";
2
+ import { emitSpan, newSpanId, newTraceId } from "atabey-shared/otel.js";
3
+ import { logger } from "../../shared/logger.js";
4
+ import { HeadlessCliAdapter } from "./adapters/index.js";
5
+ import { ensureAgentWorktree } from "./worktree.js";
6
+ function envFlag(key) {
7
+ return ["1", "true", "yes", "on"].includes((process.env[key] || "").toLowerCase());
8
+ }
9
+ /**
10
+ * Resolve which headless CLI backs a given agent.
11
+ *
12
+ * Priority: explicit → ATABEY_AGENT_CLI → ATABEY_CLI_<AGENT> → default "claude".
13
+ */
14
+ export function resolveAgentCli(agentName, explicit) {
15
+ if (explicit)
16
+ return explicit;
17
+ if (process.env.ATABEY_AGENT_CLI)
18
+ return process.env.ATABEY_AGENT_CLI;
19
+ const perAgent = `ATABEY_CLI_${agentName.replace("@", "").toUpperCase()}`;
20
+ if (process.env[perAgent])
21
+ return process.env[perAgent];
22
+ return "claude";
23
+ }
24
+ /**
25
+ * ─── AGENT RUNTIME ───────────────────────────────────────────────────
26
+ *
27
+ * Drives real, non-interactive work for a single agent by orchestrating a
28
+ * headless AI CLI. Optionally isolates the turn in a git worktree, routes it
29
+ * through the sandbox runtime, and runs the QualityGate + emits an OTel span.
30
+ *
31
+ * Never throws for runtime failures — always returns a report.
32
+ */
33
+ export class AgentRuntime {
34
+ static async runTurn(agentName, prompt, options = {}) {
35
+ const started = Date.now();
36
+ const telemetryRoot = options.cwd || process.cwd();
37
+ const traceId = newTraceId();
38
+ const spanId = newSpanId();
39
+ const cliId = options.cliId || (options.adapter ? options.adapter.id : resolveAgentCli(agentName));
40
+ let composed = options.systemPrompt ? `${options.systemPrompt}\n\n${prompt}` : prompt;
41
+ let inputTokens = countTokens(composed);
42
+ const wantWorktree = options.worktree ?? envFlag("ATABEY_AGENT_WORKTREE");
43
+ const wantSandbox = options.sandbox ?? envFlag("ATABEY_AGENT_SANDBOX");
44
+ const wantQuality = options.qualityGate ?? envFlag("ATABEY_AGENT_QUALITY_GATE");
45
+ const report = (base, extra = {}) => ({
46
+ ...base,
47
+ agent: agentName,
48
+ inputTokens,
49
+ outputTokens: countTokens(base.output),
50
+ isolation: extra.isolation ?? "main-tree",
51
+ sandbox: extra.sandbox ?? "off",
52
+ quality: extra.quality,
53
+ });
54
+ const emit = (r) => {
55
+ emitSpan(telemetryRoot, {
56
+ name: `agent.turn ${agentName}`,
57
+ traceId,
58
+ spanId,
59
+ startMs: started,
60
+ endMs: Date.now(),
61
+ status: r.ok ? "OK" : "ERROR",
62
+ attributes: {
63
+ agent: agentName,
64
+ cli: cliId,
65
+ isolation: r.isolation,
66
+ sandbox: r.sandbox,
67
+ inputTokens: r.inputTokens,
68
+ outputTokens: r.outputTokens,
69
+ durationMs: r.durationMs,
70
+ },
71
+ });
72
+ return r;
73
+ };
74
+ const failResult = (error) => ({
75
+ ok: false,
76
+ output: "",
77
+ exitCode: null,
78
+ durationMs: Date.now() - started,
79
+ timedOut: false,
80
+ adapterId: cliId,
81
+ error,
82
+ });
83
+ // ─── Working directory isolation (worktree) ───────────────────────
84
+ let cwd = options.cwd || process.cwd();
85
+ let isolation = "main-tree";
86
+ if (wantWorktree) {
87
+ try {
88
+ const wt = ensureAgentWorktree(cwd, agentName, wantSandbox);
89
+ if (wt !== cwd) {
90
+ cwd = wt;
91
+ isolation = "worktree";
92
+ }
93
+ }
94
+ catch (e) {
95
+ return emit(report(failResult(`[WORKTREE] ${e.message}`), { isolation: "main-tree" }));
96
+ }
97
+ }
98
+ // ─── Targeted context injection (no repo re-scan) ─────────────────
99
+ let effectiveSystem = options.systemPrompt;
100
+ if ((options.context ?? envFlag("ATABEY_AGENT_CONTEXT")) && !effectiveSystem) {
101
+ try {
102
+ const { ContextAssembler, formatContextBundle } = await import("../memory/context-assembler.js");
103
+ const bundle = ContextAssembler.assemble(cwd, prompt, { maxSymbols: 8, maxSnippetLines: 40 });
104
+ if (bundle.symbols.length > 0) {
105
+ effectiveSystem =
106
+ "You are working on an existing codebase. Do NOT re-scan the repository; use the targeted context below.\n\n" +
107
+ formatContextBundle(bundle);
108
+ composed = `${effectiveSystem}\n\n${prompt}`;
109
+ inputTokens = countTokens(composed);
110
+ logger.info(`[RUNTIME] Context injected for ${agentName}: ${bundle.symbols.length} symbols, ~${bundle.bundleTokens} tokens (saved ~${bundle.savingsPercent}%)`);
111
+ }
112
+ }
113
+ catch (e) {
114
+ logger.warn(`[RUNTIME] Context assembly skipped: ${e.message}`);
115
+ }
116
+ }
117
+ // ─── Resolve adapter ──────────────────────────────────────────────
118
+ let adapter;
119
+ if (options.adapter) {
120
+ adapter = options.adapter;
121
+ }
122
+ else {
123
+ try {
124
+ adapter = new HeadlessCliAdapter(cliId);
125
+ }
126
+ catch (e) {
127
+ return emit(report(failResult(`[RUNTIME] ${e.message}`), { isolation }));
128
+ }
129
+ }
130
+ if (!(await adapter.isAvailable())) {
131
+ return emit(report(failResult(`[RUNTIME] CLI "${cliId}" not found on PATH. Install it or set ATABEY_AGENT_CLI.`), { isolation }));
132
+ }
133
+ logger.info(`[RUNTIME] ${agentName} → ${cliId} (cwd: ${cwd}, isolation: ${isolation}, ~${inputTokens} input tokens)`);
134
+ // ─── Execute (sandboxed when requested) ───────────────────────────
135
+ let result;
136
+ let sandboxLabel = "off";
137
+ if (wantSandbox && typeof adapter.buildCommand === "function") {
138
+ try {
139
+ const { runInSandbox } = await import("atabey-shared/sandbox-runtime.js");
140
+ const { command, args, useStdin } = adapter.buildCommand(composed);
141
+ const t0 = Date.now();
142
+ const r = await runInSandbox({
143
+ command,
144
+ args,
145
+ projectRoot: cwd,
146
+ timeoutMs: options.timeoutMs,
147
+ stdin: useStdin ? composed : undefined,
148
+ env: { ...process.env, PWD: cwd, ...(options.env || {}) },
149
+ });
150
+ sandboxLabel = r.runtime;
151
+ const out = r.stdout.trim();
152
+ result = {
153
+ ok: r.code === 0,
154
+ output: out,
155
+ exitCode: r.code,
156
+ durationMs: Date.now() - t0,
157
+ timedOut: false,
158
+ adapterId: `${cliId}@${r.runtime}`,
159
+ error: r.code === 0 ? undefined : r.stderr.trim().slice(0, 2000) || `exit ${r.code}`,
160
+ };
161
+ }
162
+ catch (e) {
163
+ // Fail-closed: sandbox required but unavailable, or spawn error.
164
+ sandboxLabel = "failed";
165
+ return emit(report(failResult(`[SANDBOX] ${e.message}`), { isolation, sandbox: sandboxLabel }));
166
+ }
167
+ }
168
+ else {
169
+ if (wantSandbox)
170
+ sandboxLabel = "unavailable";
171
+ result = await adapter.runTurn({
172
+ agentName,
173
+ prompt,
174
+ systemPrompt: effectiveSystem,
175
+ cwd,
176
+ timeoutMs: options.timeoutMs,
177
+ env: options.env,
178
+ });
179
+ }
180
+ const outputTokens = countTokens(result.output);
181
+ if (options.tokenBudget && outputTokens > options.tokenBudget) {
182
+ logger.warn(`[RUNTIME] ${agentName} output ~${outputTokens} tokens exceeds budget ${options.tokenBudget}.`);
183
+ }
184
+ // ─── QualityGate (P0.5) ───────────────────────────────────────────
185
+ let quality;
186
+ if (wantQuality && result.ok) {
187
+ try {
188
+ const { QualityGate } = await import("../engines/quality-gate.js");
189
+ const q = await QualityGate.check(agentName, result.output, prompt);
190
+ quality = { passed: q.passed, reason: q.reason };
191
+ if (!q.passed) {
192
+ result = { ...result, ok: false, error: `[QUALITY_GATE] ${q.reason}` };
193
+ }
194
+ }
195
+ catch (e) {
196
+ logger.warn(`[RUNTIME] QualityGate error for ${agentName}: ${e.message}`);
197
+ }
198
+ }
199
+ logger.info(`[RUNTIME] ${agentName} ${result.ok ? "OK" : "FAIL"} in ${result.durationMs}ms (~${outputTokens} output tokens, sandbox: ${sandboxLabel})`);
200
+ return emit(report(result, { isolation, sandbox: sandboxLabel, quality }));
201
+ }
202
+ }
203
+ //# sourceMappingURL=agent-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../../../../src/modules/runtime/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { Plan, PlanTask } from "../engines/types.js";
2
+ import { type AgentTurnReport, type RunTurnOptions } from "./agent-runtime.js";
3
+ import { type EvidenceBundle } from "./evidence.js";
4
+ export interface DispatchOptions {
5
+ /** Base working directory for turns (default: cwd). */
6
+ projectRoot?: string;
7
+ /** Global concurrency cap (default: min(cpus, 8)). */
8
+ maxConcurrency?: number;
9
+ /** Isolate each agent in its own git worktree (default: true). */
10
+ worktree?: boolean;
11
+ /** Route turns through the sandbox runtime. */
12
+ sandbox?: boolean;
13
+ /** Run the QualityGate on each turn. */
14
+ qualityGate?: boolean;
15
+ /** Inject a targeted context bundle into each turn's prompt. */
16
+ context?: boolean;
17
+ /** Advisory per-agent token ceiling; tasks beyond it are skipped. */
18
+ perAgentTokenBudget?: number;
19
+ /** Max retries on transient crash/timeout before marking task failed (default: 0). */
20
+ maxRetries?: number;
21
+ /** Fallback agent name or per-agent fallback map if primary worker fails. */
22
+ fallbackAgent?: string | Record<string, string>;
23
+ /** Collect signed evidence bundles + collision check after execution (default: true). */
24
+ collectEvidence?: boolean;
25
+ /** Automatically apply non-conflicting worktree changes back to `projectRoot` when `ok` and zero collisions. */
26
+ mergeChanges?: boolean;
27
+ /** Injectable runner (tests). Defaults to `AgentRuntime.runTurn`. */
28
+ runner?: (agent: string, task: string, opts: RunTurnOptions) => Promise<AgentTurnReport>;
29
+ }
30
+ export interface TaskResult {
31
+ id: string;
32
+ agent: string;
33
+ ok: boolean;
34
+ skipped: boolean;
35
+ output: string;
36
+ error?: string;
37
+ durationMs: number;
38
+ tokens: number;
39
+ inputTokens: number;
40
+ outputTokens: number;
41
+ }
42
+ export interface DispatchReport {
43
+ planId: string;
44
+ ok: boolean;
45
+ results: TaskResult[];
46
+ /** Execution waves (task ids) — for observability / the run graph. */
47
+ waves: string[][];
48
+ totalTokens: number;
49
+ /** Files touched by more than one agent (must be resolved before merge). */
50
+ conflicts: string[];
51
+ /** Files applied back to `projectRoot` when `mergeChanges` is enabled and zero conflicts exist. */
52
+ mergedFiles: string[];
53
+ /** Signed proof-of-work per executed task. */
54
+ evidence: EvidenceBundle[];
55
+ errors: string[];
56
+ }
57
+ /** Kahn-style level decomposition. Detects cycles / unresolved deps. */
58
+ export declare function computeWaves(tasks: PlanTask[]): {
59
+ waves: PlanTask[][];
60
+ errors: string[];
61
+ };
62
+ /**
63
+ * ─── AGENT DISPATCHER ────────────────────────────────────────────────
64
+ *
65
+ * Executes a plan DAG of tasks across agents:
66
+ * - Independent tasks run in parallel (bounded by `maxConcurrency`).
67
+ * - Dependent tasks wait for their dependencies (Kahn waves).
68
+ * - Tasks for the SAME agent are serialized (they share one worktree),
69
+ * preventing write collisions while different agents run concurrently.
70
+ * - A per-agent token ceiling stops runaway spend.
71
+ * - After execution: collision detection + signed evidence bundles.
72
+ */
73
+ export declare class AgentDispatcher {
74
+ static dispatch(plan: Plan, options?: DispatchOptions): Promise<DispatchReport>;
75
+ }