@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,475 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Framework Operations
|
|
3
|
+
*
|
|
4
|
+
* Enables cross-framework linking and multi-project orchestration for
|
|
5
|
+
* polyglot process management (SDLC + Marketing + Agile coexistence).
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Link work items across frameworks
|
|
9
|
+
* - Bidirectional metadata updates
|
|
10
|
+
* - Work graph visualization (Mermaid)
|
|
11
|
+
* - Orphaned link detection
|
|
12
|
+
* - Archive and restore work items
|
|
13
|
+
* - List all work across frameworks
|
|
14
|
+
*
|
|
15
|
+
* @module src/plugin/cross-framework-ops
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'fs/promises';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
/**
|
|
20
|
+
* Get inverse relationship type
|
|
21
|
+
*/
|
|
22
|
+
export function getInverseRelationship(relationship) {
|
|
23
|
+
const inverses = {
|
|
24
|
+
'promotes': 'promoted-by',
|
|
25
|
+
'promoted-by': 'promotes',
|
|
26
|
+
'implements': 'implemented-by',
|
|
27
|
+
'implemented-by': 'implements',
|
|
28
|
+
'blocks': 'blocked-by',
|
|
29
|
+
'blocked-by': 'blocks',
|
|
30
|
+
'depends-on': 'required-by',
|
|
31
|
+
'required-by': 'depends-on',
|
|
32
|
+
'relates-to': 'relates-to'
|
|
33
|
+
};
|
|
34
|
+
return inverses[relationship];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* CrossFrameworkOps - Manage cross-framework work linking
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const ops = new CrossFrameworkOps('~/.local/share/ai-writing-guide');
|
|
42
|
+
*
|
|
43
|
+
* // Link SDLC project to marketing campaign
|
|
44
|
+
* await ops.linkWork('sdlc-complete', 'plugin-system', 'marketing-flow', 'plugin-launch', 'promotes');
|
|
45
|
+
*
|
|
46
|
+
* // List all links
|
|
47
|
+
* const links = await ops.listLinks('sdlc-complete', 'plugin-system');
|
|
48
|
+
*
|
|
49
|
+
* // Visualize work graph
|
|
50
|
+
* const mermaid = await ops.visualizeWorkGraph();
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export class CrossFrameworkOps {
|
|
54
|
+
aiwgRoot;
|
|
55
|
+
registryPath;
|
|
56
|
+
constructor(aiwgRoot) {
|
|
57
|
+
this.aiwgRoot = aiwgRoot;
|
|
58
|
+
this.registryPath = path.join(aiwgRoot, 'registry.json');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Link two work items across frameworks
|
|
62
|
+
*
|
|
63
|
+
* @param sourceFramework - Source framework ID
|
|
64
|
+
* @param sourceId - Source work item ID
|
|
65
|
+
* @param targetFramework - Target framework ID
|
|
66
|
+
* @param targetId - Target work item ID
|
|
67
|
+
* @param relationship - Relationship type
|
|
68
|
+
* @returns Link result
|
|
69
|
+
*/
|
|
70
|
+
async linkWork(sourceFramework, sourceId, targetFramework, targetId, relationship) {
|
|
71
|
+
const result = {
|
|
72
|
+
success: false,
|
|
73
|
+
source: { framework: sourceFramework, id: sourceId },
|
|
74
|
+
target: { framework: targetFramework, id: targetId },
|
|
75
|
+
relationship
|
|
76
|
+
};
|
|
77
|
+
try {
|
|
78
|
+
// Validate both frameworks exist
|
|
79
|
+
const sourceExists = await this.frameworkExists(sourceFramework);
|
|
80
|
+
const targetExists = await this.frameworkExists(targetFramework);
|
|
81
|
+
if (!sourceExists) {
|
|
82
|
+
result.error = `Source framework '${sourceFramework}' is not installed`;
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
if (!targetExists) {
|
|
86
|
+
result.error = `Target framework '${targetFramework}' is not installed`;
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
// Validate both work items exist
|
|
90
|
+
const sourceMetadata = await this.getWorkMetadata(sourceFramework, sourceId);
|
|
91
|
+
const targetMetadata = await this.getWorkMetadata(targetFramework, targetId);
|
|
92
|
+
if (!sourceMetadata) {
|
|
93
|
+
result.error = `Source work item '${sourceId}' not found in framework '${sourceFramework}'`;
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
if (!targetMetadata) {
|
|
97
|
+
result.error = `Target work item '${targetId}' not found in framework '${targetFramework}'`;
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
// Check if link already exists
|
|
101
|
+
const existingLink = sourceMetadata.linkedWork.find(l => l.framework === targetFramework && l.id === targetId);
|
|
102
|
+
if (existingLink) {
|
|
103
|
+
result.error = `Link already exists between ${sourceFramework}/${sourceId} and ${targetFramework}/${targetId}`;
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
// Add link to source
|
|
107
|
+
sourceMetadata.linkedWork.push({
|
|
108
|
+
framework: targetFramework,
|
|
109
|
+
id: targetId,
|
|
110
|
+
type: targetMetadata.type,
|
|
111
|
+
relationship,
|
|
112
|
+
linkedDate: new Date().toISOString()
|
|
113
|
+
});
|
|
114
|
+
sourceMetadata.updatedAt = new Date().toISOString();
|
|
115
|
+
// Add inverse link to target
|
|
116
|
+
const inverseRelationship = getInverseRelationship(relationship);
|
|
117
|
+
targetMetadata.linkedWork.push({
|
|
118
|
+
framework: sourceFramework,
|
|
119
|
+
id: sourceId,
|
|
120
|
+
type: sourceMetadata.type,
|
|
121
|
+
relationship: inverseRelationship,
|
|
122
|
+
linkedDate: new Date().toISOString()
|
|
123
|
+
});
|
|
124
|
+
targetMetadata.updatedAt = new Date().toISOString();
|
|
125
|
+
// Save both metadata files
|
|
126
|
+
await this.saveWorkMetadata(sourceFramework, sourceId, sourceMetadata);
|
|
127
|
+
await this.saveWorkMetadata(targetFramework, targetId, targetMetadata);
|
|
128
|
+
result.success = true;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
result.error = `Failed to link work items: ${error.message}`;
|
|
132
|
+
}
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Remove link between two work items
|
|
137
|
+
*
|
|
138
|
+
* @param sourceFramework - Source framework ID
|
|
139
|
+
* @param sourceId - Source work item ID
|
|
140
|
+
* @param targetFramework - Target framework ID
|
|
141
|
+
* @param targetId - Target work item ID
|
|
142
|
+
* @returns Link result
|
|
143
|
+
*/
|
|
144
|
+
async unlinkWork(sourceFramework, sourceId, targetFramework, targetId) {
|
|
145
|
+
const result = {
|
|
146
|
+
success: false,
|
|
147
|
+
source: { framework: sourceFramework, id: sourceId },
|
|
148
|
+
target: { framework: targetFramework, id: targetId },
|
|
149
|
+
relationship: 'relates-to'
|
|
150
|
+
};
|
|
151
|
+
try {
|
|
152
|
+
// Get metadata for both work items
|
|
153
|
+
const sourceMetadata = await this.getWorkMetadata(sourceFramework, sourceId);
|
|
154
|
+
const targetMetadata = await this.getWorkMetadata(targetFramework, targetId);
|
|
155
|
+
if (!sourceMetadata) {
|
|
156
|
+
result.error = `Source work item '${sourceId}' not found`;
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
// Remove link from source
|
|
160
|
+
const sourceIndex = sourceMetadata.linkedWork.findIndex(l => l.framework === targetFramework && l.id === targetId);
|
|
161
|
+
if (sourceIndex >= 0) {
|
|
162
|
+
result.relationship = sourceMetadata.linkedWork[sourceIndex].relationship;
|
|
163
|
+
sourceMetadata.linkedWork.splice(sourceIndex, 1);
|
|
164
|
+
sourceMetadata.updatedAt = new Date().toISOString();
|
|
165
|
+
await this.saveWorkMetadata(sourceFramework, sourceId, sourceMetadata);
|
|
166
|
+
}
|
|
167
|
+
// Remove inverse link from target (if target exists)
|
|
168
|
+
if (targetMetadata) {
|
|
169
|
+
const targetIndex = targetMetadata.linkedWork.findIndex(l => l.framework === sourceFramework && l.id === sourceId);
|
|
170
|
+
if (targetIndex >= 0) {
|
|
171
|
+
targetMetadata.linkedWork.splice(targetIndex, 1);
|
|
172
|
+
targetMetadata.updatedAt = new Date().toISOString();
|
|
173
|
+
await this.saveWorkMetadata(targetFramework, targetId, targetMetadata);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
result.success = true;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
result.error = `Failed to unlink work items: ${error.message}`;
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* List all links for a work item
|
|
185
|
+
*
|
|
186
|
+
* @param frameworkId - Framework ID
|
|
187
|
+
* @param workId - Work item ID
|
|
188
|
+
* @returns Array of links
|
|
189
|
+
*/
|
|
190
|
+
async listLinks(frameworkId, workId) {
|
|
191
|
+
const metadata = await this.getWorkMetadata(frameworkId, workId);
|
|
192
|
+
return metadata?.linkedWork || [];
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* List all work items across all frameworks
|
|
196
|
+
*
|
|
197
|
+
* @param frameworkId - Optional framework filter
|
|
198
|
+
* @returns Array of work summaries
|
|
199
|
+
*/
|
|
200
|
+
async listAllWork(frameworkId) {
|
|
201
|
+
const summaries = [];
|
|
202
|
+
try {
|
|
203
|
+
const registry = await this.loadRegistry();
|
|
204
|
+
const frameworks = frameworkId
|
|
205
|
+
? registry.plugins.filter(p => p.id === frameworkId && p.type === 'framework')
|
|
206
|
+
: registry.plugins.filter(p => p.type === 'framework');
|
|
207
|
+
for (const framework of frameworks) {
|
|
208
|
+
const projects = await this.getFrameworkProjects(framework.id, framework.path);
|
|
209
|
+
for (const project of projects) {
|
|
210
|
+
const metadata = await this.getWorkMetadata(framework.id, project);
|
|
211
|
+
if (metadata) {
|
|
212
|
+
summaries.push({
|
|
213
|
+
framework: framework.id,
|
|
214
|
+
id: project,
|
|
215
|
+
type: metadata.type,
|
|
216
|
+
status: metadata.status,
|
|
217
|
+
phase: metadata.phase,
|
|
218
|
+
linkCount: metadata.linkedWork.length
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Registry doesn't exist
|
|
226
|
+
}
|
|
227
|
+
return summaries;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Visualize work graph in Mermaid format
|
|
231
|
+
*
|
|
232
|
+
* @param frameworkId - Optional framework filter
|
|
233
|
+
* @returns Mermaid diagram string
|
|
234
|
+
*/
|
|
235
|
+
async visualizeWorkGraph(frameworkId) {
|
|
236
|
+
const lines = ['graph TD'];
|
|
237
|
+
const allWork = await this.listAllWork(frameworkId);
|
|
238
|
+
const processed = new Set();
|
|
239
|
+
for (const work of allWork) {
|
|
240
|
+
const nodeId = `${work.framework}_${work.id}`.replace(/-/g, '_');
|
|
241
|
+
const label = `${work.framework}: ${work.id}<br/>${work.phase || work.status}`;
|
|
242
|
+
// Add node
|
|
243
|
+
if (!processed.has(nodeId)) {
|
|
244
|
+
lines.push(` ${nodeId}["${label}"]`);
|
|
245
|
+
processed.add(nodeId);
|
|
246
|
+
}
|
|
247
|
+
// Add links
|
|
248
|
+
const links = await this.listLinks(work.framework, work.id);
|
|
249
|
+
for (const link of links) {
|
|
250
|
+
const targetNodeId = `${link.framework}_${link.id}`.replace(/-/g, '_');
|
|
251
|
+
const edgeKey = `${nodeId}-${targetNodeId}`;
|
|
252
|
+
const reverseKey = `${targetNodeId}-${nodeId}`;
|
|
253
|
+
// Only add one direction to avoid duplicate edges
|
|
254
|
+
if (!processed.has(edgeKey) && !processed.has(reverseKey)) {
|
|
255
|
+
lines.push(` ${nodeId} -->|${link.relationship}| ${targetNodeId}`);
|
|
256
|
+
processed.add(edgeKey);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return lines.join('\n');
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Detect orphaned links (links to non-existent work items)
|
|
264
|
+
*
|
|
265
|
+
* @returns Array of orphaned links
|
|
266
|
+
*/
|
|
267
|
+
async detectOrphanedLinks() {
|
|
268
|
+
const orphaned = [];
|
|
269
|
+
const allWork = await this.listAllWork();
|
|
270
|
+
for (const work of allWork) {
|
|
271
|
+
const links = await this.listLinks(work.framework, work.id);
|
|
272
|
+
for (const link of links) {
|
|
273
|
+
const targetExists = await this.workExists(link.framework, link.id);
|
|
274
|
+
if (!targetExists) {
|
|
275
|
+
orphaned.push({
|
|
276
|
+
source: { framework: work.framework, id: work.id },
|
|
277
|
+
target: { framework: link.framework, id: link.id },
|
|
278
|
+
relationship: link.relationship
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return orphaned;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Clean up orphaned links
|
|
287
|
+
*
|
|
288
|
+
* @returns Number of links removed
|
|
289
|
+
*/
|
|
290
|
+
async cleanOrphanedLinks() {
|
|
291
|
+
const orphaned = await this.detectOrphanedLinks();
|
|
292
|
+
let cleaned = 0;
|
|
293
|
+
for (const link of orphaned) {
|
|
294
|
+
const metadata = await this.getWorkMetadata(link.source.framework, link.source.id);
|
|
295
|
+
if (metadata) {
|
|
296
|
+
const originalLength = metadata.linkedWork.length;
|
|
297
|
+
metadata.linkedWork = metadata.linkedWork.filter(l => !(l.framework === link.target.framework && l.id === link.target.id));
|
|
298
|
+
if (metadata.linkedWork.length < originalLength) {
|
|
299
|
+
metadata.updatedAt = new Date().toISOString();
|
|
300
|
+
await this.saveWorkMetadata(link.source.framework, link.source.id, metadata);
|
|
301
|
+
cleaned++;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return cleaned;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Archive a work item
|
|
309
|
+
*
|
|
310
|
+
* @param frameworkId - Framework ID
|
|
311
|
+
* @param workId - Work item ID
|
|
312
|
+
* @param _reason - Archive reason
|
|
313
|
+
* @returns Whether archive succeeded
|
|
314
|
+
*/
|
|
315
|
+
async archiveWork(frameworkId, workId, _reason) {
|
|
316
|
+
const metadata = await this.getWorkMetadata(frameworkId, workId);
|
|
317
|
+
if (!metadata) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
metadata.status = 'archived';
|
|
321
|
+
metadata.updatedAt = new Date().toISOString();
|
|
322
|
+
// Move to archive directory
|
|
323
|
+
const framework = await this.getFrameworkInfo(frameworkId);
|
|
324
|
+
if (!framework) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
const sourcePath = path.join(this.aiwgRoot, framework.path, 'projects', workId);
|
|
328
|
+
const now = new Date();
|
|
329
|
+
const yearMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;
|
|
330
|
+
const archivePath = path.join(this.aiwgRoot, framework.path, 'archive', yearMonth, workId);
|
|
331
|
+
try {
|
|
332
|
+
await fs.mkdir(path.dirname(archivePath), { recursive: true });
|
|
333
|
+
await this.moveDirectory(sourcePath, archivePath);
|
|
334
|
+
// Update metadata in archive location
|
|
335
|
+
await fs.writeFile(path.join(archivePath, 'metadata.json'), JSON.stringify(metadata, null, 2));
|
|
336
|
+
return true;
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Check if a framework exists in the registry
|
|
344
|
+
*/
|
|
345
|
+
async frameworkExists(frameworkId) {
|
|
346
|
+
try {
|
|
347
|
+
const registry = await this.loadRegistry();
|
|
348
|
+
return registry.plugins.some(p => p.id === frameworkId && p.type === 'framework');
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Check if a work item exists
|
|
356
|
+
*/
|
|
357
|
+
async workExists(frameworkId, workId) {
|
|
358
|
+
const metadata = await this.getWorkMetadata(frameworkId, workId);
|
|
359
|
+
return metadata !== null;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Get work item metadata
|
|
363
|
+
*/
|
|
364
|
+
async getWorkMetadata(frameworkId, workId) {
|
|
365
|
+
const framework = await this.getFrameworkInfo(frameworkId);
|
|
366
|
+
if (!framework) {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
const metadataPath = path.join(this.aiwgRoot, framework.path, 'projects', workId, 'metadata.json');
|
|
370
|
+
try {
|
|
371
|
+
const content = await fs.readFile(metadataPath, 'utf-8');
|
|
372
|
+
return JSON.parse(content);
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
// Create default metadata if project exists but no metadata
|
|
376
|
+
const projectPath = path.join(this.aiwgRoot, framework.path, 'projects', workId);
|
|
377
|
+
try {
|
|
378
|
+
await fs.stat(projectPath);
|
|
379
|
+
return {
|
|
380
|
+
framework: frameworkId,
|
|
381
|
+
id: workId,
|
|
382
|
+
type: 'project',
|
|
383
|
+
status: 'active',
|
|
384
|
+
createdAt: new Date().toISOString(),
|
|
385
|
+
updatedAt: new Date().toISOString(),
|
|
386
|
+
linkedWork: []
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
return null;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Save work item metadata
|
|
396
|
+
*/
|
|
397
|
+
async saveWorkMetadata(frameworkId, workId, metadata) {
|
|
398
|
+
const framework = await this.getFrameworkInfo(frameworkId);
|
|
399
|
+
if (!framework) {
|
|
400
|
+
throw new Error(`Framework '${frameworkId}' not found`);
|
|
401
|
+
}
|
|
402
|
+
const projectPath = path.join(this.aiwgRoot, framework.path, 'projects', workId);
|
|
403
|
+
await fs.mkdir(projectPath, { recursive: true });
|
|
404
|
+
const metadataPath = path.join(projectPath, 'metadata.json');
|
|
405
|
+
await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Get framework info from registry
|
|
409
|
+
*/
|
|
410
|
+
async getFrameworkInfo(frameworkId) {
|
|
411
|
+
try {
|
|
412
|
+
const registry = await this.loadRegistry();
|
|
413
|
+
const framework = registry.plugins.find(p => p.id === frameworkId && p.type === 'framework');
|
|
414
|
+
return framework ? { id: framework.id, path: framework.path } : null;
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
return null;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Get all projects in a framework
|
|
422
|
+
*/
|
|
423
|
+
async getFrameworkProjects(_frameworkId, frameworkPath) {
|
|
424
|
+
const projectsDir = path.join(this.aiwgRoot, frameworkPath, 'projects');
|
|
425
|
+
try {
|
|
426
|
+
const entries = await fs.readdir(projectsDir, { withFileTypes: true });
|
|
427
|
+
return entries
|
|
428
|
+
.filter(e => e.isDirectory())
|
|
429
|
+
.map(e => e.name);
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
return [];
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Load registry file
|
|
437
|
+
*/
|
|
438
|
+
async loadRegistry() {
|
|
439
|
+
const content = await fs.readFile(this.registryPath, 'utf-8');
|
|
440
|
+
return JSON.parse(content);
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Move directory recursively
|
|
444
|
+
*/
|
|
445
|
+
async moveDirectory(source, dest) {
|
|
446
|
+
await this.copyDirectory(source, dest);
|
|
447
|
+
await fs.rm(source, { recursive: true, force: true });
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Copy directory recursively
|
|
451
|
+
*/
|
|
452
|
+
async copyDirectory(source, dest) {
|
|
453
|
+
await fs.mkdir(dest, { recursive: true });
|
|
454
|
+
const entries = await fs.readdir(source, { withFileTypes: true });
|
|
455
|
+
for (const entry of entries) {
|
|
456
|
+
const srcPath = path.join(source, entry.name);
|
|
457
|
+
const destPath = path.join(dest, entry.name);
|
|
458
|
+
if (entry.isDirectory()) {
|
|
459
|
+
await this.copyDirectory(srcPath, destPath);
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
await fs.copyFile(srcPath, destPath);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Create CrossFrameworkOps with default AIWG root
|
|
469
|
+
*/
|
|
470
|
+
export function createCrossFrameworkOps() {
|
|
471
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
472
|
+
const aiwgRoot = path.join(homeDir, '.local', 'share', 'ai-writing-guide');
|
|
473
|
+
return new CrossFrameworkOps(aiwgRoot);
|
|
474
|
+
}
|
|
475
|
+
//# sourceMappingURL=cross-framework-ops.js.map
|