@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -1
  3. package/bin/aiwg.mjs +349 -0
  4. package/dist/src/a2a/agent-card.js +145 -0
  5. package/dist/src/a2a/client.js +411 -0
  6. package/dist/src/a2a/hitl-cli.js +171 -0
  7. package/dist/src/a2a/hitl-driver.js +370 -0
  8. package/dist/src/a2a/hitl.js +181 -0
  9. package/dist/src/a2a/http.js +193 -0
  10. package/dist/src/a2a/jcs.js +128 -0
  11. package/dist/src/a2a/jws.js +187 -0
  12. package/dist/src/a2a/types.js +24 -0
  13. package/dist/src/a2a/webhook.js +240 -0
  14. package/dist/src/activity-log/cli.js +348 -0
  15. package/dist/src/activity-log/parser.js +81 -0
  16. package/dist/src/activity-log/types.js +50 -0
  17. package/dist/src/agents/agent-deployer.js +367 -0
  18. package/dist/src/agents/agent-packager.js +271 -0
  19. package/dist/src/agents/agent-validator.js +271 -0
  20. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  21. package/dist/src/agents/grounding/types.js +12 -0
  22. package/dist/src/agents/index.js +10 -0
  23. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  24. package/dist/src/agents/types.js +7 -0
  25. package/dist/src/api/index.d.ts +10 -0
  26. package/dist/src/api/index.js +10 -0
  27. package/dist/src/artifacts/address-parser.js +73 -0
  28. package/dist/src/artifacts/audit/cli.js +183 -0
  29. package/dist/src/artifacts/audit/drift.js +122 -0
  30. package/dist/src/artifacts/audit/types.js +12 -0
  31. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  32. package/dist/src/artifacts/backends/json-backend.js +129 -0
  33. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  34. package/dist/src/artifacts/browser-export.js +622 -0
  35. package/dist/src/artifacts/capability-resolver.js +94 -0
  36. package/dist/src/artifacts/checksum-manifest.js +91 -0
  37. package/dist/src/artifacts/citation-parser.js +162 -0
  38. package/dist/src/artifacts/cli.js +1486 -0
  39. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  40. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  41. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  42. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  43. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  44. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  45. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  46. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  47. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  48. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  49. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  51. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  52. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  53. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  54. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  55. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  56. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  57. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  58. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  60. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  61. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  62. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  63. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  64. package/dist/src/artifacts/corpus-views/build.js +126 -0
  65. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  66. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  67. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  68. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  69. package/dist/src/artifacts/dep-graph.js +173 -0
  70. package/dist/src/artifacts/discover-facets.js +375 -0
  71. package/dist/src/artifacts/embedding-index.js +354 -0
  72. package/dist/src/artifacts/enrichment/cli.js +240 -0
  73. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  74. package/dist/src/artifacts/enrichment/store.js +90 -0
  75. package/dist/src/artifacts/enrichment/types.js +12 -0
  76. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  77. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  78. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  79. package/dist/src/artifacts/fulltext.js +108 -0
  80. package/dist/src/artifacts/graph-backend.js +51 -0
  81. package/dist/src/artifacts/graph-query.js +247 -0
  82. package/dist/src/artifacts/hybrid-query.js +225 -0
  83. package/dist/src/artifacts/index-builder.js +1089 -0
  84. package/dist/src/artifacts/index-reader.js +112 -0
  85. package/dist/src/artifacts/index-status.js +193 -0
  86. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  87. package/dist/src/artifacts/move.js +154 -0
  88. package/dist/src/artifacts/operational-state.js +239 -0
  89. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  90. package/dist/src/artifacts/query-engine.js +1955 -0
  91. package/dist/src/artifacts/source-graph.js +529 -0
  92. package/dist/src/artifacts/stats.js +169 -0
  93. package/dist/src/artifacts/types.js +606 -0
  94. package/dist/src/artifacts/views/cli.js +293 -0
  95. package/dist/src/artifacts/views/definition.js +170 -0
  96. package/dist/src/artifacts/views/store.js +149 -0
  97. package/dist/src/artifacts/views/types.js +8 -0
  98. package/dist/src/artifacts/watcher.js +255 -0
  99. package/dist/src/catalog/builtin-models.json +636 -0
  100. package/dist/src/catalog/cli.js +228 -0
  101. package/dist/src/catalog/cli.mjs +289 -0
  102. package/dist/src/catalog/index.js +15 -0
  103. package/dist/src/catalog/loader.js +217 -0
  104. package/dist/src/catalog/loader.mjs +251 -0
  105. package/dist/src/catalog/sources.json +41 -0
  106. package/dist/src/catalog/types.js +8 -0
  107. package/dist/src/channel/manager.mjs +504 -0
  108. package/dist/src/cli/agent-spawn.js +178 -0
  109. package/dist/src/cli/cli-extension-loader.js +245 -0
  110. package/dist/src/cli/command-log.js +275 -0
  111. package/dist/src/cli/config-loader.js +232 -0
  112. package/dist/src/cli/env.js +82 -0
  113. package/dist/src/cli/errors.js +150 -0
  114. package/dist/src/cli/find-package-root.js +40 -0
  115. package/dist/src/cli/git-hooks.js +250 -0
  116. package/dist/src/cli/handlers/agentcard.js +206 -0
  117. package/dist/src/cli/handlers/artifacts.js +76 -0
  118. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  119. package/dist/src/cli/handlers/cockpit.js +137 -0
  120. package/dist/src/cli/handlers/command-log.js +37 -0
  121. package/dist/src/cli/handlers/daemon.js +59 -0
  122. package/dist/src/cli/handlers/diagnose.js +300 -0
  123. package/dist/src/cli/handlers/execution-mode.js +105 -0
  124. package/dist/src/cli/handlers/feedback.js +341 -0
  125. package/dist/src/cli/handlers/help.js +147 -0
  126. package/dist/src/cli/handlers/index.js +302 -0
  127. package/dist/src/cli/handlers/init.js +179 -0
  128. package/dist/src/cli/handlers/install.js +129 -0
  129. package/dist/src/cli/handlers/issues.js +46 -0
  130. package/dist/src/cli/handlers/lint.js +42 -0
  131. package/dist/src/cli/handlers/local-executor.js +315 -0
  132. package/dist/src/cli/handlers/marketplace.js +168 -0
  133. package/dist/src/cli/handlers/mc.js +1010 -0
  134. package/dist/src/cli/handlers/models.js +352 -0
  135. package/dist/src/cli/handlers/packages.js +155 -0
  136. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  137. package/dist/src/cli/handlers/ralph.js +575 -0
  138. package/dist/src/cli/handlers/refresh.js +432 -0
  139. package/dist/src/cli/handlers/regenerate.js +336 -0
  140. package/dist/src/cli/handlers/repo-access.js +109 -0
  141. package/dist/src/cli/handlers/run.js +165 -0
  142. package/dist/src/cli/handlers/runtime-info.js +301 -0
  143. package/dist/src/cli/handlers/sandbox.js +197 -0
  144. package/dist/src/cli/handlers/scaffolding.js +149 -0
  145. package/dist/src/cli/handlers/script-runner.js +121 -0
  146. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  147. package/dist/src/cli/handlers/serve.js +1835 -0
  148. package/dist/src/cli/handlers/session.js +348 -0
  149. package/dist/src/cli/handlers/setup.js +440 -0
  150. package/dist/src/cli/handlers/skill-lint.js +367 -0
  151. package/dist/src/cli/handlers/skill-usage.js +74 -0
  152. package/dist/src/cli/handlers/steward.js +567 -0
  153. package/dist/src/cli/handlers/subcommands.js +1702 -0
  154. package/dist/src/cli/handlers/team.js +337 -0
  155. package/dist/src/cli/handlers/types.js +11 -0
  156. package/dist/src/cli/handlers/use.js +2772 -0
  157. package/dist/src/cli/handlers/utilities.js +703 -0
  158. package/dist/src/cli/handlers/version.js +134 -0
  159. package/dist/src/cli/handlers/workspace-context.js +93 -0
  160. package/dist/src/cli/handlers/workspace.js +126 -0
  161. package/dist/src/cli/help-generator.js +178 -0
  162. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  163. package/dist/src/cli/hooks/executor.js +96 -0
  164. package/dist/src/cli/hooks/index.js +15 -0
  165. package/dist/src/cli/hooks/registry.js +143 -0
  166. package/dist/src/cli/hooks/types.js +13 -0
  167. package/dist/src/cli/log.js +492 -0
  168. package/dist/src/cli/project-isolation/detect.js +70 -0
  169. package/dist/src/cli/project-isolation/index.js +7 -0
  170. package/dist/src/cli/project-isolation/signals.js +17 -0
  171. package/dist/src/cli/project-isolation/warning.js +102 -0
  172. package/dist/src/cli/prompt-utils.js +155 -0
  173. package/dist/src/cli/provider-deployment-plan.js +126 -0
  174. package/dist/src/cli/provider-resolution.js +119 -0
  175. package/dist/src/cli/router.js +305 -0
  176. package/dist/src/cli/scope-resolver.js +392 -0
  177. package/dist/src/cli/skill-usage.js +616 -0
  178. package/dist/src/cli/ui.js +224 -0
  179. package/dist/src/cli/watch-service.js +203 -0
  180. package/dist/src/cli/workflow-orchestrator.js +478 -0
  181. package/dist/src/cli/workspace-signals.js +321 -0
  182. package/dist/src/community/footer.js +14 -0
  183. package/dist/src/community/links.js +123 -0
  184. package/dist/src/community/milestones.js +46 -0
  185. package/dist/src/community/nudge-policy.js +93 -0
  186. package/dist/src/config/aiwg-config.js +883 -0
  187. package/dist/src/config/cli.js +703 -0
  188. package/dist/src/config/gitignore.js +156 -0
  189. package/dist/src/config/project-artifacts.js +76 -0
  190. package/dist/src/config/user-config.js +428 -0
  191. package/dist/src/config/user-registry.js +127 -0
  192. package/dist/src/config/workspace.js +276 -0
  193. package/dist/src/contributors/detect.js +39 -0
  194. package/dist/src/contributors/discover.js +172 -0
  195. package/dist/src/contributors/heuristic.js +186 -0
  196. package/dist/src/contributors/index.js +11 -0
  197. package/dist/src/contributors/types.js +13 -0
  198. package/dist/src/contributors/validation.js +116 -0
  199. package/dist/src/data/community.schema.json +43 -0
  200. package/dist/src/data/community.yaml +16 -0
  201. package/dist/src/extensions/capability-index.js +270 -0
  202. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  203. package/dist/src/extensions/commands/definitions.js +3485 -0
  204. package/dist/src/extensions/deployment-registration.js +463 -0
  205. package/dist/src/extensions/index.js +22 -0
  206. package/dist/src/extensions/loader.js +132 -0
  207. package/dist/src/extensions/managed-marker.js +100 -0
  208. package/dist/src/extensions/manifest.js +196 -0
  209. package/dist/src/extensions/project-local-activity.js +114 -0
  210. package/dist/src/extensions/project-local-discovery.js +261 -0
  211. package/dist/src/extensions/project-local-doctor.js +281 -0
  212. package/dist/src/extensions/project-local-gitignore.js +176 -0
  213. package/dist/src/extensions/project-local-paths.js +121 -0
  214. package/dist/src/extensions/project-local-promote.js +218 -0
  215. package/dist/src/extensions/project-local-remove.js +373 -0
  216. package/dist/src/extensions/project-local-scaffold.js +252 -0
  217. package/dist/src/extensions/project-quickref.js +291 -0
  218. package/dist/src/extensions/registry.js +368 -0
  219. package/dist/src/extensions/shadow-resolver.js +271 -0
  220. package/dist/src/extensions/types.js +86 -0
  221. package/dist/src/extensions/upstream-registry.js +195 -0
  222. package/dist/src/extensions/validation.js +631 -0
  223. package/dist/src/features/catalog.js +88 -0
  224. package/dist/src/features/cli.js +197 -0
  225. package/dist/src/features/installer.js +57 -0
  226. package/dist/src/features/paths.js +14 -0
  227. package/dist/src/features/runtime.js +21 -0
  228. package/dist/src/features/status.js +134 -0
  229. package/dist/src/hooks/laziness-detection.js +532 -0
  230. package/dist/src/intake/git-history-analyzer.js +486 -0
  231. package/dist/src/intake/index.js +9 -0
  232. package/dist/src/issues/cli.js +327 -0
  233. package/dist/src/issues/index.js +5 -0
  234. package/dist/src/issues/live.js +154 -0
  235. package/dist/src/issues/local.js +666 -0
  236. package/dist/src/issues/sync.js +143 -0
  237. package/dist/src/issues/types.js +2 -0
  238. package/dist/src/issues/workflows.js +164 -0
  239. package/dist/src/kb/cli.js +173 -0
  240. package/dist/src/lint/cli.js +171 -0
  241. package/dist/src/lint/loader.js +225 -0
  242. package/dist/src/lint/reporters.js +141 -0
  243. package/dist/src/lint/runner.js +364 -0
  244. package/dist/src/lint/types.js +10 -0
  245. package/dist/src/marketplace/cache.js +110 -0
  246. package/dist/src/marketplace/identifier.js +63 -0
  247. package/dist/src/marketplace/registry.js +36 -0
  248. package/dist/src/marketplace/sources/clawhub.js +53 -0
  249. package/dist/src/marketplace/sources/git.js +45 -0
  250. package/dist/src/marketplace/types.js +9 -0
  251. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  252. package/dist/src/mcp/cli.mjs +1197 -0
  253. package/dist/src/mcp/elicitation.mjs +149 -0
  254. package/dist/src/mcp/helpers.mjs +287 -0
  255. package/dist/src/mcp/index.mjs +11 -0
  256. package/dist/src/mcp/profiles.js +263 -0
  257. package/dist/src/mcp/profiles.mjs +360 -0
  258. package/dist/src/mcp/registry.js +376 -0
  259. package/dist/src/mcp/registry.mjs +387 -0
  260. package/dist/src/mcp/server.mjs +633 -0
  261. package/dist/src/mcp/test-simple.mjs +271 -0
  262. package/dist/src/mcp/tools/command-run.mjs +101 -0
  263. package/dist/src/mcp/tools/discovery.mjs +291 -0
  264. package/dist/src/mcp/tools/interaction.mjs +87 -0
  265. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  266. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  267. package/dist/src/memory/cli.js +166 -0
  268. package/dist/src/memory/project-registry.js +282 -0
  269. package/dist/src/metrics/artifact-metrics.js +184 -0
  270. package/dist/src/metrics/context-budget.js +174 -0
  271. package/dist/src/metrics/token-counter.js +133 -0
  272. package/dist/src/models/config-loader.js +228 -0
  273. package/dist/src/models/index.js +22 -0
  274. package/dist/src/models/model-capabilities.v1.json +120 -0
  275. package/dist/src/models/model-catalog.v1.json +96 -0
  276. package/dist/src/models/model-discovery.js +521 -0
  277. package/dist/src/models/provider-models.js +73 -0
  278. package/dist/src/models/provider-policy.js +273 -0
  279. package/dist/src/models/resolver.js +245 -0
  280. package/dist/src/models/router.js +70 -0
  281. package/dist/src/models/types.js +8 -0
  282. package/dist/src/models/wrapper-deployment.js +178 -0
  283. package/dist/src/models/wrapper-route.js +54 -0
  284. package/dist/src/ops/cli.js +268 -0
  285. package/dist/src/ops/registry.js +623 -0
  286. package/dist/src/packages/adapters/clawhub.js +113 -0
  287. package/dist/src/packages/adapters/git.js +153 -0
  288. package/dist/src/packages/adapters/gitea.js +93 -0
  289. package/dist/src/packages/adapters/github.js +69 -0
  290. package/dist/src/packages/adapters/local-cache.js +89 -0
  291. package/dist/src/packages/package-registry.js +143 -0
  292. package/dist/src/packages/registry.js +238 -0
  293. package/dist/src/packages/types.js +11 -0
  294. package/dist/src/plugin/cross-framework-ops.js +475 -0
  295. package/dist/src/plugin/framework-config-loader.js +235 -0
  296. package/dist/src/plugin/framework-detector.js +186 -0
  297. package/dist/src/plugin/framework-isolator.js +341 -0
  298. package/dist/src/plugin/framework-migration.js +371 -0
  299. package/dist/src/plugin/metadata-validator.js +906 -0
  300. package/dist/src/plugin/plugin-installer.js +436 -0
  301. package/dist/src/plugin/plugin-status.js +369 -0
  302. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  303. package/dist/src/plugin/registry-validator.js +344 -0
  304. package/dist/src/plugin/skill-command-translator.js +415 -0
  305. package/dist/src/plugin/workspace-creator.js +189 -0
  306. package/dist/src/plugin/workspace-migrator.js +821 -0
  307. package/dist/src/policy/authorization.js +390 -0
  308. package/dist/src/policy/repo-access.js +215 -0
  309. package/dist/src/provenance/cli.js +16 -0
  310. package/dist/src/providers/capability-matrix.js +300 -0
  311. package/dist/src/providers/capability-matrix.yaml +514 -0
  312. package/dist/src/providers/provider-definitions.js +977 -0
  313. package/dist/src/providers/provider-definitions.mjs +159 -0
  314. package/dist/src/providers/provider-inventory.js +169 -0
  315. package/dist/src/quality/feedback-ab.js +174 -0
  316. package/dist/src/quality/feedback-collector.js +176 -0
  317. package/dist/src/quality/feedback-tracker.js +123 -0
  318. package/dist/src/quality/patterns/adr.json +24 -0
  319. package/dist/src/quality/patterns/sad.json +24 -0
  320. package/dist/src/quality/patterns/test-plan.json +24 -0
  321. package/dist/src/quality/patterns/use-case.json +24 -0
  322. package/dist/src/quality/scoring.js +157 -0
  323. package/dist/src/reflections/cli.js +15 -0
  324. package/dist/src/release/plan.js +139 -0
  325. package/dist/src/research/cache/manager.js +227 -0
  326. package/dist/src/research/clients/arxiv.js +156 -0
  327. package/dist/src/research/clients/base.js +197 -0
  328. package/dist/src/research/clients/crossref.js +112 -0
  329. package/dist/src/research/clients/semantic-scholar.js +126 -0
  330. package/dist/src/research/clients/unpaywall.js +87 -0
  331. package/dist/src/research/index.js +14 -0
  332. package/dist/src/research/query-cli.js +336 -0
  333. package/dist/src/research/services/acquisition.js +313 -0
  334. package/dist/src/research/services/archival.js +225 -0
  335. package/dist/src/research/services/citation.js +279 -0
  336. package/dist/src/research/services/discovery.js +243 -0
  337. package/dist/src/research/services/documentation.js +269 -0
  338. package/dist/src/research/services/index.js +14 -0
  339. package/dist/src/research/services/provenance.js +279 -0
  340. package/dist/src/research/services/quality.js +370 -0
  341. package/dist/src/research/services/types.js +7 -0
  342. package/dist/src/research/storage-cli.js +20 -0
  343. package/dist/src/research/types.js +47 -0
  344. package/dist/src/resources/index.d.ts +2 -0
  345. package/dist/src/resources/index.js +2 -0
  346. package/dist/src/resources/web-release.d.ts +89 -0
  347. package/dist/src/resources/web-release.js +886 -0
  348. package/dist/src/rlm/cache/cli.js +162 -0
  349. package/dist/src/rlm/cache/hash.js +35 -0
  350. package/dist/src/rlm/cache/store.js +170 -0
  351. package/dist/src/rlm/cache/types.js +8 -0
  352. package/dist/src/rlm/cli.js +650 -0
  353. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  354. package/dist/src/serve/agent-router.js +205 -0
  355. package/dist/src/serve/dispatch-router.js +171 -0
  356. package/dist/src/serve/executor-registry.js +715 -0
  357. package/dist/src/serve/mission-conductor.js +177 -0
  358. package/dist/src/serve/orchestrator-adapter.js +113 -0
  359. package/dist/src/serve/orchestrator-override.js +94 -0
  360. package/dist/src/serve/orchestrator-pty.js +133 -0
  361. package/dist/src/serve/pty-bridge.js +799 -0
  362. package/dist/src/serve/sandbox-registry.js +832 -0
  363. package/dist/src/serve/screen-reader.js +228 -0
  364. package/dist/src/serve/stack-adapters.js +68 -0
  365. package/dist/src/serve/telemetry.js +143 -0
  366. package/dist/src/skills/adapters/clawhub.js +250 -0
  367. package/dist/src/skills/adapters/local.js +335 -0
  368. package/dist/src/skills/adapters/openclaw.js +316 -0
  369. package/dist/src/skills/cli.js +334 -0
  370. package/dist/src/skills/registry.js +117 -0
  371. package/dist/src/skills/run.js +259 -0
  372. package/dist/src/skills/runtime.js +94 -0
  373. package/dist/src/skills/types.js +10 -0
  374. package/dist/src/smiths/agentsmith/demo.js +116 -0
  375. package/dist/src/smiths/agentsmith/examples.js +300 -0
  376. package/dist/src/smiths/agentsmith/generator.js +503 -0
  377. package/dist/src/smiths/agentsmith/index.js +11 -0
  378. package/dist/src/smiths/agentsmith/types.js +8 -0
  379. package/dist/src/smiths/commandsmith/example.js +220 -0
  380. package/dist/src/smiths/commandsmith/generator.js +288 -0
  381. package/dist/src/smiths/commandsmith/index.js +41 -0
  382. package/dist/src/smiths/commandsmith/templates.js +296 -0
  383. package/dist/src/smiths/commandsmith/types.js +7 -0
  384. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  385. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  386. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  387. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  388. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  389. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  390. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  391. package/dist/src/smiths/context-pipeline/index.js +30 -0
  392. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  393. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  394. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  395. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  396. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  397. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  398. package/dist/src/smiths/context-pipeline/types.js +23 -0
  399. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  400. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  401. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  402. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  403. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  404. package/dist/src/smiths/hook-bridge/index.js +79 -0
  405. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  406. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  407. package/dist/src/smiths/hook-bridge/types.js +31 -0
  408. package/dist/src/smiths/index.js +39 -0
  409. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  410. package/dist/src/smiths/mcpsmith/example.js +119 -0
  411. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  412. package/dist/src/smiths/mcpsmith/index.js +17 -0
  413. package/dist/src/smiths/mcpsmith/types.js +10 -0
  414. package/dist/src/smiths/platform-paths.js +101 -0
  415. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  416. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  417. package/dist/src/smiths/skillsmith/demo.js +83 -0
  418. package/dist/src/smiths/skillsmith/examples.js +161 -0
  419. package/dist/src/smiths/skillsmith/generator.js +316 -0
  420. package/dist/src/smiths/skillsmith/index.js +12 -0
  421. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  422. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  423. package/dist/src/smiths/skillsmith/types.js +9 -0
  424. package/dist/src/smiths/toolsmith/index.js +10 -0
  425. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  426. package/dist/src/smiths/toolsmith/types.js +8 -0
  427. package/dist/src/storage/backends/fortemi.js +227 -0
  428. package/dist/src/storage/backends/fs.js +134 -0
  429. package/dist/src/storage/backends/logseq.js +309 -0
  430. package/dist/src/storage/backends/obsidian.js +233 -0
  431. package/dist/src/storage/cli.js +468 -0
  432. package/dist/src/storage/config.js +272 -0
  433. package/dist/src/storage/index.js +108 -0
  434. package/dist/src/storage/subsystem-cli.js +201 -0
  435. package/dist/src/storage/types.js +33 -0
  436. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  437. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  438. package/dist/src/testing/corpus/index.js +10 -0
  439. package/dist/src/testing/fixtures/index.js +9 -0
  440. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  441. package/dist/src/testing/generators/index.js +11 -0
  442. package/dist/src/testing/generators/test-case-generator.js +393 -0
  443. package/dist/src/testing/generators/test-code-generator.js +384 -0
  444. package/dist/src/testing/generators/use-case-parser.js +325 -0
  445. package/dist/src/testing/index.js +11 -0
  446. package/dist/src/tracker/capability-protocol.js +118 -0
  447. package/dist/src/update/checker.mjs +396 -0
  448. package/dist/src/update/notifier.mjs +235 -0
  449. package/dist/src/writing/content-diversifier.js +804 -0
  450. package/dist/src/writing/example-generator.js +959 -0
  451. package/dist/src/writing/example-templates.js +99 -0
  452. package/dist/src/writing/pattern-library.js +486 -0
  453. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  454. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  455. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  456. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  457. package/dist/src/writing/patterns/transition-words.json +1285 -0
  458. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  459. package/dist/src/writing/prompt-optimizer.js +660 -0
  460. package/dist/src/writing/prompt-templates.js +583 -0
  461. package/dist/src/writing/scoring-config-loader.js +168 -0
  462. package/dist/src/writing/validation-engine.js +595 -0
  463. package/dist/src/writing/validation-rules.js +380 -0
  464. package/dist/src/writing/voice-analyzer.js +439 -0
  465. package/dist/src/writing/voice-calibration.js +661 -0
  466. package/dist/src/writing/voice-profiles.json +588 -0
  467. package/package.json +65 -9
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Mission Conductor (#1546).
3
+ *
4
+ * A Mission is the cross-stack dynamic-orchestration primitive (naming per
5
+ * #1536): one durable, audited conductor fans worker cycles out across
6
+ * *heterogeneous* agentic stacks (Claude ↔ Codex ↔ …) and aggregates results.
7
+ * In-stack primitives (Claude's Workflow tool, Codex `/goal`) are the in-stack
8
+ * WORKERS a Mission dispatches to — not substitutes for the conductor.
9
+ *
10
+ * This builds on the proven substrate (no new transport):
11
+ * - `routeMission()` (agent-router.ts) selects an executor by `ExecutorFilter`.
12
+ * - executors advertise their stack via the `runtime:<name>` capability
13
+ * (slice-1 convention; see agent-router cross-stack test).
14
+ * - StackAdapter (stack-adapters.ts) maps a worker cycle onto a stack's
15
+ * native primitive and supplies the `runtime:<name>` token to filter on.
16
+ *
17
+ * RETAINED-OWNERSHIP INVARIANT (non-negotiable, #1537 ADR, cross-stack):
18
+ * the conductor owns the bookkeeping — activity log, best-output selection,
19
+ * cost tracking, crash-resilient checkpoint/resume — IDENTICALLY regardless of
20
+ * which stack each worker ran on. The native primitive drives worker mechanism
21
+ * only; it never owns gates, durability, or provenance.
22
+ *
23
+ * @implements #1546
24
+ */
25
+ import { routeMission } from './agent-router.js';
26
+ import { StackAdapterRegistry } from './stack-adapters.js';
27
+ const defaultRunWorker = () => ({ output: undefined, cost: 0 });
28
+ const defaultScore = (r) => (r.output ? r.output.length : 0);
29
+ /**
30
+ * The cross-stack Mission conductor. Decomposes a Mission into worker cycles,
31
+ * dispatches each to an executor of the chosen runtime via `routeMission`, and
32
+ * retains all bookkeeping conductor-side regardless of stack.
33
+ */
34
+ export class MissionConductor {
35
+ adapters;
36
+ runWorker;
37
+ scoreOutput;
38
+ constructor(opts = {}) {
39
+ this.adapters = opts.adapters ?? new StackAdapterRegistry();
40
+ this.runWorker = opts.runWorker ?? defaultRunWorker;
41
+ this.scoreOutput = opts.scoreOutput ?? defaultScore;
42
+ }
43
+ /**
44
+ * Conduct a Mission across the given executor pool. Returns the ledger.
45
+ * `resumeFrom` (if given) skips cycles already marked completed — the
46
+ * crash-resilient resume path; their prior results are carried forward.
47
+ */
48
+ async conduct(plan, pool, resumeFrom) {
49
+ const carried = new Map();
50
+ if (resumeFrom) {
51
+ for (const c of resumeFrom.cycles) {
52
+ if (resumeFrom.checkpoint.completed.includes(c.cycleId))
53
+ carried.set(c.cycleId, c);
54
+ }
55
+ }
56
+ const ledger = {
57
+ missionId: plan.missionId,
58
+ goal: plan.goal,
59
+ completionCriterion: plan.completionCriterion,
60
+ activityLog: [],
61
+ cycles: [],
62
+ totalCost: 0,
63
+ checkpoint: { completed: [], pending: [], failed: [] },
64
+ runtimesUsed: [],
65
+ };
66
+ ledger.activityLog.push(`mission ${plan.missionId} start — goal: ${plan.goal} — ${plan.cycles.length} cycle(s)` +
67
+ (resumeFrom ? ` (resume: ${carried.size} carried)` : ''));
68
+ for (const cycle of plan.cycles) {
69
+ // Resume: carry a previously-completed cycle forward, identical bookkeeping.
70
+ const prior = carried.get(cycle.id);
71
+ if (prior) {
72
+ ledger.cycles.push(prior);
73
+ ledger.checkpoint.completed.push(cycle.id);
74
+ ledger.totalCost += prior.cost;
75
+ if (prior.executorId)
76
+ ledger.activityLog.push(`cycle ${cycle.id} resumed (was complete on ${prior.runtime})`);
77
+ continue;
78
+ }
79
+ const adapter = this.adapters.get(cycle.runtime);
80
+ if (!adapter) {
81
+ // No silent drop — record the unroutable cycle (vague-discretion / anti-laziness).
82
+ const result = {
83
+ cycleId: cycle.id,
84
+ runtime: cycle.runtime,
85
+ primitive: '(none)',
86
+ routed: false,
87
+ reason: `no stack adapter registered for runtime '${cycle.runtime}'`,
88
+ cost: 0,
89
+ };
90
+ ledger.cycles.push(result);
91
+ ledger.checkpoint.failed.push(cycle.id);
92
+ ledger.activityLog.push(`cycle ${cycle.id} UNROUTABLE — ${result.reason}`);
93
+ continue;
94
+ }
95
+ const filter = {
96
+ capabilities: [adapter.runtimeCapability, ...(cycle.requiredCapabilities ?? [])],
97
+ };
98
+ const routing = routeMission(pool, filter, cycle.longRunning ?? false);
99
+ if (!routing.selected) {
100
+ const result = {
101
+ cycleId: cycle.id,
102
+ runtime: cycle.runtime,
103
+ primitive: adapter.primitive,
104
+ routed: false,
105
+ reason: `no connected executor advertises ${filter.capabilities.join(', ')}`,
106
+ cost: 0,
107
+ };
108
+ ledger.cycles.push(result);
109
+ ledger.checkpoint.failed.push(cycle.id);
110
+ ledger.activityLog.push(`cycle ${cycle.id} UNASSIGNED — ${result.reason}`);
111
+ continue;
112
+ }
113
+ const executor = routing.selected.executor;
114
+ const invocation = adapter.invoke(cycle.prompt);
115
+ ledger.activityLog.push(`cycle ${cycle.id} → executor ${executor.name} (${executor.executorId}) on ${cycle.runtime}: ${invocation.describe}`);
116
+ let output;
117
+ let cost = 0;
118
+ try {
119
+ const ran = await this.runWorker(cycle, executor, invocation);
120
+ output = ran.output;
121
+ cost = ran.cost ?? 0;
122
+ }
123
+ catch (err) {
124
+ const result = {
125
+ cycleId: cycle.id,
126
+ runtime: cycle.runtime,
127
+ primitive: adapter.primitive,
128
+ executorId: executor.executorId,
129
+ routed: true,
130
+ reason: `worker error: ${err instanceof Error ? err.message : String(err)}`,
131
+ cost: 0,
132
+ };
133
+ ledger.cycles.push(result);
134
+ ledger.checkpoint.failed.push(cycle.id);
135
+ ledger.activityLog.push(`cycle ${cycle.id} FAILED on ${cycle.runtime} — ${result.reason}`);
136
+ continue;
137
+ }
138
+ const result = {
139
+ cycleId: cycle.id,
140
+ runtime: cycle.runtime,
141
+ primitive: adapter.primitive,
142
+ executorId: executor.executorId,
143
+ routed: true,
144
+ reason: routing.selected.matchReason,
145
+ output,
146
+ cost,
147
+ };
148
+ ledger.cycles.push(result);
149
+ ledger.checkpoint.completed.push(cycle.id);
150
+ ledger.totalCost += cost;
151
+ ledger.activityLog.push(`cycle ${cycle.id} done on ${cycle.runtime} (cost ${cost})`);
152
+ }
153
+ // Pending = cycles neither completed nor failed (none, here — full pass).
154
+ const accounted = new Set([...ledger.checkpoint.completed, ...ledger.checkpoint.failed]);
155
+ ledger.checkpoint.pending = plan.cycles.map((c) => c.id).filter((id) => !accounted.has(id));
156
+ // Cross-stack aggregation: distinct runtimes that actually ran a worker.
157
+ ledger.runtimesUsed = [
158
+ ...new Set(ledger.cycles.filter((c) => c.routed).map((c) => c.runtime)),
159
+ ];
160
+ // Best-output selection (REF-015) — conductor-side, across stacks.
161
+ let best;
162
+ for (const c of ledger.cycles) {
163
+ if (!c.output)
164
+ continue;
165
+ const score = this.scoreOutput(c);
166
+ if (!best || score > best.score) {
167
+ best = { cycleId: c.cycleId, runtime: c.runtime, output: c.output, score };
168
+ }
169
+ }
170
+ ledger.bestOutput = best;
171
+ ledger.activityLog.push(`mission ${plan.missionId} end — completed ${ledger.checkpoint.completed.length}, ` +
172
+ `failed ${ledger.checkpoint.failed.length}, runtimes [${ledger.runtimesUsed.join(', ')}], ` +
173
+ `total cost ${ledger.totalCost}`);
174
+ return ledger;
175
+ }
176
+ }
177
+ //# sourceMappingURL=mission-conductor.js.map
@@ -0,0 +1,113 @@
1
+ /**
2
+ * OrchestratorAdapter — wires ScreenReader + OrchestratorPTY to live PTY sessions
3
+ *
4
+ * Provides factory functions that connect the orchestrator assess loop to a
5
+ * real PTY session from the WebSocket bridge:
6
+ *
7
+ * createScreenReaderFromSession — attach ScreenReader to a PtySession's output
8
+ * createSessionAdapter — implement OrchestratorSession over PtyLike
9
+ * attachOrchestrator — full attach: reader + adapter + orchestrator
10
+ *
11
+ * @issue #756
12
+ * @see src/serve/screen-reader.ts — ScreenReader / ScreenState
13
+ * @see src/serve/orchestrator-pty.ts — OrchestratorPTY / OrchestratorSession
14
+ * @see src/serve/pty-bridge.ts — PtySession / PtyLike
15
+ */
16
+ import { ScreenReader } from './screen-reader.js';
17
+ import { OrchestratorPTY } from './orchestrator-pty.js';
18
+ // ============================================================
19
+ // createScreenReaderFromSession
20
+ // ============================================================
21
+ /**
22
+ * Creates a ScreenReader that consumes data from a PtySession's output.
23
+ *
24
+ * - Replays session.outputBuffer immediately so the reader has current screen
25
+ * state from the moment it is constructed.
26
+ * - If the session's PTY is live, registers an onData listener so subsequent
27
+ * output continues to flow into the reader.
28
+ *
29
+ * Callers are responsible for calling reader.dispose() when done.
30
+ */
31
+ export function createScreenReaderFromSession(session, opts) {
32
+ const reader = new ScreenReader({
33
+ rows: opts?.rows ?? 24,
34
+ cols: opts?.cols ?? 80,
35
+ });
36
+ // Replay any buffered output so the orchestrator starts with current state
37
+ if (session.outputBuffer) {
38
+ reader.write(session.outputBuffer);
39
+ }
40
+ // Attach to live PTY output when a PTY is running
41
+ if (session.pty) {
42
+ session.pty.onData((data) => {
43
+ reader.write(data);
44
+ });
45
+ }
46
+ return reader;
47
+ }
48
+ // ============================================================
49
+ // createSessionAdapter
50
+ // ============================================================
51
+ /**
52
+ * Creates an OrchestratorSession adapter that writes to a PtySession's PTY stdin.
53
+ *
54
+ * Translates orchestrator write() and signal() calls into direct PTY operations.
55
+ * Rejects if the session's PTY is null (not yet spawned or already cleaned up).
56
+ */
57
+ export function createSessionAdapter(session) {
58
+ return {
59
+ async write(data) {
60
+ if (!session.pty) {
61
+ throw new Error('PTY session has no active pty — cannot write');
62
+ }
63
+ session.pty.write(data);
64
+ },
65
+ async signal(sig) {
66
+ if (!session.pty) {
67
+ throw new Error('PTY session has no active pty — cannot send signal');
68
+ }
69
+ session.pty.kill(sig);
70
+ },
71
+ };
72
+ }
73
+ /**
74
+ * Attaches an orchestrator to a running PTY session.
75
+ *
76
+ * Creates a ScreenReader (with outputBuffer replay), creates a session adapter,
77
+ * and wires them together in an OrchestratorPTY instance ready to call run() on.
78
+ *
79
+ * The returned detach() function stops data flow and pauses the orchestrator
80
+ * without killing the PTY. Re-attaching is supported by calling attachOrchestrator
81
+ * again on the same session — it will replay the updated outputBuffer.
82
+ */
83
+ export function attachOrchestrator(opts) {
84
+ const { session, llm, context, rows, cols } = opts;
85
+ // Track whether we have detached so the forwarding closure can skip writes
86
+ let detached = false;
87
+ // Build the ScreenReader with detach-aware live data forwarding.
88
+ // We inline the attachment here (rather than delegating to createScreenReaderFromSession)
89
+ // so that the onData callback is guarded by the detached flag from the start.
90
+ const guardedReader = new ScreenReader({ rows: rows ?? 24, cols: cols ?? 80 });
91
+ // Replay outputBuffer so the orchestrator starts with current screen state
92
+ if (session.outputBuffer) {
93
+ guardedReader.write(session.outputBuffer);
94
+ }
95
+ // Attach live data feed through a detach guard
96
+ if (session.pty) {
97
+ session.pty.onData((data) => {
98
+ if (!detached) {
99
+ guardedReader.write(data);
100
+ }
101
+ });
102
+ }
103
+ // Build the session adapter (write/signal → PTY)
104
+ const sessionAdapter = createSessionAdapter(session);
105
+ // Build the orchestrator
106
+ const orchestrator = new OrchestratorPTY(sessionAdapter, guardedReader, llm, context);
107
+ const detach = () => {
108
+ detached = true;
109
+ orchestrator.pause();
110
+ };
111
+ return { orchestrator, screenReader: guardedReader, detach };
112
+ }
113
+ //# sourceMappingURL=orchestrator-adapter.js.map
@@ -0,0 +1,94 @@
1
+ /**
2
+ * OrchestratorOverride — Operator HITL (Human-in-the-Loop) handoff
3
+ *
4
+ * Manages the override lifecycle for an orchestrator session. When a human
5
+ * operator needs to take direct control of a PTY session, they call override()
6
+ * to pause the orchestrator, interact with the PTY directly, then call release()
7
+ * to hand control back to the orchestrator.
8
+ *
9
+ * Flow:
10
+ * Orchestrator running → override() →
11
+ * orchestrator.pause() →
12
+ * PTY stdin routed to operator (caller manages routing) →
13
+ * operator interacts directly →
14
+ * release() →
15
+ * orchestrator.resume() with updated screen context
16
+ *
17
+ * Safety guarantees:
18
+ * - override() is idempotent — calling it when already overridden is a no-op
19
+ * - release() is idempotent — calling it when not overridden is a no-op
20
+ * - Both methods are no-ops when the orchestrator is in done state
21
+ * - All override events are recorded for audit trail
22
+ *
23
+ * Future enhancement: inject a 'wait' action with operator-override reasoning
24
+ * into the orchestrator's history once OrchestratorPTY exposes addHistory().
25
+ *
26
+ * @issue #758
27
+ * @see src/serve/orchestrator-pty.ts — OrchestratorPTY with pause()/resume()
28
+ */
29
+ // ============================================================
30
+ // OrchestratorOverride
31
+ // ============================================================
32
+ export class OrchestratorOverride {
33
+ orchestrator;
34
+ _active = false;
35
+ _events = [];
36
+ _overrideCount = 0;
37
+ constructor(orchestrator) {
38
+ this.orchestrator = orchestrator;
39
+ }
40
+ /**
41
+ * Take manual control. Pauses the orchestrator and records an override-start
42
+ * event. The caller is responsible for routing PTY stdin to operator input
43
+ * while the override is active.
44
+ *
45
+ * No-op if already overridden or if the orchestrator is done.
46
+ */
47
+ override() {
48
+ if (this.orchestrator.done)
49
+ return;
50
+ if (this._active)
51
+ return;
52
+ this.orchestrator.pause();
53
+ this._active = true;
54
+ this._events.push({
55
+ type: 'override-start',
56
+ timestamp: Date.now(),
57
+ source: 'operator',
58
+ });
59
+ }
60
+ /**
61
+ * Release manual control. Resumes the orchestrator and records an
62
+ * override-end event. The orchestrator will read the current screen state
63
+ * on its next cycle and continue from there.
64
+ *
65
+ * No-op if no override is active or if the orchestrator is done.
66
+ */
67
+ async release() {
68
+ if (this.orchestrator.done)
69
+ return;
70
+ if (!this._active)
71
+ return;
72
+ this._active = false;
73
+ this._overrideCount++;
74
+ this._events.push({
75
+ type: 'override-end',
76
+ timestamp: Date.now(),
77
+ source: 'operator',
78
+ });
79
+ await this.orchestrator.resume();
80
+ }
81
+ /** Whether an override is currently active */
82
+ get active() {
83
+ return this._active;
84
+ }
85
+ /** Get all override events (returns a copy for audit trail safety) */
86
+ getEvents() {
87
+ return [...this._events];
88
+ }
89
+ /** Number of override cycles that have completed (override + release pairs) */
90
+ get overrideCount() {
91
+ return this._overrideCount;
92
+ }
93
+ }
94
+ //# sourceMappingURL=orchestrator-override.js.map
@@ -0,0 +1,133 @@
1
+ /**
2
+ * OrchestratorPTY — Assess loop for Orchestrator-over-PTY
3
+ *
4
+ * Drives a PTY session via an LLM assessor using a read→assess→plan→act→wait
5
+ * loop. The LLM observes the current screen state and decides whether to type,
6
+ * wait, send a signal, or declare the mission complete.
7
+ *
8
+ * The LLMAssessor interface is generic — no Anthropic SDK is imported here —
9
+ * which keeps this class fully testable with mock assessors.
10
+ *
11
+ * @issue #755
12
+ * @see src/serve/screen-reader.ts — ScreenReader / ScreenState
13
+ * @see src/serve/pty-bridge.ts — PtyLike and session interfaces
14
+ */
15
+ // ============================================================
16
+ // OrchestratorPTY
17
+ // ============================================================
18
+ const DEFAULT_MAX_CYCLES = 100;
19
+ const HISTORY_WINDOW = 10;
20
+ const AWAIT_CHANGE_TIMEOUT_MS = 5000;
21
+ export class OrchestratorPTY {
22
+ session;
23
+ screenReader;
24
+ llm;
25
+ context;
26
+ maxCycles;
27
+ _history = [];
28
+ _done = false;
29
+ _paused = false;
30
+ constructor(session, screenReader, llm, context) {
31
+ this.session = session;
32
+ this.screenReader = screenReader;
33
+ this.llm = llm;
34
+ this.context = context;
35
+ this.maxCycles = context.maxCycles ?? DEFAULT_MAX_CYCLES;
36
+ // Seed history from context (advanced use-case; does not count against window)
37
+ if (context.recentActions.length > 0) {
38
+ this._history.push(...context.recentActions);
39
+ }
40
+ }
41
+ // ----------------------------------------------------------
42
+ // Main loop
43
+ // ----------------------------------------------------------
44
+ /**
45
+ * Run the assess loop until:
46
+ * - the LLM returns `complete`
47
+ * - `maxCycles` iterations are exhausted
48
+ * - `pause()` is called
49
+ */
50
+ async run() {
51
+ let cycleCount = 0;
52
+ while (!this._done && !this._paused && cycleCount < this.maxCycles) {
53
+ // ---- read ----
54
+ const screen = await this.screenReader.awaitChange({
55
+ timeout: AWAIT_CHANGE_TIMEOUT_MS,
56
+ });
57
+ // Check pause again after the potentially long await
58
+ if (this._paused)
59
+ break;
60
+ // ---- assess ----
61
+ const decision = await this.llm.assess({
62
+ screen_state: screen.summary,
63
+ prompt_detected: screen.prompt_detected,
64
+ prompt_text: screen.prompt_text,
65
+ context: this.context,
66
+ history: this._history.slice(-HISTORY_WINDOW),
67
+ });
68
+ // ---- act ----
69
+ await this._execute(decision);
70
+ cycleCount++;
71
+ }
72
+ // Auto-complete on cycle exhaustion
73
+ if (!this._done && !this._paused && cycleCount >= this.maxCycles) {
74
+ const capAction = {
75
+ action: 'complete',
76
+ reasoning: 'Max cycles reached',
77
+ };
78
+ this._history.push(capAction);
79
+ this._done = true;
80
+ }
81
+ }
82
+ // ----------------------------------------------------------
83
+ // Pause / resume
84
+ // ----------------------------------------------------------
85
+ /** Pause the loop at the next iteration boundary. */
86
+ pause() {
87
+ this._paused = true;
88
+ }
89
+ /**
90
+ * Clear the pause flag and re-enter the assess loop.
91
+ * Resolves when the loop exits again (complete or paused again).
92
+ */
93
+ async resume() {
94
+ this._paused = false;
95
+ await this.run();
96
+ }
97
+ // ----------------------------------------------------------
98
+ // Accessors
99
+ // ----------------------------------------------------------
100
+ /** Returns a copy of the full action history. */
101
+ getHistory() {
102
+ return [...this._history];
103
+ }
104
+ /** Whether the orchestrator has reached a terminal `complete` state. */
105
+ get done() {
106
+ return this._done;
107
+ }
108
+ /** Whether the orchestrator is currently paused. */
109
+ get paused() {
110
+ return this._paused;
111
+ }
112
+ // ----------------------------------------------------------
113
+ // Private helpers
114
+ // ----------------------------------------------------------
115
+ async _execute(action) {
116
+ this._history.push(action);
117
+ switch (action.action) {
118
+ case 'type':
119
+ await this.session.write((action.text ?? '') + '\n');
120
+ break;
121
+ case 'wait':
122
+ // No-op — loop will call awaitChange again next iteration
123
+ break;
124
+ case 'signal':
125
+ await this.session.signal(action.signal ?? '');
126
+ break;
127
+ case 'complete':
128
+ this._done = true;
129
+ break;
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=orchestrator-pty.js.map