@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -1
- package/bin/aiwg.mjs +349 -0
- package/dist/src/a2a/agent-card.js +145 -0
- package/dist/src/a2a/client.js +411 -0
- package/dist/src/a2a/hitl-cli.js +171 -0
- package/dist/src/a2a/hitl-driver.js +370 -0
- package/dist/src/a2a/hitl.js +181 -0
- package/dist/src/a2a/http.js +193 -0
- package/dist/src/a2a/jcs.js +128 -0
- package/dist/src/a2a/jws.js +187 -0
- package/dist/src/a2a/types.js +24 -0
- package/dist/src/a2a/webhook.js +240 -0
- package/dist/src/activity-log/cli.js +348 -0
- package/dist/src/activity-log/parser.js +81 -0
- package/dist/src/activity-log/types.js +50 -0
- package/dist/src/agents/agent-deployer.js +367 -0
- package/dist/src/agents/agent-packager.js +271 -0
- package/dist/src/agents/agent-validator.js +271 -0
- package/dist/src/agents/grounding/knowledge-base.js +161 -0
- package/dist/src/agents/grounding/types.js +12 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/packaged-agent-inventory.js +75 -0
- package/dist/src/agents/types.js +7 -0
- package/dist/src/api/index.d.ts +10 -0
- package/dist/src/api/index.js +10 -0
- package/dist/src/artifacts/address-parser.js +73 -0
- package/dist/src/artifacts/audit/cli.js +183 -0
- package/dist/src/artifacts/audit/drift.js +122 -0
- package/dist/src/artifacts/audit/types.js +12 -0
- package/dist/src/artifacts/backends/graphology-backend.js +160 -0
- package/dist/src/artifacts/backends/json-backend.js +129 -0
- package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
- package/dist/src/artifacts/browser-export.js +622 -0
- package/dist/src/artifacts/capability-resolver.js +94 -0
- package/dist/src/artifacts/checksum-manifest.js +91 -0
- package/dist/src/artifacts/citation-parser.js +162 -0
- package/dist/src/artifacts/cli.js +1462 -0
- package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
- package/dist/src/artifacts/corpus-tools/cli.js +393 -0
- package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
- package/dist/src/artifacts/corpus-tools/curator.js +186 -0
- package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
- package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
- package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
- package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
- package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
- package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
- package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
- package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
- package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
- package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
- package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
- package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
- package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
- package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
- package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
- package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
- package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
- package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
- package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
- package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
- package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
- package/dist/src/artifacts/corpus-views/build.js +126 -0
- package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
- package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
- package/dist/src/artifacts/corpus-views/renderers.js +353 -0
- package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
- package/dist/src/artifacts/dep-graph.js +173 -0
- package/dist/src/artifacts/discover-facets.js +375 -0
- package/dist/src/artifacts/embedding-index.js +354 -0
- package/dist/src/artifacts/enrichment/cli.js +240 -0
- package/dist/src/artifacts/enrichment/prompt.js +47 -0
- package/dist/src/artifacts/enrichment/store.js +90 -0
- package/dist/src/artifacts/enrichment/types.js +12 -0
- package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
- package/dist/src/artifacts/fortemi-core-sync.js +251 -0
- package/dist/src/artifacts/fortemi-shard-export.js +44 -0
- package/dist/src/artifacts/fulltext.js +108 -0
- package/dist/src/artifacts/graph-backend.js +51 -0
- package/dist/src/artifacts/graph-query.js +247 -0
- package/dist/src/artifacts/hybrid-query.js +225 -0
- package/dist/src/artifacts/index-builder.js +1089 -0
- package/dist/src/artifacts/index-reader.js +112 -0
- package/dist/src/artifacts/index-status.js +193 -0
- package/dist/src/artifacts/legacy-index-migration.js +169 -0
- package/dist/src/artifacts/move.js +154 -0
- package/dist/src/artifacts/operational-state.js +239 -0
- package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
- package/dist/src/artifacts/query-engine.js +1955 -0
- package/dist/src/artifacts/source-graph.js +529 -0
- package/dist/src/artifacts/stats.js +169 -0
- package/dist/src/artifacts/types.js +606 -0
- package/dist/src/artifacts/views/cli.js +293 -0
- package/dist/src/artifacts/views/definition.js +170 -0
- package/dist/src/artifacts/views/store.js +149 -0
- package/dist/src/artifacts/views/types.js +8 -0
- package/dist/src/artifacts/watcher.js +255 -0
- package/dist/src/catalog/builtin-models.json +636 -0
- package/dist/src/catalog/cli.js +228 -0
- package/dist/src/catalog/cli.mjs +289 -0
- package/dist/src/catalog/index.js +15 -0
- package/dist/src/catalog/loader.js +217 -0
- package/dist/src/catalog/loader.mjs +251 -0
- package/dist/src/catalog/sources.json +41 -0
- package/dist/src/catalog/types.js +8 -0
- package/dist/src/channel/manager.mjs +504 -0
- package/dist/src/cli/agent-spawn.js +178 -0
- package/dist/src/cli/cli-extension-loader.js +245 -0
- package/dist/src/cli/command-log.js +275 -0
- package/dist/src/cli/config-loader.js +232 -0
- package/dist/src/cli/env.js +82 -0
- package/dist/src/cli/errors.js +150 -0
- package/dist/src/cli/find-package-root.js +40 -0
- package/dist/src/cli/git-hooks.js +250 -0
- package/dist/src/cli/handlers/agentcard.js +206 -0
- package/dist/src/cli/handlers/artifacts.js +76 -0
- package/dist/src/cli/handlers/best-practices-audit.js +280 -0
- package/dist/src/cli/handlers/cockpit.js +137 -0
- package/dist/src/cli/handlers/command-log.js +37 -0
- package/dist/src/cli/handlers/daemon.js +59 -0
- package/dist/src/cli/handlers/diagnose.js +300 -0
- package/dist/src/cli/handlers/execution-mode.js +105 -0
- package/dist/src/cli/handlers/feedback.js +341 -0
- package/dist/src/cli/handlers/help.js +147 -0
- package/dist/src/cli/handlers/index.js +302 -0
- package/dist/src/cli/handlers/init.js +179 -0
- package/dist/src/cli/handlers/install.js +129 -0
- package/dist/src/cli/handlers/issues.js +46 -0
- package/dist/src/cli/handlers/lint.js +42 -0
- package/dist/src/cli/handlers/local-executor.js +315 -0
- package/dist/src/cli/handlers/marketplace.js +168 -0
- package/dist/src/cli/handlers/mc.js +1010 -0
- package/dist/src/cli/handlers/models.js +352 -0
- package/dist/src/cli/handlers/packages.js +155 -0
- package/dist/src/cli/handlers/ralph-launcher.js +717 -0
- package/dist/src/cli/handlers/ralph.js +575 -0
- package/dist/src/cli/handlers/refresh.js +432 -0
- package/dist/src/cli/handlers/regenerate.js +336 -0
- package/dist/src/cli/handlers/repo-access.js +109 -0
- package/dist/src/cli/handlers/run.js +165 -0
- package/dist/src/cli/handlers/runtime-info.js +301 -0
- package/dist/src/cli/handlers/sandbox.js +197 -0
- package/dist/src/cli/handlers/scaffolding.js +149 -0
- package/dist/src/cli/handlers/script-runner.js +121 -0
- package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
- package/dist/src/cli/handlers/serve.js +1835 -0
- package/dist/src/cli/handlers/session.js +348 -0
- package/dist/src/cli/handlers/setup.js +440 -0
- package/dist/src/cli/handlers/skill-lint.js +367 -0
- package/dist/src/cli/handlers/skill-usage.js +74 -0
- package/dist/src/cli/handlers/steward.js +567 -0
- package/dist/src/cli/handlers/subcommands.js +1702 -0
- package/dist/src/cli/handlers/team.js +337 -0
- package/dist/src/cli/handlers/types.js +11 -0
- package/dist/src/cli/handlers/use.js +2772 -0
- package/dist/src/cli/handlers/utilities.js +703 -0
- package/dist/src/cli/handlers/version.js +134 -0
- package/dist/src/cli/handlers/workspace-context.js +93 -0
- package/dist/src/cli/handlers/workspace.js +126 -0
- package/dist/src/cli/help-generator.js +178 -0
- package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
- package/dist/src/cli/hooks/executor.js +96 -0
- package/dist/src/cli/hooks/index.js +15 -0
- package/dist/src/cli/hooks/registry.js +143 -0
- package/dist/src/cli/hooks/types.js +13 -0
- package/dist/src/cli/log.js +492 -0
- package/dist/src/cli/project-isolation/detect.js +70 -0
- package/dist/src/cli/project-isolation/index.js +7 -0
- package/dist/src/cli/project-isolation/signals.js +17 -0
- package/dist/src/cli/project-isolation/warning.js +102 -0
- package/dist/src/cli/prompt-utils.js +155 -0
- package/dist/src/cli/provider-deployment-plan.js +126 -0
- package/dist/src/cli/provider-resolution.js +119 -0
- package/dist/src/cli/router.js +305 -0
- package/dist/src/cli/scope-resolver.js +392 -0
- package/dist/src/cli/skill-usage.js +616 -0
- package/dist/src/cli/ui.js +224 -0
- package/dist/src/cli/watch-service.js +203 -0
- package/dist/src/cli/workflow-orchestrator.js +478 -0
- package/dist/src/cli/workspace-signals.js +321 -0
- package/dist/src/community/footer.js +14 -0
- package/dist/src/community/links.js +123 -0
- package/dist/src/community/milestones.js +46 -0
- package/dist/src/community/nudge-policy.js +93 -0
- package/dist/src/config/aiwg-config.js +883 -0
- package/dist/src/config/cli.js +703 -0
- package/dist/src/config/gitignore.js +156 -0
- package/dist/src/config/project-artifacts.js +76 -0
- package/dist/src/config/user-config.js +428 -0
- package/dist/src/config/user-registry.js +127 -0
- package/dist/src/config/workspace.js +276 -0
- package/dist/src/contributors/detect.js +39 -0
- package/dist/src/contributors/discover.js +172 -0
- package/dist/src/contributors/heuristic.js +186 -0
- package/dist/src/contributors/index.js +11 -0
- package/dist/src/contributors/types.js +13 -0
- package/dist/src/contributors/validation.js +116 -0
- package/dist/src/data/community.schema.json +43 -0
- package/dist/src/data/community.yaml +16 -0
- package/dist/src/extensions/capability-index.js +270 -0
- package/dist/src/extensions/claude-hooks-installer.js +268 -0
- package/dist/src/extensions/commands/definitions.js +3485 -0
- package/dist/src/extensions/deployment-registration.js +463 -0
- package/dist/src/extensions/index.js +22 -0
- package/dist/src/extensions/loader.js +132 -0
- package/dist/src/extensions/managed-marker.js +100 -0
- package/dist/src/extensions/manifest.js +196 -0
- package/dist/src/extensions/project-local-activity.js +114 -0
- package/dist/src/extensions/project-local-discovery.js +261 -0
- package/dist/src/extensions/project-local-doctor.js +281 -0
- package/dist/src/extensions/project-local-gitignore.js +176 -0
- package/dist/src/extensions/project-local-paths.js +121 -0
- package/dist/src/extensions/project-local-promote.js +218 -0
- package/dist/src/extensions/project-local-remove.js +373 -0
- package/dist/src/extensions/project-local-scaffold.js +252 -0
- package/dist/src/extensions/project-quickref.js +291 -0
- package/dist/src/extensions/registry.js +368 -0
- package/dist/src/extensions/shadow-resolver.js +271 -0
- package/dist/src/extensions/types.js +86 -0
- package/dist/src/extensions/upstream-registry.js +195 -0
- package/dist/src/extensions/validation.js +631 -0
- package/dist/src/features/catalog.js +88 -0
- package/dist/src/features/cli.js +197 -0
- package/dist/src/features/installer.js +57 -0
- package/dist/src/features/paths.js +14 -0
- package/dist/src/features/runtime.js +21 -0
- package/dist/src/features/status.js +134 -0
- package/dist/src/hooks/laziness-detection.js +532 -0
- package/dist/src/intake/git-history-analyzer.js +486 -0
- package/dist/src/intake/index.js +9 -0
- package/dist/src/issues/cli.js +327 -0
- package/dist/src/issues/index.js +5 -0
- package/dist/src/issues/live.js +154 -0
- package/dist/src/issues/local.js +666 -0
- package/dist/src/issues/sync.js +143 -0
- package/dist/src/issues/types.js +2 -0
- package/dist/src/issues/workflows.js +164 -0
- package/dist/src/kb/cli.js +173 -0
- package/dist/src/lint/cli.js +171 -0
- package/dist/src/lint/loader.js +225 -0
- package/dist/src/lint/reporters.js +141 -0
- package/dist/src/lint/runner.js +364 -0
- package/dist/src/lint/types.js +10 -0
- package/dist/src/marketplace/cache.js +110 -0
- package/dist/src/marketplace/identifier.js +63 -0
- package/dist/src/marketplace/registry.js +36 -0
- package/dist/src/marketplace/sources/clawhub.js +53 -0
- package/dist/src/marketplace/sources/git.js +45 -0
- package/dist/src/marketplace/types.js +9 -0
- package/dist/src/mcp/adapters/codex-runtime.js +224 -0
- package/dist/src/mcp/cli.mjs +1197 -0
- package/dist/src/mcp/elicitation.mjs +149 -0
- package/dist/src/mcp/helpers.mjs +287 -0
- package/dist/src/mcp/index.mjs +11 -0
- package/dist/src/mcp/profiles.js +263 -0
- package/dist/src/mcp/profiles.mjs +360 -0
- package/dist/src/mcp/registry.js +376 -0
- package/dist/src/mcp/registry.mjs +387 -0
- package/dist/src/mcp/server.mjs +633 -0
- package/dist/src/mcp/test-simple.mjs +271 -0
- package/dist/src/mcp/tools/command-run.mjs +101 -0
- package/dist/src/mcp/tools/discovery.mjs +291 -0
- package/dist/src/mcp/tools/interaction.mjs +87 -0
- package/dist/src/mcp/tools/orchestration.mjs +320 -0
- package/dist/src/mcp/tools/subsystems.mjs +640 -0
- package/dist/src/memory/cli.js +166 -0
- package/dist/src/memory/project-registry.js +282 -0
- package/dist/src/metrics/artifact-metrics.js +184 -0
- package/dist/src/metrics/context-budget.js +174 -0
- package/dist/src/metrics/token-counter.js +133 -0
- package/dist/src/models/config-loader.js +228 -0
- package/dist/src/models/index.js +22 -0
- package/dist/src/models/model-capabilities.v1.json +120 -0
- package/dist/src/models/model-catalog.v1.json +96 -0
- package/dist/src/models/model-discovery.js +521 -0
- package/dist/src/models/provider-models.js +73 -0
- package/dist/src/models/provider-policy.js +273 -0
- package/dist/src/models/resolver.js +245 -0
- package/dist/src/models/router.js +70 -0
- package/dist/src/models/types.js +8 -0
- package/dist/src/models/wrapper-deployment.js +178 -0
- package/dist/src/models/wrapper-route.js +54 -0
- package/dist/src/ops/cli.js +268 -0
- package/dist/src/ops/registry.js +623 -0
- package/dist/src/packages/adapters/clawhub.js +113 -0
- package/dist/src/packages/adapters/git.js +153 -0
- package/dist/src/packages/adapters/gitea.js +93 -0
- package/dist/src/packages/adapters/github.js +69 -0
- package/dist/src/packages/adapters/local-cache.js +89 -0
- package/dist/src/packages/package-registry.js +143 -0
- package/dist/src/packages/registry.js +238 -0
- package/dist/src/packages/types.js +11 -0
- package/dist/src/plugin/cross-framework-ops.js +475 -0
- package/dist/src/plugin/framework-config-loader.js +235 -0
- package/dist/src/plugin/framework-detector.js +186 -0
- package/dist/src/plugin/framework-isolator.js +341 -0
- package/dist/src/plugin/framework-migration.js +371 -0
- package/dist/src/plugin/metadata-validator.js +906 -0
- package/dist/src/plugin/plugin-installer.js +436 -0
- package/dist/src/plugin/plugin-status.js +369 -0
- package/dist/src/plugin/plugin-uninstaller.js +473 -0
- package/dist/src/plugin/registry-validator.js +344 -0
- package/dist/src/plugin/skill-command-translator.js +415 -0
- package/dist/src/plugin/workspace-creator.js +189 -0
- package/dist/src/plugin/workspace-migrator.js +821 -0
- package/dist/src/policy/authorization.js +390 -0
- package/dist/src/policy/repo-access.js +215 -0
- package/dist/src/provenance/cli.js +16 -0
- package/dist/src/providers/capability-matrix.js +300 -0
- package/dist/src/providers/capability-matrix.yaml +514 -0
- package/dist/src/providers/provider-definitions.js +977 -0
- package/dist/src/providers/provider-definitions.mjs +159 -0
- package/dist/src/providers/provider-inventory.js +169 -0
- package/dist/src/quality/feedback-ab.js +174 -0
- package/dist/src/quality/feedback-collector.js +176 -0
- package/dist/src/quality/feedback-tracker.js +123 -0
- package/dist/src/quality/patterns/adr.json +24 -0
- package/dist/src/quality/patterns/sad.json +24 -0
- package/dist/src/quality/patterns/test-plan.json +24 -0
- package/dist/src/quality/patterns/use-case.json +24 -0
- package/dist/src/quality/scoring.js +157 -0
- package/dist/src/reflections/cli.js +15 -0
- package/dist/src/release/plan.js +139 -0
- package/dist/src/research/cache/manager.js +227 -0
- package/dist/src/research/clients/arxiv.js +156 -0
- package/dist/src/research/clients/base.js +197 -0
- package/dist/src/research/clients/crossref.js +112 -0
- package/dist/src/research/clients/semantic-scholar.js +126 -0
- package/dist/src/research/clients/unpaywall.js +87 -0
- package/dist/src/research/index.js +14 -0
- package/dist/src/research/query-cli.js +336 -0
- package/dist/src/research/services/acquisition.js +313 -0
- package/dist/src/research/services/archival.js +225 -0
- package/dist/src/research/services/citation.js +279 -0
- package/dist/src/research/services/discovery.js +243 -0
- package/dist/src/research/services/documentation.js +269 -0
- package/dist/src/research/services/index.js +14 -0
- package/dist/src/research/services/provenance.js +279 -0
- package/dist/src/research/services/quality.js +370 -0
- package/dist/src/research/services/types.js +7 -0
- package/dist/src/research/storage-cli.js +20 -0
- package/dist/src/research/types.js +47 -0
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.js +2 -0
- package/dist/src/resources/web-release.d.ts +89 -0
- package/dist/src/resources/web-release.js +882 -0
- package/dist/src/rlm/cache/cli.js +162 -0
- package/dist/src/rlm/cache/hash.js +35 -0
- package/dist/src/rlm/cache/store.js +170 -0
- package/dist/src/rlm/cache/types.js +8 -0
- package/dist/src/rlm/cli.js +650 -0
- package/dist/src/serve/a2a-terminal-observer.js +120 -0
- package/dist/src/serve/agent-router.js +205 -0
- package/dist/src/serve/dispatch-router.js +171 -0
- package/dist/src/serve/executor-registry.js +715 -0
- package/dist/src/serve/mission-conductor.js +177 -0
- package/dist/src/serve/orchestrator-adapter.js +113 -0
- package/dist/src/serve/orchestrator-override.js +94 -0
- package/dist/src/serve/orchestrator-pty.js +133 -0
- package/dist/src/serve/pty-bridge.js +799 -0
- package/dist/src/serve/sandbox-registry.js +832 -0
- package/dist/src/serve/screen-reader.js +228 -0
- package/dist/src/serve/stack-adapters.js +68 -0
- package/dist/src/serve/telemetry.js +143 -0
- package/dist/src/skills/adapters/clawhub.js +250 -0
- package/dist/src/skills/adapters/local.js +335 -0
- package/dist/src/skills/adapters/openclaw.js +316 -0
- package/dist/src/skills/cli.js +334 -0
- package/dist/src/skills/registry.js +117 -0
- package/dist/src/skills/run.js +259 -0
- package/dist/src/skills/runtime.js +94 -0
- package/dist/src/skills/types.js +10 -0
- package/dist/src/smiths/agentsmith/demo.js +116 -0
- package/dist/src/smiths/agentsmith/examples.js +300 -0
- package/dist/src/smiths/agentsmith/generator.js +503 -0
- package/dist/src/smiths/agentsmith/index.js +11 -0
- package/dist/src/smiths/agentsmith/types.js +8 -0
- package/dist/src/smiths/commandsmith/example.js +220 -0
- package/dist/src/smiths/commandsmith/generator.js +288 -0
- package/dist/src/smiths/commandsmith/index.js +41 -0
- package/dist/src/smiths/commandsmith/templates.js +296 -0
- package/dist/src/smiths/commandsmith/types.js +7 -0
- package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
- package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
- package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
- package/dist/src/smiths/context-pipeline/discovery.js +187 -0
- package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
- package/dist/src/smiths/context-pipeline/finalization.js +147 -0
- package/dist/src/smiths/context-pipeline/generator.js +477 -0
- package/dist/src/smiths/context-pipeline/index.js +30 -0
- package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
- package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
- package/dist/src/smiths/context-pipeline/overflow.js +212 -0
- package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
- package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
- package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
- package/dist/src/smiths/context-pipeline/types.js +23 -0
- package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
- package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
- package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
- package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
- package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
- package/dist/src/smiths/hook-bridge/index.js +79 -0
- package/dist/src/smiths/hook-bridge/loader.js +116 -0
- package/dist/src/smiths/hook-bridge/shim.js +89 -0
- package/dist/src/smiths/hook-bridge/types.js +31 -0
- package/dist/src/smiths/index.js +39 -0
- package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
- package/dist/src/smiths/mcpsmith/example.js +119 -0
- package/dist/src/smiths/mcpsmith/generator.js +236 -0
- package/dist/src/smiths/mcpsmith/index.js +17 -0
- package/dist/src/smiths/mcpsmith/types.js +10 -0
- package/dist/src/smiths/platform-paths.js +101 -0
- package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
- package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
- package/dist/src/smiths/skillsmith/demo.js +83 -0
- package/dist/src/smiths/skillsmith/examples.js +161 -0
- package/dist/src/smiths/skillsmith/generator.js +316 -0
- package/dist/src/smiths/skillsmith/index.js +12 -0
- package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
- package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
- package/dist/src/smiths/skillsmith/types.js +9 -0
- package/dist/src/smiths/toolsmith/index.js +10 -0
- package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
- package/dist/src/smiths/toolsmith/types.js +8 -0
- package/dist/src/storage/backends/fortemi.js +227 -0
- package/dist/src/storage/backends/fs.js +134 -0
- package/dist/src/storage/backends/logseq.js +309 -0
- package/dist/src/storage/backends/obsidian.js +233 -0
- package/dist/src/storage/cli.js +468 -0
- package/dist/src/storage/config.js +272 -0
- package/dist/src/storage/index.js +108 -0
- package/dist/src/storage/subsystem-cli.js +201 -0
- package/dist/src/storage/types.js +33 -0
- package/dist/src/testing/corpus/corpus-builder.js +383 -0
- package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
- package/dist/src/testing/corpus/index.js +10 -0
- package/dist/src/testing/fixtures/index.js +9 -0
- package/dist/src/testing/fixtures/test-data-factory.js +472 -0
- package/dist/src/testing/generators/index.js +11 -0
- package/dist/src/testing/generators/test-case-generator.js +393 -0
- package/dist/src/testing/generators/test-code-generator.js +384 -0
- package/dist/src/testing/generators/use-case-parser.js +325 -0
- package/dist/src/testing/index.js +11 -0
- package/dist/src/tracker/capability-protocol.js +118 -0
- package/dist/src/update/checker.mjs +396 -0
- package/dist/src/update/notifier.mjs +235 -0
- package/dist/src/writing/content-diversifier.js +804 -0
- package/dist/src/writing/example-generator.js +959 -0
- package/dist/src/writing/example-templates.js +99 -0
- package/dist/src/writing/pattern-library.js +486 -0
- package/dist/src/writing/patterns/banned-phrases.json +4413 -0
- package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
- package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
- package/dist/src/writing/patterns/hedging-language.json +2096 -0
- package/dist/src/writing/patterns/transition-words.json +1285 -0
- package/dist/src/writing/patterns/weak-verbs.json +1112 -0
- package/dist/src/writing/prompt-optimizer.js +660 -0
- package/dist/src/writing/prompt-templates.js +583 -0
- package/dist/src/writing/scoring-config-loader.js +168 -0
- package/dist/src/writing/validation-engine.js +595 -0
- package/dist/src/writing/validation-rules.js +380 -0
- package/dist/src/writing/voice-analyzer.js +439 -0
- package/dist/src/writing/voice-calibration.js +661 -0
- package/dist/src/writing/voice-profiles.json +588 -0
- package/package.json +64 -9
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity Log Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for `.aiwg/activity.log` entries. The wire format is
|
|
5
|
+
* frozen by the activity-log rule (`agentic/code/addons/aiwg-utils/rules/activity-log.md`):
|
|
6
|
+
*
|
|
7
|
+
* ## [YYYY-MM-DD HH:MM] <operation> | <summary>
|
|
8
|
+
*
|
|
9
|
+
* @issue #934
|
|
10
|
+
* @issue #964
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Valid operation tokens. The activity-log rule freezes this set;
|
|
14
|
+
* additions require updating the rule too.
|
|
15
|
+
*/
|
|
16
|
+
export const ACTIVITY_OPERATIONS = [
|
|
17
|
+
'ingest',
|
|
18
|
+
'create',
|
|
19
|
+
'update',
|
|
20
|
+
'delete',
|
|
21
|
+
'query',
|
|
22
|
+
'lint',
|
|
23
|
+
'deploy',
|
|
24
|
+
'archive',
|
|
25
|
+
'promote',
|
|
26
|
+
];
|
|
27
|
+
export function isActivityOperation(s) {
|
|
28
|
+
return ACTIVITY_OPERATIONS.includes(s);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format an entry as the canonical wire line (no trailing newline).
|
|
32
|
+
*
|
|
33
|
+
* Wire format: `## [YYYY-MM-DD HH:MM] <operation> | <summary>`
|
|
34
|
+
*/
|
|
35
|
+
export function formatEntry(entry) {
|
|
36
|
+
const ts = formatUtcTimestamp(entry.timestamp);
|
|
37
|
+
return `## [${ts}] ${entry.operation} | ${entry.summary}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Format a Date as the canonical "YYYY-MM-DD HH:MM" UTC timestamp.
|
|
41
|
+
*/
|
|
42
|
+
export function formatUtcTimestamp(d) {
|
|
43
|
+
const yyyy = d.getUTCFullYear();
|
|
44
|
+
const mm = String(d.getUTCMonth() + 1).padStart(2, '0');
|
|
45
|
+
const dd = String(d.getUTCDate()).padStart(2, '0');
|
|
46
|
+
const HH = String(d.getUTCHours()).padStart(2, '0');
|
|
47
|
+
const MM = String(d.getUTCMinutes()).padStart(2, '0');
|
|
48
|
+
return `${yyyy}-${mm}-${dd} ${HH}:${MM}`;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Deployer
|
|
3
|
+
*
|
|
4
|
+
* Core deployment engine for multi-platform agent deployment.
|
|
5
|
+
*
|
|
6
|
+
* @implements @.aiwg/requirements/use-cases/UC-002-deploy-sdlc-framework.md
|
|
7
|
+
* @architecture @.aiwg/architecture/software-architecture-doc.md - Section 2.1 CLI Entry Point
|
|
8
|
+
* @nfr @.aiwg/requirements/nfr-modules/performance.md - NFR-PERF-002 (<10s deployment)
|
|
9
|
+
* @tests @test/unit/agents/agent-deployer.test.ts
|
|
10
|
+
* @depends @src/agents/agent-validator.ts
|
|
11
|
+
* @depends @src/agents/agent-packager.ts
|
|
12
|
+
* @agent-catalog @agentic/code/frameworks/sdlc-complete/agents/
|
|
13
|
+
*/
|
|
14
|
+
import * as fs from 'fs/promises';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
import { existsSync } from 'fs';
|
|
17
|
+
import { AgentValidator } from './agent-validator.js';
|
|
18
|
+
import { AgentPackager } from './agent-packager.js';
|
|
19
|
+
import { getProviderDefinition } from '../providers/provider-definitions.js';
|
|
20
|
+
export class AgentDeployer {
|
|
21
|
+
validator;
|
|
22
|
+
packager;
|
|
23
|
+
constructor() {
|
|
24
|
+
this.validator = new AgentValidator();
|
|
25
|
+
this.packager = new AgentPackager();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Deploy agents to target platform
|
|
29
|
+
*/
|
|
30
|
+
async deploy(target, options = {}) {
|
|
31
|
+
const result = {
|
|
32
|
+
platform: target.platform,
|
|
33
|
+
projectPath: target.projectPath,
|
|
34
|
+
deployed: [],
|
|
35
|
+
skipped: [],
|
|
36
|
+
failed: [],
|
|
37
|
+
totalAgents: 0,
|
|
38
|
+
deployedCount: 0,
|
|
39
|
+
skippedCount: 0,
|
|
40
|
+
failedCount: 0,
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
// Load agents from default locations
|
|
44
|
+
const agents = await this.loadAgents();
|
|
45
|
+
result.totalAgents = agents.length;
|
|
46
|
+
if (options.verbose) {
|
|
47
|
+
console.log(`Loaded ${agents.length} agents`);
|
|
48
|
+
}
|
|
49
|
+
// Filter agents by options
|
|
50
|
+
const filteredAgents = this.filterAgents(agents, options);
|
|
51
|
+
if (options.verbose) {
|
|
52
|
+
console.log(`Deploying ${filteredAgents.length} agents after filtering`);
|
|
53
|
+
}
|
|
54
|
+
// Validate agents
|
|
55
|
+
const validationResults = await this.validator.validateBatch(filteredAgents);
|
|
56
|
+
const validAgents = validationResults
|
|
57
|
+
.filter((r) => r.valid)
|
|
58
|
+
.map((r) => r.agent);
|
|
59
|
+
// Report validation failures
|
|
60
|
+
const invalidAgents = validationResults.filter((r) => !r.valid);
|
|
61
|
+
for (const invalid of invalidAgents) {
|
|
62
|
+
result.failed.push({
|
|
63
|
+
agent: invalid.agent,
|
|
64
|
+
error: `Validation failed: ${invalid.issues
|
|
65
|
+
.filter((i) => i.type === 'error')
|
|
66
|
+
.map((i) => i.message)
|
|
67
|
+
.join(', ')}`,
|
|
68
|
+
});
|
|
69
|
+
result.failedCount++;
|
|
70
|
+
}
|
|
71
|
+
// Create backup if requested
|
|
72
|
+
if (options.backup && !options.dryRun) {
|
|
73
|
+
result.backupPath = await this.createBackup(target);
|
|
74
|
+
if (options.verbose) {
|
|
75
|
+
console.log(`Backup created: ${result.backupPath}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Deploy each valid agent
|
|
79
|
+
for (const agent of validAgents) {
|
|
80
|
+
try {
|
|
81
|
+
const deployResult = await this.deployAgent(agent, target, options);
|
|
82
|
+
if (deployResult.success) {
|
|
83
|
+
result.deployed.push(deployResult);
|
|
84
|
+
result.deployedCount++;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
result.skipped.push(agent);
|
|
88
|
+
result.skippedCount++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
result.failed.push({
|
|
93
|
+
agent,
|
|
94
|
+
error: error instanceof Error ? error.message : String(error),
|
|
95
|
+
});
|
|
96
|
+
result.failedCount++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
throw new Error(`Deployment failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Deploy agents to multiple targets
|
|
107
|
+
*/
|
|
108
|
+
async deployBatch(targets, options = {}) {
|
|
109
|
+
const results = new Map();
|
|
110
|
+
for (const target of targets) {
|
|
111
|
+
const key = `${target.platform}:${target.projectPath}`;
|
|
112
|
+
const result = await this.deploy(target, options);
|
|
113
|
+
results.set(key, result);
|
|
114
|
+
}
|
|
115
|
+
return results;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load agents from source directories
|
|
119
|
+
*/
|
|
120
|
+
async loadAgents(sourcePath) {
|
|
121
|
+
const agents = [];
|
|
122
|
+
const searchPaths = [];
|
|
123
|
+
if (sourcePath) {
|
|
124
|
+
searchPaths.push(sourcePath);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Default search paths
|
|
128
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
129
|
+
const aiwgPath = path.join(homeDir, '.local/share/ai-writing-guide/agents');
|
|
130
|
+
const localAgents = path.join(process.cwd(), 'agents');
|
|
131
|
+
const sdlcAgents = path.join(homeDir, '.local/share/ai-writing-guide/agentic/code/frameworks/sdlc-complete/agents');
|
|
132
|
+
if (existsSync(aiwgPath))
|
|
133
|
+
searchPaths.push(aiwgPath);
|
|
134
|
+
if (existsSync(sdlcAgents))
|
|
135
|
+
searchPaths.push(sdlcAgents);
|
|
136
|
+
if (existsSync(localAgents))
|
|
137
|
+
searchPaths.push(localAgents);
|
|
138
|
+
}
|
|
139
|
+
// Load agents from all search paths
|
|
140
|
+
for (const searchPath of searchPaths) {
|
|
141
|
+
const pathAgents = await this.loadAgentsFromPath(searchPath);
|
|
142
|
+
agents.push(...pathAgents);
|
|
143
|
+
}
|
|
144
|
+
// Remove duplicates by name (prefer earlier paths)
|
|
145
|
+
const uniqueAgents = new Map();
|
|
146
|
+
for (const agent of agents) {
|
|
147
|
+
if (!uniqueAgents.has(agent.metadata.name)) {
|
|
148
|
+
uniqueAgents.set(agent.metadata.name, agent);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return Array.from(uniqueAgents.values());
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Load agents from a specific path
|
|
155
|
+
*/
|
|
156
|
+
async loadAgentsFromPath(dirPath) {
|
|
157
|
+
const agents = [];
|
|
158
|
+
if (!existsSync(dirPath)) {
|
|
159
|
+
return agents;
|
|
160
|
+
}
|
|
161
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
162
|
+
for (const entry of entries) {
|
|
163
|
+
if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
164
|
+
// Skip template and README files
|
|
165
|
+
if (entry.name === 'agent-template.md' ||
|
|
166
|
+
entry.name === 'README.md' ||
|
|
167
|
+
entry.name === 'manifest.md') {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const filePath = path.join(dirPath, entry.name);
|
|
171
|
+
try {
|
|
172
|
+
const agent = await this.parseAgentFile(filePath);
|
|
173
|
+
if (agent) {
|
|
174
|
+
agents.push(agent);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
// Skip files that fail to parse
|
|
179
|
+
console.warn(`Warning: Failed to parse ${filePath}: ${error}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return agents;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Parse agent file
|
|
187
|
+
*/
|
|
188
|
+
async parseAgentFile(filePath) {
|
|
189
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
190
|
+
const metadata = this.parseFrontmatter(content);
|
|
191
|
+
if (!metadata.name) {
|
|
192
|
+
// Use filename as fallback
|
|
193
|
+
metadata.name = path.basename(filePath, '.md');
|
|
194
|
+
}
|
|
195
|
+
// Load agent even if description is missing - validation will catch it
|
|
196
|
+
// Extract content (remove frontmatter)
|
|
197
|
+
const contentWithoutFrontmatter = this.removeFrontmatter(content);
|
|
198
|
+
return {
|
|
199
|
+
metadata,
|
|
200
|
+
content: contentWithoutFrontmatter,
|
|
201
|
+
filePath,
|
|
202
|
+
fileName: path.basename(filePath),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Parse YAML frontmatter
|
|
207
|
+
*/
|
|
208
|
+
parseFrontmatter(content) {
|
|
209
|
+
const metadata = {};
|
|
210
|
+
// Match frontmatter between --- delimiters
|
|
211
|
+
const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
212
|
+
if (!frontmatterMatch) {
|
|
213
|
+
return metadata;
|
|
214
|
+
}
|
|
215
|
+
const frontmatter = frontmatterMatch[1];
|
|
216
|
+
const lines = frontmatter.split('\n');
|
|
217
|
+
for (const line of lines) {
|
|
218
|
+
const match = line.match(/^(\w+):\s*(.+)$/);
|
|
219
|
+
if (match) {
|
|
220
|
+
const key = match[1].trim();
|
|
221
|
+
const value = match[2].trim();
|
|
222
|
+
switch (key) {
|
|
223
|
+
case 'name':
|
|
224
|
+
metadata.name = value;
|
|
225
|
+
break;
|
|
226
|
+
case 'description':
|
|
227
|
+
metadata.description = value;
|
|
228
|
+
break;
|
|
229
|
+
case 'category':
|
|
230
|
+
metadata.category = value;
|
|
231
|
+
break;
|
|
232
|
+
case 'model':
|
|
233
|
+
metadata.model = value;
|
|
234
|
+
break;
|
|
235
|
+
case 'version':
|
|
236
|
+
metadata.version = value;
|
|
237
|
+
break;
|
|
238
|
+
case 'tools':
|
|
239
|
+
metadata.tools = value.split(',').map((t) => t.trim());
|
|
240
|
+
break;
|
|
241
|
+
case 'dependencies':
|
|
242
|
+
metadata.dependencies = value.split(',').map((d) => d.trim());
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return metadata;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Remove frontmatter from content
|
|
251
|
+
*/
|
|
252
|
+
removeFrontmatter(content) {
|
|
253
|
+
const match = content.match(/^---\s*\n[\s\S]*?\n---\s*\n([\s\S]*)$/);
|
|
254
|
+
return match ? match[1].trim() : content;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Filter agents by options
|
|
258
|
+
*/
|
|
259
|
+
filterAgents(agents, options) {
|
|
260
|
+
let filtered = agents;
|
|
261
|
+
// Filter by category
|
|
262
|
+
if (options.categories && options.categories.length > 0) {
|
|
263
|
+
filtered = filtered.filter((agent) => agent.metadata.category &&
|
|
264
|
+
options.categories.includes(agent.metadata.category));
|
|
265
|
+
}
|
|
266
|
+
// Filter by name
|
|
267
|
+
if (options.agentNames && options.agentNames.length > 0) {
|
|
268
|
+
filtered = filtered.filter((agent) => options.agentNames.includes(agent.metadata.name));
|
|
269
|
+
}
|
|
270
|
+
return filtered;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Deploy a single agent
|
|
274
|
+
*/
|
|
275
|
+
async deployAgent(agent, target, options) {
|
|
276
|
+
const agentsDir = this.getAgentsDirectory(target);
|
|
277
|
+
const fileName = this.packager.getFileName(agent, target.platform);
|
|
278
|
+
const targetPath = path.join(agentsDir, fileName);
|
|
279
|
+
// Check if file exists and force is not set
|
|
280
|
+
if (existsSync(targetPath) && !options.force) {
|
|
281
|
+
return {
|
|
282
|
+
agent,
|
|
283
|
+
success: false,
|
|
284
|
+
targetPath,
|
|
285
|
+
error: 'File exists (use --force to overwrite)',
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
// Dry run: don't write files
|
|
289
|
+
if (options.dryRun) {
|
|
290
|
+
return {
|
|
291
|
+
agent,
|
|
292
|
+
success: true,
|
|
293
|
+
targetPath,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
// Package agent for platform
|
|
297
|
+
const packaged = await this.packager.package(agent, target.platform);
|
|
298
|
+
// Create directory if needed
|
|
299
|
+
await fs.mkdir(agentsDir, { recursive: true });
|
|
300
|
+
// Write file
|
|
301
|
+
await fs.writeFile(targetPath, packaged.content, 'utf-8');
|
|
302
|
+
return {
|
|
303
|
+
agent,
|
|
304
|
+
success: true,
|
|
305
|
+
targetPath,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get agents directory for platform
|
|
310
|
+
*/
|
|
311
|
+
getAgentsDirectory(target) {
|
|
312
|
+
if (target.agentsPath) {
|
|
313
|
+
return path.resolve(target.projectPath, target.agentsPath);
|
|
314
|
+
}
|
|
315
|
+
const definition = getProviderDefinition(target.platform);
|
|
316
|
+
const agentsPath = definition?.paths.artifacts.agents ?? '';
|
|
317
|
+
return path.resolve(target.projectPath, agentsPath);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Create backup of existing agents
|
|
321
|
+
*/
|
|
322
|
+
async createBackup(target) {
|
|
323
|
+
const agentsDir = this.getAgentsDirectory(target);
|
|
324
|
+
if (!existsSync(agentsDir)) {
|
|
325
|
+
return ''; // Nothing to backup
|
|
326
|
+
}
|
|
327
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
328
|
+
const backupPath = path.join(target.projectPath, `.agents-backup-${timestamp}`);
|
|
329
|
+
await fs.cp(agentsDir, backupPath, { recursive: true });
|
|
330
|
+
return backupPath;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Rollback to previous backup
|
|
334
|
+
*/
|
|
335
|
+
async rollback(backupPath, target) {
|
|
336
|
+
if (!existsSync(backupPath)) {
|
|
337
|
+
throw new Error(`Backup not found: ${backupPath}`);
|
|
338
|
+
}
|
|
339
|
+
const agentsDir = this.getAgentsDirectory(target);
|
|
340
|
+
// Remove current agents directory
|
|
341
|
+
if (existsSync(agentsDir)) {
|
|
342
|
+
await fs.rm(agentsDir, { recursive: true, force: true });
|
|
343
|
+
}
|
|
344
|
+
// Restore from backup
|
|
345
|
+
await fs.cp(backupPath, agentsDir, { recursive: true });
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get installed version of an agent
|
|
349
|
+
*/
|
|
350
|
+
async getInstalledVersion(agentName, target) {
|
|
351
|
+
const agentsDir = this.getAgentsDirectory(target);
|
|
352
|
+
const fileName = `${agentName}${this.packager.getFileExtension(target.platform)}`;
|
|
353
|
+
const filePath = path.join(agentsDir, fileName);
|
|
354
|
+
if (!existsSync(filePath)) {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
try {
|
|
358
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
359
|
+
const metadata = this.parseFrontmatter(content);
|
|
360
|
+
return metadata.version || null;
|
|
361
|
+
}
|
|
362
|
+
catch {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=agent-deployer.js.map
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Packager
|
|
3
|
+
*
|
|
4
|
+
* Converts agents to platform-specific formats.
|
|
5
|
+
*/
|
|
6
|
+
import { getProviderDefinition } from '../providers/provider-definitions.js';
|
|
7
|
+
export class AgentPackager {
|
|
8
|
+
getAgentFormatAdapters() {
|
|
9
|
+
return {
|
|
10
|
+
'claude-markdown': (agent) => this.convertToClaudeFormat(agent),
|
|
11
|
+
'cursor-json': (agent) => this.convertToCursorFormat(agent),
|
|
12
|
+
'codex-markdown': (agent) => this.convertToCodexFormat(agent),
|
|
13
|
+
'copilot-markdown': (agent) => this.convertToGenericFormat(agent),
|
|
14
|
+
'factory-droid': (agent) => this.convertToClaudeFormat(agent),
|
|
15
|
+
'generic-markdown': (agent) => this.convertToGenericFormat(agent),
|
|
16
|
+
'windsurf-markdown': (agent) => this.convertToWindsurfFormat(agent),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Package agent for target platform
|
|
21
|
+
*/
|
|
22
|
+
async package(agent, platform) {
|
|
23
|
+
const definition = getProviderDefinition(platform);
|
|
24
|
+
if (!definition) {
|
|
25
|
+
throw new Error(`Unknown platform: ${platform}`);
|
|
26
|
+
}
|
|
27
|
+
const adapterKey = definition.adapters.agentFormat;
|
|
28
|
+
const adapter = this.getAgentFormatAdapters()[adapterKey];
|
|
29
|
+
if (!adapter) {
|
|
30
|
+
throw new Error(`Unknown agent format adapter '${adapterKey}' for platform: ${platform}`);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
agent,
|
|
34
|
+
content: adapter(agent),
|
|
35
|
+
format: definition.id,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Convert to Claude Code format (.md with YAML frontmatter)
|
|
40
|
+
*/
|
|
41
|
+
convertToClaudeFormat(agent) {
|
|
42
|
+
const { metadata, content } = agent;
|
|
43
|
+
const lines = [];
|
|
44
|
+
// Add frontmatter
|
|
45
|
+
lines.push('---');
|
|
46
|
+
lines.push(`name: ${metadata.name}`);
|
|
47
|
+
lines.push(`description: ${metadata.description}`);
|
|
48
|
+
if (metadata.model) {
|
|
49
|
+
lines.push(`model: ${metadata.model}`);
|
|
50
|
+
}
|
|
51
|
+
if (metadata.modelRole) {
|
|
52
|
+
lines.push(`model-role: ${metadata.modelRole}`);
|
|
53
|
+
}
|
|
54
|
+
if (metadata.modelTier) {
|
|
55
|
+
lines.push(`model-tier: ${metadata.modelTier}`);
|
|
56
|
+
}
|
|
57
|
+
if (metadata.tools && metadata.tools.length > 0) {
|
|
58
|
+
lines.push(`tools: ${metadata.tools.join(', ')}`);
|
|
59
|
+
}
|
|
60
|
+
if (metadata.category) {
|
|
61
|
+
lines.push(`category: ${metadata.category}`);
|
|
62
|
+
}
|
|
63
|
+
if (metadata.version) {
|
|
64
|
+
lines.push(`version: ${metadata.version}`);
|
|
65
|
+
}
|
|
66
|
+
if (metadata.dependencies && metadata.dependencies.length > 0) {
|
|
67
|
+
lines.push(`dependencies: ${metadata.dependencies.join(', ')}`);
|
|
68
|
+
}
|
|
69
|
+
lines.push('---');
|
|
70
|
+
lines.push('');
|
|
71
|
+
// Add content
|
|
72
|
+
lines.push(content);
|
|
73
|
+
return lines.join('\n');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Convert to Cursor format (JSON-based)
|
|
77
|
+
*/
|
|
78
|
+
convertToCursorFormat(agent) {
|
|
79
|
+
const { metadata, content } = agent;
|
|
80
|
+
// Cursor uses JSON format with lowercase tool names
|
|
81
|
+
const tools = metadata.tools?.map((t) => t.toLowerCase()) || [];
|
|
82
|
+
const cursorAgent = {
|
|
83
|
+
name: metadata.name,
|
|
84
|
+
description: metadata.description,
|
|
85
|
+
prompt: content,
|
|
86
|
+
tools,
|
|
87
|
+
...(metadata.model && { model: metadata.model }),
|
|
88
|
+
...(metadata.modelRole && { modelRole: metadata.modelRole }),
|
|
89
|
+
...(metadata.modelTier && { modelTier: metadata.modelTier }),
|
|
90
|
+
...(metadata.category && { category: metadata.category }),
|
|
91
|
+
...(metadata.version && { version: metadata.version }),
|
|
92
|
+
...(metadata.dependencies && { dependencies: metadata.dependencies }),
|
|
93
|
+
};
|
|
94
|
+
return JSON.stringify(cursorAgent, null, 2);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Convert to OpenAI Codex format (YAML-based with specific structure)
|
|
98
|
+
*/
|
|
99
|
+
convertToCodexFormat(agent) {
|
|
100
|
+
const { metadata, content } = agent;
|
|
101
|
+
const lines = [];
|
|
102
|
+
// Codex uses YAML frontmatter similar to Claude
|
|
103
|
+
lines.push('---');
|
|
104
|
+
lines.push(`agent_name: ${metadata.name}`);
|
|
105
|
+
lines.push(`description: ${metadata.description}`);
|
|
106
|
+
if (metadata.tools && metadata.tools.length > 0) {
|
|
107
|
+
lines.push('capabilities:');
|
|
108
|
+
for (const tool of metadata.tools) {
|
|
109
|
+
lines.push(` - ${tool.toLowerCase()}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (metadata.model) {
|
|
113
|
+
lines.push(`preferred_model: ${metadata.model}`);
|
|
114
|
+
}
|
|
115
|
+
if (metadata.modelRole) {
|
|
116
|
+
lines.push(`model-role: ${metadata.modelRole}`);
|
|
117
|
+
}
|
|
118
|
+
if (metadata.modelTier) {
|
|
119
|
+
lines.push(`model-tier: ${metadata.modelTier}`);
|
|
120
|
+
}
|
|
121
|
+
if (metadata.category) {
|
|
122
|
+
lines.push(`category: ${metadata.category}`);
|
|
123
|
+
}
|
|
124
|
+
if (metadata.version) {
|
|
125
|
+
lines.push(`version: ${metadata.version}`);
|
|
126
|
+
}
|
|
127
|
+
lines.push('---');
|
|
128
|
+
lines.push('');
|
|
129
|
+
// Add system prompt header
|
|
130
|
+
lines.push('# System Instructions');
|
|
131
|
+
lines.push('');
|
|
132
|
+
lines.push(content);
|
|
133
|
+
return lines.join('\n');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Convert to generic format (plain markdown with minimal frontmatter)
|
|
137
|
+
*/
|
|
138
|
+
convertToGenericFormat(agent) {
|
|
139
|
+
const { metadata, content } = agent;
|
|
140
|
+
const lines = [];
|
|
141
|
+
// Minimal YAML frontmatter
|
|
142
|
+
lines.push('---');
|
|
143
|
+
lines.push(`name: ${metadata.name}`);
|
|
144
|
+
lines.push(`description: ${metadata.description}`);
|
|
145
|
+
if (metadata.version) {
|
|
146
|
+
lines.push(`version: ${metadata.version}`);
|
|
147
|
+
}
|
|
148
|
+
lines.push('---');
|
|
149
|
+
lines.push('');
|
|
150
|
+
// Add metadata as comments
|
|
151
|
+
lines.push('<!--');
|
|
152
|
+
if (metadata.category) {
|
|
153
|
+
lines.push(`Category: ${metadata.category}`);
|
|
154
|
+
}
|
|
155
|
+
if (metadata.model) {
|
|
156
|
+
lines.push(`Preferred Model: ${metadata.model}`);
|
|
157
|
+
}
|
|
158
|
+
if (metadata.modelRole) {
|
|
159
|
+
lines.push(`Model Role: ${metadata.modelRole}`);
|
|
160
|
+
}
|
|
161
|
+
if (metadata.modelTier) {
|
|
162
|
+
lines.push(`Model Tier: ${metadata.modelTier}`);
|
|
163
|
+
}
|
|
164
|
+
if (metadata.tools && metadata.tools.length > 0) {
|
|
165
|
+
lines.push(`Tools: ${metadata.tools.join(', ')}`);
|
|
166
|
+
}
|
|
167
|
+
if (metadata.dependencies && metadata.dependencies.length > 0) {
|
|
168
|
+
lines.push(`Dependencies: ${metadata.dependencies.join(', ')}`);
|
|
169
|
+
}
|
|
170
|
+
lines.push('-->');
|
|
171
|
+
lines.push('');
|
|
172
|
+
// Add content
|
|
173
|
+
lines.push(content);
|
|
174
|
+
return lines.join('\n');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Convert to Windsurf format (plain markdown, no YAML frontmatter)
|
|
178
|
+
*
|
|
179
|
+
* Windsurf uses AGENTS.md for directory-scoped instructions.
|
|
180
|
+
* Individual agent definitions use clean markdown sections.
|
|
181
|
+
*/
|
|
182
|
+
convertToWindsurfFormat(agent) {
|
|
183
|
+
const { metadata, content } = agent;
|
|
184
|
+
const lines = [];
|
|
185
|
+
// Windsurf prefers clean markdown without YAML frontmatter
|
|
186
|
+
lines.push(`### ${metadata.name}`);
|
|
187
|
+
lines.push('');
|
|
188
|
+
// Only add description if present
|
|
189
|
+
if (metadata.description) {
|
|
190
|
+
lines.push(`> ${metadata.description}`);
|
|
191
|
+
lines.push('');
|
|
192
|
+
}
|
|
193
|
+
// Include capabilities in a structured way
|
|
194
|
+
if (metadata.tools && metadata.tools.length > 0) {
|
|
195
|
+
lines.push('<capabilities>');
|
|
196
|
+
for (const tool of metadata.tools) {
|
|
197
|
+
lines.push(`- ${tool}`);
|
|
198
|
+
}
|
|
199
|
+
lines.push('</capabilities>');
|
|
200
|
+
lines.push('');
|
|
201
|
+
}
|
|
202
|
+
// Add model info if present
|
|
203
|
+
if (metadata.model) {
|
|
204
|
+
lines.push(`**Model**: ${metadata.model}`);
|
|
205
|
+
lines.push('');
|
|
206
|
+
}
|
|
207
|
+
if (metadata.modelRole || metadata.modelTier) {
|
|
208
|
+
lines.push(`**Model Policy**: ${metadata.modelRole ?? 'coding'}/${metadata.modelTier ?? 'standard'}`);
|
|
209
|
+
lines.push('');
|
|
210
|
+
}
|
|
211
|
+
// Add the agent's system instructions
|
|
212
|
+
lines.push(content);
|
|
213
|
+
return lines.join('\n');
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get file extension for platform
|
|
217
|
+
*/
|
|
218
|
+
getFileExtension(platform) {
|
|
219
|
+
return getProviderDefinition(platform)?.smithPaths.fileExtension ?? '.md';
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get filename for agent
|
|
223
|
+
*/
|
|
224
|
+
getFileName(agent, platform) {
|
|
225
|
+
const ext = this.getFileExtension(platform);
|
|
226
|
+
return `${agent.metadata.name}${ext}`;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Package multiple agents
|
|
230
|
+
*/
|
|
231
|
+
async packageBatch(agents, platform) {
|
|
232
|
+
const packaged = [];
|
|
233
|
+
for (const agent of agents) {
|
|
234
|
+
packaged.push(await this.package(agent, platform));
|
|
235
|
+
}
|
|
236
|
+
return packaged;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Create combined AGENTS.md file (for platforms that support it)
|
|
240
|
+
*/
|
|
241
|
+
async createCombinedFile(agents, platform) {
|
|
242
|
+
const lines = [];
|
|
243
|
+
lines.push('# Available Agents');
|
|
244
|
+
lines.push('');
|
|
245
|
+
lines.push(`Platform: ${platform}`);
|
|
246
|
+
lines.push(`Total Agents: ${agents.length}`);
|
|
247
|
+
lines.push('');
|
|
248
|
+
// Table of contents
|
|
249
|
+
lines.push('## Table of Contents');
|
|
250
|
+
lines.push('');
|
|
251
|
+
for (const agent of agents) {
|
|
252
|
+
lines.push(`- [${agent.metadata.name}](#${agent.metadata.name.replace(/-/g, '')})`);
|
|
253
|
+
}
|
|
254
|
+
lines.push('');
|
|
255
|
+
// Individual agents
|
|
256
|
+
for (let i = 0; i < agents.length; i++) {
|
|
257
|
+
const agent = agents[i];
|
|
258
|
+
const packaged = await this.package(agent, platform);
|
|
259
|
+
if (i > 0) {
|
|
260
|
+
lines.push('');
|
|
261
|
+
lines.push('---');
|
|
262
|
+
lines.push('');
|
|
263
|
+
}
|
|
264
|
+
lines.push(`## ${agent.metadata.name}`);
|
|
265
|
+
lines.push('');
|
|
266
|
+
lines.push(packaged.content);
|
|
267
|
+
}
|
|
268
|
+
return lines.join('\n');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=agent-packager.js.map
|