@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,631 @@
1
+ /**
2
+ * Zod Validation Schemas for Extension Types
3
+ *
4
+ * Provides strict runtime validation for all extension types with helpful
5
+ * error messages. Ensures extension manifests conform to the unified schema.
6
+ *
7
+ * @implements @.aiwg/requirements/use-cases/UC-003-extension-validation.md
8
+ * @architecture @.aiwg/architecture/unified-extension-schema.md
9
+ * @tests @test/unit/extensions/validation.test.ts
10
+ * @version 1.0.0
11
+ */
12
+ import { z } from 'zod';
13
+ // ============================================
14
+ // Core Enums & Primitives
15
+ // ============================================
16
+ /**
17
+ * Extension type discriminator
18
+ */
19
+ export const ExtensionTypeSchema = z.enum([
20
+ 'agent',
21
+ 'command',
22
+ 'skill',
23
+ 'hook',
24
+ 'tool',
25
+ 'mcp-server',
26
+ 'framework',
27
+ 'addon',
28
+ 'template',
29
+ 'prompt',
30
+ ]);
31
+ /**
32
+ * Extension lifecycle status
33
+ */
34
+ export const ExtensionStatusSchema = z.enum([
35
+ 'stable',
36
+ 'beta',
37
+ 'experimental',
38
+ 'deprecated',
39
+ 'archived',
40
+ ]);
41
+ /**
42
+ * Platform support level
43
+ */
44
+ export const PlatformSupportSchema = z.enum([
45
+ 'full',
46
+ 'partial',
47
+ 'experimental',
48
+ 'none',
49
+ ]);
50
+ /**
51
+ * Hook lifecycle events
52
+ */
53
+ export const HookEventSchema = z.enum([
54
+ 'pre-session',
55
+ 'post-session',
56
+ 'pre-command',
57
+ 'post-command',
58
+ 'pre-agent',
59
+ 'post-agent',
60
+ 'pre-write',
61
+ 'post-write',
62
+ 'pre-bash',
63
+ 'post-bash',
64
+ ]);
65
+ // ============================================
66
+ // Shared Schemas
67
+ // ============================================
68
+ /**
69
+ * Platform compatibility matrix
70
+ */
71
+ export const PlatformCompatibilitySchema = z.object({
72
+ claude: PlatformSupportSchema.optional(),
73
+ factory: PlatformSupportSchema.optional(),
74
+ cursor: PlatformSupportSchema.optional(),
75
+ copilot: PlatformSupportSchema.optional(),
76
+ windsurf: PlatformSupportSchema.optional(),
77
+ codex: PlatformSupportSchema.optional(),
78
+ opencode: PlatformSupportSchema.optional(),
79
+ generic: PlatformSupportSchema.optional(),
80
+ }).refine((data) => Object.values(data).some((val) => val !== undefined), { message: 'At least one platform must be specified' });
81
+ /**
82
+ * Deployment configuration
83
+ */
84
+ export const DeploymentConfigSchema = z.object({
85
+ pathTemplate: z.string().min(1, 'Path template is required'),
86
+ pathOverrides: z.record(z.string()).optional(),
87
+ additionalFiles: z.array(z.string()).optional(),
88
+ autoInstall: z.boolean().optional().default(false),
89
+ core: z.boolean().optional().default(false),
90
+ });
91
+ /**
92
+ * A single .aiwg/ path entry in a memory footprint
93
+ */
94
+ export const MemoryPathSchema = z.object({
95
+ path: z.string().min(1, 'Memory path is required'),
96
+ description: z.string().min(1, 'Memory path description is required'),
97
+ });
98
+ /**
99
+ * .aiwg/ memory footprint declaration
100
+ */
101
+ export const MemoryFootprintSchema = z.object({
102
+ creates: z.array(MemoryPathSchema).optional(),
103
+ normalizedFiles: z.array(MemoryPathSchema).optional(),
104
+ });
105
+ /**
106
+ * Deprecation information
107
+ */
108
+ export const DeprecationSchema = z.object({
109
+ date: z.string().datetime({ message: 'Date must be ISO 8601 format' }),
110
+ successor: z.string().optional(),
111
+ reason: z.string().min(1, 'Deprecation reason is required'),
112
+ });
113
+ /**
114
+ * Installation state
115
+ */
116
+ export const InstallationSchema = z.object({
117
+ installedAt: z.string().datetime({ message: 'Install timestamp must be ISO 8601 format' }),
118
+ installedFrom: z.enum(['builtin', 'registry', 'local', 'git']),
119
+ installedPath: z.string().min(1),
120
+ enabled: z.boolean(),
121
+ });
122
+ /**
123
+ * Signature verification
124
+ */
125
+ export const SignatureSchema = z.object({
126
+ algorithm: z.enum(['pgp', 'ed25519']),
127
+ value: z.string().min(1),
128
+ publicKey: z.string().optional(),
129
+ });
130
+ // ============================================
131
+ // Type-Specific Metadata Schemas
132
+ // ============================================
133
+ /**
134
+ * Agent-specific metadata
135
+ */
136
+ export const AgentMetadataSchema = z.object({
137
+ type: z.literal('agent'),
138
+ role: z.string().min(1, 'Agent role is required'),
139
+ model: z.object({
140
+ tier: z.enum(['haiku', 'sonnet', 'opus']),
141
+ override: z.string().optional(),
142
+ }),
143
+ tools: z.array(z.string()).min(1, 'At least one tool is required'),
144
+ template: z.string().optional(),
145
+ maxTools: z.number().int().positive().optional(),
146
+ canDelegate: z.boolean().optional(),
147
+ readOnly: z.boolean().optional(),
148
+ workflow: z.array(z.string()).optional(),
149
+ expertise: z.array(z.string()).optional(),
150
+ responsibilities: z.array(z.string()).optional(),
151
+ });
152
+ /**
153
+ * Command argument definition
154
+ */
155
+ export const CommandArgumentSchema = z.object({
156
+ name: z.string().min(1),
157
+ description: z.string().min(1),
158
+ required: z.boolean(),
159
+ type: z.enum(['string', 'number', 'boolean']),
160
+ default: z.union([z.string(), z.number(), z.boolean()]).optional(),
161
+ position: z.number().int().nonnegative().optional(),
162
+ });
163
+ /**
164
+ * Command option definition
165
+ */
166
+ export const CommandOptionSchema = z.object({
167
+ name: z.string().min(1),
168
+ description: z.string().min(1),
169
+ type: z.enum(['string', 'boolean', 'number', 'array']),
170
+ default: z.union([z.string(), z.boolean(), z.number()]).optional(),
171
+ short: z.string().length(1).optional(),
172
+ long: z.string().min(2).optional(),
173
+ });
174
+ /**
175
+ * Command-specific metadata
176
+ *
177
+ * @deprecated As a source format — commands are generated from skills at deploy time.
178
+ */
179
+ export const CommandMetadataSchema = z.object({
180
+ type: z.literal('command'),
181
+ template: z.enum(['utility', 'transformation', 'orchestration']),
182
+ arguments: z.array(CommandArgumentSchema).optional(),
183
+ options: z.array(CommandOptionSchema).optional(),
184
+ argumentHint: z.string().optional(),
185
+ allowedTools: z.array(z.string()).optional(),
186
+ model: z.string().optional(),
187
+ modelRole: z.enum(['reasoning', 'coding', 'efficiency']).optional(),
188
+ modelTier: z.enum(['economy', 'standard', 'premium']).optional(),
189
+ modelEffort: z.enum(['minimal', 'low', 'medium', 'high', 'xhigh']).optional(),
190
+ modelRationale: z.string().min(1).optional(),
191
+ executionSteps: z.array(z.string()).optional(),
192
+ successCriteria: z.array(z.string()).optional(),
193
+ cliDisabled: z.boolean().optional(),
194
+ executedViaSkillRunner: z.boolean().optional(),
195
+ generatedFrom: z.string().optional(),
196
+ });
197
+ /**
198
+ * Command translation hints for skill→command generation
199
+ */
200
+ export const CommandHintSchema = z.object({
201
+ argumentHint: z.string().optional(),
202
+ allowedTools: z.array(z.string()).optional(),
203
+ template: z.enum(['utility', 'transformation', 'orchestration']).optional(),
204
+ arguments: z.array(CommandArgumentSchema).optional(),
205
+ options: z.array(CommandOptionSchema).optional(),
206
+ executionSteps: z.array(z.string()).optional(),
207
+ successCriteria: z.array(z.string()).optional(),
208
+ model: z.string().optional(),
209
+ cliDisabled: z.boolean().optional(),
210
+ executedViaSkillRunner: z.boolean().optional(),
211
+ });
212
+ /**
213
+ * Skill reference material
214
+ */
215
+ export const SkillReferenceSchema = z.object({
216
+ filename: z.string().min(1),
217
+ description: z.string().min(1),
218
+ path: z.string().min(1),
219
+ });
220
+ /**
221
+ * SKILL.md frontmatter schema
222
+ *
223
+ * Validates the YAML frontmatter block at the top of a SKILL.md file.
224
+ * This is distinct from {@link SkillMetadataSchema}, which validates the
225
+ * `metadata` field of an Extension manifest.
226
+ *
227
+ * `description` is REQUIRED and must be non-empty. Codex rejects SKILL.md
228
+ * files that lack a description; Claude Code uses this field for
229
+ * natural-language invocation. Do NOT relax this rule — a blank description
230
+ * is what caused the 107-file regression we are guarding against.
231
+ */
232
+ export const SkillFrontmatterSchema = z.object({
233
+ name: z.string().min(1, 'Skill name is required'),
234
+ description: z
235
+ .string({
236
+ required_error: 'Description is required (Codex rejects SKILL.md without it)',
237
+ })
238
+ .min(1, 'Description is required and must be non-empty'),
239
+ version: z.string().regex(/^\d+\.\d+\.\d+/, 'Version must be semver or CalVer format (e.g., 1.0.0)').optional(),
240
+ namespace: z.string().optional(),
241
+ platforms: z.union([z.array(z.string()), z.string()]).optional(),
242
+ // Triggers, when declared, must be a non-empty array of non-empty phrases.
243
+ // An explicit `triggers: []` (or whitespace-only entries) is the
244
+ // discoverability anti-pattern (#1623): a declared-but-empty NL routing
245
+ // surface that silently fails `aiwg discover`. Omitting the field entirely
246
+ // stays valid — this guards the regression, it does not mandate triggers.
247
+ triggers: z
248
+ .array(z
249
+ .string()
250
+ .refine((s) => s.trim().length > 0, { message: 'trigger phrases must be non-empty' }))
251
+ .min(1, 'triggers is declared but empty — add at least one phrase or remove the field (empty-triggers anti-pattern, #1623)')
252
+ .optional(),
253
+ aliases: z.array(z.string()).optional(),
254
+ deprecated_names: z.array(z.string()).optional(),
255
+ tools: z.union([z.array(z.string()), z.string()]).optional(),
256
+ 'allowed-tools': z.union([z.array(z.string()), z.string()]).optional(),
257
+ allowedTools: z.union([z.array(z.string()), z.string()]).optional(),
258
+ effort: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
259
+ 'user-invocable': z.boolean().optional(),
260
+ userInvocable: z.boolean().optional(),
261
+ 'disable-model-invocation': z.boolean().optional(),
262
+ disableModelInvocation: z.boolean().optional(),
263
+ context: z.enum(['fork', 'inherit']).optional(),
264
+ author: z.string().optional(),
265
+ license: z.string().optional(),
266
+ metadata: z.record(z.unknown()).optional(),
267
+ }).passthrough();
268
+ /**
269
+ * Validate SKILL.md frontmatter.
270
+ *
271
+ * Use this when parsing the YAML frontmatter block of a SKILL.md file to
272
+ * catch missing or empty `description` fields before deployment.
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * const result = validateSkillFrontmatter(parsedYaml);
277
+ * if (!result.success) {
278
+ * throw new Error('Invalid SKILL.md frontmatter: ' +
279
+ * formatValidationErrors(result.errors).join(', '));
280
+ * }
281
+ * ```
282
+ */
283
+ export function validateSkillFrontmatter(data) {
284
+ const result = SkillFrontmatterSchema.safeParse(data);
285
+ return result.success
286
+ ? { success: true, data: result.data }
287
+ : { success: false, errors: result.error };
288
+ }
289
+ /**
290
+ * Skill-specific metadata
291
+ */
292
+ export const SkillMetadataSchema = z.object({
293
+ type: z.literal('skill'),
294
+ triggerPhrases: z.array(z.string()).min(1, 'At least one trigger phrase is required'),
295
+ autoTrigger: z.boolean().optional().default(false),
296
+ autoTriggerConditions: z.array(z.string()).optional(),
297
+ tools: z.array(z.string()).optional(),
298
+ references: z.array(SkillReferenceSchema).optional(),
299
+ inputRequirements: z.array(z.string()).optional(),
300
+ outputFormat: z.string().optional(),
301
+ // Official Claude Code SKILL.md frontmatter
302
+ effort: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
303
+ userInvocable: z.boolean().optional(),
304
+ disableModelInvocation: z.boolean().optional(),
305
+ context: z.enum(['fork', 'inherit']).optional(),
306
+ allowedTools: z.array(z.string()).optional(),
307
+ // Command translation hints
308
+ commandHint: CommandHintSchema.optional(),
309
+ });
310
+ /**
311
+ * Hook-specific metadata
312
+ */
313
+ export const HookMetadataSchema = z.object({
314
+ type: z.literal('hook'),
315
+ event: HookEventSchema,
316
+ priority: z.number().int().optional().default(100),
317
+ canModify: z.boolean().optional().default(false),
318
+ canBlock: z.boolean().optional().default(false),
319
+ configSchema: z.record(z.unknown()).optional(),
320
+ });
321
+ /**
322
+ * Tool-specific metadata
323
+ */
324
+ export const ToolMetadataSchema = z.object({
325
+ type: z.literal('tool'),
326
+ category: z.enum(['core', 'languages', 'utilities', 'custom']),
327
+ executable: z.string().min(1, 'Executable path is required'),
328
+ verificationStatus: z.enum(['verified', 'unverified']).optional(),
329
+ lastVerified: z.string().datetime().optional(),
330
+ manPage: z.string().optional(),
331
+ aliases: z.array(z.string()).optional(),
332
+ relatedTools: z.array(z.string()).optional(),
333
+ platformNotes: z.record(z.string()).optional(),
334
+ installHint: z.string().optional(),
335
+ });
336
+ /**
337
+ * MCP tool summary
338
+ */
339
+ export const MCPToolSummarySchema = z.object({
340
+ name: z.string().min(1),
341
+ description: z.string().min(1),
342
+ dangerous: z.boolean(),
343
+ });
344
+ /**
345
+ * MCP Server-specific metadata
346
+ */
347
+ export const MCPServerMetadataSchema = z.object({
348
+ type: z.literal('mcp-server'),
349
+ mcpVersion: z.string().min(1, 'MCP version is required'),
350
+ transport: z.enum(['stdio', 'http']),
351
+ port: z.number().int().positive().optional(),
352
+ capabilities: z.object({
353
+ tools: z.boolean(),
354
+ resources: z.boolean(),
355
+ prompts: z.boolean(),
356
+ sampling: z.boolean(),
357
+ logging: z.boolean(),
358
+ }),
359
+ sourceType: z.enum(['cli', 'api', 'catalog', 'nl', 'extension']),
360
+ sourceCommand: z.string().optional(),
361
+ sourceBaseUrl: z.string().url().optional(),
362
+ workingDirectory: z.string().optional(),
363
+ environment: z.record(z.string()).optional(),
364
+ tools: z.array(MCPToolSummarySchema).optional(),
365
+ resources: z.array(z.string()).optional(),
366
+ prompts: z.array(z.string()).optional(),
367
+ });
368
+ /**
369
+ * Framework-specific metadata
370
+ */
371
+ export const FrameworkMetadataSchema = z.object({
372
+ type: z.literal('framework'),
373
+ domain: z.string().min(1, 'Framework domain is required'),
374
+ includes: z.object({
375
+ agents: z.array(z.string()).optional(),
376
+ commands: z.array(z.string()).optional(),
377
+ skills: z.array(z.string()).optional(),
378
+ hooks: z.array(z.string()).optional(),
379
+ templates: z.array(z.string()).optional(),
380
+ prompts: z.array(z.string()).optional(),
381
+ }),
382
+ configSchema: z.record(z.unknown()).optional(),
383
+ defaultConfig: z.record(z.unknown()).optional(),
384
+ });
385
+ /**
386
+ * Addon-specific metadata
387
+ */
388
+ export const AddonMetadataSchema = z.object({
389
+ type: z.literal('addon'),
390
+ entry: z.object({
391
+ agents: z.string().optional(),
392
+ commands: z.string().optional(),
393
+ skills: z.string().optional(),
394
+ hooks: z.string().optional(),
395
+ templates: z.string().optional(),
396
+ prompts: z.string().optional(),
397
+ }),
398
+ provides: z.object({
399
+ agents: z.array(z.string()).optional(),
400
+ commands: z.array(z.string()).optional(),
401
+ skills: z.array(z.string()).optional(),
402
+ hooks: z.array(z.string()).optional(),
403
+ templates: z.array(z.string()).optional(),
404
+ prompts: z.array(z.string()).optional(),
405
+ }),
406
+ });
407
+ /**
408
+ * Template variable definition
409
+ */
410
+ export const TemplateVariableSchema = z.object({
411
+ name: z.string().min(1),
412
+ description: z.string().min(1),
413
+ type: z.enum(['string', 'number', 'boolean', 'array', 'object']),
414
+ required: z.boolean(),
415
+ default: z.unknown().optional(),
416
+ });
417
+ /**
418
+ * Template-specific metadata
419
+ */
420
+ export const TemplateMetadataSchema = z.object({
421
+ type: z.literal('template'),
422
+ format: z.string().min(1, 'Template format is required'),
423
+ variables: z.array(TemplateVariableSchema).optional(),
424
+ sections: z.array(z.string()).optional(),
425
+ targetArtifact: z.string().optional(),
426
+ });
427
+ /**
428
+ * Prompt-specific metadata
429
+ */
430
+ export const PromptMetadataSchema = z.object({
431
+ type: z.literal('prompt'),
432
+ category: z.string().min(1, 'Prompt category is required'),
433
+ purpose: z.string().min(1, 'Prompt purpose is required'),
434
+ useWhen: z.array(z.string()).min(1, 'At least one use-when condition is required'),
435
+ variables: z.array(z.string()).optional(),
436
+ requiredContext: z.array(z.string()).optional(),
437
+ });
438
+ /**
439
+ * Union of all type-specific metadata schemas
440
+ */
441
+ export const ExtensionMetadataSchema = z.discriminatedUnion('type', [
442
+ AgentMetadataSchema,
443
+ CommandMetadataSchema,
444
+ SkillMetadataSchema,
445
+ HookMetadataSchema,
446
+ ToolMetadataSchema,
447
+ MCPServerMetadataSchema,
448
+ FrameworkMetadataSchema,
449
+ AddonMetadataSchema,
450
+ TemplateMetadataSchema,
451
+ PromptMetadataSchema,
452
+ ]);
453
+ // ============================================
454
+ // Base Extension Schema
455
+ // ============================================
456
+ /**
457
+ * Complete extension schema
458
+ *
459
+ * Validates all required and optional fields according to the unified schema.
460
+ */
461
+ export const ExtensionSchema = z.object({
462
+ // Core Identity
463
+ id: z.string().regex(/^[a-z][a-z0-9-]*$/, 'ID must be kebab-case (lowercase, hyphens only)'),
464
+ type: ExtensionTypeSchema,
465
+ name: z.string().min(1, 'Name is required'),
466
+ description: z.string().min(1, 'Description is required'),
467
+ version: z.string().regex(/^\d+\.\d+\.\d+/, 'Version must be semver or CalVer format (e.g., 1.0.0 or 2026.1.5)'),
468
+ // Discovery & Classification
469
+ capabilities: z.array(z.string()).min(1, 'At least one capability is required'),
470
+ keywords: z.array(z.string()).min(1, 'At least one keyword is required'),
471
+ category: z.string().optional(),
472
+ // Platform & Deployment
473
+ platforms: PlatformCompatibilitySchema,
474
+ deployment: DeploymentConfigSchema,
475
+ // Dependencies & Requirements
476
+ requires: z.array(z.string()).optional(),
477
+ recommends: z.array(z.string()).optional(),
478
+ conflicts: z.array(z.string()).optional(),
479
+ systemDependencies: z.record(z.string()).optional(),
480
+ // Metadata & Documentation
481
+ author: z.string().optional(),
482
+ license: z.string().optional(),
483
+ repository: z.string().url().optional(),
484
+ homepage: z.string().url().optional(),
485
+ bugs: z.string().url().optional(),
486
+ documentation: z.record(z.string()).optional(),
487
+ researchCompliance: z.record(z.array(z.string())).optional(),
488
+ memory: MemoryFootprintSchema.optional(),
489
+ // Type-Specific Data
490
+ metadata: ExtensionMetadataSchema,
491
+ // Lifecycle & Status
492
+ status: ExtensionStatusSchema.optional().default('stable'),
493
+ deprecation: DeprecationSchema.optional(),
494
+ installation: InstallationSchema.optional(),
495
+ // Validation & Quality
496
+ checksum: z.string().optional(),
497
+ signature: SignatureSchema.optional(),
498
+ }).refine((data) => data.type === data.metadata.type, { message: 'Extension type must match metadata type' });
499
+ /**
500
+ * Validate an extension manifest
501
+ *
502
+ * @param data - Unknown data to validate
503
+ * @returns Validation result with typed data or errors
504
+ *
505
+ * @example
506
+ * ```typescript
507
+ * const result = validateExtension(data);
508
+ * if (result.success) {
509
+ * console.log('Valid extension:', result.data.name);
510
+ * } else {
511
+ * console.error('Validation errors:', result.errors.format());
512
+ * }
513
+ * ```
514
+ */
515
+ export function validateExtension(data) {
516
+ const result = ExtensionSchema.safeParse(data);
517
+ if (result.success) {
518
+ return {
519
+ success: true,
520
+ data: result.data,
521
+ };
522
+ }
523
+ else {
524
+ return {
525
+ success: false,
526
+ errors: result.error,
527
+ };
528
+ }
529
+ }
530
+ /**
531
+ * Type guard to check if data is a valid extension
532
+ *
533
+ * @param data - Unknown data to check
534
+ * @returns True if data is a valid extension
535
+ *
536
+ * @example
537
+ * ```typescript
538
+ * if (isValidExtension(data)) {
539
+ * // TypeScript knows data is ValidatedExtension here
540
+ * console.log(data.name);
541
+ * }
542
+ * ```
543
+ */
544
+ export function isValidExtension(data) {
545
+ return ExtensionSchema.safeParse(data).success;
546
+ }
547
+ /**
548
+ * Validate and throw on error
549
+ *
550
+ * Use this when you want validation errors to propagate as exceptions.
551
+ *
552
+ * @param data - Unknown data to validate
553
+ * @returns Validated extension data
554
+ * @throws {z.ZodError} If validation fails
555
+ *
556
+ * @example
557
+ * ```typescript
558
+ * try {
559
+ * const extension = validateExtensionStrict(data);
560
+ * console.log('Valid extension:', extension.name);
561
+ * } catch (error) {
562
+ * if (error instanceof z.ZodError) {
563
+ * console.error('Validation failed:', error.format());
564
+ * }
565
+ * }
566
+ * ```
567
+ */
568
+ export function validateExtensionStrict(data) {
569
+ return ExtensionSchema.parse(data);
570
+ }
571
+ /**
572
+ * Validate extension metadata only
573
+ *
574
+ * Useful for validating type-specific metadata in isolation.
575
+ *
576
+ * @param data - Unknown metadata to validate
577
+ * @returns Validation result
578
+ */
579
+ export function validateExtensionMetadata(data) {
580
+ const result = ExtensionMetadataSchema.safeParse(data);
581
+ if (result.success) {
582
+ return { success: true, data: result.data };
583
+ }
584
+ else {
585
+ return { success: false, errors: result.error };
586
+ }
587
+ }
588
+ /**
589
+ * Format validation errors for display
590
+ *
591
+ * Converts Zod errors into human-readable messages.
592
+ *
593
+ * @param errors - Zod validation errors
594
+ * @returns Formatted error messages
595
+ *
596
+ * @example
597
+ * ```typescript
598
+ * const result = validateExtension(data);
599
+ * if (!result.success) {
600
+ * const messages = formatValidationErrors(result.errors);
601
+ * console.error('Validation failed:\n' + messages.join('\n'));
602
+ * }
603
+ * ```
604
+ */
605
+ export function formatValidationErrors(errors) {
606
+ return errors.issues.map((issue) => {
607
+ const path = issue.path.join('.');
608
+ return `${path}: ${issue.message}`;
609
+ });
610
+ }
611
+ /**
612
+ * Check if extension matches expected type
613
+ *
614
+ * Type-safe way to validate extension type before accessing type-specific fields.
615
+ *
616
+ * @param extension - Validated extension
617
+ * @param type - Expected extension type
618
+ * @returns True if extension matches type
619
+ *
620
+ * @example
621
+ * ```typescript
622
+ * if (isExtensionType(extension, 'agent')) {
623
+ * // TypeScript narrows metadata to AgentMetadata
624
+ * console.log(extension.metadata.role);
625
+ * }
626
+ * ```
627
+ */
628
+ export function isExtensionType(extension, type) {
629
+ return extension.type === type && extension.metadata.type === type;
630
+ }
631
+ //# sourceMappingURL=validation.js.map