@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.
- package/LICENSE +21 -0
- package/README.md +22 -1
- package/bin/aiwg.mjs +349 -0
- package/dist/src/a2a/agent-card.js +145 -0
- package/dist/src/a2a/client.js +411 -0
- package/dist/src/a2a/hitl-cli.js +171 -0
- package/dist/src/a2a/hitl-driver.js +370 -0
- package/dist/src/a2a/hitl.js +181 -0
- package/dist/src/a2a/http.js +193 -0
- package/dist/src/a2a/jcs.js +128 -0
- package/dist/src/a2a/jws.js +187 -0
- package/dist/src/a2a/types.js +24 -0
- package/dist/src/a2a/webhook.js +240 -0
- package/dist/src/activity-log/cli.js +348 -0
- package/dist/src/activity-log/parser.js +81 -0
- package/dist/src/activity-log/types.js +50 -0
- package/dist/src/agents/agent-deployer.js +367 -0
- package/dist/src/agents/agent-packager.js +271 -0
- package/dist/src/agents/agent-validator.js +271 -0
- package/dist/src/agents/grounding/knowledge-base.js +161 -0
- package/dist/src/agents/grounding/types.js +12 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/packaged-agent-inventory.js +75 -0
- package/dist/src/agents/types.js +7 -0
- package/dist/src/api/index.d.ts +10 -0
- package/dist/src/api/index.js +10 -0
- package/dist/src/artifacts/address-parser.js +73 -0
- package/dist/src/artifacts/audit/cli.js +183 -0
- package/dist/src/artifacts/audit/drift.js +122 -0
- package/dist/src/artifacts/audit/types.js +12 -0
- package/dist/src/artifacts/backends/graphology-backend.js +160 -0
- package/dist/src/artifacts/backends/json-backend.js +129 -0
- package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
- package/dist/src/artifacts/browser-export.js +622 -0
- package/dist/src/artifacts/capability-resolver.js +94 -0
- package/dist/src/artifacts/checksum-manifest.js +91 -0
- package/dist/src/artifacts/citation-parser.js +162 -0
- package/dist/src/artifacts/cli.js +1486 -0
- package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
- package/dist/src/artifacts/corpus-tools/cli.js +393 -0
- package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
- package/dist/src/artifacts/corpus-tools/curator.js +186 -0
- package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
- package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
- package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
- package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
- package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
- package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
- package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
- package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
- package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
- package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
- package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
- package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
- package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
- package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
- package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
- package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
- package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
- package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
- package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
- package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
- package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
- package/dist/src/artifacts/corpus-views/build.js +126 -0
- package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
- package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
- package/dist/src/artifacts/corpus-views/renderers.js +353 -0
- package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
- package/dist/src/artifacts/dep-graph.js +173 -0
- package/dist/src/artifacts/discover-facets.js +375 -0
- package/dist/src/artifacts/embedding-index.js +354 -0
- package/dist/src/artifacts/enrichment/cli.js +240 -0
- package/dist/src/artifacts/enrichment/prompt.js +47 -0
- package/dist/src/artifacts/enrichment/store.js +90 -0
- package/dist/src/artifacts/enrichment/types.js +12 -0
- package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
- package/dist/src/artifacts/fortemi-core-sync.js +251 -0
- package/dist/src/artifacts/fortemi-shard-export.js +44 -0
- package/dist/src/artifacts/fulltext.js +108 -0
- package/dist/src/artifacts/graph-backend.js +51 -0
- package/dist/src/artifacts/graph-query.js +247 -0
- package/dist/src/artifacts/hybrid-query.js +225 -0
- package/dist/src/artifacts/index-builder.js +1089 -0
- package/dist/src/artifacts/index-reader.js +112 -0
- package/dist/src/artifacts/index-status.js +193 -0
- package/dist/src/artifacts/legacy-index-migration.js +169 -0
- package/dist/src/artifacts/move.js +154 -0
- package/dist/src/artifacts/operational-state.js +239 -0
- package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
- package/dist/src/artifacts/query-engine.js +1955 -0
- package/dist/src/artifacts/source-graph.js +529 -0
- package/dist/src/artifacts/stats.js +169 -0
- package/dist/src/artifacts/types.js +606 -0
- package/dist/src/artifacts/views/cli.js +293 -0
- package/dist/src/artifacts/views/definition.js +170 -0
- package/dist/src/artifacts/views/store.js +149 -0
- package/dist/src/artifacts/views/types.js +8 -0
- package/dist/src/artifacts/watcher.js +255 -0
- package/dist/src/catalog/builtin-models.json +636 -0
- package/dist/src/catalog/cli.js +228 -0
- package/dist/src/catalog/cli.mjs +289 -0
- package/dist/src/catalog/index.js +15 -0
- package/dist/src/catalog/loader.js +217 -0
- package/dist/src/catalog/loader.mjs +251 -0
- package/dist/src/catalog/sources.json +41 -0
- package/dist/src/catalog/types.js +8 -0
- package/dist/src/channel/manager.mjs +504 -0
- package/dist/src/cli/agent-spawn.js +178 -0
- package/dist/src/cli/cli-extension-loader.js +245 -0
- package/dist/src/cli/command-log.js +275 -0
- package/dist/src/cli/config-loader.js +232 -0
- package/dist/src/cli/env.js +82 -0
- package/dist/src/cli/errors.js +150 -0
- package/dist/src/cli/find-package-root.js +40 -0
- package/dist/src/cli/git-hooks.js +250 -0
- package/dist/src/cli/handlers/agentcard.js +206 -0
- package/dist/src/cli/handlers/artifacts.js +76 -0
- package/dist/src/cli/handlers/best-practices-audit.js +280 -0
- package/dist/src/cli/handlers/cockpit.js +137 -0
- package/dist/src/cli/handlers/command-log.js +37 -0
- package/dist/src/cli/handlers/daemon.js +59 -0
- package/dist/src/cli/handlers/diagnose.js +300 -0
- package/dist/src/cli/handlers/execution-mode.js +105 -0
- package/dist/src/cli/handlers/feedback.js +341 -0
- package/dist/src/cli/handlers/help.js +147 -0
- package/dist/src/cli/handlers/index.js +302 -0
- package/dist/src/cli/handlers/init.js +179 -0
- package/dist/src/cli/handlers/install.js +129 -0
- package/dist/src/cli/handlers/issues.js +46 -0
- package/dist/src/cli/handlers/lint.js +42 -0
- package/dist/src/cli/handlers/local-executor.js +315 -0
- package/dist/src/cli/handlers/marketplace.js +168 -0
- package/dist/src/cli/handlers/mc.js +1010 -0
- package/dist/src/cli/handlers/models.js +352 -0
- package/dist/src/cli/handlers/packages.js +155 -0
- package/dist/src/cli/handlers/ralph-launcher.js +717 -0
- package/dist/src/cli/handlers/ralph.js +575 -0
- package/dist/src/cli/handlers/refresh.js +432 -0
- package/dist/src/cli/handlers/regenerate.js +336 -0
- package/dist/src/cli/handlers/repo-access.js +109 -0
- package/dist/src/cli/handlers/run.js +165 -0
- package/dist/src/cli/handlers/runtime-info.js +301 -0
- package/dist/src/cli/handlers/sandbox.js +197 -0
- package/dist/src/cli/handlers/scaffolding.js +149 -0
- package/dist/src/cli/handlers/script-runner.js +121 -0
- package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
- package/dist/src/cli/handlers/serve.js +1835 -0
- package/dist/src/cli/handlers/session.js +348 -0
- package/dist/src/cli/handlers/setup.js +440 -0
- package/dist/src/cli/handlers/skill-lint.js +367 -0
- package/dist/src/cli/handlers/skill-usage.js +74 -0
- package/dist/src/cli/handlers/steward.js +567 -0
- package/dist/src/cli/handlers/subcommands.js +1702 -0
- package/dist/src/cli/handlers/team.js +337 -0
- package/dist/src/cli/handlers/types.js +11 -0
- package/dist/src/cli/handlers/use.js +2772 -0
- package/dist/src/cli/handlers/utilities.js +703 -0
- package/dist/src/cli/handlers/version.js +134 -0
- package/dist/src/cli/handlers/workspace-context.js +93 -0
- package/dist/src/cli/handlers/workspace.js +126 -0
- package/dist/src/cli/help-generator.js +178 -0
- package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
- package/dist/src/cli/hooks/executor.js +96 -0
- package/dist/src/cli/hooks/index.js +15 -0
- package/dist/src/cli/hooks/registry.js +143 -0
- package/dist/src/cli/hooks/types.js +13 -0
- package/dist/src/cli/log.js +492 -0
- package/dist/src/cli/project-isolation/detect.js +70 -0
- package/dist/src/cli/project-isolation/index.js +7 -0
- package/dist/src/cli/project-isolation/signals.js +17 -0
- package/dist/src/cli/project-isolation/warning.js +102 -0
- package/dist/src/cli/prompt-utils.js +155 -0
- package/dist/src/cli/provider-deployment-plan.js +126 -0
- package/dist/src/cli/provider-resolution.js +119 -0
- package/dist/src/cli/router.js +305 -0
- package/dist/src/cli/scope-resolver.js +392 -0
- package/dist/src/cli/skill-usage.js +616 -0
- package/dist/src/cli/ui.js +224 -0
- package/dist/src/cli/watch-service.js +203 -0
- package/dist/src/cli/workflow-orchestrator.js +478 -0
- package/dist/src/cli/workspace-signals.js +321 -0
- package/dist/src/community/footer.js +14 -0
- package/dist/src/community/links.js +123 -0
- package/dist/src/community/milestones.js +46 -0
- package/dist/src/community/nudge-policy.js +93 -0
- package/dist/src/config/aiwg-config.js +883 -0
- package/dist/src/config/cli.js +703 -0
- package/dist/src/config/gitignore.js +156 -0
- package/dist/src/config/project-artifacts.js +76 -0
- package/dist/src/config/user-config.js +428 -0
- package/dist/src/config/user-registry.js +127 -0
- package/dist/src/config/workspace.js +276 -0
- package/dist/src/contributors/detect.js +39 -0
- package/dist/src/contributors/discover.js +172 -0
- package/dist/src/contributors/heuristic.js +186 -0
- package/dist/src/contributors/index.js +11 -0
- package/dist/src/contributors/types.js +13 -0
- package/dist/src/contributors/validation.js +116 -0
- package/dist/src/data/community.schema.json +43 -0
- package/dist/src/data/community.yaml +16 -0
- package/dist/src/extensions/capability-index.js +270 -0
- package/dist/src/extensions/claude-hooks-installer.js +268 -0
- package/dist/src/extensions/commands/definitions.js +3485 -0
- package/dist/src/extensions/deployment-registration.js +463 -0
- package/dist/src/extensions/index.js +22 -0
- package/dist/src/extensions/loader.js +132 -0
- package/dist/src/extensions/managed-marker.js +100 -0
- package/dist/src/extensions/manifest.js +196 -0
- package/dist/src/extensions/project-local-activity.js +114 -0
- package/dist/src/extensions/project-local-discovery.js +261 -0
- package/dist/src/extensions/project-local-doctor.js +281 -0
- package/dist/src/extensions/project-local-gitignore.js +176 -0
- package/dist/src/extensions/project-local-paths.js +121 -0
- package/dist/src/extensions/project-local-promote.js +218 -0
- package/dist/src/extensions/project-local-remove.js +373 -0
- package/dist/src/extensions/project-local-scaffold.js +252 -0
- package/dist/src/extensions/project-quickref.js +291 -0
- package/dist/src/extensions/registry.js +368 -0
- package/dist/src/extensions/shadow-resolver.js +271 -0
- package/dist/src/extensions/types.js +86 -0
- package/dist/src/extensions/upstream-registry.js +195 -0
- package/dist/src/extensions/validation.js +631 -0
- package/dist/src/features/catalog.js +88 -0
- package/dist/src/features/cli.js +197 -0
- package/dist/src/features/installer.js +57 -0
- package/dist/src/features/paths.js +14 -0
- package/dist/src/features/runtime.js +21 -0
- package/dist/src/features/status.js +134 -0
- package/dist/src/hooks/laziness-detection.js +532 -0
- package/dist/src/intake/git-history-analyzer.js +486 -0
- package/dist/src/intake/index.js +9 -0
- package/dist/src/issues/cli.js +327 -0
- package/dist/src/issues/index.js +5 -0
- package/dist/src/issues/live.js +154 -0
- package/dist/src/issues/local.js +666 -0
- package/dist/src/issues/sync.js +143 -0
- package/dist/src/issues/types.js +2 -0
- package/dist/src/issues/workflows.js +164 -0
- package/dist/src/kb/cli.js +173 -0
- package/dist/src/lint/cli.js +171 -0
- package/dist/src/lint/loader.js +225 -0
- package/dist/src/lint/reporters.js +141 -0
- package/dist/src/lint/runner.js +364 -0
- package/dist/src/lint/types.js +10 -0
- package/dist/src/marketplace/cache.js +110 -0
- package/dist/src/marketplace/identifier.js +63 -0
- package/dist/src/marketplace/registry.js +36 -0
- package/dist/src/marketplace/sources/clawhub.js +53 -0
- package/dist/src/marketplace/sources/git.js +45 -0
- package/dist/src/marketplace/types.js +9 -0
- package/dist/src/mcp/adapters/codex-runtime.js +224 -0
- package/dist/src/mcp/cli.mjs +1197 -0
- package/dist/src/mcp/elicitation.mjs +149 -0
- package/dist/src/mcp/helpers.mjs +287 -0
- package/dist/src/mcp/index.mjs +11 -0
- package/dist/src/mcp/profiles.js +263 -0
- package/dist/src/mcp/profiles.mjs +360 -0
- package/dist/src/mcp/registry.js +376 -0
- package/dist/src/mcp/registry.mjs +387 -0
- package/dist/src/mcp/server.mjs +633 -0
- package/dist/src/mcp/test-simple.mjs +271 -0
- package/dist/src/mcp/tools/command-run.mjs +101 -0
- package/dist/src/mcp/tools/discovery.mjs +291 -0
- package/dist/src/mcp/tools/interaction.mjs +87 -0
- package/dist/src/mcp/tools/orchestration.mjs +320 -0
- package/dist/src/mcp/tools/subsystems.mjs +640 -0
- package/dist/src/memory/cli.js +166 -0
- package/dist/src/memory/project-registry.js +282 -0
- package/dist/src/metrics/artifact-metrics.js +184 -0
- package/dist/src/metrics/context-budget.js +174 -0
- package/dist/src/metrics/token-counter.js +133 -0
- package/dist/src/models/config-loader.js +228 -0
- package/dist/src/models/index.js +22 -0
- package/dist/src/models/model-capabilities.v1.json +120 -0
- package/dist/src/models/model-catalog.v1.json +96 -0
- package/dist/src/models/model-discovery.js +521 -0
- package/dist/src/models/provider-models.js +73 -0
- package/dist/src/models/provider-policy.js +273 -0
- package/dist/src/models/resolver.js +245 -0
- package/dist/src/models/router.js +70 -0
- package/dist/src/models/types.js +8 -0
- package/dist/src/models/wrapper-deployment.js +178 -0
- package/dist/src/models/wrapper-route.js +54 -0
- package/dist/src/ops/cli.js +268 -0
- package/dist/src/ops/registry.js +623 -0
- package/dist/src/packages/adapters/clawhub.js +113 -0
- package/dist/src/packages/adapters/git.js +153 -0
- package/dist/src/packages/adapters/gitea.js +93 -0
- package/dist/src/packages/adapters/github.js +69 -0
- package/dist/src/packages/adapters/local-cache.js +89 -0
- package/dist/src/packages/package-registry.js +143 -0
- package/dist/src/packages/registry.js +238 -0
- package/dist/src/packages/types.js +11 -0
- package/dist/src/plugin/cross-framework-ops.js +475 -0
- package/dist/src/plugin/framework-config-loader.js +235 -0
- package/dist/src/plugin/framework-detector.js +186 -0
- package/dist/src/plugin/framework-isolator.js +341 -0
- package/dist/src/plugin/framework-migration.js +371 -0
- package/dist/src/plugin/metadata-validator.js +906 -0
- package/dist/src/plugin/plugin-installer.js +436 -0
- package/dist/src/plugin/plugin-status.js +369 -0
- package/dist/src/plugin/plugin-uninstaller.js +473 -0
- package/dist/src/plugin/registry-validator.js +344 -0
- package/dist/src/plugin/skill-command-translator.js +415 -0
- package/dist/src/plugin/workspace-creator.js +189 -0
- package/dist/src/plugin/workspace-migrator.js +821 -0
- package/dist/src/policy/authorization.js +390 -0
- package/dist/src/policy/repo-access.js +215 -0
- package/dist/src/provenance/cli.js +16 -0
- package/dist/src/providers/capability-matrix.js +300 -0
- package/dist/src/providers/capability-matrix.yaml +514 -0
- package/dist/src/providers/provider-definitions.js +977 -0
- package/dist/src/providers/provider-definitions.mjs +159 -0
- package/dist/src/providers/provider-inventory.js +169 -0
- package/dist/src/quality/feedback-ab.js +174 -0
- package/dist/src/quality/feedback-collector.js +176 -0
- package/dist/src/quality/feedback-tracker.js +123 -0
- package/dist/src/quality/patterns/adr.json +24 -0
- package/dist/src/quality/patterns/sad.json +24 -0
- package/dist/src/quality/patterns/test-plan.json +24 -0
- package/dist/src/quality/patterns/use-case.json +24 -0
- package/dist/src/quality/scoring.js +157 -0
- package/dist/src/reflections/cli.js +15 -0
- package/dist/src/release/plan.js +139 -0
- package/dist/src/research/cache/manager.js +227 -0
- package/dist/src/research/clients/arxiv.js +156 -0
- package/dist/src/research/clients/base.js +197 -0
- package/dist/src/research/clients/crossref.js +112 -0
- package/dist/src/research/clients/semantic-scholar.js +126 -0
- package/dist/src/research/clients/unpaywall.js +87 -0
- package/dist/src/research/index.js +14 -0
- package/dist/src/research/query-cli.js +336 -0
- package/dist/src/research/services/acquisition.js +313 -0
- package/dist/src/research/services/archival.js +225 -0
- package/dist/src/research/services/citation.js +279 -0
- package/dist/src/research/services/discovery.js +243 -0
- package/dist/src/research/services/documentation.js +269 -0
- package/dist/src/research/services/index.js +14 -0
- package/dist/src/research/services/provenance.js +279 -0
- package/dist/src/research/services/quality.js +370 -0
- package/dist/src/research/services/types.js +7 -0
- package/dist/src/research/storage-cli.js +20 -0
- package/dist/src/research/types.js +47 -0
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.js +2 -0
- package/dist/src/resources/web-release.d.ts +89 -0
- package/dist/src/resources/web-release.js +886 -0
- package/dist/src/rlm/cache/cli.js +162 -0
- package/dist/src/rlm/cache/hash.js +35 -0
- package/dist/src/rlm/cache/store.js +170 -0
- package/dist/src/rlm/cache/types.js +8 -0
- package/dist/src/rlm/cli.js +650 -0
- package/dist/src/serve/a2a-terminal-observer.js +120 -0
- package/dist/src/serve/agent-router.js +205 -0
- package/dist/src/serve/dispatch-router.js +171 -0
- package/dist/src/serve/executor-registry.js +715 -0
- package/dist/src/serve/mission-conductor.js +177 -0
- package/dist/src/serve/orchestrator-adapter.js +113 -0
- package/dist/src/serve/orchestrator-override.js +94 -0
- package/dist/src/serve/orchestrator-pty.js +133 -0
- package/dist/src/serve/pty-bridge.js +799 -0
- package/dist/src/serve/sandbox-registry.js +832 -0
- package/dist/src/serve/screen-reader.js +228 -0
- package/dist/src/serve/stack-adapters.js +68 -0
- package/dist/src/serve/telemetry.js +143 -0
- package/dist/src/skills/adapters/clawhub.js +250 -0
- package/dist/src/skills/adapters/local.js +335 -0
- package/dist/src/skills/adapters/openclaw.js +316 -0
- package/dist/src/skills/cli.js +334 -0
- package/dist/src/skills/registry.js +117 -0
- package/dist/src/skills/run.js +259 -0
- package/dist/src/skills/runtime.js +94 -0
- package/dist/src/skills/types.js +10 -0
- package/dist/src/smiths/agentsmith/demo.js +116 -0
- package/dist/src/smiths/agentsmith/examples.js +300 -0
- package/dist/src/smiths/agentsmith/generator.js +503 -0
- package/dist/src/smiths/agentsmith/index.js +11 -0
- package/dist/src/smiths/agentsmith/types.js +8 -0
- package/dist/src/smiths/commandsmith/example.js +220 -0
- package/dist/src/smiths/commandsmith/generator.js +288 -0
- package/dist/src/smiths/commandsmith/index.js +41 -0
- package/dist/src/smiths/commandsmith/templates.js +296 -0
- package/dist/src/smiths/commandsmith/types.js +7 -0
- package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
- package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
- package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
- package/dist/src/smiths/context-pipeline/discovery.js +187 -0
- package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
- package/dist/src/smiths/context-pipeline/finalization.js +147 -0
- package/dist/src/smiths/context-pipeline/generator.js +477 -0
- package/dist/src/smiths/context-pipeline/index.js +30 -0
- package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
- package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
- package/dist/src/smiths/context-pipeline/overflow.js +212 -0
- package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
- package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
- package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
- package/dist/src/smiths/context-pipeline/types.js +23 -0
- package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
- package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
- package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
- package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
- package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
- package/dist/src/smiths/hook-bridge/index.js +79 -0
- package/dist/src/smiths/hook-bridge/loader.js +116 -0
- package/dist/src/smiths/hook-bridge/shim.js +89 -0
- package/dist/src/smiths/hook-bridge/types.js +31 -0
- package/dist/src/smiths/index.js +39 -0
- package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
- package/dist/src/smiths/mcpsmith/example.js +119 -0
- package/dist/src/smiths/mcpsmith/generator.js +236 -0
- package/dist/src/smiths/mcpsmith/index.js +17 -0
- package/dist/src/smiths/mcpsmith/types.js +10 -0
- package/dist/src/smiths/platform-paths.js +101 -0
- package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
- package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
- package/dist/src/smiths/skillsmith/demo.js +83 -0
- package/dist/src/smiths/skillsmith/examples.js +161 -0
- package/dist/src/smiths/skillsmith/generator.js +316 -0
- package/dist/src/smiths/skillsmith/index.js +12 -0
- package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
- package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
- package/dist/src/smiths/skillsmith/types.js +9 -0
- package/dist/src/smiths/toolsmith/index.js +10 -0
- package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
- package/dist/src/smiths/toolsmith/types.js +8 -0
- package/dist/src/storage/backends/fortemi.js +227 -0
- package/dist/src/storage/backends/fs.js +134 -0
- package/dist/src/storage/backends/logseq.js +309 -0
- package/dist/src/storage/backends/obsidian.js +233 -0
- package/dist/src/storage/cli.js +468 -0
- package/dist/src/storage/config.js +272 -0
- package/dist/src/storage/index.js +108 -0
- package/dist/src/storage/subsystem-cli.js +201 -0
- package/dist/src/storage/types.js +33 -0
- package/dist/src/testing/corpus/corpus-builder.js +383 -0
- package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
- package/dist/src/testing/corpus/index.js +10 -0
- package/dist/src/testing/fixtures/index.js +9 -0
- package/dist/src/testing/fixtures/test-data-factory.js +472 -0
- package/dist/src/testing/generators/index.js +11 -0
- package/dist/src/testing/generators/test-case-generator.js +393 -0
- package/dist/src/testing/generators/test-code-generator.js +384 -0
- package/dist/src/testing/generators/use-case-parser.js +325 -0
- package/dist/src/testing/index.js +11 -0
- package/dist/src/tracker/capability-protocol.js +118 -0
- package/dist/src/update/checker.mjs +396 -0
- package/dist/src/update/notifier.mjs +235 -0
- package/dist/src/writing/content-diversifier.js +804 -0
- package/dist/src/writing/example-generator.js +959 -0
- package/dist/src/writing/example-templates.js +99 -0
- package/dist/src/writing/pattern-library.js +486 -0
- package/dist/src/writing/patterns/banned-phrases.json +4413 -0
- package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
- package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
- package/dist/src/writing/patterns/hedging-language.json +2096 -0
- package/dist/src/writing/patterns/transition-words.json +1285 -0
- package/dist/src/writing/patterns/weak-verbs.json +1112 -0
- package/dist/src/writing/prompt-optimizer.js +660 -0
- package/dist/src/writing/prompt-templates.js +583 -0
- package/dist/src/writing/scoring-config-loader.js +168 -0
- package/dist/src/writing/validation-engine.js +595 -0
- package/dist/src/writing/validation-rules.js +380 -0
- package/dist/src/writing/voice-analyzer.js +439 -0
- package/dist/src/writing/voice-calibration.js +661 -0
- package/dist/src/writing/voice-profiles.json +588 -0
- package/package.json +65 -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
|