@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,232 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Manages loading, validating, and merging AIWG CLI configurations from multiple sources.
5
+ * Supports .aiwgrc.json, package.json, and command-line overrides.
6
+ */
7
+ import { readFile, access } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { resolve, dirname } from 'path';
10
+ import { constants } from 'fs';
11
+ /**
12
+ * Configuration Loader class
13
+ */
14
+ export class ConfigLoader {
15
+ configCache = null;
16
+ /**
17
+ * Load configuration from file or defaults
18
+ */
19
+ async load(configPath) {
20
+ // If cached, return it
21
+ if (this.configCache) {
22
+ return this.configCache;
23
+ }
24
+ // Start with defaults
25
+ let config = this.getDefaults();
26
+ // Try to load from .aiwgrc.json
27
+ if (configPath) {
28
+ const fileConfig = await this.loadFromFile(configPath);
29
+ if (fileConfig) {
30
+ config = this.merge([config, fileConfig]);
31
+ }
32
+ }
33
+ else {
34
+ // Look for .aiwgrc.json in current directory and parent directories
35
+ const foundConfig = await this.findConfigFile(process.cwd());
36
+ if (foundConfig) {
37
+ config = this.merge([config, foundConfig]);
38
+ }
39
+ }
40
+ // Try to load from package.json
41
+ const pkgPath = resolve(process.cwd(), 'package.json');
42
+ if (existsSync(pkgPath)) {
43
+ const pkgConfig = await this.loadFromPackageJson(pkgPath);
44
+ if (pkgConfig) {
45
+ config = this.merge([config, pkgConfig]);
46
+ }
47
+ }
48
+ // Validate merged config
49
+ const validation = this.validate(config);
50
+ if (!validation.valid) {
51
+ throw new Error(`Invalid configuration: ${validation.errors.join(', ')}`);
52
+ }
53
+ // Cache it
54
+ this.configCache = config;
55
+ return config;
56
+ }
57
+ /**
58
+ * Load configuration from .aiwgrc.json file
59
+ */
60
+ async loadFromFile(filePath) {
61
+ try {
62
+ await access(filePath, constants.R_OK);
63
+ const content = await readFile(filePath, 'utf-8');
64
+ const config = JSON.parse(content);
65
+ return config;
66
+ }
67
+ catch (error) {
68
+ if (error.code === 'ENOENT') {
69
+ return null;
70
+ }
71
+ throw new Error(`Failed to load config from ${filePath}: ${error}`);
72
+ }
73
+ }
74
+ /**
75
+ * Load configuration from package.json "aiwg" field
76
+ */
77
+ async loadFromPackageJson(pkgPath) {
78
+ try {
79
+ const content = await readFile(pkgPath, 'utf-8');
80
+ const pkg = JSON.parse(content);
81
+ return pkg.aiwg || null;
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
87
+ /**
88
+ * Find config file by walking up directory tree
89
+ */
90
+ async findConfigFile(startDir) {
91
+ let currentDir = startDir;
92
+ const root = resolve('/');
93
+ while (currentDir !== root) {
94
+ const configPath = resolve(currentDir, '.aiwgrc.json');
95
+ if (existsSync(configPath)) {
96
+ return await this.loadFromFile(configPath);
97
+ }
98
+ const parentDir = dirname(currentDir);
99
+ if (parentDir === currentDir) {
100
+ break; // Reached root
101
+ }
102
+ currentDir = parentDir;
103
+ }
104
+ return null;
105
+ }
106
+ /**
107
+ * Merge multiple partial configs into one complete config
108
+ */
109
+ merge(configs) {
110
+ const result = this.getDefaults();
111
+ for (const config of configs) {
112
+ if (config.version)
113
+ result.version = config.version;
114
+ if (config.validation) {
115
+ result.validation = { ...result.validation, ...config.validation };
116
+ }
117
+ if (config.optimization) {
118
+ result.optimization = { ...result.optimization, ...config.optimization };
119
+ }
120
+ if (config.output) {
121
+ result.output = { ...result.output, ...config.output };
122
+ }
123
+ if (config.watch) {
124
+ result.watch = { ...result.watch, ...config.watch };
125
+ }
126
+ if (config.hooks) {
127
+ result.hooks = { ...result.hooks, ...config.hooks };
128
+ }
129
+ }
130
+ return result;
131
+ }
132
+ /**
133
+ * Validate configuration object
134
+ */
135
+ validate(config) {
136
+ const errors = [];
137
+ const warnings = [];
138
+ // Validate version
139
+ if (!config.version || !config.version.match(/^\d+\.\d+$/)) {
140
+ errors.push('Invalid version format (expected "1.0")');
141
+ }
142
+ // Validate validation config
143
+ if (config.validation.threshold < 0 || config.validation.threshold > 100) {
144
+ errors.push('Validation threshold must be between 0 and 100');
145
+ }
146
+ if (config.validation.context &&
147
+ !['academic', 'technical', 'executive', 'casual'].includes(config.validation.context)) {
148
+ errors.push('Invalid validation context');
149
+ }
150
+ // Validate optimization config
151
+ const validStrategies = ['specificity', 'examples', 'constraints', 'voice', 'anti_pattern'];
152
+ for (const strategy of config.optimization.strategies) {
153
+ if (!validStrategies.includes(strategy)) {
154
+ warnings.push(`Unknown optimization strategy: ${strategy}`);
155
+ }
156
+ }
157
+ // Validate output config
158
+ if (!['text', 'json', 'html', 'junit'].includes(config.output.format)) {
159
+ errors.push('Invalid output format (must be: text, json, html, or junit)');
160
+ }
161
+ // Validate watch config
162
+ if (config.watch.debounce < 0) {
163
+ errors.push('Watch debounce must be >= 0');
164
+ }
165
+ if (config.watch.patterns.length === 0) {
166
+ warnings.push('No watch patterns specified');
167
+ }
168
+ return {
169
+ valid: errors.length === 0,
170
+ errors,
171
+ warnings
172
+ };
173
+ }
174
+ /**
175
+ * Get default configuration
176
+ */
177
+ getDefaults() {
178
+ return {
179
+ version: '1.0',
180
+ validation: {
181
+ enabled: true,
182
+ threshold: 70,
183
+ context: undefined,
184
+ failOnCritical: true,
185
+ rules: []
186
+ },
187
+ optimization: {
188
+ enabled: true,
189
+ autoApply: false,
190
+ strategies: ['specificity', 'examples', 'constraints', 'anti_pattern'],
191
+ createBackup: true
192
+ },
193
+ output: {
194
+ format: 'text',
195
+ destination: undefined,
196
+ verbose: false,
197
+ colors: true
198
+ },
199
+ watch: {
200
+ enabled: false,
201
+ patterns: ['**/*.md', '**/*.txt'],
202
+ debounce: 500,
203
+ ignorePatterns: ['**/node_modules/**', '**/.git/**', '**/dist/**']
204
+ },
205
+ hooks: {
206
+ preCommit: false,
207
+ prePush: false,
208
+ hookPath: '.git/hooks'
209
+ }
210
+ };
211
+ }
212
+ /**
213
+ * Generate example config file content
214
+ */
215
+ generateExample() {
216
+ const example = this.getDefaults();
217
+ return JSON.stringify(example, null, 2);
218
+ }
219
+ /**
220
+ * Clear cached configuration
221
+ */
222
+ clearCache() {
223
+ this.configCache = null;
224
+ }
225
+ /**
226
+ * Override specific config values
227
+ */
228
+ override(config, overrides) {
229
+ return this.merge([config, overrides]);
230
+ }
231
+ }
232
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1,82 @@
1
+ /**
2
+ * AIWG CLI Environment Detection
3
+ *
4
+ * Centralized helpers for detecting the runtime environment so handlers
5
+ * can make consistent interactive / non-interactive decisions.
6
+ *
7
+ * Phase 3 of the CLI Stabilization Epic (#920).
8
+ */
9
+ /**
10
+ * Return true iff the CLI is running attached to an interactive terminal
11
+ * where it is safe to prompt the user.
12
+ *
13
+ * Conditions (all must hold):
14
+ * - stdin is a TTY
15
+ * - stdout is a TTY
16
+ * - TERM is not 'dumb'
17
+ * - CI env var is not truthy (matches GitHub Actions, GitLab, CircleCI,
18
+ * Travis, Buildkite, Jenkins, and most other CI systems)
19
+ * - DEBIAN_FRONTEND is not 'noninteractive' (common in Docker images)
20
+ *
21
+ * Respects common CI convention: any of
22
+ * CI, CONTINUOUS_INTEGRATION, BUILD_NUMBER, RUN_ID, GITHUB_ACTIONS,
23
+ * GITLAB_CI, CIRCLECI, TRAVIS, BUILDKITE, JENKINS_URL
24
+ * set (to any truthy value) indicates a CI environment.
25
+ *
26
+ * Handlers MUST call this helper instead of re-deriving the check locally.
27
+ * Divergent isTTY checks scattered across handlers have caused bugs in the
28
+ * past (#918 audit findings).
29
+ */
30
+ export function isInteractive() {
31
+ if (!process.stdin.isTTY)
32
+ return false;
33
+ if (!process.stdout.isTTY)
34
+ return false;
35
+ if (process.env['TERM'] === 'dumb')
36
+ return false;
37
+ if (process.env['DEBIAN_FRONTEND'] === 'noninteractive')
38
+ return false;
39
+ if (isCI())
40
+ return false;
41
+ return true;
42
+ }
43
+ /**
44
+ * Return true iff we're running in a continuous-integration environment.
45
+ * Checks the common CI env vars set by major CI systems.
46
+ */
47
+ export function isCI() {
48
+ const ciVars = [
49
+ 'CI',
50
+ 'CONTINUOUS_INTEGRATION',
51
+ 'BUILD_NUMBER',
52
+ 'RUN_ID',
53
+ 'GITHUB_ACTIONS',
54
+ 'GITLAB_CI',
55
+ 'CIRCLECI',
56
+ 'TRAVIS',
57
+ 'BUILDKITE',
58
+ 'JENKINS_URL',
59
+ 'TF_BUILD', // Azure DevOps
60
+ 'TEAMCITY_VERSION',
61
+ ];
62
+ for (const v of ciVars) {
63
+ const val = process.env[v];
64
+ if (val && val !== '0' && val.toLowerCase() !== 'false')
65
+ return true;
66
+ }
67
+ return false;
68
+ }
69
+ /**
70
+ * Return true iff colored output should be emitted.
71
+ *
72
+ * Honors NO_COLOR (per https://no-color.org) and FORCE_COLOR.
73
+ * Requires stdout (or the passed stream) to be a TTY.
74
+ */
75
+ export function shouldUseColor(stream = process.stdout) {
76
+ if (process.env['NO_COLOR'])
77
+ return false;
78
+ if (process.env['FORCE_COLOR'] && process.env['FORCE_COLOR'] !== '0')
79
+ return true;
80
+ return !!stream.isTTY;
81
+ }
82
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1,150 @@
1
+ /**
2
+ * AIWG Structured Errors
3
+ *
4
+ * Every intentional error thrown by CLI code should be an `AiwgError` with:
5
+ * - `code` — stable UPPER_SNAKE_CASE identifier (ERR_CATEGORY_REASON)
6
+ * - `exitCode` — process exit code (see EXIT_CODES table below)
7
+ * - `hint` — optional one-line user-facing hint with a suggested next action
8
+ * - `cause` — optional underlying error for chain preservation (ES2022)
9
+ *
10
+ * The top-level formatter in `bin/aiwg.mjs` prints a single-line message and
11
+ * only reveals stack traces when `AIWG_DEBUG=1` or `--verbose` is set.
12
+ *
13
+ * Code naming: category-prefixed uppercase snake_case.
14
+ * ERR_CONFIG_* — problems reading/writing .aiwg/aiwg.config
15
+ * ERR_NETWORK_* — timeouts, unreachable services, HTTP errors
16
+ * ERR_USAGE_* — bad flags, unknown commands, missing required args
17
+ * ERR_FS_* — filesystem errors (permission, ENOENT outside config)
18
+ * ERR_SANDBOX_* — sandbox-specific failures
19
+ * ERR_INTERNAL — unexpected bugs (last resort; prefer a specific code)
20
+ *
21
+ * Phase 4 of the CLI Stabilization Epic (#921).
22
+ */
23
+ /**
24
+ * Process exit codes used by the CLI. Pragmatic subset of sysexits.h —
25
+ * enough categorization for scripts to branch on without full sysexits
26
+ * ceremony.
27
+ */
28
+ export const EXIT_CODES = {
29
+ /** Command completed successfully. */
30
+ OK: 0,
31
+ /** General / uncategorized failure. */
32
+ GENERAL: 1,
33
+ /** User error: unknown command, bad flag, missing required argument. */
34
+ USAGE: 2,
35
+ /** Filesystem write failure: permission denied, disk full, read-only. */
36
+ CANT_CREATE: 73,
37
+ /** Config file missing, malformed, or otherwise unusable. */
38
+ CONFIG: 78,
39
+ /** Interrupted by SIGINT (Ctrl-C). 128 + 2. */
40
+ INTERRUPTED: 130,
41
+ /** Terminated by SIGTERM. 128 + 15. */
42
+ TERMINATED: 143,
43
+ };
44
+ /**
45
+ * Structured CLI error with a stable code and a prescribed exit code.
46
+ *
47
+ * Always throw these from handler code instead of bare `Error` so the
48
+ * top-level formatter can render consistent output and so tests can assert
49
+ * on the error code rather than brittle message strings.
50
+ */
51
+ export class AiwgError extends Error {
52
+ code;
53
+ exitCode;
54
+ hint;
55
+ constructor(init) {
56
+ super(init.message, init.cause !== undefined ? { cause: init.cause } : undefined);
57
+ this.name = 'AiwgError';
58
+ this.code = init.code;
59
+ this.exitCode = init.exitCode ?? EXIT_CODES.GENERAL;
60
+ if (init.hint !== undefined)
61
+ this.hint = init.hint;
62
+ // Stabilize stack trace capture across engines.
63
+ if (typeof Error.captureStackTrace === 'function') {
64
+ Error.captureStackTrace(this, AiwgError);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Convenience checker — ts-narrows an unknown to AiwgError. Avoids importing
70
+ * the class just for a typeof-like check at catch sites.
71
+ */
72
+ export function isAiwgError(err) {
73
+ return err instanceof AiwgError;
74
+ }
75
+ /**
76
+ * Format an error for terminal output. Always returns a single-line primary
77
+ * message; `hint` (if present) is returned as a second line; `stack` and the
78
+ * `cause` chain are included only when verbose is true.
79
+ *
80
+ * Does NOT color the output — caller chooses whether to apply ui.red() etc.
81
+ * so non-TTY stderr paths stay ANSI-clean.
82
+ */
83
+ export function formatError(err, opts = {}) {
84
+ const lines = [];
85
+ if (isAiwgError(err)) {
86
+ lines.push(`aiwg: error: ${err.message} (code: ${err.code})`);
87
+ if (err.hint)
88
+ lines.push(` hint: ${err.hint}`);
89
+ if (opts.verbose) {
90
+ if (err.stack)
91
+ lines.push(err.stack);
92
+ if (err.cause) {
93
+ lines.push(' cause:');
94
+ lines.push(formatError(err.cause, { verbose: true }));
95
+ }
96
+ }
97
+ }
98
+ else if (err instanceof Error) {
99
+ lines.push(`aiwg: error: ${err.message}`);
100
+ if (opts.verbose && err.stack)
101
+ lines.push(err.stack);
102
+ }
103
+ else {
104
+ lines.push(`aiwg: error: ${String(err)}`);
105
+ }
106
+ return lines.join('\n');
107
+ }
108
+ /**
109
+ * Resolve the exit code to use for an error. Non-AiwgError throws and plain
110
+ * strings map to EXIT_CODES.GENERAL.
111
+ */
112
+ export function exitCodeFor(err) {
113
+ if (isAiwgError(err))
114
+ return err.exitCode;
115
+ return EXIT_CODES.GENERAL;
116
+ }
117
+ /**
118
+ * Convert any thrown value into a uniform HandlerResult shape, preserving
119
+ * AiwgError's semantic fields (code, exitCode, hint) where present.
120
+ *
121
+ * This is the bridge between the in-handler `try { ... } catch (err) { ... }`
122
+ * pattern and the HandlerResult contract the router expects. Use it in every
123
+ * handler's top-level catch:
124
+ *
125
+ * try {
126
+ * await doWork(ctx);
127
+ * return { exitCode: 0 };
128
+ * } catch (err) {
129
+ * return handlerResultFromError(err);
130
+ * }
131
+ *
132
+ * Non-AiwgError throws map to `{ exitCode: 1, message, error }`. AiwgError
133
+ * throws carry their `exitCode` (USAGE=2, CONFIG=78, CANT_CREATE=73, etc.)
134
+ * plus the `hint` merged into the message for single-line output.
135
+ *
136
+ * Phase 5 of the CLI Stabilization Epic (#922) — unblocks the exit-code
137
+ * propagation from Phase 4 (#921) that was previously flattened to 1.
138
+ */
139
+ export function handlerResultFromError(err) {
140
+ if (isAiwgError(err)) {
141
+ const message = err.hint ? `${err.message} — hint: ${err.hint}` : err.message;
142
+ return { exitCode: err.exitCode, message, error: err };
143
+ }
144
+ if (err instanceof Error) {
145
+ return { exitCode: EXIT_CODES.GENERAL, message: err.message, error: err };
146
+ }
147
+ const message = String(err);
148
+ return { exitCode: EXIT_CODES.GENERAL, message, error: new Error(message) };
149
+ }
150
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Shared helper: walk up from a starting directory to find AIWG's package root
3
+ * (the directory containing the full or lightweight AIWG package.json).
4
+ *
5
+ * Required because the compiled layout (dist/src/<area>/<file>.js) and the
6
+ * source layout (src/<area>/<file>.ts) are different depths from the package
7
+ * root, so fixed `../../` walks break in one of the two modes. Walking up to
8
+ * the package manifest works in source, full-package, and `@aiwg/cli` modes.
9
+ *
10
+ * @issue #1261
11
+ */
12
+ import { existsSync, readFileSync } from 'fs';
13
+ import { dirname, join } from 'path';
14
+ /**
15
+ * Walk up from `startDir` looking for an AIWG package manifest.
16
+ * Returns the directory containing that package.json, or `null` if not found
17
+ * within `maxDepth` levels.
18
+ */
19
+ export function findPackageRoot(startDir, maxDepth = 10) {
20
+ let dir = startDir;
21
+ for (let i = 0; i < maxDepth; i++) {
22
+ const pkgPath = join(dir, 'package.json');
23
+ if (existsSync(pkgPath)) {
24
+ try {
25
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
26
+ if (pkg.name === 'aiwg' || pkg.name === '@aiwg/cli')
27
+ return dir;
28
+ }
29
+ catch {
30
+ /* malformed package.json — keep walking */
31
+ }
32
+ }
33
+ const parent = dirname(dir);
34
+ if (parent === dir)
35
+ break;
36
+ dir = parent;
37
+ }
38
+ return null;
39
+ }
40
+ //# sourceMappingURL=find-package-root.js.map