@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -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 +1462 -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 +882 -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 +64 -9
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIWG MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Model Context Protocol server exposing AIWG capabilities.
|
|
5
|
+
* Follows MCP 2025-11-25 specification.
|
|
6
|
+
*
|
|
7
|
+
* @see https://modelcontextprotocol.io/specification/2025-11-25
|
|
8
|
+
* @architecture @.aiwg/architecture/software-architecture-doc.md - Section 2.1 CLI Layer
|
|
9
|
+
* @reference @docs/references/REF-066-mcp-specification-2025.md
|
|
10
|
+
* @cli @docs/CLI_USAGE.md - mcp serve command
|
|
11
|
+
* @frameworks @agentic/code/frameworks/sdlc-complete/
|
|
12
|
+
* @frameworks @agentic/code/frameworks/media-marketing-kit/
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
16
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import fs from 'fs/promises';
|
|
19
|
+
import path from 'path';
|
|
20
|
+
import { fileURLToPath } from 'url';
|
|
21
|
+
import { registerDiscoveryTools } from './tools/discovery.mjs';
|
|
22
|
+
import { registerCommandRunTool } from './tools/command-run.mjs';
|
|
23
|
+
import { registerInteractionTools } from './tools/interaction.mjs';
|
|
24
|
+
import { parseToolsets, registerOptInToolsets, KNOWN_TOOLSETS } from './tools/subsystems.mjs';
|
|
25
|
+
import { AIWG_ROOT, findProjectRoot, resolveProjectAiwgDir } from './helpers.mjs';
|
|
26
|
+
|
|
27
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
|
|
29
|
+
// Framework paths
|
|
30
|
+
const FRAMEWORKS = {
|
|
31
|
+
'sdlc-complete': path.join(AIWG_ROOT, 'agentic/code/frameworks/sdlc-complete'),
|
|
32
|
+
'media-marketing-kit': path.join(AIWG_ROOT, 'agentic/code/frameworks/media-marketing-kit')
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Create and configure the AIWG MCP Server
|
|
37
|
+
*/
|
|
38
|
+
export function createServer() {
|
|
39
|
+
const server = new McpServer({
|
|
40
|
+
name: 'aiwg',
|
|
41
|
+
version: '1.0.0'
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// ============================================
|
|
45
|
+
// TOOLS
|
|
46
|
+
// ============================================
|
|
47
|
+
|
|
48
|
+
// ============================================
|
|
49
|
+
// Discovery toolset (#1311 #1313 #1320) — registers:
|
|
50
|
+
// discover, skill-list, skill-show, command-list, command-show,
|
|
51
|
+
// rule-list, rule-show, agent-show, template-list, template-show
|
|
52
|
+
// ============================================
|
|
53
|
+
registerDiscoveryTools(server);
|
|
54
|
+
|
|
55
|
+
// ============================================
|
|
56
|
+
// Command-run dispatch (#1312) — registers:
|
|
57
|
+
// command-run (allow-listed CLI dispatch)
|
|
58
|
+
// ============================================
|
|
59
|
+
registerCommandRunTool(server);
|
|
60
|
+
|
|
61
|
+
// ============================================
|
|
62
|
+
// Interaction toolset (#1676) — registers:
|
|
63
|
+
// ask-user (structured question via MCP elicitation, markdown fallback)
|
|
64
|
+
// ============================================
|
|
65
|
+
registerInteractionTools(server);
|
|
66
|
+
|
|
67
|
+
// ============================================
|
|
68
|
+
// Opt-in subsystem toolsets (#1322-#1332)
|
|
69
|
+
//
|
|
70
|
+
// Enabled via AIWG_MCP_TOOLSETS env or `aiwg mcp serve --toolsets=`.
|
|
71
|
+
// Known: flows, missions, memory, kb, research, activity-log, index, ralph, mc, ops, all
|
|
72
|
+
// Default: none (core only — discovery + command-run)
|
|
73
|
+
// ============================================
|
|
74
|
+
const requested = parseToolsets(process.env.AIWG_MCP_TOOLSETS || '');
|
|
75
|
+
registerOptInToolsets(server, requested);
|
|
76
|
+
|
|
77
|
+
// Tool: artifact-read
|
|
78
|
+
server.registerTool('artifact-read', {
|
|
79
|
+
title: 'Read AIWG Artifact',
|
|
80
|
+
description: 'Read artifact from .aiwg/ directory',
|
|
81
|
+
inputSchema: {
|
|
82
|
+
path: z.string().describe('Path relative to .aiwg/ (e.g., "requirements/UC-001.md")'),
|
|
83
|
+
project_dir: z.string().optional().describe('Project directory path (defaults to auto-detected project root)')
|
|
84
|
+
}
|
|
85
|
+
}, async ({ path: artifactPath, project_dir }) => {
|
|
86
|
+
try {
|
|
87
|
+
// Auto-find project root if not specified
|
|
88
|
+
const projectRoot = project_dir || await findProjectRoot();
|
|
89
|
+
const fullPath = path.join(await resolveProjectAiwgDir(projectRoot), artifactPath);
|
|
90
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
91
|
+
return {
|
|
92
|
+
content: [{
|
|
93
|
+
type: 'text',
|
|
94
|
+
text: content
|
|
95
|
+
}]
|
|
96
|
+
};
|
|
97
|
+
} catch (error) {
|
|
98
|
+
return {
|
|
99
|
+
content: [{
|
|
100
|
+
type: 'text',
|
|
101
|
+
text: `Error reading artifact: ${error.message}`
|
|
102
|
+
}],
|
|
103
|
+
isError: true
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Tool: artifact-write
|
|
109
|
+
server.registerTool('artifact-write', {
|
|
110
|
+
title: 'Write AIWG Artifact',
|
|
111
|
+
description: 'Write artifact to .aiwg/ directory',
|
|
112
|
+
inputSchema: {
|
|
113
|
+
path: z.string().describe('Path relative to .aiwg/'),
|
|
114
|
+
content: z.string().describe('Artifact content'),
|
|
115
|
+
project_dir: z.string().optional().describe('Project directory path (defaults to auto-detected project root)')
|
|
116
|
+
}
|
|
117
|
+
}, async ({ path: artifactPath, content, project_dir }) => {
|
|
118
|
+
try {
|
|
119
|
+
// Auto-find project root if not specified
|
|
120
|
+
const projectRoot = project_dir || await findProjectRoot();
|
|
121
|
+
const fullPath = path.join(await resolveProjectAiwgDir(projectRoot), artifactPath);
|
|
122
|
+
const dir = path.dirname(fullPath);
|
|
123
|
+
|
|
124
|
+
// Ensure directory exists
|
|
125
|
+
await fs.mkdir(dir, { recursive: true });
|
|
126
|
+
|
|
127
|
+
// Write file
|
|
128
|
+
await fs.writeFile(fullPath, content, 'utf-8');
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
content: [{
|
|
132
|
+
type: 'text',
|
|
133
|
+
text: JSON.stringify({
|
|
134
|
+
status: 'success',
|
|
135
|
+
path: fullPath,
|
|
136
|
+
message: 'Artifact written successfully'
|
|
137
|
+
}, null, 2)
|
|
138
|
+
}]
|
|
139
|
+
};
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
content: [{
|
|
143
|
+
type: 'text',
|
|
144
|
+
text: `Error writing artifact: ${error.message}`
|
|
145
|
+
}],
|
|
146
|
+
isError: true
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Tool: template-render
|
|
152
|
+
server.registerTool('template-render', {
|
|
153
|
+
title: 'Render AIWG Template',
|
|
154
|
+
description: 'Render AIWG template with provided variables',
|
|
155
|
+
inputSchema: {
|
|
156
|
+
template: z.string().describe('Template path (e.g., "sdlc/intake/project-intake-template.md")'),
|
|
157
|
+
variables: z.record(z.string()).optional().describe('Template variable substitutions')
|
|
158
|
+
}
|
|
159
|
+
}, async ({ template, variables = {} }) => {
|
|
160
|
+
try {
|
|
161
|
+
// Determine framework and template path
|
|
162
|
+
const [framework, ...pathParts] = template.split('/');
|
|
163
|
+
const frameworkPath = FRAMEWORKS[framework] || FRAMEWORKS['sdlc-complete'];
|
|
164
|
+
const templatePath = path.join(frameworkPath, 'templates', ...pathParts);
|
|
165
|
+
|
|
166
|
+
// Read template
|
|
167
|
+
let content = await fs.readFile(templatePath, 'utf-8');
|
|
168
|
+
|
|
169
|
+
// Simple variable substitution
|
|
170
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
171
|
+
content = content.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
|
|
172
|
+
content = content.replace(new RegExp(`\\$\\{${key}\\}`, 'g'), value);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
content: [{
|
|
177
|
+
type: 'text',
|
|
178
|
+
text: content
|
|
179
|
+
}]
|
|
180
|
+
};
|
|
181
|
+
} catch (error) {
|
|
182
|
+
return {
|
|
183
|
+
content: [{
|
|
184
|
+
type: 'text',
|
|
185
|
+
text: `Error rendering template: ${error.message}`
|
|
186
|
+
}],
|
|
187
|
+
isError: true
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// Tool: agent-list
|
|
193
|
+
server.registerTool('agent-list', {
|
|
194
|
+
title: 'List AIWG Agents',
|
|
195
|
+
description: 'List available AIWG agents',
|
|
196
|
+
inputSchema: {
|
|
197
|
+
framework: z.enum(['sdlc-complete', 'media-marketing-kit', 'all']).default('all')
|
|
198
|
+
.describe('Framework to list agents from'),
|
|
199
|
+
category: z.string().optional().describe('Filter by category (e.g., "security", "testing")')
|
|
200
|
+
}
|
|
201
|
+
}, async ({ framework, category }) => {
|
|
202
|
+
try {
|
|
203
|
+
const agents = [];
|
|
204
|
+
|
|
205
|
+
const frameworksToSearch = framework === 'all'
|
|
206
|
+
? Object.keys(FRAMEWORKS)
|
|
207
|
+
: [framework];
|
|
208
|
+
|
|
209
|
+
for (const fw of frameworksToSearch) {
|
|
210
|
+
const agentDir = path.join(FRAMEWORKS[fw], 'agents');
|
|
211
|
+
try {
|
|
212
|
+
const files = await fs.readdir(agentDir);
|
|
213
|
+
for (const file of files) {
|
|
214
|
+
if (file.endsWith('.md') && !file.startsWith('README')) {
|
|
215
|
+
const agentName = file.replace('.md', '');
|
|
216
|
+
if (!category || agentName.includes(category)) {
|
|
217
|
+
agents.push({
|
|
218
|
+
name: agentName,
|
|
219
|
+
framework: fw,
|
|
220
|
+
path: `aiwg://agents/${fw}/${agentName}`
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
} catch {
|
|
226
|
+
// Framework directory might not exist
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
content: [{
|
|
232
|
+
type: 'text',
|
|
233
|
+
text: JSON.stringify({
|
|
234
|
+
count: agents.length,
|
|
235
|
+
agents
|
|
236
|
+
}, null, 2)
|
|
237
|
+
}]
|
|
238
|
+
};
|
|
239
|
+
} catch (error) {
|
|
240
|
+
return {
|
|
241
|
+
content: [{
|
|
242
|
+
type: 'text',
|
|
243
|
+
text: `Error listing agents: ${error.message}`
|
|
244
|
+
}],
|
|
245
|
+
isError: true
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// ============================================
|
|
251
|
+
// RESOURCES
|
|
252
|
+
// ============================================
|
|
253
|
+
|
|
254
|
+
// Resource: prompts catalog
|
|
255
|
+
server.registerResource(
|
|
256
|
+
'prompts-catalog',
|
|
257
|
+
'aiwg://prompts/catalog',
|
|
258
|
+
{
|
|
259
|
+
title: 'AIWG Prompts Catalog',
|
|
260
|
+
description: 'List of all available AIWG prompt templates',
|
|
261
|
+
mimeType: 'application/json'
|
|
262
|
+
},
|
|
263
|
+
async () => {
|
|
264
|
+
const promptsDir = path.join(AIWG_ROOT, 'agentic/code/addons/aiwg-utils/prompts');
|
|
265
|
+
const catalog = await scanDirectory(promptsDir, 'prompts');
|
|
266
|
+
return {
|
|
267
|
+
contents: [{
|
|
268
|
+
uri: 'aiwg://prompts/catalog',
|
|
269
|
+
text: JSON.stringify(catalog, null, 2)
|
|
270
|
+
}]
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
// Resource: templates catalog
|
|
276
|
+
server.registerResource(
|
|
277
|
+
'templates-catalog',
|
|
278
|
+
'aiwg://templates/catalog',
|
|
279
|
+
{
|
|
280
|
+
title: 'AIWG Templates Catalog',
|
|
281
|
+
description: 'List of all available AIWG document templates',
|
|
282
|
+
mimeType: 'application/json'
|
|
283
|
+
},
|
|
284
|
+
async () => {
|
|
285
|
+
const catalogs = {};
|
|
286
|
+
for (const [fw, fwPath] of Object.entries(FRAMEWORKS)) {
|
|
287
|
+
const templatesDir = path.join(fwPath, 'templates');
|
|
288
|
+
try {
|
|
289
|
+
catalogs[fw] = await scanDirectory(templatesDir, 'templates');
|
|
290
|
+
} catch {
|
|
291
|
+
catalogs[fw] = [];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
contents: [{
|
|
296
|
+
uri: 'aiwg://templates/catalog',
|
|
297
|
+
text: JSON.stringify(catalogs, null, 2)
|
|
298
|
+
}]
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
// Resource: agents catalog
|
|
304
|
+
server.registerResource(
|
|
305
|
+
'agents-catalog',
|
|
306
|
+
'aiwg://agents/catalog',
|
|
307
|
+
{
|
|
308
|
+
title: 'AIWG Agents Catalog',
|
|
309
|
+
description: 'List of all available AIWG agents',
|
|
310
|
+
mimeType: 'application/json'
|
|
311
|
+
},
|
|
312
|
+
async () => {
|
|
313
|
+
const catalogs = {};
|
|
314
|
+
for (const [fw, fwPath] of Object.entries(FRAMEWORKS)) {
|
|
315
|
+
const agentsDir = path.join(fwPath, 'agents');
|
|
316
|
+
try {
|
|
317
|
+
catalogs[fw] = await scanDirectory(agentsDir, 'agents');
|
|
318
|
+
} catch {
|
|
319
|
+
catalogs[fw] = [];
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
contents: [{
|
|
324
|
+
uri: 'aiwg://agents/catalog',
|
|
325
|
+
text: JSON.stringify(catalogs, null, 2)
|
|
326
|
+
}]
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
// Dynamic resource: specific prompt
|
|
332
|
+
server.registerResource(
|
|
333
|
+
'prompt',
|
|
334
|
+
new ResourceTemplate('aiwg://prompts/{category}/{name}', { list: undefined }),
|
|
335
|
+
{
|
|
336
|
+
title: 'AIWG Prompt',
|
|
337
|
+
description: 'Retrieve specific AIWG prompt template'
|
|
338
|
+
},
|
|
339
|
+
async (uri, { category, name }) => {
|
|
340
|
+
const promptPath = path.join(
|
|
341
|
+
AIWG_ROOT,
|
|
342
|
+
'agentic/code/addons/aiwg-utils/prompts',
|
|
343
|
+
category,
|
|
344
|
+
`${name}.md`
|
|
345
|
+
);
|
|
346
|
+
try {
|
|
347
|
+
const content = await fs.readFile(promptPath, 'utf-8');
|
|
348
|
+
return {
|
|
349
|
+
contents: [{
|
|
350
|
+
uri: uri.href,
|
|
351
|
+
text: content
|
|
352
|
+
}]
|
|
353
|
+
};
|
|
354
|
+
} catch {
|
|
355
|
+
return {
|
|
356
|
+
contents: [{
|
|
357
|
+
uri: uri.href,
|
|
358
|
+
text: `Prompt not found: ${category}/${name}`
|
|
359
|
+
}]
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
// Dynamic resource: specific template
|
|
366
|
+
server.registerResource(
|
|
367
|
+
'template',
|
|
368
|
+
new ResourceTemplate('aiwg://templates/{framework}/{category}/{name}', { list: undefined }),
|
|
369
|
+
{
|
|
370
|
+
title: 'AIWG Template',
|
|
371
|
+
description: 'Retrieve specific AIWG template'
|
|
372
|
+
},
|
|
373
|
+
async (uri, { framework, category, name }) => {
|
|
374
|
+
const templatePath = path.join(
|
|
375
|
+
FRAMEWORKS[framework] || FRAMEWORKS['sdlc-complete'],
|
|
376
|
+
'templates',
|
|
377
|
+
category,
|
|
378
|
+
`${name}.md`
|
|
379
|
+
);
|
|
380
|
+
try {
|
|
381
|
+
const content = await fs.readFile(templatePath, 'utf-8');
|
|
382
|
+
return {
|
|
383
|
+
contents: [{
|
|
384
|
+
uri: uri.href,
|
|
385
|
+
text: content
|
|
386
|
+
}]
|
|
387
|
+
};
|
|
388
|
+
} catch {
|
|
389
|
+
return {
|
|
390
|
+
contents: [{
|
|
391
|
+
uri: uri.href,
|
|
392
|
+
text: `Template not found: ${framework}/${category}/${name}`
|
|
393
|
+
}]
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
// Dynamic resource: specific agent
|
|
400
|
+
server.registerResource(
|
|
401
|
+
'agent',
|
|
402
|
+
new ResourceTemplate('aiwg://agents/{framework}/{name}', { list: undefined }),
|
|
403
|
+
{
|
|
404
|
+
title: 'AIWG Agent',
|
|
405
|
+
description: 'Retrieve specific AIWG agent definition'
|
|
406
|
+
},
|
|
407
|
+
async (uri, { framework, name }) => {
|
|
408
|
+
const agentPath = path.join(
|
|
409
|
+
FRAMEWORKS[framework] || FRAMEWORKS['sdlc-complete'],
|
|
410
|
+
'agents',
|
|
411
|
+
`${name}.md`
|
|
412
|
+
);
|
|
413
|
+
try {
|
|
414
|
+
const content = await fs.readFile(agentPath, 'utf-8');
|
|
415
|
+
return {
|
|
416
|
+
contents: [{
|
|
417
|
+
uri: uri.href,
|
|
418
|
+
text: content
|
|
419
|
+
}]
|
|
420
|
+
};
|
|
421
|
+
} catch {
|
|
422
|
+
return {
|
|
423
|
+
contents: [{
|
|
424
|
+
uri: uri.href,
|
|
425
|
+
text: `Agent not found: ${framework}/${name}`
|
|
426
|
+
}]
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
);
|
|
431
|
+
|
|
432
|
+
// ============================================
|
|
433
|
+
// PROMPTS (MCP Prompt Templates)
|
|
434
|
+
// ============================================
|
|
435
|
+
|
|
436
|
+
// Prompt: decompose-task
|
|
437
|
+
server.registerPrompt(
|
|
438
|
+
'decompose-task',
|
|
439
|
+
{
|
|
440
|
+
title: 'Task Decomposition',
|
|
441
|
+
description: 'Break down complex task into manageable subtasks (≤7 for cognitive limit)',
|
|
442
|
+
argsSchema: {
|
|
443
|
+
task: z.string().describe('Complex task to decompose'),
|
|
444
|
+
max_subtasks: z.string().default('7').describe('Maximum subtasks (cognitive limit)')
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
({ task, max_subtasks }) => ({
|
|
448
|
+
messages: [{
|
|
449
|
+
role: 'user',
|
|
450
|
+
content: {
|
|
451
|
+
type: 'text',
|
|
452
|
+
text: `## Task Decomposition Request
|
|
453
|
+
|
|
454
|
+
Break down the following task into ${max_subtasks} or fewer concrete, actionable subtasks.
|
|
455
|
+
|
|
456
|
+
**Task**: ${task}
|
|
457
|
+
|
|
458
|
+
**Guidelines**:
|
|
459
|
+
1. Each subtask should be independently executable
|
|
460
|
+
2. Subtasks should have clear completion criteria
|
|
461
|
+
3. Order by logical dependency (prerequisites first)
|
|
462
|
+
4. Identify which subtasks can run in parallel
|
|
463
|
+
5. Flag any subtasks that require user input
|
|
464
|
+
|
|
465
|
+
**Output Format**:
|
|
466
|
+
For each subtask, provide:
|
|
467
|
+
- ID: Sequential identifier
|
|
468
|
+
- Description: Clear action statement
|
|
469
|
+
- Dependencies: List of prerequisite subtask IDs
|
|
470
|
+
- Parallelizable: Yes/No
|
|
471
|
+
- Requires Input: Yes/No (if Yes, specify what)`
|
|
472
|
+
}
|
|
473
|
+
}]
|
|
474
|
+
})
|
|
475
|
+
);
|
|
476
|
+
|
|
477
|
+
// Prompt: parallel-execution
|
|
478
|
+
server.registerPrompt(
|
|
479
|
+
'parallel-execution',
|
|
480
|
+
{
|
|
481
|
+
title: 'Parallel Execution Guide',
|
|
482
|
+
description: 'Identify and coordinate parallelizable work items',
|
|
483
|
+
argsSchema: {
|
|
484
|
+
tasks: z.string().describe('List of tasks to analyze for parallelization')
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
({ tasks }) => ({
|
|
488
|
+
messages: [{
|
|
489
|
+
role: 'user',
|
|
490
|
+
content: {
|
|
491
|
+
type: 'text',
|
|
492
|
+
text: `## Parallel Execution Analysis
|
|
493
|
+
|
|
494
|
+
Analyze the following tasks and identify which can be executed in parallel.
|
|
495
|
+
|
|
496
|
+
**Tasks**:
|
|
497
|
+
${tasks}
|
|
498
|
+
|
|
499
|
+
**Analysis Required**:
|
|
500
|
+
1. **Dependency Graph**: Map task dependencies
|
|
501
|
+
2. **Parallel Groups**: Group tasks that can run simultaneously
|
|
502
|
+
3. **Critical Path**: Identify the longest sequential chain
|
|
503
|
+
4. **Resource Conflicts**: Flag tasks that compete for same resources
|
|
504
|
+
5. **Coordination Points**: Where parallel streams must synchronize
|
|
505
|
+
|
|
506
|
+
**Output**: Provide an execution plan with parallel lanes and sync points.`
|
|
507
|
+
}
|
|
508
|
+
}]
|
|
509
|
+
})
|
|
510
|
+
);
|
|
511
|
+
|
|
512
|
+
// Prompt: recovery-protocol
|
|
513
|
+
server.registerPrompt(
|
|
514
|
+
'recovery-protocol',
|
|
515
|
+
{
|
|
516
|
+
title: 'Recovery Protocol',
|
|
517
|
+
description: 'Structured error recovery using PAUSE→DIAGNOSE→ADAPT→RETRY→ESCALATE',
|
|
518
|
+
argsSchema: {
|
|
519
|
+
error: z.string().describe('Error message or description'),
|
|
520
|
+
context: z.string().optional().describe('Additional context about what was being attempted')
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
({ error, context }) => ({
|
|
524
|
+
messages: [{
|
|
525
|
+
role: 'user',
|
|
526
|
+
content: {
|
|
527
|
+
type: 'text',
|
|
528
|
+
text: `## Recovery Protocol
|
|
529
|
+
|
|
530
|
+
An error has occurred. Follow the structured recovery protocol.
|
|
531
|
+
|
|
532
|
+
**Error**: ${error}
|
|
533
|
+
${context ? `**Context**: ${context}` : ''}
|
|
534
|
+
|
|
535
|
+
**Protocol**:
|
|
536
|
+
|
|
537
|
+
### 1. PAUSE
|
|
538
|
+
Stop execution and preserve current state.
|
|
539
|
+
- What was the exact operation being performed?
|
|
540
|
+
- What state needs to be preserved?
|
|
541
|
+
|
|
542
|
+
### 2. DIAGNOSE
|
|
543
|
+
Analyze the error and classify it:
|
|
544
|
+
- **Syntax Error**: Fix formatting/structure
|
|
545
|
+
- **Schema Mismatch**: Re-inspect target (Rule 4: Grounding)
|
|
546
|
+
- **Logic Error**: Decompose further
|
|
547
|
+
- **Loop Detected**: Change approach entirely
|
|
548
|
+
- **External Failure**: Network, API, or resource issue
|
|
549
|
+
|
|
550
|
+
### 3. ADAPT
|
|
551
|
+
Choose a recovery strategy:
|
|
552
|
+
- Simple retry (transient failures)
|
|
553
|
+
- Modified approach (logic issues)
|
|
554
|
+
- Alternative path (blocked resources)
|
|
555
|
+
- Partial completion (scope reduction)
|
|
556
|
+
|
|
557
|
+
### 4. RETRY
|
|
558
|
+
Execute adapted approach (max 3 attempts).
|
|
559
|
+
Track what was tried and outcomes.
|
|
560
|
+
|
|
561
|
+
### 5. ESCALATE
|
|
562
|
+
If retry fails, prepare structured escalation:
|
|
563
|
+
- What was attempted
|
|
564
|
+
- What failed
|
|
565
|
+
- Current state
|
|
566
|
+
- Recommended next steps
|
|
567
|
+
- Human decision required`
|
|
568
|
+
}
|
|
569
|
+
}]
|
|
570
|
+
})
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
return server;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// ============================================
|
|
577
|
+
// HELPER FUNCTIONS
|
|
578
|
+
// ============================================
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* Scan directory for files
|
|
582
|
+
*/
|
|
583
|
+
async function scanDirectory(dir, type) {
|
|
584
|
+
const results = [];
|
|
585
|
+
try {
|
|
586
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
587
|
+
for (const entry of entries) {
|
|
588
|
+
if (entry.isDirectory()) {
|
|
589
|
+
const subResults = await scanDirectory(path.join(dir, entry.name), type);
|
|
590
|
+
results.push(...subResults.map(r => ({
|
|
591
|
+
...r,
|
|
592
|
+
category: entry.name
|
|
593
|
+
})));
|
|
594
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
595
|
+
results.push({
|
|
596
|
+
name: entry.name.replace('.md', ''),
|
|
597
|
+
path: path.join(dir, entry.name),
|
|
598
|
+
uri: `aiwg://${type}/${entry.name.replace('.md', '')}`
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
} catch {
|
|
603
|
+
// Directory doesn't exist
|
|
604
|
+
}
|
|
605
|
+
return results;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Start the MCP server with stdio transport
|
|
610
|
+
*/
|
|
611
|
+
export async function startServer() {
|
|
612
|
+
const server = createServer();
|
|
613
|
+
const transport = new StdioServerTransport();
|
|
614
|
+
|
|
615
|
+
console.error('[AIWG MCP] Starting server...');
|
|
616
|
+
await server.connect(transport);
|
|
617
|
+
console.error('[AIWG MCP] Server connected via stdio transport');
|
|
618
|
+
|
|
619
|
+
// Handle graceful shutdown
|
|
620
|
+
process.on('SIGINT', async () => {
|
|
621
|
+
console.error('[AIWG MCP] Shutting down...');
|
|
622
|
+
await server.close();
|
|
623
|
+
process.exit(0);
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// Run if executed directly
|
|
628
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
629
|
+
startServer().catch(error => {
|
|
630
|
+
console.error('[AIWG MCP] Fatal error:', error);
|
|
631
|
+
process.exit(1);
|
|
632
|
+
});
|
|
633
|
+
}
|