@jaimevalasek/aioson 1.7.2 → 1.8.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 (362) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +153 -10
  3. package/docs/en/cli-reference.md +56 -1
  4. package/docs/en/i18n.md +18 -18
  5. package/docs/en/schemas/index.json +10 -0
  6. package/docs/en/schemas/parallel-assign.schema.json +9 -0
  7. package/docs/en/schemas/parallel-doctor.schema.json +36 -0
  8. package/docs/en/schemas/parallel-guard.schema.json +63 -0
  9. package/docs/en/schemas/parallel-merge.schema.json +84 -0
  10. package/docs/en/schemas/parallel-status.schema.json +91 -1
  11. package/docs/integrations/apps-publish-marketplace.md +94 -0
  12. package/docs/pt/README.md +9 -0
  13. package/docs/pt/agentes.md +324 -3
  14. package/docs/pt/clientes-ai.md +7 -3
  15. package/docs/pt/comandos-cli.md +160 -13
  16. package/docs/pt/compress-agents.md +304 -0
  17. package/docs/pt/design-docs-governance.md +59 -0
  18. package/docs/pt/feature-archive.md +191 -0
  19. package/docs/pt/genome-3.0-spec.md +115 -4
  20. package/docs/pt/genome-distribution.md +232 -0
  21. package/docs/pt/inicio-rapido.md +1 -0
  22. package/docs/pt/motor-hardening.md +492 -0
  23. package/docs/pt/runner-system.md +113 -0
  24. package/package.json +2 -1
  25. package/src/agent-manifests.js +66 -0
  26. package/src/agents.js +27 -7
  27. package/src/autonomy-policy.js +139 -0
  28. package/src/brain-query.js +161 -0
  29. package/src/cli.js +1377 -1099
  30. package/src/commands/agents.js +102 -7
  31. package/src/commands/artifact-validate.js +33 -4
  32. package/src/commands/auth.js +272 -0
  33. package/src/commands/brain-query.js +44 -0
  34. package/src/commands/briefing.js +344 -0
  35. package/src/commands/commit-prepare.js +547 -0
  36. package/src/commands/compress-agents.js +416 -0
  37. package/src/commands/context-health.js +4 -2
  38. package/src/commands/context-trim.js +17 -11
  39. package/src/commands/design-hybrid-options.js +3 -3
  40. package/src/commands/devlog-process.js +6 -4
  41. package/src/commands/dossier.js +423 -0
  42. package/src/commands/feature-archive.js +513 -0
  43. package/src/commands/feature-close.js +123 -18
  44. package/src/commands/gate-approve.js +198 -0
  45. package/src/commands/gate-check.js +24 -5
  46. package/src/commands/genome-doctor.js +166 -9
  47. package/src/commands/git-guard.js +170 -0
  48. package/src/commands/harness.js +121 -0
  49. package/src/commands/implementation-plan.js +47 -20
  50. package/src/commands/init.js +6 -2
  51. package/src/commands/install.js +6 -2
  52. package/src/commands/live.js +497 -56
  53. package/src/commands/locale-apply.js +9 -6
  54. package/src/commands/locale-diff.js +11 -112
  55. package/src/commands/mcp-doctor.js +2 -1
  56. package/src/commands/mcp-init.js +4 -10
  57. package/src/commands/memory.js +234 -0
  58. package/src/commands/parallel-assign.js +107 -27
  59. package/src/commands/parallel-doctor.js +416 -3
  60. package/src/commands/parallel-guard.js +241 -0
  61. package/src/commands/parallel-init.js +66 -4
  62. package/src/commands/parallel-merge.js +299 -0
  63. package/src/commands/parallel-status.js +147 -3
  64. package/src/commands/preflight.js +63 -4
  65. package/src/commands/qa-init.js +10 -5
  66. package/src/commands/revision.js +235 -0
  67. package/src/commands/scaffold-complete.js +188 -0
  68. package/src/commands/security-audit.js +275 -0
  69. package/src/commands/security-scan.js +376 -0
  70. package/src/commands/self-implement-loop.js +46 -2
  71. package/src/commands/setup-context.js +11 -10
  72. package/src/commands/squad-agent-create.js +51 -9
  73. package/src/commands/squad-investigate.js +53 -0
  74. package/src/commands/squad-plan.js +33 -1
  75. package/src/commands/squad-scaffold.js +4 -3
  76. package/src/commands/squad-score.js +71 -14
  77. package/src/commands/squad-status.js +22 -1
  78. package/src/commands/squad-validate.js +93 -2
  79. package/src/commands/store-genome.js +304 -0
  80. package/src/commands/store-skill.js +247 -0
  81. package/src/commands/store-squad.js +431 -0
  82. package/src/commands/store-system.js +392 -0
  83. package/src/commands/tool-capabilities.js +63 -0
  84. package/src/commands/update.js +3 -3
  85. package/src/commands/verify-gate.js +40 -0
  86. package/src/commands/workflow-execute.js +644 -155
  87. package/src/commands/workflow-harden.js +231 -0
  88. package/src/commands/workflow-heal.js +136 -0
  89. package/src/commands/workflow-next.js +460 -22
  90. package/src/commands/workflow-status.js +328 -138
  91. package/src/commands/workspace.js +144 -0
  92. package/src/constants.js +42 -75
  93. package/src/context-memory.js +133 -4
  94. package/src/context-writer.js +2 -1
  95. package/src/context.js +32 -2
  96. package/src/doctor.js +46 -6
  97. package/src/dossier/codemap-store.js +267 -0
  98. package/src/dossier/dossier-bootstrap.js +222 -0
  99. package/src/dossier/dossier-compact.js +159 -0
  100. package/src/dossier/lock.js +128 -0
  101. package/src/dossier/revision-store.js +313 -0
  102. package/src/dossier/schema.js +155 -0
  103. package/src/dossier/store.js +400 -0
  104. package/src/execution-gateway.js +3 -0
  105. package/src/friction-scanner.js +202 -0
  106. package/src/genome-schema.js +24 -1
  107. package/src/genomes.js +33 -0
  108. package/src/handoff-contract.js +363 -0
  109. package/src/handoff-validator.js +45 -0
  110. package/src/harness/circuit-breaker.js +135 -0
  111. package/src/i18n/messages/en.js +317 -22
  112. package/src/i18n/messages/es.js +259 -18
  113. package/src/i18n/messages/fr.js +260 -18
  114. package/src/i18n/messages/pt-BR.js +313 -22
  115. package/src/install-profile.js +0 -16
  116. package/src/installer.js +70 -6
  117. package/src/lib/git-commit-guard.js +691 -0
  118. package/src/lib/security/artifact-reader.js +167 -0
  119. package/src/lib/security/exit-codes.js +51 -0
  120. package/src/lib/security/findings-writer.js +176 -0
  121. package/src/lib/security/runtime-events.js +77 -0
  122. package/src/lib/security/secrets-regex.js +115 -0
  123. package/src/lib/store/security-scan.js +173 -0
  124. package/src/lib/terminal-checkbox.js +130 -0
  125. package/src/lib/tmux-launcher.js +163 -0
  126. package/src/lib/tool-capabilities.js +102 -0
  127. package/src/locales.js +12 -8
  128. package/src/parallel-workspace.js +756 -0
  129. package/src/parser.js +8 -1
  130. package/src/path-guard.js +47 -0
  131. package/src/preflight-engine.js +237 -26
  132. package/src/self-healing.js +142 -0
  133. package/src/session-handoff.js +111 -1
  134. package/src/squad/squad-scaffold.js +183 -19
  135. package/src/test-briefing.js +226 -0
  136. package/src/updater.js +1 -1
  137. package/src/utils.js +3 -0
  138. package/src/workflow-gates.js +185 -0
  139. package/template/.aioson/agents/analyst.md +76 -130
  140. package/template/.aioson/agents/architect.md +53 -86
  141. package/template/.aioson/agents/committer.md +161 -0
  142. package/template/.aioson/agents/cypher.md +252 -0
  143. package/template/.aioson/agents/dev.md +112 -628
  144. package/template/.aioson/agents/deyvin.md +33 -236
  145. package/template/.aioson/agents/discover.md +235 -0
  146. package/template/.aioson/agents/discovery-design-doc.md +17 -252
  147. package/template/.aioson/agents/genome.md +76 -26
  148. package/template/.aioson/agents/manifests/analyst.manifest.json +26 -0
  149. package/template/.aioson/agents/manifests/architect.manifest.json +23 -0
  150. package/template/.aioson/agents/manifests/committer.manifest.json +23 -0
  151. package/template/.aioson/agents/manifests/dev.manifest.json +37 -0
  152. package/template/.aioson/agents/manifests/orchestrator.manifest.json +30 -0
  153. package/template/.aioson/agents/manifests/pentester.manifest.json +39 -0
  154. package/template/.aioson/agents/manifests/pm.manifest.json +26 -0
  155. package/template/.aioson/agents/manifests/product.manifest.json +23 -0
  156. package/template/.aioson/agents/manifests/qa.manifest.json +25 -0
  157. package/template/.aioson/agents/manifests/setup.manifest.json +20 -0
  158. package/template/.aioson/agents/manifests/ux-ui.manifest.json +24 -0
  159. package/template/.aioson/agents/neo.md +5 -7
  160. package/template/.aioson/agents/orache.md +2 -6
  161. package/template/.aioson/agents/orchestrator.md +81 -182
  162. package/template/.aioson/agents/pentester.md +235 -0
  163. package/template/.aioson/agents/pm.md +40 -104
  164. package/template/.aioson/agents/product.md +99 -344
  165. package/template/.aioson/agents/profiler-enricher.md +57 -6
  166. package/template/.aioson/agents/profiler-forge.md +17 -7
  167. package/template/.aioson/agents/profiler-researcher.md +29 -6
  168. package/template/.aioson/agents/qa.md +168 -514
  169. package/template/.aioson/agents/setup.md +52 -278
  170. package/template/.aioson/agents/sheldon.md +122 -754
  171. package/template/.aioson/agents/site-forge.md +111 -1583
  172. package/template/.aioson/agents/squad.md +139 -2010
  173. package/template/.aioson/agents/tester.md +10 -0
  174. package/template/.aioson/agents/ux-ui.md +104 -812
  175. package/template/.aioson/agents/validator.md +69 -0
  176. package/template/.aioson/brains/scripts/query.js +5 -1
  177. package/template/.aioson/config/autonomy-protocol.json +43 -0
  178. package/template/.aioson/config.md +43 -15
  179. package/template/.aioson/constitution.md +36 -33
  180. package/template/.aioson/context/design-doc.md +136 -0
  181. package/template/.aioson/context/project-map.md +57 -0
  182. package/template/.aioson/design-docs/code-reuse.md +48 -0
  183. package/template/.aioson/design-docs/componentization.md +47 -0
  184. package/template/.aioson/design-docs/file-size.md +52 -0
  185. package/template/.aioson/design-docs/folder-structure.md +51 -0
  186. package/template/.aioson/design-docs/naming.md +54 -0
  187. package/template/.aioson/docs/LAYERS.md +12 -2
  188. package/template/.aioson/docs/dev/execution-discipline.md +106 -0
  189. package/template/.aioson/docs/dev/stack-conventions.md +83 -0
  190. package/template/.aioson/docs/deyvin/continuity-recovery.md +57 -0
  191. package/template/.aioson/docs/deyvin/debugging-escalation.md +30 -0
  192. package/template/.aioson/docs/deyvin/pair-execution.md +44 -0
  193. package/template/.aioson/docs/deyvin/runtime-handoffs.md +36 -0
  194. package/template/.aioson/docs/product/conversation-playbook.md +116 -0
  195. package/template/.aioson/docs/product/prd-contract.md +107 -0
  196. package/template/.aioson/docs/product/quality-lens.md +57 -0
  197. package/template/.aioson/docs/product/research-loop.md +65 -0
  198. package/template/.aioson/docs/sheldon/enrichment-paths.md +134 -0
  199. package/template/.aioson/docs/sheldon/quality-lens.md +57 -0
  200. package/template/.aioson/docs/sheldon/research-loop.md +56 -0
  201. package/template/.aioson/docs/sheldon/web-intelligence.md +75 -0
  202. package/template/.aioson/docs/site-forge-build.md +195 -0
  203. package/template/.aioson/docs/site-forge-extraction.md +135 -0
  204. package/template/.aioson/docs/site-forge-qa.md +155 -0
  205. package/template/.aioson/docs/site-forge-recon.md +434 -0
  206. package/template/.aioson/docs/site-forge-transform.md +249 -0
  207. package/template/.aioson/docs/squad/content-output.md +91 -0
  208. package/template/.aioson/docs/squad/creation-flow.md +135 -0
  209. package/template/.aioson/docs/squad/domain-classification.md +117 -0
  210. package/template/.aioson/docs/squad/genome-bindings.md +47 -0
  211. package/template/.aioson/docs/squad/package-contract.md +234 -0
  212. package/template/.aioson/docs/squad/quality-lens.md +56 -0
  213. package/template/.aioson/docs/squad/research-loop.md +59 -0
  214. package/template/.aioson/docs/squad/session-operations.md +117 -0
  215. package/template/.aioson/docs/squad/workflow-quality.md +165 -0
  216. package/template/.aioson/docs/ux-ui/accessibility-audit.md +55 -0
  217. package/template/.aioson/docs/ux-ui/audit-mode.md +86 -0
  218. package/template/.aioson/docs/ux-ui/component-map.md +35 -0
  219. package/template/.aioson/docs/ux-ui/design-execution.md +111 -0
  220. package/template/.aioson/docs/ux-ui/design-gate.md +27 -0
  221. package/template/.aioson/docs/ux-ui/research-mode.md +39 -0
  222. package/template/.aioson/docs/ux-ui/site-delivery.md +156 -0
  223. package/template/.aioson/docs/ux-ui/token-contract.md +57 -0
  224. package/template/.aioson/genomes/copywriting.meta.json +48 -0
  225. package/template/.aioson/git-guard.json +11 -0
  226. package/template/.aioson/mcp/servers.md +0 -1
  227. package/template/.aioson/rules/agent-language-policy.md +93 -0
  228. package/template/.aioson/rules/aioson-context-boundary.md +63 -0
  229. package/template/.aioson/rules/canonical-path-contract.md +47 -0
  230. package/template/.aioson/rules/data-format-convention.md +24 -86
  231. package/template/.aioson/rules/disk-first-artifacts.md +44 -0
  232. package/template/.aioson/rules/output-brevity.md +44 -0
  233. package/template/.aioson/rules/prd-section-ownership.md +49 -0
  234. package/template/.aioson/rules/security-baseline.md +139 -0
  235. package/template/.aioson/rules/spec-level-ownership.md +61 -0
  236. package/template/.aioson/rules/squad-driver-pattern.md +81 -0
  237. package/template/.aioson/schemas/squad-blueprint.schema.json +24 -0
  238. package/template/.aioson/schemas/squad-manifest.schema.json +44 -0
  239. package/template/.aioson/skills/process/aioson-spec-driven/references/pm.md +30 -0
  240. package/template/.aioson/skills/process/secure-tdd/SKILL.md +97 -0
  241. package/template/.aioson/skills/process/secure-tdd/references/nextjs.md +81 -0
  242. package/template/.aioson/skills/process/secure-tdd/references/node-express.md +91 -0
  243. package/template/.aioson/skills/process/secure-tdd/references/planned-stacks.md +33 -0
  244. package/template/.aioson/skills/static/harness-validate/SKILL.md +46 -0
  245. package/template/.aioson/skills/static/web-research-cache.md +3 -0
  246. package/template/.aioson/tasks/squad-create.md +35 -8
  247. package/template/.aioson/tasks/squad-design.md +50 -2
  248. package/template/.aioson/tasks/squad-investigate.md +14 -1
  249. package/template/.claude/commands/aioson/agent/committer.md +5 -0
  250. package/template/.claude/commands/aioson/agent/copywriter.md +5 -0
  251. package/template/.claude/commands/aioson/agent/cypher.md +5 -0
  252. package/template/.claude/commands/aioson/agent/pair.md +5 -0
  253. package/template/.claude/commands/aioson/agent/validator.md +5 -0
  254. package/template/.gemini/commands/aios-analyst.toml +6 -3
  255. package/template/.gemini/commands/aios-architect.toml +7 -6
  256. package/template/.gemini/commands/aios-committer.toml +7 -0
  257. package/template/.gemini/commands/aios-copywriter.toml +7 -0
  258. package/template/.gemini/commands/aios-cypher.toml +7 -0
  259. package/template/.gemini/commands/aios-dev.toml +8 -7
  260. package/template/.gemini/commands/aios-deyvin.toml +6 -5
  261. package/template/.gemini/commands/aios-discovery-design-doc.toml +6 -3
  262. package/template/.gemini/commands/aios-genome.toml +7 -0
  263. package/template/.gemini/commands/aios-neo.toml +5 -3
  264. package/template/.gemini/commands/aios-orache.toml +7 -0
  265. package/template/.gemini/commands/aios-orchestrator.toml +8 -7
  266. package/template/.gemini/commands/aios-pair.toml +6 -5
  267. package/template/.gemini/commands/aios-pm.toml +8 -7
  268. package/template/.gemini/commands/aios-product.toml +5 -3
  269. package/template/.gemini/commands/aios-qa.toml +6 -5
  270. package/template/.gemini/commands/aios-setup.toml +5 -2
  271. package/template/.gemini/commands/aios-sheldon.toml +7 -0
  272. package/template/.gemini/commands/aios-site-forge.toml +7 -0
  273. package/template/.gemini/commands/aios-squad.toml +7 -0
  274. package/template/.gemini/commands/aios-tester.toml +6 -5
  275. package/template/.gemini/commands/aios-ux-ui.toml +8 -7
  276. package/template/.gemini/commands/aios-validator.toml +7 -0
  277. package/template/AGENTS.md +12 -1
  278. package/template/CLAUDE.md +5 -1
  279. package/template/.aioson/locales/en/agents/analyst.md +0 -244
  280. package/template/.aioson/locales/en/agents/architect.md +0 -245
  281. package/template/.aioson/locales/en/agents/dev.md +0 -397
  282. package/template/.aioson/locales/en/agents/deyvin.md +0 -137
  283. package/template/.aioson/locales/en/agents/discovery-design-doc.md +0 -27
  284. package/template/.aioson/locales/en/agents/genome.md +0 -212
  285. package/template/.aioson/locales/en/agents/neo.md +0 -8
  286. package/template/.aioson/locales/en/agents/orache.md +0 -6
  287. package/template/.aioson/locales/en/agents/orchestrator.md +0 -189
  288. package/template/.aioson/locales/en/agents/pair.md +0 -5
  289. package/template/.aioson/locales/en/agents/pm.md +0 -84
  290. package/template/.aioson/locales/en/agents/product.md +0 -378
  291. package/template/.aioson/locales/en/agents/profiler-enricher.md +0 -5
  292. package/template/.aioson/locales/en/agents/profiler-forge.md +0 -5
  293. package/template/.aioson/locales/en/agents/profiler-researcher.md +0 -5
  294. package/template/.aioson/locales/en/agents/qa.md +0 -270
  295. package/template/.aioson/locales/en/agents/setup.md +0 -421
  296. package/template/.aioson/locales/en/agents/sheldon.md +0 -455
  297. package/template/.aioson/locales/en/agents/squad.md +0 -449
  298. package/template/.aioson/locales/en/agents/tester.md +0 -6
  299. package/template/.aioson/locales/en/agents/ux-ui.md +0 -668
  300. package/template/.aioson/locales/es/agents/analyst.md +0 -225
  301. package/template/.aioson/locales/es/agents/architect.md +0 -245
  302. package/template/.aioson/locales/es/agents/dev.md +0 -370
  303. package/template/.aioson/locales/es/agents/deyvin.md +0 -99
  304. package/template/.aioson/locales/es/agents/discovery-design-doc.md +0 -21
  305. package/template/.aioson/locales/es/agents/genome.md +0 -104
  306. package/template/.aioson/locales/es/agents/neo.md +0 -50
  307. package/template/.aioson/locales/es/agents/orache.md +0 -105
  308. package/template/.aioson/locales/es/agents/orchestrator.md +0 -194
  309. package/template/.aioson/locales/es/agents/pair.md +0 -7
  310. package/template/.aioson/locales/es/agents/pm.md +0 -90
  311. package/template/.aioson/locales/es/agents/product.md +0 -372
  312. package/template/.aioson/locales/es/agents/profiler-enricher.md +0 -7
  313. package/template/.aioson/locales/es/agents/profiler-forge.md +0 -7
  314. package/template/.aioson/locales/es/agents/profiler-researcher.md +0 -7
  315. package/template/.aioson/locales/es/agents/qa.md +0 -198
  316. package/template/.aioson/locales/es/agents/setup.md +0 -405
  317. package/template/.aioson/locales/es/agents/sheldon.md +0 -309
  318. package/template/.aioson/locales/es/agents/squad.md +0 -532
  319. package/template/.aioson/locales/es/agents/tester.md +0 -9
  320. package/template/.aioson/locales/es/agents/ux-ui.md +0 -212
  321. package/template/.aioson/locales/fr/agents/analyst.md +0 -225
  322. package/template/.aioson/locales/fr/agents/architect.md +0 -245
  323. package/template/.aioson/locales/fr/agents/dev.md +0 -370
  324. package/template/.aioson/locales/fr/agents/deyvin.md +0 -99
  325. package/template/.aioson/locales/fr/agents/discovery-design-doc.md +0 -21
  326. package/template/.aioson/locales/fr/agents/genome.md +0 -104
  327. package/template/.aioson/locales/fr/agents/neo.md +0 -50
  328. package/template/.aioson/locales/fr/agents/orache.md +0 -106
  329. package/template/.aioson/locales/fr/agents/orchestrator.md +0 -194
  330. package/template/.aioson/locales/fr/agents/pair.md +0 -7
  331. package/template/.aioson/locales/fr/agents/pm.md +0 -90
  332. package/template/.aioson/locales/fr/agents/product.md +0 -372
  333. package/template/.aioson/locales/fr/agents/profiler-enricher.md +0 -7
  334. package/template/.aioson/locales/fr/agents/profiler-forge.md +0 -7
  335. package/template/.aioson/locales/fr/agents/profiler-researcher.md +0 -7
  336. package/template/.aioson/locales/fr/agents/qa.md +0 -198
  337. package/template/.aioson/locales/fr/agents/setup.md +0 -405
  338. package/template/.aioson/locales/fr/agents/sheldon.md +0 -309
  339. package/template/.aioson/locales/fr/agents/squad.md +0 -532
  340. package/template/.aioson/locales/fr/agents/tester.md +0 -9
  341. package/template/.aioson/locales/fr/agents/ux-ui.md +0 -212
  342. package/template/.aioson/locales/pt-BR/agents/analyst.md +0 -319
  343. package/template/.aioson/locales/pt-BR/agents/architect.md +0 -284
  344. package/template/.aioson/locales/pt-BR/agents/dev.md +0 -483
  345. package/template/.aioson/locales/pt-BR/agents/deyvin.md +0 -184
  346. package/template/.aioson/locales/pt-BR/agents/discovery-design-doc.md +0 -198
  347. package/template/.aioson/locales/pt-BR/agents/genome.md +0 -297
  348. package/template/.aioson/locales/pt-BR/agents/neo.md +0 -208
  349. package/template/.aioson/locales/pt-BR/agents/orache.md +0 -137
  350. package/template/.aioson/locales/pt-BR/agents/orchestrator.md +0 -324
  351. package/template/.aioson/locales/pt-BR/agents/pair.md +0 -5
  352. package/template/.aioson/locales/pt-BR/agents/pm.md +0 -182
  353. package/template/.aioson/locales/pt-BR/agents/product.md +0 -466
  354. package/template/.aioson/locales/pt-BR/agents/profiler-enricher.md +0 -5
  355. package/template/.aioson/locales/pt-BR/agents/profiler-forge.md +0 -5
  356. package/template/.aioson/locales/pt-BR/agents/profiler-researcher.md +0 -5
  357. package/template/.aioson/locales/pt-BR/agents/qa.md +0 -300
  358. package/template/.aioson/locales/pt-BR/agents/setup.md +0 -533
  359. package/template/.aioson/locales/pt-BR/agents/sheldon.md +0 -323
  360. package/template/.aioson/locales/pt-BR/agents/squad.md +0 -1330
  361. package/template/.aioson/locales/pt-BR/agents/tester.md +0 -449
  362. package/template/.aioson/locales/pt-BR/agents/ux-ui.md +0 -669
