@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.17

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 (466) hide show
  1. package/README.md +21 -1
  2. package/bin/aiwg.mjs +349 -0
  3. package/dist/src/a2a/agent-card.js +145 -0
  4. package/dist/src/a2a/client.js +411 -0
  5. package/dist/src/a2a/hitl-cli.js +171 -0
  6. package/dist/src/a2a/hitl-driver.js +370 -0
  7. package/dist/src/a2a/hitl.js +181 -0
  8. package/dist/src/a2a/http.js +193 -0
  9. package/dist/src/a2a/jcs.js +128 -0
  10. package/dist/src/a2a/jws.js +187 -0
  11. package/dist/src/a2a/types.js +24 -0
  12. package/dist/src/a2a/webhook.js +240 -0
  13. package/dist/src/activity-log/cli.js +348 -0
  14. package/dist/src/activity-log/parser.js +81 -0
  15. package/dist/src/activity-log/types.js +50 -0
  16. package/dist/src/agents/agent-deployer.js +367 -0
  17. package/dist/src/agents/agent-packager.js +271 -0
  18. package/dist/src/agents/agent-validator.js +271 -0
  19. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  20. package/dist/src/agents/grounding/types.js +12 -0
  21. package/dist/src/agents/index.js +10 -0
  22. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  23. package/dist/src/agents/types.js +7 -0
  24. package/dist/src/api/index.d.ts +10 -0
  25. package/dist/src/api/index.js +10 -0
  26. package/dist/src/artifacts/address-parser.js +73 -0
  27. package/dist/src/artifacts/audit/cli.js +183 -0
  28. package/dist/src/artifacts/audit/drift.js +122 -0
  29. package/dist/src/artifacts/audit/types.js +12 -0
  30. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  31. package/dist/src/artifacts/backends/json-backend.js +129 -0
  32. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  33. package/dist/src/artifacts/browser-export.js +622 -0
  34. package/dist/src/artifacts/capability-resolver.js +94 -0
  35. package/dist/src/artifacts/checksum-manifest.js +91 -0
  36. package/dist/src/artifacts/citation-parser.js +162 -0
  37. package/dist/src/artifacts/cli.js +1462 -0
  38. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  39. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  40. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  41. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  42. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  43. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  44. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  45. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  46. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  47. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  48. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  49. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  51. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  52. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  53. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  54. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  55. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  56. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  57. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  58. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  60. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  61. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  62. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  63. package/dist/src/artifacts/corpus-views/build.js +126 -0
  64. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  65. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  66. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  67. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  68. package/dist/src/artifacts/dep-graph.js +173 -0
  69. package/dist/src/artifacts/discover-facets.js +375 -0
  70. package/dist/src/artifacts/embedding-index.js +354 -0
  71. package/dist/src/artifacts/enrichment/cli.js +240 -0
  72. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  73. package/dist/src/artifacts/enrichment/store.js +90 -0
  74. package/dist/src/artifacts/enrichment/types.js +12 -0
  75. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  76. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  77. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  78. package/dist/src/artifacts/fulltext.js +108 -0
  79. package/dist/src/artifacts/graph-backend.js +51 -0
  80. package/dist/src/artifacts/graph-query.js +247 -0
  81. package/dist/src/artifacts/hybrid-query.js +225 -0
  82. package/dist/src/artifacts/index-builder.js +1089 -0
  83. package/dist/src/artifacts/index-reader.js +112 -0
  84. package/dist/src/artifacts/index-status.js +193 -0
  85. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  86. package/dist/src/artifacts/move.js +154 -0
  87. package/dist/src/artifacts/operational-state.js +239 -0
  88. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  89. package/dist/src/artifacts/query-engine.js +1955 -0
  90. package/dist/src/artifacts/source-graph.js +529 -0
  91. package/dist/src/artifacts/stats.js +169 -0
  92. package/dist/src/artifacts/types.js +606 -0
  93. package/dist/src/artifacts/views/cli.js +293 -0
  94. package/dist/src/artifacts/views/definition.js +170 -0
  95. package/dist/src/artifacts/views/store.js +149 -0
  96. package/dist/src/artifacts/views/types.js +8 -0
  97. package/dist/src/artifacts/watcher.js +255 -0
  98. package/dist/src/catalog/builtin-models.json +636 -0
  99. package/dist/src/catalog/cli.js +228 -0
  100. package/dist/src/catalog/cli.mjs +289 -0
  101. package/dist/src/catalog/index.js +15 -0
  102. package/dist/src/catalog/loader.js +217 -0
  103. package/dist/src/catalog/loader.mjs +251 -0
  104. package/dist/src/catalog/sources.json +41 -0
  105. package/dist/src/catalog/types.js +8 -0
  106. package/dist/src/channel/manager.mjs +504 -0
  107. package/dist/src/cli/agent-spawn.js +178 -0
  108. package/dist/src/cli/cli-extension-loader.js +245 -0
  109. package/dist/src/cli/command-log.js +275 -0
  110. package/dist/src/cli/config-loader.js +232 -0
  111. package/dist/src/cli/env.js +82 -0
  112. package/dist/src/cli/errors.js +150 -0
  113. package/dist/src/cli/find-package-root.js +40 -0
  114. package/dist/src/cli/git-hooks.js +250 -0
  115. package/dist/src/cli/handlers/agentcard.js +206 -0
  116. package/dist/src/cli/handlers/artifacts.js +76 -0
  117. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  118. package/dist/src/cli/handlers/cockpit.js +137 -0
  119. package/dist/src/cli/handlers/command-log.js +37 -0
  120. package/dist/src/cli/handlers/daemon.js +59 -0
  121. package/dist/src/cli/handlers/diagnose.js +300 -0
  122. package/dist/src/cli/handlers/execution-mode.js +105 -0
  123. package/dist/src/cli/handlers/feedback.js +341 -0
  124. package/dist/src/cli/handlers/help.js +147 -0
  125. package/dist/src/cli/handlers/index.js +302 -0
  126. package/dist/src/cli/handlers/init.js +179 -0
  127. package/dist/src/cli/handlers/install.js +129 -0
  128. package/dist/src/cli/handlers/issues.js +46 -0
  129. package/dist/src/cli/handlers/lint.js +42 -0
  130. package/dist/src/cli/handlers/local-executor.js +315 -0
  131. package/dist/src/cli/handlers/marketplace.js +168 -0
  132. package/dist/src/cli/handlers/mc.js +1010 -0
  133. package/dist/src/cli/handlers/models.js +352 -0
  134. package/dist/src/cli/handlers/packages.js +155 -0
  135. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  136. package/dist/src/cli/handlers/ralph.js +575 -0
  137. package/dist/src/cli/handlers/refresh.js +432 -0
  138. package/dist/src/cli/handlers/regenerate.js +336 -0
  139. package/dist/src/cli/handlers/repo-access.js +109 -0
  140. package/dist/src/cli/handlers/run.js +165 -0
  141. package/dist/src/cli/handlers/runtime-info.js +301 -0
  142. package/dist/src/cli/handlers/sandbox.js +197 -0
  143. package/dist/src/cli/handlers/scaffolding.js +149 -0
  144. package/dist/src/cli/handlers/script-runner.js +121 -0
  145. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  146. package/dist/src/cli/handlers/serve.js +1835 -0
  147. package/dist/src/cli/handlers/session.js +348 -0
  148. package/dist/src/cli/handlers/setup.js +440 -0
  149. package/dist/src/cli/handlers/skill-lint.js +367 -0
  150. package/dist/src/cli/handlers/skill-usage.js +74 -0
  151. package/dist/src/cli/handlers/steward.js +567 -0
  152. package/dist/src/cli/handlers/subcommands.js +1702 -0
  153. package/dist/src/cli/handlers/team.js +337 -0
  154. package/dist/src/cli/handlers/types.js +11 -0
  155. package/dist/src/cli/handlers/use.js +2772 -0
  156. package/dist/src/cli/handlers/utilities.js +703 -0
  157. package/dist/src/cli/handlers/version.js +134 -0
  158. package/dist/src/cli/handlers/workspace-context.js +93 -0
  159. package/dist/src/cli/handlers/workspace.js +126 -0
  160. package/dist/src/cli/help-generator.js +178 -0
  161. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  162. package/dist/src/cli/hooks/executor.js +96 -0
  163. package/dist/src/cli/hooks/index.js +15 -0
  164. package/dist/src/cli/hooks/registry.js +143 -0
  165. package/dist/src/cli/hooks/types.js +13 -0
  166. package/dist/src/cli/log.js +492 -0
  167. package/dist/src/cli/project-isolation/detect.js +70 -0
  168. package/dist/src/cli/project-isolation/index.js +7 -0
  169. package/dist/src/cli/project-isolation/signals.js +17 -0
  170. package/dist/src/cli/project-isolation/warning.js +102 -0
  171. package/dist/src/cli/prompt-utils.js +155 -0
  172. package/dist/src/cli/provider-deployment-plan.js +126 -0
  173. package/dist/src/cli/provider-resolution.js +119 -0
  174. package/dist/src/cli/router.js +305 -0
  175. package/dist/src/cli/scope-resolver.js +392 -0
  176. package/dist/src/cli/skill-usage.js +616 -0
  177. package/dist/src/cli/ui.js +224 -0
  178. package/dist/src/cli/watch-service.js +203 -0
  179. package/dist/src/cli/workflow-orchestrator.js +478 -0
  180. package/dist/src/cli/workspace-signals.js +321 -0
  181. package/dist/src/community/footer.js +14 -0
  182. package/dist/src/community/links.js +123 -0
  183. package/dist/src/community/milestones.js +46 -0
  184. package/dist/src/community/nudge-policy.js +93 -0
  185. package/dist/src/config/aiwg-config.js +883 -0
  186. package/dist/src/config/cli.js +703 -0
  187. package/dist/src/config/gitignore.js +156 -0
  188. package/dist/src/config/project-artifacts.js +76 -0
  189. package/dist/src/config/user-config.js +428 -0
  190. package/dist/src/config/user-registry.js +127 -0
  191. package/dist/src/config/workspace.js +276 -0
  192. package/dist/src/contributors/detect.js +39 -0
  193. package/dist/src/contributors/discover.js +172 -0
  194. package/dist/src/contributors/heuristic.js +186 -0
  195. package/dist/src/contributors/index.js +11 -0
  196. package/dist/src/contributors/types.js +13 -0
  197. package/dist/src/contributors/validation.js +116 -0
  198. package/dist/src/data/community.schema.json +43 -0
  199. package/dist/src/data/community.yaml +16 -0
  200. package/dist/src/extensions/capability-index.js +270 -0
  201. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  202. package/dist/src/extensions/commands/definitions.js +3485 -0
  203. package/dist/src/extensions/deployment-registration.js +463 -0
  204. package/dist/src/extensions/index.js +22 -0
  205. package/dist/src/extensions/loader.js +132 -0
  206. package/dist/src/extensions/managed-marker.js +100 -0
  207. package/dist/src/extensions/manifest.js +196 -0
  208. package/dist/src/extensions/project-local-activity.js +114 -0
  209. package/dist/src/extensions/project-local-discovery.js +261 -0
  210. package/dist/src/extensions/project-local-doctor.js +281 -0
  211. package/dist/src/extensions/project-local-gitignore.js +176 -0
  212. package/dist/src/extensions/project-local-paths.js +121 -0
  213. package/dist/src/extensions/project-local-promote.js +218 -0
  214. package/dist/src/extensions/project-local-remove.js +373 -0
  215. package/dist/src/extensions/project-local-scaffold.js +252 -0
  216. package/dist/src/extensions/project-quickref.js +291 -0
  217. package/dist/src/extensions/registry.js +368 -0
  218. package/dist/src/extensions/shadow-resolver.js +271 -0
  219. package/dist/src/extensions/types.js +86 -0
  220. package/dist/src/extensions/upstream-registry.js +195 -0
  221. package/dist/src/extensions/validation.js +631 -0
  222. package/dist/src/features/catalog.js +88 -0
  223. package/dist/src/features/cli.js +197 -0
  224. package/dist/src/features/installer.js +57 -0
  225. package/dist/src/features/paths.js +14 -0
  226. package/dist/src/features/runtime.js +21 -0
  227. package/dist/src/features/status.js +134 -0
  228. package/dist/src/hooks/laziness-detection.js +532 -0
  229. package/dist/src/intake/git-history-analyzer.js +486 -0
  230. package/dist/src/intake/index.js +9 -0
  231. package/dist/src/issues/cli.js +327 -0
  232. package/dist/src/issues/index.js +5 -0
  233. package/dist/src/issues/live.js +154 -0
  234. package/dist/src/issues/local.js +666 -0
  235. package/dist/src/issues/sync.js +143 -0
  236. package/dist/src/issues/types.js +2 -0
  237. package/dist/src/issues/workflows.js +164 -0
  238. package/dist/src/kb/cli.js +173 -0
  239. package/dist/src/lint/cli.js +171 -0
  240. package/dist/src/lint/loader.js +225 -0
  241. package/dist/src/lint/reporters.js +141 -0
  242. package/dist/src/lint/runner.js +364 -0
  243. package/dist/src/lint/types.js +10 -0
  244. package/dist/src/marketplace/cache.js +110 -0
  245. package/dist/src/marketplace/identifier.js +63 -0
  246. package/dist/src/marketplace/registry.js +36 -0
  247. package/dist/src/marketplace/sources/clawhub.js +53 -0
  248. package/dist/src/marketplace/sources/git.js +45 -0
  249. package/dist/src/marketplace/types.js +9 -0
  250. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  251. package/dist/src/mcp/cli.mjs +1197 -0
  252. package/dist/src/mcp/elicitation.mjs +149 -0
  253. package/dist/src/mcp/helpers.mjs +287 -0
  254. package/dist/src/mcp/index.mjs +11 -0
  255. package/dist/src/mcp/profiles.js +263 -0
  256. package/dist/src/mcp/profiles.mjs +360 -0
  257. package/dist/src/mcp/registry.js +376 -0
  258. package/dist/src/mcp/registry.mjs +387 -0
  259. package/dist/src/mcp/server.mjs +633 -0
  260. package/dist/src/mcp/test-simple.mjs +271 -0
  261. package/dist/src/mcp/tools/command-run.mjs +101 -0
  262. package/dist/src/mcp/tools/discovery.mjs +291 -0
  263. package/dist/src/mcp/tools/interaction.mjs +87 -0
  264. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  265. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  266. package/dist/src/memory/cli.js +166 -0
  267. package/dist/src/memory/project-registry.js +282 -0
  268. package/dist/src/metrics/artifact-metrics.js +184 -0
  269. package/dist/src/metrics/context-budget.js +174 -0
  270. package/dist/src/metrics/token-counter.js +133 -0
  271. package/dist/src/models/config-loader.js +228 -0
  272. package/dist/src/models/index.js +22 -0
  273. package/dist/src/models/model-capabilities.v1.json +120 -0
  274. package/dist/src/models/model-catalog.v1.json +96 -0
  275. package/dist/src/models/model-discovery.js +521 -0
  276. package/dist/src/models/provider-models.js +73 -0
  277. package/dist/src/models/provider-policy.js +273 -0
  278. package/dist/src/models/resolver.js +245 -0
  279. package/dist/src/models/router.js +70 -0
  280. package/dist/src/models/types.js +8 -0
  281. package/dist/src/models/wrapper-deployment.js +178 -0
  282. package/dist/src/models/wrapper-route.js +54 -0
  283. package/dist/src/ops/cli.js +268 -0
  284. package/dist/src/ops/registry.js +623 -0
  285. package/dist/src/packages/adapters/clawhub.js +113 -0
  286. package/dist/src/packages/adapters/git.js +153 -0
  287. package/dist/src/packages/adapters/gitea.js +93 -0
  288. package/dist/src/packages/adapters/github.js +69 -0
  289. package/dist/src/packages/adapters/local-cache.js +89 -0
  290. package/dist/src/packages/package-registry.js +143 -0
  291. package/dist/src/packages/registry.js +238 -0
  292. package/dist/src/packages/types.js +11 -0
  293. package/dist/src/plugin/cross-framework-ops.js +475 -0
  294. package/dist/src/plugin/framework-config-loader.js +235 -0
  295. package/dist/src/plugin/framework-detector.js +186 -0
  296. package/dist/src/plugin/framework-isolator.js +341 -0
  297. package/dist/src/plugin/framework-migration.js +371 -0
  298. package/dist/src/plugin/metadata-validator.js +906 -0
  299. package/dist/src/plugin/plugin-installer.js +436 -0
  300. package/dist/src/plugin/plugin-status.js +369 -0
  301. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  302. package/dist/src/plugin/registry-validator.js +344 -0
  303. package/dist/src/plugin/skill-command-translator.js +415 -0
  304. package/dist/src/plugin/workspace-creator.js +189 -0
  305. package/dist/src/plugin/workspace-migrator.js +821 -0
  306. package/dist/src/policy/authorization.js +390 -0
  307. package/dist/src/policy/repo-access.js +215 -0
  308. package/dist/src/provenance/cli.js +16 -0
  309. package/dist/src/providers/capability-matrix.js +300 -0
  310. package/dist/src/providers/capability-matrix.yaml +514 -0
  311. package/dist/src/providers/provider-definitions.js +977 -0
  312. package/dist/src/providers/provider-definitions.mjs +159 -0
  313. package/dist/src/providers/provider-inventory.js +169 -0
  314. package/dist/src/quality/feedback-ab.js +174 -0
  315. package/dist/src/quality/feedback-collector.js +176 -0
  316. package/dist/src/quality/feedback-tracker.js +123 -0
  317. package/dist/src/quality/patterns/adr.json +24 -0
  318. package/dist/src/quality/patterns/sad.json +24 -0
  319. package/dist/src/quality/patterns/test-plan.json +24 -0
  320. package/dist/src/quality/patterns/use-case.json +24 -0
  321. package/dist/src/quality/scoring.js +157 -0
  322. package/dist/src/reflections/cli.js +15 -0
  323. package/dist/src/release/plan.js +139 -0
  324. package/dist/src/research/cache/manager.js +227 -0
  325. package/dist/src/research/clients/arxiv.js +156 -0
  326. package/dist/src/research/clients/base.js +197 -0
  327. package/dist/src/research/clients/crossref.js +112 -0
  328. package/dist/src/research/clients/semantic-scholar.js +126 -0
  329. package/dist/src/research/clients/unpaywall.js +87 -0
  330. package/dist/src/research/index.js +14 -0
  331. package/dist/src/research/query-cli.js +336 -0
  332. package/dist/src/research/services/acquisition.js +313 -0
  333. package/dist/src/research/services/archival.js +225 -0
  334. package/dist/src/research/services/citation.js +279 -0
  335. package/dist/src/research/services/discovery.js +243 -0
  336. package/dist/src/research/services/documentation.js +269 -0
  337. package/dist/src/research/services/index.js +14 -0
  338. package/dist/src/research/services/provenance.js +279 -0
  339. package/dist/src/research/services/quality.js +370 -0
  340. package/dist/src/research/services/types.js +7 -0
  341. package/dist/src/research/storage-cli.js +20 -0
  342. package/dist/src/research/types.js +47 -0
  343. package/dist/src/resources/index.d.ts +2 -0
  344. package/dist/src/resources/index.js +2 -0
  345. package/dist/src/resources/web-release.d.ts +89 -0
  346. package/dist/src/resources/web-release.js +882 -0
  347. package/dist/src/rlm/cache/cli.js +162 -0
  348. package/dist/src/rlm/cache/hash.js +35 -0
  349. package/dist/src/rlm/cache/store.js +170 -0
  350. package/dist/src/rlm/cache/types.js +8 -0
  351. package/dist/src/rlm/cli.js +650 -0
  352. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  353. package/dist/src/serve/agent-router.js +205 -0
  354. package/dist/src/serve/dispatch-router.js +171 -0
  355. package/dist/src/serve/executor-registry.js +715 -0
  356. package/dist/src/serve/mission-conductor.js +177 -0
  357. package/dist/src/serve/orchestrator-adapter.js +113 -0
  358. package/dist/src/serve/orchestrator-override.js +94 -0
  359. package/dist/src/serve/orchestrator-pty.js +133 -0
  360. package/dist/src/serve/pty-bridge.js +799 -0
  361. package/dist/src/serve/sandbox-registry.js +832 -0
  362. package/dist/src/serve/screen-reader.js +228 -0
  363. package/dist/src/serve/stack-adapters.js +68 -0
  364. package/dist/src/serve/telemetry.js +143 -0
  365. package/dist/src/skills/adapters/clawhub.js +250 -0
  366. package/dist/src/skills/adapters/local.js +335 -0
  367. package/dist/src/skills/adapters/openclaw.js +316 -0
  368. package/dist/src/skills/cli.js +334 -0
  369. package/dist/src/skills/registry.js +117 -0
  370. package/dist/src/skills/run.js +259 -0
  371. package/dist/src/skills/runtime.js +94 -0
  372. package/dist/src/skills/types.js +10 -0
  373. package/dist/src/smiths/agentsmith/demo.js +116 -0
  374. package/dist/src/smiths/agentsmith/examples.js +300 -0
  375. package/dist/src/smiths/agentsmith/generator.js +503 -0
  376. package/dist/src/smiths/agentsmith/index.js +11 -0
  377. package/dist/src/smiths/agentsmith/types.js +8 -0
  378. package/dist/src/smiths/commandsmith/example.js +220 -0
  379. package/dist/src/smiths/commandsmith/generator.js +288 -0
  380. package/dist/src/smiths/commandsmith/index.js +41 -0
  381. package/dist/src/smiths/commandsmith/templates.js +296 -0
  382. package/dist/src/smiths/commandsmith/types.js +7 -0
  383. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  384. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  385. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  386. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  387. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  388. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  389. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  390. package/dist/src/smiths/context-pipeline/index.js +30 -0
  391. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  392. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  393. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  394. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  395. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  396. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  397. package/dist/src/smiths/context-pipeline/types.js +23 -0
  398. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  399. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  400. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  401. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  402. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  403. package/dist/src/smiths/hook-bridge/index.js +79 -0
  404. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  405. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  406. package/dist/src/smiths/hook-bridge/types.js +31 -0
  407. package/dist/src/smiths/index.js +39 -0
  408. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  409. package/dist/src/smiths/mcpsmith/example.js +119 -0
  410. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  411. package/dist/src/smiths/mcpsmith/index.js +17 -0
  412. package/dist/src/smiths/mcpsmith/types.js +10 -0
  413. package/dist/src/smiths/platform-paths.js +101 -0
  414. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  415. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  416. package/dist/src/smiths/skillsmith/demo.js +83 -0
  417. package/dist/src/smiths/skillsmith/examples.js +161 -0
  418. package/dist/src/smiths/skillsmith/generator.js +316 -0
  419. package/dist/src/smiths/skillsmith/index.js +12 -0
  420. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  421. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  422. package/dist/src/smiths/skillsmith/types.js +9 -0
  423. package/dist/src/smiths/toolsmith/index.js +10 -0
  424. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  425. package/dist/src/smiths/toolsmith/types.js +8 -0
  426. package/dist/src/storage/backends/fortemi.js +227 -0
  427. package/dist/src/storage/backends/fs.js +134 -0
  428. package/dist/src/storage/backends/logseq.js +309 -0
  429. package/dist/src/storage/backends/obsidian.js +233 -0
  430. package/dist/src/storage/cli.js +468 -0
  431. package/dist/src/storage/config.js +272 -0
  432. package/dist/src/storage/index.js +108 -0
  433. package/dist/src/storage/subsystem-cli.js +201 -0
  434. package/dist/src/storage/types.js +33 -0
  435. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  436. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  437. package/dist/src/testing/corpus/index.js +10 -0
  438. package/dist/src/testing/fixtures/index.js +9 -0
  439. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  440. package/dist/src/testing/generators/index.js +11 -0
  441. package/dist/src/testing/generators/test-case-generator.js +393 -0
  442. package/dist/src/testing/generators/test-code-generator.js +384 -0
  443. package/dist/src/testing/generators/use-case-parser.js +325 -0
  444. package/dist/src/testing/index.js +11 -0
  445. package/dist/src/tracker/capability-protocol.js +118 -0
  446. package/dist/src/update/checker.mjs +396 -0
  447. package/dist/src/update/notifier.mjs +235 -0
  448. package/dist/src/writing/content-diversifier.js +804 -0
  449. package/dist/src/writing/example-generator.js +959 -0
  450. package/dist/src/writing/example-templates.js +99 -0
  451. package/dist/src/writing/pattern-library.js +486 -0
  452. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  453. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  454. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  455. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  456. package/dist/src/writing/patterns/transition-words.json +1285 -0
  457. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  458. package/dist/src/writing/prompt-optimizer.js +660 -0
  459. package/dist/src/writing/prompt-templates.js +583 -0
  460. package/dist/src/writing/scoring-config-loader.js +168 -0
  461. package/dist/src/writing/validation-engine.js +595 -0
  462. package/dist/src/writing/validation-rules.js +380 -0
  463. package/dist/src/writing/voice-analyzer.js +439 -0
  464. package/dist/src/writing/voice-calibration.js +661 -0
  465. package/dist/src/writing/voice-profiles.json +588 -0
  466. package/package.json +64 -9
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Additive AIWG hook installer for operator-owned provider context files.
3
+ *
4
+ * Generalizes the CLAUDE.md hook pattern (`ensureClaudeMdHook`, #1437) to any
5
+ * provider-facing main prompt/context file — AGENTS.md, WARP.md, .hermes.md.
6
+ * When such a file exists but is not AIWG-managed (operator-authored), the prior
7
+ * behavior was to warn and skip, leaving Codex/Warp/Hermes without the `@AIWG.md`
8
+ * bridge. This installs the minimal managed hook block **additively** (operator
9
+ * content preserved byte-for-byte), and never requires `--force` for the additive
10
+ * path — `--force` stays reserved for replacing the whole file.
11
+ *
12
+ * @issue #1597 (AGENTS.md / Codex) — sibling #1579 (WARP.md / Warp)
13
+ */
14
+ import * as fs from 'fs/promises';
15
+ import * as path from 'path';
16
+ import { buildProviderBootstrapBlock } from './workspace-context.js';
17
+ export const CONTEXT_HOOK_START = '<!-- AIWG:context-hook:start -->';
18
+ export const CONTEXT_HOOK_END = '<!-- AIWG:context-hook:end -->';
19
+ /** The managed block — loads canonical workspace context before framework context. */
20
+ export function buildContextHookBlock(provider = 'codex') {
21
+ return [
22
+ CONTEXT_HOOK_START,
23
+ '',
24
+ buildProviderBootstrapBlock(provider),
25
+ '',
26
+ '<!--',
27
+ ' This block is managed by `aiwg regenerate` and `aiwg use`.',
28
+ ' Operator content above and below this block is preserved on regenerate.',
29
+ ' Edit .aiwg/AIWG.md (the normalized source) then run `aiwg regenerate`.',
30
+ '-->',
31
+ '',
32
+ CONTEXT_HOOK_END,
33
+ ].join('\n');
34
+ }
35
+ /** Does the file already carry the canonical context hook? */
36
+ export function hasContextHook(content) {
37
+ return content.includes(CONTEXT_HOOK_START) || (/^[ \t]*@WORKSPACE\.md[ \t]*$/m.test(content) && /^[ \t]*@AIWG\.md[ \t]*$/m.test(content));
38
+ }
39
+ /**
40
+ * Ensure `filePath` contains the AIWG `@AIWG.md` hook block, preserving all
41
+ * operator-authored content. Additive by default (no `--force` needed).
42
+ */
43
+ export async function ensureManagedHook(filePath, opts = {}) {
44
+ const base = path.basename(filePath);
45
+ const block = buildContextHookBlock(opts.provider);
46
+ const result = { path: filePath, action: 'skipped', warnings: [] };
47
+ let existing;
48
+ try {
49
+ existing = await fs.readFile(filePath, 'utf8');
50
+ }
51
+ catch (err) {
52
+ if (err.code === 'ENOENT') {
53
+ await fs.writeFile(filePath, `${block}\n`, 'utf8');
54
+ result.action = 'created';
55
+ return result;
56
+ }
57
+ throw err;
58
+ }
59
+ // Already has both bare includes (operator wired them by hand) — nothing to do.
60
+ if (!existing.includes(CONTEXT_HOOK_START) && /^[ \t]*@WORKSPACE\.md[ \t]*$/m.test(existing) && /^[ \t]*@AIWG\.md[ \t]*$/m.test(existing)) {
61
+ result.action = 'unchanged';
62
+ return result;
63
+ }
64
+ const s = existing.indexOf(CONTEXT_HOOK_START);
65
+ const e = existing.indexOf(CONTEXT_HOOK_END);
66
+ // No managed block — append it to the end, preserving everything above.
67
+ if (s === -1 && e === -1) {
68
+ const trimmed = existing.replace(/\n+$/, '\n');
69
+ await fs.writeFile(filePath, `${trimmed}\n${block}\n`, 'utf8');
70
+ result.action = 'inserted';
71
+ return result;
72
+ }
73
+ // Malformed (one marker only) — repair only with --force to avoid clobbering.
74
+ if (s === -1 || e === -1) {
75
+ if (opts.force) {
76
+ const trimmed = existing.replace(/\n+$/, '\n');
77
+ await fs.writeFile(filePath, `${trimmed}\n${block}\n`, 'utf8');
78
+ result.action = 'inserted';
79
+ return result;
80
+ }
81
+ result.warnings.push(`${base} has a malformed AIWG hook block (one marker missing); re-run with --force to repair.`);
82
+ return result;
83
+ }
84
+ // Block present — refresh it if it has drifted from canonical.
85
+ const endOff = e + CONTEXT_HOOK_END.length;
86
+ const current = existing.substring(s, endOff);
87
+ if (current === block) {
88
+ result.action = 'unchanged';
89
+ return result;
90
+ }
91
+ await fs.writeFile(filePath, existing.substring(0, s) + block + existing.substring(endOff), 'utf8');
92
+ result.action = 'updated';
93
+ return result;
94
+ }
95
+ //# sourceMappingURL=managed-hook.js.map
@@ -0,0 +1,212 @@
1
+ /**
2
+ * AGENTS.md size validation and auto-split (PUW-029 / #1130).
3
+ *
4
+ * Per ADR-1 §6: when AGENTS.md content exceeds the 30KB warn threshold or
5
+ * Codex's 32KB hard cap, auto-split moves entries to the spillover block in
6
+ * AGENTS.override.md. The cap (32KB) comes from `codex-rs/config_toml.rs:68`.
7
+ * AGENTS.override.md takes precedence at load time (`agents_md.rs:65`).
8
+ *
9
+ * Priority semantics:
10
+ * - 1 (high): pinned to AGENTS.md; never moves to spillover
11
+ * - 2 (medium): default; moves second
12
+ * - 3 (low): moves first
13
+ * - safety-critical: always pinned to priority 1, regardless of manifest
14
+ *
15
+ * If priority-1 alone exceeds 32KB, that is a hard error (per ADR-1 §6 —
16
+ * operator must split the framework, not silently lose safeguards).
17
+ */
18
+ export const SOFT_WARN_BYTES = 30 * 1024;
19
+ export const HARD_ERROR_BYTES = 32 * 1024;
20
+ export const SPILLOVER_START = '<!-- spillover-from-AGENTS.md:START -->';
21
+ export const SPILLOVER_END = '<!-- spillover-from-AGENTS.md:END -->';
22
+ /**
23
+ * Resolved priority for one entry — combines safety-critical pinning with
24
+ * the manifest priority lookup. Safety-critical always wins.
25
+ */
26
+ function resolvePriority(entry, map) {
27
+ if (entry.safetyCritical)
28
+ return 1;
29
+ if (map[entry.id] !== undefined)
30
+ return map[entry.id];
31
+ if (map['*'] !== undefined)
32
+ return map['*'];
33
+ return 2;
34
+ }
35
+ /**
36
+ * Errors emitted when the safety-critical floor cannot fit.
37
+ *
38
+ * Thrown rather than silently truncating safeguards. Operator must break
39
+ * the framework into smaller bundles.
40
+ */
41
+ export class SafetyCriticalOverflowError extends Error {
42
+ bytes;
43
+ constructor(bytes) {
44
+ super(`AGENTS.md priority-1 content alone is ${bytes} bytes, which exceeds the ${HARD_ERROR_BYTES}-byte hard cap. ` +
45
+ `Operator must split the framework or reduce safety-critical pinning. ` +
46
+ `Per ADR-1 §6, safety-critical content cannot be moved to the spillover block.`);
47
+ this.bytes = bytes;
48
+ this.name = 'SafetyCriticalOverflowError';
49
+ }
50
+ }
51
+ /**
52
+ * Split an entry list by priority, returning [keep, overflow] arrays where
53
+ * `keep` stays in the main file and `overflow` goes to the spillover block.
54
+ *
55
+ * Strategy: estimate bytes per entry; remove priority-3 first (alphabetical
56
+ * within tier), then priority-2 (alphabetical within tier), until the keep
57
+ * total is under the soft-warn threshold (30KB). Priority-1 stays in keep
58
+ * regardless. Returns the unsplit list when total is already under threshold.
59
+ */
60
+ function splitEntriesByPriority(entries, map, estimateBytes, budgetBytes) {
61
+ // Annotate each entry with its priority and bytes.
62
+ const annotated = entries.map((e) => ({
63
+ entry: e,
64
+ priority: resolvePriority(e, map),
65
+ bytes: estimateBytes(e),
66
+ }));
67
+ // Sort: priority asc (1 stays first), then by id alphabetical for determinism.
68
+ annotated.sort((a, b) => a.priority - b.priority || a.entry.id.localeCompare(b.entry.id));
69
+ const keep = [];
70
+ const overflow = [];
71
+ let totalKept = 0;
72
+ for (const a of annotated) {
73
+ if (a.priority === 1) {
74
+ keep.push(a.entry);
75
+ totalKept += a.bytes;
76
+ }
77
+ else if (totalKept + a.bytes <= budgetBytes) {
78
+ keep.push(a.entry);
79
+ totalKept += a.bytes;
80
+ }
81
+ else {
82
+ overflow.push(a.entry);
83
+ }
84
+ }
85
+ // Re-sort keep array to its natural id order (callers expect alpha).
86
+ keep.sort((a, b) => a.id.localeCompare(b.id));
87
+ overflow.sort((a, b) => a.id.localeCompare(b.id));
88
+ return { keep, overflow };
89
+ }
90
+ /**
91
+ * Estimate the rendered byte size of one entry, including markdown overhead.
92
+ * Rough but stable: id + description + path + per-entry markdown skeleton.
93
+ */
94
+ function defaultEstimateEntry(entry) {
95
+ let bytes = 6; // bullet + emphasis markers
96
+ bytes += entry.id.length;
97
+ bytes += entry.description.length;
98
+ bytes += entry.path.length;
99
+ bytes += 12; // " - Path: `…`" overhead
100
+ if (entry.tags && entry.tags.length > 0) {
101
+ bytes += entry.tags.join(', ').length + 12;
102
+ }
103
+ if (entry.safetyCritical)
104
+ bytes += 24; // "(SAFETY-CRITICAL)" + emphasis
105
+ bytes += 4; // trailing whitespace + newline
106
+ return bytes;
107
+ }
108
+ /**
109
+ * Partition all sections into "in main" vs "in spillover" entry lists,
110
+ * preserving safety-critical pinning and respecting the priority map.
111
+ *
112
+ * Strategy: each section is split independently using a per-section budget
113
+ * proportional to the total budget. This is intentionally conservative —
114
+ * we'd rather overflow a few low-priority entries from each section than
115
+ * preferentially overflow one whole section.
116
+ *
117
+ * Throws SafetyCriticalOverflowError when priority-1 alone exceeds the
118
+ * hard cap. Otherwise returns the partition.
119
+ */
120
+ export function partitionForOverflow(sections, priorityMap, totalBudgetBytes = SOFT_WARN_BYTES, estimateEntry = defaultEstimateEntry) {
121
+ // First, compute the priority-1 (pinned) byte total across all sections.
122
+ // If that alone exceeds the hard cap, throw — operator must intervene.
123
+ let priorityOneBytes = 0;
124
+ for (const section of sections) {
125
+ for (const entry of section.entries) {
126
+ if (resolvePriority(entry, priorityMap) === 1) {
127
+ priorityOneBytes += estimateEntry(entry);
128
+ }
129
+ }
130
+ }
131
+ if (priorityOneBytes > HARD_ERROR_BYTES) {
132
+ throw new SafetyCriticalOverflowError(priorityOneBytes);
133
+ }
134
+ // Compute total budget per section. Allocate proportionally to current
135
+ // section size so a small section doesn't get an outsized share.
136
+ const totalBytes = sections.reduce((acc, s) => acc + s.entries.reduce((a, e) => a + estimateEntry(e), 0), 0);
137
+ if (totalBytes <= totalBudgetBytes) {
138
+ return {
139
+ mainSections: sections,
140
+ spilloverSections: [],
141
+ estimatedMainBytes: totalBytes,
142
+ estimatedSpilloverBytes: 0,
143
+ splitOccurred: false,
144
+ };
145
+ }
146
+ const mainSections = [];
147
+ const spilloverSections = [];
148
+ let mainTotal = 0;
149
+ let spilloverTotal = 0;
150
+ for (const section of sections) {
151
+ const sectionBytes = section.entries.reduce((a, e) => a + estimateEntry(e), 0);
152
+ // Per-section share: proportional to section's contribution, but never
153
+ // exceeding the overall budget (and never zero). Earlier versions floored
154
+ // at 1024 unconditionally — that broke small-budget unit tests and
155
+ // arguably violated the global cap. The cap is the real invariant.
156
+ const share = totalBytes > 0
157
+ ? Math.min(totalBudgetBytes, Math.max(64, Math.floor((sectionBytes / totalBytes) * totalBudgetBytes)))
158
+ : totalBudgetBytes;
159
+ const { keep, overflow } = splitEntriesByPriority(section.entries, priorityMap, estimateEntry, share);
160
+ if (keep.length > 0) {
161
+ mainSections.push({ type: section.type, entries: keep });
162
+ mainTotal += keep.reduce((a, e) => a + estimateEntry(e), 0);
163
+ }
164
+ if (overflow.length > 0) {
165
+ spilloverSections.push({ type: section.type, entries: overflow });
166
+ spilloverTotal += overflow.reduce((a, e) => a + estimateEntry(e), 0);
167
+ }
168
+ }
169
+ return {
170
+ mainSections,
171
+ spilloverSections,
172
+ estimatedMainBytes: mainTotal,
173
+ estimatedSpilloverBytes: spilloverTotal,
174
+ splitOccurred: spilloverSections.length > 0,
175
+ };
176
+ }
177
+ /**
178
+ * Inject or update the spillover block within an existing AGENTS.override.md
179
+ * content string. Operator-authored content (everything outside the spillover
180
+ * markers) is preserved byte-for-byte.
181
+ *
182
+ * Returns the updated content. The caller writes this back to disk.
183
+ */
184
+ export function injectSpilloverBlock(existingContent, spilloverMarkdown) {
185
+ const startIdx = existingContent.indexOf(SPILLOVER_START);
186
+ const endIdx = existingContent.indexOf(SPILLOVER_END);
187
+ if (startIdx === -1 || endIdx === -1 || endIdx < startIdx) {
188
+ // No existing spillover block. Append a new one at the end.
189
+ const trimmed = existingContent.replace(/\n+$/, '');
190
+ const prefix = trimmed.length > 0 ? trimmed + '\n\n' : '';
191
+ return `${prefix}${SPILLOVER_START}\n${spilloverMarkdown}\n${SPILLOVER_END}\n`;
192
+ }
193
+ // Replace existing block in place.
194
+ const before = existingContent.slice(0, startIdx);
195
+ const after = existingContent.slice(endIdx + SPILLOVER_END.length);
196
+ return `${before}${SPILLOVER_START}\n${spilloverMarkdown}\n${SPILLOVER_END}${after}`;
197
+ }
198
+ /**
199
+ * Extract the operator-authored portion of AGENTS.override.md (everything
200
+ * outside the spillover block). Used for hash-protection diffs.
201
+ */
202
+ export function extractNonSpillover(content) {
203
+ const startIdx = content.indexOf(SPILLOVER_START);
204
+ const endIdx = content.indexOf(SPILLOVER_END);
205
+ if (startIdx === -1 || endIdx === -1 || endIdx < startIdx) {
206
+ return content;
207
+ }
208
+ const before = content.slice(0, startIdx).replace(/\n+$/, '');
209
+ const after = content.slice(endIdx + SPILLOVER_END.length).replace(/^\n+/, '');
210
+ return [before, after].filter(Boolean).join('\n\n');
211
+ }
212
+ //# sourceMappingURL=overflow.js.map
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Parallelism Cap Section — context-file injector
3
+ *
4
+ * Generates the markdown section that surfaces the project's
5
+ * `.aiwg/aiwg.config` `parallelism` cap in regenerated context files
6
+ * (AIWG.md, CLAUDE.md, AGENTS.md). Agents read context at session start;
7
+ * having the cap inline means no extra IO every session.
8
+ *
9
+ * Wrapped in managed-block markers so future regenerations replace the
10
+ * section in-place without disturbing operator additions outside it.
11
+ *
12
+ * Env var `AIWG_HIDE_PARALLELISM_IN_CONTEXT=1` suppresses injection.
13
+ *
14
+ * @implements #1362
15
+ */
16
+ import { readAiwgConfig, resolveParallelism, PROVIDER_PARALLELISM_DEFAULTS } from '../../config/aiwg-config.js';
17
+ export const PARALLELISM_BLOCK_START = '<!-- AIWG-PARALLELISM-CAP:START -->';
18
+ export const PARALLELISM_BLOCK_END = '<!-- AIWG-PARALLELISM-CAP:END -->';
19
+ /**
20
+ * Build the parallelism-cap markdown section for injection into context files.
21
+ * Returns `''` when injection should be skipped:
22
+ * - `AIWG_HIDE_PARALLELISM_IN_CONTEXT=1` is set
23
+ * - No `.aiwg/aiwg.config` exists at the project path
24
+ */
25
+ export async function buildParallelismSection(projectPath) {
26
+ if (process.env.AIWG_HIDE_PARALLELISM_IN_CONTEXT === '1')
27
+ return '';
28
+ const cfg = await readAiwgConfig(projectPath);
29
+ if (!cfg)
30
+ return '';
31
+ const primary = cfg.providers[0];
32
+ const resolved = resolveParallelism(cfg.parallelism, primary);
33
+ const providerDefaults = primary && PROVIDER_PARALLELISM_DEFAULTS[primary];
34
+ const isOverride = (field) => {
35
+ if (!providerDefaults)
36
+ return false;
37
+ if (field === 'rationale')
38
+ return false;
39
+ const def = providerDefaults[field];
40
+ return resolved[field] !== def;
41
+ };
42
+ const label = (field) => {
43
+ const value = resolved[field];
44
+ if (isOverride(field))
45
+ return `${value} (operator override)`;
46
+ if (primary)
47
+ return `${value} (provider default for ${primary})`;
48
+ return `${value} (conservative default — unknown provider)`;
49
+ };
50
+ const lines = [];
51
+ lines.push(PARALLELISM_BLOCK_START);
52
+ lines.push('## Parallelism Cap');
53
+ lines.push('');
54
+ lines.push('This project caps parallel agent fan-out (#1359):');
55
+ lines.push('');
56
+ lines.push(`- **max_parallel_subagents**: ${label('max_parallel_subagents')}`);
57
+ lines.push(`- **max_parallel_ralph_loops**: ${label('max_parallel_ralph_loops')}`);
58
+ lines.push(`- **max_parallel_mc_missions**: ${label('max_parallel_mc_missions')}`);
59
+ if (resolved.rationale) {
60
+ lines.push('');
61
+ lines.push(`*Rationale*: ${resolved.rationale}`);
62
+ }
63
+ lines.push('');
64
+ lines.push('When spawning parallel subagents, take the MIN of: this cap, `AIWG_CONTEXT_WINDOW` budget, the RLM 7-agent hard cap (RLM dispatches only), and the natural task decomposition. Bump via `aiwg config set --project parallelism.max_parallel_subagents N`.');
65
+ lines.push('');
66
+ lines.push(PARALLELISM_BLOCK_END);
67
+ lines.push('');
68
+ return lines.join('\n');
69
+ }
70
+ /**
71
+ * Replace an existing parallelism-cap block inside `content` (between the
72
+ * managed-block markers) with `newSection`. If no block exists yet, appends
73
+ * the new section. If `newSection` is empty (cap is hidden), strips any
74
+ * existing block in-place.
75
+ *
76
+ * Used by AIWG.md and AGENTS.md generators when reprocessing a file that
77
+ * already has a parallelism block from a prior regeneration.
78
+ */
79
+ export function replaceOrAppendParallelismBlock(content, newSection) {
80
+ const startIdx = content.indexOf(PARALLELISM_BLOCK_START);
81
+ const endIdx = content.indexOf(PARALLELISM_BLOCK_END);
82
+ if (startIdx >= 0 && endIdx > startIdx) {
83
+ const before = content.slice(0, startIdx);
84
+ const after = content.slice(endIdx + PARALLELISM_BLOCK_END.length);
85
+ // Trim leading newline from `after` if present, since newSection ends with one
86
+ const cleanAfter = after.startsWith('\n') ? after.slice(1) : after;
87
+ return before + newSection + cleanAfter;
88
+ }
89
+ if (!newSection)
90
+ return content;
91
+ // No existing block — append before the final trailing newline
92
+ return content.trimEnd() + '\n\n' + newSection;
93
+ }
94
+ //# sourceMappingURL=parallelism-section.js.map
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Provider policy for AIWG.md, AGENTS.md, and CLAUDE.md hook emission.
3
+ *
4
+ * Per ADR-1 §3: AIWG.md is the cross-provider context entry point. Most
5
+ * providers reach it through AGENTS.md or a provider-native twin file
6
+ * (Hermes `.hermes.md`, Warp `WARP.md`). Claude Code reaches it through
7
+ * `CLAUDE.md` containing a `@AIWG.md` include — same pipeline, different
8
+ * link mechanism.
9
+ *
10
+ * Previous design (pre-#1437) bailed out entirely for the claude provider
11
+ * with the misleading rationale "claude uses CLAUDE.md natively." That
12
+ * conflated two facts: claude DOES read CLAUDE.md without aiwg-side
13
+ * wiring, but regenerate STILL needs to refresh AIWG.md and ensure the
14
+ * `@AIWG.md` link is present in CLAUDE.md. The fix splits the policy
15
+ * into three granular gates so each provider gets exactly what it needs.
16
+ *
17
+ * @issue #1437
18
+ */
19
+ import { getProviderDefinition, listProviderDefinitions } from '../../providers/provider-definitions.js';
20
+ /**
21
+ * Providers that receive AGENTS.md emission at project root.
22
+ *
23
+ * Sources kept in sync:
24
+ * - ADR-1 §3 default-on rollout (`.aiwg/architecture/adr-agents-md-aggregation.md`)
25
+ * - ADR-1 §4 per-provider variants table (file-name + twin-file emission)
26
+ */
27
+ export const AGENTS_MD_PROVIDERS = new Set(listProviderDefinitions()
28
+ .filter((definition) => definition.paths.contextFiles.agentsMd)
29
+ .map((definition) => definition.id));
30
+ /**
31
+ * Whether the context-pipeline has ANY work to do for this provider.
32
+ * Returns false only for providers that have no project-local context
33
+ * footprint: OpenClaw/OpenHuman (home-dir-only) and 'generic' (no specific provider).
34
+ *
35
+ * Claude returns TRUE — it needs AIWG.md + a CLAUDE.md hook update.
36
+ */
37
+ export function shouldEmitContextFiles(provider) {
38
+ return shouldEmitAiwgMd(provider) || shouldEmitClaudeMdHook(provider);
39
+ }
40
+ /**
41
+ * Whether to emit AIWG.md at project root. True for every project-local
42
+ * provider; false only for home-dir-only providers and 'generic'.
43
+ */
44
+ export function shouldEmitAiwgMd(provider) {
45
+ return getProviderDefinition(provider)?.paths.contextFiles.aiwgMd ?? false;
46
+ }
47
+ /**
48
+ * Whether to emit AGENTS.md at project root. True for the AGENTS-MD
49
+ * provider set (codex, copilot, cursor, windsurf, hermes, warp, factory,
50
+ * opencode). False for claude (uses CLAUDE.md hook instead), openclaw,
51
+ * and generic.
52
+ */
53
+ export function shouldEmitAgentsMd(provider) {
54
+ return getProviderDefinition(provider)?.paths.contextFiles.agentsMd ?? false;
55
+ }
56
+ /**
57
+ * Whether to ensure the CLAUDE.md `@AIWG.md` hook is present. True only
58
+ * for the claude provider. CLAUDE.md gets a managed marker block with an
59
+ * `@AIWG.md` include; operator content outside the block is preserved.
60
+ */
61
+ export function shouldEmitClaudeMdHook(provider) {
62
+ return getProviderDefinition(provider)?.paths.contextFiles.claudeMdHook ?? false;
63
+ }
64
+ //# sourceMappingURL=provider-policy.js.map
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Field sanitization for AGENTS.md link-index entries.
3
+ *
4
+ * Per ADR-1 §2: AGENTS.md is loaded into model context every session, so a poisoned
5
+ * link entry is a high-reach prompt-injection vector. The sanitizer rejects backticks,
6
+ * code fences, control characters, absolute URLs (any scheme except relative paths),
7
+ * and HTML at generation time, before the bytes are written.
8
+ *
9
+ * Description field is also length-capped at 120 chars.
10
+ */
11
+ const DESCRIPTION_MAX_LEN = 120;
12
+ const FORBIDDEN_PATTERNS = [
13
+ { pattern: /`/, reason: 'backtick' },
14
+ { pattern: /```/, reason: 'code fence' },
15
+ { pattern: /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/, reason: 'control character' },
16
+ { pattern: /<\s*[a-zA-Z][^>]*>/, reason: 'HTML tag' },
17
+ // Absolute URLs with schemes (http, https, file, ftp, etc.) — reject any scheme://
18
+ // Relative paths (./foo, foo/bar.md, ~/...) are allowed.
19
+ { pattern: /\b[a-zA-Z][a-zA-Z0-9+\-.]*:\/\//, reason: 'absolute URL' },
20
+ ];
21
+ /**
22
+ * Sanitize a description field for the AGENTS.md link index.
23
+ *
24
+ * Returns `ok: false` with a `rejectedFor` reason when the input contains
25
+ * forbidden content. Caller decides whether to skip the entry or abort.
26
+ *
27
+ * On `ok: true`, the returned `value` is trimmed and length-capped.
28
+ */
29
+ export function sanitizeDescription(input) {
30
+ if (typeof input !== 'string') {
31
+ return { ok: false, value: '', rejectedFor: 'non-string input' };
32
+ }
33
+ for (const { pattern, reason } of FORBIDDEN_PATTERNS) {
34
+ if (pattern.test(input)) {
35
+ return { ok: false, value: '', rejectedFor: reason };
36
+ }
37
+ }
38
+ const trimmed = input.trim();
39
+ if (trimmed.length === 0) {
40
+ return { ok: false, value: '', rejectedFor: 'empty after trim' };
41
+ }
42
+ // Length-cap at 120 chars; truncate with ellipsis marker if needed.
43
+ const value = trimmed.length > DESCRIPTION_MAX_LEN
44
+ ? trimmed.slice(0, DESCRIPTION_MAX_LEN - 1).trimEnd() + '…'
45
+ : trimmed;
46
+ return { ok: true, value, rejectedFor: '' };
47
+ }
48
+ /**
49
+ * Sanitize a tag value. Tags are short identifiers (kebab-case typical).
50
+ * No length cap, but same forbidden-pattern set as description.
51
+ */
52
+ export function sanitizeTag(input) {
53
+ if (typeof input !== 'string') {
54
+ return { ok: false, value: '', rejectedFor: 'non-string input' };
55
+ }
56
+ for (const { pattern, reason } of FORBIDDEN_PATTERNS) {
57
+ if (pattern.test(input)) {
58
+ return { ok: false, value: '', rejectedFor: reason };
59
+ }
60
+ }
61
+ const trimmed = input.trim();
62
+ if (trimmed.length === 0) {
63
+ return { ok: false, value: '', rejectedFor: 'empty after trim' };
64
+ }
65
+ // Reject whitespace inside tags (kebab-case convention).
66
+ if (/\s/.test(trimmed)) {
67
+ return { ok: false, value: '', rejectedFor: 'whitespace in tag' };
68
+ }
69
+ return { ok: true, value: trimmed, rejectedFor: '' };
70
+ }
71
+ /**
72
+ * Convenience: sanitize an array of tags. Drops invalid tags rather than rejecting
73
+ * the whole array. Returns the kept tags and a list of rejection reasons for telemetry.
74
+ */
75
+ export function sanitizeTags(inputs) {
76
+ const kept = [];
77
+ const rejected = [];
78
+ for (const input of inputs) {
79
+ const result = sanitizeTag(input);
80
+ if (result.ok) {
81
+ kept.push(result.value);
82
+ }
83
+ else {
84
+ rejected.push(`${input || '<empty>'}: ${result.rejectedFor}`);
85
+ }
86
+ }
87
+ return { kept, rejected };
88
+ }
89
+ export const SANITIZER_INTERNALS = {
90
+ DESCRIPTION_MAX_LEN,
91
+ FORBIDDEN_PATTERNS,
92
+ };
93
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Type definitions for the context-pipeline module.
3
+ *
4
+ * The context-pipeline emits a canonical graph and provider adapters at the end of `aiwg use`:
5
+ *
6
+ * - WORKSPACE.md — provider-neutral project/operator context
7
+ * - AIWG.md — generated framework context
8
+ * - provider startup files — minimal adapters that load WORKSPACE.md, then AIWG.md
9
+ *
10
+ * Per ADR-1 (.aiwg/architecture/adr-agents-md-aggregation.md). NOT part of agentsmith;
11
+ * agentsmith creates subagent personas, this module assembles cross-platform context.
12
+ */
13
+ /**
14
+ * AIWG-wide brand defaults for the Codex `agents/openai.yaml` sidecar (PUW-028).
15
+ *
16
+ * Per ADR-1 signoff (2026-05-05): single brand identity for all skills.
17
+ * Per-category mapping is a follow-up if demand surfaces.
18
+ */
19
+ export const AIWG_BRAND_DEFAULTS = {
20
+ icon: 'aiwg',
21
+ brandColor: '#0B5FFF',
22
+ };
23
+ //# sourceMappingURL=types.js.map