@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,710 @@
1
+ /**
2
+ * Runtime Discovery Module for Toolsmith
3
+ *
4
+ * Discovers installed tools, verifies functionality, and generates runtime catalog.
5
+ *
6
+ * @architecture @.aiwg/architecture/decisions/ADR-014-toolsmith-feature-architecture.md
7
+ * @architecture @.aiwg/architecture/toolsmith-implementation-spec.md
8
+ */
9
+
10
+ import { execSync } from 'child_process';
11
+ import { readFile, writeFile, mkdir, access } from 'fs/promises';
12
+ import { existsSync, constants } from 'fs';
13
+ import { resolve, join, dirname } from 'path';
14
+ import { platform, arch, homedir, tmpdir, cpus, totalmem, freemem } from 'os';
15
+ import { fileURLToPath } from 'url';
16
+
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+
20
+ /**
21
+ * RuntimeDiscovery - Discovers and catalogs installed system tools
22
+ */
23
+ export class RuntimeDiscovery {
24
+ constructor(basePath = null) {
25
+ this.basePath = basePath || resolve(process.cwd(), '.aiwg/smiths/toolsmith');
26
+ this.knownTools = this.#loadKnownTools();
27
+ }
28
+
29
+ /**
30
+ * Perform full discovery scan
31
+ * @returns {Promise<Object>} RuntimeCatalog
32
+ */
33
+ async discover() {
34
+ console.log('Starting runtime discovery...');
35
+
36
+ const environment = await this.getEnvironment();
37
+ const resources = await this.getResources();
38
+ const tools = await this.#discoverTools();
39
+
40
+ const catalog = {
41
+ $schema: 'https://aiwg.io/schemas/toolsmith/runtime-catalog-v1.json',
42
+ version: '1.0',
43
+ generated: new Date().toISOString(),
44
+ environment,
45
+ resources,
46
+ tools: tools.available,
47
+ unavailable: tools.unavailable
48
+ };
49
+
50
+ // Write catalog
51
+ await this.#writeCatalog(catalog);
52
+ await this.#writeRuntimeInfo(catalog);
53
+
54
+ console.log(`Discovery complete: ${catalog.tools.length} tools found`);
55
+ return catalog;
56
+ }
57
+
58
+ /**
59
+ * Verify existing catalog is still accurate
60
+ * @returns {Promise<Object>} VerificationResult
61
+ */
62
+ async verify() {
63
+ const catalog = await this.#loadCatalog();
64
+
65
+ if (!catalog) {
66
+ throw new Error('No catalog found. Run discovery first.');
67
+ }
68
+
69
+ const results = {
70
+ valid: 0,
71
+ total: catalog.tools.length,
72
+ failed: [],
73
+ timestamp: new Date().toISOString()
74
+ };
75
+
76
+ for (const tool of catalog.tools) {
77
+ const check = await this.checkTool(tool.id);
78
+
79
+ if (check.available && check.version === tool.version) {
80
+ results.valid++;
81
+ } else {
82
+ results.failed.push(tool);
83
+ }
84
+ }
85
+
86
+ return results;
87
+ }
88
+
89
+ /**
90
+ * Check a specific tool
91
+ * @param {string} toolName
92
+ * @returns {Promise<Object>} ToolCheckResult
93
+ */
94
+ async checkTool(toolName) {
95
+ const toolPath = await this.#findToolPath(toolName);
96
+
97
+ if (!toolPath) {
98
+ return {
99
+ id: toolName,
100
+ available: false,
101
+ installHint: this.#getInstallHint(toolName)
102
+ };
103
+ }
104
+
105
+ const version = await this.#detectToolVersion(toolName, toolPath);
106
+
107
+ return {
108
+ id: toolName,
109
+ available: true,
110
+ version,
111
+ path: toolPath,
112
+ status: 'verified',
113
+ lastVerified: new Date().toISOString()
114
+ };
115
+ }
116
+
117
+ /**
118
+ * Get environment information
119
+ * @returns {Promise<Object>} EnvironmentInfo
120
+ */
121
+ async getEnvironment() {
122
+ const os = platform();
123
+ let osVersion = 'Unknown';
124
+
125
+ try {
126
+ if (os === 'linux') {
127
+ // Check for WSL
128
+ if (existsSync('/proc/version')) {
129
+ const version = await readFile('/proc/version', 'utf-8');
130
+ if (version.includes('microsoft') || version.includes('WSL')) {
131
+ osVersion = 'WSL';
132
+ } else {
133
+ // Try to get Linux distribution info
134
+ if (existsSync('/etc/os-release')) {
135
+ const osRelease = await readFile('/etc/os-release', 'utf-8');
136
+ const match = osRelease.match(/PRETTY_NAME="([^"]+)"/);
137
+ if (match) osVersion = match[1];
138
+ }
139
+ }
140
+ }
141
+ } else if (os === 'darwin') {
142
+ const version = execSync('sw_vers -productVersion', { encoding: 'utf-8' }).trim();
143
+ osVersion = `macOS ${version}`;
144
+ } else if (os === 'win32') {
145
+ osVersion = execSync('ver', { encoding: 'utf-8' }).trim();
146
+ }
147
+ } catch (error) {
148
+ console.warn('Could not detect OS version:', error.message);
149
+ }
150
+
151
+ return {
152
+ os,
153
+ osVersion,
154
+ arch: arch(),
155
+ shell: process.env.SHELL || process.env.ComSpec || '/bin/sh',
156
+ homeDir: homedir(),
157
+ workingDir: process.cwd()
158
+ };
159
+ }
160
+
161
+ /**
162
+ * Get resource information (disk, memory, cpu)
163
+ * @returns {Promise<Object>} ResourceInfo
164
+ */
165
+ async getResources() {
166
+ let diskFreeGb = 0;
167
+ let memoryTotalGb = 0;
168
+ let memoryAvailableGb = 0;
169
+
170
+ try {
171
+ // Disk space
172
+ if (platform() === 'win32') {
173
+ // Windows: use wmic
174
+ const output = execSync('wmic logicaldisk get size,freespace', { encoding: 'utf-8' });
175
+ const lines = output.trim().split('\n').slice(1);
176
+ let totalFree = 0;
177
+ for (const line of lines) {
178
+ const parts = line.trim().split(/\s+/);
179
+ if (parts.length >= 2) {
180
+ totalFree += parseInt(parts[0]) || 0;
181
+ }
182
+ }
183
+ diskFreeGb = Math.round((totalFree / (1024 ** 3)) * 10) / 10;
184
+ } else {
185
+ // Unix: use df
186
+ const output = execSync('df -k .', { encoding: 'utf-8' });
187
+ const lines = output.trim().split('\n');
188
+ if (lines.length > 1) {
189
+ const parts = lines[1].trim().split(/\s+/);
190
+ const availableKb = parseInt(parts[3]) || 0;
191
+ diskFreeGb = Math.round((availableKb / (1024 ** 2)) * 10) / 10;
192
+ }
193
+ }
194
+
195
+ // Memory (from os module)
196
+ const totalMem = totalmem();
197
+ const freeMem = freemem();
198
+ memoryTotalGb = Math.round((totalMem / (1024 ** 3)) * 10) / 10;
199
+ memoryAvailableGb = Math.round((freeMem / (1024 ** 3)) * 10) / 10;
200
+ } catch (error) {
201
+ console.warn('Could not get resource info:', error.message);
202
+ }
203
+
204
+ return {
205
+ diskFreeGb,
206
+ memoryTotalGb,
207
+ memoryAvailableGb,
208
+ cpuCores: cpus().length
209
+ };
210
+ }
211
+
212
+ /**
213
+ * Get runtime summary for display
214
+ * @returns {Promise<Object>} RuntimeSummary
215
+ */
216
+ async getSummary() {
217
+ const catalog = await this.#loadCatalog();
218
+
219
+ if (!catalog) {
220
+ throw new Error('No catalog found. Run discovery first.');
221
+ }
222
+
223
+ const toolCounts = {
224
+ core: 0,
225
+ languages: 0,
226
+ utilities: 0,
227
+ custom: 0
228
+ };
229
+
230
+ for (const tool of catalog.tools) {
231
+ toolCounts[tool.category]++;
232
+ }
233
+
234
+ return {
235
+ environment: catalog.environment,
236
+ resources: catalog.resources,
237
+ toolCounts,
238
+ totalTools: catalog.tools.length,
239
+ lastDiscovery: catalog.generated,
240
+ catalogPath: join(this.basePath, 'runtime.json')
241
+ };
242
+ }
243
+
244
+ /**
245
+ * Add a custom tool to the catalog
246
+ * @param {Object} config - CustomToolConfig
247
+ */
248
+ async addCustomTool(config) {
249
+ const catalog = await this.#loadCatalog();
250
+
251
+ if (!catalog) {
252
+ throw new Error('No catalog found. Run discovery first.');
253
+ }
254
+
255
+ // Check if tool exists
256
+ const check = await this.checkTool(config.id);
257
+ if (!check.available) {
258
+ throw new Error(`Tool ${config.id} not found at ${config.path}`);
259
+ }
260
+
261
+ const customTool = {
262
+ id: config.id,
263
+ name: config.name,
264
+ category: config.category,
265
+ version: check.version || 'unknown',
266
+ path: config.path,
267
+ status: 'verified',
268
+ lastVerified: new Date().toISOString(),
269
+ capabilities: config.capabilities,
270
+ documentation: config.documentation,
271
+ aliases: config.aliases || [],
272
+ relatedTools: []
273
+ };
274
+
275
+ // Add or update tool
276
+ const existingIndex = catalog.tools.findIndex(t => t.id === config.id);
277
+ if (existingIndex >= 0) {
278
+ catalog.tools[existingIndex] = customTool;
279
+ } else {
280
+ catalog.tools.push(customTool);
281
+ }
282
+
283
+ await this.#writeCatalog(catalog);
284
+ }
285
+
286
+ // Private methods
287
+
288
+ /**
289
+ * Discover tools using allowlist-only approach.
290
+ *
291
+ * SAFETY: Only probes tools from the knownTools database plus a curated
292
+ * discovery list. Never enumerates or blindly executes arbitrary PATH
293
+ * executables — doing so can crash privileged system tools (BPF, saned),
294
+ * trigger rogue network connections (input-leapc), or overwhelm
295
+ * apport/systemd with crash reports.
296
+ *
297
+ * @see https://git.integrolabs.net/roctinam/aiwg/issues/820
298
+ * @private
299
+ */
300
+ async #discoverTools() {
301
+ // Curated list: knownTools database + common dev tools safe to probe
302
+ const safeToProbe = new Set([
303
+ // From knownTools database
304
+ ...Object.keys(this.knownTools),
305
+ // Aliases from knownTools
306
+ ...Object.values(this.knownTools).flatMap(t => t.aliases || []),
307
+ // Additional safe dev tools not yet in knownTools
308
+ 'npm', 'npx', 'pnpm', 'yarn', 'bun', 'deno',
309
+ 'pip', 'pip3', 'pipx', 'uv',
310
+ 'ruby', 'gem', 'go', 'cargo', 'rustc', 'rustup',
311
+ 'java', 'javac', 'mvn', 'gradle',
312
+ 'make', 'cmake', 'gcc', 'g++', 'clang',
313
+ 'bash', 'zsh', 'fish', 'sh',
314
+ 'grep', 'sed', 'awk', 'find', 'xargs',
315
+ 'tar', 'gzip', 'unzip', 'zip',
316
+ 'ssh', 'scp', 'rsync',
317
+ 'wget', 'httpie',
318
+ 'vim', 'nvim', 'nano', 'code',
319
+ 'tmux', 'screen',
320
+ 'ag', 'fd', 'fzf', 'bat', 'exa', 'eza', 'delta',
321
+ 'terraform', 'kubectl', 'helm', 'podman',
322
+ 'sqlite3', 'psql', 'mysql', 'mongosh', 'redis-cli',
323
+ 'gh', 'git-lfs', 'hub', 'lab',
324
+ 'aws', 'az', 'gcloud',
325
+ 'ffmpeg', 'ffprobe', 'convert', 'magick',
326
+ 'pandoc', 'latex', 'pdflatex',
327
+ 'yq', 'fx', 'miller',
328
+ 'htop', 'ncdu', 'dust', 'procs', 'tokei',
329
+ ]);
330
+
331
+ const available = [];
332
+ const unavailable = [];
333
+
334
+ for (const name of safeToProbe) {
335
+ const toolPath = await this.#findToolPath(name);
336
+ if (!toolPath) {
337
+ // Not installed — skip silently (not an error)
338
+ continue;
339
+ }
340
+
341
+ try {
342
+ const version = await this.#detectToolVersion(name, toolPath);
343
+ const tool = await this.#categorizeTool(name, toolPath, version);
344
+
345
+ if (tool) {
346
+ available.push(tool);
347
+ }
348
+ } catch (error) {
349
+ unavailable.push({
350
+ id: name,
351
+ reason: 'broken',
352
+ installHint: error.message
353
+ });
354
+ }
355
+ }
356
+
357
+ return { available, unavailable };
358
+ }
359
+
360
+ /**
361
+ * Find tool path using which/where
362
+ * @private
363
+ */
364
+ async #findToolPath(toolName) {
365
+ try {
366
+ const cmd = platform() === 'win32' ? 'where' : 'which';
367
+ const path = execSync(`${cmd} ${toolName}`, { encoding: 'utf-8' })
368
+ .trim()
369
+ .split('\n')[0];
370
+ return path;
371
+ } catch {
372
+ return null;
373
+ }
374
+ }
375
+
376
+ /**
377
+ * Detect tool version using safe command variants only.
378
+ *
379
+ * SAFETY: Only uses flag-style arguments (--version, -v, -V).
380
+ * Never uses bare positional `version` — many tools interpret
381
+ * positional args as filenames, hostnames, or operational parameters,
382
+ * causing crashes, rogue connections, or kernel tracepoint attachment.
383
+ *
384
+ * Uses a 3-second timeout with SIGKILL to prevent tools that spawn
385
+ * persistent background work from outliving the probe.
386
+ *
387
+ * @see https://git.integrolabs.net/roctinam/aiwg/issues/820
388
+ * @private
389
+ */
390
+ async #detectToolVersion(toolName, toolPath) {
391
+ // Only flag-style version args — safe for well-behaved tools.
392
+ // Bare `version` (positional) is intentionally excluded: it caused
393
+ // BPF tools to attach tracepoints, input-leapc to connect to
394
+ // hostname "version", and cs2cs to open a file named "version".
395
+ const versionCommands = [
396
+ `${toolPath} --version`,
397
+ `${toolPath} -v`,
398
+ `${toolPath} -V`
399
+ ];
400
+
401
+ for (const cmd of versionCommands) {
402
+ try {
403
+ const output = execSync(cmd, {
404
+ encoding: 'utf-8',
405
+ timeout: 3000,
406
+ killSignal: 'SIGKILL',
407
+ stdio: ['ignore', 'pipe', 'pipe']
408
+ }).trim();
409
+
410
+ // Extract version number
411
+ const version = this.#parseVersion(output, toolName);
412
+ if (version) return version;
413
+ } catch {
414
+ // Try next command
415
+ }
416
+ }
417
+
418
+ return 'unknown';
419
+ }
420
+
421
+ /**
422
+ * Parse version from output
423
+ * @private
424
+ */
425
+ #parseVersion(output, toolName) {
426
+ // Try known pattern first
427
+ const knownTool = this.knownTools[toolName];
428
+ if (knownTool && knownTool.versionPattern) {
429
+ const regex = new RegExp(knownTool.versionPattern);
430
+ const match = output.match(regex);
431
+ if (match && match[1]) return match[1];
432
+ }
433
+
434
+ // Generic version pattern
435
+ const patterns = [
436
+ /version\s+([0-9]+\.[0-9]+\.[0-9]+)/i,
437
+ /v([0-9]+\.[0-9]+\.[0-9]+)/i,
438
+ /([0-9]+\.[0-9]+\.[0-9]+)/,
439
+ /([0-9]+\.[0-9]+)/
440
+ ];
441
+
442
+ for (const pattern of patterns) {
443
+ const match = output.match(pattern);
444
+ if (match && match[1]) return match[1];
445
+ }
446
+
447
+ return null;
448
+ }
449
+
450
+ /**
451
+ * Categorize and enrich tool
452
+ * @private
453
+ */
454
+ async #categorizeTool(name, path, version) {
455
+ const knownTool = this.knownTools[name];
456
+
457
+ let category = 'utilities';
458
+ let capabilities = [];
459
+ let documentation = '';
460
+ let aliases = [];
461
+ let relatedTools = [];
462
+
463
+ if (knownTool) {
464
+ category = knownTool.category;
465
+ capabilities = knownTool.capabilities;
466
+ documentation = knownTool.documentation || '';
467
+ aliases = knownTool.aliases;
468
+ relatedTools = knownTool.relatedTools;
469
+ } else {
470
+ // Infer category from name
471
+ if (['git', 'bash', 'sh', 'curl', 'ssh', 'grep', 'sed', 'awk'].includes(name)) {
472
+ category = 'core';
473
+ } else if (['node', 'python', 'python3', 'ruby', 'go', 'java', 'javac', 'rustc'].includes(name)) {
474
+ category = 'languages';
475
+ }
476
+ }
477
+
478
+ // Find man page
479
+ const manPage = await this.#findManPage(name);
480
+
481
+ return {
482
+ id: name,
483
+ name,
484
+ category,
485
+ version,
486
+ path,
487
+ status: 'verified',
488
+ lastVerified: new Date().toISOString(),
489
+ capabilities,
490
+ manPage,
491
+ documentation,
492
+ aliases,
493
+ relatedTools
494
+ };
495
+ }
496
+
497
+ /**
498
+ * Find man page for tool
499
+ * @private
500
+ */
501
+ async #findManPage(toolName) {
502
+ if (platform() === 'win32') return undefined;
503
+
504
+ try {
505
+ const manPath = execSync(`man -w ${toolName}`, {
506
+ encoding: 'utf-8',
507
+ stdio: ['ignore', 'pipe', 'ignore']
508
+ }).trim();
509
+
510
+ if (manPath && existsSync(manPath)) {
511
+ return manPath;
512
+ }
513
+ } catch {
514
+ // No man page found
515
+ }
516
+
517
+ return undefined;
518
+ }
519
+
520
+ /**
521
+ * Get install hint for tool
522
+ * @private
523
+ */
524
+ #getInstallHint(toolId) {
525
+ const os = platform();
526
+ const hints = {
527
+ linux: {
528
+ jq: 'apt install jq # or dnf install jq',
529
+ ripgrep: 'apt install ripgrep # or cargo install ripgrep',
530
+ docker: 'apt install docker.io # or follow docker.com/get-started'
531
+ },
532
+ darwin: {
533
+ jq: 'brew install jq',
534
+ ripgrep: 'brew install ripgrep',
535
+ docker: 'brew install --cask docker'
536
+ },
537
+ win32: {
538
+ jq: 'choco install jq # or scoop install jq',
539
+ ripgrep: 'choco install ripgrep',
540
+ docker: 'choco install docker-desktop'
541
+ }
542
+ };
543
+
544
+ return hints[os]?.[toolId] || `Install ${toolId} for your system`;
545
+ }
546
+
547
+ /**
548
+ * Load known tools database
549
+ * @private
550
+ */
551
+ #loadKnownTools() {
552
+ // Simplified inline database for Phase 1
553
+ // Full database can be loaded from JSON file later
554
+ return {
555
+ git: {
556
+ category: 'core',
557
+ capabilities: ['version-control', 'remote', 'branching', 'merging'],
558
+ documentation: 'https://git-scm.com/docs',
559
+ aliases: ['g'],
560
+ relatedTools: ['gh', 'git-lfs'],
561
+ versionPattern: 'git version ([\\d.]+)',
562
+ examples: []
563
+ },
564
+ jq: {
565
+ category: 'utilities',
566
+ capabilities: ['json-processing', 'filtering', 'transformation'],
567
+ documentation: 'https://stedolan.github.io/jq/manual/',
568
+ aliases: [],
569
+ relatedTools: ['yq', 'fx'],
570
+ versionPattern: 'jq-([\\d.]+)',
571
+ examples: []
572
+ },
573
+ node: {
574
+ category: 'languages',
575
+ capabilities: ['javascript', 'runtime'],
576
+ documentation: 'https://nodejs.org/docs/',
577
+ aliases: ['nodejs'],
578
+ relatedTools: ['npm', 'npx'],
579
+ versionPattern: 'v([\\d.]+)',
580
+ examples: []
581
+ },
582
+ python: {
583
+ category: 'languages',
584
+ capabilities: ['python', 'runtime'],
585
+ documentation: 'https://docs.python.org/',
586
+ aliases: ['python3'],
587
+ relatedTools: ['pip', 'pip3'],
588
+ versionPattern: 'Python ([\\d.]+)',
589
+ examples: []
590
+ },
591
+ curl: {
592
+ category: 'core',
593
+ capabilities: ['http-client', 'download', 'api-testing'],
594
+ documentation: 'https://curl.se/docs/',
595
+ aliases: [],
596
+ relatedTools: ['wget', 'httpie'],
597
+ versionPattern: 'curl ([\\d.]+)',
598
+ examples: []
599
+ },
600
+ docker: {
601
+ category: 'utilities',
602
+ capabilities: ['containers', 'virtualization'],
603
+ documentation: 'https://docs.docker.com/',
604
+ aliases: [],
605
+ relatedTools: ['docker-compose', 'podman'],
606
+ versionPattern: 'Docker version ([\\d.]+)',
607
+ examples: []
608
+ },
609
+ ripgrep: {
610
+ category: 'utilities',
611
+ capabilities: ['search', 'grep', 'regex'],
612
+ documentation: 'https://github.com/BurntSushi/ripgrep',
613
+ aliases: ['rg'],
614
+ relatedTools: ['grep', 'ag'],
615
+ versionPattern: 'ripgrep ([\\d.]+)',
616
+ examples: []
617
+ }
618
+ };
619
+ }
620
+
621
+ /**
622
+ * Load catalog from file
623
+ * @private
624
+ */
625
+ async #loadCatalog() {
626
+ const catalogPath = join(this.basePath, 'runtime.json');
627
+
628
+ if (!existsSync(catalogPath)) {
629
+ return null;
630
+ }
631
+
632
+ const content = await readFile(catalogPath, 'utf-8');
633
+ return JSON.parse(content);
634
+ }
635
+
636
+ /**
637
+ * Write catalog to file
638
+ * @private
639
+ */
640
+ async #writeCatalog(catalog) {
641
+ const catalogPath = join(this.basePath, 'runtime.json');
642
+ // #1264(b): ensure parent dir exists; first --discover on a fresh project
643
+ // otherwise fails with ENOENT before any catalog write.
644
+ await mkdir(this.basePath, { recursive: true });
645
+ await writeFile(catalogPath, JSON.stringify(catalog, null, 2), 'utf-8');
646
+ }
647
+
648
+ /**
649
+ * Write human-readable runtime info
650
+ * @private
651
+ */
652
+ async #writeRuntimeInfo(catalog) {
653
+ const lines = [
654
+ '# Runtime Environment Summary',
655
+ '',
656
+ '## Environment',
657
+ '',
658
+ `- **OS**: ${catalog.environment.os} (${catalog.environment.osVersion}) ${catalog.environment.arch}`,
659
+ `- **Shell**: ${catalog.environment.shell}`,
660
+ `- **Home**: ${catalog.environment.homeDir}`,
661
+ `- **Working Directory**: ${catalog.environment.workingDir}`,
662
+ '',
663
+ '## Resources',
664
+ '',
665
+ `- **Disk Free**: ${catalog.resources.diskFreeGb} GB`,
666
+ `- **Memory**: ${catalog.resources.memoryAvailableGb} GB available / ${catalog.resources.memoryTotalGb} GB total`,
667
+ `- **CPU Cores**: ${catalog.resources.cpuCores}`,
668
+ '',
669
+ '## Installed Tools',
670
+ ''
671
+ ];
672
+
673
+ const byCategory = {
674
+ core: [],
675
+ languages: [],
676
+ utilities: [],
677
+ custom: []
678
+ };
679
+
680
+ for (const tool of catalog.tools) {
681
+ byCategory[tool.category].push(tool);
682
+ }
683
+
684
+ for (const [category, tools] of Object.entries(byCategory)) {
685
+ if (tools.length > 0) {
686
+ lines.push(`### ${category.charAt(0).toUpperCase() + category.slice(1)}`);
687
+ lines.push('');
688
+
689
+ for (const tool of tools) {
690
+ lines.push(`- **${tool.name}** (${tool.version}) - ${tool.path}`);
691
+ if (tool.capabilities.length > 0) {
692
+ lines.push(` - Capabilities: ${tool.capabilities.join(', ')}`);
693
+ }
694
+ }
695
+
696
+ lines.push('');
697
+ }
698
+ }
699
+
700
+ lines.push('## Summary');
701
+ lines.push('');
702
+ lines.push(`- **Total Tools**: ${catalog.tools.length}`);
703
+ lines.push(`- **Unavailable**: ${catalog.unavailable.length}`);
704
+ lines.push(`- **Generated**: ${catalog.generated}`);
705
+ lines.push(`- **Catalog**: ${join(this.basePath, 'runtime.json')}`);
706
+
707
+ const infoPath = join(this.basePath, 'runtime-info.md');
708
+ await writeFile(infoPath, lines.join('\n'), 'utf-8');
709
+ }
710
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for Toolsmith feature
3
+ *
4
+ * @architecture @.aiwg/architecture/decisions/ADR-014-toolsmith-feature-architecture.md
5
+ * @architecture @.aiwg/architecture/toolsmith-implementation-spec.md
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map