@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18

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 (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -1
  3. package/bin/aiwg.mjs +349 -0
  4. package/dist/src/a2a/agent-card.js +145 -0
  5. package/dist/src/a2a/client.js +411 -0
  6. package/dist/src/a2a/hitl-cli.js +171 -0
  7. package/dist/src/a2a/hitl-driver.js +370 -0
  8. package/dist/src/a2a/hitl.js +181 -0
  9. package/dist/src/a2a/http.js +193 -0
  10. package/dist/src/a2a/jcs.js +128 -0
  11. package/dist/src/a2a/jws.js +187 -0
  12. package/dist/src/a2a/types.js +24 -0
  13. package/dist/src/a2a/webhook.js +240 -0
  14. package/dist/src/activity-log/cli.js +348 -0
  15. package/dist/src/activity-log/parser.js +81 -0
  16. package/dist/src/activity-log/types.js +50 -0
  17. package/dist/src/agents/agent-deployer.js +367 -0
  18. package/dist/src/agents/agent-packager.js +271 -0
  19. package/dist/src/agents/agent-validator.js +271 -0
  20. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  21. package/dist/src/agents/grounding/types.js +12 -0
  22. package/dist/src/agents/index.js +10 -0
  23. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  24. package/dist/src/agents/types.js +7 -0
  25. package/dist/src/api/index.d.ts +10 -0
  26. package/dist/src/api/index.js +10 -0
  27. package/dist/src/artifacts/address-parser.js +73 -0
  28. package/dist/src/artifacts/audit/cli.js +183 -0
  29. package/dist/src/artifacts/audit/drift.js +122 -0
  30. package/dist/src/artifacts/audit/types.js +12 -0
  31. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  32. package/dist/src/artifacts/backends/json-backend.js +129 -0
  33. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  34. package/dist/src/artifacts/browser-export.js +622 -0
  35. package/dist/src/artifacts/capability-resolver.js +94 -0
  36. package/dist/src/artifacts/checksum-manifest.js +91 -0
  37. package/dist/src/artifacts/citation-parser.js +162 -0
  38. package/dist/src/artifacts/cli.js +1486 -0
  39. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  40. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  41. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  42. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  43. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  44. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  45. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  46. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  47. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  48. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  49. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  51. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  52. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  53. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  54. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  55. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  56. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  57. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  58. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  60. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  61. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  62. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  63. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  64. package/dist/src/artifacts/corpus-views/build.js +126 -0
  65. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  66. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  67. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  68. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  69. package/dist/src/artifacts/dep-graph.js +173 -0
  70. package/dist/src/artifacts/discover-facets.js +375 -0
  71. package/dist/src/artifacts/embedding-index.js +354 -0
  72. package/dist/src/artifacts/enrichment/cli.js +240 -0
  73. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  74. package/dist/src/artifacts/enrichment/store.js +90 -0
  75. package/dist/src/artifacts/enrichment/types.js +12 -0
  76. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  77. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  78. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  79. package/dist/src/artifacts/fulltext.js +108 -0
  80. package/dist/src/artifacts/graph-backend.js +51 -0
  81. package/dist/src/artifacts/graph-query.js +247 -0
  82. package/dist/src/artifacts/hybrid-query.js +225 -0
  83. package/dist/src/artifacts/index-builder.js +1089 -0
  84. package/dist/src/artifacts/index-reader.js +112 -0
  85. package/dist/src/artifacts/index-status.js +193 -0
  86. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  87. package/dist/src/artifacts/move.js +154 -0
  88. package/dist/src/artifacts/operational-state.js +239 -0
  89. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  90. package/dist/src/artifacts/query-engine.js +1955 -0
  91. package/dist/src/artifacts/source-graph.js +529 -0
  92. package/dist/src/artifacts/stats.js +169 -0
  93. package/dist/src/artifacts/types.js +606 -0
  94. package/dist/src/artifacts/views/cli.js +293 -0
  95. package/dist/src/artifacts/views/definition.js +170 -0
  96. package/dist/src/artifacts/views/store.js +149 -0
  97. package/dist/src/artifacts/views/types.js +8 -0
  98. package/dist/src/artifacts/watcher.js +255 -0
  99. package/dist/src/catalog/builtin-models.json +636 -0
  100. package/dist/src/catalog/cli.js +228 -0
  101. package/dist/src/catalog/cli.mjs +289 -0
  102. package/dist/src/catalog/index.js +15 -0
  103. package/dist/src/catalog/loader.js +217 -0
  104. package/dist/src/catalog/loader.mjs +251 -0
  105. package/dist/src/catalog/sources.json +41 -0
  106. package/dist/src/catalog/types.js +8 -0
  107. package/dist/src/channel/manager.mjs +504 -0
  108. package/dist/src/cli/agent-spawn.js +178 -0
  109. package/dist/src/cli/cli-extension-loader.js +245 -0
  110. package/dist/src/cli/command-log.js +275 -0
  111. package/dist/src/cli/config-loader.js +232 -0
  112. package/dist/src/cli/env.js +82 -0
  113. package/dist/src/cli/errors.js +150 -0
  114. package/dist/src/cli/find-package-root.js +40 -0
  115. package/dist/src/cli/git-hooks.js +250 -0
  116. package/dist/src/cli/handlers/agentcard.js +206 -0
  117. package/dist/src/cli/handlers/artifacts.js +76 -0
  118. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  119. package/dist/src/cli/handlers/cockpit.js +137 -0
  120. package/dist/src/cli/handlers/command-log.js +37 -0
  121. package/dist/src/cli/handlers/daemon.js +59 -0
  122. package/dist/src/cli/handlers/diagnose.js +300 -0
  123. package/dist/src/cli/handlers/execution-mode.js +105 -0
  124. package/dist/src/cli/handlers/feedback.js +341 -0
  125. package/dist/src/cli/handlers/help.js +147 -0
  126. package/dist/src/cli/handlers/index.js +302 -0
  127. package/dist/src/cli/handlers/init.js +179 -0
  128. package/dist/src/cli/handlers/install.js +129 -0
  129. package/dist/src/cli/handlers/issues.js +46 -0
  130. package/dist/src/cli/handlers/lint.js +42 -0
  131. package/dist/src/cli/handlers/local-executor.js +315 -0
  132. package/dist/src/cli/handlers/marketplace.js +168 -0
  133. package/dist/src/cli/handlers/mc.js +1010 -0
  134. package/dist/src/cli/handlers/models.js +352 -0
  135. package/dist/src/cli/handlers/packages.js +155 -0
  136. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  137. package/dist/src/cli/handlers/ralph.js +575 -0
  138. package/dist/src/cli/handlers/refresh.js +432 -0
  139. package/dist/src/cli/handlers/regenerate.js +336 -0
  140. package/dist/src/cli/handlers/repo-access.js +109 -0
  141. package/dist/src/cli/handlers/run.js +165 -0
  142. package/dist/src/cli/handlers/runtime-info.js +301 -0
  143. package/dist/src/cli/handlers/sandbox.js +197 -0
  144. package/dist/src/cli/handlers/scaffolding.js +149 -0
  145. package/dist/src/cli/handlers/script-runner.js +121 -0
  146. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  147. package/dist/src/cli/handlers/serve.js +1835 -0
  148. package/dist/src/cli/handlers/session.js +348 -0
  149. package/dist/src/cli/handlers/setup.js +440 -0
  150. package/dist/src/cli/handlers/skill-lint.js +367 -0
  151. package/dist/src/cli/handlers/skill-usage.js +74 -0
  152. package/dist/src/cli/handlers/steward.js +567 -0
  153. package/dist/src/cli/handlers/subcommands.js +1702 -0
  154. package/dist/src/cli/handlers/team.js +337 -0
  155. package/dist/src/cli/handlers/types.js +11 -0
  156. package/dist/src/cli/handlers/use.js +2772 -0
  157. package/dist/src/cli/handlers/utilities.js +703 -0
  158. package/dist/src/cli/handlers/version.js +134 -0
  159. package/dist/src/cli/handlers/workspace-context.js +93 -0
  160. package/dist/src/cli/handlers/workspace.js +126 -0
  161. package/dist/src/cli/help-generator.js +178 -0
  162. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  163. package/dist/src/cli/hooks/executor.js +96 -0
  164. package/dist/src/cli/hooks/index.js +15 -0
  165. package/dist/src/cli/hooks/registry.js +143 -0
  166. package/dist/src/cli/hooks/types.js +13 -0
  167. package/dist/src/cli/log.js +492 -0
  168. package/dist/src/cli/project-isolation/detect.js +70 -0
  169. package/dist/src/cli/project-isolation/index.js +7 -0
  170. package/dist/src/cli/project-isolation/signals.js +17 -0
  171. package/dist/src/cli/project-isolation/warning.js +102 -0
  172. package/dist/src/cli/prompt-utils.js +155 -0
  173. package/dist/src/cli/provider-deployment-plan.js +126 -0
  174. package/dist/src/cli/provider-resolution.js +119 -0
  175. package/dist/src/cli/router.js +305 -0
  176. package/dist/src/cli/scope-resolver.js +392 -0
  177. package/dist/src/cli/skill-usage.js +616 -0
  178. package/dist/src/cli/ui.js +224 -0
  179. package/dist/src/cli/watch-service.js +203 -0
  180. package/dist/src/cli/workflow-orchestrator.js +478 -0
  181. package/dist/src/cli/workspace-signals.js +321 -0
  182. package/dist/src/community/footer.js +14 -0
  183. package/dist/src/community/links.js +123 -0
  184. package/dist/src/community/milestones.js +46 -0
  185. package/dist/src/community/nudge-policy.js +93 -0
  186. package/dist/src/config/aiwg-config.js +883 -0
  187. package/dist/src/config/cli.js +703 -0
  188. package/dist/src/config/gitignore.js +156 -0
  189. package/dist/src/config/project-artifacts.js +76 -0
  190. package/dist/src/config/user-config.js +428 -0
  191. package/dist/src/config/user-registry.js +127 -0
  192. package/dist/src/config/workspace.js +276 -0
  193. package/dist/src/contributors/detect.js +39 -0
  194. package/dist/src/contributors/discover.js +172 -0
  195. package/dist/src/contributors/heuristic.js +186 -0
  196. package/dist/src/contributors/index.js +11 -0
  197. package/dist/src/contributors/types.js +13 -0
  198. package/dist/src/contributors/validation.js +116 -0
  199. package/dist/src/data/community.schema.json +43 -0
  200. package/dist/src/data/community.yaml +16 -0
  201. package/dist/src/extensions/capability-index.js +270 -0
  202. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  203. package/dist/src/extensions/commands/definitions.js +3485 -0
  204. package/dist/src/extensions/deployment-registration.js +463 -0
  205. package/dist/src/extensions/index.js +22 -0
  206. package/dist/src/extensions/loader.js +132 -0
  207. package/dist/src/extensions/managed-marker.js +100 -0
  208. package/dist/src/extensions/manifest.js +196 -0
  209. package/dist/src/extensions/project-local-activity.js +114 -0
  210. package/dist/src/extensions/project-local-discovery.js +261 -0
  211. package/dist/src/extensions/project-local-doctor.js +281 -0
  212. package/dist/src/extensions/project-local-gitignore.js +176 -0
  213. package/dist/src/extensions/project-local-paths.js +121 -0
  214. package/dist/src/extensions/project-local-promote.js +218 -0
  215. package/dist/src/extensions/project-local-remove.js +373 -0
  216. package/dist/src/extensions/project-local-scaffold.js +252 -0
  217. package/dist/src/extensions/project-quickref.js +291 -0
  218. package/dist/src/extensions/registry.js +368 -0
  219. package/dist/src/extensions/shadow-resolver.js +271 -0
  220. package/dist/src/extensions/types.js +86 -0
  221. package/dist/src/extensions/upstream-registry.js +195 -0
  222. package/dist/src/extensions/validation.js +631 -0
  223. package/dist/src/features/catalog.js +88 -0
  224. package/dist/src/features/cli.js +197 -0
  225. package/dist/src/features/installer.js +57 -0
  226. package/dist/src/features/paths.js +14 -0
  227. package/dist/src/features/runtime.js +21 -0
  228. package/dist/src/features/status.js +134 -0
  229. package/dist/src/hooks/laziness-detection.js +532 -0
  230. package/dist/src/intake/git-history-analyzer.js +486 -0
  231. package/dist/src/intake/index.js +9 -0
  232. package/dist/src/issues/cli.js +327 -0
  233. package/dist/src/issues/index.js +5 -0
  234. package/dist/src/issues/live.js +154 -0
  235. package/dist/src/issues/local.js +666 -0
  236. package/dist/src/issues/sync.js +143 -0
  237. package/dist/src/issues/types.js +2 -0
  238. package/dist/src/issues/workflows.js +164 -0
  239. package/dist/src/kb/cli.js +173 -0
  240. package/dist/src/lint/cli.js +171 -0
  241. package/dist/src/lint/loader.js +225 -0
  242. package/dist/src/lint/reporters.js +141 -0
  243. package/dist/src/lint/runner.js +364 -0
  244. package/dist/src/lint/types.js +10 -0
  245. package/dist/src/marketplace/cache.js +110 -0
  246. package/dist/src/marketplace/identifier.js +63 -0
  247. package/dist/src/marketplace/registry.js +36 -0
  248. package/dist/src/marketplace/sources/clawhub.js +53 -0
  249. package/dist/src/marketplace/sources/git.js +45 -0
  250. package/dist/src/marketplace/types.js +9 -0
  251. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  252. package/dist/src/mcp/cli.mjs +1197 -0
  253. package/dist/src/mcp/elicitation.mjs +149 -0
  254. package/dist/src/mcp/helpers.mjs +287 -0
  255. package/dist/src/mcp/index.mjs +11 -0
  256. package/dist/src/mcp/profiles.js +263 -0
  257. package/dist/src/mcp/profiles.mjs +360 -0
  258. package/dist/src/mcp/registry.js +376 -0
  259. package/dist/src/mcp/registry.mjs +387 -0
  260. package/dist/src/mcp/server.mjs +633 -0
  261. package/dist/src/mcp/test-simple.mjs +271 -0
  262. package/dist/src/mcp/tools/command-run.mjs +101 -0
  263. package/dist/src/mcp/tools/discovery.mjs +291 -0
  264. package/dist/src/mcp/tools/interaction.mjs +87 -0
  265. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  266. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  267. package/dist/src/memory/cli.js +166 -0
  268. package/dist/src/memory/project-registry.js +282 -0
  269. package/dist/src/metrics/artifact-metrics.js +184 -0
  270. package/dist/src/metrics/context-budget.js +174 -0
  271. package/dist/src/metrics/token-counter.js +133 -0
  272. package/dist/src/models/config-loader.js +228 -0
  273. package/dist/src/models/index.js +22 -0
  274. package/dist/src/models/model-capabilities.v1.json +120 -0
  275. package/dist/src/models/model-catalog.v1.json +96 -0
  276. package/dist/src/models/model-discovery.js +521 -0
  277. package/dist/src/models/provider-models.js +73 -0
  278. package/dist/src/models/provider-policy.js +273 -0
  279. package/dist/src/models/resolver.js +245 -0
  280. package/dist/src/models/router.js +70 -0
  281. package/dist/src/models/types.js +8 -0
  282. package/dist/src/models/wrapper-deployment.js +178 -0
  283. package/dist/src/models/wrapper-route.js +54 -0
  284. package/dist/src/ops/cli.js +268 -0
  285. package/dist/src/ops/registry.js +623 -0
  286. package/dist/src/packages/adapters/clawhub.js +113 -0
  287. package/dist/src/packages/adapters/git.js +153 -0
  288. package/dist/src/packages/adapters/gitea.js +93 -0
  289. package/dist/src/packages/adapters/github.js +69 -0
  290. package/dist/src/packages/adapters/local-cache.js +89 -0
  291. package/dist/src/packages/package-registry.js +143 -0
  292. package/dist/src/packages/registry.js +238 -0
  293. package/dist/src/packages/types.js +11 -0
  294. package/dist/src/plugin/cross-framework-ops.js +475 -0
  295. package/dist/src/plugin/framework-config-loader.js +235 -0
  296. package/dist/src/plugin/framework-detector.js +186 -0
  297. package/dist/src/plugin/framework-isolator.js +341 -0
  298. package/dist/src/plugin/framework-migration.js +371 -0
  299. package/dist/src/plugin/metadata-validator.js +906 -0
  300. package/dist/src/plugin/plugin-installer.js +436 -0
  301. package/dist/src/plugin/plugin-status.js +369 -0
  302. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  303. package/dist/src/plugin/registry-validator.js +344 -0
  304. package/dist/src/plugin/skill-command-translator.js +415 -0
  305. package/dist/src/plugin/workspace-creator.js +189 -0
  306. package/dist/src/plugin/workspace-migrator.js +821 -0
  307. package/dist/src/policy/authorization.js +390 -0
  308. package/dist/src/policy/repo-access.js +215 -0
  309. package/dist/src/provenance/cli.js +16 -0
  310. package/dist/src/providers/capability-matrix.js +300 -0
  311. package/dist/src/providers/capability-matrix.yaml +514 -0
  312. package/dist/src/providers/provider-definitions.js +977 -0
  313. package/dist/src/providers/provider-definitions.mjs +159 -0
  314. package/dist/src/providers/provider-inventory.js +169 -0
  315. package/dist/src/quality/feedback-ab.js +174 -0
  316. package/dist/src/quality/feedback-collector.js +176 -0
  317. package/dist/src/quality/feedback-tracker.js +123 -0
  318. package/dist/src/quality/patterns/adr.json +24 -0
  319. package/dist/src/quality/patterns/sad.json +24 -0
  320. package/dist/src/quality/patterns/test-plan.json +24 -0
  321. package/dist/src/quality/patterns/use-case.json +24 -0
  322. package/dist/src/quality/scoring.js +157 -0
  323. package/dist/src/reflections/cli.js +15 -0
  324. package/dist/src/release/plan.js +139 -0
  325. package/dist/src/research/cache/manager.js +227 -0
  326. package/dist/src/research/clients/arxiv.js +156 -0
  327. package/dist/src/research/clients/base.js +197 -0
  328. package/dist/src/research/clients/crossref.js +112 -0
  329. package/dist/src/research/clients/semantic-scholar.js +126 -0
  330. package/dist/src/research/clients/unpaywall.js +87 -0
  331. package/dist/src/research/index.js +14 -0
  332. package/dist/src/research/query-cli.js +336 -0
  333. package/dist/src/research/services/acquisition.js +313 -0
  334. package/dist/src/research/services/archival.js +225 -0
  335. package/dist/src/research/services/citation.js +279 -0
  336. package/dist/src/research/services/discovery.js +243 -0
  337. package/dist/src/research/services/documentation.js +269 -0
  338. package/dist/src/research/services/index.js +14 -0
  339. package/dist/src/research/services/provenance.js +279 -0
  340. package/dist/src/research/services/quality.js +370 -0
  341. package/dist/src/research/services/types.js +7 -0
  342. package/dist/src/research/storage-cli.js +20 -0
  343. package/dist/src/research/types.js +47 -0
  344. package/dist/src/resources/index.d.ts +2 -0
  345. package/dist/src/resources/index.js +2 -0
  346. package/dist/src/resources/web-release.d.ts +89 -0
  347. package/dist/src/resources/web-release.js +886 -0
  348. package/dist/src/rlm/cache/cli.js +162 -0
  349. package/dist/src/rlm/cache/hash.js +35 -0
  350. package/dist/src/rlm/cache/store.js +170 -0
  351. package/dist/src/rlm/cache/types.js +8 -0
  352. package/dist/src/rlm/cli.js +650 -0
  353. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  354. package/dist/src/serve/agent-router.js +205 -0
  355. package/dist/src/serve/dispatch-router.js +171 -0
  356. package/dist/src/serve/executor-registry.js +715 -0
  357. package/dist/src/serve/mission-conductor.js +177 -0
  358. package/dist/src/serve/orchestrator-adapter.js +113 -0
  359. package/dist/src/serve/orchestrator-override.js +94 -0
  360. package/dist/src/serve/orchestrator-pty.js +133 -0
  361. package/dist/src/serve/pty-bridge.js +799 -0
  362. package/dist/src/serve/sandbox-registry.js +832 -0
  363. package/dist/src/serve/screen-reader.js +228 -0
  364. package/dist/src/serve/stack-adapters.js +68 -0
  365. package/dist/src/serve/telemetry.js +143 -0
  366. package/dist/src/skills/adapters/clawhub.js +250 -0
  367. package/dist/src/skills/adapters/local.js +335 -0
  368. package/dist/src/skills/adapters/openclaw.js +316 -0
  369. package/dist/src/skills/cli.js +334 -0
  370. package/dist/src/skills/registry.js +117 -0
  371. package/dist/src/skills/run.js +259 -0
  372. package/dist/src/skills/runtime.js +94 -0
  373. package/dist/src/skills/types.js +10 -0
  374. package/dist/src/smiths/agentsmith/demo.js +116 -0
  375. package/dist/src/smiths/agentsmith/examples.js +300 -0
  376. package/dist/src/smiths/agentsmith/generator.js +503 -0
  377. package/dist/src/smiths/agentsmith/index.js +11 -0
  378. package/dist/src/smiths/agentsmith/types.js +8 -0
  379. package/dist/src/smiths/commandsmith/example.js +220 -0
  380. package/dist/src/smiths/commandsmith/generator.js +288 -0
  381. package/dist/src/smiths/commandsmith/index.js +41 -0
  382. package/dist/src/smiths/commandsmith/templates.js +296 -0
  383. package/dist/src/smiths/commandsmith/types.js +7 -0
  384. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  385. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  386. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  387. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  388. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  389. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  390. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  391. package/dist/src/smiths/context-pipeline/index.js +30 -0
  392. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  393. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  394. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  395. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  396. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  397. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  398. package/dist/src/smiths/context-pipeline/types.js +23 -0
  399. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  400. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  401. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  402. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  403. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  404. package/dist/src/smiths/hook-bridge/index.js +79 -0
  405. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  406. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  407. package/dist/src/smiths/hook-bridge/types.js +31 -0
  408. package/dist/src/smiths/index.js +39 -0
  409. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  410. package/dist/src/smiths/mcpsmith/example.js +119 -0
  411. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  412. package/dist/src/smiths/mcpsmith/index.js +17 -0
  413. package/dist/src/smiths/mcpsmith/types.js +10 -0
  414. package/dist/src/smiths/platform-paths.js +101 -0
  415. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  416. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  417. package/dist/src/smiths/skillsmith/demo.js +83 -0
  418. package/dist/src/smiths/skillsmith/examples.js +161 -0
  419. package/dist/src/smiths/skillsmith/generator.js +316 -0
  420. package/dist/src/smiths/skillsmith/index.js +12 -0
  421. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  422. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  423. package/dist/src/smiths/skillsmith/types.js +9 -0
  424. package/dist/src/smiths/toolsmith/index.js +10 -0
  425. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  426. package/dist/src/smiths/toolsmith/types.js +8 -0
  427. package/dist/src/storage/backends/fortemi.js +227 -0
  428. package/dist/src/storage/backends/fs.js +134 -0
  429. package/dist/src/storage/backends/logseq.js +309 -0
  430. package/dist/src/storage/backends/obsidian.js +233 -0
  431. package/dist/src/storage/cli.js +468 -0
  432. package/dist/src/storage/config.js +272 -0
  433. package/dist/src/storage/index.js +108 -0
  434. package/dist/src/storage/subsystem-cli.js +201 -0
  435. package/dist/src/storage/types.js +33 -0
  436. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  437. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  438. package/dist/src/testing/corpus/index.js +10 -0
  439. package/dist/src/testing/fixtures/index.js +9 -0
  440. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  441. package/dist/src/testing/generators/index.js +11 -0
  442. package/dist/src/testing/generators/test-case-generator.js +393 -0
  443. package/dist/src/testing/generators/test-code-generator.js +384 -0
  444. package/dist/src/testing/generators/use-case-parser.js +325 -0
  445. package/dist/src/testing/index.js +11 -0
  446. package/dist/src/tracker/capability-protocol.js +118 -0
  447. package/dist/src/update/checker.mjs +396 -0
  448. package/dist/src/update/notifier.mjs +235 -0
  449. package/dist/src/writing/content-diversifier.js +804 -0
  450. package/dist/src/writing/example-generator.js +959 -0
  451. package/dist/src/writing/example-templates.js +99 -0
  452. package/dist/src/writing/pattern-library.js +486 -0
  453. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  454. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  455. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  456. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  457. package/dist/src/writing/patterns/transition-words.json +1285 -0
  458. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  459. package/dist/src/writing/prompt-optimizer.js +660 -0
  460. package/dist/src/writing/prompt-templates.js +583 -0
  461. package/dist/src/writing/scoring-config-loader.js +168 -0
  462. package/dist/src/writing/validation-engine.js +595 -0
  463. package/dist/src/writing/validation-rules.js +380 -0
  464. package/dist/src/writing/voice-analyzer.js +439 -0
  465. package/dist/src/writing/voice-calibration.js +661 -0
  466. package/dist/src/writing/voice-profiles.json +588 -0
  467. package/package.json +65 -9
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Codex hook translator — emits TOML hook entries for ~/.codex/config.toml.
3
+ *
4
+ * Per ADR-3 §5 backup-and-rollback: the operator-managed config file
5
+ * (~/.codex/config.toml) is read, AIWG-tagged entries are merged in
6
+ * (via _aiwg_managed: true), and the file is written atomically with a
7
+ * timestamped backup.
8
+ *
9
+ * Codex hook events map per the assessment matrix; this translator
10
+ * supports a conservative subset known to exist in the loader.
11
+ */
12
+ import { promises as fs } from 'node:fs';
13
+ import * as path from 'node:path';
14
+ import { homedir } from 'node:os';
15
+ import { substituteEnvVars } from './shim.js';
16
+ /** Codex-native event names (subset; extend when verified against codex-rs). */
17
+ const CODEX_EVENT_MAP = {
18
+ PreToolUse: 'before_tool',
19
+ PostToolUse: 'after_tool',
20
+ UserPromptSubmit: 'before_prompt',
21
+ SessionStart: 'session_start',
22
+ SessionEnd: 'session_end',
23
+ Stop: 'session_end',
24
+ };
25
+ /**
26
+ * Render a single TOML hook entry for a Codex config block.
27
+ *
28
+ * Codex's hook TOML shape (per the assessment):
29
+ * [[hooks.<event>]]
30
+ * command = "..."
31
+ * args = ["..."]
32
+ * _aiwg_managed = true
33
+ *
34
+ * Operators add their own hooks at the same shape; the _aiwg_managed flag
35
+ * lets `aiwg remove --addon aiwg-hooks` distinguish AIWG entries from
36
+ * operator-authored ones.
37
+ */
38
+ export function renderCodexHookToml(source) {
39
+ const lines = [];
40
+ for (const event of source.events) {
41
+ const codexEvent = CODEX_EVENT_MAP[event];
42
+ if (!codexEvent)
43
+ continue;
44
+ const subCommand = substituteEnvVars(source.command, 'codex');
45
+ const subArgs = (source.args || []).map((a) => substituteEnvVars(a, 'codex'));
46
+ lines.push(`[[hooks.${codexEvent}]]`);
47
+ lines.push(`# AIWG-managed hook: ${source.id} — ${source.description}`);
48
+ lines.push(`command = "${subCommand.replace(/"/g, '\\"')}"`);
49
+ if (subArgs.length > 0) {
50
+ lines.push(`args = [${subArgs.map((a) => `"${a.replace(/"/g, '\\"')}"`).join(', ')}]`);
51
+ }
52
+ if (source.safetyCritical) {
53
+ lines.push(`# safety-critical: cannot be auto-removed without --allow-unsafe-shadow`);
54
+ }
55
+ lines.push(`_aiwg_managed = true`);
56
+ lines.push(`_aiwg_id = "${source.id}"`);
57
+ lines.push('');
58
+ }
59
+ return lines.join('\n');
60
+ }
61
+ const SPILLOVER_START = '# >>> AIWG-managed hooks (do not edit between markers)';
62
+ const SPILLOVER_END = '# <<< AIWG-managed hooks';
63
+ /**
64
+ * Inject AIWG-managed hook block into existing TOML config, preserving
65
+ * everything outside the markers. Idempotent — replaces an existing block
66
+ * rather than appending.
67
+ */
68
+ export function injectHookBlock(existingToml, hookBlock) {
69
+ const startIdx = existingToml.indexOf(SPILLOVER_START);
70
+ const endIdx = existingToml.indexOf(SPILLOVER_END);
71
+ const aiwgSection = `${SPILLOVER_START}\n${hookBlock}\n${SPILLOVER_END}\n`;
72
+ if (startIdx === -1 || endIdx === -1 || endIdx < startIdx) {
73
+ const trimmed = existingToml.replace(/\n+$/, '');
74
+ return (trimmed.length > 0 ? trimmed + '\n\n' : '') + aiwgSection;
75
+ }
76
+ const before = existingToml.slice(0, startIdx);
77
+ const after = existingToml.slice(endIdx + SPILLOVER_END.length).replace(/^\n+/, '\n');
78
+ return `${before}${aiwgSection}${after}`;
79
+ }
80
+ /**
81
+ * Translate one HookSource to Codex TOML config.
82
+ *
83
+ * Writes to ~/.codex/config.toml (user-global), backing up the existing
84
+ * file if no AIWG signature is found per ADR-3 §5.
85
+ */
86
+ export async function translateForCodex(source, options) {
87
+ const result = {
88
+ provider: 'codex',
89
+ emittedPaths: [],
90
+ warnings: [],
91
+ skipped: false,
92
+ };
93
+ if (source.degradeOn?.includes('codex')) {
94
+ result.skipped = true;
95
+ result.skipReason = 'degrade-on declared codex';
96
+ return result;
97
+ }
98
+ const configPath = path.join(homedir(), '.codex', 'config.toml');
99
+ const block = renderCodexHookToml(source);
100
+ if (block.trim().length === 0) {
101
+ result.skipped = true;
102
+ result.skipReason = 'no Codex-mapped events';
103
+ return result;
104
+ }
105
+ if (options.dryRun) {
106
+ result.emittedPaths.push(configPath + ' (dry-run)');
107
+ return result;
108
+ }
109
+ let existing = '';
110
+ try {
111
+ existing = await fs.readFile(configPath, 'utf8');
112
+ }
113
+ catch (err) {
114
+ if (err.code !== 'ENOENT')
115
+ throw err;
116
+ }
117
+ // Backup-and-rollback per ADR-3 §5.
118
+ if (existing && !existing.includes(SPILLOVER_START)) {
119
+ const backupPath = `${configPath}.bak.${new Date().toISOString().replace(/[:.]/g, '-')}`;
120
+ await fs.writeFile(backupPath, existing, 'utf8');
121
+ result.warnings.push(`Backed up pre-existing config to ${backupPath}`);
122
+ }
123
+ const updated = injectHookBlock(existing, block);
124
+ await fs.mkdir(path.dirname(configPath), { recursive: true });
125
+ await fs.writeFile(configPath, updated, 'utf8');
126
+ result.emittedPaths.push(configPath);
127
+ return result;
128
+ }
129
+ //# sourceMappingURL=codex-translator.js.map
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Copilot hook translator — emits dual-format JSON: a workflow file at
3
+ * `.github/hooks/<id>.json` plus an inline `hooks:` block embedded in the
4
+ * agent .agent.md frontmatter when the hook targets a specific agent.
5
+ *
6
+ * Per the parity research, Copilot hook discovery is partially documented;
7
+ * the emission here is conservative — produces the shape Copilot Chat is
8
+ * known to consume, marks AIWG provenance, and stages behind the feature
9
+ * flag handled by the orchestrator.
10
+ */
11
+ import { promises as fs } from 'node:fs';
12
+ import * as path from 'node:path';
13
+ import { substituteEnvVars } from './shim.js';
14
+ const COPILOT_EVENT_MAP = {
15
+ PreToolUse: 'pre_tool_use',
16
+ PostToolUse: 'post_tool_use',
17
+ UserPromptSubmit: 'pre_chat',
18
+ SessionStart: 'session_start',
19
+ SessionEnd: 'session_end',
20
+ Stop: 'session_end',
21
+ };
22
+ export async function translateForCopilot(source, options) {
23
+ const result = {
24
+ provider: 'copilot',
25
+ emittedPaths: [],
26
+ warnings: [],
27
+ skipped: false,
28
+ };
29
+ if (source.degradeOn?.includes('copilot')) {
30
+ result.skipped = true;
31
+ result.skipReason = 'degrade-on declared copilot';
32
+ return result;
33
+ }
34
+ const hooksDir = path.join(options.projectPath, '.github', 'hooks');
35
+ const filePath = path.join(hooksDir, `${source.id}.json`);
36
+ const events = source.events
37
+ .map((e) => COPILOT_EVENT_MAP[e])
38
+ .filter((e) => Boolean(e));
39
+ if (events.length === 0) {
40
+ result.skipped = true;
41
+ result.skipReason = 'no Copilot-mapped events';
42
+ return result;
43
+ }
44
+ const subCommand = substituteEnvVars(source.command, 'copilot');
45
+ const subArgs = (source.args || []).map((a) => substituteEnvVars(a, 'copilot'));
46
+ const payload = {
47
+ _aiwg_managed: true,
48
+ _aiwg_id: source.id,
49
+ description: source.description,
50
+ events,
51
+ command: subCommand,
52
+ args: subArgs,
53
+ safety_critical: !!source.safetyCritical,
54
+ };
55
+ if (options.dryRun) {
56
+ result.emittedPaths.push(filePath + ' (dry-run)');
57
+ return result;
58
+ }
59
+ await fs.mkdir(hooksDir, { recursive: true });
60
+ await fs.writeFile(filePath, JSON.stringify(payload, null, 2) + '\n', 'utf8');
61
+ result.emittedPaths.push(filePath);
62
+ return result;
63
+ }
64
+ //# sourceMappingURL=copilot-translator.js.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Factory hook translator — emits per-droid hook scripts that use
3
+ * $FACTORY_PROJECT_DIR instead of $CLAUDE_PROJECT_DIR.
4
+ *
5
+ * Per ADR-3 §2: the canonical $AIWG_PROJECT_DIR is substituted with
6
+ * $FACTORY_PROJECT_DIR at deploy time. The translator emits a wrapper
7
+ * shell script under .factory/hooks/<id>.sh that calls the AIWG hook
8
+ * command with the right env-var binding.
9
+ */
10
+ import { promises as fs } from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { generateShimBash } from './shim.js';
13
+ export async function translateForFactory(source, options) {
14
+ const result = {
15
+ provider: 'factory',
16
+ emittedPaths: [],
17
+ warnings: [],
18
+ skipped: false,
19
+ };
20
+ if (source.degradeOn?.includes('factory')) {
21
+ result.skipped = true;
22
+ result.skipReason = 'degrade-on declared factory';
23
+ return result;
24
+ }
25
+ const hooksDir = path.join(options.projectPath, '.factory', 'hooks');
26
+ const scriptPath = path.join(hooksDir, `${source.id}.sh`);
27
+ const shim = generateShimBash('factory', source.command, source.args || []);
28
+ if (options.dryRun) {
29
+ result.emittedPaths.push(scriptPath + ' (dry-run)');
30
+ return result;
31
+ }
32
+ await fs.mkdir(hooksDir, { recursive: true });
33
+ await fs.writeFile(scriptPath, shim, 'utf8');
34
+ try {
35
+ await fs.chmod(scriptPath, 0o755);
36
+ }
37
+ catch {
38
+ // Non-POSIX
39
+ }
40
+ result.emittedPaths.push(scriptPath);
41
+ return result;
42
+ }
43
+ //# sourceMappingURL=factory-translator.js.map
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Hermes hook translator — emits a Python plugin stub at
3
+ * ~/.hermes/plugins/<id>.py that registers itself with Hermes' Python
4
+ * plugin system and shells out to the AIWG hook command.
5
+ *
6
+ * Hermes' hook surface per the parity assessment is Python-plugin-based;
7
+ * shelling out from Python is a common pattern, so the emitted plugin is
8
+ * a thin wrapper that subprocess.run()s the canonical AIWG command.
9
+ */
10
+ import { promises as fs } from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { homedir } from 'node:os';
13
+ import { substituteEnvVars } from './shim.js';
14
+ const HERMES_EVENT_MAP = {
15
+ PreToolUse: 'pre_tool',
16
+ PostToolUse: 'post_tool',
17
+ UserPromptSubmit: 'pre_prompt',
18
+ SessionStart: 'session_start',
19
+ SessionEnd: 'session_end',
20
+ Stop: 'session_end',
21
+ };
22
+ function renderHermesPlugin(source) {
23
+ const events = source.events
24
+ .map((e) => HERMES_EVENT_MAP[e])
25
+ .filter((e) => Boolean(e));
26
+ const subCommand = substituteEnvVars(source.command, 'hermes');
27
+ const subArgs = (source.args || []).map((a) => substituteEnvVars(a, 'hermes'));
28
+ return `# AIWG-managed hook plugin (ADR-3 / PUW-018)
29
+ # Hook id: ${source.id}
30
+ # Description: ${source.description}
31
+ # Generated by AIWG; do not edit manually.
32
+
33
+ from hermes.plugin import register_hook
34
+ import os
35
+ import subprocess
36
+
37
+ EVENTS = ${JSON.stringify(events)}
38
+ COMMAND = ${JSON.stringify(subCommand)}
39
+ ARGS = ${JSON.stringify(subArgs)}
40
+ AIWG_ID = ${JSON.stringify(source.id)}
41
+ SAFETY_CRITICAL = ${source.safetyCritical ? 'True' : 'False'}
42
+
43
+
44
+ def _run(payload=None):
45
+ env = dict(os.environ)
46
+ env.setdefault('AIWG_PROJECT_DIR', os.environ.get('HERMES_PROJECT_DIR', os.getcwd()))
47
+ env['AIWG_HOOK_EVENT'] = payload.get('event', 'unknown') if payload else 'unknown'
48
+ cmd = [COMMAND] + ARGS if not COMMAND.startswith('#!') else [COMMAND, *ARGS]
49
+ return subprocess.run(cmd, env=env, check=False).returncode
50
+
51
+
52
+ for _event in EVENTS:
53
+ register_hook(_event, _run, aiwg_managed=True, aiwg_id=AIWG_ID,
54
+ safety_critical=SAFETY_CRITICAL)
55
+ `;
56
+ }
57
+ export async function translateForHermes(source, options) {
58
+ const result = {
59
+ provider: 'hermes',
60
+ emittedPaths: [],
61
+ warnings: [],
62
+ skipped: false,
63
+ };
64
+ if (source.degradeOn?.includes('hermes')) {
65
+ result.skipped = true;
66
+ result.skipReason = 'degrade-on declared hermes';
67
+ return result;
68
+ }
69
+ const events = source.events
70
+ .map((e) => HERMES_EVENT_MAP[e])
71
+ .filter((e) => Boolean(e));
72
+ if (events.length === 0) {
73
+ result.skipped = true;
74
+ result.skipReason = 'no Hermes-mapped events';
75
+ return result;
76
+ }
77
+ const pluginDir = path.join(homedir(), '.hermes', 'plugins');
78
+ const pluginPath = path.join(pluginDir, `${source.id}.py`);
79
+ if (options.dryRun) {
80
+ result.emittedPaths.push(pluginPath + ' (dry-run)');
81
+ return result;
82
+ }
83
+ await fs.mkdir(pluginDir, { recursive: true });
84
+ await fs.writeFile(pluginPath, renderHermesPlugin(source), 'utf8');
85
+ result.emittedPaths.push(pluginPath);
86
+ return result;
87
+ }
88
+ //# sourceMappingURL=hermes-translator.js.map
@@ -0,0 +1,79 @@
1
+ /**
2
+ * hook-bridge — cross-provider hook translation per ADR-3.
3
+ *
4
+ * Public API: bridgeAll(sources, providers, opts) translates every source
5
+ * for every provider, returning a flat list of TranslateResult. Per ADR-3
6
+ * §7 autoInstall policy, the orchestrator passes the explicitly-enabled
7
+ * providers (operator opts in via --enable-cross-provider-hooks plus per-
8
+ * provider flags); this module doesn't make that policy decision itself.
9
+ *
10
+ * @module smiths/hook-bridge
11
+ */
12
+ import { translateForCodex } from './codex-translator.js';
13
+ import { translateForCopilot } from './copilot-translator.js';
14
+ import { translateForFactory } from './factory-translator.js';
15
+ import { translateForHermes } from './hermes-translator.js';
16
+ import { getProviderDefinition } from '../../providers/provider-definitions.js';
17
+ export { AIWG_ENV_VARS, NATIVE_ENV_VAR_MAP } from './types.js';
18
+ export { substituteEnvVars, generateShimBash, EXIT_CODE_MAP } from './shim.js';
19
+ export { translateForCodex, renderCodexHookToml, injectHookBlock as injectCodexHookBlock } from './codex-translator.js';
20
+ export { translateForCopilot } from './copilot-translator.js';
21
+ export { translateForFactory } from './factory-translator.js';
22
+ export { translateForHermes } from './hermes-translator.js';
23
+ export { loadHookSources } from './loader.js';
24
+ /**
25
+ * Provider id → translator function. Adding a new provider requires:
26
+ * 1. New file `<provider>-translator.ts` exporting a ProviderTranslator
27
+ * 2. Entry below
28
+ * 3. Native env var entry in types.ts NATIVE_ENV_VAR_MAP
29
+ * 4. Native exit code entry in shim.ts EXIT_CODE_MAP
30
+ * 5. Native event mapping in the per-provider file
31
+ */
32
+ export const TRANSLATORS = {
33
+ codex: translateForCodex,
34
+ copilot: translateForCopilot,
35
+ factory: translateForFactory,
36
+ hermes: translateForHermes,
37
+ };
38
+ function resolveHookTranslator(providerId) {
39
+ const adapterKey = getProviderDefinition(providerId)?.adapters.hookBridge ?? providerId;
40
+ return adapterKey ? TRANSLATORS[adapterKey] : undefined;
41
+ }
42
+ /**
43
+ * Translate one source across an explicit list of providers. Per-provider
44
+ * failures are captured as TranslateResult entries (skipped=true with
45
+ * reason); they do not throw to the caller.
46
+ */
47
+ export async function bridgeAll(sources, providers, options) {
48
+ const results = [];
49
+ for (const source of sources) {
50
+ for (const providerId of providers) {
51
+ const translator = resolveHookTranslator(providerId);
52
+ if (!translator) {
53
+ results.push({
54
+ provider: providerId,
55
+ emittedPaths: [],
56
+ warnings: [],
57
+ skipped: true,
58
+ skipReason: 'no translator registered',
59
+ });
60
+ continue;
61
+ }
62
+ try {
63
+ const r = await translator(source, options);
64
+ results.push(r);
65
+ }
66
+ catch (err) {
67
+ results.push({
68
+ provider: providerId,
69
+ emittedPaths: [],
70
+ warnings: [`translator threw: ${err instanceof Error ? err.message : String(err)}`],
71
+ skipped: true,
72
+ skipReason: 'translator error',
73
+ });
74
+ }
75
+ }
76
+ }
77
+ return results;
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Canonical hook source loader.
3
+ *
4
+ * Reads HookSource YAML/JSON files from a known directory layout. Per the
5
+ * orchestrator wiring in `src/cli/handlers/use.ts`, the operator opts in to
6
+ * cross-provider hook translation via `--enable-cross-provider-hooks`; when
7
+ * the flag is set, this loader gathers the canonical source files and the
8
+ * `bridgeAll()` API translates them.
9
+ *
10
+ * Source location convention: `agentic/code/addons/aiwg-hooks/canonical/*.yaml`
11
+ * Each file declares one HookSource per the schema in `types.ts`.
12
+ *
13
+ * The loader is forgiving: missing directory yields an empty source list
14
+ * (not an error) so operators can opt in to the flag without authoring
15
+ * any sources first.
16
+ */
17
+ import { promises as fs } from 'node:fs';
18
+ import * as path from 'node:path';
19
+ import * as yaml from 'js-yaml';
20
+ const VALID_EVENTS = new Set([
21
+ 'PreToolUse',
22
+ 'PostToolUse',
23
+ 'UserPromptSubmit',
24
+ 'SessionStart',
25
+ 'SessionEnd',
26
+ 'Stop',
27
+ ]);
28
+ /**
29
+ * Validate and normalize a parsed HookSource. Returns null if the input
30
+ * doesn't satisfy the minimal schema. Caller logs the rejection.
31
+ */
32
+ function normalize(input, filePath) {
33
+ if (!input || typeof input !== 'object') {
34
+ return { source: null, error: `${filePath}: not an object` };
35
+ }
36
+ const o = input;
37
+ if (typeof o.id !== 'string' || !o.id) {
38
+ return { source: null, error: `${filePath}: missing or non-string \`id\`` };
39
+ }
40
+ if (typeof o.command !== 'string' || !o.command) {
41
+ return { source: null, error: `${filePath}: missing or non-string \`command\`` };
42
+ }
43
+ const events = Array.isArray(o.events) ? o.events.filter((e) => typeof e === 'string' && VALID_EVENTS.has(e)) : [];
44
+ if (events.length === 0) {
45
+ return { source: null, error: `${filePath}: \`events\` must be a non-empty array of valid event names` };
46
+ }
47
+ const source = {
48
+ id: o.id,
49
+ description: typeof o.description === 'string' ? o.description : '',
50
+ events,
51
+ command: o.command,
52
+ args: Array.isArray(o.args) ? o.args.filter((a) => typeof a === 'string') : undefined,
53
+ safetyCritical: o['safety-critical'] === true || o.safetyCritical === true,
54
+ degradeOn: Array.isArray(o['degrade-on'])
55
+ ? o['degrade-on'].filter((p) => typeof p === 'string')
56
+ : Array.isArray(o.degradeOn)
57
+ ? o.degradeOn.filter((p) => typeof p === 'string')
58
+ : undefined,
59
+ workingDir: typeof o['working-dir'] === 'string'
60
+ ? o['working-dir']
61
+ : typeof o.workingDir === 'string'
62
+ ? o.workingDir
63
+ : undefined,
64
+ };
65
+ return { source };
66
+ }
67
+ /**
68
+ * Load all canonical hook sources from `<frameworkRoot>/agentic/code/addons/
69
+ * aiwg-hooks/canonical/`. Returns the parsed sources plus any rejections so
70
+ * the orchestrator can warn operators about malformed files.
71
+ */
72
+ export async function loadHookSources(frameworkRoot) {
73
+ const dir = path.join(frameworkRoot, 'agentic', 'code', 'addons', 'aiwg-hooks', 'canonical');
74
+ const sources = [];
75
+ const errors = [];
76
+ let entries;
77
+ try {
78
+ entries = await fs.readdir(dir);
79
+ }
80
+ catch (err) {
81
+ if (err.code === 'ENOENT') {
82
+ return { sources, errors };
83
+ }
84
+ throw err;
85
+ }
86
+ for (const entry of entries) {
87
+ if (!/\.(yaml|yml|json)$/i.test(entry))
88
+ continue;
89
+ const filePath = path.join(dir, entry);
90
+ let raw;
91
+ try {
92
+ raw = await fs.readFile(filePath, 'utf8');
93
+ }
94
+ catch (err) {
95
+ errors.push(`${filePath}: ${err instanceof Error ? err.message : String(err)}`);
96
+ continue;
97
+ }
98
+ let parsed;
99
+ try {
100
+ parsed = entry.endsWith('.json') ? JSON.parse(raw) : yaml.load(raw);
101
+ }
102
+ catch (err) {
103
+ errors.push(`${filePath}: parse error — ${err instanceof Error ? err.message : String(err)}`);
104
+ continue;
105
+ }
106
+ const { source, error } = normalize(parsed, filePath);
107
+ if (error) {
108
+ errors.push(error);
109
+ continue;
110
+ }
111
+ if (source)
112
+ sources.push(source);
113
+ }
114
+ return { sources, errors };
115
+ }
116
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Hook bridge shim — env-var contract substitution + canonical schemas.
3
+ *
4
+ * Per ADR-3 §2: hook authors write canonical $AIWG_* env vars. Translators
5
+ * substitute them with the provider-native equivalents at deploy time so
6
+ * authors don't need to maintain N copies of the same hook.
7
+ */
8
+ import { AIWG_ENV_VARS, NATIVE_ENV_VAR_MAP } from './types.js';
9
+ /**
10
+ * Substitute canonical AIWG env vars with the provider's native equivalents.
11
+ *
12
+ * Example for codex:
13
+ * "$AIWG_PROJECT_DIR/scripts/scan.sh" → "$CODEX_WORKSPACE/scripts/scan.sh"
14
+ *
15
+ * When a provider has no native equivalent for a given canonical var, the
16
+ * canonical name is preserved. Hook authors who need the value despite the
17
+ * gap can rely on the runtime shim setting $AIWG_PROJECT_DIR (etc.) before
18
+ * invoking the command — that's the per-ADR-3-§2 fallback.
19
+ */
20
+ export function substituteEnvVars(input, provider) {
21
+ const mapping = NATIVE_ENV_VAR_MAP[provider];
22
+ if (!mapping)
23
+ return input;
24
+ let out = input;
25
+ for (const [canonicalKey, canonicalRef] of Object.entries(AIWG_ENV_VARS)) {
26
+ const native = mapping[canonicalKey];
27
+ if (!native)
28
+ continue;
29
+ // Replace both $VAR and ${VAR} forms.
30
+ const escaped = canonicalRef.replace(/\$/g, '\\$');
31
+ out = out.replace(new RegExp(escaped + '\\b', 'g'), native);
32
+ out = out.replace(new RegExp('\\${' + canonicalRef.slice(1) + '}', 'g'), native);
33
+ }
34
+ return out;
35
+ }
36
+ /**
37
+ * Canonical exit-code mapping per ADR-3 §4.
38
+ *
39
+ * AIWG canonical:
40
+ * 0 = allow
41
+ * 1 = block
42
+ * 2 = warn-and-continue
43
+ *
44
+ * Provider mapping returns the native exit code(s) that mean each AIWG
45
+ * semantic. Used by the wrapper shim to translate hook exit codes back to
46
+ * what the provider expects.
47
+ */
48
+ export const EXIT_CODE_MAP = {
49
+ claude: { allow: 0, block: 1, warn: 0 /* warn surfaces via stderr only */ },
50
+ codex: { allow: 0, block: 1, warn: 2 },
51
+ copilot: { allow: 0, block: 1, warn: 0 },
52
+ factory: { allow: 0, block: 1, warn: 0 },
53
+ hermes: { allow: 0, block: 1, warn: 2 },
54
+ openclaw: { allow: 0, block: 1, warn: 2 },
55
+ };
56
+ /**
57
+ * Generate a small bash shim that:
58
+ * 1. exports $AIWG_PROJECT_DIR + $AIWG_TOOL_NAME from native env vars
59
+ * 2. reads native stdin, transforms to AIWG canonical JSON
60
+ * 3. pipes to the hook command
61
+ * 4. translates the exit code back per ADR-3 §4
62
+ *
63
+ * The shim is what gets installed as the actual hook artifact on the
64
+ * provider; the AIWG hook command runs inside it.
65
+ */
66
+ export function generateShimBash(provider, hookCommand, args = []) {
67
+ const native = NATIVE_ENV_VAR_MAP[provider] || {};
68
+ const projectDirSrc = native.PROJECT_DIR || '$PWD';
69
+ const toolNameSrc = native.TOOL_NAME || '"${AIWG_TOOL_NAME:-unknown}"';
70
+ // Substitute canonical env vars in the command + args ahead of shim emission
71
+ // so the shim invocation references native names where available.
72
+ const subCommand = substituteEnvVars(hookCommand, provider);
73
+ const subArgs = args.map((a) => substituteEnvVars(a, provider));
74
+ return [
75
+ '#!/usr/bin/env bash',
76
+ `# AIWG hook bridge shim (ADR-3) — provider: ${provider}`,
77
+ 'set -e',
78
+ '',
79
+ `export AIWG_PROJECT_DIR="${projectDirSrc}"`,
80
+ `export AIWG_TOOL_NAME=${toolNameSrc}`,
81
+ `export AIWG_HOOK_EVENT="${'${AIWG_HOOK_EVENT:-unknown}'}"`,
82
+ '',
83
+ '# Forward stdin verbatim. Hook command can re-parse if it needs the',
84
+ '# canonical AIWG schema; the env-var contract above is the primary',
85
+ '# integration surface for cross-provider portability.',
86
+ `${subCommand}${subArgs.length ? ' ' + subArgs.map((a) => `"${a}"`).join(' ') : ''}`,
87
+ ].join('\n');
88
+ }
89
+ //# sourceMappingURL=shim.js.map
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Cross-provider hook bridge types (PUW-018 / #1119).
3
+ *
4
+ * Per ADR-3 §1: AIWG hooks are authored in a canonical source format and
5
+ * per-provider translators emit native artifacts at deploy time. This module
6
+ * defines the shared type surface that translators consume.
7
+ */
8
+ /** Canonical AIWG env vars. Translators substitute these at deploy time. */
9
+ export const AIWG_ENV_VARS = {
10
+ PROJECT_DIR: '$AIWG_PROJECT_DIR',
11
+ TOOL_NAME: '$AIWG_TOOL_NAME',
12
+ HOOK_EVENT: '$AIWG_HOOK_EVENT',
13
+ SESSION_ID: '$AIWG_SESSION_ID',
14
+ };
15
+ /** Native env-var contract per ADR-3 §2 table. */
16
+ export const NATIVE_ENV_VAR_MAP = {
17
+ claude: {
18
+ PROJECT_DIR: '$CLAUDE_PROJECT_DIR',
19
+ TOOL_NAME: '$CLAUDE_TOOL_NAME',
20
+ },
21
+ factory: {
22
+ PROJECT_DIR: '$FACTORY_PROJECT_DIR',
23
+ },
24
+ codex: {
25
+ PROJECT_DIR: '$CODEX_WORKSPACE',
26
+ },
27
+ copilot: {
28
+ PROJECT_DIR: '$GITHUB_WORKSPACE',
29
+ },
30
+ };
31
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * AIWG Smiths - Tool and Server Generation Framework
3
+ *
4
+ * The Smiths ecosystem provides:
5
+ * - Toolsmith: Tool specification generation for subagent scenarios
6
+ * - MCPsmith: MCP server generation from any command/API
7
+ * - AgentSmith: Custom agent generation with platform-aware deployment
8
+ * - SkillSmith: Skill generation with platform-aware deployment
9
+ * - CommandSmith: Platform-aware slash command generation
10
+ * - ContextPipeline: AIWG.md + AGENTS.md generator (cross-platform context bridge)
11
+ *
12
+ * @module smiths
13
+ */
14
+ // Re-export Toolsmith (excluding Platform to avoid conflict)
15
+ export * from './toolsmith/types.js';
16
+ // Re-export MCPsmith
17
+ export * from './mcpsmith/index.js';
18
+ // Re-export AgentSmith
19
+ export * from './agentsmith/index.js';
20
+ // Re-export SkillSmith
21
+ export * from './skillsmith/index.js';
22
+ // Re-export CommandSmith
23
+ export * from './commandsmith/index.js';
24
+ // Re-export context-pipeline (AIWG.md + AGENTS.md generator; ADR-1).
25
+ // Namespaced (not flat * export) because its types overlap with agentsmith
26
+ // (different concern — assembly of cross-platform context vs subagent persona generation).
27
+ export * as ContextPipeline from './context-pipeline/index.js';
28
+ // Re-export hook-bridge (cross-provider hook translator; ADR-3 / PUW-018).
29
+ // Namespaced because translator types overlap by intent (HookSource etc.).
30
+ export * as HookBridge from './hook-bridge/index.js';
31
+ export const SMITHS_DIR = '.aiwg/smiths';
32
+ export const TOOLSMITH_DIR = `${SMITHS_DIR}/toolsmith`;
33
+ export const MCPSMITH_DIR = `${SMITHS_DIR}/mcpsmith`;
34
+ export const AGENTSMITH_DIR = `${SMITHS_DIR}/agentsmith`;
35
+ export const SKILLSMITH_DIR = `${SMITHS_DIR}/skillsmith`;
36
+ export const COMMANDSMITH_DIR = `${SMITHS_DIR}/commandsmith`;
37
+ export const CONTEXT_PIPELINE_DIR = `${SMITHS_DIR}/context-pipeline`;
38
+ export const HOOK_BRIDGE_DIR = `${SMITHS_DIR}/hook-bridge`;
39
+ //# sourceMappingURL=index.js.map