@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -1
  3. package/bin/aiwg.mjs +349 -0
  4. package/dist/src/a2a/agent-card.js +145 -0
  5. package/dist/src/a2a/client.js +411 -0
  6. package/dist/src/a2a/hitl-cli.js +171 -0
  7. package/dist/src/a2a/hitl-driver.js +370 -0
  8. package/dist/src/a2a/hitl.js +181 -0
  9. package/dist/src/a2a/http.js +193 -0
  10. package/dist/src/a2a/jcs.js +128 -0
  11. package/dist/src/a2a/jws.js +187 -0
  12. package/dist/src/a2a/types.js +24 -0
  13. package/dist/src/a2a/webhook.js +240 -0
  14. package/dist/src/activity-log/cli.js +348 -0
  15. package/dist/src/activity-log/parser.js +81 -0
  16. package/dist/src/activity-log/types.js +50 -0
  17. package/dist/src/agents/agent-deployer.js +367 -0
  18. package/dist/src/agents/agent-packager.js +271 -0
  19. package/dist/src/agents/agent-validator.js +271 -0
  20. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  21. package/dist/src/agents/grounding/types.js +12 -0
  22. package/dist/src/agents/index.js +10 -0
  23. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  24. package/dist/src/agents/types.js +7 -0
  25. package/dist/src/api/index.d.ts +10 -0
  26. package/dist/src/api/index.js +10 -0
  27. package/dist/src/artifacts/address-parser.js +73 -0
  28. package/dist/src/artifacts/audit/cli.js +183 -0
  29. package/dist/src/artifacts/audit/drift.js +122 -0
  30. package/dist/src/artifacts/audit/types.js +12 -0
  31. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  32. package/dist/src/artifacts/backends/json-backend.js +129 -0
  33. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  34. package/dist/src/artifacts/browser-export.js +622 -0
  35. package/dist/src/artifacts/capability-resolver.js +94 -0
  36. package/dist/src/artifacts/checksum-manifest.js +91 -0
  37. package/dist/src/artifacts/citation-parser.js +162 -0
  38. package/dist/src/artifacts/cli.js +1486 -0
  39. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  40. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  41. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  42. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  43. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  44. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  45. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  46. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  47. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  48. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  49. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  51. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  52. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  53. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  54. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  55. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  56. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  57. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  58. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  60. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  61. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  62. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  63. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  64. package/dist/src/artifacts/corpus-views/build.js +126 -0
  65. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  66. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  67. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  68. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  69. package/dist/src/artifacts/dep-graph.js +173 -0
  70. package/dist/src/artifacts/discover-facets.js +375 -0
  71. package/dist/src/artifacts/embedding-index.js +354 -0
  72. package/dist/src/artifacts/enrichment/cli.js +240 -0
  73. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  74. package/dist/src/artifacts/enrichment/store.js +90 -0
  75. package/dist/src/artifacts/enrichment/types.js +12 -0
  76. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  77. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  78. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  79. package/dist/src/artifacts/fulltext.js +108 -0
  80. package/dist/src/artifacts/graph-backend.js +51 -0
  81. package/dist/src/artifacts/graph-query.js +247 -0
  82. package/dist/src/artifacts/hybrid-query.js +225 -0
  83. package/dist/src/artifacts/index-builder.js +1089 -0
  84. package/dist/src/artifacts/index-reader.js +112 -0
  85. package/dist/src/artifacts/index-status.js +193 -0
  86. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  87. package/dist/src/artifacts/move.js +154 -0
  88. package/dist/src/artifacts/operational-state.js +239 -0
  89. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  90. package/dist/src/artifacts/query-engine.js +1955 -0
  91. package/dist/src/artifacts/source-graph.js +529 -0
  92. package/dist/src/artifacts/stats.js +169 -0
  93. package/dist/src/artifacts/types.js +606 -0
  94. package/dist/src/artifacts/views/cli.js +293 -0
  95. package/dist/src/artifacts/views/definition.js +170 -0
  96. package/dist/src/artifacts/views/store.js +149 -0
  97. package/dist/src/artifacts/views/types.js +8 -0
  98. package/dist/src/artifacts/watcher.js +255 -0
  99. package/dist/src/catalog/builtin-models.json +636 -0
  100. package/dist/src/catalog/cli.js +228 -0
  101. package/dist/src/catalog/cli.mjs +289 -0
  102. package/dist/src/catalog/index.js +15 -0
  103. package/dist/src/catalog/loader.js +217 -0
  104. package/dist/src/catalog/loader.mjs +251 -0
  105. package/dist/src/catalog/sources.json +41 -0
  106. package/dist/src/catalog/types.js +8 -0
  107. package/dist/src/channel/manager.mjs +504 -0
  108. package/dist/src/cli/agent-spawn.js +178 -0
  109. package/dist/src/cli/cli-extension-loader.js +245 -0
  110. package/dist/src/cli/command-log.js +275 -0
  111. package/dist/src/cli/config-loader.js +232 -0
  112. package/dist/src/cli/env.js +82 -0
  113. package/dist/src/cli/errors.js +150 -0
  114. package/dist/src/cli/find-package-root.js +40 -0
  115. package/dist/src/cli/git-hooks.js +250 -0
  116. package/dist/src/cli/handlers/agentcard.js +206 -0
  117. package/dist/src/cli/handlers/artifacts.js +76 -0
  118. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  119. package/dist/src/cli/handlers/cockpit.js +137 -0
  120. package/dist/src/cli/handlers/command-log.js +37 -0
  121. package/dist/src/cli/handlers/daemon.js +59 -0
  122. package/dist/src/cli/handlers/diagnose.js +300 -0
  123. package/dist/src/cli/handlers/execution-mode.js +105 -0
  124. package/dist/src/cli/handlers/feedback.js +341 -0
  125. package/dist/src/cli/handlers/help.js +147 -0
  126. package/dist/src/cli/handlers/index.js +302 -0
  127. package/dist/src/cli/handlers/init.js +179 -0
  128. package/dist/src/cli/handlers/install.js +129 -0
  129. package/dist/src/cli/handlers/issues.js +46 -0
  130. package/dist/src/cli/handlers/lint.js +42 -0
  131. package/dist/src/cli/handlers/local-executor.js +315 -0
  132. package/dist/src/cli/handlers/marketplace.js +168 -0
  133. package/dist/src/cli/handlers/mc.js +1010 -0
  134. package/dist/src/cli/handlers/models.js +352 -0
  135. package/dist/src/cli/handlers/packages.js +155 -0
  136. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  137. package/dist/src/cli/handlers/ralph.js +575 -0
  138. package/dist/src/cli/handlers/refresh.js +432 -0
  139. package/dist/src/cli/handlers/regenerate.js +336 -0
  140. package/dist/src/cli/handlers/repo-access.js +109 -0
  141. package/dist/src/cli/handlers/run.js +165 -0
  142. package/dist/src/cli/handlers/runtime-info.js +301 -0
  143. package/dist/src/cli/handlers/sandbox.js +197 -0
  144. package/dist/src/cli/handlers/scaffolding.js +149 -0
  145. package/dist/src/cli/handlers/script-runner.js +121 -0
  146. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  147. package/dist/src/cli/handlers/serve.js +1835 -0
  148. package/dist/src/cli/handlers/session.js +348 -0
  149. package/dist/src/cli/handlers/setup.js +440 -0
  150. package/dist/src/cli/handlers/skill-lint.js +367 -0
  151. package/dist/src/cli/handlers/skill-usage.js +74 -0
  152. package/dist/src/cli/handlers/steward.js +567 -0
  153. package/dist/src/cli/handlers/subcommands.js +1702 -0
  154. package/dist/src/cli/handlers/team.js +337 -0
  155. package/dist/src/cli/handlers/types.js +11 -0
  156. package/dist/src/cli/handlers/use.js +2772 -0
  157. package/dist/src/cli/handlers/utilities.js +703 -0
  158. package/dist/src/cli/handlers/version.js +134 -0
  159. package/dist/src/cli/handlers/workspace-context.js +93 -0
  160. package/dist/src/cli/handlers/workspace.js +126 -0
  161. package/dist/src/cli/help-generator.js +178 -0
  162. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  163. package/dist/src/cli/hooks/executor.js +96 -0
  164. package/dist/src/cli/hooks/index.js +15 -0
  165. package/dist/src/cli/hooks/registry.js +143 -0
  166. package/dist/src/cli/hooks/types.js +13 -0
  167. package/dist/src/cli/log.js +492 -0
  168. package/dist/src/cli/project-isolation/detect.js +70 -0
  169. package/dist/src/cli/project-isolation/index.js +7 -0
  170. package/dist/src/cli/project-isolation/signals.js +17 -0
  171. package/dist/src/cli/project-isolation/warning.js +102 -0
  172. package/dist/src/cli/prompt-utils.js +155 -0
  173. package/dist/src/cli/provider-deployment-plan.js +126 -0
  174. package/dist/src/cli/provider-resolution.js +119 -0
  175. package/dist/src/cli/router.js +305 -0
  176. package/dist/src/cli/scope-resolver.js +392 -0
  177. package/dist/src/cli/skill-usage.js +616 -0
  178. package/dist/src/cli/ui.js +224 -0
  179. package/dist/src/cli/watch-service.js +203 -0
  180. package/dist/src/cli/workflow-orchestrator.js +478 -0
  181. package/dist/src/cli/workspace-signals.js +321 -0
  182. package/dist/src/community/footer.js +14 -0
  183. package/dist/src/community/links.js +123 -0
  184. package/dist/src/community/milestones.js +46 -0
  185. package/dist/src/community/nudge-policy.js +93 -0
  186. package/dist/src/config/aiwg-config.js +883 -0
  187. package/dist/src/config/cli.js +703 -0
  188. package/dist/src/config/gitignore.js +156 -0
  189. package/dist/src/config/project-artifacts.js +76 -0
  190. package/dist/src/config/user-config.js +428 -0
  191. package/dist/src/config/user-registry.js +127 -0
  192. package/dist/src/config/workspace.js +276 -0
  193. package/dist/src/contributors/detect.js +39 -0
  194. package/dist/src/contributors/discover.js +172 -0
  195. package/dist/src/contributors/heuristic.js +186 -0
  196. package/dist/src/contributors/index.js +11 -0
  197. package/dist/src/contributors/types.js +13 -0
  198. package/dist/src/contributors/validation.js +116 -0
  199. package/dist/src/data/community.schema.json +43 -0
  200. package/dist/src/data/community.yaml +16 -0
  201. package/dist/src/extensions/capability-index.js +270 -0
  202. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  203. package/dist/src/extensions/commands/definitions.js +3485 -0
  204. package/dist/src/extensions/deployment-registration.js +463 -0
  205. package/dist/src/extensions/index.js +22 -0
  206. package/dist/src/extensions/loader.js +132 -0
  207. package/dist/src/extensions/managed-marker.js +100 -0
  208. package/dist/src/extensions/manifest.js +196 -0
  209. package/dist/src/extensions/project-local-activity.js +114 -0
  210. package/dist/src/extensions/project-local-discovery.js +261 -0
  211. package/dist/src/extensions/project-local-doctor.js +281 -0
  212. package/dist/src/extensions/project-local-gitignore.js +176 -0
  213. package/dist/src/extensions/project-local-paths.js +121 -0
  214. package/dist/src/extensions/project-local-promote.js +218 -0
  215. package/dist/src/extensions/project-local-remove.js +373 -0
  216. package/dist/src/extensions/project-local-scaffold.js +252 -0
  217. package/dist/src/extensions/project-quickref.js +291 -0
  218. package/dist/src/extensions/registry.js +368 -0
  219. package/dist/src/extensions/shadow-resolver.js +271 -0
  220. package/dist/src/extensions/types.js +86 -0
  221. package/dist/src/extensions/upstream-registry.js +195 -0
  222. package/dist/src/extensions/validation.js +631 -0
  223. package/dist/src/features/catalog.js +88 -0
  224. package/dist/src/features/cli.js +197 -0
  225. package/dist/src/features/installer.js +57 -0
  226. package/dist/src/features/paths.js +14 -0
  227. package/dist/src/features/runtime.js +21 -0
  228. package/dist/src/features/status.js +134 -0
  229. package/dist/src/hooks/laziness-detection.js +532 -0
  230. package/dist/src/intake/git-history-analyzer.js +486 -0
  231. package/dist/src/intake/index.js +9 -0
  232. package/dist/src/issues/cli.js +327 -0
  233. package/dist/src/issues/index.js +5 -0
  234. package/dist/src/issues/live.js +154 -0
  235. package/dist/src/issues/local.js +666 -0
  236. package/dist/src/issues/sync.js +143 -0
  237. package/dist/src/issues/types.js +2 -0
  238. package/dist/src/issues/workflows.js +164 -0
  239. package/dist/src/kb/cli.js +173 -0
  240. package/dist/src/lint/cli.js +171 -0
  241. package/dist/src/lint/loader.js +225 -0
  242. package/dist/src/lint/reporters.js +141 -0
  243. package/dist/src/lint/runner.js +364 -0
  244. package/dist/src/lint/types.js +10 -0
  245. package/dist/src/marketplace/cache.js +110 -0
  246. package/dist/src/marketplace/identifier.js +63 -0
  247. package/dist/src/marketplace/registry.js +36 -0
  248. package/dist/src/marketplace/sources/clawhub.js +53 -0
  249. package/dist/src/marketplace/sources/git.js +45 -0
  250. package/dist/src/marketplace/types.js +9 -0
  251. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  252. package/dist/src/mcp/cli.mjs +1197 -0
  253. package/dist/src/mcp/elicitation.mjs +149 -0
  254. package/dist/src/mcp/helpers.mjs +287 -0
  255. package/dist/src/mcp/index.mjs +11 -0
  256. package/dist/src/mcp/profiles.js +263 -0
  257. package/dist/src/mcp/profiles.mjs +360 -0
  258. package/dist/src/mcp/registry.js +376 -0
  259. package/dist/src/mcp/registry.mjs +387 -0
  260. package/dist/src/mcp/server.mjs +633 -0
  261. package/dist/src/mcp/test-simple.mjs +271 -0
  262. package/dist/src/mcp/tools/command-run.mjs +101 -0
  263. package/dist/src/mcp/tools/discovery.mjs +291 -0
  264. package/dist/src/mcp/tools/interaction.mjs +87 -0
  265. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  266. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  267. package/dist/src/memory/cli.js +166 -0
  268. package/dist/src/memory/project-registry.js +282 -0
  269. package/dist/src/metrics/artifact-metrics.js +184 -0
  270. package/dist/src/metrics/context-budget.js +174 -0
  271. package/dist/src/metrics/token-counter.js +133 -0
  272. package/dist/src/models/config-loader.js +228 -0
  273. package/dist/src/models/index.js +22 -0
  274. package/dist/src/models/model-capabilities.v1.json +120 -0
  275. package/dist/src/models/model-catalog.v1.json +96 -0
  276. package/dist/src/models/model-discovery.js +521 -0
  277. package/dist/src/models/provider-models.js +73 -0
  278. package/dist/src/models/provider-policy.js +273 -0
  279. package/dist/src/models/resolver.js +245 -0
  280. package/dist/src/models/router.js +70 -0
  281. package/dist/src/models/types.js +8 -0
  282. package/dist/src/models/wrapper-deployment.js +178 -0
  283. package/dist/src/models/wrapper-route.js +54 -0
  284. package/dist/src/ops/cli.js +268 -0
  285. package/dist/src/ops/registry.js +623 -0
  286. package/dist/src/packages/adapters/clawhub.js +113 -0
  287. package/dist/src/packages/adapters/git.js +153 -0
  288. package/dist/src/packages/adapters/gitea.js +93 -0
  289. package/dist/src/packages/adapters/github.js +69 -0
  290. package/dist/src/packages/adapters/local-cache.js +89 -0
  291. package/dist/src/packages/package-registry.js +143 -0
  292. package/dist/src/packages/registry.js +238 -0
  293. package/dist/src/packages/types.js +11 -0
  294. package/dist/src/plugin/cross-framework-ops.js +475 -0
  295. package/dist/src/plugin/framework-config-loader.js +235 -0
  296. package/dist/src/plugin/framework-detector.js +186 -0
  297. package/dist/src/plugin/framework-isolator.js +341 -0
  298. package/dist/src/plugin/framework-migration.js +371 -0
  299. package/dist/src/plugin/metadata-validator.js +906 -0
  300. package/dist/src/plugin/plugin-installer.js +436 -0
  301. package/dist/src/plugin/plugin-status.js +369 -0
  302. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  303. package/dist/src/plugin/registry-validator.js +344 -0
  304. package/dist/src/plugin/skill-command-translator.js +415 -0
  305. package/dist/src/plugin/workspace-creator.js +189 -0
  306. package/dist/src/plugin/workspace-migrator.js +821 -0
  307. package/dist/src/policy/authorization.js +390 -0
  308. package/dist/src/policy/repo-access.js +215 -0
  309. package/dist/src/provenance/cli.js +16 -0
  310. package/dist/src/providers/capability-matrix.js +300 -0
  311. package/dist/src/providers/capability-matrix.yaml +514 -0
  312. package/dist/src/providers/provider-definitions.js +977 -0
  313. package/dist/src/providers/provider-definitions.mjs +159 -0
  314. package/dist/src/providers/provider-inventory.js +169 -0
  315. package/dist/src/quality/feedback-ab.js +174 -0
  316. package/dist/src/quality/feedback-collector.js +176 -0
  317. package/dist/src/quality/feedback-tracker.js +123 -0
  318. package/dist/src/quality/patterns/adr.json +24 -0
  319. package/dist/src/quality/patterns/sad.json +24 -0
  320. package/dist/src/quality/patterns/test-plan.json +24 -0
  321. package/dist/src/quality/patterns/use-case.json +24 -0
  322. package/dist/src/quality/scoring.js +157 -0
  323. package/dist/src/reflections/cli.js +15 -0
  324. package/dist/src/release/plan.js +139 -0
  325. package/dist/src/research/cache/manager.js +227 -0
  326. package/dist/src/research/clients/arxiv.js +156 -0
  327. package/dist/src/research/clients/base.js +197 -0
  328. package/dist/src/research/clients/crossref.js +112 -0
  329. package/dist/src/research/clients/semantic-scholar.js +126 -0
  330. package/dist/src/research/clients/unpaywall.js +87 -0
  331. package/dist/src/research/index.js +14 -0
  332. package/dist/src/research/query-cli.js +336 -0
  333. package/dist/src/research/services/acquisition.js +313 -0
  334. package/dist/src/research/services/archival.js +225 -0
  335. package/dist/src/research/services/citation.js +279 -0
  336. package/dist/src/research/services/discovery.js +243 -0
  337. package/dist/src/research/services/documentation.js +269 -0
  338. package/dist/src/research/services/index.js +14 -0
  339. package/dist/src/research/services/provenance.js +279 -0
  340. package/dist/src/research/services/quality.js +370 -0
  341. package/dist/src/research/services/types.js +7 -0
  342. package/dist/src/research/storage-cli.js +20 -0
  343. package/dist/src/research/types.js +47 -0
  344. package/dist/src/resources/index.d.ts +2 -0
  345. package/dist/src/resources/index.js +2 -0
  346. package/dist/src/resources/web-release.d.ts +89 -0
  347. package/dist/src/resources/web-release.js +886 -0
  348. package/dist/src/rlm/cache/cli.js +162 -0
  349. package/dist/src/rlm/cache/hash.js +35 -0
  350. package/dist/src/rlm/cache/store.js +170 -0
  351. package/dist/src/rlm/cache/types.js +8 -0
  352. package/dist/src/rlm/cli.js +650 -0
  353. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  354. package/dist/src/serve/agent-router.js +205 -0
  355. package/dist/src/serve/dispatch-router.js +171 -0
  356. package/dist/src/serve/executor-registry.js +715 -0
  357. package/dist/src/serve/mission-conductor.js +177 -0
  358. package/dist/src/serve/orchestrator-adapter.js +113 -0
  359. package/dist/src/serve/orchestrator-override.js +94 -0
  360. package/dist/src/serve/orchestrator-pty.js +133 -0
  361. package/dist/src/serve/pty-bridge.js +799 -0
  362. package/dist/src/serve/sandbox-registry.js +832 -0
  363. package/dist/src/serve/screen-reader.js +228 -0
  364. package/dist/src/serve/stack-adapters.js +68 -0
  365. package/dist/src/serve/telemetry.js +143 -0
  366. package/dist/src/skills/adapters/clawhub.js +250 -0
  367. package/dist/src/skills/adapters/local.js +335 -0
  368. package/dist/src/skills/adapters/openclaw.js +316 -0
  369. package/dist/src/skills/cli.js +334 -0
  370. package/dist/src/skills/registry.js +117 -0
  371. package/dist/src/skills/run.js +259 -0
  372. package/dist/src/skills/runtime.js +94 -0
  373. package/dist/src/skills/types.js +10 -0
  374. package/dist/src/smiths/agentsmith/demo.js +116 -0
  375. package/dist/src/smiths/agentsmith/examples.js +300 -0
  376. package/dist/src/smiths/agentsmith/generator.js +503 -0
  377. package/dist/src/smiths/agentsmith/index.js +11 -0
  378. package/dist/src/smiths/agentsmith/types.js +8 -0
  379. package/dist/src/smiths/commandsmith/example.js +220 -0
  380. package/dist/src/smiths/commandsmith/generator.js +288 -0
  381. package/dist/src/smiths/commandsmith/index.js +41 -0
  382. package/dist/src/smiths/commandsmith/templates.js +296 -0
  383. package/dist/src/smiths/commandsmith/types.js +7 -0
  384. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  385. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  386. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  387. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  388. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  389. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  390. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  391. package/dist/src/smiths/context-pipeline/index.js +30 -0
  392. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  393. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  394. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  395. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  396. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  397. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  398. package/dist/src/smiths/context-pipeline/types.js +23 -0
  399. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  400. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  401. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  402. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  403. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  404. package/dist/src/smiths/hook-bridge/index.js +79 -0
  405. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  406. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  407. package/dist/src/smiths/hook-bridge/types.js +31 -0
  408. package/dist/src/smiths/index.js +39 -0
  409. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  410. package/dist/src/smiths/mcpsmith/example.js +119 -0
  411. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  412. package/dist/src/smiths/mcpsmith/index.js +17 -0
  413. package/dist/src/smiths/mcpsmith/types.js +10 -0
  414. package/dist/src/smiths/platform-paths.js +101 -0
  415. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  416. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  417. package/dist/src/smiths/skillsmith/demo.js +83 -0
  418. package/dist/src/smiths/skillsmith/examples.js +161 -0
  419. package/dist/src/smiths/skillsmith/generator.js +316 -0
  420. package/dist/src/smiths/skillsmith/index.js +12 -0
  421. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  422. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  423. package/dist/src/smiths/skillsmith/types.js +9 -0
  424. package/dist/src/smiths/toolsmith/index.js +10 -0
  425. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  426. package/dist/src/smiths/toolsmith/types.js +8 -0
  427. package/dist/src/storage/backends/fortemi.js +227 -0
  428. package/dist/src/storage/backends/fs.js +134 -0
  429. package/dist/src/storage/backends/logseq.js +309 -0
  430. package/dist/src/storage/backends/obsidian.js +233 -0
  431. package/dist/src/storage/cli.js +468 -0
  432. package/dist/src/storage/config.js +272 -0
  433. package/dist/src/storage/index.js +108 -0
  434. package/dist/src/storage/subsystem-cli.js +201 -0
  435. package/dist/src/storage/types.js +33 -0
  436. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  437. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  438. package/dist/src/testing/corpus/index.js +10 -0
  439. package/dist/src/testing/fixtures/index.js +9 -0
  440. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  441. package/dist/src/testing/generators/index.js +11 -0
  442. package/dist/src/testing/generators/test-case-generator.js +393 -0
  443. package/dist/src/testing/generators/test-code-generator.js +384 -0
  444. package/dist/src/testing/generators/use-case-parser.js +325 -0
  445. package/dist/src/testing/index.js +11 -0
  446. package/dist/src/tracker/capability-protocol.js +118 -0
  447. package/dist/src/update/checker.mjs +396 -0
  448. package/dist/src/update/notifier.mjs +235 -0
  449. package/dist/src/writing/content-diversifier.js +804 -0
  450. package/dist/src/writing/example-generator.js +959 -0
  451. package/dist/src/writing/example-templates.js +99 -0
  452. package/dist/src/writing/pattern-library.js +486 -0
  453. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  454. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  455. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  456. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  457. package/dist/src/writing/patterns/transition-words.json +1285 -0
  458. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  459. package/dist/src/writing/prompt-optimizer.js +660 -0
  460. package/dist/src/writing/prompt-templates.js +583 -0
  461. package/dist/src/writing/scoring-config-loader.js +168 -0
  462. package/dist/src/writing/validation-engine.js +595 -0
  463. package/dist/src/writing/validation-rules.js +380 -0
  464. package/dist/src/writing/voice-analyzer.js +439 -0
  465. package/dist/src/writing/voice-calibration.js +661 -0
  466. package/dist/src/writing/voice-profiles.json +588 -0
  467. package/package.json +65 -9
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Lint Command Handler
3
+ *
4
+ * Routes `aiwg lint` to the lint CLI module.
5
+ *
6
+ * @issue #810
7
+ */
8
+ import { handlerResultFromError } from '../errors.js';
9
+ /**
10
+ * Handler for lint command
11
+ *
12
+ * Lint AIWG-managed document sets against declarative rule sets.
13
+ *
14
+ * Usage:
15
+ * aiwg lint .aiwg/research/
16
+ * aiwg lint .aiwg/research/ --ruleset research
17
+ * aiwg lint --list-rulesets
18
+ * aiwg lint --list-rules research
19
+ * aiwg lint .aiwg/ --format json --ci --fail-on warn
20
+ * aiwg lint .aiwg/research/ --dry-run
21
+ */
22
+ export const lintHandler = {
23
+ id: 'lint',
24
+ name: 'Lint',
25
+ description: 'Lint AIWG artifacts against declarative rule sets',
26
+ category: 'utility',
27
+ aliases: ['-lint', '--lint'],
28
+ async execute(ctx) {
29
+ try {
30
+ const { main } = await import('../../lint/cli.js');
31
+ await main(ctx.args);
32
+ return {
33
+ exitCode: Number(process.exitCode) || 0,
34
+ };
35
+ }
36
+ catch (error) {
37
+ const result = handlerResultFromError(error);
38
+ return { ...result, message: `Lint command failed: ${result.message}` };
39
+ }
40
+ },
41
+ };
42
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Local Executor Handler
3
+ *
4
+ * Implements `aiwg local-executor serve` — boots a no-sandbox host-process
5
+ * executor as a conformance shim over DaemonSupervisor, then registers it
6
+ * with `aiwg serve` via the executor contract v1 handshake.
7
+ *
8
+ * Security note:
9
+ * This executor has `isolation:none`. Agent code runs directly in the host
10
+ * process under the same filesystem permissions as the operator. It inherits
11
+ * the Claude Code `--dangerously-skip-permissions` posture when invoked via
12
+ * the standard agent runner. Do not expose on non-loopback interfaces unless
13
+ * you understand the risk (see docs/local-executor-guide.md §Security).
14
+ *
15
+ * @issue #1181
16
+ * @see docs/contracts/executor.v1.md
17
+ * @see tools/ralph-external/executor-shim.mjs
18
+ */
19
+ import path from 'path';
20
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
21
+ import { randomUUID } from 'crypto';
22
+ import { projectAiwgPath } from '../../config/project-artifacts.js';
23
+ const DEFAULT_PORT = 8200;
24
+ const DEFAULT_BIND = '127.0.0.1';
25
+ const DEFAULT_AIWG_SERVE = 'http://127.0.0.1:7337';
26
+ /**
27
+ * Resolve or generate-once the executor identity.
28
+ * Written to `.aiwg/local-executor/identity.json` so restarts reuse the same
29
+ * UUID (token reclaim via identity store on the aiwg-serve side).
30
+ */
31
+ function resolveExecutorId(override) {
32
+ if (override)
33
+ return override;
34
+ const abs = projectAiwgPath(process.cwd(), 'local-executor', 'identity.json');
35
+ if (existsSync(abs)) {
36
+ try {
37
+ const raw = readFileSync(abs, 'utf-8');
38
+ const data = JSON.parse(raw);
39
+ if (data.executor_id)
40
+ return data.executor_id;
41
+ }
42
+ catch { /* fall through to generate */ }
43
+ }
44
+ const id = randomUUID();
45
+ try {
46
+ mkdirSync(path.dirname(abs), { recursive: true });
47
+ writeFileSync(abs, JSON.stringify({ executor_id: id, created_at: new Date().toISOString() }, null, 2), 'utf-8');
48
+ }
49
+ catch { /* non-fatal — use in-memory id */ }
50
+ return id;
51
+ }
52
+ /**
53
+ * Parse `aiwg local-executor serve` flags.
54
+ */
55
+ function parseLocalExecutorArgs(args) {
56
+ let port = DEFAULT_PORT;
57
+ let bind = DEFAULT_BIND;
58
+ let aiwgServe = process.env['AIWG_SERVE_ENDPOINT'] ?? DEFAULT_AIWG_SERVE;
59
+ let maxConcurrency = 4;
60
+ let executorIdFlag;
61
+ for (let i = 0; i < args.length; i++) {
62
+ const arg = args[i];
63
+ if ((arg === '--port' || arg === '-p') && args[i + 1]) {
64
+ const parsed = parseInt(args[i + 1], 10);
65
+ if (!isNaN(parsed))
66
+ port = parsed;
67
+ i++;
68
+ }
69
+ else if (arg === '--bind' && args[i + 1]) {
70
+ bind = args[i + 1];
71
+ i++;
72
+ }
73
+ else if (arg === '--aiwg-serve' && args[i + 1]) {
74
+ aiwgServe = args[i + 1];
75
+ i++;
76
+ }
77
+ else if (arg === '--max-concurrency' && args[i + 1]) {
78
+ const n = parseInt(args[i + 1], 10);
79
+ if (!isNaN(n) && n > 0)
80
+ maxConcurrency = n;
81
+ i++;
82
+ }
83
+ else if (arg === '--executor-id' && args[i + 1]) {
84
+ executorIdFlag = args[i + 1];
85
+ i++;
86
+ }
87
+ }
88
+ return {
89
+ port,
90
+ bind,
91
+ aiwgServe,
92
+ maxConcurrency,
93
+ executorId: resolveExecutorId(executorIdFlag),
94
+ };
95
+ }
96
+ /**
97
+ * Emit a warning when the executor binds on a non-loopback interface.
98
+ */
99
+ function warnIfNonLoopback(bind) {
100
+ const loopbackAddrs = new Set(['127.0.0.1', '::1', 'localhost']);
101
+ if (!loopbackAddrs.has(bind)) {
102
+ console.warn('[local-executor] WARNING: binding on non-loopback interface ' + bind + '.\n' +
103
+ ' This executor has isolation:none — agent code runs in the host process.\n' +
104
+ ' Ensure this interface is not reachable by untrusted parties.\n' +
105
+ ' The executor token will be rotated by aiwg-serve on first non-loopback register.');
106
+ }
107
+ }
108
+ /**
109
+ * `aiwg local-executor serve` handler.
110
+ *
111
+ * Boots a DaemonSupervisor + ExecutorShim, registers with aiwg-serve,
112
+ * then keeps the process alive until SIGINT/SIGTERM.
113
+ */
114
+ export const localExecutorServeHandler = {
115
+ id: 'local-executor-serve',
116
+ name: 'Local Executor Serve',
117
+ description: 'Start the local no-sandbox executor (isolation:none, Core+HITL conformance)',
118
+ category: 'project',
119
+ aliases: [],
120
+ async execute(ctx) {
121
+ // The subcommand is: `aiwg local-executor serve [flags]`
122
+ // ctx.args[0] === 'serve' (consumed by router) or flags directly
123
+ const flagArgs = ctx.args[0] === 'serve' ? ctx.args.slice(1) : ctx.args;
124
+ const opts = parseLocalExecutorArgs(flagArgs);
125
+ warnIfNonLoopback(opts.bind);
126
+ // ── Dynamic imports (same pattern as serve.ts) ──────────────────────────
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ let ExecutorShim;
129
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
+ let startExecutorServer;
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ let DaemonSupervisor;
133
+ try {
134
+ const shimMod = await (new Function('m', 'return import(m)'))(path.join(ctx.frameworkRoot, 'tools', 'ralph-external', 'executor-shim.mjs'));
135
+ ExecutorShim = shimMod.ExecutorShim;
136
+ startExecutorServer = shimMod.startExecutorServer;
137
+ }
138
+ catch (err) {
139
+ return {
140
+ message: `Failed to load executor-shim: ${err.message}`,
141
+ exitCode: 1,
142
+ };
143
+ }
144
+ try {
145
+ const dsMod = await (new Function('m', 'return import(m)'))(path.join(ctx.frameworkRoot, 'tools', 'ralph-external', 'daemon-supervisor.mjs'));
146
+ DaemonSupervisor = dsMod.DaemonSupervisor;
147
+ }
148
+ catch (err) {
149
+ return {
150
+ message: `Failed to load DaemonSupervisor: ${err.message}`,
151
+ exitCode: 1,
152
+ };
153
+ }
154
+ // AgentSupervisor is optional — shim works without it but task execution
155
+ // requires it. Try loading from ralph-external/orchestrator.mjs.
156
+ let agentSupervisorInstance = null;
157
+ try {
158
+ const orchMod = await (new Function('m', 'return import(m)'))(path.join(ctx.frameworkRoot, 'tools', 'ralph-external', 'orchestrator.mjs'));
159
+ const OrchClass = orchMod.Orchestrator ?? orchMod.default;
160
+ if (OrchClass) {
161
+ const orch = new OrchClass({ maxConcurrent: opts.maxConcurrency });
162
+ agentSupervisorInstance = orch.agentSupervisor ?? orch;
163
+ }
164
+ }
165
+ catch { /* orchestrator optional */ }
166
+ // Minimal stub if no real agent supervisor is available (allows shim to
167
+ // boot for conformance testing without a real Claude/Codex install)
168
+ if (!agentSupervisorInstance) {
169
+ const { EventEmitter } = await import('events');
170
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
+ const stub = new (class StubAgentSupervisor extends EventEmitter {
172
+ tasks = new Map();
173
+ counter = 0;
174
+ submit(prompt, options = {}) {
175
+ const id = `task-${++this.counter}`;
176
+ this.tasks.set(id, { id, prompt, ...options });
177
+ // Simulate async start
178
+ queueMicrotask(() => {
179
+ this.emit('task:started', { taskId: id, pid: 50000 + this.counter });
180
+ });
181
+ return { id };
182
+ }
183
+ cancel(taskId) {
184
+ if (this.tasks.has(taskId)) {
185
+ this.tasks.delete(taskId);
186
+ this.emit('task:cancelled', { taskId });
187
+ return true;
188
+ }
189
+ return false;
190
+ }
191
+ async shutdown() { this.tasks.clear(); }
192
+ })();
193
+ agentSupervisorInstance = stub;
194
+ }
195
+ // Build supervisor + shim
196
+ const supervisor = new DaemonSupervisor({
197
+ agentSupervisor: agentSupervisorInstance,
198
+ maxConcurrent: opts.maxConcurrency,
199
+ });
200
+ const restBase = `http://${opts.bind}:${opts.port}`;
201
+ const wsBase = `ws://${opts.bind}:${opts.port}`;
202
+ const shim = new ExecutorShim({
203
+ supervisor,
204
+ executorId: opts.executorId,
205
+ name: 'aiwg-local-executor',
206
+ version: '1.0.0',
207
+ restBase,
208
+ wsBase,
209
+ aiwgServeUrl: opts.aiwgServe,
210
+ });
211
+ // Register with aiwg-serve
212
+ let token;
213
+ try {
214
+ token = await shim.register();
215
+ }
216
+ catch (err) {
217
+ return {
218
+ message: `Failed to register with aiwg-serve at ${opts.aiwgServe}: ${err.message}\n` +
219
+ 'Is aiwg serve running? Start it with: aiwg serve --no-open',
220
+ exitCode: 1,
221
+ };
222
+ }
223
+ // Start the executor's own HTTP+WS server
224
+ let server;
225
+ try {
226
+ server = await startExecutorServer(shim, {
227
+ port: opts.port,
228
+ bind: opts.bind,
229
+ token,
230
+ });
231
+ }
232
+ catch (err) {
233
+ await shim.deregister();
234
+ return {
235
+ message: `Failed to start executor server: ${err.message}`,
236
+ exitCode: 1,
237
+ };
238
+ }
239
+ console.log(`Local executor: ${server.url}`);
240
+ console.log(`Registered with: ${opts.aiwgServe}`);
241
+ console.log(`Executor ID: ${opts.executorId}`);
242
+ console.log(`Max concurrency: ${opts.maxConcurrency}`);
243
+ console.log('Press Ctrl+C to stop.');
244
+ // Status ticker — log active mission count every 30 s
245
+ const ticker = setInterval(() => {
246
+ const st = supervisor.status();
247
+ console.log(`[local-executor] running=${st.concurrencyUsed}/${st.concurrencyMax} ` +
248
+ `queued=${st.queueDepth} circuit=${st.circuitState?.state ?? 'ok'}`);
249
+ }, 30_000);
250
+ // Keep alive until SIGINT/SIGTERM
251
+ await new Promise((resolve) => {
252
+ let settled = false;
253
+ const cleanup = async (signal) => {
254
+ if (settled)
255
+ return;
256
+ settled = true;
257
+ clearInterval(ticker);
258
+ console.log(`\n[local-executor] ${signal} received — shutting down…`);
259
+ try {
260
+ await shim.shutdown();
261
+ }
262
+ catch { /* ignore */ }
263
+ try {
264
+ server.close();
265
+ }
266
+ catch { /* ignore */ }
267
+ try {
268
+ await supervisor.shutdown(5_000);
269
+ }
270
+ catch { /* ignore */ }
271
+ resolve();
272
+ };
273
+ process.once('SIGINT', () => { void cleanup('SIGINT'); });
274
+ process.once('SIGTERM', () => { void cleanup('SIGTERM'); });
275
+ });
276
+ return { exitCode: 0, message: 'Local executor stopped.' };
277
+ },
278
+ };
279
+ /**
280
+ * Top-level `aiwg local-executor` handler.
281
+ * Dispatches to subcommands (currently only `serve`).
282
+ */
283
+ export const localExecutorHandler = {
284
+ id: 'local-executor',
285
+ name: 'Local Executor',
286
+ description: 'Manage the local no-sandbox executor (aiwg local-executor serve)',
287
+ category: 'project',
288
+ aliases: [],
289
+ async execute(ctx) {
290
+ const [subcommand, ...rest] = ctx.args;
291
+ if (!subcommand || subcommand === 'serve') {
292
+ const innerCtx = { ...ctx, args: ['serve', ...rest] };
293
+ return localExecutorServeHandler.execute(innerCtx);
294
+ }
295
+ if (subcommand === '--help' || subcommand === 'help') {
296
+ console.log('Usage: aiwg local-executor serve [flags]\n' +
297
+ '\n' +
298
+ 'Flags:\n' +
299
+ ' --port <n> Bind port (default: 8200)\n' +
300
+ ' --bind <host> Bind interface (default: 127.0.0.1)\n' +
301
+ ' --aiwg-serve <url> Registration target (default: http://127.0.0.1:7337)\n' +
302
+ ' --max-concurrency <n> Max concurrent missions (default: 4)\n' +
303
+ ' --executor-id <uuid> Override stable executor ID\n' +
304
+ '\n' +
305
+ 'Environment:\n' +
306
+ ' AIWG_SERVE_ENDPOINT Override --aiwg-serve default\n');
307
+ return { exitCode: 0 };
308
+ }
309
+ return {
310
+ message: `Unknown subcommand: ${subcommand}. Run \`aiwg local-executor help\` for usage.`,
311
+ exitCode: 1,
312
+ };
313
+ },
314
+ };
315
+ //# sourceMappingURL=local-executor.js.map
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Marketplace Command Handler
3
+ *
4
+ * Implements `aiwg marketplace <subcommand>` for discovering and listing
5
+ * packages across all configured marketplace sources (local, ClawHub,
6
+ * OpenClaw, etc.).
7
+ *
8
+ * Subcommands:
9
+ * search <query> Fan-out search to all adapters, display with source attribution
10
+ * list List installed marketplace packages
11
+ *
12
+ * Flags:
13
+ * --source <id> Limit to a single adapter (e.g. clawhub, openclaw, local)
14
+ * --json Emit structured JSON for programmatic use
15
+ *
16
+ * @implements #805
17
+ */
18
+ import { searchSkills } from '../../skills/registry.js';
19
+ import { listInstalledPackages } from '../../packages/registry.js';
20
+ import * as ui from '../ui.js';
21
+ // ── Usage string ───────────────────────────────────────────────────────────
22
+ const USAGE = [
23
+ 'Usage:',
24
+ ' aiwg marketplace search <query> Search across all marketplace sources',
25
+ ' aiwg marketplace list List installed marketplace packages',
26
+ '',
27
+ 'Flags:',
28
+ ' --source <id> Limit search to a specific source (clawhub, openclaw, local)',
29
+ ' --json Output structured JSON',
30
+ '',
31
+ 'Examples:',
32
+ ' aiwg marketplace search parallel-dispatch',
33
+ ' aiwg marketplace search auth --source clawhub',
34
+ ' aiwg marketplace search auth --json',
35
+ ' aiwg marketplace list',
36
+ ' aiwg marketplace list --json',
37
+ ].join('\n');
38
+ // ── Flag helpers ───────────────────────────────────────────────────────────
39
+ function parseFlag(args, flag) {
40
+ const idx = args.indexOf(flag);
41
+ if (idx === -1 || idx + 1 >= args.length)
42
+ return undefined;
43
+ return args[idx + 1];
44
+ }
45
+ function hasFlag(args, flag) {
46
+ return args.includes(flag);
47
+ }
48
+ // ── Handler ────────────────────────────────────────────────────────────────
49
+ export const marketplaceHandler = {
50
+ id: 'marketplace',
51
+ name: 'Marketplace',
52
+ description: 'Search and manage marketplace packages (search, list)',
53
+ category: 'framework',
54
+ aliases: ['market'],
55
+ async execute(ctx) {
56
+ const subcommand = ctx.args[0];
57
+ if (!subcommand) {
58
+ return { exitCode: 0, message: USAGE };
59
+ }
60
+ if (subcommand === 'search') {
61
+ return handleSearch(ctx);
62
+ }
63
+ if (subcommand === 'list') {
64
+ return handleList(ctx);
65
+ }
66
+ return {
67
+ exitCode: 1,
68
+ message: `Error: Unknown subcommand '${subcommand}'\n\n${USAGE}`,
69
+ };
70
+ },
71
+ };
72
+ // ── Search ─────────────────────────────────────────────────────────────────
73
+ async function handleSearch(ctx) {
74
+ // First positional arg after 'search' that isn't a flag value
75
+ const query = ctx.args[1];
76
+ if (!query || query.startsWith('--')) {
77
+ return {
78
+ exitCode: 1,
79
+ message: 'Error: Query required\n\nUsage: aiwg marketplace search <query>',
80
+ };
81
+ }
82
+ const source = parseFlag(ctx.args, '--source');
83
+ const jsonMode = hasFlag(ctx.args, '--json');
84
+ const results = await searchSkills(query, source);
85
+ if (jsonMode) {
86
+ console.log(JSON.stringify(results, null, 2));
87
+ return { exitCode: 0 };
88
+ }
89
+ ui.blank();
90
+ console.log(` ${ui.brandMark()} ${ui.bold(`Marketplace Search: "${query}"`)}`);
91
+ if (source) {
92
+ ui.dim(` Source: ${source}`);
93
+ }
94
+ ui.rule();
95
+ if (results.length === 0) {
96
+ ui.dim(' No results found.');
97
+ ui.blank();
98
+ ui.dim(' Try a broader query or a different source.');
99
+ ui.blank();
100
+ return { exitCode: 0 };
101
+ }
102
+ // Column widths
103
+ const nameWidth = Math.max(12, ...results.map((r) => r.name.length));
104
+ const sourceWidth = Math.max(8, ...results.map((r) => r.source.length));
105
+ const pkgWidth = Math.max(10, ...results.map((r) => (r.package ?? '').length));
106
+ const header = [
107
+ 'Name'.padEnd(nameWidth),
108
+ 'Source'.padEnd(sourceWidth),
109
+ 'Package'.padEnd(pkgWidth),
110
+ 'Description',
111
+ ].join(' ');
112
+ ui.dim(` ${header}`);
113
+ ui.dim(` ${'─'.repeat(header.length)}`);
114
+ for (const r of results) {
115
+ const row = [
116
+ r.name.padEnd(nameWidth),
117
+ r.source.padEnd(sourceWidth),
118
+ (r.package ?? '').padEnd(pkgWidth),
119
+ r.description.length > 60 ? r.description.slice(0, 57) + '...' : r.description,
120
+ ].join(' ');
121
+ console.log(` ${row}`);
122
+ }
123
+ ui.blank();
124
+ ui.dim(` ${results.length} result${results.length !== 1 ? 's' : ''}`);
125
+ ui.blank();
126
+ return { exitCode: 0 };
127
+ }
128
+ // ── List ───────────────────────────────────────────────────────────────────
129
+ async function handleList(ctx) {
130
+ const jsonMode = hasFlag(ctx.args, '--json');
131
+ const packages = await listInstalledPackages();
132
+ if (jsonMode) {
133
+ console.log(JSON.stringify(packages, null, 2));
134
+ return { exitCode: 0 };
135
+ }
136
+ ui.blank();
137
+ console.log(` ${ui.brandMark()} ${ui.bold('Installed Marketplace Packages')}`);
138
+ ui.rule();
139
+ if (packages.length === 0) {
140
+ ui.dim(' No packages installed.');
141
+ ui.blank();
142
+ ui.dim(' Install a package: aiwg install owner/name');
143
+ ui.blank();
144
+ return { exitCode: 0 };
145
+ }
146
+ const keyWidth = Math.max(12, ...packages.map((p) => p.key.length));
147
+ const versionWidth = Math.max(7, ...packages.map((p) => p.version.length));
148
+ const header = [
149
+ 'Package'.padEnd(keyWidth),
150
+ 'Version'.padEnd(versionWidth),
151
+ 'Type',
152
+ ].join(' ');
153
+ ui.dim(` ${header}`);
154
+ ui.dim(` ${'─'.repeat(header.length)}`);
155
+ for (const pkg of packages) {
156
+ const row = [
157
+ pkg.key.padEnd(keyWidth),
158
+ pkg.version.padEnd(versionWidth),
159
+ pkg.type,
160
+ ].join(' ');
161
+ console.log(` ${row}`);
162
+ }
163
+ ui.blank();
164
+ ui.dim(` ${packages.length} package${packages.length !== 1 ? 's' : ''} installed`);
165
+ ui.blank();
166
+ return { exitCode: 0 };
167
+ }
168
+ //# sourceMappingURL=marketplace.js.map