@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,113 @@
1
+ /**
2
+ * ClawHub Package Adapter
3
+ *
4
+ * Implements PackageRegistryAdapter for the `clawhub:` and `openclaw:` URI
5
+ * schemes, routing `aiwg install clawhub:<owner>/<name>` through the
6
+ * ClawHub REST API at clawhub.ai.
7
+ *
8
+ * The adapter fetches the package manifest and skill content via the API,
9
+ * writes the result into the standard AIWG cache layout, and returns the
10
+ * local cache path — matching the contract of all other adapters.
11
+ *
12
+ * Cache layout (shared with GitAdapter):
13
+ * ~/.cache/aiwg/packages/<owner>/<name>@<version>/
14
+ *
15
+ * @implements #803
16
+ * @see https://clawhub.ai
17
+ * @see https://docs.openclaw.ai/tools/clawhub
18
+ */
19
+ import { mkdir, writeFile } from 'fs/promises';
20
+ import { join } from 'path';
21
+ import { existsSync } from 'fs';
22
+ import { buildCachePath } from './git.js';
23
+ const CLAWHUB_API_BASE = 'https://clawhub.ai/api/v1';
24
+ /**
25
+ * Attempt a ClawHub API request, returning parsed JSON or null on failure.
26
+ */
27
+ async function clawHubFetch(endpoint) {
28
+ try {
29
+ const response = await fetch(`${CLAWHUB_API_BASE}${endpoint}`, {
30
+ headers: { Accept: 'application/json' },
31
+ signal: AbortSignal.timeout(30_000),
32
+ });
33
+ if (!response.ok)
34
+ return null;
35
+ return await response.json();
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ /**
42
+ * ClawHubPackageAdapter
43
+ *
44
+ * Handles "clawhub:owner/name[@version]" and "openclaw:owner/name[@version]"
45
+ * references in the install pipeline.
46
+ */
47
+ export class ClawHubPackageAdapter {
48
+ id = 'clawhub';
49
+ name = 'ClawHub Registry';
50
+ /**
51
+ * Matches the `clawhub:` and `openclaw:` URI schemes.
52
+ */
53
+ canResolve(ref) {
54
+ return ref.startsWith('clawhub:') || ref.startsWith('openclaw:');
55
+ }
56
+ /**
57
+ * Resolve a parsed PackageRef to a PackageSource.
58
+ *
59
+ * The `gitUrl` field is a canonical API URL (not a git remote) so the
60
+ * caller can store it in packages.yaml for display and re-install.
61
+ */
62
+ async resolve(ref) {
63
+ if (!ref.owner || !ref.name)
64
+ return null;
65
+ const apiUrl = `${CLAWHUB_API_BASE}/skills/${encodeURIComponent(ref.owner)}/${encodeURIComponent(ref.name)}`;
66
+ return {
67
+ gitUrl: apiUrl,
68
+ ref: ref.version,
69
+ label: `clawhub.ai/${ref.owner}/${ref.name}${ref.version ? `@${ref.version}` : ''}`,
70
+ };
71
+ }
72
+ /**
73
+ * Fetch the package from ClawHub and write it to the local cache.
74
+ *
75
+ * Skips the network request if the cache directory already exists and
76
+ * `options.refresh` is not set.
77
+ */
78
+ async fetch(source, options = {}) {
79
+ // Extract owner/name from the API URL stored in source.gitUrl
80
+ const urlMatch = source.gitUrl.match(/\/skills\/([^/]+)\/([^/]+)$/);
81
+ const owner = urlMatch ? decodeURIComponent(urlMatch[1]) : 'clawhub';
82
+ const name = urlMatch ? decodeURIComponent(urlMatch[2]) : 'package';
83
+ const version = source.ref ?? 'latest';
84
+ const cachePath = buildCachePath(owner, name, version);
85
+ // Return cached version unless refresh is requested
86
+ if (!options.refresh && existsSync(cachePath)) {
87
+ return cachePath;
88
+ }
89
+ // Fetch package content from ClawHub API
90
+ const downloadEndpoint = `/skills/${encodeURIComponent(owner)}/${encodeURIComponent(name)}/download`;
91
+ const apiResult = await clawHubFetch(downloadEndpoint);
92
+ if (!apiResult || !apiResult.content) {
93
+ throw new Error(`Could not fetch '${owner}/${name}' from ClawHub. ` +
94
+ `Ensure the package exists at https://clawhub.ai and the API is reachable. ` +
95
+ `(URL: ${CLAWHUB_API_BASE}${downloadEndpoint})`);
96
+ }
97
+ // Write content to cache
98
+ await mkdir(cachePath, { recursive: true });
99
+ const skillMdPath = join(cachePath, 'SKILL.md');
100
+ await writeFile(skillMdPath, apiResult.content, 'utf-8');
101
+ // Write a minimal manifest so detectManifestType can classify it
102
+ if (apiResult.manifest) {
103
+ const manifestPath = join(cachePath, 'manifest.json');
104
+ await writeFile(manifestPath, JSON.stringify(apiResult.manifest, null, 2) + '\n', 'utf-8');
105
+ }
106
+ return cachePath;
107
+ }
108
+ /** ClawHubPackageAdapter does not enumerate packages */
109
+ async list() {
110
+ return [];
111
+ }
112
+ }
113
+ //# sourceMappingURL=clawhub.js.map
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Git Adapter
3
+ *
4
+ * Base adapter for fetching packages from any Git URL.
5
+ * Handles clone to cache, pull for refresh, and version tag checkout.
6
+ *
7
+ * Cache layout:
8
+ * ~/.cache/aiwg/packages/<owner>/<name>@<version>/
9
+ *
10
+ * @implements #557
11
+ */
12
+ import { execFile } from 'child_process';
13
+ import { promisify } from 'util';
14
+ import { mkdir, readFile } from 'fs/promises';
15
+ import { join } from 'path';
16
+ import { homedir } from 'os';
17
+ import { existsSync } from 'fs';
18
+ const execFileAsync = promisify(execFile);
19
+ /**
20
+ * Default cache root
21
+ */
22
+ function getCacheRoot() {
23
+ const xdgCache = process.env.XDG_CACHE_HOME;
24
+ const base = xdgCache ? xdgCache : join(homedir(), '.cache');
25
+ return join(base, 'aiwg', 'packages');
26
+ }
27
+ /**
28
+ * Build cache path for a package at a specific version
29
+ */
30
+ export function buildCachePath(owner, name, version) {
31
+ const safe = version.replace(/[^a-zA-Z0-9._-]/g, '_');
32
+ return join(getCacheRoot(), owner, `${name}@${safe}`);
33
+ }
34
+ /**
35
+ * Run a git command, returning stdout
36
+ */
37
+ async function git(args, cwd) {
38
+ const env = { ...process.env };
39
+ // Suppress interactive prompts
40
+ env.GIT_TERMINAL_PROMPT = '0';
41
+ const { stdout } = await execFileAsync('git', args, {
42
+ cwd,
43
+ env,
44
+ timeout: 120_000,
45
+ });
46
+ return stdout.trim();
47
+ }
48
+ /**
49
+ * Detect the manifest type from a cloned package directory
50
+ */
51
+ async function detectManifestType(cachePath) {
52
+ const manifestPath = join(cachePath, 'manifest.json');
53
+ try {
54
+ const content = await readFile(manifestPath, 'utf-8');
55
+ const manifest = JSON.parse(content);
56
+ const t = manifest.type?.toLowerCase() ?? '';
57
+ if (t === 'framework')
58
+ return 'framework';
59
+ if (t === 'addon')
60
+ return 'addon';
61
+ if (t === 'extension')
62
+ return 'extension';
63
+ return 'unknown';
64
+ }
65
+ catch {
66
+ return 'unknown';
67
+ }
68
+ }
69
+ /**
70
+ * Resolve the latest tag from a remote git repo
71
+ */
72
+ async function resolveLatestTag(gitUrl) {
73
+ try {
74
+ const output = await git(['ls-remote', '--tags', '--sort=-v:refname', gitUrl]);
75
+ const firstLine = output.split('\n')[0] ?? '';
76
+ const match = firstLine.match(/refs\/tags\/(.+)/);
77
+ if (match && match[1])
78
+ return match[1].replace(/\^{}$/, '');
79
+ }
80
+ catch {
81
+ // fall through
82
+ }
83
+ return 'latest';
84
+ }
85
+ /**
86
+ * GitAdapter
87
+ *
88
+ * Handles any https:// or git@... URL directly.
89
+ * Also serves as the base class for Gitea/GitHub shorthand adapters.
90
+ */
91
+ export class GitAdapter {
92
+ id = 'git';
93
+ name = 'Git (direct URL)';
94
+ /**
95
+ * Returns true for https:// or git@/ssh:// URLs, or git+https:// URLs
96
+ */
97
+ canResolve(ref) {
98
+ return (ref.startsWith('https://') ||
99
+ ref.startsWith('http://') ||
100
+ ref.startsWith('git@') ||
101
+ ref.startsWith('ssh://') ||
102
+ ref.startsWith('git+https://'));
103
+ }
104
+ async resolve(ref) {
105
+ if (!ref.rawUrl)
106
+ return null;
107
+ return {
108
+ gitUrl: ref.rawUrl,
109
+ ref: ref.version,
110
+ label: ref.rawUrl,
111
+ };
112
+ }
113
+ async fetch(source, options = {}) {
114
+ // Determine version
115
+ let version = source.ref;
116
+ if (!version) {
117
+ version = await resolveLatestTag(source.gitUrl);
118
+ }
119
+ // Build cache key from URL
120
+ const urlKey = source.gitUrl
121
+ .replace(/^https?:\/\//, '')
122
+ .replace(/^git@/, '')
123
+ .replace(/\.git$/, '')
124
+ .replace(/[:/]/g, '_');
125
+ const parts = urlKey.split('_');
126
+ const name = parts[parts.length - 1] ?? 'package';
127
+ const owner = parts[parts.length - 2] ?? 'unknown';
128
+ const cachePath = buildCachePath(owner, name, version);
129
+ if (!options.refresh && existsSync(cachePath)) {
130
+ return cachePath;
131
+ }
132
+ await mkdir(cachePath, { recursive: true });
133
+ if (existsSync(join(cachePath, '.git'))) {
134
+ // Update existing clone
135
+ await git(['fetch', '--tags', '--prune'], cachePath);
136
+ }
137
+ else {
138
+ // Fresh clone (no --depth to get tags)
139
+ await git(['clone', source.gitUrl, cachePath]);
140
+ }
141
+ // Checkout requested ref
142
+ if (version && version !== 'latest') {
143
+ await git(['checkout', version], cachePath);
144
+ }
145
+ return cachePath;
146
+ }
147
+ /** GitAdapter does not list packages */
148
+ async list() {
149
+ return [];
150
+ }
151
+ }
152
+ export { detectManifestType };
153
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Gitea Adapter
3
+ *
4
+ * Resolves "owner/name[@version]" shorthands against the configured Gitea host.
5
+ * Falls back to git.integrolabs.net (the default self-hosted instance).
6
+ *
7
+ * Resolution priority:
8
+ * 1. AIWG_GITEA_HOST env var
9
+ * 2. ~/.aiwg/config.yaml → defaults.giteaHost
10
+ * 3. git.integrolabs.net (hardcoded fallback)
11
+ *
12
+ * Authentication:
13
+ * - SSH clone: uses default SSH agent (recommended for teams)
14
+ * - HTTPS clone: reads token from GITEA_TOKEN env or ~/.config/gitea/token
15
+ *
16
+ * @implements #557
17
+ */
18
+ import { existsSync } from 'fs';
19
+ import { readFile } from 'fs/promises';
20
+ import { join } from 'path';
21
+ import { homedir } from 'os';
22
+ import { GitAdapter } from './git.js';
23
+ /**
24
+ * Regex for "owner/name" or "owner/name@version" (no scheme prefix)
25
+ */
26
+ const GITEA_SHORTHAND = /^[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+(@[a-zA-Z0-9._/-]+)?$/;
27
+ /**
28
+ * Read Gitea token from standard file path (same as global CLAUDE.md convention)
29
+ */
30
+ async function readGiteaToken() {
31
+ if (process.env.GITEA_TOKEN)
32
+ return process.env.GITEA_TOKEN;
33
+ const tokenPaths = [
34
+ join(homedir(), '.config', 'gitea', 'token'),
35
+ join(homedir(), '.aiwg', 'credentials', 'gitea'),
36
+ ];
37
+ for (const p of tokenPaths) {
38
+ if (existsSync(p)) {
39
+ return (await readFile(p, 'utf-8')).trim();
40
+ }
41
+ }
42
+ return undefined;
43
+ }
44
+ /**
45
+ * Resolve the Gitea host
46
+ */
47
+ function resolveGiteaHost() {
48
+ if (process.env.AIWG_GITEA_HOST)
49
+ return process.env.AIWG_GITEA_HOST;
50
+ return 'git.integrolabs.net';
51
+ }
52
+ /**
53
+ * GiteaAdapter
54
+ *
55
+ * Handles "owner/repo[@version]" shorthands for the configured Gitea host.
56
+ */
57
+ export class GiteaAdapter extends GitAdapter {
58
+ id = 'gitea';
59
+ name = 'Gitea (shorthand)';
60
+ /**
61
+ * Matches "owner/repo" and "owner/repo@version" without a scheme prefix.
62
+ * Does not match "github:owner/repo" (handled by GitHubAdapter).
63
+ */
64
+ canResolve(ref) {
65
+ if (ref.includes(':'))
66
+ return false; // has scheme prefix → not gitea shorthand
67
+ return GITEA_SHORTHAND.test(ref);
68
+ }
69
+ async resolve(ref) {
70
+ if (!ref.owner || !ref.name)
71
+ return null;
72
+ const host = resolveGiteaHost();
73
+ const token = await readGiteaToken();
74
+ let gitUrl;
75
+ if (token) {
76
+ // HTTPS with token
77
+ gitUrl = `https://${token}@${host}/${ref.owner}/${ref.name}.git`;
78
+ }
79
+ else {
80
+ // SSH (relies on SSH agent)
81
+ gitUrl = `git@${host}:${ref.owner}/${ref.name}.git`;
82
+ }
83
+ return {
84
+ gitUrl,
85
+ ref: ref.version,
86
+ label: `${host}/${ref.owner}/${ref.name}${ref.version ? `@${ref.version}` : ''}`,
87
+ };
88
+ }
89
+ async fetch(source, options = {}) {
90
+ return super.fetch(source, options);
91
+ }
92
+ }
93
+ //# sourceMappingURL=gitea.js.map
@@ -0,0 +1,69 @@
1
+ /**
2
+ * GitHub Adapter
3
+ *
4
+ * Resolves "github:owner/name[@version]" shorthands against github.com.
5
+ *
6
+ * Authentication:
7
+ * - SSH clone: uses default SSH agent
8
+ * - HTTPS clone: reads token from GITHUB_TOKEN env or ~/.aiwg/credentials/github
9
+ *
10
+ * @implements #557
11
+ */
12
+ import { existsSync } from 'fs';
13
+ import { readFile } from 'fs/promises';
14
+ import { join } from 'path';
15
+ import { homedir } from 'os';
16
+ import { GitAdapter } from './git.js';
17
+ const GITHUB_HOST = 'github.com';
18
+ /**
19
+ * Read GitHub token from standard locations
20
+ */
21
+ async function readGitHubToken() {
22
+ if (process.env.GITHUB_TOKEN)
23
+ return process.env.GITHUB_TOKEN;
24
+ const tokenPaths = [
25
+ join(homedir(), '.aiwg', 'credentials', 'github'),
26
+ ];
27
+ for (const p of tokenPaths) {
28
+ if (existsSync(p)) {
29
+ return (await readFile(p, 'utf-8')).trim();
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ /**
35
+ * GitHubAdapter
36
+ *
37
+ * Handles "github:owner/repo[@version]" shorthands.
38
+ */
39
+ export class GitHubAdapter extends GitAdapter {
40
+ id = 'github';
41
+ name = 'GitHub (shorthand)';
42
+ /**
43
+ * Matches "github:owner/repo" and "github:owner/repo@version"
44
+ */
45
+ canResolve(ref) {
46
+ return ref.startsWith('github:');
47
+ }
48
+ async resolve(ref) {
49
+ if (!ref.owner || !ref.name)
50
+ return null;
51
+ const token = await readGitHubToken();
52
+ let gitUrl;
53
+ if (token) {
54
+ gitUrl = `https://${token}@${GITHUB_HOST}/${ref.owner}/${ref.name}.git`;
55
+ }
56
+ else {
57
+ gitUrl = `git@${GITHUB_HOST}:${ref.owner}/${ref.name}.git`;
58
+ }
59
+ return {
60
+ gitUrl,
61
+ ref: ref.version,
62
+ label: `github.com/${ref.owner}/${ref.name}${ref.version ? `@${ref.version}` : ''}`,
63
+ };
64
+ }
65
+ async fetch(source, options = {}) {
66
+ return super.fetch(source, options);
67
+ }
68
+ }
69
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Local Cache Adapter
3
+ *
4
+ * Lists and resolves packages already present in the local package cache
5
+ * (~/.cache/aiwg/packages/) and registered in ~/.aiwg/packages.yaml.
6
+ *
7
+ * Used by `aiwg use <name>` to check installed packages before falling back
8
+ * to the bundled npm package.
9
+ *
10
+ * @implements #557
11
+ */
12
+ import { existsSync } from 'fs';
13
+ import { listPackages } from '../package-registry.js';
14
+ /**
15
+ * LocalCacheAdapter
16
+ *
17
+ * Does not fetch — only resolves already-cached packages.
18
+ */
19
+ export class LocalCacheAdapter {
20
+ id = 'local-cache';
21
+ name = 'Local Package Cache';
22
+ /**
23
+ * Can resolve any ref that matches a key in the local registry.
24
+ * This is checked by the registry coordinator after parsing the ref,
25
+ * so canResolve is always false (resolution happens via list()).
26
+ */
27
+ canResolve(_ref) {
28
+ return false; // Only used via explicit lookup, not auto-resolution
29
+ }
30
+ async resolve(_ref) {
31
+ return null;
32
+ }
33
+ /**
34
+ * No-op — local cache adapter never fetches
35
+ */
36
+ async fetch(_source, _options) {
37
+ throw new Error('LocalCacheAdapter does not support fetch — use GitAdapter instead');
38
+ }
39
+ /**
40
+ * List all packages in the local registry
41
+ */
42
+ async list() {
43
+ return listPackages();
44
+ }
45
+ /**
46
+ * Look up a package by name (partial match on key or name component)
47
+ * Returns the PackageInfo if found and the cache path still exists.
48
+ */
49
+ async lookupByName(name) {
50
+ const packages = await listPackages();
51
+ // Exact key match first ("owner/name")
52
+ const exactKey = packages.find((p) => p.key === name);
53
+ if (exactKey)
54
+ return exactKey;
55
+ // Match by name component only
56
+ const byName = packages.find((p) => p.name === name);
57
+ if (byName)
58
+ return byName;
59
+ return undefined;
60
+ }
61
+ /**
62
+ * Look up cache path for a package by name.
63
+ * Returns the cache path if installed and present on disk.
64
+ */
65
+ async resolveCachePath(name) {
66
+ const { getPackageEntry } = await import('../package-registry.js');
67
+ const packages = await listPackages();
68
+ let key;
69
+ // Exact key match
70
+ if (packages.some((p) => p.key === name)) {
71
+ key = name;
72
+ }
73
+ else {
74
+ // Match by name component
75
+ const byName = packages.find((p) => p.name === name);
76
+ if (byName)
77
+ key = byName.key;
78
+ }
79
+ if (!key)
80
+ return undefined;
81
+ const entry = await getPackageEntry(key);
82
+ if (!entry)
83
+ return undefined;
84
+ if (!existsSync(entry.cachePath))
85
+ return undefined;
86
+ return entry.cachePath;
87
+ }
88
+ }
89
+ //# sourceMappingURL=local-cache.js.map
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Package Registry
3
+ *
4
+ * Manages ~/.aiwg/packages.yaml — the local registry of installed remote
5
+ * packages (frameworks, addons, extensions installed via `aiwg install`).
6
+ *
7
+ * @implements #557
8
+ */
9
+ import { readFile, writeFile, mkdir, access } from 'fs/promises';
10
+ import { resolve, join } from 'path';
11
+ import { homedir } from 'os';
12
+ import { existsSync } from 'fs';
13
+ import { stringify, parse } from 'yaml';
14
+ const PACKAGES_FILENAME = 'packages.yaml';
15
+ /**
16
+ * Empty registry template
17
+ */
18
+ function emptyRegistry() {
19
+ return {
20
+ apiVersion: 'aiwg.io/v1',
21
+ kind: 'PackageRegistry',
22
+ packages: {},
23
+ };
24
+ }
25
+ /**
26
+ * Resolve ~/.aiwg directory path using the same resolution logic as user-config
27
+ */
28
+ function resolveAiwgDir() {
29
+ // Respect explicit override
30
+ if (process.env.AIWG_CONFIG)
31
+ return process.env.AIWG_CONFIG;
32
+ const primary = join(homedir(), '.aiwg');
33
+ const xdg = join(homedir(), '.config', 'aiwg');
34
+ if (existsSync(primary))
35
+ return primary;
36
+ if (existsSync(xdg))
37
+ return xdg;
38
+ return primary; // default
39
+ }
40
+ /**
41
+ * Get the path to packages.yaml
42
+ */
43
+ export function getPackagesFilePath(configDir) {
44
+ const dir = configDir || resolveAiwgDir();
45
+ return resolve(dir, PACKAGES_FILENAME);
46
+ }
47
+ /**
48
+ * Read packages.yaml, returning an empty registry if the file does not exist
49
+ */
50
+ export async function readPackageRegistry(configDir) {
51
+ const filePath = getPackagesFilePath(configDir);
52
+ try {
53
+ await access(filePath);
54
+ }
55
+ catch {
56
+ return emptyRegistry();
57
+ }
58
+ const content = await readFile(filePath, 'utf-8');
59
+ const parsed = parse(content);
60
+ if (!parsed || typeof parsed !== 'object')
61
+ return emptyRegistry();
62
+ // Ensure packages map exists
63
+ if (!parsed.packages)
64
+ parsed.packages = {};
65
+ return parsed;
66
+ }
67
+ /**
68
+ * Write packages.yaml, creating ~/.aiwg/ if needed
69
+ */
70
+ export async function writePackageRegistry(registry, configDir) {
71
+ const dir = configDir || resolveAiwgDir();
72
+ await mkdir(dir, { recursive: true });
73
+ const filePath = resolve(dir, PACKAGES_FILENAME);
74
+ const content = stringify(registry, { lineWidth: 0 });
75
+ await writeFile(filePath, content, 'utf-8');
76
+ }
77
+ /**
78
+ * Get a single package entry by key (e.g. "roko/ring-methodology")
79
+ */
80
+ export async function getPackageEntry(key, configDir) {
81
+ const registry = await readPackageRegistry(configDir);
82
+ return registry.packages[key];
83
+ }
84
+ /**
85
+ * Upsert a package entry
86
+ */
87
+ export async function setPackageEntry(key, entry, configDir) {
88
+ const registry = await readPackageRegistry(configDir);
89
+ registry.packages[key] = entry;
90
+ await writePackageRegistry(registry, configDir);
91
+ }
92
+ /**
93
+ * Remove a package entry
94
+ */
95
+ export async function removePackageEntry(key, configDir) {
96
+ const registry = await readPackageRegistry(configDir);
97
+ if (!registry.packages[key])
98
+ return false;
99
+ delete registry.packages[key];
100
+ await writePackageRegistry(registry, configDir);
101
+ return true;
102
+ }
103
+ /**
104
+ * Record a deployment against an existing package entry
105
+ */
106
+ export async function recordDeployment(key, record, configDir) {
107
+ const registry = await readPackageRegistry(configDir);
108
+ const entry = registry.packages[key];
109
+ if (!entry)
110
+ return;
111
+ if (!entry.deployedTo)
112
+ entry.deployedTo = [];
113
+ // Replace existing record for the same project+provider
114
+ const idx = entry.deployedTo.findIndex((d) => d.projectPath === record.projectPath && d.provider === record.provider);
115
+ if (idx >= 0) {
116
+ entry.deployedTo[idx] = record;
117
+ }
118
+ else {
119
+ entry.deployedTo.push(record);
120
+ }
121
+ registry.packages[key] = entry;
122
+ await writePackageRegistry(registry, configDir);
123
+ }
124
+ /**
125
+ * List all installed packages as PackageInfo summaries
126
+ */
127
+ export async function listPackages(configDir) {
128
+ const registry = await readPackageRegistry(configDir);
129
+ return Object.entries(registry.packages).map(([key, entry]) => {
130
+ const parts = key.split('/');
131
+ return {
132
+ key,
133
+ name: parts.length > 1 ? parts.slice(1).join('/') : key,
134
+ owner: parts.length > 1 ? parts[0] : undefined,
135
+ version: entry.version,
136
+ type: entry.type,
137
+ source: entry.source,
138
+ installedAt: entry.installedAt,
139
+ deployCount: entry.deployedTo?.length ?? 0,
140
+ };
141
+ });
142
+ }
143
+ //# sourceMappingURL=package-registry.js.map