@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +22 -1
- package/bin/aiwg.mjs +349 -0
- package/dist/src/a2a/agent-card.js +145 -0
- package/dist/src/a2a/client.js +411 -0
- package/dist/src/a2a/hitl-cli.js +171 -0
- package/dist/src/a2a/hitl-driver.js +370 -0
- package/dist/src/a2a/hitl.js +181 -0
- package/dist/src/a2a/http.js +193 -0
- package/dist/src/a2a/jcs.js +128 -0
- package/dist/src/a2a/jws.js +187 -0
- package/dist/src/a2a/types.js +24 -0
- package/dist/src/a2a/webhook.js +240 -0
- package/dist/src/activity-log/cli.js +348 -0
- package/dist/src/activity-log/parser.js +81 -0
- package/dist/src/activity-log/types.js +50 -0
- package/dist/src/agents/agent-deployer.js +367 -0
- package/dist/src/agents/agent-packager.js +271 -0
- package/dist/src/agents/agent-validator.js +271 -0
- package/dist/src/agents/grounding/knowledge-base.js +161 -0
- package/dist/src/agents/grounding/types.js +12 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/packaged-agent-inventory.js +75 -0
- package/dist/src/agents/types.js +7 -0
- package/dist/src/api/index.d.ts +10 -0
- package/dist/src/api/index.js +10 -0
- package/dist/src/artifacts/address-parser.js +73 -0
- package/dist/src/artifacts/audit/cli.js +183 -0
- package/dist/src/artifacts/audit/drift.js +122 -0
- package/dist/src/artifacts/audit/types.js +12 -0
- package/dist/src/artifacts/backends/graphology-backend.js +160 -0
- package/dist/src/artifacts/backends/json-backend.js +129 -0
- package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
- package/dist/src/artifacts/browser-export.js +622 -0
- package/dist/src/artifacts/capability-resolver.js +94 -0
- package/dist/src/artifacts/checksum-manifest.js +91 -0
- package/dist/src/artifacts/citation-parser.js +162 -0
- package/dist/src/artifacts/cli.js +1486 -0
- package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
- package/dist/src/artifacts/corpus-tools/cli.js +393 -0
- package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
- package/dist/src/artifacts/corpus-tools/curator.js +186 -0
- package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
- package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
- package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
- package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
- package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
- package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
- package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
- package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
- package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
- package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
- package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
- package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
- package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
- package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
- package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
- package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
- package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
- package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
- package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
- package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
- package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
- package/dist/src/artifacts/corpus-views/build.js +126 -0
- package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
- package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
- package/dist/src/artifacts/corpus-views/renderers.js +353 -0
- package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
- package/dist/src/artifacts/dep-graph.js +173 -0
- package/dist/src/artifacts/discover-facets.js +375 -0
- package/dist/src/artifacts/embedding-index.js +354 -0
- package/dist/src/artifacts/enrichment/cli.js +240 -0
- package/dist/src/artifacts/enrichment/prompt.js +47 -0
- package/dist/src/artifacts/enrichment/store.js +90 -0
- package/dist/src/artifacts/enrichment/types.js +12 -0
- package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
- package/dist/src/artifacts/fortemi-core-sync.js +251 -0
- package/dist/src/artifacts/fortemi-shard-export.js +44 -0
- package/dist/src/artifacts/fulltext.js +108 -0
- package/dist/src/artifacts/graph-backend.js +51 -0
- package/dist/src/artifacts/graph-query.js +247 -0
- package/dist/src/artifacts/hybrid-query.js +225 -0
- package/dist/src/artifacts/index-builder.js +1089 -0
- package/dist/src/artifacts/index-reader.js +112 -0
- package/dist/src/artifacts/index-status.js +193 -0
- package/dist/src/artifacts/legacy-index-migration.js +169 -0
- package/dist/src/artifacts/move.js +154 -0
- package/dist/src/artifacts/operational-state.js +239 -0
- package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
- package/dist/src/artifacts/query-engine.js +1955 -0
- package/dist/src/artifacts/source-graph.js +529 -0
- package/dist/src/artifacts/stats.js +169 -0
- package/dist/src/artifacts/types.js +606 -0
- package/dist/src/artifacts/views/cli.js +293 -0
- package/dist/src/artifacts/views/definition.js +170 -0
- package/dist/src/artifacts/views/store.js +149 -0
- package/dist/src/artifacts/views/types.js +8 -0
- package/dist/src/artifacts/watcher.js +255 -0
- package/dist/src/catalog/builtin-models.json +636 -0
- package/dist/src/catalog/cli.js +228 -0
- package/dist/src/catalog/cli.mjs +289 -0
- package/dist/src/catalog/index.js +15 -0
- package/dist/src/catalog/loader.js +217 -0
- package/dist/src/catalog/loader.mjs +251 -0
- package/dist/src/catalog/sources.json +41 -0
- package/dist/src/catalog/types.js +8 -0
- package/dist/src/channel/manager.mjs +504 -0
- package/dist/src/cli/agent-spawn.js +178 -0
- package/dist/src/cli/cli-extension-loader.js +245 -0
- package/dist/src/cli/command-log.js +275 -0
- package/dist/src/cli/config-loader.js +232 -0
- package/dist/src/cli/env.js +82 -0
- package/dist/src/cli/errors.js +150 -0
- package/dist/src/cli/find-package-root.js +40 -0
- package/dist/src/cli/git-hooks.js +250 -0
- package/dist/src/cli/handlers/agentcard.js +206 -0
- package/dist/src/cli/handlers/artifacts.js +76 -0
- package/dist/src/cli/handlers/best-practices-audit.js +280 -0
- package/dist/src/cli/handlers/cockpit.js +137 -0
- package/dist/src/cli/handlers/command-log.js +37 -0
- package/dist/src/cli/handlers/daemon.js +59 -0
- package/dist/src/cli/handlers/diagnose.js +300 -0
- package/dist/src/cli/handlers/execution-mode.js +105 -0
- package/dist/src/cli/handlers/feedback.js +341 -0
- package/dist/src/cli/handlers/help.js +147 -0
- package/dist/src/cli/handlers/index.js +302 -0
- package/dist/src/cli/handlers/init.js +179 -0
- package/dist/src/cli/handlers/install.js +129 -0
- package/dist/src/cli/handlers/issues.js +46 -0
- package/dist/src/cli/handlers/lint.js +42 -0
- package/dist/src/cli/handlers/local-executor.js +315 -0
- package/dist/src/cli/handlers/marketplace.js +168 -0
- package/dist/src/cli/handlers/mc.js +1010 -0
- package/dist/src/cli/handlers/models.js +352 -0
- package/dist/src/cli/handlers/packages.js +155 -0
- package/dist/src/cli/handlers/ralph-launcher.js +717 -0
- package/dist/src/cli/handlers/ralph.js +575 -0
- package/dist/src/cli/handlers/refresh.js +432 -0
- package/dist/src/cli/handlers/regenerate.js +336 -0
- package/dist/src/cli/handlers/repo-access.js +109 -0
- package/dist/src/cli/handlers/run.js +165 -0
- package/dist/src/cli/handlers/runtime-info.js +301 -0
- package/dist/src/cli/handlers/sandbox.js +197 -0
- package/dist/src/cli/handlers/scaffolding.js +149 -0
- package/dist/src/cli/handlers/script-runner.js +121 -0
- package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
- package/dist/src/cli/handlers/serve.js +1835 -0
- package/dist/src/cli/handlers/session.js +348 -0
- package/dist/src/cli/handlers/setup.js +440 -0
- package/dist/src/cli/handlers/skill-lint.js +367 -0
- package/dist/src/cli/handlers/skill-usage.js +74 -0
- package/dist/src/cli/handlers/steward.js +567 -0
- package/dist/src/cli/handlers/subcommands.js +1702 -0
- package/dist/src/cli/handlers/team.js +337 -0
- package/dist/src/cli/handlers/types.js +11 -0
- package/dist/src/cli/handlers/use.js +2772 -0
- package/dist/src/cli/handlers/utilities.js +703 -0
- package/dist/src/cli/handlers/version.js +134 -0
- package/dist/src/cli/handlers/workspace-context.js +93 -0
- package/dist/src/cli/handlers/workspace.js +126 -0
- package/dist/src/cli/help-generator.js +178 -0
- package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
- package/dist/src/cli/hooks/executor.js +96 -0
- package/dist/src/cli/hooks/index.js +15 -0
- package/dist/src/cli/hooks/registry.js +143 -0
- package/dist/src/cli/hooks/types.js +13 -0
- package/dist/src/cli/log.js +492 -0
- package/dist/src/cli/project-isolation/detect.js +70 -0
- package/dist/src/cli/project-isolation/index.js +7 -0
- package/dist/src/cli/project-isolation/signals.js +17 -0
- package/dist/src/cli/project-isolation/warning.js +102 -0
- package/dist/src/cli/prompt-utils.js +155 -0
- package/dist/src/cli/provider-deployment-plan.js +126 -0
- package/dist/src/cli/provider-resolution.js +119 -0
- package/dist/src/cli/router.js +305 -0
- package/dist/src/cli/scope-resolver.js +392 -0
- package/dist/src/cli/skill-usage.js +616 -0
- package/dist/src/cli/ui.js +224 -0
- package/dist/src/cli/watch-service.js +203 -0
- package/dist/src/cli/workflow-orchestrator.js +478 -0
- package/dist/src/cli/workspace-signals.js +321 -0
- package/dist/src/community/footer.js +14 -0
- package/dist/src/community/links.js +123 -0
- package/dist/src/community/milestones.js +46 -0
- package/dist/src/community/nudge-policy.js +93 -0
- package/dist/src/config/aiwg-config.js +883 -0
- package/dist/src/config/cli.js +703 -0
- package/dist/src/config/gitignore.js +156 -0
- package/dist/src/config/project-artifacts.js +76 -0
- package/dist/src/config/user-config.js +428 -0
- package/dist/src/config/user-registry.js +127 -0
- package/dist/src/config/workspace.js +276 -0
- package/dist/src/contributors/detect.js +39 -0
- package/dist/src/contributors/discover.js +172 -0
- package/dist/src/contributors/heuristic.js +186 -0
- package/dist/src/contributors/index.js +11 -0
- package/dist/src/contributors/types.js +13 -0
- package/dist/src/contributors/validation.js +116 -0
- package/dist/src/data/community.schema.json +43 -0
- package/dist/src/data/community.yaml +16 -0
- package/dist/src/extensions/capability-index.js +270 -0
- package/dist/src/extensions/claude-hooks-installer.js +268 -0
- package/dist/src/extensions/commands/definitions.js +3485 -0
- package/dist/src/extensions/deployment-registration.js +463 -0
- package/dist/src/extensions/index.js +22 -0
- package/dist/src/extensions/loader.js +132 -0
- package/dist/src/extensions/managed-marker.js +100 -0
- package/dist/src/extensions/manifest.js +196 -0
- package/dist/src/extensions/project-local-activity.js +114 -0
- package/dist/src/extensions/project-local-discovery.js +261 -0
- package/dist/src/extensions/project-local-doctor.js +281 -0
- package/dist/src/extensions/project-local-gitignore.js +176 -0
- package/dist/src/extensions/project-local-paths.js +121 -0
- package/dist/src/extensions/project-local-promote.js +218 -0
- package/dist/src/extensions/project-local-remove.js +373 -0
- package/dist/src/extensions/project-local-scaffold.js +252 -0
- package/dist/src/extensions/project-quickref.js +291 -0
- package/dist/src/extensions/registry.js +368 -0
- package/dist/src/extensions/shadow-resolver.js +271 -0
- package/dist/src/extensions/types.js +86 -0
- package/dist/src/extensions/upstream-registry.js +195 -0
- package/dist/src/extensions/validation.js +631 -0
- package/dist/src/features/catalog.js +88 -0
- package/dist/src/features/cli.js +197 -0
- package/dist/src/features/installer.js +57 -0
- package/dist/src/features/paths.js +14 -0
- package/dist/src/features/runtime.js +21 -0
- package/dist/src/features/status.js +134 -0
- package/dist/src/hooks/laziness-detection.js +532 -0
- package/dist/src/intake/git-history-analyzer.js +486 -0
- package/dist/src/intake/index.js +9 -0
- package/dist/src/issues/cli.js +327 -0
- package/dist/src/issues/index.js +5 -0
- package/dist/src/issues/live.js +154 -0
- package/dist/src/issues/local.js +666 -0
- package/dist/src/issues/sync.js +143 -0
- package/dist/src/issues/types.js +2 -0
- package/dist/src/issues/workflows.js +164 -0
- package/dist/src/kb/cli.js +173 -0
- package/dist/src/lint/cli.js +171 -0
- package/dist/src/lint/loader.js +225 -0
- package/dist/src/lint/reporters.js +141 -0
- package/dist/src/lint/runner.js +364 -0
- package/dist/src/lint/types.js +10 -0
- package/dist/src/marketplace/cache.js +110 -0
- package/dist/src/marketplace/identifier.js +63 -0
- package/dist/src/marketplace/registry.js +36 -0
- package/dist/src/marketplace/sources/clawhub.js +53 -0
- package/dist/src/marketplace/sources/git.js +45 -0
- package/dist/src/marketplace/types.js +9 -0
- package/dist/src/mcp/adapters/codex-runtime.js +224 -0
- package/dist/src/mcp/cli.mjs +1197 -0
- package/dist/src/mcp/elicitation.mjs +149 -0
- package/dist/src/mcp/helpers.mjs +287 -0
- package/dist/src/mcp/index.mjs +11 -0
- package/dist/src/mcp/profiles.js +263 -0
- package/dist/src/mcp/profiles.mjs +360 -0
- package/dist/src/mcp/registry.js +376 -0
- package/dist/src/mcp/registry.mjs +387 -0
- package/dist/src/mcp/server.mjs +633 -0
- package/dist/src/mcp/test-simple.mjs +271 -0
- package/dist/src/mcp/tools/command-run.mjs +101 -0
- package/dist/src/mcp/tools/discovery.mjs +291 -0
- package/dist/src/mcp/tools/interaction.mjs +87 -0
- package/dist/src/mcp/tools/orchestration.mjs +320 -0
- package/dist/src/mcp/tools/subsystems.mjs +640 -0
- package/dist/src/memory/cli.js +166 -0
- package/dist/src/memory/project-registry.js +282 -0
- package/dist/src/metrics/artifact-metrics.js +184 -0
- package/dist/src/metrics/context-budget.js +174 -0
- package/dist/src/metrics/token-counter.js +133 -0
- package/dist/src/models/config-loader.js +228 -0
- package/dist/src/models/index.js +22 -0
- package/dist/src/models/model-capabilities.v1.json +120 -0
- package/dist/src/models/model-catalog.v1.json +96 -0
- package/dist/src/models/model-discovery.js +521 -0
- package/dist/src/models/provider-models.js +73 -0
- package/dist/src/models/provider-policy.js +273 -0
- package/dist/src/models/resolver.js +245 -0
- package/dist/src/models/router.js +70 -0
- package/dist/src/models/types.js +8 -0
- package/dist/src/models/wrapper-deployment.js +178 -0
- package/dist/src/models/wrapper-route.js +54 -0
- package/dist/src/ops/cli.js +268 -0
- package/dist/src/ops/registry.js +623 -0
- package/dist/src/packages/adapters/clawhub.js +113 -0
- package/dist/src/packages/adapters/git.js +153 -0
- package/dist/src/packages/adapters/gitea.js +93 -0
- package/dist/src/packages/adapters/github.js +69 -0
- package/dist/src/packages/adapters/local-cache.js +89 -0
- package/dist/src/packages/package-registry.js +143 -0
- package/dist/src/packages/registry.js +238 -0
- package/dist/src/packages/types.js +11 -0
- package/dist/src/plugin/cross-framework-ops.js +475 -0
- package/dist/src/plugin/framework-config-loader.js +235 -0
- package/dist/src/plugin/framework-detector.js +186 -0
- package/dist/src/plugin/framework-isolator.js +341 -0
- package/dist/src/plugin/framework-migration.js +371 -0
- package/dist/src/plugin/metadata-validator.js +906 -0
- package/dist/src/plugin/plugin-installer.js +436 -0
- package/dist/src/plugin/plugin-status.js +369 -0
- package/dist/src/plugin/plugin-uninstaller.js +473 -0
- package/dist/src/plugin/registry-validator.js +344 -0
- package/dist/src/plugin/skill-command-translator.js +415 -0
- package/dist/src/plugin/workspace-creator.js +189 -0
- package/dist/src/plugin/workspace-migrator.js +821 -0
- package/dist/src/policy/authorization.js +390 -0
- package/dist/src/policy/repo-access.js +215 -0
- package/dist/src/provenance/cli.js +16 -0
- package/dist/src/providers/capability-matrix.js +300 -0
- package/dist/src/providers/capability-matrix.yaml +514 -0
- package/dist/src/providers/provider-definitions.js +977 -0
- package/dist/src/providers/provider-definitions.mjs +159 -0
- package/dist/src/providers/provider-inventory.js +169 -0
- package/dist/src/quality/feedback-ab.js +174 -0
- package/dist/src/quality/feedback-collector.js +176 -0
- package/dist/src/quality/feedback-tracker.js +123 -0
- package/dist/src/quality/patterns/adr.json +24 -0
- package/dist/src/quality/patterns/sad.json +24 -0
- package/dist/src/quality/patterns/test-plan.json +24 -0
- package/dist/src/quality/patterns/use-case.json +24 -0
- package/dist/src/quality/scoring.js +157 -0
- package/dist/src/reflections/cli.js +15 -0
- package/dist/src/release/plan.js +139 -0
- package/dist/src/research/cache/manager.js +227 -0
- package/dist/src/research/clients/arxiv.js +156 -0
- package/dist/src/research/clients/base.js +197 -0
- package/dist/src/research/clients/crossref.js +112 -0
- package/dist/src/research/clients/semantic-scholar.js +126 -0
- package/dist/src/research/clients/unpaywall.js +87 -0
- package/dist/src/research/index.js +14 -0
- package/dist/src/research/query-cli.js +336 -0
- package/dist/src/research/services/acquisition.js +313 -0
- package/dist/src/research/services/archival.js +225 -0
- package/dist/src/research/services/citation.js +279 -0
- package/dist/src/research/services/discovery.js +243 -0
- package/dist/src/research/services/documentation.js +269 -0
- package/dist/src/research/services/index.js +14 -0
- package/dist/src/research/services/provenance.js +279 -0
- package/dist/src/research/services/quality.js +370 -0
- package/dist/src/research/services/types.js +7 -0
- package/dist/src/research/storage-cli.js +20 -0
- package/dist/src/research/types.js +47 -0
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.js +2 -0
- package/dist/src/resources/web-release.d.ts +89 -0
- package/dist/src/resources/web-release.js +886 -0
- package/dist/src/rlm/cache/cli.js +162 -0
- package/dist/src/rlm/cache/hash.js +35 -0
- package/dist/src/rlm/cache/store.js +170 -0
- package/dist/src/rlm/cache/types.js +8 -0
- package/dist/src/rlm/cli.js +650 -0
- package/dist/src/serve/a2a-terminal-observer.js +120 -0
- package/dist/src/serve/agent-router.js +205 -0
- package/dist/src/serve/dispatch-router.js +171 -0
- package/dist/src/serve/executor-registry.js +715 -0
- package/dist/src/serve/mission-conductor.js +177 -0
- package/dist/src/serve/orchestrator-adapter.js +113 -0
- package/dist/src/serve/orchestrator-override.js +94 -0
- package/dist/src/serve/orchestrator-pty.js +133 -0
- package/dist/src/serve/pty-bridge.js +799 -0
- package/dist/src/serve/sandbox-registry.js +832 -0
- package/dist/src/serve/screen-reader.js +228 -0
- package/dist/src/serve/stack-adapters.js +68 -0
- package/dist/src/serve/telemetry.js +143 -0
- package/dist/src/skills/adapters/clawhub.js +250 -0
- package/dist/src/skills/adapters/local.js +335 -0
- package/dist/src/skills/adapters/openclaw.js +316 -0
- package/dist/src/skills/cli.js +334 -0
- package/dist/src/skills/registry.js +117 -0
- package/dist/src/skills/run.js +259 -0
- package/dist/src/skills/runtime.js +94 -0
- package/dist/src/skills/types.js +10 -0
- package/dist/src/smiths/agentsmith/demo.js +116 -0
- package/dist/src/smiths/agentsmith/examples.js +300 -0
- package/dist/src/smiths/agentsmith/generator.js +503 -0
- package/dist/src/smiths/agentsmith/index.js +11 -0
- package/dist/src/smiths/agentsmith/types.js +8 -0
- package/dist/src/smiths/commandsmith/example.js +220 -0
- package/dist/src/smiths/commandsmith/generator.js +288 -0
- package/dist/src/smiths/commandsmith/index.js +41 -0
- package/dist/src/smiths/commandsmith/templates.js +296 -0
- package/dist/src/smiths/commandsmith/types.js +7 -0
- package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
- package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
- package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
- package/dist/src/smiths/context-pipeline/discovery.js +187 -0
- package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
- package/dist/src/smiths/context-pipeline/finalization.js +147 -0
- package/dist/src/smiths/context-pipeline/generator.js +477 -0
- package/dist/src/smiths/context-pipeline/index.js +30 -0
- package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
- package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
- package/dist/src/smiths/context-pipeline/overflow.js +212 -0
- package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
- package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
- package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
- package/dist/src/smiths/context-pipeline/types.js +23 -0
- package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
- package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
- package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
- package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
- package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
- package/dist/src/smiths/hook-bridge/index.js +79 -0
- package/dist/src/smiths/hook-bridge/loader.js +116 -0
- package/dist/src/smiths/hook-bridge/shim.js +89 -0
- package/dist/src/smiths/hook-bridge/types.js +31 -0
- package/dist/src/smiths/index.js +39 -0
- package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
- package/dist/src/smiths/mcpsmith/example.js +119 -0
- package/dist/src/smiths/mcpsmith/generator.js +236 -0
- package/dist/src/smiths/mcpsmith/index.js +17 -0
- package/dist/src/smiths/mcpsmith/types.js +10 -0
- package/dist/src/smiths/platform-paths.js +101 -0
- package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
- package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
- package/dist/src/smiths/skillsmith/demo.js +83 -0
- package/dist/src/smiths/skillsmith/examples.js +161 -0
- package/dist/src/smiths/skillsmith/generator.js +316 -0
- package/dist/src/smiths/skillsmith/index.js +12 -0
- package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
- package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
- package/dist/src/smiths/skillsmith/types.js +9 -0
- package/dist/src/smiths/toolsmith/index.js +10 -0
- package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
- package/dist/src/smiths/toolsmith/types.js +8 -0
- package/dist/src/storage/backends/fortemi.js +227 -0
- package/dist/src/storage/backends/fs.js +134 -0
- package/dist/src/storage/backends/logseq.js +309 -0
- package/dist/src/storage/backends/obsidian.js +233 -0
- package/dist/src/storage/cli.js +468 -0
- package/dist/src/storage/config.js +272 -0
- package/dist/src/storage/index.js +108 -0
- package/dist/src/storage/subsystem-cli.js +201 -0
- package/dist/src/storage/types.js +33 -0
- package/dist/src/testing/corpus/corpus-builder.js +383 -0
- package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
- package/dist/src/testing/corpus/index.js +10 -0
- package/dist/src/testing/fixtures/index.js +9 -0
- package/dist/src/testing/fixtures/test-data-factory.js +472 -0
- package/dist/src/testing/generators/index.js +11 -0
- package/dist/src/testing/generators/test-case-generator.js +393 -0
- package/dist/src/testing/generators/test-code-generator.js +384 -0
- package/dist/src/testing/generators/use-case-parser.js +325 -0
- package/dist/src/testing/index.js +11 -0
- package/dist/src/tracker/capability-protocol.js +118 -0
- package/dist/src/update/checker.mjs +396 -0
- package/dist/src/update/notifier.mjs +235 -0
- package/dist/src/writing/content-diversifier.js +804 -0
- package/dist/src/writing/example-generator.js +959 -0
- package/dist/src/writing/example-templates.js +99 -0
- package/dist/src/writing/pattern-library.js +486 -0
- package/dist/src/writing/patterns/banned-phrases.json +4413 -0
- package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
- package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
- package/dist/src/writing/patterns/hedging-language.json +2096 -0
- package/dist/src/writing/patterns/transition-words.json +1285 -0
- package/dist/src/writing/patterns/weak-verbs.json +1112 -0
- package/dist/src/writing/prompt-optimizer.js +660 -0
- package/dist/src/writing/prompt-templates.js +583 -0
- package/dist/src/writing/scoring-config-loader.js +168 -0
- package/dist/src/writing/validation-engine.js +595 -0
- package/dist/src/writing/validation-rules.js +380 -0
- package/dist/src/writing/voice-analyzer.js +439 -0
- package/dist/src/writing/voice-calibration.js +661 -0
- package/dist/src/writing/voice-profiles.json +588 -0
- package/package.json +65 -9
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Features Catalog
|
|
3
|
+
*
|
|
4
|
+
* AIWG ships several runtime-optional features whose dependencies may
|
|
5
|
+
* be installed separately. This catalog is the canonical mapping
|
|
6
|
+
* between **feature names** (operator vocabulary) and the **npm
|
|
7
|
+
* packages** that enable them.
|
|
8
|
+
*
|
|
9
|
+
* Consumed by:
|
|
10
|
+
* - `aiwg features` command (status / info / install / remove)
|
|
11
|
+
* - `aiwg doctor` (Optional Features section)
|
|
12
|
+
* - Runtime error messages (when a dynamic import fails, point at
|
|
13
|
+
* `aiwg features install <name>`)
|
|
14
|
+
*
|
|
15
|
+
* @implements #1219
|
|
16
|
+
*/
|
|
17
|
+
export const FEATURE_CATALOG = [
|
|
18
|
+
{
|
|
19
|
+
name: 'embeddings',
|
|
20
|
+
description: 'Vector embeddings for `aiwg discover` (semantic search beyond the keyword scorer)',
|
|
21
|
+
packages: ['@xenova/transformers', 'hnswlib-node'],
|
|
22
|
+
packageSpecs: {
|
|
23
|
+
'@xenova/transformers': '2.17.2',
|
|
24
|
+
'hnswlib-node': '3.0.0',
|
|
25
|
+
},
|
|
26
|
+
scriptPackages: ['hnswlib-node'],
|
|
27
|
+
enables: [
|
|
28
|
+
'higher hit@K on natural-language queries that don\'t match trigger phrases',
|
|
29
|
+
'optional dense-rerank layer when sparse top-1 is ambiguous',
|
|
30
|
+
],
|
|
31
|
+
cost: '~150 MB — transformers runtime + libvips native binary, one-time download',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'sqlite',
|
|
35
|
+
description: 'SQLite storage backend for memory / activity-log / kb subsystems',
|
|
36
|
+
packages: ['better-sqlite3'],
|
|
37
|
+
packageSpecs: { 'better-sqlite3': '12.8.0' },
|
|
38
|
+
scriptPackages: ['better-sqlite3'],
|
|
39
|
+
enables: [
|
|
40
|
+
'storage.config: backend=sqlite for any subsystem',
|
|
41
|
+
'transactional reads/writes against `.aiwg/storage/`',
|
|
42
|
+
],
|
|
43
|
+
cost: '~5 MB — native compile via node-gyp',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'pty',
|
|
47
|
+
description: 'PTY bridge for daemon — pass-through interactive TUIs (Claude Code, Codex, etc.)',
|
|
48
|
+
packages: ['node-pty'],
|
|
49
|
+
packageSpecs: { 'node-pty': '1.1.0' },
|
|
50
|
+
scriptPackages: ['node-pty'],
|
|
51
|
+
enables: [
|
|
52
|
+
'aiwg daemon pty start / list / stop',
|
|
53
|
+
'daemon web UI for interactive Claude/Codex/etc sessions over WebSocket',
|
|
54
|
+
],
|
|
55
|
+
cost: '~2 MB — native compile via node-gyp',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'webserver',
|
|
59
|
+
description: 'HTTP/WebSocket server for the daemon web UI and ralph-external bridge',
|
|
60
|
+
packages: ['hono', '@hono/node-server', 'ws'],
|
|
61
|
+
packageSpecs: {
|
|
62
|
+
hono: '4.12.18',
|
|
63
|
+
'@hono/node-server': '1.19.14',
|
|
64
|
+
ws: '8.20.0',
|
|
65
|
+
},
|
|
66
|
+
enables: [
|
|
67
|
+
'aiwg daemon serve',
|
|
68
|
+
'browser-based daemon UI',
|
|
69
|
+
'ralph-external WebSocket dispatch',
|
|
70
|
+
],
|
|
71
|
+
cost: '~3 MB — pure JS, no native deps',
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
/** Native packages require a successful runtime load, not just package files. */
|
|
75
|
+
export const NATIVE_FEATURE_PACKAGES = new Set(FEATURE_CATALOG.flatMap(feature => feature.scriptPackages ?? []));
|
|
76
|
+
/** Quick lookup by feature name. */
|
|
77
|
+
export function getFeature(name) {
|
|
78
|
+
return FEATURE_CATALOG.find(f => f.name === name) ?? null;
|
|
79
|
+
}
|
|
80
|
+
/** All feature names — useful for `--all` flags and CLI completion. */
|
|
81
|
+
export function listFeatureNames() {
|
|
82
|
+
return FEATURE_CATALOG.map(f => f.name);
|
|
83
|
+
}
|
|
84
|
+
/** Reverse lookup: given a package name, which feature does it belong to? */
|
|
85
|
+
export function featureForPackage(pkg) {
|
|
86
|
+
return FEATURE_CATALOG.find(f => f.packages.includes(pkg)) ?? null;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aiwg features` CLI subcommands
|
|
3
|
+
*
|
|
4
|
+
* Native packages are installed into a user-owned feature root. Its generated
|
|
5
|
+
* package manifest contains exact package-level allowScripts approvals, so the
|
|
6
|
+
* operator does not need to weaken npm policy globally.
|
|
7
|
+
*/
|
|
8
|
+
import { FEATURE_CATALOG } from './catalog.js';
|
|
9
|
+
import { getFeatureStatus, getAllFeatureStatuses, formatStatusLine } from './status.js';
|
|
10
|
+
import { installFeature } from './installer.js';
|
|
11
|
+
export async function main(args) {
|
|
12
|
+
// If the first arg is a flag (e.g. `--json`), treat the implicit
|
|
13
|
+
// subcommand as `status` and pass everything through. This makes
|
|
14
|
+
// `aiwg features --json` Just Work.
|
|
15
|
+
const firstIsFlag = args[0]?.startsWith('--');
|
|
16
|
+
const subcommand = firstIsFlag ? 'status' : (args[0] ?? 'status');
|
|
17
|
+
const subArgs = firstIsFlag ? args : args.slice(1);
|
|
18
|
+
switch (subcommand) {
|
|
19
|
+
case 'status':
|
|
20
|
+
case 'list':
|
|
21
|
+
await handleStatus(subArgs);
|
|
22
|
+
break;
|
|
23
|
+
case 'info':
|
|
24
|
+
await handleInfo(subArgs);
|
|
25
|
+
break;
|
|
26
|
+
case 'install':
|
|
27
|
+
await handleInstall(subArgs);
|
|
28
|
+
break;
|
|
29
|
+
case 'remove':
|
|
30
|
+
console.error(`Error: \`aiwg features ${subcommand}\` not yet implemented (#1219 Cycle 3).`);
|
|
31
|
+
console.error('');
|
|
32
|
+
console.error('To install manually for now:');
|
|
33
|
+
console.error(' cd <aiwg install root>');
|
|
34
|
+
console.error(' npm install <packages> # see `aiwg features info <name>` for the package list');
|
|
35
|
+
process.exit(1);
|
|
36
|
+
break;
|
|
37
|
+
case 'help':
|
|
38
|
+
case '--help':
|
|
39
|
+
case '-h':
|
|
40
|
+
printHelp();
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
console.error(`Error: unknown subcommand '${subcommand}'`);
|
|
44
|
+
console.error('');
|
|
45
|
+
printHelp();
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function printHelp() {
|
|
50
|
+
console.log('Usage: aiwg features [subcommand] [options]');
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log('Subcommands:');
|
|
53
|
+
console.log(' status Show install status of every optional feature (default)');
|
|
54
|
+
console.log(' info <name> Show detailed info on one feature');
|
|
55
|
+
console.log(' install <name> Install a feature with scoped lifecycle-script approval');
|
|
56
|
+
console.log(' remove Not yet implemented (#1219 Cycle 3)');
|
|
57
|
+
console.log(' help Show this help');
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log('Options:');
|
|
60
|
+
console.log(' --json Emit machine-readable output');
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log('Examples:');
|
|
63
|
+
console.log(' aiwg features # status table');
|
|
64
|
+
console.log(' aiwg features --json # JSON status');
|
|
65
|
+
console.log(' aiwg features info embeddings # what does this feature enable');
|
|
66
|
+
console.log(' aiwg features install pty # explicitly build node-pty');
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log('Available features:');
|
|
69
|
+
for (const f of FEATURE_CATALOG) {
|
|
70
|
+
console.log(` ${f.name.padEnd(12)} — ${f.description}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function handleStatus(args) {
|
|
74
|
+
const json = args.includes('--json');
|
|
75
|
+
const statuses = await getAllFeatureStatuses();
|
|
76
|
+
if (json) {
|
|
77
|
+
console.log(JSON.stringify({
|
|
78
|
+
features: statuses.map(s => ({
|
|
79
|
+
name: s.feature.name,
|
|
80
|
+
available: s.available,
|
|
81
|
+
missing: s.missing,
|
|
82
|
+
packages: s.packages.map(p => ({
|
|
83
|
+
name: p.name,
|
|
84
|
+
installed: p.installed,
|
|
85
|
+
version: p.version,
|
|
86
|
+
loadable: p.loadable,
|
|
87
|
+
error: p.error,
|
|
88
|
+
})),
|
|
89
|
+
})),
|
|
90
|
+
total: statuses.length,
|
|
91
|
+
available: statuses.filter(s => s.available).length,
|
|
92
|
+
missing: statuses.filter(s => !s.available).length,
|
|
93
|
+
}, null, 2));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
console.log('AIWG Optional Features');
|
|
97
|
+
console.log('======================');
|
|
98
|
+
console.log('');
|
|
99
|
+
for (const status of statuses) {
|
|
100
|
+
console.log(formatStatusLine(status));
|
|
101
|
+
}
|
|
102
|
+
console.log('');
|
|
103
|
+
const available = statuses.filter(s => s.available).length;
|
|
104
|
+
console.log(`Total: ${statuses.length} Available: ${available} Missing: ${statuses.length - available}`);
|
|
105
|
+
console.log('');
|
|
106
|
+
console.log('Run `aiwg features info <name>` for details on any feature.');
|
|
107
|
+
}
|
|
108
|
+
async function handleInfo(args) {
|
|
109
|
+
const json = args.includes('--json');
|
|
110
|
+
const positional = args.filter(a => !a.startsWith('--'));
|
|
111
|
+
const name = positional[0];
|
|
112
|
+
if (!name) {
|
|
113
|
+
console.error('Error: feature name required.');
|
|
114
|
+
console.error('');
|
|
115
|
+
console.error('Available features:');
|
|
116
|
+
for (const f of FEATURE_CATALOG) {
|
|
117
|
+
console.error(` ${f.name}`);
|
|
118
|
+
}
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
const status = await getFeatureStatus(name);
|
|
122
|
+
if (!status) {
|
|
123
|
+
console.error(`Error: unknown feature '${name}'.`);
|
|
124
|
+
console.error('');
|
|
125
|
+
console.error('Available features:');
|
|
126
|
+
for (const f of FEATURE_CATALOG) {
|
|
127
|
+
console.error(` ${f.name}`);
|
|
128
|
+
}
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
if (json) {
|
|
132
|
+
console.log(JSON.stringify({
|
|
133
|
+
name: status.feature.name,
|
|
134
|
+
description: status.feature.description,
|
|
135
|
+
enables: status.feature.enables,
|
|
136
|
+
cost: status.feature.cost,
|
|
137
|
+
available: status.available,
|
|
138
|
+
missing: status.missing,
|
|
139
|
+
packages: status.packages.map(p => ({
|
|
140
|
+
name: p.name,
|
|
141
|
+
installed: p.installed,
|
|
142
|
+
version: p.version,
|
|
143
|
+
loadable: p.loadable,
|
|
144
|
+
error: p.error,
|
|
145
|
+
})),
|
|
146
|
+
}, null, 2));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
printFeatureInfo(status);
|
|
150
|
+
}
|
|
151
|
+
function printFeatureInfo(status) {
|
|
152
|
+
const f = status.feature;
|
|
153
|
+
console.log(`Feature: ${f.name}`);
|
|
154
|
+
console.log(`Status: ${status.available ? 'INSTALLED' : 'NOT INSTALLED'}`);
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log(`Description: ${f.description}`);
|
|
157
|
+
console.log('');
|
|
158
|
+
console.log('Enables:');
|
|
159
|
+
for (const cap of f.enables) {
|
|
160
|
+
console.log(` - ${cap}`);
|
|
161
|
+
}
|
|
162
|
+
console.log('');
|
|
163
|
+
console.log(`Install cost: ${f.cost}`);
|
|
164
|
+
console.log('');
|
|
165
|
+
console.log('Packages:');
|
|
166
|
+
for (const p of status.packages) {
|
|
167
|
+
const mark = p.installed && p.loadable ? 'OK' : (p.installed ? '!' : '-');
|
|
168
|
+
const version = p.version ? ` ${p.version}` : '';
|
|
169
|
+
const error = p.error ? ` — ${p.error}` : '';
|
|
170
|
+
console.log(` ${mark} ${p.name}${version}${error}`);
|
|
171
|
+
}
|
|
172
|
+
console.log('');
|
|
173
|
+
if (!status.available) {
|
|
174
|
+
console.log('To install:');
|
|
175
|
+
console.log(` aiwg features install ${f.name}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function handleInstall(args) {
|
|
179
|
+
const name = args.find(arg => !arg.startsWith('--'));
|
|
180
|
+
if (!name)
|
|
181
|
+
throw new Error('Feature name required. Run `aiwg features` to list features.');
|
|
182
|
+
const feature = FEATURE_CATALOG.find(candidate => candidate.name === name);
|
|
183
|
+
if (!feature)
|
|
184
|
+
throw new Error(`Unknown feature '${name}'.`);
|
|
185
|
+
console.log(`Installing optional feature: ${name}`);
|
|
186
|
+
if ((feature.scriptPackages?.length ?? 0) > 0) {
|
|
187
|
+
console.log(`Approved lifecycle scripts: ${feature.scriptPackages.join(', ')}`);
|
|
188
|
+
console.log('Approval is stored only in the AIWG user feature manifest.');
|
|
189
|
+
}
|
|
190
|
+
const root = await installFeature(name);
|
|
191
|
+
const status = await getFeatureStatus(name);
|
|
192
|
+
if (!status?.available) {
|
|
193
|
+
throw new Error(`Feature ${name} was installed but failed its runtime load check. Run \`aiwg doctor\` for details.`);
|
|
194
|
+
}
|
|
195
|
+
console.log(`Feature ${name} is ready (${root}).`);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { promises as fs } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { FEATURE_CATALOG, getFeature } from './catalog.js';
|
|
5
|
+
import { getFeaturesRoot } from './paths.js';
|
|
6
|
+
export async function prepareFeatureManifest(feature, root = getFeaturesRoot()) {
|
|
7
|
+
await fs.mkdir(root, { recursive: true });
|
|
8
|
+
const manifestPath = path.join(root, 'package.json');
|
|
9
|
+
let current = {};
|
|
10
|
+
try {
|
|
11
|
+
current = JSON.parse(await fs.readFile(manifestPath, 'utf8'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// First install, or an invalid partial file left by an interrupted write.
|
|
15
|
+
}
|
|
16
|
+
const knownSpecs = Object.assign({}, ...FEATURE_CATALOG.map(candidate => candidate.packageSpecs));
|
|
17
|
+
const priorDependencies = Object.fromEntries(Object.entries(current.dependencies ?? {}).filter(([name]) => name in knownSpecs));
|
|
18
|
+
const dependencies = {
|
|
19
|
+
...priorDependencies,
|
|
20
|
+
...feature.packageSpecs,
|
|
21
|
+
};
|
|
22
|
+
const allowScripts = {};
|
|
23
|
+
for (const candidate of FEATURE_CATALOG) {
|
|
24
|
+
for (const packageName of candidate.scriptPackages ?? []) {
|
|
25
|
+
if (packageName in dependencies)
|
|
26
|
+
allowScripts[packageName] = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const manifest = {
|
|
30
|
+
name: 'aiwg-optional-features',
|
|
31
|
+
private: true,
|
|
32
|
+
version: '1.0.0',
|
|
33
|
+
description: 'User-owned optional runtime packages managed by aiwg features',
|
|
34
|
+
dependencies,
|
|
35
|
+
allowScripts,
|
|
36
|
+
};
|
|
37
|
+
const tempPath = `${manifestPath}.tmp-${process.pid}`;
|
|
38
|
+
await fs.writeFile(tempPath, `${JSON.stringify(manifest, null, 2)}\n`, { mode: 0o600 });
|
|
39
|
+
await fs.rename(tempPath, manifestPath);
|
|
40
|
+
return manifest;
|
|
41
|
+
}
|
|
42
|
+
export async function installFeature(name, options = {}) {
|
|
43
|
+
const feature = getFeature(name);
|
|
44
|
+
if (!feature)
|
|
45
|
+
throw new Error(`Unknown optional feature: ${name}`);
|
|
46
|
+
const root = options.root ?? getFeaturesRoot();
|
|
47
|
+
await prepareFeatureManifest(feature, root);
|
|
48
|
+
const npmCommand = options.npmCommand ?? (process.platform === 'win32' ? 'npm.cmd' : 'npm');
|
|
49
|
+
const result = spawnSync(npmCommand, ['install', '--prefix', root, '--no-audit', '--no-fund'], { stdio: 'inherit', env: process.env });
|
|
50
|
+
if (result.error)
|
|
51
|
+
throw result.error;
|
|
52
|
+
if (result.status !== 0) {
|
|
53
|
+
throw new Error(`npm exited with status ${result.status ?? 'unknown'} while installing ${name}`);
|
|
54
|
+
}
|
|
55
|
+
return root;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/** User-owned root for optional runtime packages. */
|
|
4
|
+
export function getFeaturesRoot() {
|
|
5
|
+
if (process.env.AIWG_FEATURES_HOME)
|
|
6
|
+
return process.env.AIWG_FEATURES_HOME;
|
|
7
|
+
if (process.platform === 'win32') {
|
|
8
|
+
const dataHome = process.env.LOCALAPPDATA ?? path.join(os.homedir(), 'AppData', 'Local');
|
|
9
|
+
return path.join(dataHome, 'aiwg', 'features');
|
|
10
|
+
}
|
|
11
|
+
const dataHome = process.env.XDG_DATA_HOME ?? path.join(os.homedir(), '.local', 'share');
|
|
12
|
+
return path.join(dataHome, 'aiwg', 'features');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { getFeaturesRoot } from './paths.js';
|
|
5
|
+
/** Load an optional package from the user feature root, then the base install. */
|
|
6
|
+
export async function loadFeaturePackage(name) {
|
|
7
|
+
const featureRequire = createRequire(path.join(getFeaturesRoot(), 'package.json'));
|
|
8
|
+
try {
|
|
9
|
+
const resolved = featureRequire.resolve(name);
|
|
10
|
+
return await import(pathToFileURL(resolved).href);
|
|
11
|
+
}
|
|
12
|
+
catch (featureError) {
|
|
13
|
+
try {
|
|
14
|
+
return await (new Function('m', 'return import(m)'))(name);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
throw featureError;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Features — Installation Status Probe
|
|
3
|
+
*
|
|
4
|
+
* Resolves whether each feature in the catalog is currently available
|
|
5
|
+
* by attempting to read its packages from the AIWG install's
|
|
6
|
+
* `node_modules`. Pure best-effort — never throws on missing packages,
|
|
7
|
+
* just reports them as not installed.
|
|
8
|
+
*
|
|
9
|
+
* @implements #1219
|
|
10
|
+
*/
|
|
11
|
+
import { promises as fs } from 'node:fs';
|
|
12
|
+
import { createRequire } from 'node:module';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
import { FEATURE_CATALOG, NATIVE_FEATURE_PACKAGES } from './catalog.js';
|
|
15
|
+
import { getFeaturesRoot } from './paths.js';
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the AIWG install root for package probing. Tries:
|
|
18
|
+
* 1. AIWG_ROOT env var
|
|
19
|
+
* 2. The directory that contains this module's compiled output
|
|
20
|
+
* (walks up to find package.json with name "aiwg")
|
|
21
|
+
* 3. process.cwd() as a last resort
|
|
22
|
+
*/
|
|
23
|
+
async function resolveAiwgRoot() {
|
|
24
|
+
if (process.env.AIWG_ROOT)
|
|
25
|
+
return process.env.AIWG_ROOT;
|
|
26
|
+
// Walk up from this module's URL.
|
|
27
|
+
// dist layout: dist/src/features/status.js → walk up to package.json
|
|
28
|
+
let cur = path.dirname(new URL(import.meta.url).pathname);
|
|
29
|
+
for (let i = 0; i < 10; i++) {
|
|
30
|
+
try {
|
|
31
|
+
const pkgPath = path.join(cur, 'package.json');
|
|
32
|
+
const stat = await fs.stat(pkgPath).catch(() => null);
|
|
33
|
+
if (stat?.isFile()) {
|
|
34
|
+
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'));
|
|
35
|
+
if (pkg?.name === 'aiwg')
|
|
36
|
+
return cur;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch { /* keep walking */ }
|
|
40
|
+
const parent = path.dirname(cur);
|
|
41
|
+
if (parent === cur)
|
|
42
|
+
break;
|
|
43
|
+
cur = parent;
|
|
44
|
+
}
|
|
45
|
+
return process.cwd();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Probe a single package by reading its package.json from
|
|
49
|
+
* `<aiwgRoot>/node_modules/<name>/package.json`.
|
|
50
|
+
*/
|
|
51
|
+
async function probePackage(aiwgRoot, name) {
|
|
52
|
+
const roots = [getFeaturesRoot(), aiwgRoot];
|
|
53
|
+
for (const root of roots) {
|
|
54
|
+
const candidate = path.join(root, 'node_modules', name, 'package.json');
|
|
55
|
+
try {
|
|
56
|
+
const raw = await fs.readFile(candidate, 'utf8');
|
|
57
|
+
const meta = JSON.parse(raw);
|
|
58
|
+
let loadable = true;
|
|
59
|
+
let error = null;
|
|
60
|
+
if (NATIVE_FEATURE_PACKAGES.has(name)) {
|
|
61
|
+
try {
|
|
62
|
+
createRequire(candidate)(name);
|
|
63
|
+
}
|
|
64
|
+
catch (cause) {
|
|
65
|
+
loadable = false;
|
|
66
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
67
|
+
error = message.split('\n')[0] || 'native module could not be loaded';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
name,
|
|
72
|
+
installed: true,
|
|
73
|
+
version: meta.version ?? null,
|
|
74
|
+
path: candidate,
|
|
75
|
+
loadable,
|
|
76
|
+
error,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Try the base AIWG install after the user feature root.
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return { name, installed: false, version: null, path: null, loadable: false, error: null };
|
|
84
|
+
}
|
|
85
|
+
/** Status of a single named feature. Returns null if the name is unknown. */
|
|
86
|
+
export async function getFeatureStatus(name) {
|
|
87
|
+
const feature = FEATURE_CATALOG.find(f => f.name === name);
|
|
88
|
+
if (!feature)
|
|
89
|
+
return null;
|
|
90
|
+
const aiwgRoot = await resolveAiwgRoot();
|
|
91
|
+
const pkgStatuses = await Promise.all(feature.packages.map(p => probePackage(aiwgRoot, p)));
|
|
92
|
+
const missing = pkgStatuses.filter(p => !p.installed || !p.loadable).map(p => p.name);
|
|
93
|
+
return {
|
|
94
|
+
feature,
|
|
95
|
+
packages: pkgStatuses,
|
|
96
|
+
available: missing.length === 0,
|
|
97
|
+
missing,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** Status of every feature in the catalog. */
|
|
101
|
+
export async function getAllFeatureStatuses() {
|
|
102
|
+
const aiwgRoot = await resolveAiwgRoot();
|
|
103
|
+
return Promise.all(FEATURE_CATALOG.map(async (feature) => {
|
|
104
|
+
const pkgStatuses = await Promise.all(feature.packages.map(p => probePackage(aiwgRoot, p)));
|
|
105
|
+
const missing = pkgStatuses.filter(p => !p.installed || !p.loadable).map(p => p.name);
|
|
106
|
+
return {
|
|
107
|
+
feature,
|
|
108
|
+
packages: pkgStatuses,
|
|
109
|
+
available: missing.length === 0,
|
|
110
|
+
missing,
|
|
111
|
+
};
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Format a single feature status as a one-line "doctor row":
|
|
116
|
+
* ✓ embeddings installed (@xenova/transformers 2.17.2, hnswlib-node 3.0.0)
|
|
117
|
+
* ○ pty not installed — `aiwg features install pty` to enable
|
|
118
|
+
*/
|
|
119
|
+
export function formatStatusLine(status, indent = ' ') {
|
|
120
|
+
const name = status.feature.name.padEnd(11);
|
|
121
|
+
if (status.available) {
|
|
122
|
+
const versions = status.packages
|
|
123
|
+
.map(p => `${p.name} ${p.version ?? '?'}`)
|
|
124
|
+
.join(', ');
|
|
125
|
+
return `${indent}OK ${name} installed (${versions})`;
|
|
126
|
+
}
|
|
127
|
+
const broken = status.packages.filter(p => p.installed && !p.loadable);
|
|
128
|
+
if (broken.length > 0) {
|
|
129
|
+
return `${indent}! ${name} installed but native build is unusable (${broken.map(p => p.name).join(', ')}) — ` +
|
|
130
|
+
`run \`aiwg features install ${status.feature.name}\` to rebuild with scoped script approval`;
|
|
131
|
+
}
|
|
132
|
+
return `${indent}- ${name} not installed — \`aiwg features install ${status.feature.name}\` to enable`;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=status.js.map
|