@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,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Manages loading, validating, and merging AIWG CLI configurations from multiple sources.
|
|
5
|
+
* Supports .aiwgrc.json, package.json, and command-line overrides.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, access } from 'fs/promises';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
import { resolve, dirname } from 'path';
|
|
10
|
+
import { constants } from 'fs';
|
|
11
|
+
/**
|
|
12
|
+
* Configuration Loader class
|
|
13
|
+
*/
|
|
14
|
+
export class ConfigLoader {
|
|
15
|
+
configCache = null;
|
|
16
|
+
/**
|
|
17
|
+
* Load configuration from file or defaults
|
|
18
|
+
*/
|
|
19
|
+
async load(configPath) {
|
|
20
|
+
// If cached, return it
|
|
21
|
+
if (this.configCache) {
|
|
22
|
+
return this.configCache;
|
|
23
|
+
}
|
|
24
|
+
// Start with defaults
|
|
25
|
+
let config = this.getDefaults();
|
|
26
|
+
// Try to load from .aiwgrc.json
|
|
27
|
+
if (configPath) {
|
|
28
|
+
const fileConfig = await this.loadFromFile(configPath);
|
|
29
|
+
if (fileConfig) {
|
|
30
|
+
config = this.merge([config, fileConfig]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Look for .aiwgrc.json in current directory and parent directories
|
|
35
|
+
const foundConfig = await this.findConfigFile(process.cwd());
|
|
36
|
+
if (foundConfig) {
|
|
37
|
+
config = this.merge([config, foundConfig]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Try to load from package.json
|
|
41
|
+
const pkgPath = resolve(process.cwd(), 'package.json');
|
|
42
|
+
if (existsSync(pkgPath)) {
|
|
43
|
+
const pkgConfig = await this.loadFromPackageJson(pkgPath);
|
|
44
|
+
if (pkgConfig) {
|
|
45
|
+
config = this.merge([config, pkgConfig]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Validate merged config
|
|
49
|
+
const validation = this.validate(config);
|
|
50
|
+
if (!validation.valid) {
|
|
51
|
+
throw new Error(`Invalid configuration: ${validation.errors.join(', ')}`);
|
|
52
|
+
}
|
|
53
|
+
// Cache it
|
|
54
|
+
this.configCache = config;
|
|
55
|
+
return config;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Load configuration from .aiwgrc.json file
|
|
59
|
+
*/
|
|
60
|
+
async loadFromFile(filePath) {
|
|
61
|
+
try {
|
|
62
|
+
await access(filePath, constants.R_OK);
|
|
63
|
+
const content = await readFile(filePath, 'utf-8');
|
|
64
|
+
const config = JSON.parse(content);
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error.code === 'ENOENT') {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Failed to load config from ${filePath}: ${error}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Load configuration from package.json "aiwg" field
|
|
76
|
+
*/
|
|
77
|
+
async loadFromPackageJson(pkgPath) {
|
|
78
|
+
try {
|
|
79
|
+
const content = await readFile(pkgPath, 'utf-8');
|
|
80
|
+
const pkg = JSON.parse(content);
|
|
81
|
+
return pkg.aiwg || null;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Find config file by walking up directory tree
|
|
89
|
+
*/
|
|
90
|
+
async findConfigFile(startDir) {
|
|
91
|
+
let currentDir = startDir;
|
|
92
|
+
const root = resolve('/');
|
|
93
|
+
while (currentDir !== root) {
|
|
94
|
+
const configPath = resolve(currentDir, '.aiwgrc.json');
|
|
95
|
+
if (existsSync(configPath)) {
|
|
96
|
+
return await this.loadFromFile(configPath);
|
|
97
|
+
}
|
|
98
|
+
const parentDir = dirname(currentDir);
|
|
99
|
+
if (parentDir === currentDir) {
|
|
100
|
+
break; // Reached root
|
|
101
|
+
}
|
|
102
|
+
currentDir = parentDir;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Merge multiple partial configs into one complete config
|
|
108
|
+
*/
|
|
109
|
+
merge(configs) {
|
|
110
|
+
const result = this.getDefaults();
|
|
111
|
+
for (const config of configs) {
|
|
112
|
+
if (config.version)
|
|
113
|
+
result.version = config.version;
|
|
114
|
+
if (config.validation) {
|
|
115
|
+
result.validation = { ...result.validation, ...config.validation };
|
|
116
|
+
}
|
|
117
|
+
if (config.optimization) {
|
|
118
|
+
result.optimization = { ...result.optimization, ...config.optimization };
|
|
119
|
+
}
|
|
120
|
+
if (config.output) {
|
|
121
|
+
result.output = { ...result.output, ...config.output };
|
|
122
|
+
}
|
|
123
|
+
if (config.watch) {
|
|
124
|
+
result.watch = { ...result.watch, ...config.watch };
|
|
125
|
+
}
|
|
126
|
+
if (config.hooks) {
|
|
127
|
+
result.hooks = { ...result.hooks, ...config.hooks };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate configuration object
|
|
134
|
+
*/
|
|
135
|
+
validate(config) {
|
|
136
|
+
const errors = [];
|
|
137
|
+
const warnings = [];
|
|
138
|
+
// Validate version
|
|
139
|
+
if (!config.version || !config.version.match(/^\d+\.\d+$/)) {
|
|
140
|
+
errors.push('Invalid version format (expected "1.0")');
|
|
141
|
+
}
|
|
142
|
+
// Validate validation config
|
|
143
|
+
if (config.validation.threshold < 0 || config.validation.threshold > 100) {
|
|
144
|
+
errors.push('Validation threshold must be between 0 and 100');
|
|
145
|
+
}
|
|
146
|
+
if (config.validation.context &&
|
|
147
|
+
!['academic', 'technical', 'executive', 'casual'].includes(config.validation.context)) {
|
|
148
|
+
errors.push('Invalid validation context');
|
|
149
|
+
}
|
|
150
|
+
// Validate optimization config
|
|
151
|
+
const validStrategies = ['specificity', 'examples', 'constraints', 'voice', 'anti_pattern'];
|
|
152
|
+
for (const strategy of config.optimization.strategies) {
|
|
153
|
+
if (!validStrategies.includes(strategy)) {
|
|
154
|
+
warnings.push(`Unknown optimization strategy: ${strategy}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Validate output config
|
|
158
|
+
if (!['text', 'json', 'html', 'junit'].includes(config.output.format)) {
|
|
159
|
+
errors.push('Invalid output format (must be: text, json, html, or junit)');
|
|
160
|
+
}
|
|
161
|
+
// Validate watch config
|
|
162
|
+
if (config.watch.debounce < 0) {
|
|
163
|
+
errors.push('Watch debounce must be >= 0');
|
|
164
|
+
}
|
|
165
|
+
if (config.watch.patterns.length === 0) {
|
|
166
|
+
warnings.push('No watch patterns specified');
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
valid: errors.length === 0,
|
|
170
|
+
errors,
|
|
171
|
+
warnings
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get default configuration
|
|
176
|
+
*/
|
|
177
|
+
getDefaults() {
|
|
178
|
+
return {
|
|
179
|
+
version: '1.0',
|
|
180
|
+
validation: {
|
|
181
|
+
enabled: true,
|
|
182
|
+
threshold: 70,
|
|
183
|
+
context: undefined,
|
|
184
|
+
failOnCritical: true,
|
|
185
|
+
rules: []
|
|
186
|
+
},
|
|
187
|
+
optimization: {
|
|
188
|
+
enabled: true,
|
|
189
|
+
autoApply: false,
|
|
190
|
+
strategies: ['specificity', 'examples', 'constraints', 'anti_pattern'],
|
|
191
|
+
createBackup: true
|
|
192
|
+
},
|
|
193
|
+
output: {
|
|
194
|
+
format: 'text',
|
|
195
|
+
destination: undefined,
|
|
196
|
+
verbose: false,
|
|
197
|
+
colors: true
|
|
198
|
+
},
|
|
199
|
+
watch: {
|
|
200
|
+
enabled: false,
|
|
201
|
+
patterns: ['**/*.md', '**/*.txt'],
|
|
202
|
+
debounce: 500,
|
|
203
|
+
ignorePatterns: ['**/node_modules/**', '**/.git/**', '**/dist/**']
|
|
204
|
+
},
|
|
205
|
+
hooks: {
|
|
206
|
+
preCommit: false,
|
|
207
|
+
prePush: false,
|
|
208
|
+
hookPath: '.git/hooks'
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Generate example config file content
|
|
214
|
+
*/
|
|
215
|
+
generateExample() {
|
|
216
|
+
const example = this.getDefaults();
|
|
217
|
+
return JSON.stringify(example, null, 2);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Clear cached configuration
|
|
221
|
+
*/
|
|
222
|
+
clearCache() {
|
|
223
|
+
this.configCache = null;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Override specific config values
|
|
227
|
+
*/
|
|
228
|
+
override(config, overrides) {
|
|
229
|
+
return this.merge([config, overrides]);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIWG CLI Environment Detection
|
|
3
|
+
*
|
|
4
|
+
* Centralized helpers for detecting the runtime environment so handlers
|
|
5
|
+
* can make consistent interactive / non-interactive decisions.
|
|
6
|
+
*
|
|
7
|
+
* Phase 3 of the CLI Stabilization Epic (#920).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Return true iff the CLI is running attached to an interactive terminal
|
|
11
|
+
* where it is safe to prompt the user.
|
|
12
|
+
*
|
|
13
|
+
* Conditions (all must hold):
|
|
14
|
+
* - stdin is a TTY
|
|
15
|
+
* - stdout is a TTY
|
|
16
|
+
* - TERM is not 'dumb'
|
|
17
|
+
* - CI env var is not truthy (matches GitHub Actions, GitLab, CircleCI,
|
|
18
|
+
* Travis, Buildkite, Jenkins, and most other CI systems)
|
|
19
|
+
* - DEBIAN_FRONTEND is not 'noninteractive' (common in Docker images)
|
|
20
|
+
*
|
|
21
|
+
* Respects common CI convention: any of
|
|
22
|
+
* CI, CONTINUOUS_INTEGRATION, BUILD_NUMBER, RUN_ID, GITHUB_ACTIONS,
|
|
23
|
+
* GITLAB_CI, CIRCLECI, TRAVIS, BUILDKITE, JENKINS_URL
|
|
24
|
+
* set (to any truthy value) indicates a CI environment.
|
|
25
|
+
*
|
|
26
|
+
* Handlers MUST call this helper instead of re-deriving the check locally.
|
|
27
|
+
* Divergent isTTY checks scattered across handlers have caused bugs in the
|
|
28
|
+
* past (#918 audit findings).
|
|
29
|
+
*/
|
|
30
|
+
export function isInteractive() {
|
|
31
|
+
if (!process.stdin.isTTY)
|
|
32
|
+
return false;
|
|
33
|
+
if (!process.stdout.isTTY)
|
|
34
|
+
return false;
|
|
35
|
+
if (process.env['TERM'] === 'dumb')
|
|
36
|
+
return false;
|
|
37
|
+
if (process.env['DEBIAN_FRONTEND'] === 'noninteractive')
|
|
38
|
+
return false;
|
|
39
|
+
if (isCI())
|
|
40
|
+
return false;
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Return true iff we're running in a continuous-integration environment.
|
|
45
|
+
* Checks the common CI env vars set by major CI systems.
|
|
46
|
+
*/
|
|
47
|
+
export function isCI() {
|
|
48
|
+
const ciVars = [
|
|
49
|
+
'CI',
|
|
50
|
+
'CONTINUOUS_INTEGRATION',
|
|
51
|
+
'BUILD_NUMBER',
|
|
52
|
+
'RUN_ID',
|
|
53
|
+
'GITHUB_ACTIONS',
|
|
54
|
+
'GITLAB_CI',
|
|
55
|
+
'CIRCLECI',
|
|
56
|
+
'TRAVIS',
|
|
57
|
+
'BUILDKITE',
|
|
58
|
+
'JENKINS_URL',
|
|
59
|
+
'TF_BUILD', // Azure DevOps
|
|
60
|
+
'TEAMCITY_VERSION',
|
|
61
|
+
];
|
|
62
|
+
for (const v of ciVars) {
|
|
63
|
+
const val = process.env[v];
|
|
64
|
+
if (val && val !== '0' && val.toLowerCase() !== 'false')
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Return true iff colored output should be emitted.
|
|
71
|
+
*
|
|
72
|
+
* Honors NO_COLOR (per https://no-color.org) and FORCE_COLOR.
|
|
73
|
+
* Requires stdout (or the passed stream) to be a TTY.
|
|
74
|
+
*/
|
|
75
|
+
export function shouldUseColor(stream = process.stdout) {
|
|
76
|
+
if (process.env['NO_COLOR'])
|
|
77
|
+
return false;
|
|
78
|
+
if (process.env['FORCE_COLOR'] && process.env['FORCE_COLOR'] !== '0')
|
|
79
|
+
return true;
|
|
80
|
+
return !!stream.isTTY;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIWG Structured Errors
|
|
3
|
+
*
|
|
4
|
+
* Every intentional error thrown by CLI code should be an `AiwgError` with:
|
|
5
|
+
* - `code` — stable UPPER_SNAKE_CASE identifier (ERR_CATEGORY_REASON)
|
|
6
|
+
* - `exitCode` — process exit code (see EXIT_CODES table below)
|
|
7
|
+
* - `hint` — optional one-line user-facing hint with a suggested next action
|
|
8
|
+
* - `cause` — optional underlying error for chain preservation (ES2022)
|
|
9
|
+
*
|
|
10
|
+
* The top-level formatter in `bin/aiwg.mjs` prints a single-line message and
|
|
11
|
+
* only reveals stack traces when `AIWG_DEBUG=1` or `--verbose` is set.
|
|
12
|
+
*
|
|
13
|
+
* Code naming: category-prefixed uppercase snake_case.
|
|
14
|
+
* ERR_CONFIG_* — problems reading/writing .aiwg/aiwg.config
|
|
15
|
+
* ERR_NETWORK_* — timeouts, unreachable services, HTTP errors
|
|
16
|
+
* ERR_USAGE_* — bad flags, unknown commands, missing required args
|
|
17
|
+
* ERR_FS_* — filesystem errors (permission, ENOENT outside config)
|
|
18
|
+
* ERR_SANDBOX_* — sandbox-specific failures
|
|
19
|
+
* ERR_INTERNAL — unexpected bugs (last resort; prefer a specific code)
|
|
20
|
+
*
|
|
21
|
+
* Phase 4 of the CLI Stabilization Epic (#921).
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Process exit codes used by the CLI. Pragmatic subset of sysexits.h —
|
|
25
|
+
* enough categorization for scripts to branch on without full sysexits
|
|
26
|
+
* ceremony.
|
|
27
|
+
*/
|
|
28
|
+
export const EXIT_CODES = {
|
|
29
|
+
/** Command completed successfully. */
|
|
30
|
+
OK: 0,
|
|
31
|
+
/** General / uncategorized failure. */
|
|
32
|
+
GENERAL: 1,
|
|
33
|
+
/** User error: unknown command, bad flag, missing required argument. */
|
|
34
|
+
USAGE: 2,
|
|
35
|
+
/** Filesystem write failure: permission denied, disk full, read-only. */
|
|
36
|
+
CANT_CREATE: 73,
|
|
37
|
+
/** Config file missing, malformed, or otherwise unusable. */
|
|
38
|
+
CONFIG: 78,
|
|
39
|
+
/** Interrupted by SIGINT (Ctrl-C). 128 + 2. */
|
|
40
|
+
INTERRUPTED: 130,
|
|
41
|
+
/** Terminated by SIGTERM. 128 + 15. */
|
|
42
|
+
TERMINATED: 143,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Structured CLI error with a stable code and a prescribed exit code.
|
|
46
|
+
*
|
|
47
|
+
* Always throw these from handler code instead of bare `Error` so the
|
|
48
|
+
* top-level formatter can render consistent output and so tests can assert
|
|
49
|
+
* on the error code rather than brittle message strings.
|
|
50
|
+
*/
|
|
51
|
+
export class AiwgError extends Error {
|
|
52
|
+
code;
|
|
53
|
+
exitCode;
|
|
54
|
+
hint;
|
|
55
|
+
constructor(init) {
|
|
56
|
+
super(init.message, init.cause !== undefined ? { cause: init.cause } : undefined);
|
|
57
|
+
this.name = 'AiwgError';
|
|
58
|
+
this.code = init.code;
|
|
59
|
+
this.exitCode = init.exitCode ?? EXIT_CODES.GENERAL;
|
|
60
|
+
if (init.hint !== undefined)
|
|
61
|
+
this.hint = init.hint;
|
|
62
|
+
// Stabilize stack trace capture across engines.
|
|
63
|
+
if (typeof Error.captureStackTrace === 'function') {
|
|
64
|
+
Error.captureStackTrace(this, AiwgError);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convenience checker — ts-narrows an unknown to AiwgError. Avoids importing
|
|
70
|
+
* the class just for a typeof-like check at catch sites.
|
|
71
|
+
*/
|
|
72
|
+
export function isAiwgError(err) {
|
|
73
|
+
return err instanceof AiwgError;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Format an error for terminal output. Always returns a single-line primary
|
|
77
|
+
* message; `hint` (if present) is returned as a second line; `stack` and the
|
|
78
|
+
* `cause` chain are included only when verbose is true.
|
|
79
|
+
*
|
|
80
|
+
* Does NOT color the output — caller chooses whether to apply ui.red() etc.
|
|
81
|
+
* so non-TTY stderr paths stay ANSI-clean.
|
|
82
|
+
*/
|
|
83
|
+
export function formatError(err, opts = {}) {
|
|
84
|
+
const lines = [];
|
|
85
|
+
if (isAiwgError(err)) {
|
|
86
|
+
lines.push(`aiwg: error: ${err.message} (code: ${err.code})`);
|
|
87
|
+
if (err.hint)
|
|
88
|
+
lines.push(` hint: ${err.hint}`);
|
|
89
|
+
if (opts.verbose) {
|
|
90
|
+
if (err.stack)
|
|
91
|
+
lines.push(err.stack);
|
|
92
|
+
if (err.cause) {
|
|
93
|
+
lines.push(' cause:');
|
|
94
|
+
lines.push(formatError(err.cause, { verbose: true }));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (err instanceof Error) {
|
|
99
|
+
lines.push(`aiwg: error: ${err.message}`);
|
|
100
|
+
if (opts.verbose && err.stack)
|
|
101
|
+
lines.push(err.stack);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
lines.push(`aiwg: error: ${String(err)}`);
|
|
105
|
+
}
|
|
106
|
+
return lines.join('\n');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Resolve the exit code to use for an error. Non-AiwgError throws and plain
|
|
110
|
+
* strings map to EXIT_CODES.GENERAL.
|
|
111
|
+
*/
|
|
112
|
+
export function exitCodeFor(err) {
|
|
113
|
+
if (isAiwgError(err))
|
|
114
|
+
return err.exitCode;
|
|
115
|
+
return EXIT_CODES.GENERAL;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Convert any thrown value into a uniform HandlerResult shape, preserving
|
|
119
|
+
* AiwgError's semantic fields (code, exitCode, hint) where present.
|
|
120
|
+
*
|
|
121
|
+
* This is the bridge between the in-handler `try { ... } catch (err) { ... }`
|
|
122
|
+
* pattern and the HandlerResult contract the router expects. Use it in every
|
|
123
|
+
* handler's top-level catch:
|
|
124
|
+
*
|
|
125
|
+
* try {
|
|
126
|
+
* await doWork(ctx);
|
|
127
|
+
* return { exitCode: 0 };
|
|
128
|
+
* } catch (err) {
|
|
129
|
+
* return handlerResultFromError(err);
|
|
130
|
+
* }
|
|
131
|
+
*
|
|
132
|
+
* Non-AiwgError throws map to `{ exitCode: 1, message, error }`. AiwgError
|
|
133
|
+
* throws carry their `exitCode` (USAGE=2, CONFIG=78, CANT_CREATE=73, etc.)
|
|
134
|
+
* plus the `hint` merged into the message for single-line output.
|
|
135
|
+
*
|
|
136
|
+
* Phase 5 of the CLI Stabilization Epic (#922) — unblocks the exit-code
|
|
137
|
+
* propagation from Phase 4 (#921) that was previously flattened to 1.
|
|
138
|
+
*/
|
|
139
|
+
export function handlerResultFromError(err) {
|
|
140
|
+
if (isAiwgError(err)) {
|
|
141
|
+
const message = err.hint ? `${err.message} — hint: ${err.hint}` : err.message;
|
|
142
|
+
return { exitCode: err.exitCode, message, error: err };
|
|
143
|
+
}
|
|
144
|
+
if (err instanceof Error) {
|
|
145
|
+
return { exitCode: EXIT_CODES.GENERAL, message: err.message, error: err };
|
|
146
|
+
}
|
|
147
|
+
const message = String(err);
|
|
148
|
+
return { exitCode: EXIT_CODES.GENERAL, message, error: new Error(message) };
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper: walk up from a starting directory to find AIWG's package root
|
|
3
|
+
* (the directory containing the full or lightweight AIWG package.json).
|
|
4
|
+
*
|
|
5
|
+
* Required because the compiled layout (dist/src/<area>/<file>.js) and the
|
|
6
|
+
* source layout (src/<area>/<file>.ts) are different depths from the package
|
|
7
|
+
* root, so fixed `../../` walks break in one of the two modes. Walking up to
|
|
8
|
+
* the package manifest works in source, full-package, and `@aiwg/cli` modes.
|
|
9
|
+
*
|
|
10
|
+
* @issue #1261
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync } from 'fs';
|
|
13
|
+
import { dirname, join } from 'path';
|
|
14
|
+
/**
|
|
15
|
+
* Walk up from `startDir` looking for an AIWG package manifest.
|
|
16
|
+
* Returns the directory containing that package.json, or `null` if not found
|
|
17
|
+
* within `maxDepth` levels.
|
|
18
|
+
*/
|
|
19
|
+
export function findPackageRoot(startDir, maxDepth = 10) {
|
|
20
|
+
let dir = startDir;
|
|
21
|
+
for (let i = 0; i < maxDepth; i++) {
|
|
22
|
+
const pkgPath = join(dir, 'package.json');
|
|
23
|
+
if (existsSync(pkgPath)) {
|
|
24
|
+
try {
|
|
25
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
26
|
+
if (pkg.name === 'aiwg' || pkg.name === '@aiwg/cli')
|
|
27
|
+
return dir;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
/* malformed package.json — keep walking */
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const parent = dirname(dir);
|
|
34
|
+
if (parent === dir)
|
|
35
|
+
break;
|
|
36
|
+
dir = parent;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=find-package-root.js.map
|