@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,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Installation System
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive installer supporting frameworks, add-ons, and extensions
|
|
5
|
+
* with dependency resolution, registry management, and atomic installation.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Install from local path or plugin ID
|
|
9
|
+
* - Dependency resolution (add-ons require parent framework)
|
|
10
|
+
* - Automatic registry updates
|
|
11
|
+
* - Directory structure creation
|
|
12
|
+
* - Manifest validation
|
|
13
|
+
* - Atomic installation (rollback on failure)
|
|
14
|
+
* - Dry-run mode
|
|
15
|
+
*
|
|
16
|
+
* @module src/plugin/plugin-installer
|
|
17
|
+
* @implements @.aiwg/requirements/use-cases/UC-010-rollback-plugin-installation.md
|
|
18
|
+
* @architecture @.aiwg/architecture/software-architecture-doc.md - Section 5.1 PluginManager
|
|
19
|
+
* @adr @.aiwg/architecture/decisions/ADR-006-plugin-rollback-strategy.md
|
|
20
|
+
* @nfr @.aiwg/requirements/nfr-modules/reliability.md - NFR-REL-002 (zero data loss)
|
|
21
|
+
* @tests @test/unit/plugin/plugin-installer.test.ts
|
|
22
|
+
* @depends @src/plugin/metadata-validator.ts
|
|
23
|
+
* @depends @src/plugin/framework-config-loader.ts
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'fs/promises';
|
|
26
|
+
import * as path from 'path';
|
|
27
|
+
/**
|
|
28
|
+
* PluginInstaller - Install and manage plugins
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const installer = new PluginInstaller('~/.local/share/ai-writing-guide');
|
|
33
|
+
*
|
|
34
|
+
* // Install framework
|
|
35
|
+
* const result = await installer.install('/path/to/sdlc-complete');
|
|
36
|
+
*
|
|
37
|
+
* // Install add-on with parent
|
|
38
|
+
* const addonResult = await installer.install('/path/to/gdpr-compliance', {
|
|
39
|
+
* type: 'add-on',
|
|
40
|
+
* parentFramework: 'sdlc-complete'
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* // Dry-run preview
|
|
44
|
+
* const preview = await installer.install('/path/to/plugin', { dryRun: true });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export class PluginInstaller {
|
|
48
|
+
aiwgRoot;
|
|
49
|
+
registryPath;
|
|
50
|
+
rollbackActions = [];
|
|
51
|
+
constructor(aiwgRoot) {
|
|
52
|
+
this.aiwgRoot = aiwgRoot;
|
|
53
|
+
this.registryPath = path.join(aiwgRoot, 'registry.json');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Install a plugin from a source path
|
|
57
|
+
*
|
|
58
|
+
* @param source - Path to plugin directory or plugin ID
|
|
59
|
+
* @param options - Installation options
|
|
60
|
+
* @returns Installation result
|
|
61
|
+
*/
|
|
62
|
+
async install(source, options = {}) {
|
|
63
|
+
const result = {
|
|
64
|
+
success: false,
|
|
65
|
+
pluginId: '',
|
|
66
|
+
version: '',
|
|
67
|
+
installPath: '',
|
|
68
|
+
actions: [],
|
|
69
|
+
errors: [],
|
|
70
|
+
warnings: []
|
|
71
|
+
};
|
|
72
|
+
this.rollbackActions = [];
|
|
73
|
+
try {
|
|
74
|
+
// Step 1: Load and validate manifest
|
|
75
|
+
const manifest = await this.loadManifest(source);
|
|
76
|
+
result.pluginId = manifest.id;
|
|
77
|
+
result.version = manifest.version;
|
|
78
|
+
result.actions.push({
|
|
79
|
+
type: 'validate',
|
|
80
|
+
description: `Validated manifest for ${manifest.name} v${manifest.version}`,
|
|
81
|
+
executed: true
|
|
82
|
+
});
|
|
83
|
+
// Override type if specified
|
|
84
|
+
if (options.type) {
|
|
85
|
+
manifest.type = options.type;
|
|
86
|
+
}
|
|
87
|
+
// Override parent framework if specified
|
|
88
|
+
if (options.parentFramework) {
|
|
89
|
+
manifest.parentFramework = options.parentFramework;
|
|
90
|
+
}
|
|
91
|
+
// Step 2: Check if already installed
|
|
92
|
+
const isInstalled = await this.isPluginInstalled(manifest.id);
|
|
93
|
+
if (isInstalled && !options.force) {
|
|
94
|
+
result.errors.push(`Plugin '${manifest.id}' is already installed. Use --force to reinstall.`);
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
if (isInstalled && options.force) {
|
|
98
|
+
result.warnings.push(`Reinstalling existing plugin '${manifest.id}'`);
|
|
99
|
+
}
|
|
100
|
+
// Step 3: Validate dependencies
|
|
101
|
+
if (!options.skipDependencyCheck) {
|
|
102
|
+
const depErrors = await this.validateDependencies(manifest);
|
|
103
|
+
if (depErrors.length > 0) {
|
|
104
|
+
result.errors.push(...depErrors);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Step 4: Calculate installation path
|
|
109
|
+
const targetDir = options.targetDir || this.aiwgRoot;
|
|
110
|
+
const installPath = this.getInstallPath(manifest.type, manifest.id, targetDir);
|
|
111
|
+
result.installPath = installPath;
|
|
112
|
+
// Step 5: Create directory structure
|
|
113
|
+
if (!options.dryRun) {
|
|
114
|
+
await this.createDirectoryStructure(manifest.type, manifest.id, targetDir, result);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
result.actions.push({
|
|
118
|
+
type: 'create-dir',
|
|
119
|
+
description: `Would create directory structure at ${installPath}`,
|
|
120
|
+
path: installPath,
|
|
121
|
+
executed: false
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Step 6: Copy plugin files
|
|
125
|
+
if (!options.dryRun) {
|
|
126
|
+
await this.copyPluginFiles(source, installPath, result);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
result.actions.push({
|
|
130
|
+
type: 'copy-file',
|
|
131
|
+
description: `Would copy plugin files from ${source} to ${installPath}`,
|
|
132
|
+
path: installPath,
|
|
133
|
+
executed: false
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Step 7: Update registry
|
|
137
|
+
if (!options.dryRun) {
|
|
138
|
+
await this.updateRegistry(manifest, installPath, result);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
result.actions.push({
|
|
142
|
+
type: 'update-registry',
|
|
143
|
+
description: `Would update registry with ${manifest.id}`,
|
|
144
|
+
path: this.registryPath,
|
|
145
|
+
executed: false
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
result.success = true;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
result.errors.push(`Installation failed: ${error.message}`);
|
|
152
|
+
// Rollback on failure
|
|
153
|
+
if (!options.dryRun && this.rollbackActions.length > 0) {
|
|
154
|
+
result.actions.push({
|
|
155
|
+
type: 'rollback',
|
|
156
|
+
description: 'Rolling back changes due to error',
|
|
157
|
+
executed: true
|
|
158
|
+
});
|
|
159
|
+
await this.rollback();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Load and validate plugin manifest
|
|
166
|
+
*/
|
|
167
|
+
async loadManifest(source) {
|
|
168
|
+
const manifestPath = path.join(source, 'manifest.json');
|
|
169
|
+
try {
|
|
170
|
+
const content = await fs.readFile(manifestPath, 'utf-8');
|
|
171
|
+
const manifest = JSON.parse(content);
|
|
172
|
+
// Validate required fields
|
|
173
|
+
this.validateManifest(manifest);
|
|
174
|
+
return manifest;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
if (error.code === 'ENOENT') {
|
|
178
|
+
throw new Error(`Manifest not found at ${manifestPath}. Ensure the plugin has a valid manifest.json`);
|
|
179
|
+
}
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Validate manifest has required fields
|
|
185
|
+
*/
|
|
186
|
+
validateManifest(manifest) {
|
|
187
|
+
const required = ['id', 'type', 'name', 'version'];
|
|
188
|
+
const missing = required.filter(field => !(field in manifest));
|
|
189
|
+
if (missing.length > 0) {
|
|
190
|
+
throw new Error(`Manifest missing required fields: ${missing.join(', ')}`);
|
|
191
|
+
}
|
|
192
|
+
// Validate plugin ID format
|
|
193
|
+
if (!/^[a-z0-9-]+$/.test(manifest.id)) {
|
|
194
|
+
throw new Error(`Invalid plugin ID '${manifest.id}'. Use lowercase letters, numbers, and hyphens only.`);
|
|
195
|
+
}
|
|
196
|
+
// Validate version format (semver-like)
|
|
197
|
+
if (!/^\d+\.\d+\.\d+/.test(manifest.version)) {
|
|
198
|
+
throw new Error(`Invalid version '${manifest.version}'. Use semver format (e.g., 1.0.0).`);
|
|
199
|
+
}
|
|
200
|
+
// Validate type
|
|
201
|
+
const validTypes = ['framework', 'add-on', 'extension'];
|
|
202
|
+
if (!validTypes.includes(manifest.type)) {
|
|
203
|
+
throw new Error(`Invalid plugin type '${manifest.type}'. Must be one of: ${validTypes.join(', ')}`);
|
|
204
|
+
}
|
|
205
|
+
// Add-ons require parentFramework
|
|
206
|
+
if (manifest.type === 'add-on' && !manifest.parentFramework) {
|
|
207
|
+
throw new Error(`Add-on plugins require a 'parentFramework' field in manifest.json`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Check if plugin is already installed
|
|
212
|
+
*/
|
|
213
|
+
async isPluginInstalled(pluginId) {
|
|
214
|
+
try {
|
|
215
|
+
const registry = await this.loadRegistry();
|
|
216
|
+
return registry.plugins.some(p => p.id === pluginId);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Validate plugin dependencies
|
|
224
|
+
*/
|
|
225
|
+
async validateDependencies(manifest) {
|
|
226
|
+
const errors = [];
|
|
227
|
+
// Check parent framework for add-ons
|
|
228
|
+
if (manifest.type === 'add-on' && manifest.parentFramework) {
|
|
229
|
+
const parentInstalled = await this.isPluginInstalled(manifest.parentFramework);
|
|
230
|
+
if (!parentInstalled) {
|
|
231
|
+
errors.push(`Parent framework '${manifest.parentFramework}' is not installed. ` +
|
|
232
|
+
`Install it first: aiwg -install-plugin ${manifest.parentFramework}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Check other dependencies
|
|
236
|
+
if (manifest.dependencies) {
|
|
237
|
+
for (const [depId, depVersion] of Object.entries(manifest.dependencies)) {
|
|
238
|
+
const depInstalled = await this.isPluginInstalled(depId);
|
|
239
|
+
if (!depInstalled) {
|
|
240
|
+
errors.push(`Required dependency '${depId}' (${depVersion}) is not installed. ` +
|
|
241
|
+
`Install it first: aiwg -install-plugin ${depId}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return errors;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get installation path for plugin type
|
|
249
|
+
*/
|
|
250
|
+
getInstallPath(type, pluginId, targetDir) {
|
|
251
|
+
const typeDir = type === 'add-on' ? 'add-ons' : `${type}s`;
|
|
252
|
+
return path.join(targetDir, typeDir, pluginId);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Create directory structure for plugin
|
|
256
|
+
*/
|
|
257
|
+
async createDirectoryStructure(type, pluginId, targetDir, result) {
|
|
258
|
+
const basePath = this.getInstallPath(type, pluginId, targetDir);
|
|
259
|
+
// Define directory structure based on type
|
|
260
|
+
const dirs = [basePath];
|
|
261
|
+
if (type === 'framework') {
|
|
262
|
+
dirs.push(path.join(basePath, 'repo'), path.join(basePath, 'projects'), path.join(basePath, 'working'), path.join(basePath, 'archive'));
|
|
263
|
+
}
|
|
264
|
+
// Create directories
|
|
265
|
+
for (const dir of dirs) {
|
|
266
|
+
await fs.mkdir(dir, { recursive: true });
|
|
267
|
+
result.actions.push({
|
|
268
|
+
type: 'create-dir',
|
|
269
|
+
description: `Created directory: ${path.relative(this.aiwgRoot, dir)}`,
|
|
270
|
+
path: dir,
|
|
271
|
+
executed: true
|
|
272
|
+
});
|
|
273
|
+
// Add rollback action
|
|
274
|
+
this.rollbackActions.push(async () => {
|
|
275
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Copy plugin files to installation directory
|
|
281
|
+
*/
|
|
282
|
+
async copyPluginFiles(source, dest, result) {
|
|
283
|
+
// For frameworks, copy to repo subdirectory
|
|
284
|
+
const targetPath = dest.includes('/frameworks/') ? path.join(dest, 'repo') : dest;
|
|
285
|
+
await this.copyDirectory(source, targetPath);
|
|
286
|
+
result.actions.push({
|
|
287
|
+
type: 'copy-file',
|
|
288
|
+
description: `Copied plugin files to ${path.relative(this.aiwgRoot, targetPath)}`,
|
|
289
|
+
path: targetPath,
|
|
290
|
+
executed: true
|
|
291
|
+
});
|
|
292
|
+
// Add rollback action
|
|
293
|
+
this.rollbackActions.push(async () => {
|
|
294
|
+
await fs.rm(targetPath, { recursive: true, force: true });
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Recursively copy directory
|
|
299
|
+
*/
|
|
300
|
+
async copyDirectory(source, dest) {
|
|
301
|
+
await fs.mkdir(dest, { recursive: true });
|
|
302
|
+
const entries = await fs.readdir(source, { withFileTypes: true });
|
|
303
|
+
for (const entry of entries) {
|
|
304
|
+
const srcPath = path.join(source, entry.name);
|
|
305
|
+
const destPath = path.join(dest, entry.name);
|
|
306
|
+
if (entry.isDirectory()) {
|
|
307
|
+
await this.copyDirectory(srcPath, destPath);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
await fs.copyFile(srcPath, destPath);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Update registry with new plugin
|
|
316
|
+
*/
|
|
317
|
+
async updateRegistry(manifest, installPath, result) {
|
|
318
|
+
let registry;
|
|
319
|
+
try {
|
|
320
|
+
registry = await this.loadRegistry();
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
// Create new registry if it doesn't exist
|
|
324
|
+
registry = {
|
|
325
|
+
version: '1.0.0',
|
|
326
|
+
lastModified: new Date().toISOString(),
|
|
327
|
+
plugins: []
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
// Save old state for rollback
|
|
331
|
+
const oldContent = JSON.stringify(registry, null, 2);
|
|
332
|
+
this.rollbackActions.push(async () => {
|
|
333
|
+
await fs.writeFile(this.registryPath, oldContent, 'utf-8');
|
|
334
|
+
});
|
|
335
|
+
// Remove existing entry if force reinstall
|
|
336
|
+
registry.plugins = registry.plugins.filter(p => p.id !== manifest.id);
|
|
337
|
+
// Add new entry
|
|
338
|
+
const relativePath = path.relative(this.aiwgRoot, installPath);
|
|
339
|
+
const entry = {
|
|
340
|
+
id: manifest.id,
|
|
341
|
+
type: manifest.type,
|
|
342
|
+
name: manifest.name,
|
|
343
|
+
version: manifest.version,
|
|
344
|
+
path: relativePath,
|
|
345
|
+
installedAt: new Date().toISOString(),
|
|
346
|
+
health: {
|
|
347
|
+
status: 'healthy',
|
|
348
|
+
lastCheck: new Date().toISOString()
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
if (manifest.parentFramework) {
|
|
352
|
+
entry.parentFramework = manifest.parentFramework;
|
|
353
|
+
}
|
|
354
|
+
registry.plugins.push(entry);
|
|
355
|
+
registry.lastModified = new Date().toISOString();
|
|
356
|
+
// Ensure registry directory exists
|
|
357
|
+
await fs.mkdir(path.dirname(this.registryPath), { recursive: true });
|
|
358
|
+
// Write registry
|
|
359
|
+
await fs.writeFile(this.registryPath, JSON.stringify(registry, null, 2), 'utf-8');
|
|
360
|
+
result.actions.push({
|
|
361
|
+
type: 'update-registry',
|
|
362
|
+
description: `Updated registry: added ${manifest.id} v${manifest.version}`,
|
|
363
|
+
path: this.registryPath,
|
|
364
|
+
executed: true
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Load registry file
|
|
369
|
+
*/
|
|
370
|
+
async loadRegistry() {
|
|
371
|
+
const content = await fs.readFile(this.registryPath, 'utf-8');
|
|
372
|
+
return JSON.parse(content);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Rollback changes on failure
|
|
376
|
+
*/
|
|
377
|
+
async rollback() {
|
|
378
|
+
// Execute rollback actions in reverse order
|
|
379
|
+
for (let i = this.rollbackActions.length - 1; i >= 0; i--) {
|
|
380
|
+
try {
|
|
381
|
+
await this.rollbackActions[i]();
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
// Ignore rollback errors
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
this.rollbackActions = [];
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* List installed plugins
|
|
391
|
+
*/
|
|
392
|
+
async listInstalled() {
|
|
393
|
+
try {
|
|
394
|
+
const registry = await this.loadRegistry();
|
|
395
|
+
return registry.plugins;
|
|
396
|
+
}
|
|
397
|
+
catch {
|
|
398
|
+
return [];
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Get plugin info by ID
|
|
403
|
+
*/
|
|
404
|
+
async getPluginInfo(pluginId) {
|
|
405
|
+
try {
|
|
406
|
+
const registry = await this.loadRegistry();
|
|
407
|
+
return registry.plugins.find(p => p.id === pluginId) || null;
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Validate manifest without installing
|
|
415
|
+
*/
|
|
416
|
+
async validatePlugin(source) {
|
|
417
|
+
const errors = [];
|
|
418
|
+
try {
|
|
419
|
+
const manifest = await this.loadManifest(source);
|
|
420
|
+
return { valid: true, manifest, errors };
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
errors.push(error.message);
|
|
424
|
+
return { valid: false, errors };
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Create a PluginInstaller with default AIWG root
|
|
430
|
+
*/
|
|
431
|
+
export function createInstaller() {
|
|
432
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
433
|
+
const aiwgRoot = path.join(homeDir, '.local', 'share', 'ai-writing-guide');
|
|
434
|
+
return new PluginInstaller(aiwgRoot);
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=plugin-installer.js.map
|