@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,411 @@
1
+ // A2A client — sends messages, subscribes to task streams, manages push
2
+ // notification configs against an agentic-sandbox v2 instance.
3
+ //
4
+ // Mirrors the executor's REST surface
5
+ // (agentic-sandbox-executor/src/bindings/rest.rs):
6
+ //
7
+ // POST /agents/{id}/v1/messages:send
8
+ // GET /agents/{id}/v1/tasks/{tid}
9
+ // POST /agents/{id}/v1/tasks/{tid}/cancel
10
+ // GET /agents/{id}/v1/tasks/{tid}/subscribe (SSE)
11
+ // POST /agents/{id}/v1/tasks/{tid}/pushNotificationConfigs
12
+ // GET /agents/{id}/v1/tasks/{tid}/pushNotificationConfigs/{cid}
13
+ // DELETE /agents/{id}/v1/tasks/{tid}/pushNotificationConfigs/{cid}
14
+ // GET /agents/{id}/.well-known/agent-card.json
15
+ // GET /agents/{id}/v1/extendedAgentCard (extended card)
16
+ // GET /agents/{id}/v1/card (legacy extended card)
17
+ import { A2AError, A2AHttpClient } from './http.js';
18
+ export const A2A_RUNTIME_V1 = 'https://agentic-sandbox.aiwg.io/extensions/runtime/v1';
19
+ export const A2A_IDEMPOTENCY_V1 = 'https://agentic-sandbox.aiwg.io/extensions/idempotency/v1';
20
+ export const A2A_HITL_PROMPT_V1 = 'https://agentic-sandbox.aiwg.io/extensions/hitl-prompt/v1';
21
+ export const A2A_MULTI_TENANT_V1 = 'https://agentic-sandbox.aiwg.io/extensions/multi-tenant/v1';
22
+ export const A2A_PTY_EXTENSIONS_V1 = 'https://agentic-sandbox.aiwg.io/extensions/pty-extensions/v1';
23
+ /** Required-by-default extension set — the executor's `RequireA2AExtensions`
24
+ * middleware (sandbox#236) rejects mutating calls without these. */
25
+ export const DEFAULT_REQUIRED_EXTENSIONS = [A2A_RUNTIME_V1, A2A_IDEMPOTENCY_V1];
26
+ export class A2AClient {
27
+ instanceId;
28
+ http;
29
+ extensionSet;
30
+ constructor(opts) {
31
+ this.instanceId = opts.instanceId;
32
+ const required = opts.requiredExtensions ?? DEFAULT_REQUIRED_EXTENSIONS;
33
+ const optional = opts.optionalExtensions ?? [];
34
+ this.extensionSet = [...required, ...optional];
35
+ this.http = new A2AHttpClient({
36
+ ...opts,
37
+ defaultExtensions: this.extensionSet,
38
+ });
39
+ }
40
+ agentPath() {
41
+ return `/agents/${encodeURIComponent(this.instanceId)}/v1`;
42
+ }
43
+ // ---------- AgentCard ----------
44
+ /**
45
+ * Fetch the well-known unsigned card. Callers that need verification should
46
+ * use `src/a2a/agent-card.ts` instead, which wraps this with JWS verification.
47
+ */
48
+ async getAgentCard() {
49
+ const paths = [
50
+ `/agents/${encodeURIComponent(this.instanceId)}/.well-known/agent-card.json`,
51
+ `${this.agentPath()}/extendedAgentCard`,
52
+ ];
53
+ let last404;
54
+ for (const path of paths) {
55
+ try {
56
+ const resp = await this.http.request(path, { method: 'GET' });
57
+ if (!resp.body) {
58
+ throw new A2AError(resp.status, path, {
59
+ type: 'about:blank',
60
+ title: 'Empty AgentCard response',
61
+ code: 'aiwg.empty_agent_card',
62
+ });
63
+ }
64
+ return resp.body;
65
+ }
66
+ catch (err) {
67
+ if (err instanceof A2AError && err.status === 404) {
68
+ last404 = err;
69
+ continue;
70
+ }
71
+ throw err;
72
+ }
73
+ }
74
+ throw last404 ?? new A2AError(404, paths[0], {
75
+ type: 'about:blank',
76
+ title: 'AgentCard not found',
77
+ code: 'aiwg.agent_card_not_found',
78
+ });
79
+ }
80
+ /** Fetch the extended AgentCard (authenticated view). */
81
+ async getExtendedAgentCard() {
82
+ const paths = [`${this.agentPath()}/extendedAgentCard`, `${this.agentPath()}/card`];
83
+ let last404;
84
+ for (const path of paths) {
85
+ try {
86
+ const resp = await this.http.request(path, { method: 'GET' });
87
+ if (!resp.body) {
88
+ throw new A2AError(resp.status, path, {
89
+ type: 'about:blank',
90
+ title: 'Empty extended AgentCard response',
91
+ code: 'aiwg.empty_agent_card',
92
+ });
93
+ }
94
+ return resp.body;
95
+ }
96
+ catch (err) {
97
+ if (err instanceof A2AError && err.status === 404) {
98
+ last404 = err;
99
+ continue;
100
+ }
101
+ throw err;
102
+ }
103
+ }
104
+ throw last404 ?? new A2AError(404, paths[0], {
105
+ type: 'about:blank',
106
+ title: 'Extended AgentCard not found',
107
+ code: 'aiwg.extended_agent_card_not_found',
108
+ });
109
+ }
110
+ // ---------- Messages ----------
111
+ /**
112
+ * Send a message; the executor creates a Task in state `submitted` and
113
+ * returns 202 + Task JSON. Idempotent on `message.messageId` — repeating
114
+ * with the same id + body returns the cached Task with
115
+ * `idempotentReplayed: true`.
116
+ */
117
+ async sendMessage(message, opts = {}) {
118
+ const path = `${this.agentPath()}/messages:send`;
119
+ const requestOptions = {
120
+ method: 'POST',
121
+ body: { message },
122
+ extensions: opts.extensions ? [...opts.extensions] : this.extensionSet,
123
+ };
124
+ if (opts.signal)
125
+ requestOptions.signal = opts.signal;
126
+ const resp = await this.http.request(path, requestOptions);
127
+ if (!resp.body) {
128
+ throw new A2AError(resp.status, path, {
129
+ type: 'about:blank',
130
+ title: 'Empty sendMessage response',
131
+ code: 'aiwg.empty_send_message',
132
+ });
133
+ }
134
+ return {
135
+ task: resp.body,
136
+ idempotentReplayed: resp.idempotentReplayed,
137
+ activatedExtensions: resp.activatedExtensions,
138
+ };
139
+ }
140
+ // ---------- Tasks ----------
141
+ async getTask(taskId, opts = {}) {
142
+ const path = `${this.agentPath()}/tasks/${encodeURIComponent(taskId)}`;
143
+ const requestOptions = { method: 'GET' };
144
+ if (opts.signal)
145
+ requestOptions.signal = opts.signal;
146
+ const resp = await this.http.request(path, requestOptions);
147
+ if (!resp.body) {
148
+ throw new A2AError(resp.status, path, {
149
+ type: 'about:blank',
150
+ title: 'Empty getTask response',
151
+ code: 'aiwg.empty_get_task',
152
+ });
153
+ }
154
+ return resp.body;
155
+ }
156
+ /** List tasks for this instance, optionally filtered by state. */
157
+ async listTasks(filter = {}) {
158
+ const params = new URLSearchParams();
159
+ if (filter.state)
160
+ params.set('state', filter.state);
161
+ if (filter.limit !== undefined)
162
+ params.set('limit', String(filter.limit));
163
+ const query = params.toString();
164
+ const path = `${this.agentPath()}/tasks${query ? '?' + query : ''}`;
165
+ const resp = await this.http.request(path, { method: 'GET' });
166
+ if (!resp.body)
167
+ return [];
168
+ return Array.isArray(resp.body) ? resp.body : resp.body.tasks ?? [];
169
+ }
170
+ async cancelTask(taskId, opts = {}) {
171
+ const path = `${this.agentPath()}/tasks/${encodeURIComponent(taskId)}/cancel`;
172
+ const requestOptions = {
173
+ method: 'POST',
174
+ body: {},
175
+ extensions: opts.extensions ? [...opts.extensions] : this.extensionSet,
176
+ };
177
+ if (opts.signal)
178
+ requestOptions.signal = opts.signal;
179
+ const resp = await this.http.request(path, requestOptions);
180
+ if (!resp.body) {
181
+ throw new A2AError(resp.status, path, {
182
+ type: 'about:blank',
183
+ title: 'Empty cancelTask response',
184
+ code: 'aiwg.empty_cancel_task',
185
+ });
186
+ }
187
+ return resp.body;
188
+ }
189
+ // ---------- Task subscription (SSE) ----------
190
+ /**
191
+ * Subscribe to a task's event stream over SSE. Returns an async iterator
192
+ * over `StreamEvent` payloads.
193
+ *
194
+ * The executor sends `event: <kind>` lines and `data: <json>` lines per
195
+ * the WHATWG event-stream format. We parse the multi-line frames and yield
196
+ * one `StreamEvent` per frame.
197
+ *
198
+ * Abort the iteration by aborting the supplied signal (or just stop
199
+ * consuming and call `return()` on the iterator — the underlying response
200
+ * body will be cancelled).
201
+ */
202
+ subscribeToTask(taskId, opts = {}) {
203
+ const params = new URLSearchParams();
204
+ if (opts.replayFromSeq !== undefined) {
205
+ params.set('replay_from', String(opts.replayFromSeq));
206
+ }
207
+ const query = params.toString();
208
+ const path = `${this.agentPath()}/tasks/${encodeURIComponent(taskId)}/subscribe${query ? '?' + query : ''}`;
209
+ const controller = new AbortController();
210
+ const externalSignal = opts.signal;
211
+ if (externalSignal) {
212
+ if (externalSignal.aborted)
213
+ controller.abort();
214
+ else
215
+ externalSignal.addEventListener('abort', () => controller.abort(), { once: true });
216
+ }
217
+ const http = this.http;
218
+ let cancelled = false;
219
+ async function* iterate() {
220
+ const resp = await http.request(path, {
221
+ method: 'GET',
222
+ headers: { accept: 'text/event-stream' },
223
+ signal: controller.signal,
224
+ raw: true,
225
+ });
226
+ const isStream = resp.headers.get('content-type')?.includes('text/event-stream');
227
+ if (!isStream) {
228
+ throw new A2AError(resp.status, path, {
229
+ type: 'about:blank',
230
+ title: 'Subscribe did not return an SSE stream',
231
+ code: 'aiwg.subscribe_not_sse',
232
+ });
233
+ }
234
+ if (!resp.rawBody) {
235
+ throw new A2AError(resp.status, path, {
236
+ type: 'about:blank',
237
+ title: 'SSE response had no body',
238
+ code: 'aiwg.subscribe_empty_body',
239
+ });
240
+ }
241
+ for await (const frame of parseEventStream(resp.rawBody)) {
242
+ if (cancelled)
243
+ return;
244
+ const event = decodeStreamEvent(frame);
245
+ if (event)
246
+ yield event;
247
+ }
248
+ }
249
+ const generator = iterate();
250
+ return {
251
+ [Symbol.asyncIterator]() {
252
+ return generator;
253
+ },
254
+ close() {
255
+ cancelled = true;
256
+ controller.abort();
257
+ },
258
+ };
259
+ }
260
+ // ---------- Push notification configs ----------
261
+ async createPushNotificationConfig(taskId, config) {
262
+ const path = `${this.agentPath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs`;
263
+ const resp = await this.http.request(path, {
264
+ method: 'POST',
265
+ body: config,
266
+ extensions: [...this.extensionSet],
267
+ });
268
+ if (!resp.body) {
269
+ throw new A2AError(resp.status, path, {
270
+ type: 'about:blank',
271
+ title: 'Empty createPushNotificationConfig response',
272
+ code: 'aiwg.empty_push_config_create',
273
+ });
274
+ }
275
+ return resp.body;
276
+ }
277
+ async getPushNotificationConfig(taskId, configId) {
278
+ const path = `${this.agentPath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs/${encodeURIComponent(configId)}`;
279
+ const resp = await this.http.request(path, { method: 'GET' });
280
+ if (!resp.body) {
281
+ throw new A2AError(resp.status, path, {
282
+ type: 'about:blank',
283
+ title: 'Empty getPushNotificationConfig response',
284
+ code: 'aiwg.empty_push_config_get',
285
+ });
286
+ }
287
+ return resp.body;
288
+ }
289
+ async deletePushNotificationConfig(taskId, configId) {
290
+ const path = `${this.agentPath()}/tasks/${encodeURIComponent(taskId)}/pushNotificationConfigs/${encodeURIComponent(configId)}`;
291
+ await this.http.request(path, {
292
+ method: 'DELETE',
293
+ extensions: [...this.extensionSet],
294
+ });
295
+ }
296
+ }
297
+ /**
298
+ * Parse a WHATWG event-stream over a ReadableStream<Uint8Array>.
299
+ * Yields one SseFrame per complete `event: + data: + blank line` block.
300
+ */
301
+ export async function* parseEventStream(stream) {
302
+ const decoder = new TextDecoder('utf-8');
303
+ const reader = stream.getReader();
304
+ let buffer = '';
305
+ let event;
306
+ let dataLines = [];
307
+ let id;
308
+ try {
309
+ while (true) {
310
+ const { value, done } = await reader.read();
311
+ if (done)
312
+ break;
313
+ buffer += decoder.decode(value, { stream: true });
314
+ let idx;
315
+ while ((idx = buffer.indexOf('\n')) >= 0) {
316
+ let line = buffer.slice(0, idx);
317
+ buffer = buffer.slice(idx + 1);
318
+ // Strip optional CR.
319
+ if (line.endsWith('\r'))
320
+ line = line.slice(0, -1);
321
+ if (line.length === 0) {
322
+ // End of frame.
323
+ if (dataLines.length > 0 || event !== undefined) {
324
+ const frame = { data: dataLines.join('\n') };
325
+ if (event !== undefined)
326
+ frame.event = event;
327
+ if (id !== undefined)
328
+ frame.id = id;
329
+ yield frame;
330
+ }
331
+ event = undefined;
332
+ dataLines = [];
333
+ id = undefined;
334
+ continue;
335
+ }
336
+ if (line.startsWith(':'))
337
+ continue; // comment
338
+ const colon = line.indexOf(':');
339
+ const field = colon >= 0 ? line.slice(0, colon) : line;
340
+ const valueStr = colon >= 0 ? line.slice(colon + 1).replace(/^ /, '') : '';
341
+ switch (field) {
342
+ case 'event':
343
+ event = valueStr;
344
+ break;
345
+ case 'data':
346
+ dataLines.push(valueStr);
347
+ break;
348
+ case 'id':
349
+ id = valueStr;
350
+ break;
351
+ // retry / unknown — ignored
352
+ }
353
+ }
354
+ }
355
+ }
356
+ finally {
357
+ reader.releaseLock();
358
+ }
359
+ }
360
+ function decodeStreamEvent(frame) {
361
+ if (!frame.data)
362
+ return null;
363
+ try {
364
+ const obj = JSON.parse(frame.data);
365
+ // Prefer the `kind` field if present (matches StreamEvent discriminator).
366
+ // Otherwise fall back to `event:` header from the frame.
367
+ const kindFromBody = typeof obj['kind'] === 'string' ? obj['kind'] : undefined;
368
+ const kind = kindFromBody ?? frame.event;
369
+ if (!kind)
370
+ return null;
371
+ switch (kind) {
372
+ case 'task-state':
373
+ if (obj['task']) {
374
+ return { kind: 'task-state', task: obj['task'] };
375
+ }
376
+ return null;
377
+ case 'status-update':
378
+ if (typeof obj['taskId'] === 'string' && obj['status']) {
379
+ const out = {
380
+ kind: 'status-update',
381
+ taskId: obj['taskId'],
382
+ status: obj['status'],
383
+ };
384
+ if (typeof obj['final'] === 'boolean') {
385
+ out.final = obj['final'];
386
+ }
387
+ return out;
388
+ }
389
+ return null;
390
+ case 'artifact-update':
391
+ if (typeof obj['taskId'] === 'string' && obj['artifact']) {
392
+ const out = {
393
+ kind: 'artifact-update',
394
+ taskId: obj['taskId'],
395
+ artifact: obj['artifact'],
396
+ };
397
+ if (typeof obj['append'] === 'boolean') {
398
+ out.append = obj['append'];
399
+ }
400
+ return out;
401
+ }
402
+ return null;
403
+ default:
404
+ return null;
405
+ }
406
+ }
407
+ catch {
408
+ return null;
409
+ }
410
+ }
411
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1,171 @@
1
+ // CLI HitlDeliveryAdapter — terminal-based operator I/O for hitl-prompt/v1.
2
+ //
3
+ // Consumes the `HitlPromptEnvelope` extracted by `extractHitlEnvelope`,
4
+ // renders it to stdout, prompts the operator on stdin, and returns a
5
+ // JsonValue ready to be wrapped by `buildHitlResponseMessage` and POSTed
6
+ // via `A2AClient.sendMessage`.
7
+ //
8
+ // Behaviors:
9
+ // - Renders the prompt verbatim (markdown allowed; we don't try to
10
+ // re-render — terminal users get the raw markdown which is readable).
11
+ // - Surfaces `response_schema` properties so the operator knows what
12
+ // shape to type.
13
+ // - Reads a single JSON line from stdin (multi-line input via repeated
14
+ // reads until a balanced JSON value is parsed).
15
+ // - Honors `signal` for cancellation (deadline expiry, task cancel).
16
+ //
17
+ // Not in scope for this adapter:
18
+ // - Validation against `response_schema` — the driver does that with
19
+ // Ajv (see `validateResponseWithAjv` in this module) so the adapter
20
+ // can stay framework-free and unit-testable with mock streams.
21
+ //
22
+ // @issue #1255
23
+ import * as readline from 'node:readline';
24
+ export class CliHitlDeliveryAdapter {
25
+ name = 'cli';
26
+ operatorId;
27
+ input;
28
+ output;
29
+ constructor(opts = {}) {
30
+ this.input = opts.input ?? process.stdin;
31
+ this.output = opts.output ?? process.stdout;
32
+ // errorOutput is reserved for future use (currently unused — kept on
33
+ // the options surface so callers can plug it in once we add stderr
34
+ // diagnostics from the adapter itself rather than the driver).
35
+ void opts.errorOutput;
36
+ this.operatorId =
37
+ opts.operatorId ??
38
+ process.env['USER'] ??
39
+ process.env['USERNAME'] ??
40
+ 'unknown-operator';
41
+ }
42
+ async collect(envelope, ctx) {
43
+ this.render(envelope, ctx);
44
+ if (ctx.signal?.aborted) {
45
+ throw new HitlAdapterAborted('signal aborted before reading response');
46
+ }
47
+ const raw = await this.readJsonFromStdin(ctx.signal);
48
+ if (raw === null) {
49
+ throw new HitlAdapterAborted('stdin closed without response');
50
+ }
51
+ return raw;
52
+ }
53
+ render(envelope, ctx) {
54
+ const lines = [];
55
+ lines.push('');
56
+ lines.push('━'.repeat(72));
57
+ lines.push('HITL prompt — operator response required');
58
+ lines.push('━'.repeat(72));
59
+ lines.push(`prompt_id: ${envelope.prompt_id}`);
60
+ if (ctx.taskId)
61
+ lines.push(`task_id: ${ctx.taskId}`);
62
+ if (ctx.contextId)
63
+ lines.push(`context: ${ctx.contextId}`);
64
+ if (envelope.deadline)
65
+ lines.push(`deadline: ${envelope.deadline}`);
66
+ if (envelope.allowed_responders && envelope.allowed_responders.length > 0) {
67
+ lines.push(`responders allowed: ${envelope.allowed_responders.join(', ')}`);
68
+ }
69
+ lines.push('');
70
+ lines.push('Prompt:');
71
+ lines.push('-'.repeat(72));
72
+ lines.push(envelope.prompt);
73
+ lines.push('-'.repeat(72));
74
+ lines.push('Expected response shape (response_schema):');
75
+ lines.push(JSON.stringify(envelope.response_schema, null, 2));
76
+ lines.push('');
77
+ lines.push('Enter response as a single JSON value (object, array, string, number, boolean, or null).');
78
+ lines.push('Press Ctrl-D after the closing bracket/brace if your JSON spans multiple lines.');
79
+ lines.push('');
80
+ this.output.write(lines.join('\n') + '\n');
81
+ }
82
+ /**
83
+ * Read JSON from `this.input` until either:
84
+ * - a balanced JSON value parses cleanly (success), or
85
+ * - the stream ends (returns null), or
86
+ * - the abort signal fires (throws HitlAdapterAborted).
87
+ *
88
+ * Allows the operator to type a multi-line JSON object — we accumulate
89
+ * lines and try parsing at each newline boundary.
90
+ */
91
+ readJsonFromStdin(signal) {
92
+ return new Promise((resolve, reject) => {
93
+ let aborted = false;
94
+ const rl = readline.createInterface({
95
+ input: this.input,
96
+ crlfDelay: Infinity,
97
+ terminal: false,
98
+ });
99
+ const abortListener = () => {
100
+ aborted = true;
101
+ rl.close();
102
+ reject(new HitlAdapterAborted('signal aborted while reading stdin'));
103
+ };
104
+ if (signal) {
105
+ if (signal.aborted) {
106
+ rl.close();
107
+ reject(new HitlAdapterAborted('signal aborted before reading'));
108
+ return;
109
+ }
110
+ signal.addEventListener('abort', abortListener, { once: true });
111
+ }
112
+ let buffer = '';
113
+ rl.on('line', (line) => {
114
+ buffer += (buffer ? '\n' : '') + line;
115
+ // Try parsing each time the operator hits enter — supports both
116
+ // one-line responses and multi-line pretty-printed JSON.
117
+ const parsed = tryParseJson(buffer);
118
+ if (parsed.ok) {
119
+ rl.close();
120
+ if (signal)
121
+ signal.removeEventListener('abort', abortListener);
122
+ resolve(parsed.value);
123
+ }
124
+ });
125
+ rl.on('close', () => {
126
+ if (aborted)
127
+ return;
128
+ if (signal)
129
+ signal.removeEventListener('abort', abortListener);
130
+ if (buffer.length === 0) {
131
+ resolve(null);
132
+ return;
133
+ }
134
+ const finalParse = tryParseJson(buffer);
135
+ if (finalParse.ok)
136
+ resolve(finalParse.value);
137
+ else
138
+ reject(new HitlAdapterParseError(`could not parse stdin as JSON: ${finalParse.error}`));
139
+ });
140
+ rl.on('error', (err) => {
141
+ if (signal)
142
+ signal.removeEventListener('abort', abortListener);
143
+ reject(err);
144
+ });
145
+ });
146
+ }
147
+ }
148
+ export class HitlAdapterAborted extends Error {
149
+ constructor(message) {
150
+ super(message);
151
+ this.name = 'HitlAdapterAborted';
152
+ }
153
+ }
154
+ export class HitlAdapterParseError extends Error {
155
+ constructor(message) {
156
+ super(message);
157
+ this.name = 'HitlAdapterParseError';
158
+ }
159
+ }
160
+ function tryParseJson(s) {
161
+ const trimmed = s.trim();
162
+ if (trimmed.length === 0)
163
+ return { ok: false, error: 'empty input' };
164
+ try {
165
+ return { ok: true, value: JSON.parse(trimmed) };
166
+ }
167
+ catch (e) {
168
+ return { ok: false, error: e.message };
169
+ }
170
+ }
171
+ //# sourceMappingURL=hitl-cli.js.map