package/src/agents.js CHANGED
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  const { AGENT_DEFINITIONS } = require('./constants');
4
- const { getLocalizedAgentPath } = require('./locales');
5
4
 
6
5
  function normalizeAgentName(input) {
7
6
  return String(input || '')
@@ -23,18 +22,37 @@ function listAgentDefinitions() {
23
22
  }
24
23
 
25
24
  function resolveInstructionPath(agent, locale) {
26
- if (!locale) return agent.path;
27
- return getLocalizedAgentPath(agent.id, locale);
25
+ return agent.path;
28
26
  }
29
27
 
30
28
  function buildAgentPrompt(agent, tool, options = {}) {
31
29
  const safeTool = String(tool || 'codex').toLowerCase();
32
30
  const instructionPath = options.instructionPath || agent.path;
33
31
  const targetDir = options.targetDir ? String(options.targetDir) : '.';
32
+ const interactionLanguage = String(options.interactionLanguage || 'en');
33
+ const autonomyMode = String(options.autonomyMode || '').trim();
34
+ const capabilitySummary = String(options.capabilitySummary || '').trim();
35
+ const activationContext = String(options.activationContext || '').trim();
34
36
  const dependencyText =
35
37
  agent.dependsOn.length > 0
36
38
  ? `Check required context files first: ${agent.dependsOn.join(', ')}.`
37
39
  : 'No prerequisite context files are required.';
40
+ const activationBlock = activationContext
41
+ ? [
42
+ '',
43
+ '## Activation Context',
44
+ '',
45
+ activationContext
46
+ ].join('\n')
47
+ : '';
48
+
49
+ const autonomyBlock = [
50
+ '',
51
+ '## Autonomy Contract',
52
+ '',
53
+ `**Autonomy mode:** ${autonomyMode || 'guarded'}. Respect this as the maximum automation level allowed for this activation.`,
54
+ capabilitySummary ? `**Capability summary:** ${capabilitySummary}` : '**Capability summary:** No manifest declared for this agent in the current workspace.'
55
+ ].join('\n');
38
56
 
39
57
  const lifecycleBlock = [
40
58
  '',
@@ -45,22 +63,24 @@ function buildAgentPrompt(agent, tool, options = {}) {
45
63
  '',
46
64
  '> If the user needs dashboard-visible tracked execution in an external client, they must enter through `aioson workflow:next` or `aioson agent:prompt` before continuing.',
47
65
  '',
66
+ `**Language boundary:** Agent instructions are canonical in English. All user-facing communication must be in ${interactionLanguage}.`,
67
+ '',
48
68
  `**Scope boundary:** You operate exclusively as ${agent.command}. Do not perform work that belongs to another agent. When your work is complete, output only the handoff — which agent is next and why. Do not continue into that agent\'s territory.`,
49
69
  ].join('\n');
50
70
 
51
71
  if (safeTool === 'claude') {
52
- return `Read ${instructionPath} and execute ${agent.command}. ${dependencyText} Write output to ${agent.output}.${lifecycleBlock}`;
72
+ return `Read ${instructionPath} and execute ${agent.command}. ${dependencyText}${activationBlock} Write output to ${agent.output}.${autonomyBlock}${lifecycleBlock}`;
53
73
  }
54
74
 
55
75
  if (safeTool === 'gemini') {
56
- return `Run the Gemini command mapped to ${instructionPath} and execute ${agent.command}. ${dependencyText} Save result to ${agent.output}.${lifecycleBlock}`;
76
+ return `Run the Gemini command mapped to ${instructionPath} and execute ${agent.command}. ${dependencyText}${activationBlock} Save result to ${agent.output}.${autonomyBlock}${lifecycleBlock}`;
57
77
  }
58
78
 
59
79
  if (safeTool === 'opencode') {
60
- return `Use agent "${agent.id}" from ${instructionPath}. ${dependencyText} Save output to ${agent.output}.${lifecycleBlock}`;
80
+ return `Use agent "${agent.id}" from ${instructionPath}. ${dependencyText}${activationBlock} Save output to ${agent.output}.${autonomyBlock}${lifecycleBlock}`;
61
81
  }
62
82
 
63
- return `Read AGENTS.md and execute ${agent.command} using ${instructionPath}. ${dependencyText} Save output to ${agent.output}.${lifecycleBlock}`;
83
+ return `Read AGENTS.md and execute ${agent.command} using ${instructionPath}. ${dependencyText}${activationBlock} Save output to ${agent.output}.${autonomyBlock}${lifecycleBlock}`;
64
84
  }
65
85
 
66
86
  module.exports = {
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ const fs = require('node:fs/promises');
4
+ const path = require('node:path');
5
+ const { exists } = require('./utils');
6
+
7
+ const AUTONOMY_PROTOCOL_RELATIVE_PATH = '.aioson/config/autonomy-protocol.json';
8
+ const MODES = ['guarded', 'trusted', 'headless'];
9
+
10
+ function buildDefaultProtocol() {
11
+ return {
12
+ version: '1.0',
13
+ global_mode: 'guarded',
14
+ tools: {},
15
+ agents: {}
16
+ };
17
+ }
18
+
19
+ function normalizeMode(mode, fallback = 'guarded') {
20
+ const safe = String(mode || '').trim().toLowerCase();
21
+ return MODES.includes(safe) ? safe : fallback;
22
+ }
23
+
24
+ async function readAutonomyProtocol(targetDir) {
25
+ const protocolPath = path.join(targetDir, AUTONOMY_PROTOCOL_RELATIVE_PATH);
26
+ if (!(await exists(protocolPath))) return buildDefaultProtocol();
27
+
28
+ try {
29
+ const raw = await fs.readFile(protocolPath, 'utf8');
30
+ const parsed = JSON.parse(raw);
31
+ return {
32
+ ...buildDefaultProtocol(),
33
+ ...parsed,
34
+ global_mode: normalizeMode(parsed.global_mode, 'guarded'),
35
+ tools: parsed.tools && typeof parsed.tools === 'object' ? parsed.tools : {},
36
+ agents: parsed.agents && typeof parsed.agents === 'object' ? parsed.agents : {}
37
+ };
38
+ } catch {
39
+ return buildDefaultProtocol();
40
+ }
41
+ }
42
+
43
+ function getToolPolicy(protocol, tool) {
44
+ const safeTool = String(tool || 'codex').trim().toLowerCase();
45
+ const policy = protocol && protocol.tools && typeof protocol.tools === 'object'
46
+ ? protocol.tools[safeTool]
47
+ : null;
48
+ const rawFallbackMode = String(policy && policy.fallback_mode ? policy.fallback_mode : 'guarded').trim().toLowerCase();
49
+
50
+ return {
51
+ mode: normalizeMode(policy && policy.mode, protocol && protocol.global_mode ? protocol.global_mode : 'guarded'),
52
+ fallback_mode: ['guarded', 'headless', 'abort'].includes(rawFallbackMode) ? rawFallbackMode : 'guarded',
53
+ shell_whitelist: Array.isArray(policy && policy.shell_whitelist) ? policy.shell_whitelist : [],
54
+ shell_blacklist: Array.isArray(policy && policy.shell_blacklist) ? policy.shell_blacklist : [],
55
+ aioson_whitelist: Array.isArray(policy && policy.aioson_whitelist) ? policy.aioson_whitelist : [],
56
+ requires_tty: policy && Object.prototype.hasOwnProperty.call(policy, 'requires_tty')
57
+ ? Boolean(policy.requires_tty)
58
+ : true,
59
+ max_auto_retries: Number.isInteger(policy && policy.max_auto_retries) ? policy.max_auto_retries : 3
60
+ };
61
+ }
62
+
63
+ function getAgentPolicy(protocol, agentId) {
64
+ if (!protocol || !protocol.agents || typeof protocol.agents !== 'object') return {};
65
+ return protocol.agents[String(agentId || '').trim()] || {};
66
+ }
67
+
68
+ function getMostPermissiveMode(modes, fallback = 'guarded') {
69
+ if (!Array.isArray(modes) || modes.length === 0) return fallback;
70
+ let bestIndex = MODES.indexOf(normalizeMode(fallback, 'guarded'));
71
+ for (const mode of modes) {
72
+ const index = MODES.indexOf(normalizeMode(mode, fallback));
73
+ if (index > bestIndex) bestIndex = index;
74
+ }
75
+ return MODES[bestIndex];
76
+ }
77
+
78
+ function getAgentMaxMode(protocol, agentId, manifest = null) {
79
+ const agentPolicy = getAgentPolicy(protocol, agentId);
80
+ if (agentPolicy && agentPolicy.max_mode) {
81
+ return normalizeMode(agentPolicy.max_mode, 'guarded');
82
+ }
83
+ if (manifest && Array.isArray(manifest.autonomy_modes) && manifest.autonomy_modes.length > 0) {
84
+ return getMostPermissiveMode(manifest.autonomy_modes, 'guarded');
85
+ }
86
+ return normalizeMode(protocol && protocol.global_mode, 'guarded');
87
+ }
88
+
89
+ function resolveEffectiveMode({ protocol, tool, agentId, manifest = null, requestedMode = null }) {
90
+ const toolPolicy = getToolPolicy(protocol || buildDefaultProtocol(), tool);
91
+ const toolMode = normalizeMode(toolPolicy.mode, 'guarded');
92
+ const agentMode = getAgentMaxMode(protocol || buildDefaultProtocol(), agentId, manifest);
93
+
94
+ const toolIndex = MODES.indexOf(toolMode);
95
+ const agentIndex = MODES.indexOf(agentMode);
96
+ const baseIndex = Math.min(toolIndex, agentIndex);
97
+
98
+ if (!requestedMode) return MODES[baseIndex];
99
+
100
+ const requestedIndex = MODES.indexOf(normalizeMode(requestedMode, 'guarded'));
101
+ return MODES[Math.min(baseIndex, requestedIndex)];
102
+ }
103
+
104
+ function matchPattern(value, pattern) {
105
+ const escaped = String(pattern || '')
106
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
107
+ .replace(/\*/g, '.*');
108
+ return new RegExp(`^${escaped}$`, 'i').test(String(value || ''));
109
+ }
110
+
111
+ function isCommandAllowed(policy, commandType, commandString) {
112
+ if (!policy) return false;
113
+ const safeType = String(commandType || '').trim().toLowerCase();
114
+ const whitelist = Array.isArray(policy[`${safeType}_whitelist`]) ? policy[`${safeType}_whitelist`] : [];
115
+ const blacklist = Array.isArray(policy[`${safeType}_blacklist`]) ? policy[`${safeType}_blacklist`] : [];
116
+
117
+ for (const pattern of blacklist) {
118
+ if (matchPattern(commandString, pattern)) return false;
119
+ }
120
+
121
+ if (whitelist.length === 0) return true;
122
+ return whitelist.some((pattern) => matchPattern(commandString, pattern));
123
+ }
124
+
125
+ function canRunHeadless(policy) {
126
+ return Boolean(policy) && policy.requires_tty === false;
127
+ }
128
+
129
+ module.exports = {
130
+ AUTONOMY_PROTOCOL_RELATIVE_PATH,
131
+ MODES,
132
+ readAutonomyProtocol,
133
+ getToolPolicy,
134
+ getAgentPolicy,
135
+ getAgentMaxMode,
136
+ resolveEffectiveMode,
137
+ isCommandAllowed,
138
+ canRunHeadless
139
+ };
@@ -0,0 +1,161 @@
1
+ 'use strict';
2
+
3
+ const fs = require('node:fs/promises');
4
+ const path = require('node:path');
5
+
6
+ function splitCsv(value) {
7
+ return String(value || '')
8
+ .split(',')
9
+ .map((item) => item.trim())
10
+ .filter(Boolean);
11
+ }
12
+
13
+ function normalizeBrainPath(targetDir, brainPath) {
14
+ const raw = String(brainPath || '').trim();
15
+ if (!raw) return null;
16
+ if (path.isAbsolute(raw)) return raw;
17
+ if (raw.startsWith('.aioson/brains/')) return path.join(targetDir, raw);
18
+ return path.join(targetDir, '.aioson', 'brains', raw);
19
+ }
20
+
21
+ async function readJsonFile(filePath) {
22
+ const content = await fs.readFile(filePath, 'utf8');
23
+ return JSON.parse(content);
24
+ }
25
+
26
+ function brainMatches({ brain, tags, agent }) {
27
+ if (agent) {
28
+ const agents = Array.isArray(brain.agents) ? brain.agents : [];
29
+ if (!agents.includes(agent)) return false;
30
+ }
31
+ if (tags.length > 0) {
32
+ const brainTags = Array.isArray(brain.tags) ? brain.tags : [];
33
+ if (!tags.some((tag) => brainTags.includes(tag))) return false;
34
+ }
35
+ return true;
36
+ }
37
+
38
+ function nodeMatches({ node, tags, matchMode, minQuality, verdicts, ids, avoidOnly }) {
39
+ if (ids.length > 0) return ids.includes(node.id);
40
+
41
+ const nodeTags = Array.isArray(node.tags) ? node.tags : [];
42
+ if (tags.length > 0) {
43
+ const ok = matchMode === 'all'
44
+ ? tags.every((tag) => nodeTags.includes(tag))
45
+ : tags.some((tag) => nodeTags.includes(tag));
46
+ if (!ok) return false;
47
+ }
48
+
49
+ if (minQuality > 0 && Number(node.q || 0) < minQuality) return false;
50
+
51
+ if (verdicts.length > 0) {
52
+ const verdict = String(node.v || '').toUpperCase();
53
+ if (!verdicts.includes(verdict)) return false;
54
+ }
55
+
56
+ if (avoidOnly) {
57
+ const verdict = String(node.v || '').toUpperCase();
58
+ if (verdict !== 'AVOID' && verdict !== 'BROKEN') return false;
59
+ }
60
+
61
+ return true;
62
+ }
63
+
64
+ async function queryBrains({
65
+ targetDir,
66
+ tags = [],
67
+ matchMode = 'any',
68
+ minQuality = 0,
69
+ agent = '',
70
+ verdicts = [],
71
+ ids = [],
72
+ avoidOnly = false
73
+ }) {
74
+ const brainsDir = path.join(targetDir, '.aioson', 'brains');
75
+ const indexPath = path.join(brainsDir, '_index.json');
76
+
77
+ let index;
78
+ try {
79
+ index = await readJsonFile(indexPath);
80
+ } catch {
81
+ return {
82
+ ok: false,
83
+ reason: 'missing_index',
84
+ indexPath,
85
+ brainFiles: [],
86
+ nodes: [],
87
+ warnings: [`No _index.json found at ${indexPath}`]
88
+ };
89
+ }
90
+
91
+ const requestedTags = Array.isArray(tags) ? tags : splitCsv(tags);
92
+ const requestedVerdicts = (Array.isArray(verdicts) ? verdicts : splitCsv(verdicts))
93
+ .map((verdict) => verdict.toUpperCase());
94
+ const requestedIds = Array.isArray(ids) ? ids : splitCsv(ids);
95
+ const requestedAgent = String(agent || '').replace(/^@/, '').trim();
96
+ const normalizedMatchMode = matchMode === 'all' ? 'all' : 'any';
97
+ const minQ = Number(minQuality || 0);
98
+
99
+ const indexedBrains = Array.isArray(index.brains) ? index.brains : [];
100
+ const selectedBrains = indexedBrains.filter((brain) => brainMatches({
101
+ brain,
102
+ tags: requestedTags,
103
+ agent: requestedAgent
104
+ }));
105
+
106
+ const warnings = [];
107
+ const nodes = [];
108
+
109
+ for (const brain of selectedBrains) {
110
+ const brainPath = normalizeBrainPath(targetDir, brain.path);
111
+ if (!brainPath) {
112
+ warnings.push(`Brain ${brain.id || '(unknown)'} has no path`);
113
+ continue;
114
+ }
115
+
116
+ let data;
117
+ try {
118
+ data = await readJsonFile(brainPath);
119
+ } catch {
120
+ warnings.push(`Brain file not found or invalid: ${brainPath}`);
121
+ continue;
122
+ }
123
+
124
+ const brainNodes = Array.isArray(data.nodes) ? data.nodes : [];
125
+ for (const node of brainNodes) {
126
+ if (nodeMatches({
127
+ node,
128
+ tags: requestedTags,
129
+ matchMode: normalizedMatchMode,
130
+ minQuality: minQ,
131
+ verdicts: requestedVerdicts,
132
+ ids: requestedIds,
133
+ avoidOnly
134
+ })) {
135
+ nodes.push({ ...node, _brain: brain.id || null, _brain_path: brain.path || null });
136
+ }
137
+ }
138
+ }
139
+
140
+ return {
141
+ ok: true,
142
+ indexPath,
143
+ brainFiles: selectedBrains.map((brain) => brain.path),
144
+ nodes,
145
+ warnings
146
+ };
147
+ }
148
+
149
+ function formatBrainNodesCompact(nodes) {
150
+ if (!nodes || nodes.length === 0) return '(no matches)';
151
+ return nodes
152
+ .map((node) => `[${node.q || 0}* ${node.v || 'UNKNOWN'}] ${node.id} - ${node.title}\n ${node.s || ''}`.trimEnd())
153
+ .join('\n\n');
154
+ }
155
+
156
+ module.exports = {
157
+ splitCsv,
158
+ normalizeBrainPath,
159
+ queryBrains,
160
+ formatBrainNodesCompact
161
+ };