@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,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Best-Practices Audit Handler
|
|
3
|
+
*
|
|
4
|
+
* Launches `/best-practices-audit` — a research-grounded validation of a
|
|
5
|
+
* target (file, directory, or topic) against current external best practices
|
|
6
|
+
* with citation guardrails. The actual research is performed by the agent
|
|
7
|
+
* following the slash command skill in research-complete; this handler is
|
|
8
|
+
* a thin shim that parses flags, validates the target, computes the output
|
|
9
|
+
* path, and either spawns the configured provider or prints guidance for
|
|
10
|
+
* IDE-integrated providers.
|
|
11
|
+
*
|
|
12
|
+
* Pattern matches src/cli/handlers/sdlc-accelerate.ts — same agent-spawn
|
|
13
|
+
* conventions, same provider gating, same --params / --dangerous handling.
|
|
14
|
+
*
|
|
15
|
+
* @architecture @.aiwg/architecture/decisions/ADR-023-contributor-discovery-convention.md
|
|
16
|
+
* @issue #943
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from 'child_process';
|
|
19
|
+
import { existsSync } from 'fs';
|
|
20
|
+
import path from 'path';
|
|
21
|
+
import { projectAiwgPath } from '../../config/project-artifacts.js';
|
|
22
|
+
import { parseAgentSpawnFlags, buildAgentArgs, getProviderConfig, isSpawnableProvider, dangerousWarning, spawnableProviders, } from '../agent-spawn.js';
|
|
23
|
+
/**
|
|
24
|
+
* Best-practices audit positional + flag parser. Distinct from
|
|
25
|
+
* `parseAgentSpawnFlags` because most of the flags are forwarded to the
|
|
26
|
+
* skill. We extract only the ones we need to validate locally; the rest
|
|
27
|
+
* survive in `remaining` and get appended to the slash-command prompt.
|
|
28
|
+
*/
|
|
29
|
+
function parseAuditFlags(args) {
|
|
30
|
+
const audit = {};
|
|
31
|
+
const rest = [];
|
|
32
|
+
for (let i = 0; i < args.length; i++) {
|
|
33
|
+
const a = args[i];
|
|
34
|
+
const next = () => args[++i];
|
|
35
|
+
switch (a) {
|
|
36
|
+
case '--focus':
|
|
37
|
+
audit.focus = next();
|
|
38
|
+
rest.push(a, audit.focus ?? '');
|
|
39
|
+
break;
|
|
40
|
+
case '--framework':
|
|
41
|
+
audit.framework = next();
|
|
42
|
+
rest.push(a, audit.framework ?? '');
|
|
43
|
+
break;
|
|
44
|
+
case '--standard':
|
|
45
|
+
audit.standard = next();
|
|
46
|
+
rest.push(a, audit.standard ?? '');
|
|
47
|
+
break;
|
|
48
|
+
case '--recency':
|
|
49
|
+
audit.recency = next();
|
|
50
|
+
rest.push(a, audit.recency ?? '');
|
|
51
|
+
break;
|
|
52
|
+
case '--depth': {
|
|
53
|
+
const v = next();
|
|
54
|
+
if (v && (v === 'quick' || v === 'standard' || v === 'deep')) {
|
|
55
|
+
audit.depth = v;
|
|
56
|
+
}
|
|
57
|
+
rest.push(a, v ?? '');
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case '--sources':
|
|
61
|
+
audit.sources = next();
|
|
62
|
+
rest.push(a, audit.sources ?? '');
|
|
63
|
+
break;
|
|
64
|
+
case '--exclude':
|
|
65
|
+
audit.exclude = next();
|
|
66
|
+
rest.push(a, audit.exclude ?? '');
|
|
67
|
+
break;
|
|
68
|
+
case '--cite-threshold': {
|
|
69
|
+
const v = next();
|
|
70
|
+
const n = v ? Number(v) : NaN;
|
|
71
|
+
if (Number.isInteger(n) && n > 0)
|
|
72
|
+
audit.citeThreshold = n;
|
|
73
|
+
rest.push(a, v ?? '');
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case '--dissent':
|
|
77
|
+
audit.dissent = true;
|
|
78
|
+
rest.push(a);
|
|
79
|
+
break;
|
|
80
|
+
case '--validate':
|
|
81
|
+
audit.validateMode = true;
|
|
82
|
+
rest.push(a);
|
|
83
|
+
break;
|
|
84
|
+
case '--output':
|
|
85
|
+
audit.output = next();
|
|
86
|
+
// Don't forward --output to the slash command; the handler
|
|
87
|
+
// computes/normalizes the absolute output path separately.
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
rest.push(a);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { audit, rest };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Compute the default output path. Naming convention from #929 §5:
|
|
97
|
+
*
|
|
98
|
+
* .aiwg/reports/best-practices-audit-<target-slug>-<YYYY-MM-DD>.md
|
|
99
|
+
*
|
|
100
|
+
* The slug is derived from a path basename, freeform topic words, or 'audit'
|
|
101
|
+
* if neither produces something usable.
|
|
102
|
+
*/
|
|
103
|
+
function computeOutputPath(target, override, projectRoot) {
|
|
104
|
+
if (override) {
|
|
105
|
+
return path.isAbsolute(override) ? override : path.resolve(projectRoot, override);
|
|
106
|
+
}
|
|
107
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
108
|
+
const slugSource = existsSync(target) ? path.basename(target).replace(/\.[^.]+$/, '') : target;
|
|
109
|
+
const slug = slugSource
|
|
110
|
+
.toLowerCase()
|
|
111
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
112
|
+
.replace(/^-+|-+$/g, '')
|
|
113
|
+
.slice(0, 60) || 'audit';
|
|
114
|
+
return projectAiwgPath(projectRoot, 'reports', `best-practices-audit-${slug}-${date}.md`);
|
|
115
|
+
}
|
|
116
|
+
export class BestPracticesAuditHandler {
|
|
117
|
+
id = 'best-practices-audit';
|
|
118
|
+
name = 'Best-Practices Audit';
|
|
119
|
+
description = 'Research-grounded validation of a target against current external best practices';
|
|
120
|
+
category = 'orchestration';
|
|
121
|
+
aliases = ['best-practices-audit'];
|
|
122
|
+
async execute(ctx) {
|
|
123
|
+
if (ctx.args.includes('--help') || ctx.args.includes('-h')) {
|
|
124
|
+
return { exitCode: 0, message: this.getHelpText() };
|
|
125
|
+
}
|
|
126
|
+
// Spawn flags peeled first (--provider, --dangerous, --params).
|
|
127
|
+
const { opts: spawnOpts, remaining } = parseAgentSpawnFlags(ctx.args);
|
|
128
|
+
// Audit-specific flags peeled next; the rest carries the target +
|
|
129
|
+
// forwarded flags into the slash-command prompt.
|
|
130
|
+
const { audit, rest } = parseAuditFlags(remaining);
|
|
131
|
+
// Target must be the first positional argument. Without one, this is
|
|
132
|
+
// a usage error — the audit command requires a target.
|
|
133
|
+
const positionals = rest.filter(a => !a.startsWith('-'));
|
|
134
|
+
if (positionals.length === 0) {
|
|
135
|
+
return {
|
|
136
|
+
exitCode: 1,
|
|
137
|
+
message: 'best-practices-audit: missing <target>. Pass a file path, directory, or freeform topic.\n' +
|
|
138
|
+
'Run: aiwg best-practices-audit --help',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const target = positionals[0];
|
|
142
|
+
const outputPath = computeOutputPath(target, audit.output, ctx.cwd ?? process.cwd());
|
|
143
|
+
const provider = spawnOpts.provider ?? 'claude';
|
|
144
|
+
const config = getProviderConfig(provider);
|
|
145
|
+
const prompt = this.buildPrompt(target, rest, outputPath);
|
|
146
|
+
if (!isSpawnableProvider(provider)) {
|
|
147
|
+
return {
|
|
148
|
+
exitCode: 0,
|
|
149
|
+
message: [
|
|
150
|
+
`Provider '${config.name}' is not spawnable from the CLI.`,
|
|
151
|
+
config.guidanceMessage ?? '',
|
|
152
|
+
'',
|
|
153
|
+
`Run this in your IDE or agent panel:`,
|
|
154
|
+
` ${prompt}`,
|
|
155
|
+
'',
|
|
156
|
+
`Output will be written to: ${outputPath}`,
|
|
157
|
+
].join('\n'),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const warn = dangerousWarning(provider);
|
|
161
|
+
if (spawnOpts.dangerous && warn) {
|
|
162
|
+
console.warn(`Warning: ${warn}`);
|
|
163
|
+
}
|
|
164
|
+
const agentArgs = buildAgentArgs(prompt, spawnOpts);
|
|
165
|
+
return this.spawnAgent(config.binary, agentArgs, prompt, outputPath);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Compose the slash-command invocation. The agent skill receives the
|
|
169
|
+
* target and forwarded flags verbatim, plus an explicit `--output`
|
|
170
|
+
* pointing at the absolute output path so the skill writes to the
|
|
171
|
+
* handler-computed location regardless of how it interprets cwd.
|
|
172
|
+
*/
|
|
173
|
+
buildPrompt(target, rest, outputPath) {
|
|
174
|
+
const flagsAfterTarget = rest.slice(rest.indexOf(target) + 1).join(' ');
|
|
175
|
+
const targetStr = target.includes(' ') ? `"${target}"` : target;
|
|
176
|
+
const flagsPart = flagsAfterTarget ? ` ${flagsAfterTarget}` : '';
|
|
177
|
+
return `/best-practices-audit ${targetStr}${flagsPart} --output "${outputPath}"`;
|
|
178
|
+
}
|
|
179
|
+
spawnAgent(binary, args, prompt, outputPath) {
|
|
180
|
+
return new Promise(resolve => {
|
|
181
|
+
try {
|
|
182
|
+
const child = spawn(binary, args, { stdio: 'inherit', env: process.env });
|
|
183
|
+
child.on('close', code => resolve({ exitCode: code ?? 0 }));
|
|
184
|
+
child.on('error', err => {
|
|
185
|
+
if (err.code === 'ENOENT') {
|
|
186
|
+
resolve({
|
|
187
|
+
exitCode: 1,
|
|
188
|
+
message: this.getNotFoundMessage(binary, prompt, outputPath),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
resolve({
|
|
193
|
+
exitCode: 1,
|
|
194
|
+
message: `Failed to launch ${binary}: ${err.message}\n\n${this.getNotFoundMessage(binary, prompt, outputPath)}`,
|
|
195
|
+
error: err,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
resolve({
|
|
202
|
+
exitCode: 1,
|
|
203
|
+
message: `Failed to start best-practices-audit: ${err instanceof Error ? err.message : String(err)}\n\n${this.getNotFoundMessage(binary, prompt, outputPath)}`,
|
|
204
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
getNotFoundMessage(binary, prompt, outputPath) {
|
|
210
|
+
return [
|
|
211
|
+
`'${binary}' not found. Install the provider CLI and try again.`,
|
|
212
|
+
`To run manually, open the agent and run:`,
|
|
213
|
+
` ${prompt}`,
|
|
214
|
+
``,
|
|
215
|
+
`Output will be written to: ${outputPath}`,
|
|
216
|
+
].join('\n');
|
|
217
|
+
}
|
|
218
|
+
getHelpText() {
|
|
219
|
+
const spawnable = spawnableProviders().join(', ');
|
|
220
|
+
return `
|
|
221
|
+
Best-Practices Audit — Research-grounded validation against current practice
|
|
222
|
+
|
|
223
|
+
USAGE:
|
|
224
|
+
aiwg best-practices-audit <target> [options]
|
|
225
|
+
aiwg best-practices-audit ".aiwg/architecture/SAD.md" --focus security
|
|
226
|
+
aiwg best-practices-audit "FastAPI dependency injection" --depth deep
|
|
227
|
+
|
|
228
|
+
ARGUMENTS:
|
|
229
|
+
<target> File path, directory, freeform topic, or issue ref
|
|
230
|
+
|
|
231
|
+
FOCUS / SCOPE:
|
|
232
|
+
--focus <area> security, performance, accessibility, licensing,
|
|
233
|
+
api-design, testing, docs, ops, compliance, ...
|
|
234
|
+
--framework <name> Bias toward a named stack (React, Kubernetes, ...)
|
|
235
|
+
--standard <name> Align to a standard (OWASP, SOC2, WCAG 2.2, ...)
|
|
236
|
+
|
|
237
|
+
RESEARCH BUDGET:
|
|
238
|
+
--recency <window> Default 18m. Tighten for fast-moving domains.
|
|
239
|
+
--depth quick|standard|deep Research effort budget (default: standard)
|
|
240
|
+
--sources <list> Restrict to: vendor-docs, standards-bodies,
|
|
241
|
+
practitioner-blogs, conference-talks, academic,
|
|
242
|
+
github-discussions
|
|
243
|
+
--exclude <list> e.g. exclude SEO-spam domains
|
|
244
|
+
--cite-threshold <N> Minimum distinct sources before a finding is reported (default: 2)
|
|
245
|
+
|
|
246
|
+
REPORTING:
|
|
247
|
+
--dissent Surface practitioner disagreement, not just consensus
|
|
248
|
+
--validate Re-validate existing claims in the target rather than
|
|
249
|
+
generating new ones
|
|
250
|
+
--output <path> Default: .aiwg/reports/best-practices-audit-<slug>-<date>.md
|
|
251
|
+
|
|
252
|
+
AGENT OPTIONS:
|
|
253
|
+
--provider <name> Agent system to use (default: claude)
|
|
254
|
+
Spawnable: ${spawnable}
|
|
255
|
+
IDE-integrated (guidance only): copilot, cursor, factory, warp, windsurf
|
|
256
|
+
--dangerous Enable unrestricted mode (passes provider's native flag).
|
|
257
|
+
--params "<args>" Pass arbitrary args verbatim to the agent binary.
|
|
258
|
+
|
|
259
|
+
ANTI-HALLUCINATION GUARDRAILS:
|
|
260
|
+
- No fabricated citations, DOIs, URLs, or quotes (Citation Policy enforced).
|
|
261
|
+
- Findings need >= --cite-threshold distinct, retrievable sources or are
|
|
262
|
+
downgraded.
|
|
263
|
+
- Conflicting sources surface as labeled disagreements, not silent picks.
|
|
264
|
+
- Sparse-signal honesty: confidence is downgraded rather than filled with priors.
|
|
265
|
+
|
|
266
|
+
EXAMPLES:
|
|
267
|
+
aiwg best-practices-audit ".aiwg/architecture/SAD.md"
|
|
268
|
+
aiwg best-practices-audit ".aiwg/architecture/SAD.md" --focus security --standard OWASP
|
|
269
|
+
aiwg best-practices-audit "src/auth/" --focus security --depth deep --dissent
|
|
270
|
+
aiwg best-practices-audit "FastAPI request validation patterns" --recency 6m
|
|
271
|
+
aiwg best-practices-audit ".aiwg/architecture/" --validate
|
|
272
|
+
`;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
export const bestPracticesAuditHandler = new BestPracticesAuditHandler();
|
|
276
|
+
/**
|
|
277
|
+
* Internal exports for testing only. Not part of the public CLI surface.
|
|
278
|
+
*/
|
|
279
|
+
export const __test__ = { parseAuditFlags, computeOutputPath };
|
|
280
|
+
//# sourceMappingURL=best-practices-audit.js.map
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { mkdir, readFile } from 'node:fs/promises';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
export const COCKPIT_PACKAGE_NAME = '@aiwg/cockpit';
|
|
7
|
+
export function cockpitHome() {
|
|
8
|
+
return process.env.AIWG_COCKPIT_HOME || path.join(homedir(), '.aiwg', 'cockpit', 'package');
|
|
9
|
+
}
|
|
10
|
+
async function readJson(file) {
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(await readFile(file, 'utf8'));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function coreVersion(frameworkRoot) {
|
|
19
|
+
const pkg = await readJson(path.join(frameworkRoot, 'package.json'));
|
|
20
|
+
return typeof pkg?.version === 'string' && pkg.version.length > 0 ? pkg.version : 'latest';
|
|
21
|
+
}
|
|
22
|
+
function packageRoot(home = cockpitHome()) {
|
|
23
|
+
return path.join(home, 'node_modules', '@aiwg', 'cockpit');
|
|
24
|
+
}
|
|
25
|
+
export async function resolveCockpitInstall(home = cockpitHome()) {
|
|
26
|
+
const root = packageRoot(home);
|
|
27
|
+
const pkg = await readJson(path.join(root, 'package.json'));
|
|
28
|
+
if (!pkg)
|
|
29
|
+
return { installed: false, packageRoot: root };
|
|
30
|
+
const bin = typeof pkg.bin === 'string'
|
|
31
|
+
? pkg.bin
|
|
32
|
+
: typeof pkg.bin?.['aiwg-cockpit'] === 'string'
|
|
33
|
+
? pkg.bin['aiwg-cockpit']
|
|
34
|
+
: 'bridge/src/server.mjs';
|
|
35
|
+
const entrypoint = path.join(root, bin);
|
|
36
|
+
return {
|
|
37
|
+
installed: existsSync(entrypoint),
|
|
38
|
+
version: typeof pkg.version === 'string' ? pkg.version : undefined,
|
|
39
|
+
packageRoot: root,
|
|
40
|
+
entrypoint,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function runProcess(cmd, args, options = {}) {
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
const child = spawn(cmd, args, {
|
|
46
|
+
cwd: options.cwd,
|
|
47
|
+
env: options.env,
|
|
48
|
+
stdio: 'inherit',
|
|
49
|
+
});
|
|
50
|
+
child.once('error', reject);
|
|
51
|
+
child.once('close', (code) => resolve(code ?? 1));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export async function installCockpit(ctx, args = ctx.args) {
|
|
55
|
+
const version = await coreVersion(ctx.frameworkRoot);
|
|
56
|
+
const home = cockpitHome();
|
|
57
|
+
const spec = version === 'latest' ? COCKPIT_PACKAGE_NAME : `${COCKPIT_PACKAGE_NAME}@${version}`;
|
|
58
|
+
const dryRun = args.includes('--dry-run');
|
|
59
|
+
if (dryRun) {
|
|
60
|
+
return {
|
|
61
|
+
exitCode: 0,
|
|
62
|
+
message: [
|
|
63
|
+
`Would install ${spec}`,
|
|
64
|
+
`Target: ${home}`,
|
|
65
|
+
'Run without --dry-run to acquire the opt-in Cockpit package.',
|
|
66
|
+
].join('\n'),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
await mkdir(home, { recursive: true });
|
|
70
|
+
const code = await runProcess('npm', ['install', '--prefix', home, '--no-audit', '--fund=false', spec], {
|
|
71
|
+
cwd: ctx.cwd,
|
|
72
|
+
});
|
|
73
|
+
if (code !== 0) {
|
|
74
|
+
return { exitCode: code, message: `Failed to install ${spec}` };
|
|
75
|
+
}
|
|
76
|
+
const install = await resolveCockpitInstall(home);
|
|
77
|
+
if (!install.installed) {
|
|
78
|
+
return { exitCode: 1, message: `${COCKPIT_PACKAGE_NAME} installed, but no aiwg-cockpit entrypoint was found.` };
|
|
79
|
+
}
|
|
80
|
+
if (version !== 'latest' && install.version !== version) {
|
|
81
|
+
return {
|
|
82
|
+
exitCode: 1,
|
|
83
|
+
message: `Installed ${COCKPIT_PACKAGE_NAME}@${install.version ?? 'unknown'}, expected ${version}.`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return { exitCode: 0, message: `Installed ${COCKPIT_PACKAGE_NAME}@${install.version} in ${home}` };
|
|
87
|
+
}
|
|
88
|
+
export const cockpitHandler = {
|
|
89
|
+
id: 'cockpit',
|
|
90
|
+
name: 'Cockpit',
|
|
91
|
+
description: 'Launch the opt-in AIWG Cockpit control plane',
|
|
92
|
+
category: 'utility',
|
|
93
|
+
aliases: [],
|
|
94
|
+
async execute(ctx) {
|
|
95
|
+
const install = await resolveCockpitInstall();
|
|
96
|
+
const version = await coreVersion(ctx.frameworkRoot);
|
|
97
|
+
const autoInstall = ctx.args.includes('--install') || ctx.args.includes('--yes') || ctx.args.includes('-y');
|
|
98
|
+
if (ctx.args.includes('--status')) {
|
|
99
|
+
return {
|
|
100
|
+
exitCode: 0,
|
|
101
|
+
message: install.installed
|
|
102
|
+
? `${COCKPIT_PACKAGE_NAME}@${install.version ?? 'unknown'} installed at ${install.packageRoot}`
|
|
103
|
+
: `${COCKPIT_PACKAGE_NAME} not installed. Run: aiwg use cockpit`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (!install.installed) {
|
|
107
|
+
if (autoInstall) {
|
|
108
|
+
const result = await installCockpit(ctx, ctx.args);
|
|
109
|
+
if (result.exitCode !== 0)
|
|
110
|
+
return result;
|
|
111
|
+
return this.execute({ ...ctx, args: ctx.args.filter((arg) => arg !== '--install' && arg !== '--yes' && arg !== '-y') });
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
exitCode: 1,
|
|
115
|
+
message: [
|
|
116
|
+
'AIWG Cockpit is not installed.',
|
|
117
|
+
`Install the opt-in package with: aiwg use cockpit`,
|
|
118
|
+
`Expected package: ${COCKPIT_PACKAGE_NAME}@${version}`,
|
|
119
|
+
'No Cockpit dependency is required for the base aiwg CLI.',
|
|
120
|
+
].join('\n'),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (version !== 'latest' && install.version !== version) {
|
|
124
|
+
return {
|
|
125
|
+
exitCode: 1,
|
|
126
|
+
message: [
|
|
127
|
+
`AIWG Cockpit version mismatch: installed ${install.version ?? 'unknown'}, core ${version}.`,
|
|
128
|
+
'Refresh the opt-in package with: aiwg use cockpit',
|
|
129
|
+
].join('\n'),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const passthrough = ctx.args.filter((arg) => arg !== '--status');
|
|
133
|
+
const code = await runProcess(process.execPath, [install.entrypoint, ...passthrough], { cwd: ctx.cwd });
|
|
134
|
+
return { exitCode: code };
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=cockpit.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { printCommandLogReport } from '../command-log.js';
|
|
2
|
+
export const commandLogHandler = {
|
|
3
|
+
id: 'command-log',
|
|
4
|
+
name: 'Command Log',
|
|
5
|
+
description: 'Report opt-in local CLI command invocation logs',
|
|
6
|
+
category: 'utility',
|
|
7
|
+
aliases: [],
|
|
8
|
+
async execute(ctx) {
|
|
9
|
+
const json = ctx.args.includes('--json');
|
|
10
|
+
const limit = readNumberFlag(ctx.args, '--limit') ?? 20;
|
|
11
|
+
const scope = readScopeFlag(ctx.args);
|
|
12
|
+
await printCommandLogReport({
|
|
13
|
+
cwd: ctx.cwd,
|
|
14
|
+
frameworkRoot: ctx.frameworkRoot,
|
|
15
|
+
json,
|
|
16
|
+
limit,
|
|
17
|
+
scope,
|
|
18
|
+
});
|
|
19
|
+
return { exitCode: 0 };
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
function readNumberFlag(args, flag) {
|
|
23
|
+
const idx = args.indexOf(flag);
|
|
24
|
+
if (idx === -1)
|
|
25
|
+
return undefined;
|
|
26
|
+
const raw = args[idx + 1];
|
|
27
|
+
const n = Number(raw);
|
|
28
|
+
return Number.isInteger(n) && n >= 0 ? n : undefined;
|
|
29
|
+
}
|
|
30
|
+
function readScopeFlag(args) {
|
|
31
|
+
const idx = args.indexOf('--scope');
|
|
32
|
+
const raw = idx === -1 ? 'all' : args[idx + 1];
|
|
33
|
+
if (raw === 'project' || raw === 'global' || raw === 'all')
|
|
34
|
+
return raw;
|
|
35
|
+
return 'all';
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=command-log.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon Command Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handlers for daemon-related CLI commands (behavior management, daemon init).
|
|
5
|
+
* Each handler delegates to existing scripts in tools/.
|
|
6
|
+
*
|
|
7
|
+
* @tests @test/unit/cli/handlers/coverage.test.ts
|
|
8
|
+
*/
|
|
9
|
+
import { createScriptRunner } from './script-runner.js';
|
|
10
|
+
import { getFrameworkRoot } from '../../channel/manager.mjs';
|
|
11
|
+
/**
|
|
12
|
+
* Base class for daemon handlers that delegate to scripts
|
|
13
|
+
*/
|
|
14
|
+
class DaemonHandler {
|
|
15
|
+
category = 'daemon';
|
|
16
|
+
get aliases() {
|
|
17
|
+
return [this.id];
|
|
18
|
+
}
|
|
19
|
+
async execute(ctx) {
|
|
20
|
+
const frameworkRoot = await getFrameworkRoot();
|
|
21
|
+
const runner = createScriptRunner(frameworkRoot);
|
|
22
|
+
return runner.run(this.scriptPath, ctx.args);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Behavior Handler
|
|
27
|
+
*
|
|
28
|
+
* Manages behavior YAML bundles that bind directives and toolsets to agent types.
|
|
29
|
+
*/
|
|
30
|
+
class BehaviorHandler extends DaemonHandler {
|
|
31
|
+
id = 'behavior';
|
|
32
|
+
name = 'Behavior';
|
|
33
|
+
description = 'Manage behavior YAML bundles that bind directives and toolsets to agent types';
|
|
34
|
+
scriptPath = 'tools/daemon/behavior.mjs';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Daemon Init Handler
|
|
38
|
+
*
|
|
39
|
+
* Initialize daemon config from a profile template.
|
|
40
|
+
*/
|
|
41
|
+
class DaemonInitHandler extends DaemonHandler {
|
|
42
|
+
id = 'daemon-init';
|
|
43
|
+
name = 'Daemon Init';
|
|
44
|
+
description = 'Initialize daemon config from a profile template (default: manager)';
|
|
45
|
+
scriptPath = 'tools/daemon/init-profile.mjs';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Exported handler instances
|
|
49
|
+
*/
|
|
50
|
+
export const behaviorHandler = new BehaviorHandler();
|
|
51
|
+
export const daemonInitHandler = new DaemonInitHandler();
|
|
52
|
+
/**
|
|
53
|
+
* All daemon handlers for registration
|
|
54
|
+
*/
|
|
55
|
+
export const daemonHandlers = [
|
|
56
|
+
behaviorHandler,
|
|
57
|
+
daemonInitHandler,
|
|
58
|
+
];
|
|
59
|
+
//# sourceMappingURL=daemon.js.map
|