@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,575 @@
1
+ /**
2
+ * Ralph Command Handlers
3
+ *
4
+ * CLI command handlers for Ralph iterative execution loop.
5
+ * Uses external Ralph supervisor for crash-resilient background execution.
6
+ * Falls back to internal scripts when --internal flag is used.
7
+ *
8
+ * @implements @.aiwg/architecture/decisions/ADR-001-unified-extension-system.md
9
+ * @implements @.aiwg/working/issue-ralph-external-completion.md
10
+ * @tests @test/unit/cli/handlers/ralph.test.ts
11
+ * @issue #33, #275
12
+ */
13
+ import { createScriptRunner } from './script-runner.js';
14
+ import { launchExternalRalph, getLoopStatuses, abortLoop, resumeLoop, attachToLoopOutput, } from './ralph-launcher.js';
15
+ import { handlerResultFromError } from '../errors.js';
16
+ /**
17
+ * Parse Ralph command arguments
18
+ */
19
+ function parseRalphArgs(args) {
20
+ const result = { invalidFlags: [], unknownFlags: [] };
21
+ let i = 0;
22
+ // Present-but-invalid numeric values are a hard usage error: an operator who
23
+ // typed --max-total-cost expects a ceiling to exist (#1770).
24
+ const positiveNumber = (flag, raw, integer = false) => {
25
+ const value = integer ? parseInt(raw ?? '', 10) : parseFloat(raw ?? '');
26
+ if (!Number.isFinite(value) || value <= 0) {
27
+ result.invalidFlags.push(`${flag} (got '${raw ?? ''}')`);
28
+ return undefined;
29
+ }
30
+ return value;
31
+ };
32
+ while (i < args.length) {
33
+ const arg = args[i];
34
+ if (arg === '--help' || arg === '-h') {
35
+ result.help = true;
36
+ }
37
+ else if (arg === '--internal') {
38
+ result.internal = true;
39
+ }
40
+ else if (arg === '--completion' || arg === '-c') {
41
+ result.completionCriteria = args[++i];
42
+ }
43
+ else if (arg === '--max-iterations') {
44
+ result.maxIterations = positiveNumber('--max-iterations', args[++i], true);
45
+ }
46
+ else if (arg === '--model') {
47
+ result.model = args[++i];
48
+ }
49
+ else if (arg === '--budget') {
50
+ result.budget = positiveNumber('--budget', args[++i]);
51
+ }
52
+ else if (arg === '--max-total-tokens') {
53
+ result.maxTotalTokens = positiveNumber('--max-total-tokens', args[++i], true);
54
+ }
55
+ else if (arg === '--max-output-tokens') {
56
+ result.maxOutputTokens = positiveNumber('--max-output-tokens', args[++i], true);
57
+ }
58
+ else if (arg === '--max-tool-calls') {
59
+ result.maxToolCalls = positiveNumber('--max-tool-calls', args[++i], true);
60
+ }
61
+ else if (arg === '--max-total-cost') {
62
+ result.maxTotalCost = positiveNumber('--max-total-cost', args[++i]);
63
+ }
64
+ else if (arg === '--max-wall-clock-minutes') {
65
+ result.maxWallClockMinutes = positiveNumber('--max-wall-clock-minutes', args[++i]);
66
+ }
67
+ else if (arg === '--exploration-quota') {
68
+ result.explorationQuota = positiveNumber('--exploration-quota', args[++i], true);
69
+ }
70
+ else if (arg === '--budget-stop-policy') {
71
+ const policy = args[++i];
72
+ if (policy === 'completion-wins' || policy === 'budget-wins') {
73
+ result.budgetStopPolicy = policy;
74
+ }
75
+ else {
76
+ result.invalidFlags.push(`--budget-stop-policy (got '${policy ?? ''}', expected completion-wins|budget-wins)`);
77
+ }
78
+ }
79
+ else if (arg === '--timeout') {
80
+ result.timeout = positiveNumber('--timeout', args[++i], true);
81
+ }
82
+ else if (arg === '--mcp-config') {
83
+ result.mcpConfig = args[++i];
84
+ }
85
+ else if (arg === '--gitea-issue') {
86
+ result.giteaIssue = true;
87
+ }
88
+ else if (arg === '--memory' || arg === '-m') {
89
+ const memArg = args[++i];
90
+ result.memory = isNaN(parseInt(memArg)) ? memArg : parseInt(memArg, 10);
91
+ }
92
+ else if (arg === '--cross-task') {
93
+ result.crossTask = true;
94
+ }
95
+ else if (arg === '--no-cross-task') {
96
+ result.crossTask = false;
97
+ }
98
+ else if (arg === '--no-analytics') {
99
+ result.enableAnalytics = false;
100
+ }
101
+ else if (arg === '--no-best-output') {
102
+ result.enableBestOutput = false;
103
+ }
104
+ else if (arg === '--no-early-stopping') {
105
+ result.enableEarlyStopping = false;
106
+ }
107
+ else if (arg === '--loop-id') {
108
+ result.loopId = args[++i];
109
+ }
110
+ else if (arg === '--provider') {
111
+ result.provider = args[++i];
112
+ }
113
+ else if (arg === '--dangerous') {
114
+ result.dangerous = true;
115
+ }
116
+ else if (arg === '--params') {
117
+ result.params = args[++i];
118
+ }
119
+ else if (arg === '--attach') {
120
+ result.attach = true;
121
+ }
122
+ else if (arg === '--verbose' || arg === '-v') {
123
+ result.verbose = true;
124
+ }
125
+ else if (arg === '--log-file') {
126
+ result.logFile = args[++i];
127
+ }
128
+ else if (!arg.startsWith('-') && !result.objective) {
129
+ result.objective = arg;
130
+ }
131
+ else if (arg.startsWith('--')) {
132
+ // Unknown flags were previously dropped silently — an operator typo on a
133
+ // budget flag launched a detached loop with NO ceiling at all (#1770).
134
+ result.unknownFlags.push(arg);
135
+ }
136
+ i++;
137
+ }
138
+ return result;
139
+ }
140
+ /**
141
+ * Agent Loop Handler
142
+ *
143
+ * Executes iterative task loops with automatic completion detection.
144
+ * By default, launches as a detached background process that survives terminal closure.
145
+ * Use --internal flag for the legacy foreground execution.
146
+ */
147
+ export class RalphHandler {
148
+ id = 'ralph';
149
+ name = 'Agent Loop';
150
+ description = 'Execute iterative task loop with automatic completion detection';
151
+ category = 'ralph';
152
+ aliases = ['ralph', '-ralph', '--ralph'];
153
+ async execute(ctx) {
154
+ const parsed = parseRalphArgs(ctx.args);
155
+ // Show help
156
+ if (parsed.help) {
157
+ return {
158
+ exitCode: 0,
159
+ message: this.getHelpText(),
160
+ };
161
+ }
162
+ // Use internal (foreground) mode if requested
163
+ if (parsed.internal) {
164
+ const runner = createScriptRunner(ctx.frameworkRoot);
165
+ return runner.run('tools/ralph/ralph-cli.mjs', ctx.args.filter((a) => a !== '--internal'));
166
+ }
167
+ // Validate required arguments
168
+ if (!parsed.objective) {
169
+ return {
170
+ exitCode: 1,
171
+ message: 'Error: Objective is required.\n\nUsage: aiwg ralph "<objective>" --completion "<criteria>"',
172
+ };
173
+ }
174
+ if (!parsed.completionCriteria) {
175
+ return {
176
+ exitCode: 1,
177
+ message: 'Error: Completion criteria is required.\n\nUsage: aiwg ralph "<objective>" --completion "<criteria>"',
178
+ };
179
+ }
180
+ // Refuse rather than launch a loop that is missing controls the operator
181
+ // believes are active (#1770)
182
+ if (parsed.invalidFlags.length > 0) {
183
+ return {
184
+ exitCode: 1,
185
+ message: `Error: Invalid numeric flag value(s): ${parsed.invalidFlags.join(', ')}. Budget/quota flags require positive numbers. Loop not launched.`,
186
+ };
187
+ }
188
+ if (parsed.unknownFlags.length > 0) {
189
+ return {
190
+ exitCode: 1,
191
+ message: `Error: Unknown flag(s): ${parsed.unknownFlags.join(', ')}. See 'aiwg ralph --help'. Loop not launched.`,
192
+ };
193
+ }
194
+ // Launch external Ralph as detached background process
195
+ try {
196
+ const options = {
197
+ objective: parsed.objective,
198
+ completionCriteria: parsed.completionCriteria,
199
+ maxIterations: parsed.maxIterations,
200
+ model: parsed.model,
201
+ budget: parsed.budget,
202
+ maxTotalTokens: parsed.maxTotalTokens,
203
+ maxOutputTokens: parsed.maxOutputTokens,
204
+ maxToolCalls: parsed.maxToolCalls,
205
+ maxTotalCost: parsed.maxTotalCost,
206
+ maxWallClockMinutes: parsed.maxWallClockMinutes,
207
+ explorationQuota: parsed.explorationQuota,
208
+ budgetStopPolicy: parsed.budgetStopPolicy,
209
+ timeout: parsed.timeout,
210
+ mcpConfig: parsed.mcpConfig,
211
+ giteaIssue: parsed.giteaIssue,
212
+ memory: parsed.memory,
213
+ crossTask: parsed.crossTask,
214
+ enableAnalytics: parsed.enableAnalytics,
215
+ enableBestOutput: parsed.enableBestOutput,
216
+ enableEarlyStopping: parsed.enableEarlyStopping,
217
+ loopId: parsed.loopId,
218
+ provider: parsed.provider,
219
+ dangerous: parsed.dangerous,
220
+ params: parsed.params,
221
+ verbose: parsed.verbose,
222
+ logFile: parsed.logFile,
223
+ };
224
+ const result = await launchExternalRalph(ctx.frameworkRoot, process.cwd(), options);
225
+ if (parsed.attach) {
226
+ process.stdout.write(`✓ ${result.message}\n PID: ${result.pid}\n Loop ID: ${result.loopId}\n\n` +
227
+ `Attaching to output... Press Ctrl+C to detach (loop keeps running).\n\n`);
228
+ await attachToLoopOutput(process.cwd(), result.loopId);
229
+ return { exitCode: 0, message: '' };
230
+ }
231
+ return {
232
+ exitCode: 0,
233
+ message: `✓ ${result.message}\n PID: ${result.pid}\n Loop ID: ${result.loopId}`,
234
+ };
235
+ }
236
+ catch (error) {
237
+ const result = handlerResultFromError(error);
238
+ return { ...result, message: `Failed to launch Ralph: ${result.message}` };
239
+ }
240
+ }
241
+ getHelpText() {
242
+ return `
243
+ Agent Loop - Crash-resilient iterative task execution
244
+
245
+ USAGE:
246
+ aiwg ralph "<objective>" --completion "<criteria>" [options]
247
+ aiwg ralph-status [--all]
248
+ aiwg ralph-abort [--loop-id <id>]
249
+ aiwg ralph-resume [--loop-id <id>]
250
+
251
+ ARGUMENTS:
252
+ <objective> Task objective (required)
253
+
254
+ OPTIONS:
255
+ -c, --completion <str> Completion criteria (required)
256
+ --max-iterations <n> Maximum iterations (default: 5)
257
+ --model <model> Claude model (default: claude-sonnet-4-6)
258
+ --budget <usd> Budget per iteration in USD (default: 5.0)
259
+ --timeout <min> Timeout per iteration in minutes (default: 60)
260
+
261
+ LFD LOOP CONTROLS (hard cumulative ceilings; loop stops with a best-output report):
262
+ --max-total-tokens <n> Hard total-token ceiling (when provider reports usage)
263
+ --max-output-tokens <n> Hard output-token ceiling (when provider reports usage)
264
+ --max-tool-calls <n> Hard tool-call ceiling (when provider reports usage)
265
+ --max-total-cost <usd> Hard cumulative spend ceiling (when provider reports cost)
266
+ --max-wall-clock-minutes <m> Hard cumulative wall-clock ceiling (always observable)
267
+ --exploration-quota <k> Require a structural strategy variant after k flat
268
+ (non-improving) cycles. OFF unless declared — there
269
+ is no default k; each loop declares its own.
270
+ --budget-stop-policy <p> completion-wins (default): a task completing on the
271
+ ceiling-crossing iteration reports success with the
272
+ crossing annotated. budget-wins: exhaustion always
273
+ terminates as budget_exhausted.
274
+ --mcp-config <json> MCP server configuration JSON
275
+ --gitea-issue Create/link Gitea issue for tracking
276
+ --loop-id <id> Use specific loop ID
277
+ --provider <name> Agent system to use (default: claude)
278
+ Spawnable: claude, opencode, codex, hermes
279
+ --dangerous Enable unrestricted mode for the selected provider.
280
+ Passes the provider's native flag (e.g. --dangerously-skip-permissions
281
+ for claude/opencode, --full-auto for codex). No effect if the
282
+ provider doesn't have a dangerous mode flag.
283
+ --params "<args>" Pass arbitrary args verbatim to the agent binary.
284
+ Appended after all other flags. Quoted segments preserved.
285
+ --attach Stay attached to the loop's output after launch.
286
+ Press Ctrl+C to detach (loop keeps running in background).
287
+ -v, --verbose Enable verbose per-iteration detail in the daemon output:
288
+ assessment results, planned strategy, and prompt preview.
289
+ --log-file <path> Write a timestamped copy of all daemon output to <path>
290
+ (in addition to the per-loop daemon-output.log). Useful
291
+ for capturing a single readable log across all iterations.
292
+ Use 'aiwg ralph-attach' to re-attach later.
293
+
294
+ RESEARCH-BACKED OPTIONS (REF-015, REF-021):
295
+ -m, --memory <n> Memory capacity Ω (default: 3)
296
+ --cross-task Enable cross-task learning (default: true)
297
+ --no-cross-task Disable cross-task learning
298
+ --no-analytics Disable iteration analytics
299
+ --no-best-output Disable best output selection
300
+ --no-early-stopping Disable early stopping on high confidence
301
+
302
+ FLAGS:
303
+ --internal Run in foreground (legacy mode)
304
+ -h, --help Show this help message
305
+
306
+ EXAMPLES:
307
+ # Start background loop
308
+ aiwg ralph "Fix all failing tests" --completion "npm test passes"
309
+
310
+ # Check status
311
+ aiwg ralph-status
312
+
313
+ # Abort running loop
314
+ aiwg ralph-abort
315
+ `;
316
+ }
317
+ }
318
+ /**
319
+ * Ralph Status Handler
320
+ *
321
+ * Shows current Agent loop status and iteration history.
322
+ * Works across terminal sessions by reading from the loop registry.
323
+ */
324
+ export class RalphStatusHandler {
325
+ id = 'ralph-status';
326
+ name = 'Ralph Status';
327
+ description = 'Show Agent loop status and iteration history';
328
+ category = 'ralph';
329
+ aliases = ['ralph-status'];
330
+ async execute(ctx) {
331
+ const showAll = ctx.args.includes('--all') || ctx.args.includes('-a');
332
+ const statuses = getLoopStatuses(process.cwd());
333
+ if (statuses.length === 0) {
334
+ return {
335
+ exitCode: 0,
336
+ message: 'No Agent loops found.',
337
+ };
338
+ }
339
+ // Sort by most recent first
340
+ statuses.sort((a, b) => new Date(b.lastUpdate).getTime() - new Date(a.lastUpdate).getTime());
341
+ // Filter to running only unless --all
342
+ const displayed = showAll ? statuses : statuses.filter((s) => s.status === 'running');
343
+ if (displayed.length === 0) {
344
+ return {
345
+ exitCode: 0,
346
+ message: 'No running Agent loops. Use --all to see completed/failed loops.',
347
+ };
348
+ }
349
+ const lines = ['Agent Loop Status', '=================', ''];
350
+ for (const loop of displayed) {
351
+ const statusIcon = loop.status === 'running'
352
+ ? '🔄'
353
+ : loop.status === 'completed'
354
+ ? '✅'
355
+ : loop.status === 'aborted'
356
+ ? '⏹️'
357
+ : '❌';
358
+ lines.push(`${statusIcon} ${loop.loopId}`);
359
+ lines.push(` Status: ${loop.status.toUpperCase()}`);
360
+ lines.push(` Progress: ${loop.iteration}/${loop.maxIterations} iterations`);
361
+ lines.push(` Objective: ${loop.objective.slice(0, 60)}${loop.objective.length > 60 ? '...' : ''}`);
362
+ lines.push(` Started: ${loop.startedAt}`);
363
+ if (loop.status === 'running') {
364
+ lines.push(` PID: ${loop.pid}`);
365
+ }
366
+ if (loop.outputFile) {
367
+ lines.push(` Daemon log: ${loop.outputFile}`);
368
+ }
369
+ if (loop.sessionStdoutFile) {
370
+ lines.push(` Session stdout: ${loop.sessionStdoutFile}`);
371
+ }
372
+ if (loop.sessionStderrFile) {
373
+ lines.push(` Session stderr: ${loop.sessionStderrFile}`);
374
+ }
375
+ lines.push('');
376
+ }
377
+ if (!showAll && statuses.length > displayed.length) {
378
+ lines.push(`(${statuses.length - displayed.length} completed/failed loops hidden. Use --all to show.)`);
379
+ }
380
+ return {
381
+ exitCode: 0,
382
+ message: lines.join('\n'),
383
+ };
384
+ }
385
+ }
386
+ /**
387
+ * Ralph Abort Handler
388
+ *
389
+ * Aborts currently running Agent loop by killing the background process.
390
+ * Works across terminal sessions.
391
+ */
392
+ export class RalphAbortHandler {
393
+ id = 'ralph-abort';
394
+ name = 'Ralph Abort';
395
+ description = 'Abort currently running Agent loop';
396
+ category = 'ralph';
397
+ aliases = ['ralph-abort'];
398
+ async execute(ctx) {
399
+ // Parse --loop-id if provided
400
+ let loopId;
401
+ const loopIdIndex = ctx.args.indexOf('--loop-id');
402
+ if (loopIdIndex !== -1 && ctx.args[loopIdIndex + 1]) {
403
+ loopId = ctx.args[loopIdIndex + 1];
404
+ }
405
+ const result = abortLoop(process.cwd(), loopId);
406
+ return {
407
+ exitCode: result.success ? 0 : 1,
408
+ message: result.message,
409
+ };
410
+ }
411
+ }
412
+ /**
413
+ * Ralph Resume Handler
414
+ *
415
+ * Resumes previously interrupted Agent loop as a new background process.
416
+ * Works across terminal sessions.
417
+ */
418
+ export class RalphResumeHandler {
419
+ id = 'ralph-resume';
420
+ name = 'Ralph Resume';
421
+ description = 'Resume previously aborted Agent loop';
422
+ category = 'ralph';
423
+ aliases = ['ralph-resume'];
424
+ async execute(ctx) {
425
+ // Parse arguments
426
+ let loopId;
427
+ let maxIterations;
428
+ for (let i = 0; i < ctx.args.length; i++) {
429
+ const arg = ctx.args[i];
430
+ if (arg === '--loop-id' && ctx.args[i + 1]) {
431
+ loopId = ctx.args[++i];
432
+ }
433
+ else if (arg === '--max-iterations' && ctx.args[i + 1]) {
434
+ maxIterations = parseInt(ctx.args[++i], 10);
435
+ }
436
+ }
437
+ try {
438
+ const result = await resumeLoop(ctx.frameworkRoot, process.cwd(), loopId, { maxIterations });
439
+ return {
440
+ exitCode: 0,
441
+ message: `✓ ${result.message}\n PID: ${result.pid}\n Loop ID: ${result.loopId}`,
442
+ };
443
+ }
444
+ catch (error) {
445
+ const result = handlerResultFromError(error);
446
+ return { ...result, message: `Failed to resume: ${result.message}` };
447
+ }
448
+ }
449
+ }
450
+ /**
451
+ * Create Ralph handler instance
452
+ */
453
+ export function createRalphHandler() {
454
+ return new RalphHandler();
455
+ }
456
+ /**
457
+ * Create Ralph Status handler instance
458
+ */
459
+ export function createRalphStatusHandler() {
460
+ return new RalphStatusHandler();
461
+ }
462
+ /**
463
+ * Create Ralph Abort handler instance
464
+ */
465
+ export function createRalphAbortHandler() {
466
+ return new RalphAbortHandler();
467
+ }
468
+ /**
469
+ * Create Ralph Resume handler instance
470
+ */
471
+ export function createRalphResumeHandler() {
472
+ return new RalphResumeHandler();
473
+ }
474
+ /**
475
+ * Ralph External handler
476
+ *
477
+ * Crash-resilient external loop with full state persistence.
478
+ * Equivalent to `ralph` with crash-recovery enabled by default.
479
+ */
480
+ export const ralphExternalHandler = {
481
+ id: 'agent-loop-ext',
482
+ name: 'Agent Loop External',
483
+ description: 'Crash-resilient external loop with state persistence and CI/CD integration',
484
+ category: 'ralph',
485
+ aliases: ['ralph-external', '--ralph-external', '--agent-loop-ext'],
486
+ async execute(ctx) {
487
+ const runner = createScriptRunner(ctx.frameworkRoot);
488
+ // Delegate to the external Ralph supervisor script
489
+ return runner.run('tools/ralph-external/index.mjs', ctx.args);
490
+ },
491
+ };
492
+ /**
493
+ * Ralph Memory handler
494
+ *
495
+ * Manage semantic memory entries for Agent loop learning.
496
+ */
497
+ export const ralphMemoryHandler = {
498
+ id: 'ralph-memory',
499
+ name: 'Ralph Memory',
500
+ description: 'Manage Ralph semantic memory entries (list, query, clear)',
501
+ category: 'ralph',
502
+ aliases: ['--ralph-memory'],
503
+ async execute(ctx) {
504
+ const runner = createScriptRunner(ctx.frameworkRoot);
505
+ return runner.run('tools/ralph-external/memory-manager.mjs', ['--cli', ...ctx.args]);
506
+ },
507
+ };
508
+ /**
509
+ * Ralph Config handler
510
+ *
511
+ * View and set Agent loop configuration values.
512
+ */
513
+ export const ralphConfigHandler = {
514
+ id: 'ralph-config',
515
+ name: 'Ralph Config',
516
+ description: 'View and configure Agent loop settings (show, set, reset, preset)',
517
+ category: 'ralph',
518
+ aliases: ['--ralph-config'],
519
+ async execute(ctx) {
520
+ const runner = createScriptRunner(ctx.frameworkRoot);
521
+ return runner.run('tools/ralph-external/orchestrator.mjs', ['--config', ...ctx.args]);
522
+ },
523
+ };
524
+ /**
525
+ * Ralph Attach Handler
526
+ *
527
+ * Re-attaches to a running Agent loop's live output stream.
528
+ * Press Ctrl+C to detach — loop continues running in background.
529
+ */
530
+ export class RalphAttachHandler {
531
+ id = 'ralph-attach';
532
+ name = 'Ralph Attach';
533
+ description = 'Attach to a running Agent loop\'s live output stream';
534
+ category = 'ralph';
535
+ aliases = ['ralph-attach'];
536
+ async execute(ctx) {
537
+ let loopId;
538
+ const loopIdIndex = ctx.args.indexOf('--loop-id');
539
+ if (loopIdIndex !== -1 && ctx.args[loopIdIndex + 1]) {
540
+ loopId = ctx.args[loopIdIndex + 1];
541
+ }
542
+ try {
543
+ process.stdout.write(`Attaching to loop output${loopId ? ` (${loopId})` : ''}...\n` +
544
+ `Press Ctrl+C to detach (loop keeps running in background).\n\n`);
545
+ await attachToLoopOutput(process.cwd(), loopId);
546
+ return { exitCode: 0, message: '' };
547
+ }
548
+ catch (error) {
549
+ const result = handlerResultFromError(error);
550
+ return { ...result, message: `Failed to attach: ${result.message}` };
551
+ }
552
+ }
553
+ }
554
+ /**
555
+ * Export handler instances
556
+ */
557
+ export const ralphHandler = new RalphHandler();
558
+ export const ralphStatusHandler = new RalphStatusHandler();
559
+ export const ralphAbortHandler = new RalphAbortHandler();
560
+ export const ralphResumeHandler = new RalphResumeHandler();
561
+ export const ralphAttachHandler = new RalphAttachHandler();
562
+ /**
563
+ * Export all Ralph handlers as array for easy registration
564
+ */
565
+ export const ralphHandlers = [
566
+ ralphHandler,
567
+ ralphStatusHandler,
568
+ ralphAbortHandler,
569
+ ralphResumeHandler,
570
+ ralphAttachHandler,
571
+ ralphExternalHandler,
572
+ ralphMemoryHandler,
573
+ ralphConfigHandler,
574
+ ];
575
+ //# sourceMappingURL=ralph.js.map