@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,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UseCaseParser - Parse use case documents to extract testable scenarios
|
|
3
|
+
*
|
|
4
|
+
* Parses use case markdown documents following the standard template format
|
|
5
|
+
* and extracts structured test scenarios for test generation.
|
|
6
|
+
*
|
|
7
|
+
* @module src/testing/generators/use-case-parser
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs/promises';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
// ===========================
|
|
12
|
+
// UseCaseParser Class
|
|
13
|
+
// ===========================
|
|
14
|
+
export class UseCaseParser {
|
|
15
|
+
MAIN_SCENARIO_PATTERN = /^#+\s*(Main\s+)?Success\s+Scenario/im;
|
|
16
|
+
EXTENSION_PATTERN = /^#+\s*Extensions?/im;
|
|
17
|
+
EXCEPTION_PATTERN = /^#+\s*Exception(s|\s+Scenario)/im;
|
|
18
|
+
STEP_PATTERN = /^\s*(\d+)\.\s+(?:\*\*(\w+)\*\*:?\s+)?(.+)/;
|
|
19
|
+
PRECONDITION_PATTERN = /^#+\s*Pre-?conditions?/im;
|
|
20
|
+
POSTCONDITION_PATTERN = /^#+\s*Post-?conditions?/im;
|
|
21
|
+
NFR_REF_PATTERN = /NFR-[A-Z]+-\d+/g;
|
|
22
|
+
UC_REF_PATTERN = /UC-\d+/g;
|
|
23
|
+
/**
|
|
24
|
+
* Parse a use case document from file
|
|
25
|
+
*
|
|
26
|
+
* @param filePath - Path to use case markdown file
|
|
27
|
+
* @returns Parse result with structured document
|
|
28
|
+
*/
|
|
29
|
+
async parseFile(filePath) {
|
|
30
|
+
try {
|
|
31
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
32
|
+
return this.parseContent(content, path.basename(filePath));
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
errors: [`Failed to read file: ${error.message}`],
|
|
38
|
+
warnings: []
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parse use case content from string
|
|
44
|
+
*
|
|
45
|
+
* @param content - Markdown content
|
|
46
|
+
* @param sourceName - Source identifier for error messages
|
|
47
|
+
* @returns Parse result with structured document
|
|
48
|
+
*/
|
|
49
|
+
parseContent(content, sourceName = 'input') {
|
|
50
|
+
const errors = [];
|
|
51
|
+
const warnings = [];
|
|
52
|
+
// Extract use case ID from content
|
|
53
|
+
const idMatch = content.match(/UC-(\d+)/);
|
|
54
|
+
const id = idMatch ? `UC-${idMatch[1]}` : this.extractIdFromFilename(sourceName);
|
|
55
|
+
if (!id) {
|
|
56
|
+
errors.push('Could not determine use case ID');
|
|
57
|
+
}
|
|
58
|
+
// Extract title from first heading
|
|
59
|
+
const titleMatch = content.match(/^#\s+(.+)/m);
|
|
60
|
+
const title = titleMatch ? titleMatch[1].trim() : 'Unknown Use Case';
|
|
61
|
+
// Extract actor
|
|
62
|
+
const actorMatch = content.match(/\*\*(?:Primary\s+)?Actor\*\*:\s*(.+)/i) ||
|
|
63
|
+
content.match(/Actor:\s*(.+)/i);
|
|
64
|
+
const actor = actorMatch ? actorMatch[1].trim() : 'User';
|
|
65
|
+
// Extract description
|
|
66
|
+
const descMatch = content.match(/\*\*Description\*\*:\s*(.+)/i) ||
|
|
67
|
+
content.match(/^>\s*(.+)/m);
|
|
68
|
+
const description = descMatch ? descMatch[1].trim() : '';
|
|
69
|
+
// Extract priority
|
|
70
|
+
const priorityMatch = content.match(/\*\*Priority\*\*:\s*(\w+)/i);
|
|
71
|
+
const priority = this.normalizePriority(priorityMatch?.[1] || 'medium');
|
|
72
|
+
// Parse preconditions
|
|
73
|
+
const preconditions = this.parseBulletList(content, this.PRECONDITION_PATTERN);
|
|
74
|
+
// Parse postconditions
|
|
75
|
+
const postconditions = this.parseBulletList(content, this.POSTCONDITION_PATTERN);
|
|
76
|
+
// Parse main scenario
|
|
77
|
+
const mainScenario = this.parseMainScenario(content, id || 'UC-000');
|
|
78
|
+
if (!mainScenario) {
|
|
79
|
+
warnings.push('No main success scenario found');
|
|
80
|
+
}
|
|
81
|
+
// Parse extensions
|
|
82
|
+
const extensions = this.parseExtensions(content, id || 'UC-000');
|
|
83
|
+
// Parse exceptions
|
|
84
|
+
const exceptions = this.parseExceptions(content, id || 'UC-000');
|
|
85
|
+
// Extract NFR references
|
|
86
|
+
const nfrs = this.extractReferences(content, this.NFR_REF_PATTERN);
|
|
87
|
+
// Extract related use cases
|
|
88
|
+
const relatedUseCases = this.extractReferences(content, this.UC_REF_PATTERN)
|
|
89
|
+
.filter(ref => ref !== id);
|
|
90
|
+
if (errors.length > 0) {
|
|
91
|
+
return { success: false, errors, warnings };
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
document: {
|
|
96
|
+
id: id,
|
|
97
|
+
title,
|
|
98
|
+
actor,
|
|
99
|
+
description,
|
|
100
|
+
preconditions,
|
|
101
|
+
postconditions,
|
|
102
|
+
mainScenario: mainScenario || this.createEmptyScenario(id, 'main'),
|
|
103
|
+
extensions,
|
|
104
|
+
exceptions,
|
|
105
|
+
nfrs,
|
|
106
|
+
relatedUseCases,
|
|
107
|
+
priority
|
|
108
|
+
},
|
|
109
|
+
errors: [],
|
|
110
|
+
warnings
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Parse multiple use case files from a directory
|
|
115
|
+
*
|
|
116
|
+
* @param dirPath - Directory containing use case files
|
|
117
|
+
* @returns Array of parse results
|
|
118
|
+
*/
|
|
119
|
+
async parseDirectory(dirPath) {
|
|
120
|
+
const results = new Map();
|
|
121
|
+
try {
|
|
122
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
123
|
+
for (const entry of entries) {
|
|
124
|
+
if (entry.isFile() && entry.name.match(/UC-\d+.*\.md$/i)) {
|
|
125
|
+
const filePath = path.join(dirPath, entry.name);
|
|
126
|
+
const result = await this.parseFile(filePath);
|
|
127
|
+
results.set(entry.name, result);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Return empty map if directory doesn't exist
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Extract testable scenarios from a use case document
|
|
138
|
+
*
|
|
139
|
+
* @param document - Parsed use case document
|
|
140
|
+
* @returns Array of all testable scenarios
|
|
141
|
+
*/
|
|
142
|
+
extractTestableScenarios(document) {
|
|
143
|
+
const scenarios = [];
|
|
144
|
+
// Add main scenario
|
|
145
|
+
scenarios.push(document.mainScenario);
|
|
146
|
+
// Add extensions
|
|
147
|
+
scenarios.push(...document.extensions);
|
|
148
|
+
// Add exceptions
|
|
149
|
+
scenarios.push(...document.exceptions);
|
|
150
|
+
return scenarios;
|
|
151
|
+
}
|
|
152
|
+
// ===========================
|
|
153
|
+
// Private Parsing Methods
|
|
154
|
+
// ===========================
|
|
155
|
+
parseMainScenario(content, useCaseId) {
|
|
156
|
+
const match = content.match(this.MAIN_SCENARIO_PATTERN);
|
|
157
|
+
if (!match)
|
|
158
|
+
return null;
|
|
159
|
+
const sectionStart = match.index + match[0].length;
|
|
160
|
+
const sectionContent = this.extractSectionContent(content, sectionStart);
|
|
161
|
+
const steps = this.parseSteps(sectionContent);
|
|
162
|
+
return {
|
|
163
|
+
id: `${useCaseId}-MSS`,
|
|
164
|
+
name: 'Main Success Scenario',
|
|
165
|
+
type: 'main',
|
|
166
|
+
preconditions: [],
|
|
167
|
+
steps,
|
|
168
|
+
postconditions: []
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
parseExtensions(content, useCaseId) {
|
|
172
|
+
const extensions = [];
|
|
173
|
+
const match = content.match(this.EXTENSION_PATTERN);
|
|
174
|
+
if (!match)
|
|
175
|
+
return extensions;
|
|
176
|
+
const sectionStart = match.index + match[0].length;
|
|
177
|
+
const sectionContent = this.extractSectionContent(content, sectionStart);
|
|
178
|
+
// Parse extension scenarios (e.g., "2a. User cancels...")
|
|
179
|
+
const extensionPattern = /(\d+)([a-z])\.\s+(.+?)(?=\n\d+[a-z]\.|\n#+|\n\n\n|$)/gs;
|
|
180
|
+
let extMatch;
|
|
181
|
+
while ((extMatch = extensionPattern.exec(sectionContent)) !== null) {
|
|
182
|
+
const stepNum = parseInt(extMatch[1]);
|
|
183
|
+
const extId = extMatch[2];
|
|
184
|
+
const extContent = extMatch[3].trim();
|
|
185
|
+
// Parse extension steps
|
|
186
|
+
const extSteps = this.parseExtensionSteps(extContent);
|
|
187
|
+
extensions.push({
|
|
188
|
+
id: `${useCaseId}-EXT-${stepNum}${extId.toUpperCase()}`,
|
|
189
|
+
name: `Extension at step ${stepNum}`,
|
|
190
|
+
type: 'extension',
|
|
191
|
+
preconditions: [],
|
|
192
|
+
steps: extSteps,
|
|
193
|
+
postconditions: [],
|
|
194
|
+
extensionOf: `${useCaseId}-MSS`,
|
|
195
|
+
triggeredAt: stepNum
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return extensions;
|
|
199
|
+
}
|
|
200
|
+
parseExceptions(content, useCaseId) {
|
|
201
|
+
const exceptions = [];
|
|
202
|
+
const match = content.match(this.EXCEPTION_PATTERN);
|
|
203
|
+
if (!match)
|
|
204
|
+
return exceptions;
|
|
205
|
+
const sectionStart = match.index + match[0].length;
|
|
206
|
+
const sectionContent = this.extractSectionContent(content, sectionStart);
|
|
207
|
+
// Parse exception scenarios
|
|
208
|
+
const exceptionPattern = /\*\*([^*]+)\*\*:\s*(.+?)(?=\n\*\*|\n#+|\n\n\n|$)/gs;
|
|
209
|
+
let exMatch;
|
|
210
|
+
let counter = 1;
|
|
211
|
+
while ((exMatch = exceptionPattern.exec(sectionContent)) !== null) {
|
|
212
|
+
const name = exMatch[1].trim();
|
|
213
|
+
const description = exMatch[2].trim();
|
|
214
|
+
exceptions.push({
|
|
215
|
+
id: `${useCaseId}-EXC-${String(counter).padStart(2, '0')}`,
|
|
216
|
+
name,
|
|
217
|
+
type: 'exception',
|
|
218
|
+
preconditions: [],
|
|
219
|
+
steps: [{
|
|
220
|
+
number: 1,
|
|
221
|
+
actor: 'system',
|
|
222
|
+
action: description
|
|
223
|
+
}],
|
|
224
|
+
postconditions: []
|
|
225
|
+
});
|
|
226
|
+
counter++;
|
|
227
|
+
}
|
|
228
|
+
return exceptions;
|
|
229
|
+
}
|
|
230
|
+
parseSteps(content) {
|
|
231
|
+
const steps = [];
|
|
232
|
+
const lines = content.split('\n');
|
|
233
|
+
for (const line of lines) {
|
|
234
|
+
const match = line.match(this.STEP_PATTERN);
|
|
235
|
+
if (match) {
|
|
236
|
+
const number = parseInt(match[1]);
|
|
237
|
+
const actorHint = match[2]?.toLowerCase() || '';
|
|
238
|
+
const action = match[3].trim();
|
|
239
|
+
let actor = 'system';
|
|
240
|
+
if (actorHint.includes('user') || action.toLowerCase().startsWith('user')) {
|
|
241
|
+
actor = 'user';
|
|
242
|
+
}
|
|
243
|
+
else if (actorHint.includes('external') || action.toLowerCase().includes('external')) {
|
|
244
|
+
actor = 'external';
|
|
245
|
+
}
|
|
246
|
+
steps.push({ number, actor, action });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return steps;
|
|
250
|
+
}
|
|
251
|
+
parseExtensionSteps(content) {
|
|
252
|
+
const steps = [];
|
|
253
|
+
const lines = content.split('\n');
|
|
254
|
+
let stepNum = 1;
|
|
255
|
+
for (const line of lines) {
|
|
256
|
+
const trimmed = line.trim();
|
|
257
|
+
if (trimmed && !trimmed.startsWith('#')) {
|
|
258
|
+
// Determine actor from content
|
|
259
|
+
let actor = 'system';
|
|
260
|
+
if (trimmed.toLowerCase().includes('user')) {
|
|
261
|
+
actor = 'user';
|
|
262
|
+
}
|
|
263
|
+
steps.push({
|
|
264
|
+
number: stepNum++,
|
|
265
|
+
actor,
|
|
266
|
+
action: trimmed
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return steps;
|
|
271
|
+
}
|
|
272
|
+
parseBulletList(content, sectionPattern) {
|
|
273
|
+
const items = [];
|
|
274
|
+
const match = content.match(sectionPattern);
|
|
275
|
+
if (!match)
|
|
276
|
+
return items;
|
|
277
|
+
const sectionStart = match.index + match[0].length;
|
|
278
|
+
const sectionContent = this.extractSectionContent(content, sectionStart);
|
|
279
|
+
// Parse bullet points
|
|
280
|
+
const bulletPattern = /^\s*[-*]\s+(.+)/gm;
|
|
281
|
+
let bulletMatch;
|
|
282
|
+
while ((bulletMatch = bulletPattern.exec(sectionContent)) !== null) {
|
|
283
|
+
items.push(bulletMatch[1].trim());
|
|
284
|
+
}
|
|
285
|
+
return items;
|
|
286
|
+
}
|
|
287
|
+
extractSectionContent(content, startIndex) {
|
|
288
|
+
// Find next heading or end of content
|
|
289
|
+
const remaining = content.substring(startIndex);
|
|
290
|
+
const nextHeading = remaining.search(/\n#+\s/);
|
|
291
|
+
if (nextHeading === -1) {
|
|
292
|
+
return remaining;
|
|
293
|
+
}
|
|
294
|
+
return remaining.substring(0, nextHeading);
|
|
295
|
+
}
|
|
296
|
+
extractReferences(content, pattern) {
|
|
297
|
+
const matches = content.match(pattern) || [];
|
|
298
|
+
return [...new Set(matches)]; // Deduplicate
|
|
299
|
+
}
|
|
300
|
+
extractIdFromFilename(filename) {
|
|
301
|
+
const match = filename.match(/UC-(\d+)/i);
|
|
302
|
+
return match ? `UC-${match[1]}` : null;
|
|
303
|
+
}
|
|
304
|
+
normalizePriority(priority) {
|
|
305
|
+
const lower = priority.toLowerCase();
|
|
306
|
+
if (lower.includes('critical') || lower === 'p0')
|
|
307
|
+
return 'critical';
|
|
308
|
+
if (lower.includes('high') || lower === 'p1')
|
|
309
|
+
return 'high';
|
|
310
|
+
if (lower.includes('low') || lower === 'p3')
|
|
311
|
+
return 'low';
|
|
312
|
+
return 'medium';
|
|
313
|
+
}
|
|
314
|
+
createEmptyScenario(useCaseId, type) {
|
|
315
|
+
return {
|
|
316
|
+
id: `${useCaseId}-${type.toUpperCase()}`,
|
|
317
|
+
name: `Empty ${type} scenario`,
|
|
318
|
+
type,
|
|
319
|
+
preconditions: [],
|
|
320
|
+
steps: [],
|
|
321
|
+
postconditions: []
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=use-case-parser.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testing Module
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive test infrastructure including generators, fixtures, and corpus management.
|
|
5
|
+
*
|
|
6
|
+
* @module src/testing
|
|
7
|
+
*/
|
|
8
|
+
export * from './generators/index.js';
|
|
9
|
+
export * from './fixtures/index.js';
|
|
10
|
+
export * from './corpus/index.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical tracker authority and access-path selection.
|
|
3
|
+
*
|
|
4
|
+
* Tracker-sensitive work must resolve authority from `.aiwg/aiwg.config`
|
|
5
|
+
* before considering whichever CLI happens to be authenticated. This module is
|
|
6
|
+
* deliberately pure so skills, context generation, and tests can all share the
|
|
7
|
+
* same authority model.
|
|
8
|
+
*
|
|
9
|
+
* @implements #1734
|
|
10
|
+
* @implements #1735
|
|
11
|
+
*/
|
|
12
|
+
import { resolveRemoteProvider, resolveRemotes, } from '../config/aiwg-config.js';
|
|
13
|
+
function providerFromIssueStorage(issueStorage) {
|
|
14
|
+
const value = issueStorage?.toLowerCase() ?? '';
|
|
15
|
+
if (!value)
|
|
16
|
+
return 'unknown';
|
|
17
|
+
if (value.includes('local'))
|
|
18
|
+
return 'local';
|
|
19
|
+
if (value.includes('gitea'))
|
|
20
|
+
return 'gitea';
|
|
21
|
+
if (value.includes('github'))
|
|
22
|
+
return 'github';
|
|
23
|
+
if (value.includes('gitlab'))
|
|
24
|
+
return 'gitlab';
|
|
25
|
+
return 'unknown';
|
|
26
|
+
}
|
|
27
|
+
function normalizeProvider(provider) {
|
|
28
|
+
return provider === 'gitea' || provider === 'github' || provider === 'gitlab'
|
|
29
|
+
? provider
|
|
30
|
+
: 'unknown';
|
|
31
|
+
}
|
|
32
|
+
function providerMatches(probe, authority) {
|
|
33
|
+
if (authority.provider === 'unknown') {
|
|
34
|
+
return probe.remoteName === authority.issueTrackerRemote || probe.provider === undefined;
|
|
35
|
+
}
|
|
36
|
+
return probe.provider === authority.provider || probe.remoteName === authority.issueTrackerRemote;
|
|
37
|
+
}
|
|
38
|
+
function probeIsUsable(probe, authority) {
|
|
39
|
+
return probe.available === true && probe.authenticated !== false && providerMatches(probe, authority);
|
|
40
|
+
}
|
|
41
|
+
function accessLabel(probe) {
|
|
42
|
+
if (probe.label)
|
|
43
|
+
return probe.label;
|
|
44
|
+
if (probe.kind === 'cli' && probe.cli)
|
|
45
|
+
return `${probe.cli} CLI`;
|
|
46
|
+
if (probe.kind === 'http-api')
|
|
47
|
+
return 'tracker HTTP API';
|
|
48
|
+
return 'MCP/app tools';
|
|
49
|
+
}
|
|
50
|
+
export function resolveTrackerAuthority(config, remoteUrls = {}, configPath = '.aiwg/aiwg.config') {
|
|
51
|
+
const remotes = resolveRemotes(config?.remotes);
|
|
52
|
+
const issueStorage = config?.delivery?.issue_storage;
|
|
53
|
+
const issueTrackerUrl = remoteUrls[remotes.issue_tracker];
|
|
54
|
+
const storageProvider = providerFromIssueStorage(issueStorage);
|
|
55
|
+
const urlProvider = issueTrackerUrl ? normalizeProvider(resolveRemoteProvider(issueTrackerUrl)) : 'unknown';
|
|
56
|
+
return {
|
|
57
|
+
configPath,
|
|
58
|
+
primaryRemote: remotes.primary,
|
|
59
|
+
issueTrackerRemote: remotes.issue_tracker,
|
|
60
|
+
ciRemote: remotes.ci,
|
|
61
|
+
issueTrackerUrl,
|
|
62
|
+
issueStorage,
|
|
63
|
+
provider: storageProvider !== 'unknown' ? storageProvider : urlProvider,
|
|
64
|
+
secondaryRemotes: remotes.secondary,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function chooseTrackerAccess(authority, probes) {
|
|
68
|
+
const mcp = probes.find((probe) => probe.kind === 'mcp-app' && probeIsUsable(probe, authority));
|
|
69
|
+
if (mcp)
|
|
70
|
+
return { kind: 'mcp-app', provider: authority.provider, label: accessLabel(mcp) };
|
|
71
|
+
const api = probes.find((probe) => probe.kind === 'http-api' && probeIsUsable(probe, authority));
|
|
72
|
+
if (api)
|
|
73
|
+
return { kind: 'http-api', provider: authority.provider, label: accessLabel(api) };
|
|
74
|
+
const cli = probes.find((probe) => probe.kind === 'cli' && probeIsUsable(probe, authority));
|
|
75
|
+
if (cli)
|
|
76
|
+
return { kind: 'cli', provider: authority.provider, label: accessLabel(cli) };
|
|
77
|
+
return {
|
|
78
|
+
kind: 'blocker',
|
|
79
|
+
provider: authority.provider,
|
|
80
|
+
label: 'stop/report blocker',
|
|
81
|
+
blocker: [
|
|
82
|
+
`No usable issue-tracker write path for configured tracker '${authority.issueTrackerRemote}'`,
|
|
83
|
+
`(provider: ${authority.provider}, url: ${authority.issueTrackerUrl ?? 'unresolved'}).`,
|
|
84
|
+
'Git SSH remote access only proves repository sync, not issue API access.',
|
|
85
|
+
'Do not file on mirror or secondary remotes unless the user explicitly requests it.',
|
|
86
|
+
].join(' '),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function renderTrackerProtocol(authority) {
|
|
90
|
+
const secondary = authority.secondaryRemotes.length > 0
|
|
91
|
+
? authority.secondaryRemotes
|
|
92
|
+
.map((remote) => `${remote.name}${remote.purpose ? ` (${remote.purpose})` : ''}`)
|
|
93
|
+
.join(', ')
|
|
94
|
+
: 'none configured';
|
|
95
|
+
const issueStorage = authority.issueStorage ?? 'not configured';
|
|
96
|
+
const trackerUrl = authority.issueTrackerUrl ?? 'remote URL unavailable';
|
|
97
|
+
return [
|
|
98
|
+
'### Tracker Authority Protocol',
|
|
99
|
+
'',
|
|
100
|
+
`- Source of truth: [${authority.configPath}](./${authority.configPath})`,
|
|
101
|
+
`- Canonical tracker: \`${authority.issueTrackerRemote}\` (${authority.provider}; ${trackerUrl})`,
|
|
102
|
+
`- Primary repo remote: \`${authority.primaryRemote}\`; CI remote: \`${authority.ciRemote}\``,
|
|
103
|
+
`- Secondary/mirror remotes: ${secondary}`,
|
|
104
|
+
`- Issue storage mode: ${issueStorage}`,
|
|
105
|
+
'',
|
|
106
|
+
'Tracker access order for issue, PR, release, and CI-sensitive tracker operations:',
|
|
107
|
+
'1. MCP/app tools for the configured tracker.',
|
|
108
|
+
'2. Tracker HTTP API with configured credentials.',
|
|
109
|
+
'3. Tracker CLI for the configured tracker, after confirming authentication.',
|
|
110
|
+
'4. Stop and report a blocker.',
|
|
111
|
+
'',
|
|
112
|
+
'- Project config decides tracker authority; installed/authenticated CLIs do not.',
|
|
113
|
+
'- Git SSH remote access is repository sync, not issue-tracker API access.',
|
|
114
|
+
'- Do not file on mirror or secondary remotes just because their CLI is authenticated.',
|
|
115
|
+
'- Treat an unauthenticated tracker CLI as one failed access path, then continue probing MCP/app/API before blocking.',
|
|
116
|
+
].join('\n');
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=capability-protocol.js.map
|