@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,640 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIWG MCP Subsystem Toolsets
|
|
3
|
+
*
|
|
4
|
+
* Exposes AIWG's CLI subsystems (memory, kb, reflections, provenance,
|
|
5
|
+
* research-store, activity-log, index, ralph, mc, ops) as MCP toolsets.
|
|
6
|
+
* Each toolset is opt-in via AIWG_MCP_TOOLSETS env var or `aiwg mcp
|
|
7
|
+
* serve --toolsets=` flag (#1332 / S18).
|
|
8
|
+
*
|
|
9
|
+
* Default toolset enabled: `core` (already registered by discovery.mjs +
|
|
10
|
+
* command-run.mjs in server.mjs).
|
|
11
|
+
*
|
|
12
|
+
* @architecture @.aiwg/architecture/sketch-hermes-mcp-parity.md DD-3
|
|
13
|
+
* @issues #1322 (memory) #1323 (kb) #1324 (provenance) #1325 (activity-log)
|
|
14
|
+
* #1326 (index) #1327 (ralph) #1328 (ops) #1331 (mc) #1332 (dispatch)
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { runAiwgCli, mcpError, mcpJson } from '../helpers.mjs';
|
|
19
|
+
import { registerFlowToolset, registerMissionToolset } from './orchestration.mjs';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Wrap an `aiwg <subsystem> <verb>` CLI call as an MCP tool.
|
|
23
|
+
*
|
|
24
|
+
* @param {object} cfg
|
|
25
|
+
* @param {string} cfg.name MCP tool name
|
|
26
|
+
* @param {string} cfg.subsystem CLI subsystem (e.g. "memory")
|
|
27
|
+
* @param {string} cfg.verb CLI verb (e.g. "list")
|
|
28
|
+
* @param {string} cfg.title MCP tool title
|
|
29
|
+
* @param {string} cfg.description Human-readable description
|
|
30
|
+
* @param {object} cfg.inputSchema zod schema
|
|
31
|
+
* @param {boolean} [cfg.destructive] Mark as destructive
|
|
32
|
+
* @param {boolean} [cfg.readOnly] Mark as read-only
|
|
33
|
+
* @param {(args: object) => string[]} cfg.buildArgs Convert MCP args to CLI argv tail (excluding subsystem + verb)
|
|
34
|
+
* @param {(args: object) => string|undefined} [cfg.buildInput] Optional stdin payload (for put commands)
|
|
35
|
+
*/
|
|
36
|
+
function registerSubsystemTool(server, cfg) {
|
|
37
|
+
const {
|
|
38
|
+
name,
|
|
39
|
+
subsystem,
|
|
40
|
+
verb,
|
|
41
|
+
title,
|
|
42
|
+
description,
|
|
43
|
+
inputSchema,
|
|
44
|
+
destructive = false,
|
|
45
|
+
readOnly = false,
|
|
46
|
+
buildArgs,
|
|
47
|
+
buildInput,
|
|
48
|
+
} = cfg;
|
|
49
|
+
|
|
50
|
+
server.registerTool(name, {
|
|
51
|
+
title,
|
|
52
|
+
description,
|
|
53
|
+
inputSchema,
|
|
54
|
+
annotations: {
|
|
55
|
+
readOnlyHint: readOnly,
|
|
56
|
+
destructiveHint: destructive,
|
|
57
|
+
},
|
|
58
|
+
}, async (args) => {
|
|
59
|
+
try {
|
|
60
|
+
const cliArgs = [subsystem, verb, ...buildArgs(args)];
|
|
61
|
+
const input = buildInput ? buildInput(args) : undefined;
|
|
62
|
+
const { stdout, stderr, code } = await runAiwgCli(cliArgs, { input });
|
|
63
|
+
if (code !== 0) {
|
|
64
|
+
return mcpError(`${name} failed (exit ${code}): ${stderr || stdout}`);
|
|
65
|
+
}
|
|
66
|
+
// Prefer JSON if the output parses
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(stdout);
|
|
69
|
+
return mcpJson(parsed);
|
|
70
|
+
} catch {
|
|
71
|
+
return mcpJson({ output: stdout, stderr });
|
|
72
|
+
}
|
|
73
|
+
} catch (err) {
|
|
74
|
+
return mcpError(`${name}: ${err.message}`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Storage subsystems (memory, kb, reflections, provenance, research-store)
|
|
81
|
+
//
|
|
82
|
+
// All five share the same CLI surface: path, list, get, put, delete.
|
|
83
|
+
// Generated via a single factory below.
|
|
84
|
+
// ============================================================================
|
|
85
|
+
|
|
86
|
+
const STORAGE_SUBSYSTEMS = [
|
|
87
|
+
{ name: 'memory', toolset: 'memory', project: true, description: 'Project memory / persistent agent recall' },
|
|
88
|
+
{ name: 'reflections', toolset: 'memory', project: true, description: 'Agent reflection memory' },
|
|
89
|
+
{ name: 'kb', toolset: 'kb', project: true, description: 'Project knowledge base' },
|
|
90
|
+
{ name: 'provenance', toolset: 'research', project: true, description: 'W3C PROV records' },
|
|
91
|
+
{ name: 'research-store', toolset: 'research', project: true, description: 'Research corpus' },
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
function registerStorageSubsystem(server, sub) {
|
|
95
|
+
const { name, description } = sub;
|
|
96
|
+
|
|
97
|
+
registerSubsystemTool(server, {
|
|
98
|
+
name: `${name}-list`,
|
|
99
|
+
subsystem: name,
|
|
100
|
+
verb: 'list',
|
|
101
|
+
title: `List ${description} entries`,
|
|
102
|
+
description: `List entries in the ${name} subsystem. Mirrors \`aiwg ${name} list --json\`.`,
|
|
103
|
+
inputSchema: {
|
|
104
|
+
prefix: z.string().optional().describe('Filter by path prefix'),
|
|
105
|
+
},
|
|
106
|
+
readOnly: true,
|
|
107
|
+
buildArgs: ({ prefix }) => {
|
|
108
|
+
const args = ['--json'];
|
|
109
|
+
if (prefix) args.push('--prefix', prefix);
|
|
110
|
+
return args;
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
registerSubsystemTool(server, {
|
|
115
|
+
name: `${name}-get`,
|
|
116
|
+
subsystem: name,
|
|
117
|
+
verb: 'get',
|
|
118
|
+
title: `Get ${description} entry`,
|
|
119
|
+
description: `Read an entry from the ${name} subsystem. Mirrors \`aiwg ${name} get <path>\`.`,
|
|
120
|
+
inputSchema: {
|
|
121
|
+
path: z.string().describe('Entry path/key'),
|
|
122
|
+
},
|
|
123
|
+
readOnly: true,
|
|
124
|
+
buildArgs: ({ path }) => [path],
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
registerSubsystemTool(server, {
|
|
128
|
+
name: `${name}-put`,
|
|
129
|
+
subsystem: name,
|
|
130
|
+
verb: 'put',
|
|
131
|
+
title: `Put ${description} entry`,
|
|
132
|
+
description: `Write content to an entry in the ${name} subsystem. Mirrors \`aiwg ${name} put <path>\` with stdin.`,
|
|
133
|
+
inputSchema: {
|
|
134
|
+
path: z.string().describe('Entry path/key'),
|
|
135
|
+
content: z.string().describe('Content to write (stdin to CLI)'),
|
|
136
|
+
},
|
|
137
|
+
destructive: false, // append/upsert semantics
|
|
138
|
+
buildArgs: ({ path }) => [path],
|
|
139
|
+
buildInput: ({ content }) => content,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
registerSubsystemTool(server, {
|
|
143
|
+
name: `${name}-delete`,
|
|
144
|
+
subsystem: name,
|
|
145
|
+
verb: 'delete',
|
|
146
|
+
title: `Delete ${description} entry`,
|
|
147
|
+
description: `Delete an entry. No-op if missing. Mirrors \`aiwg ${name} delete <path>\`.`,
|
|
148
|
+
inputSchema: {
|
|
149
|
+
path: z.string().describe('Entry path/key'),
|
|
150
|
+
},
|
|
151
|
+
destructive: true,
|
|
152
|
+
buildArgs: ({ path }) => [path],
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
registerSubsystemTool(server, {
|
|
156
|
+
name: `${name}-path`,
|
|
157
|
+
subsystem: name,
|
|
158
|
+
verb: 'path',
|
|
159
|
+
title: `${description} resolved path`,
|
|
160
|
+
description: `Resolve the underlying physical path (fs backend). Mirrors \`aiwg ${name} path\`.`,
|
|
161
|
+
inputSchema: {
|
|
162
|
+
subpath: z.string().optional().describe('Optional subpath'),
|
|
163
|
+
},
|
|
164
|
+
readOnly: true,
|
|
165
|
+
buildArgs: ({ subpath }) => {
|
|
166
|
+
const args = ['--json'];
|
|
167
|
+
if (subpath) args.unshift(subpath);
|
|
168
|
+
return args;
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// ============================================================================
|
|
174
|
+
// activity-log
|
|
175
|
+
// ============================================================================
|
|
176
|
+
|
|
177
|
+
function registerActivityLogToolset(server) {
|
|
178
|
+
registerSubsystemTool(server, {
|
|
179
|
+
name: 'activity-log-show',
|
|
180
|
+
subsystem: 'activity-log',
|
|
181
|
+
verb: 'show',
|
|
182
|
+
title: 'Show activity log',
|
|
183
|
+
description: 'Show the AIWG activity log (chronological event stream). Mirrors `aiwg activity-log show`.',
|
|
184
|
+
inputSchema: {
|
|
185
|
+
since: z.string().optional().describe('Filter by date YYYY-MM-DD'),
|
|
186
|
+
operation: z.string().optional().describe('Filter by operation token (e.g. "create", "deploy")'),
|
|
187
|
+
limit: z.number().int().min(1).max(1000).default(100),
|
|
188
|
+
},
|
|
189
|
+
readOnly: true,
|
|
190
|
+
buildArgs: ({ since, operation, limit }) => {
|
|
191
|
+
const args = [];
|
|
192
|
+
if (since) args.push('--since', since);
|
|
193
|
+
if (operation) args.push('--operation', operation);
|
|
194
|
+
if (limit) args.push('--limit', String(limit));
|
|
195
|
+
return args;
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
registerSubsystemTool(server, {
|
|
200
|
+
name: 'activity-log-append',
|
|
201
|
+
subsystem: 'activity-log',
|
|
202
|
+
verb: 'append',
|
|
203
|
+
title: 'Append activity log entry',
|
|
204
|
+
description: 'Append a one-line event. Mirrors `aiwg activity-log append <op> "<summary>"`.',
|
|
205
|
+
inputSchema: {
|
|
206
|
+
operation: z.string().describe('Operation token (e.g. "create", "deploy", "lint")'),
|
|
207
|
+
summary: z.string().describe('One-line summary (<120 chars)'),
|
|
208
|
+
},
|
|
209
|
+
buildArgs: ({ operation, summary }) => [operation, summary],
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
registerSubsystemTool(server, {
|
|
213
|
+
name: 'activity-log-stats',
|
|
214
|
+
subsystem: 'activity-log',
|
|
215
|
+
verb: 'stats',
|
|
216
|
+
title: 'Activity log stats',
|
|
217
|
+
description: 'Summary statistics over the activity log. Mirrors `aiwg activity-log stats`.',
|
|
218
|
+
inputSchema: {},
|
|
219
|
+
readOnly: true,
|
|
220
|
+
buildArgs: () => [],
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// ============================================================================
|
|
225
|
+
// index
|
|
226
|
+
// ============================================================================
|
|
227
|
+
|
|
228
|
+
function registerIndexToolset(server) {
|
|
229
|
+
registerSubsystemTool(server, {
|
|
230
|
+
name: 'index-build',
|
|
231
|
+
subsystem: 'index',
|
|
232
|
+
verb: 'build',
|
|
233
|
+
title: 'Build artifact index',
|
|
234
|
+
description: 'Rebuild the artifact index (project / codebase / framework / user graphs). Mirrors `aiwg index build`.',
|
|
235
|
+
inputSchema: {
|
|
236
|
+
force: z.boolean().default(false).describe('Force full rebuild'),
|
|
237
|
+
graph: z.enum(['project', 'codebase', 'source', 'user', 'framework']).optional().describe('Restrict to one graph'),
|
|
238
|
+
},
|
|
239
|
+
buildArgs: ({ force, graph }) => {
|
|
240
|
+
const args = [];
|
|
241
|
+
if (force) args.push('--force');
|
|
242
|
+
if (graph) args.push('--graph', graph);
|
|
243
|
+
return args;
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
registerSubsystemTool(server, {
|
|
248
|
+
name: 'index-query',
|
|
249
|
+
subsystem: 'index',
|
|
250
|
+
verb: 'query',
|
|
251
|
+
title: 'Query artifact index',
|
|
252
|
+
description: 'Search artifacts by keyword/type/phase/tags. Mirrors `aiwg index query`.',
|
|
253
|
+
inputSchema: {
|
|
254
|
+
keyword: z.string().optional().describe('Keyword query'),
|
|
255
|
+
type: z.string().optional().describe('Artifact type filter'),
|
|
256
|
+
limit: z.number().int().min(1).max(500).default(50),
|
|
257
|
+
},
|
|
258
|
+
readOnly: true,
|
|
259
|
+
buildArgs: ({ keyword, type, limit }) => {
|
|
260
|
+
const args = ['--json'];
|
|
261
|
+
if (keyword) args.push(keyword);
|
|
262
|
+
if (type) args.push('--type', type);
|
|
263
|
+
if (limit) args.push('--limit', String(limit));
|
|
264
|
+
return args;
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
registerSubsystemTool(server, {
|
|
269
|
+
name: 'index-deps',
|
|
270
|
+
subsystem: 'index',
|
|
271
|
+
verb: 'deps',
|
|
272
|
+
title: 'Artifact dependency graph',
|
|
273
|
+
description: 'Show dependency relationships for an artifact. Mirrors `aiwg index deps <path>`.',
|
|
274
|
+
inputSchema: {
|
|
275
|
+
artifact: z.string().describe('Artifact path or ID'),
|
|
276
|
+
direction: z.enum(['upstream', 'downstream', 'both']).default('both'),
|
|
277
|
+
},
|
|
278
|
+
readOnly: true,
|
|
279
|
+
buildArgs: ({ artifact, direction }) => {
|
|
280
|
+
const args = [artifact, '--json'];
|
|
281
|
+
if (direction) args.push('--direction', direction);
|
|
282
|
+
return args;
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
registerSubsystemTool(server, {
|
|
287
|
+
name: 'index-stats',
|
|
288
|
+
subsystem: 'index',
|
|
289
|
+
verb: 'stats',
|
|
290
|
+
title: 'Index statistics',
|
|
291
|
+
description: 'Artifact counts by phase/type, graph metrics, coverage. Mirrors `aiwg index stats`.',
|
|
292
|
+
inputSchema: {},
|
|
293
|
+
readOnly: true,
|
|
294
|
+
buildArgs: () => ['--json'],
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// ============================================================================
|
|
299
|
+
// ralph (agent loop) — session-id async pattern
|
|
300
|
+
// ============================================================================
|
|
301
|
+
|
|
302
|
+
function registerRalphToolset(server) {
|
|
303
|
+
// ralph start is a command, not a subcommand. We use the top-level `ralph` command.
|
|
304
|
+
server.registerTool('ralph-start', {
|
|
305
|
+
title: 'Start AIWG Ralph (agent loop)',
|
|
306
|
+
description: 'Begin a Ralph iterative agent loop. Returns immediately with a session id; status polled via `ralph-status`. Mirrors `aiwg ralph "<task>" --completion "<criteria>"`.',
|
|
307
|
+
inputSchema: {
|
|
308
|
+
task: z.string().describe('Task description'),
|
|
309
|
+
completion: z.string().describe('Measurable completion criteria (verification command)'),
|
|
310
|
+
max_cycles: z.number().int().min(1).max(500).default(20),
|
|
311
|
+
confirmed: z.boolean().default(false).describe('Required (Ralph is long-running)'),
|
|
312
|
+
},
|
|
313
|
+
annotations: { destructiveHint: true },
|
|
314
|
+
}, async ({ task, completion, max_cycles, confirmed }) => {
|
|
315
|
+
if (!confirmed) {
|
|
316
|
+
return mcpError(
|
|
317
|
+
`ralph-start is a long-running agent loop. Re-invoke with confirmed=true to proceed.`,
|
|
318
|
+
{ requiresConfirmation: true, remediation: 'Surface task/completion/max_cycles to the user before confirming.' }
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
// Spawn detached: kick off the loop in background; return immediately
|
|
323
|
+
const { stdout, stderr, code } = await runAiwgCli(
|
|
324
|
+
['ralph', task, '--completion', completion, '--max-cycles', String(max_cycles), '--background'],
|
|
325
|
+
{ timeoutMs: 10_000 }
|
|
326
|
+
);
|
|
327
|
+
if (code !== 0) return mcpError(`ralph-start failed: ${stderr}`);
|
|
328
|
+
return mcpJson({ message: 'ralph started', stdout, stderr });
|
|
329
|
+
} catch (err) {
|
|
330
|
+
return mcpError(`ralph-start: ${err.message}`);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
registerSubsystemTool(server, {
|
|
335
|
+
name: 'ralph-status',
|
|
336
|
+
subsystem: 'ralph-status',
|
|
337
|
+
verb: '',
|
|
338
|
+
title: 'Ralph loop status',
|
|
339
|
+
description: 'Show status of running/recent Ralph loops. Mirrors `aiwg ralph-status`.',
|
|
340
|
+
inputSchema: {
|
|
341
|
+
session_id: z.string().optional().describe('Specific session id (default: all running)'),
|
|
342
|
+
all: z.boolean().default(false).describe('Include completed/failed loops'),
|
|
343
|
+
},
|
|
344
|
+
readOnly: true,
|
|
345
|
+
buildArgs: ({ session_id, all }) => {
|
|
346
|
+
const args = ['--json'];
|
|
347
|
+
if (session_id) args.push('--session', session_id);
|
|
348
|
+
if (all) args.push('--all');
|
|
349
|
+
return args;
|
|
350
|
+
},
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
registerSubsystemTool(server, {
|
|
354
|
+
name: 'ralph-abort',
|
|
355
|
+
subsystem: 'ralph-abort',
|
|
356
|
+
verb: '',
|
|
357
|
+
title: 'Abort Ralph loop',
|
|
358
|
+
description: 'Abort a running Ralph loop. Mirrors `aiwg ralph-abort`.',
|
|
359
|
+
inputSchema: {
|
|
360
|
+
session_id: z.string().describe('Session id'),
|
|
361
|
+
confirmed: z.boolean().default(false),
|
|
362
|
+
},
|
|
363
|
+
destructive: true,
|
|
364
|
+
buildArgs: ({ session_id, confirmed }) => {
|
|
365
|
+
if (!confirmed) throw new Error('ralph-abort requires confirmed=true');
|
|
366
|
+
return ['--session', session_id];
|
|
367
|
+
},
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
registerSubsystemTool(server, {
|
|
371
|
+
name: 'ralph-attach',
|
|
372
|
+
subsystem: 'ralph-attach',
|
|
373
|
+
verb: '',
|
|
374
|
+
title: 'Attach to running Ralph loop',
|
|
375
|
+
description: 'Attach to a running external agent loop. Mirrors `aiwg ralph-attach`.',
|
|
376
|
+
inputSchema: {
|
|
377
|
+
session_id: z.string().describe('Session id'),
|
|
378
|
+
},
|
|
379
|
+
readOnly: true,
|
|
380
|
+
buildArgs: ({ session_id }) => ['--session', session_id, '--json'],
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// ============================================================================
|
|
385
|
+
// mc (Mission Control)
|
|
386
|
+
// ============================================================================
|
|
387
|
+
|
|
388
|
+
function registerMcToolset(server) {
|
|
389
|
+
registerSubsystemTool(server, {
|
|
390
|
+
name: 'mc-start',
|
|
391
|
+
subsystem: 'mc',
|
|
392
|
+
verb: 'start',
|
|
393
|
+
title: 'Start Mission Control session',
|
|
394
|
+
description: 'Begin a multi-loop background orchestration session. Mirrors `aiwg mc start`.',
|
|
395
|
+
inputSchema: {
|
|
396
|
+
name: z.string().optional().describe('Session label'),
|
|
397
|
+
},
|
|
398
|
+
buildArgs: ({ name }) => {
|
|
399
|
+
const args = [];
|
|
400
|
+
if (name) args.push('--name', name);
|
|
401
|
+
return args;
|
|
402
|
+
},
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
registerSubsystemTool(server, {
|
|
406
|
+
name: 'mc-dispatch',
|
|
407
|
+
subsystem: 'mc',
|
|
408
|
+
verb: 'dispatch',
|
|
409
|
+
title: 'Dispatch mission to MC session',
|
|
410
|
+
description: 'Add a background mission to an MC session. Mirrors `aiwg mc dispatch <id> "<objective>"`.',
|
|
411
|
+
inputSchema: {
|
|
412
|
+
session_id: z.string().describe('Session id'),
|
|
413
|
+
objective: z.string().describe('Mission objective'),
|
|
414
|
+
completion: z.string().optional().describe('Completion criteria'),
|
|
415
|
+
max_iterations: z.number().int().positive().optional().describe('Ralph iteration cap'),
|
|
416
|
+
max_total_tokens: z.number().int().positive().optional().describe('Hard cumulative token ceiling'),
|
|
417
|
+
max_output_tokens: z.number().int().positive().optional().describe('Hard cumulative output-token ceiling'),
|
|
418
|
+
max_tool_calls: z.number().int().positive().optional().describe('Hard cumulative tool-call ceiling'),
|
|
419
|
+
max_total_cost: z.number().positive().optional().describe('Hard cumulative provider-reported spend ceiling'),
|
|
420
|
+
max_wall_clock_minutes: z.number().positive().optional().describe('Hard cumulative runtime ceiling'),
|
|
421
|
+
exploration_quota: z.number().int().positive().optional().describe('Require structural variant after this many flat cycles (off unless declared; no default K)'),
|
|
422
|
+
budget_stop_policy: z.enum(['completion-wins', 'budget-wins']).optional().describe('Stop semantics when the completing iteration crosses a ceiling (default: completion-wins)'),
|
|
423
|
+
},
|
|
424
|
+
buildArgs: ({
|
|
425
|
+
session_id,
|
|
426
|
+
objective,
|
|
427
|
+
completion,
|
|
428
|
+
max_iterations,
|
|
429
|
+
max_total_tokens,
|
|
430
|
+
max_output_tokens,
|
|
431
|
+
max_tool_calls,
|
|
432
|
+
max_total_cost,
|
|
433
|
+
max_wall_clock_minutes,
|
|
434
|
+
exploration_quota,
|
|
435
|
+
budget_stop_policy,
|
|
436
|
+
}) => {
|
|
437
|
+
const args = [session_id, objective];
|
|
438
|
+
if (completion) args.push('--completion', completion);
|
|
439
|
+
if (max_iterations) args.push('--max-iterations', String(max_iterations));
|
|
440
|
+
if (max_total_tokens) args.push('--max-total-tokens', String(max_total_tokens));
|
|
441
|
+
if (max_output_tokens) args.push('--max-output-tokens', String(max_output_tokens));
|
|
442
|
+
if (max_tool_calls) args.push('--max-tool-calls', String(max_tool_calls));
|
|
443
|
+
if (max_total_cost) args.push('--max-total-cost', String(max_total_cost));
|
|
444
|
+
if (max_wall_clock_minutes) args.push('--max-wall-clock-minutes', String(max_wall_clock_minutes));
|
|
445
|
+
if (exploration_quota) args.push('--exploration-quota', String(exploration_quota));
|
|
446
|
+
if (budget_stop_policy) args.push('--budget-stop-policy', budget_stop_policy);
|
|
447
|
+
return args;
|
|
448
|
+
},
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
registerSubsystemTool(server, {
|
|
452
|
+
name: 'mc-status',
|
|
453
|
+
subsystem: 'mc',
|
|
454
|
+
verb: 'status',
|
|
455
|
+
title: 'MC session status',
|
|
456
|
+
description: 'View status of all missions in MC sessions. Mirrors `aiwg mc status`.',
|
|
457
|
+
inputSchema: {
|
|
458
|
+
session_id: z.string().optional(),
|
|
459
|
+
},
|
|
460
|
+
readOnly: true,
|
|
461
|
+
buildArgs: ({ session_id }) => {
|
|
462
|
+
const args = ['--json'];
|
|
463
|
+
if (session_id) args.push('--session', session_id);
|
|
464
|
+
return args;
|
|
465
|
+
},
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
registerSubsystemTool(server, {
|
|
469
|
+
name: 'mc-stop',
|
|
470
|
+
subsystem: 'mc',
|
|
471
|
+
verb: 'stop',
|
|
472
|
+
title: 'Stop MC session',
|
|
473
|
+
description: 'Shut down a Mission Control session. Mirrors `aiwg mc stop <id>`.',
|
|
474
|
+
inputSchema: {
|
|
475
|
+
session_id: z.string(),
|
|
476
|
+
confirmed: z.boolean().default(false),
|
|
477
|
+
},
|
|
478
|
+
destructive: true,
|
|
479
|
+
buildArgs: ({ session_id, confirmed }) => {
|
|
480
|
+
if (!confirmed) throw new Error('mc-stop requires confirmed=true');
|
|
481
|
+
return [session_id];
|
|
482
|
+
},
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
registerSubsystemTool(server, {
|
|
486
|
+
name: 'mc-list',
|
|
487
|
+
subsystem: 'mc',
|
|
488
|
+
verb: 'list',
|
|
489
|
+
title: 'List MC sessions',
|
|
490
|
+
description: 'List all active/recent MC sessions. Mirrors `aiwg mc list`.',
|
|
491
|
+
inputSchema: {},
|
|
492
|
+
readOnly: true,
|
|
493
|
+
buildArgs: () => ['--json'],
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
// ============================================================================
|
|
498
|
+
// ops
|
|
499
|
+
// ============================================================================
|
|
500
|
+
|
|
501
|
+
function registerOpsToolset(server) {
|
|
502
|
+
registerSubsystemTool(server, {
|
|
503
|
+
name: 'ops-status',
|
|
504
|
+
subsystem: 'ops',
|
|
505
|
+
verb: 'status',
|
|
506
|
+
title: 'Ops workspace status',
|
|
507
|
+
description: 'Show ops workspace health. Mirrors `aiwg ops status`.',
|
|
508
|
+
inputSchema: {
|
|
509
|
+
all: z.boolean().default(false),
|
|
510
|
+
},
|
|
511
|
+
readOnly: true,
|
|
512
|
+
buildArgs: ({ all }) => {
|
|
513
|
+
const args = ['--json'];
|
|
514
|
+
if (all) args.push('--all');
|
|
515
|
+
return args;
|
|
516
|
+
},
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
registerSubsystemTool(server, {
|
|
520
|
+
name: 'ops-list',
|
|
521
|
+
subsystem: 'ops',
|
|
522
|
+
verb: 'list',
|
|
523
|
+
title: 'List ops workspaces',
|
|
524
|
+
description: 'List registered ops workspaces. Mirrors `aiwg ops list`.',
|
|
525
|
+
inputSchema: {},
|
|
526
|
+
readOnly: true,
|
|
527
|
+
buildArgs: () => ['--json'],
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
registerSubsystemTool(server, {
|
|
531
|
+
name: 'ops-use',
|
|
532
|
+
subsystem: 'ops',
|
|
533
|
+
verb: 'use',
|
|
534
|
+
title: 'Switch ops workspace',
|
|
535
|
+
description: 'Switch active ops workspace. Mirrors `aiwg ops use <workspace>`.',
|
|
536
|
+
inputSchema: {
|
|
537
|
+
workspace: z.string(),
|
|
538
|
+
},
|
|
539
|
+
buildArgs: ({ workspace }) => [workspace],
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
registerSubsystemTool(server, {
|
|
543
|
+
name: 'ops-push',
|
|
544
|
+
subsystem: 'ops',
|
|
545
|
+
verb: 'push',
|
|
546
|
+
title: 'Push ops workspace repos',
|
|
547
|
+
description: 'Push workspace repos to remote. DESTRUCTIVE — affects shared state. Mirrors `aiwg ops push`.',
|
|
548
|
+
inputSchema: {
|
|
549
|
+
workspace: z.string().optional(),
|
|
550
|
+
confirmed: z.boolean().default(false),
|
|
551
|
+
},
|
|
552
|
+
destructive: true,
|
|
553
|
+
buildArgs: ({ workspace, confirmed }) => {
|
|
554
|
+
if (!confirmed) throw new Error('ops-push requires confirmed=true');
|
|
555
|
+
const args = [];
|
|
556
|
+
if (workspace) args.push('--workspace', workspace);
|
|
557
|
+
return args;
|
|
558
|
+
},
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// ============================================================================
|
|
563
|
+
// Toolset registry + dispatch (#1332 / S18)
|
|
564
|
+
// ============================================================================
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Known toolsets. Each maps to a registration function. The `core` toolset
|
|
568
|
+
* is always registered by server.mjs (discovery + command-run).
|
|
569
|
+
*/
|
|
570
|
+
const TOOLSET_REGISTRY = {
|
|
571
|
+
flows: registerFlowToolset,
|
|
572
|
+
missions: registerMissionToolset,
|
|
573
|
+
memory: (server) => {
|
|
574
|
+
registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'memory'));
|
|
575
|
+
registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'reflections'));
|
|
576
|
+
},
|
|
577
|
+
kb: (server) => {
|
|
578
|
+
registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'kb'));
|
|
579
|
+
},
|
|
580
|
+
research: (server) => {
|
|
581
|
+
registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'provenance'));
|
|
582
|
+
registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'research-store'));
|
|
583
|
+
},
|
|
584
|
+
'activity-log': registerActivityLogToolset,
|
|
585
|
+
index: registerIndexToolset,
|
|
586
|
+
ralph: registerRalphToolset,
|
|
587
|
+
mc: registerMcToolset,
|
|
588
|
+
ops: registerOpsToolset,
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* Parse AIWG_MCP_TOOLSETS env or `--toolsets` CLI value into a Set.
|
|
593
|
+
*
|
|
594
|
+
* Format: comma-separated list (whitespace ignored). `core` is always
|
|
595
|
+
* implicit. Unknown names produce a warning but don't abort startup.
|
|
596
|
+
*
|
|
597
|
+
* Examples:
|
|
598
|
+
* AIWG_MCP_TOOLSETS=flows,missions,ralph
|
|
599
|
+
* AIWG_MCP_TOOLSETS=core,memory (core is implicit; harmless)
|
|
600
|
+
* AIWG_MCP_TOOLSETS=all (all known toolsets)
|
|
601
|
+
*/
|
|
602
|
+
export function parseToolsets(value) {
|
|
603
|
+
if (!value || typeof value !== 'string') return new Set();
|
|
604
|
+
const items = value.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean);
|
|
605
|
+
if (items.includes('all')) {
|
|
606
|
+
return new Set(Object.keys(TOOLSET_REGISTRY));
|
|
607
|
+
}
|
|
608
|
+
const out = new Set();
|
|
609
|
+
const known = new Set(Object.keys(TOOLSET_REGISTRY));
|
|
610
|
+
for (const item of items) {
|
|
611
|
+
if (item === 'core') continue; // always on
|
|
612
|
+
if (!known.has(item)) {
|
|
613
|
+
console.error(`[AIWG MCP] Unknown toolset: "${item}" — known: core, ${[...known].join(', ')}, all`);
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
out.add(item);
|
|
617
|
+
}
|
|
618
|
+
return out;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Register all opt-in toolsets requested via env/flag.
|
|
623
|
+
*/
|
|
624
|
+
export function registerOptInToolsets(server, toolsets) {
|
|
625
|
+
const enabled = [];
|
|
626
|
+
for (const name of toolsets) {
|
|
627
|
+
const fn = TOOLSET_REGISTRY[name];
|
|
628
|
+
if (fn) {
|
|
629
|
+
fn(server);
|
|
630
|
+
enabled.push(name);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
if (enabled.length > 0) {
|
|
634
|
+
console.error(`[AIWG MCP] Opt-in toolsets enabled: ${enabled.join(', ')}`);
|
|
635
|
+
} else {
|
|
636
|
+
console.error('[AIWG MCP] Default toolset only (core). Enable more via AIWG_MCP_TOOLSETS=<csv>.');
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
export const KNOWN_TOOLSETS = Object.keys(TOOLSET_REGISTRY);
|