@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,127 @@
1
+ /**
2
+ * CLAUDE.md hook injector — ensures CLAUDE.md contains an AIWG-managed
3
+ * marker block with canonical `@WORKSPACE.md` then `@AIWG.md` includes.
4
+ *
5
+ * For provider=claude, AIWG.md still gets generated at project root the
6
+ * same way as for other providers. The difference: claude reads CLAUDE.md
7
+ * natively (not AGENTS.md), so we need a different bridge — a managed
8
+ * block inside CLAUDE.md that pulls AIWG.md in via `@-mention`.
9
+ *
10
+ * Design:
11
+ * - Marker block delimits AIWG-managed content; operator content outside
12
+ * the block is never touched.
13
+ * - If CLAUDE.md exists without the block, append the block to the end.
14
+ * - If CLAUDE.md exists with the block, update the block in place.
15
+ * - If CLAUDE.md does not exist, create a minimal CLAUDE.md with just
16
+ * the marker block (operator will add their own content later).
17
+ * - `--force` allows replacing the marker block content even when the
18
+ * block has been operator-modified inside (with backup).
19
+ *
20
+ * @issue #1437
21
+ */
22
+ import * as fs from 'fs/promises';
23
+ import * as path from 'path';
24
+ import { buildProviderBootstrapBlock } from './workspace-context.js';
25
+ export const CLAUDE_HOOK_START = '<!-- AIWG:claude-md-hook:start -->';
26
+ export const CLAUDE_HOOK_END = '<!-- AIWG:claude-md-hook:end -->';
27
+ /**
28
+ * The managed block that gets inserted into CLAUDE.md. Tells Claude Code
29
+ * to load AIWG.md as the project context entry point. Kept short — the
30
+ * actual context lives in AIWG.md.
31
+ */
32
+ export function buildClaudeHookBlock() {
33
+ return [
34
+ CLAUDE_HOOK_START,
35
+ '',
36
+ buildProviderBootstrapBlock('claude'),
37
+ '@.aiwg/aiwg.config',
38
+ '',
39
+ '<!--',
40
+ ' This block is managed by `aiwg regenerate` and `aiwg use`.',
41
+ ' Operator content above and below this block is preserved on regenerate.',
42
+ ' To change AIWG.md content, edit .aiwg/AIWG.md (the normalized source)',
43
+ ' then run `aiwg regenerate`.',
44
+ '-->',
45
+ '',
46
+ CLAUDE_HOOK_END,
47
+ ].join('\n');
48
+ }
49
+ /**
50
+ * Ensure CLAUDE.md at projectPath contains the AIWG-managed marker block
51
+ * pointing at AIWG.md. Returns a result describing what was done.
52
+ */
53
+ export async function ensureClaudeMdHook(projectPath, opts = {}) {
54
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
55
+ const result = {
56
+ claudeMdPath,
57
+ action: 'skipped',
58
+ warnings: [],
59
+ };
60
+ const block = buildClaudeHookBlock();
61
+ // Case 1: CLAUDE.md does not exist — create a minimal one with just the block.
62
+ let existing;
63
+ try {
64
+ existing = await fs.readFile(claudeMdPath, 'utf8');
65
+ }
66
+ catch (err) {
67
+ if (err.code === 'ENOENT') {
68
+ const minimal = `${block}\n`;
69
+ await fs.writeFile(claudeMdPath, minimal, 'utf8');
70
+ result.action = 'created';
71
+ return result;
72
+ }
73
+ throw err;
74
+ }
75
+ const startIdx = existing.indexOf(CLAUDE_HOOK_START);
76
+ const endIdx = existing.indexOf(CLAUDE_HOOK_END);
77
+ // Case 2: marker block does not exist — append the block to end of file.
78
+ if (startIdx === -1 && endIdx === -1) {
79
+ // Ensure the file ends with a single newline before appending.
80
+ const trimmed = existing.replace(/\n+$/, '\n');
81
+ const updated = `${trimmed}\n${block}\n`;
82
+ await fs.writeFile(claudeMdPath, updated, 'utf8');
83
+ result.action = 'inserted';
84
+ return result;
85
+ }
86
+ // Marker block is present but malformed (one of the two markers missing).
87
+ if (startIdx === -1 || endIdx === -1) {
88
+ result.warnings.push(`CLAUDE.md has a malformed AIWG hook block (one marker missing). Re-run with --force to repair.`);
89
+ if (!opts.force) {
90
+ return result;
91
+ }
92
+ // With --force, back up and append a fresh block.
93
+ if (opts.detectExistingFiles !== false) {
94
+ const backupPath = `${claudeMdPath}.bak.${new Date().toISOString().replace(/[:.]/g, '-')}`;
95
+ await fs.writeFile(backupPath, existing, 'utf8');
96
+ result.backupPath = backupPath;
97
+ }
98
+ const trimmed = existing.replace(/\n+$/, '\n');
99
+ const updated = `${trimmed}\n${block}\n`;
100
+ await fs.writeFile(claudeMdPath, updated, 'utf8');
101
+ result.action = 'inserted';
102
+ return result;
103
+ }
104
+ // Case 3: marker block exists — check whether the content matches canonical.
105
+ const blockEndOffset = endIdx + CLAUDE_HOOK_END.length;
106
+ const currentBlock = existing.substring(startIdx, blockEndOffset);
107
+ if (currentBlock === block) {
108
+ result.action = 'unchanged';
109
+ return result;
110
+ }
111
+ // Block has drifted. Back up first if --force; warn-and-update otherwise
112
+ // (the block is AIWG-managed, so we update by default; the backup is for
113
+ // the case where an operator made deliberate edits inside the block).
114
+ if (opts.force) {
115
+ const backupPath = `${claudeMdPath}.bak.${new Date().toISOString().replace(/[:.]/g, '-')}`;
116
+ await fs.writeFile(backupPath, existing, 'utf8');
117
+ result.backupPath = backupPath;
118
+ }
119
+ else {
120
+ result.warnings.push(`CLAUDE.md AIWG hook block has been modified inside the markers; updating to canonical content. Operator content outside the block is preserved.`);
121
+ }
122
+ const updated = existing.substring(0, startIdx) + block + existing.substring(blockEndOffset);
123
+ await fs.writeFile(claudeMdPath, updated, 'utf8');
124
+ result.action = 'updated';
125
+ return result;
126
+ }
127
+ //# sourceMappingURL=claude-hook.js.map
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Deployed-artifact discovery for the context-pipeline.
3
+ *
4
+ * Walks the per-provider deploy paths after `aiwg use` has completed and emits
5
+ * IndexEntry[] arrays for the four canonical AGENTS.md sections (Agents, Rules,
6
+ * Skills, Behaviors). The generator-runs-after-deploy invariant from ADR-1 §7
7
+ * means the discovery is filesystem-observed: only files that actually landed
8
+ * appear in the link index. Failed deploys produce shorter indexes, never
9
+ * broken links.
10
+ *
11
+ * Skill discovery is folder-based (each skill is a directory containing
12
+ * SKILL.md). Agent/rule/behavior discovery is file-based (each artifact is
13
+ * one .md file). The asymmetry mirrors the deploy-path conventions defined in
14
+ * `ProviderDefinition.paths.contextDiscovery`.
15
+ */
16
+ import { promises as fs } from 'node:fs';
17
+ import * as path from 'node:path';
18
+ import * as yaml from 'js-yaml';
19
+ const FRONTMATTER_REGEX = /^---\s*\n([\s\S]*?)\n---/;
20
+ /**
21
+ * Read the YAML frontmatter from a markdown file.
22
+ *
23
+ * Returns null when the file does not start with frontmatter or the block is
24
+ * malformed. Discovery callers treat that as "use the basename as id and the
25
+ * filename as description" rather than aborting — discovery is best-effort.
26
+ */
27
+ async function readFrontmatter(filePath) {
28
+ try {
29
+ const content = await fs.readFile(filePath, 'utf8');
30
+ const match = FRONTMATTER_REGEX.exec(content);
31
+ if (!match)
32
+ return null;
33
+ const parsed = yaml.load(match[1]);
34
+ if (parsed && typeof parsed === 'object') {
35
+ return parsed;
36
+ }
37
+ return null;
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /**
44
+ * Build an IndexEntry from a markdown file path.
45
+ *
46
+ * Returns null when the file is unreadable; otherwise emits an entry with
47
+ * frontmatter-derived metadata (falling back to filename basename for `id`
48
+ * and a placeholder description if neither is available).
49
+ */
50
+ async function entryFromFile(absolutePath, relativePath) {
51
+ try {
52
+ const stat = await fs.stat(absolutePath);
53
+ if (!stat.isFile())
54
+ return null;
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ const fm = await readFrontmatter(absolutePath);
60
+ const basename = path.basename(absolutePath, path.extname(absolutePath));
61
+ const id = fm?.name?.trim() || basename;
62
+ const description = fm?.description?.trim() || `(no description)`;
63
+ const tags = Array.isArray(fm?.tags)
64
+ ? fm.tags
65
+ : typeof fm?.tags === 'string'
66
+ ? fm.tags.split(',').map((t) => t.trim()).filter(Boolean)
67
+ : [];
68
+ const safetyCritical = fm?.['safety-critical'] === true;
69
+ // Always emit forward slashes in the path so AGENTS.md is portable across
70
+ // platforms that read it (Codex on Linux, Cursor on Windows, etc.).
71
+ const portablePath = relativePath.replace(/\\/g, '/');
72
+ return {
73
+ id,
74
+ description,
75
+ path: portablePath,
76
+ tags: tags.length > 0 ? tags : undefined,
77
+ safetyCritical: safetyCritical || undefined,
78
+ };
79
+ }
80
+ /**
81
+ * Build an IndexEntry from a skill folder.
82
+ *
83
+ * Skills are folders containing SKILL.md (the convention enforced across all
84
+ * platform skill paths). The folder name is the id when no frontmatter `name`
85
+ * is present.
86
+ */
87
+ async function entryFromSkillFolder(folderAbsPath, folderRelPath) {
88
+ const skillFile = path.join(folderAbsPath, 'SKILL.md');
89
+ try {
90
+ const stat = await fs.stat(skillFile);
91
+ if (!stat.isFile())
92
+ return null;
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ const skillRelPath = path.posix.join(folderRelPath.replace(/\\/g, '/'), 'SKILL.md');
98
+ const entry = await entryFromFile(skillFile, skillRelPath);
99
+ if (!entry)
100
+ return null;
101
+ // Folder name takes precedence as id when frontmatter `name` isn't set —
102
+ // skill folders are addressed by directory, not by SKILL.md filename.
103
+ const folderName = path.basename(folderAbsPath);
104
+ if (!entry.id || entry.id === 'SKILL') {
105
+ entry.id = folderName;
106
+ }
107
+ return entry;
108
+ }
109
+ /**
110
+ * List markdown files in a directory (non-recursive).
111
+ *
112
+ * Returns an empty array if the directory does not exist or is empty. This
113
+ * is intentional — discovery never errors on missing paths because providers
114
+ * legitimately deploy nothing in some categories (e.g., OpenCode commands).
115
+ */
116
+ async function listMarkdownFiles(dirAbs) {
117
+ try {
118
+ const entries = await fs.readdir(dirAbs, { withFileTypes: true });
119
+ return entries
120
+ .filter((e) => e.isFile() && (e.name.endsWith('.md') || e.name.endsWith('.agent.md')))
121
+ .map((e) => e.name);
122
+ }
123
+ catch {
124
+ return [];
125
+ }
126
+ }
127
+ /**
128
+ * List skill subfolders in a directory (non-recursive).
129
+ */
130
+ async function listSkillFolders(dirAbs) {
131
+ try {
132
+ const entries = await fs.readdir(dirAbs, { withFileTypes: true });
133
+ return entries.filter((e) => e.isDirectory()).map((e) => e.name);
134
+ }
135
+ catch {
136
+ return [];
137
+ }
138
+ }
139
+ /**
140
+ * Discover one section's deployed artifacts.
141
+ *
142
+ * Type determines whether to scan files (agents/rules/behaviors) or folders
143
+ * (skills). Empty `relativeDir` short-circuits to an empty section.
144
+ */
145
+ export async function discoverSection(type, projectPath, relativeDir) {
146
+ if (!relativeDir) {
147
+ return { type, entries: [] };
148
+ }
149
+ // Allow absolute paths (home-dir providers like OpenClaw, ~/.codex/skills).
150
+ const dirAbs = path.isAbsolute(relativeDir)
151
+ ? relativeDir
152
+ : path.join(projectPath, relativeDir);
153
+ const entries = [];
154
+ if (type === 'skills') {
155
+ const folders = await listSkillFolders(dirAbs);
156
+ for (const folder of folders.sort()) {
157
+ const entry = await entryFromSkillFolder(path.join(dirAbs, folder), path.join(relativeDir, folder));
158
+ if (entry)
159
+ entries.push(entry);
160
+ }
161
+ }
162
+ else {
163
+ const files = await listMarkdownFiles(dirAbs);
164
+ for (const file of files.sort()) {
165
+ const entry = await entryFromFile(path.join(dirAbs, file), path.join(relativeDir, file));
166
+ if (entry)
167
+ entries.push(entry);
168
+ }
169
+ }
170
+ return { type, entries };
171
+ }
172
+ /**
173
+ * Discover all four canonical AGENTS.md sections at once.
174
+ */
175
+ export async function discoverDeployedArtifacts(projectPath, paths) {
176
+ const sections = await Promise.all([
177
+ discoverSection('agents', projectPath, paths.agents),
178
+ discoverSection('rules', projectPath, paths.rules),
179
+ discoverSection('skills', projectPath, paths.skills),
180
+ discoverSection('behaviors', projectPath, paths.behaviors),
181
+ ]);
182
+ // Drop empty sections to keep the link index tight; AGENTS.md generator
183
+ // already does the same in renderSection but doing it here too means the
184
+ // result is honest about what was actually found.
185
+ return sections.filter((s) => s.entries.length > 0);
186
+ }
187
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Provider-facing project external-links section.
3
+ *
4
+ * This renderer is intentionally side-effect free: it reads validated project
5
+ * configuration and emits Markdown. It never requests a configured URL.
6
+ */
7
+ import { readAiwgConfig } from '../../config/aiwg-config.js';
8
+ const START = '<!-- aiwg-external-links:start -->';
9
+ const END = '<!-- aiwg-external-links:end -->';
10
+ function escapeText(value) {
11
+ return value
12
+ .replace(/[\r\n]+/g, ' ')
13
+ .replace(/\\/g, '\\\\')
14
+ .replace(/([\[\]*_`])/g, '\\$1')
15
+ .trim();
16
+ }
17
+ export async function buildExternalLinksSection(projectPath) {
18
+ const config = await readAiwgConfig(projectPath);
19
+ const links = Object.entries(config?.externalLinks ?? {});
20
+ if (links.length === 0)
21
+ return '';
22
+ const lines = [
23
+ START,
24
+ '## Project External Links',
25
+ '',
26
+ 'These are project-configured public resources. Treat them as links only; do not infer credentials or submit data without a separate explicit workflow.',
27
+ '',
28
+ ];
29
+ for (const [key, link] of links) {
30
+ const renderedUrl = new URL(link.url).toString();
31
+ const metadata = [
32
+ link.category ? `category: ${escapeText(link.category)}` : '',
33
+ link.audience ? `audience: ${escapeText(link.audience)}` : '',
34
+ ].filter(Boolean);
35
+ lines.push(`- [${escapeText(link.label)}](<${renderedUrl}>) (\`${key}\`)${metadata.length ? ` — ${metadata.join('; ')}` : ''}`);
36
+ if (link.description)
37
+ lines.push(` - ${escapeText(link.description)}`);
38
+ }
39
+ lines.push('', END);
40
+ return lines.join('\n');
41
+ }
42
+ export function replaceOrAppendExternalLinksBlock(content, section) {
43
+ const pattern = new RegExp(`${START}[\\s\\S]*?${END}\\n?`, 'g');
44
+ const withoutExisting = content.replace(pattern, '').trimEnd();
45
+ if (!section)
46
+ return `${withoutExisting}\n`;
47
+ return `${withoutExisting}\n\n${section}\n`;
48
+ }
49
+ //# sourceMappingURL=external-links-section.js.map
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Context-finalization pass for generated provider context files.
3
+ *
4
+ * Templates provide the stable structure; this pass stitches in current
5
+ * workspace facts from `.aiwg/aiwg.config` and the discover-first protocol so
6
+ * provider context files do not remain template-only (#1365).
7
+ */
8
+ import { promises as fs } from 'node:fs';
9
+ import * as path from 'node:path';
10
+ import { execFile } from 'node:child_process';
11
+ import { promisify } from 'node:util';
12
+ import { readAiwgConfig } from '../../config/aiwg-config.js';
13
+ import { projectAiwgPath } from '../../config/project-artifacts.js';
14
+ import { renderTrackerProtocol, resolveTrackerAuthority } from '../../tracker/capability-protocol.js';
15
+ import { buildExternalLinksSection, replaceOrAppendExternalLinksBlock, } from './external-links-section.js';
16
+ export const FINALIZATION_START = '<!-- aiwg-context-finalization:START -->';
17
+ export const FINALIZATION_END = '<!-- aiwg-context-finalization:END -->';
18
+ const AIWG_SIGNATURE_COMMENT = '<!-- aiwg-managed -->';
19
+ const execFileAsync = promisify(execFile);
20
+ function formatList(values) {
21
+ return values.length > 0 ? values.join(', ') : 'none recorded';
22
+ }
23
+ async function readConfig(projectPath) {
24
+ try {
25
+ return await readAiwgConfig(projectPath);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ async function readGitRemoteUrls(projectPath) {
32
+ try {
33
+ const { stdout } = await execFileAsync('git', ['-C', projectPath, 'remote', '-v'], {
34
+ maxBuffer: 1024 * 1024,
35
+ });
36
+ const urls = {};
37
+ for (const line of stdout.split(/\r?\n/)) {
38
+ const match = line.match(/^(\S+)\s+(\S+)\s+\((fetch|push)\)$/);
39
+ if (!match)
40
+ continue;
41
+ const [, name, url, direction] = match;
42
+ if (direction === 'fetch' || !urls[name])
43
+ urls[name] = url;
44
+ }
45
+ return urls;
46
+ }
47
+ catch {
48
+ return {};
49
+ }
50
+ }
51
+ function displayProjectPath(projectPath, targetPath) {
52
+ const relative = path.relative(projectPath, targetPath).replace(/\\/g, '/');
53
+ if (relative && !relative.startsWith('..') && !path.isAbsolute(relative))
54
+ return relative;
55
+ return targetPath;
56
+ }
57
+ export async function buildContextFinalizationBlock(projectPath) {
58
+ const config = await readConfig(projectPath);
59
+ const remoteUrls = await readGitRemoteUrls(projectPath);
60
+ const providers = config?.providers ?? [];
61
+ const installed = Object.entries(config?.installed ?? {});
62
+ const installedNames = installed.map(([name]) => name);
63
+ const providerDeployments = new Set();
64
+ const normalizedAiwgMdPath = displayProjectPath(projectPath, projectAiwgPath(projectPath, 'AIWG.md'));
65
+ for (const [, entry] of installed) {
66
+ for (const provider of Object.keys(entry.deployedTo ?? {})) {
67
+ providerDeployments.add(provider);
68
+ }
69
+ }
70
+ const lines = [
71
+ FINALIZATION_START,
72
+ '## Context Finalization',
73
+ '',
74
+ 'This section is synthesized after template emission from the current workspace state. Preserve operator-authored content outside AIWG-managed blocks; rerun `aiwg regenerate` to refresh this section after provider, framework, or MCP wiring changes.',
75
+ '',
76
+ '### Workspace Snapshot',
77
+ '',
78
+ `- Configured providers: ${formatList(providers)}`,
79
+ `- Installed frameworks/addons: ${formatList(installedNames)}`,
80
+ `- Recorded deployments: ${formatList([...providerDeployments].sort())}`,
81
+ `- Normalized project context: \`${normalizedAiwgMdPath}\``,
82
+ '',
83
+ '### Discover-First Protocol',
84
+ '',
85
+ 'Classify every user turn FIRST: is it a **new directive** or a continuation? When a message names or references an AIWG command/capability — even as pasted content like an `address-issues` tracker table, an issue list, or a `flow-*` name — treat it as a new directive and ACT: run `aiwg discover "<the need>"`, fetch with `aiwg show <type> <name>`, and invoke it. Do NOT ask "what would you like me to do with these?" when the action is implied — a pasted `address-issues #1234` table means run the address-issues workflow on those issues.',
86
+ '',
87
+ 'Also run `aiwg discover` before declining an AIWG request as out of scope or inventing a workflow from memory. The CLI ranks AIWG capabilities across the installed corpus and rebuilds the index from `$AIWG_ROOT` automatically, so a "no matches" for a command you know is deployed is a bug — not a signal it is absent. Commands AIWG deploys to your provider command directory (`.opencode/command/`, `.claude/commands/`, `~/.codex/prompts/`, …) ARE discoverable this way; fetch them with `aiwg show command <name>`. This prevents decline-without-search failures, ask-instead-of-act on new directives, and hallucinated skill or agent names. Full rule: `agentic/code/addons/aiwg-utils/rules/skill-discovery.md`.',
88
+ '',
89
+ '### Engagement Verification',
90
+ '',
91
+ 'When a user asks whether AIWG is active or engaged in this project, run or read `aiwg status --probe --json` and report the result plainly: engaged state, project root, deployed provider files, installed frameworks/addons, and the next action from the probe. Do not add AIWG attribution, signatures, generated-by text, or passive footers to user files, commits, PRs, comments, code headers, or docs.',
92
+ '',
93
+ renderTrackerProtocol(resolveTrackerAuthority(config, remoteUrls)),
94
+ '',
95
+ '### Source Model',
96
+ '',
97
+ '- `.aiwg/AIWG.md` is the normalized project-local context entry point.',
98
+ '- Root `AIWG.md` is the generated cross-provider companion loaded through `AGENTS.md` and provider twins.',
99
+ '- `AGENTS.md`, `WARP.md`, `.hermes.md`, and `.github/copilot-instructions.md` are provider-facing bridges, not replacements for `.aiwg/AIWG.md`.',
100
+ FINALIZATION_END,
101
+ '',
102
+ ];
103
+ return lines.join('\n');
104
+ }
105
+ export function replaceOrAppendFinalizationBlock(content, block) {
106
+ const pattern = new RegExp(`${FINALIZATION_START.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}[\\s\\S]*?${FINALIZATION_END.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\n?`);
107
+ if (pattern.test(content)) {
108
+ return content.replace(pattern, block);
109
+ }
110
+ const trimmed = content.replace(/\s+$/, '');
111
+ return `${trimmed}\n\n${block}`;
112
+ }
113
+ export async function buildNormalizedAiwgMd(projectPath, existing = '') {
114
+ const block = await buildContextFinalizationBlock(projectPath);
115
+ const externalLinksSection = await buildExternalLinksSection(projectPath);
116
+ const base = existing.trim().length > 0
117
+ ? existing
118
+ : [
119
+ '# AIWG.md',
120
+ AIWG_SIGNATURE_COMMENT,
121
+ '<!-- Normalized project-local AIWG context. Operator notes may live outside AIWG-managed blocks. -->',
122
+ '',
123
+ 'This file is the stable `.aiwg/AIWG.md` entry point for AIWG skills, rules, and generated provider context.',
124
+ '',
125
+ ].join('\n');
126
+ const signed = base.includes(AIWG_SIGNATURE_COMMENT)
127
+ ? base
128
+ : base.replace(/^([^\n]*)(\n|$)/, `$1\n${AIWG_SIGNATURE_COMMENT}\n`);
129
+ const withFinalization = replaceOrAppendFinalizationBlock(signed, block);
130
+ return replaceOrAppendExternalLinksBlock(withFinalization, externalLinksSection);
131
+ }
132
+ export async function writeNormalizedAiwgMd(projectPath) {
133
+ const targetPath = projectAiwgPath(projectPath, 'AIWG.md');
134
+ let existing = '';
135
+ try {
136
+ existing = await fs.readFile(targetPath, 'utf8');
137
+ }
138
+ catch (err) {
139
+ if (err.code !== 'ENOENT')
140
+ throw err;
141
+ }
142
+ const content = await buildNormalizedAiwgMd(projectPath, existing);
143
+ await fs.mkdir(path.dirname(targetPath), { recursive: true });
144
+ await fs.writeFile(targetPath, content.endsWith('\n') ? content : `${content}\n`, 'utf8');
145
+ return targetPath;
146
+ }
147
+ //# sourceMappingURL=finalization.js.map