@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,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Uninstallation System
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive uninstaller supporting frameworks, add-ons, and extensions
|
|
5
|
+
* with dependency validation, artifact cleanup, and safe removal.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Dependency validation (prevent orphaned add-ons)
|
|
9
|
+
* - Active project detection
|
|
10
|
+
* - Artifact cleanup (directories, registry)
|
|
11
|
+
* - Dry-run mode
|
|
12
|
+
* - Force mode (skip dependency checks)
|
|
13
|
+
* - Project preservation (--keep-projects)
|
|
14
|
+
* - Rollback on failure
|
|
15
|
+
*
|
|
16
|
+
* @module src/plugin/plugin-uninstaller
|
|
17
|
+
*/
|
|
18
|
+
import * as fs from 'fs/promises';
|
|
19
|
+
import * as path from 'path';
|
|
20
|
+
/**
|
|
21
|
+
* PluginUninstaller - Uninstall and cleanup plugins
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const uninstaller = new PluginUninstaller('~/.local/share/ai-writing-guide');
|
|
26
|
+
*
|
|
27
|
+
* // Check dependencies before uninstall
|
|
28
|
+
* const deps = await uninstaller.getDependentPlugins('sdlc-complete');
|
|
29
|
+
* if (deps.length > 0) {
|
|
30
|
+
* console.log('Cannot uninstall - dependent plugins exist');
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // Uninstall framework
|
|
34
|
+
* const result = await uninstaller.uninstall('my-framework');
|
|
35
|
+
*
|
|
36
|
+
* // Force uninstall (ignore dependencies)
|
|
37
|
+
* const forceResult = await uninstaller.uninstall('parent-framework', { force: true });
|
|
38
|
+
*
|
|
39
|
+
* // Dry-run preview
|
|
40
|
+
* const preview = await uninstaller.uninstall('plugin', { dryRun: true });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class PluginUninstaller {
|
|
44
|
+
aiwgRoot;
|
|
45
|
+
registryPath;
|
|
46
|
+
backupDir;
|
|
47
|
+
rollbackActions = [];
|
|
48
|
+
constructor(aiwgRoot) {
|
|
49
|
+
this.aiwgRoot = aiwgRoot;
|
|
50
|
+
this.registryPath = path.join(aiwgRoot, 'registry.json');
|
|
51
|
+
this.backupDir = path.join(aiwgRoot, 'backups');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Uninstall a plugin
|
|
55
|
+
*
|
|
56
|
+
* @param pluginId - Plugin identifier
|
|
57
|
+
* @param options - Uninstall options
|
|
58
|
+
* @returns Uninstall result
|
|
59
|
+
*/
|
|
60
|
+
async uninstall(pluginId, options = {}) {
|
|
61
|
+
const result = {
|
|
62
|
+
success: false,
|
|
63
|
+
pluginId,
|
|
64
|
+
actions: [],
|
|
65
|
+
errors: [],
|
|
66
|
+
warnings: [],
|
|
67
|
+
stats: {
|
|
68
|
+
filesRemoved: 0,
|
|
69
|
+
dirsRemoved: 0,
|
|
70
|
+
bytesFreed: 0,
|
|
71
|
+
projectsArchived: 0
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
this.rollbackActions = [];
|
|
75
|
+
try {
|
|
76
|
+
// Step 1: Validate plugin exists
|
|
77
|
+
const plugin = await this.getPlugin(pluginId);
|
|
78
|
+
if (!plugin) {
|
|
79
|
+
result.errors.push(`Plugin '${pluginId}' is not installed`);
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
result.actions.push({
|
|
83
|
+
type: 'validate',
|
|
84
|
+
description: `Found plugin: ${plugin.name} v${plugin.version} (${plugin.type})`,
|
|
85
|
+
executed: true
|
|
86
|
+
});
|
|
87
|
+
// Step 2: Check for dependent plugins
|
|
88
|
+
if (!options.force) {
|
|
89
|
+
const dependents = await this.getDependentPlugins(pluginId);
|
|
90
|
+
if (dependents.length > 0) {
|
|
91
|
+
const depNames = dependents.map(d => `${d.id} (${d.type})`).join(', ');
|
|
92
|
+
result.errors.push(`Cannot uninstall '${pluginId}' - the following plugins depend on it: ${depNames}. ` +
|
|
93
|
+
`Uninstall them first or use --force to skip this check.`);
|
|
94
|
+
result.actions.push({
|
|
95
|
+
type: 'check-deps',
|
|
96
|
+
description: `Found ${dependents.length} dependent plugins`,
|
|
97
|
+
executed: true
|
|
98
|
+
});
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
result.actions.push({
|
|
102
|
+
type: 'check-deps',
|
|
103
|
+
description: 'No dependent plugins found',
|
|
104
|
+
executed: true
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
result.warnings.push('Dependency check skipped (--force)');
|
|
109
|
+
}
|
|
110
|
+
// Step 3: Check for active projects (warning only)
|
|
111
|
+
if (plugin.type === 'framework') {
|
|
112
|
+
const projects = await this.getActiveProjects(pluginId, plugin.path);
|
|
113
|
+
if (projects.length > 0) {
|
|
114
|
+
result.warnings.push(`Plugin has ${projects.length} active project(s): ${projects.join(', ')}`);
|
|
115
|
+
}
|
|
116
|
+
// Handle project preservation
|
|
117
|
+
if (projects.length > 0 && options.keepProjects && !options.dryRun) {
|
|
118
|
+
await this.archiveProjects(pluginId, plugin.path, projects, result);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Step 4: Backup registry (for rollback)
|
|
122
|
+
if (!options.dryRun) {
|
|
123
|
+
await this.backupRegistry(result);
|
|
124
|
+
}
|
|
125
|
+
// Step 5: Remove plugin directory
|
|
126
|
+
const pluginPath = path.join(this.aiwgRoot, plugin.path);
|
|
127
|
+
if (!options.dryRun) {
|
|
128
|
+
await this.removeDirectory(pluginPath, result);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
result.actions.push({
|
|
132
|
+
type: 'remove-dir',
|
|
133
|
+
description: `Would remove directory: ${plugin.path}`,
|
|
134
|
+
path: pluginPath,
|
|
135
|
+
executed: false
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// Step 6: Update registry
|
|
139
|
+
if (!options.dryRun) {
|
|
140
|
+
await this.removeFromRegistry(pluginId, result);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
result.actions.push({
|
|
144
|
+
type: 'update-registry',
|
|
145
|
+
description: `Would remove ${pluginId} from registry`,
|
|
146
|
+
path: this.registryPath,
|
|
147
|
+
executed: false
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
result.success = true;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
result.errors.push(`Uninstall failed: ${error.message}`);
|
|
154
|
+
// Rollback on failure
|
|
155
|
+
if (!options.dryRun && this.rollbackActions.length > 0) {
|
|
156
|
+
result.actions.push({
|
|
157
|
+
type: 'rollback',
|
|
158
|
+
description: 'Rolling back changes due to error',
|
|
159
|
+
executed: true
|
|
160
|
+
});
|
|
161
|
+
await this.rollback();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get plugins that depend on the given plugin
|
|
168
|
+
*
|
|
169
|
+
* @param pluginId - Plugin identifier
|
|
170
|
+
* @returns Array of dependent plugins
|
|
171
|
+
*/
|
|
172
|
+
async getDependentPlugins(pluginId) {
|
|
173
|
+
const dependents = [];
|
|
174
|
+
try {
|
|
175
|
+
const registry = await this.loadRegistry();
|
|
176
|
+
for (const plugin of registry.plugins) {
|
|
177
|
+
if (plugin.parentFramework === pluginId) {
|
|
178
|
+
dependents.push({
|
|
179
|
+
id: plugin.id,
|
|
180
|
+
type: plugin.type,
|
|
181
|
+
relationship: 'parentFramework'
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Registry doesn't exist
|
|
188
|
+
}
|
|
189
|
+
return dependents;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get suggested uninstall order for a plugin and its dependents
|
|
193
|
+
*
|
|
194
|
+
* @param pluginId - Plugin identifier
|
|
195
|
+
* @returns Ordered list of plugins to uninstall
|
|
196
|
+
*/
|
|
197
|
+
async getUninstallOrder(pluginId) {
|
|
198
|
+
const order = [];
|
|
199
|
+
const visited = new Set();
|
|
200
|
+
const visit = async (id) => {
|
|
201
|
+
if (visited.has(id))
|
|
202
|
+
return;
|
|
203
|
+
visited.add(id);
|
|
204
|
+
const dependents = await this.getDependentPlugins(id);
|
|
205
|
+
for (const dep of dependents) {
|
|
206
|
+
await visit(dep.id);
|
|
207
|
+
}
|
|
208
|
+
order.push(id);
|
|
209
|
+
};
|
|
210
|
+
await visit(pluginId);
|
|
211
|
+
return order;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get plugin info from registry
|
|
215
|
+
*/
|
|
216
|
+
async getPlugin(pluginId) {
|
|
217
|
+
try {
|
|
218
|
+
const registry = await this.loadRegistry();
|
|
219
|
+
return registry.plugins.find(p => p.id === pluginId) || null;
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get active projects for a framework
|
|
227
|
+
*/
|
|
228
|
+
async getActiveProjects(_pluginId, pluginPath) {
|
|
229
|
+
const projectsDir = path.join(this.aiwgRoot, pluginPath, 'projects');
|
|
230
|
+
try {
|
|
231
|
+
const entries = await fs.readdir(projectsDir, { withFileTypes: true });
|
|
232
|
+
return entries
|
|
233
|
+
.filter(e => e.isDirectory())
|
|
234
|
+
.map(e => e.name);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Archive projects before uninstall
|
|
242
|
+
*/
|
|
243
|
+
async archiveProjects(pluginId, pluginPath, projects, result) {
|
|
244
|
+
const now = new Date();
|
|
245
|
+
const yearMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;
|
|
246
|
+
const archiveBase = path.join(this.aiwgRoot, 'archive', 'uninstalled', pluginId, yearMonth);
|
|
247
|
+
await fs.mkdir(archiveBase, { recursive: true });
|
|
248
|
+
const projectsDir = path.join(this.aiwgRoot, pluginPath, 'projects');
|
|
249
|
+
for (const project of projects) {
|
|
250
|
+
const srcPath = path.join(projectsDir, project);
|
|
251
|
+
const destPath = path.join(archiveBase, project);
|
|
252
|
+
await this.copyDirectory(srcPath, destPath);
|
|
253
|
+
result.stats.projectsArchived++;
|
|
254
|
+
result.actions.push({
|
|
255
|
+
type: 'archive',
|
|
256
|
+
description: `Archived project: ${project} → ${path.relative(this.aiwgRoot, destPath)}`,
|
|
257
|
+
path: destPath,
|
|
258
|
+
executed: true
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Backup registry for rollback
|
|
264
|
+
*/
|
|
265
|
+
async backupRegistry(result) {
|
|
266
|
+
try {
|
|
267
|
+
await fs.mkdir(this.backupDir, { recursive: true });
|
|
268
|
+
const timestamp = Date.now();
|
|
269
|
+
const backupPath = path.join(this.backupDir, `registry-${timestamp}.json`);
|
|
270
|
+
const content = await fs.readFile(this.registryPath, 'utf-8');
|
|
271
|
+
await fs.writeFile(backupPath, content, 'utf-8');
|
|
272
|
+
result.actions.push({
|
|
273
|
+
type: 'backup',
|
|
274
|
+
description: `Backed up registry to ${path.basename(backupPath)}`,
|
|
275
|
+
path: backupPath,
|
|
276
|
+
executed: true
|
|
277
|
+
});
|
|
278
|
+
// Add rollback action
|
|
279
|
+
this.rollbackActions.push(async () => {
|
|
280
|
+
await fs.copyFile(backupPath, this.registryPath);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// Registry doesn't exist, nothing to backup
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Recursively remove directory and track stats
|
|
289
|
+
*/
|
|
290
|
+
async removeDirectory(dirPath, result) {
|
|
291
|
+
try {
|
|
292
|
+
const stats = await this.calculateDirectoryStats(dirPath);
|
|
293
|
+
result.stats.filesRemoved = stats.files;
|
|
294
|
+
result.stats.dirsRemoved = stats.dirs;
|
|
295
|
+
result.stats.bytesFreed = stats.bytes;
|
|
296
|
+
await fs.rm(dirPath, { recursive: true, force: true });
|
|
297
|
+
result.actions.push({
|
|
298
|
+
type: 'remove-dir',
|
|
299
|
+
description: `Removed directory: ${path.relative(this.aiwgRoot, dirPath)} (${stats.files} files, ${this.formatBytes(stats.bytes)})`,
|
|
300
|
+
path: dirPath,
|
|
301
|
+
executed: true
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
if (error.code !== 'ENOENT') {
|
|
306
|
+
throw error;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Calculate directory statistics
|
|
312
|
+
*/
|
|
313
|
+
async calculateDirectoryStats(dirPath) {
|
|
314
|
+
let files = 0;
|
|
315
|
+
let dirs = 0;
|
|
316
|
+
let bytes = 0;
|
|
317
|
+
const scan = async (currentPath) => {
|
|
318
|
+
try {
|
|
319
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
320
|
+
for (const entry of entries) {
|
|
321
|
+
const entryPath = path.join(currentPath, entry.name);
|
|
322
|
+
if (entry.isDirectory()) {
|
|
323
|
+
dirs++;
|
|
324
|
+
await scan(entryPath);
|
|
325
|
+
}
|
|
326
|
+
else if (entry.isFile()) {
|
|
327
|
+
files++;
|
|
328
|
+
try {
|
|
329
|
+
const stat = await fs.stat(entryPath);
|
|
330
|
+
bytes += stat.size;
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
// Ignore stat errors
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
// Ignore read errors
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
await scan(dirPath);
|
|
343
|
+
return { files, dirs, bytes };
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Remove plugin from registry
|
|
347
|
+
*/
|
|
348
|
+
async removeFromRegistry(pluginId, result) {
|
|
349
|
+
const registry = await this.loadRegistry();
|
|
350
|
+
const originalLength = registry.plugins.length;
|
|
351
|
+
registry.plugins = registry.plugins.filter(p => p.id !== pluginId);
|
|
352
|
+
if (registry.plugins.length === originalLength) {
|
|
353
|
+
// Plugin wasn't in registry
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
registry.lastModified = new Date().toISOString();
|
|
357
|
+
await fs.writeFile(this.registryPath, JSON.stringify(registry, null, 2), 'utf-8');
|
|
358
|
+
result.actions.push({
|
|
359
|
+
type: 'update-registry',
|
|
360
|
+
description: `Removed ${pluginId} from registry`,
|
|
361
|
+
path: this.registryPath,
|
|
362
|
+
executed: true
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Load registry file
|
|
367
|
+
*/
|
|
368
|
+
async loadRegistry() {
|
|
369
|
+
const content = await fs.readFile(this.registryPath, 'utf-8');
|
|
370
|
+
return JSON.parse(content);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Recursively copy directory
|
|
374
|
+
*/
|
|
375
|
+
async copyDirectory(source, dest) {
|
|
376
|
+
await fs.mkdir(dest, { recursive: true });
|
|
377
|
+
const entries = await fs.readdir(source, { withFileTypes: true });
|
|
378
|
+
for (const entry of entries) {
|
|
379
|
+
const srcPath = path.join(source, entry.name);
|
|
380
|
+
const destPath = path.join(dest, entry.name);
|
|
381
|
+
if (entry.isDirectory()) {
|
|
382
|
+
await this.copyDirectory(srcPath, destPath);
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
await fs.copyFile(srcPath, destPath);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Rollback changes on failure
|
|
391
|
+
*/
|
|
392
|
+
async rollback() {
|
|
393
|
+
for (let i = this.rollbackActions.length - 1; i >= 0; i--) {
|
|
394
|
+
try {
|
|
395
|
+
await this.rollbackActions[i]();
|
|
396
|
+
}
|
|
397
|
+
catch {
|
|
398
|
+
// Ignore rollback errors
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
this.rollbackActions = [];
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Format bytes as human-readable string
|
|
405
|
+
*/
|
|
406
|
+
formatBytes(bytes) {
|
|
407
|
+
if (bytes === 0)
|
|
408
|
+
return '0 Bytes';
|
|
409
|
+
const k = 1024;
|
|
410
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
411
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
412
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* List all installed plugins
|
|
416
|
+
*/
|
|
417
|
+
async listInstalled() {
|
|
418
|
+
try {
|
|
419
|
+
const registry = await this.loadRegistry();
|
|
420
|
+
return registry.plugins;
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
return [];
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Check if a plugin can be safely uninstalled
|
|
428
|
+
*
|
|
429
|
+
* @param pluginId - Plugin identifier
|
|
430
|
+
* @returns Object with canUninstall flag and reason/warnings
|
|
431
|
+
*/
|
|
432
|
+
async canUninstall(pluginId) {
|
|
433
|
+
const warnings = [];
|
|
434
|
+
// Check if plugin exists
|
|
435
|
+
const plugin = await this.getPlugin(pluginId);
|
|
436
|
+
if (!plugin) {
|
|
437
|
+
return {
|
|
438
|
+
canUninstall: false,
|
|
439
|
+
reason: `Plugin '${pluginId}' is not installed`,
|
|
440
|
+
warnings
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// Check for dependents
|
|
444
|
+
const dependents = await this.getDependentPlugins(pluginId);
|
|
445
|
+
if (dependents.length > 0) {
|
|
446
|
+
return {
|
|
447
|
+
canUninstall: false,
|
|
448
|
+
reason: `Plugin has ${dependents.length} dependent plugin(s): ${dependents.map(d => d.id).join(', ')}`,
|
|
449
|
+
warnings
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
// Check for active projects (warning)
|
|
453
|
+
if (plugin.type === 'framework') {
|
|
454
|
+
const projects = await this.getActiveProjects(pluginId, plugin.path);
|
|
455
|
+
if (projects.length > 0) {
|
|
456
|
+
warnings.push(`Plugin has ${projects.length} active project(s)`);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return {
|
|
460
|
+
canUninstall: true,
|
|
461
|
+
warnings
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Create a PluginUninstaller with default AIWG root
|
|
467
|
+
*/
|
|
468
|
+
export function createUninstaller() {
|
|
469
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
470
|
+
const aiwgRoot = path.join(homeDir, '.local', 'share', 'ai-writing-guide');
|
|
471
|
+
return new PluginUninstaller(aiwgRoot);
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=plugin-uninstaller.js.map
|