@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,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommandSmith Usage Examples
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates how to generate and deploy platform-aware commands.
|
|
5
|
+
*/
|
|
6
|
+
import { generateCommand, deployCommand, generateAndDeploy, listCommands, validateCommand, } from './index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Example 1: Generate a simple utility command
|
|
9
|
+
*/
|
|
10
|
+
export async function generateSimpleUtility(projectPath) {
|
|
11
|
+
const command = await generateCommand({
|
|
12
|
+
name: 'backup-config',
|
|
13
|
+
description: 'Backup project configuration files',
|
|
14
|
+
template: 'utility',
|
|
15
|
+
platform: 'claude',
|
|
16
|
+
projectPath,
|
|
17
|
+
args: [
|
|
18
|
+
{
|
|
19
|
+
name: 'destination',
|
|
20
|
+
description: 'Backup location',
|
|
21
|
+
required: false,
|
|
22
|
+
default: './backups',
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
console.log('Generated command:');
|
|
27
|
+
console.log(` Name: ${command.name}`);
|
|
28
|
+
console.log(` Path: ${command.path}`);
|
|
29
|
+
console.log(` Template: ${command.template}`);
|
|
30
|
+
return command;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Example 2: Generate a transformation pipeline
|
|
34
|
+
*/
|
|
35
|
+
export async function generateTransformationPipeline(projectPath) {
|
|
36
|
+
const result = await generateAndDeploy({
|
|
37
|
+
name: 'convert-docs',
|
|
38
|
+
description: 'Convert documentation from Markdown to HTML',
|
|
39
|
+
template: 'transformation',
|
|
40
|
+
platform: 'claude',
|
|
41
|
+
projectPath,
|
|
42
|
+
args: [
|
|
43
|
+
{ name: 'input', description: 'Input directory', required: true },
|
|
44
|
+
{ name: 'output', description: 'Output directory', required: true },
|
|
45
|
+
],
|
|
46
|
+
options: [
|
|
47
|
+
{ name: 'theme', description: 'HTML theme', type: 'string', default: 'default' },
|
|
48
|
+
{ name: 'minify', description: 'Minify output', type: 'boolean', default: false },
|
|
49
|
+
],
|
|
50
|
+
}, { backup: true });
|
|
51
|
+
if (result.success) {
|
|
52
|
+
console.log(`✓ Deployed to ${result.command.path}`);
|
|
53
|
+
if (result.backed_up) {
|
|
54
|
+
console.log(' (existing file backed up)');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.error(`✗ Failed: ${result.error}`);
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Example 3: Generate an orchestration workflow
|
|
64
|
+
*/
|
|
65
|
+
export async function generateOrchestrationWorkflow(projectPath) {
|
|
66
|
+
const result = await generateAndDeploy({
|
|
67
|
+
name: 'flow-security-audit',
|
|
68
|
+
description: 'Execute comprehensive security audit workflow',
|
|
69
|
+
template: 'orchestration',
|
|
70
|
+
platform: 'claude',
|
|
71
|
+
projectPath,
|
|
72
|
+
args: [
|
|
73
|
+
{ name: 'scope', description: 'Audit scope', required: true },
|
|
74
|
+
],
|
|
75
|
+
options: [
|
|
76
|
+
{
|
|
77
|
+
name: 'severity',
|
|
78
|
+
description: 'Minimum severity level',
|
|
79
|
+
type: 'string',
|
|
80
|
+
default: 'medium',
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
guidance: 'Focus on OWASP Top 10 and supply chain security',
|
|
84
|
+
}, { force: false, backup: true });
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Example 4: Deploy to multiple platforms
|
|
89
|
+
*/
|
|
90
|
+
export async function deployMultiPlatform(projectPath) {
|
|
91
|
+
const platforms = ['claude', 'factory', 'cursor'];
|
|
92
|
+
const results = [];
|
|
93
|
+
for (const platform of platforms) {
|
|
94
|
+
const result = await generateAndDeploy({
|
|
95
|
+
name: 'lint-all',
|
|
96
|
+
description: 'Run all linters on the codebase',
|
|
97
|
+
template: 'utility',
|
|
98
|
+
platform,
|
|
99
|
+
projectPath,
|
|
100
|
+
args: [
|
|
101
|
+
{ name: 'fix', description: 'Auto-fix issues', required: false },
|
|
102
|
+
],
|
|
103
|
+
options: [
|
|
104
|
+
{ name: 'strict', description: 'Strict mode', type: 'boolean', default: false },
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
results.push({ platform, success: result.success, path: result.command.path });
|
|
108
|
+
}
|
|
109
|
+
console.log('\nMulti-platform deployment:');
|
|
110
|
+
results.forEach(({ platform, success, path }) => {
|
|
111
|
+
console.log(` ${success ? '✓' : '✗'} ${platform}: ${path}`);
|
|
112
|
+
});
|
|
113
|
+
return results;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Example 5: Validate before deploying
|
|
117
|
+
*/
|
|
118
|
+
export async function validateBeforeDeploy(projectPath) {
|
|
119
|
+
const command = await generateCommand({
|
|
120
|
+
name: 'invalid-command',
|
|
121
|
+
description: 'This will have validation issues',
|
|
122
|
+
template: 'utility',
|
|
123
|
+
platform: 'claude',
|
|
124
|
+
projectPath,
|
|
125
|
+
});
|
|
126
|
+
const validation = validateCommand(command);
|
|
127
|
+
if (!validation.valid) {
|
|
128
|
+
console.log('Validation errors:');
|
|
129
|
+
validation.issues
|
|
130
|
+
.filter(i => i.type === 'error')
|
|
131
|
+
.forEach(issue => {
|
|
132
|
+
console.log(` ✗ ${issue.field}: ${issue.message}`);
|
|
133
|
+
if (issue.suggestion) {
|
|
134
|
+
console.log(` Suggestion: ${issue.suggestion}`);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
const result = await deployCommand(command, { backup: true });
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Example 6: List existing commands
|
|
144
|
+
*/
|
|
145
|
+
export async function showExistingCommands(projectPath) {
|
|
146
|
+
const platforms = ['claude', 'factory', 'cursor'];
|
|
147
|
+
console.log('\nExisting commands by platform:');
|
|
148
|
+
for (const platform of platforms) {
|
|
149
|
+
const commands = await listCommands(platform, projectPath);
|
|
150
|
+
console.log(`\n${platform}:`);
|
|
151
|
+
if (commands.length === 0) {
|
|
152
|
+
console.log(' (no commands)');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
commands.forEach(cmd => console.log(` - ${cmd}`));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Example 7: Dry run (preview without deploying)
|
|
161
|
+
*/
|
|
162
|
+
export async function previewCommand(projectPath) {
|
|
163
|
+
const result = await generateAndDeploy({
|
|
164
|
+
name: 'preview-example',
|
|
165
|
+
description: 'This is a preview command',
|
|
166
|
+
template: 'utility',
|
|
167
|
+
platform: 'claude',
|
|
168
|
+
projectPath,
|
|
169
|
+
dryRun: true,
|
|
170
|
+
}, { backup: true });
|
|
171
|
+
console.log('Preview (dry run):');
|
|
172
|
+
console.log(` Would deploy to: ${result.command.path}`);
|
|
173
|
+
console.log(` Content preview:\n${result.command.content.slice(0, 200)}...`);
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Example 8: Generate Cursor-specific JSON command
|
|
178
|
+
*/
|
|
179
|
+
export async function generateCursorCommand(projectPath) {
|
|
180
|
+
const command = await generateCommand({
|
|
181
|
+
name: 'cursor-example',
|
|
182
|
+
description: 'Example command for Cursor',
|
|
183
|
+
template: 'utility',
|
|
184
|
+
platform: 'cursor',
|
|
185
|
+
projectPath,
|
|
186
|
+
args: [
|
|
187
|
+
{ name: 'input', description: 'Input file', required: true },
|
|
188
|
+
],
|
|
189
|
+
options: [
|
|
190
|
+
{ name: 'format', description: 'Output format', type: 'string', default: 'json' },
|
|
191
|
+
],
|
|
192
|
+
});
|
|
193
|
+
console.log('Cursor command (JSON format):');
|
|
194
|
+
console.log(JSON.parse(command.content));
|
|
195
|
+
return command;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Run all examples
|
|
199
|
+
*/
|
|
200
|
+
export async function runAllExamples() {
|
|
201
|
+
const projectPath = process.cwd();
|
|
202
|
+
console.log('=== CommandSmith Examples ===\n');
|
|
203
|
+
console.log('1. Simple utility command:');
|
|
204
|
+
await generateSimpleUtility(projectPath);
|
|
205
|
+
console.log('\n2. Transformation pipeline:');
|
|
206
|
+
await generateTransformationPipeline(projectPath);
|
|
207
|
+
console.log('\n3. Orchestration workflow:');
|
|
208
|
+
await generateOrchestrationWorkflow(projectPath);
|
|
209
|
+
console.log('\n4. Multi-platform deployment:');
|
|
210
|
+
await deployMultiPlatform(projectPath);
|
|
211
|
+
console.log('\n5. Validate before deploy:');
|
|
212
|
+
await validateBeforeDeploy(projectPath);
|
|
213
|
+
console.log('\n6. List existing commands:');
|
|
214
|
+
await showExistingCommands(projectPath);
|
|
215
|
+
console.log('\n7. Dry run preview:');
|
|
216
|
+
await previewCommand(projectPath);
|
|
217
|
+
console.log('\n8. Cursor JSON command:');
|
|
218
|
+
await generateCursorCommand(projectPath);
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=example.js.map
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command generation and deployment
|
|
3
|
+
*/
|
|
4
|
+
import { mkdir, writeFile, readFile, access } from 'fs/promises';
|
|
5
|
+
import { join, dirname } from 'path';
|
|
6
|
+
import { constants } from 'fs';
|
|
7
|
+
import { generateCommandContent } from './templates.js';
|
|
8
|
+
import { getCommandsDirectory, getFileExtension } from '../platform-paths.js';
|
|
9
|
+
/**
|
|
10
|
+
* Validate command name (kebab-case)
|
|
11
|
+
*/
|
|
12
|
+
function validateCommandName(name) {
|
|
13
|
+
if (!name || name.trim() === '') {
|
|
14
|
+
return 'Command name cannot be empty';
|
|
15
|
+
}
|
|
16
|
+
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
17
|
+
return 'Command name must be kebab-case (lowercase letters, numbers, hyphens only, must start with letter)';
|
|
18
|
+
}
|
|
19
|
+
if (name.startsWith('-') || name.endsWith('-')) {
|
|
20
|
+
return 'Command name cannot start or end with a hyphen';
|
|
21
|
+
}
|
|
22
|
+
if (name.includes('--')) {
|
|
23
|
+
return 'Command name cannot contain consecutive hyphens';
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate command options
|
|
29
|
+
*/
|
|
30
|
+
export function validateCommand(command) {
|
|
31
|
+
const issues = [];
|
|
32
|
+
// Validate name
|
|
33
|
+
const nameError = validateCommandName(command.name);
|
|
34
|
+
if (nameError) {
|
|
35
|
+
issues.push({
|
|
36
|
+
type: 'error',
|
|
37
|
+
field: 'name',
|
|
38
|
+
message: nameError,
|
|
39
|
+
suggestion: 'Use lowercase letters, numbers, and hyphens only (e.g., my-command)',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// Validate content
|
|
43
|
+
if (!command.content || command.content.trim() === '') {
|
|
44
|
+
issues.push({
|
|
45
|
+
type: 'error',
|
|
46
|
+
field: 'content',
|
|
47
|
+
message: 'Command content cannot be empty',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Validate platform
|
|
51
|
+
const validPlatforms = ['claude', 'codex', 'copilot', 'cursor', 'factory', 'generic', 'windsurf'];
|
|
52
|
+
if (!validPlatforms.includes(command.platform)) {
|
|
53
|
+
issues.push({
|
|
54
|
+
type: 'error',
|
|
55
|
+
field: 'platform',
|
|
56
|
+
message: `Invalid platform: ${command.platform}`,
|
|
57
|
+
suggestion: `Must be one of: ${validPlatforms.join(', ')}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Warn if content doesn't include standard options
|
|
61
|
+
if (!command.content.includes('--interactive') && !command.content.includes('--guidance')) {
|
|
62
|
+
issues.push({
|
|
63
|
+
type: 'warning',
|
|
64
|
+
field: 'content',
|
|
65
|
+
message: 'Command should support --interactive and --guidance options',
|
|
66
|
+
suggestion: 'Add these standard options to command arguments',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
valid: issues.filter(i => i.type === 'error').length === 0,
|
|
71
|
+
issues,
|
|
72
|
+
command,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Transform command content for Cursor platform (JSON format)
|
|
77
|
+
*/
|
|
78
|
+
function transformForCursor(name, description, options) {
|
|
79
|
+
const spec = {
|
|
80
|
+
name,
|
|
81
|
+
description,
|
|
82
|
+
arguments: (options.args || []).map(arg => ({
|
|
83
|
+
name: arg.name,
|
|
84
|
+
description: arg.description,
|
|
85
|
+
required: arg.required,
|
|
86
|
+
type: 'string',
|
|
87
|
+
default: arg.default,
|
|
88
|
+
})),
|
|
89
|
+
options: [
|
|
90
|
+
...(options.options || []).map(opt => ({
|
|
91
|
+
name: opt.name,
|
|
92
|
+
description: opt.description,
|
|
93
|
+
type: opt.type,
|
|
94
|
+
default: opt.default,
|
|
95
|
+
})),
|
|
96
|
+
{
|
|
97
|
+
name: 'interactive',
|
|
98
|
+
description: 'Enable interactive mode with guided questions',
|
|
99
|
+
type: 'boolean',
|
|
100
|
+
default: false,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'guidance',
|
|
104
|
+
description: 'Provide strategic guidance for execution',
|
|
105
|
+
type: 'string',
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
execution: {
|
|
109
|
+
steps: [
|
|
110
|
+
'Validate inputs',
|
|
111
|
+
'Process request',
|
|
112
|
+
'Generate output',
|
|
113
|
+
'Report status',
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
commandHint: {
|
|
117
|
+
modelRole: options.modelRole ?? 'efficiency',
|
|
118
|
+
modelTier: options.modelTier ?? 'economy',
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
return JSON.stringify(spec, null, 2);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Generate a command from options
|
|
125
|
+
*/
|
|
126
|
+
export async function generateCommand(options) {
|
|
127
|
+
// Validate command name
|
|
128
|
+
const nameError = validateCommandName(options.name);
|
|
129
|
+
if (nameError) {
|
|
130
|
+
throw new Error(nameError);
|
|
131
|
+
}
|
|
132
|
+
// Default template
|
|
133
|
+
const template = options.template || 'utility';
|
|
134
|
+
// Determine target directory
|
|
135
|
+
const targetDir = options.targetDir || getCommandsDirectory(options.platform, options.projectPath);
|
|
136
|
+
// Get file extension
|
|
137
|
+
const ext = getFileExtension(options.platform);
|
|
138
|
+
// Build file path
|
|
139
|
+
const filePath = join(targetDir, `${options.name}${ext}`);
|
|
140
|
+
const skillPath = join(options.projectPath, '.agents/skills', options.name, 'SKILL.md');
|
|
141
|
+
const modelRole = options.modelRole ?? (template === 'orchestration' ? 'coding' : 'efficiency');
|
|
142
|
+
const modelTier = options.modelTier ?? (template === 'orchestration' ? 'standard' : 'economy');
|
|
143
|
+
// Generate content based on platform
|
|
144
|
+
let content;
|
|
145
|
+
if (options.platform === 'cursor') {
|
|
146
|
+
// Cursor uses JSON format
|
|
147
|
+
content = transformForCursor(options.name, options.description, options);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Other platforms use markdown
|
|
151
|
+
content = generateCommandContent(template, options.name, options.description, options.args, options.options, options.guidance, modelRole, modelTier);
|
|
152
|
+
}
|
|
153
|
+
const skillContent = `---
|
|
154
|
+
name: ${options.name}
|
|
155
|
+
namespace: aiwg
|
|
156
|
+
description: ${options.description}
|
|
157
|
+
commandHint:
|
|
158
|
+
modelRole: ${modelRole}
|
|
159
|
+
modelTier: ${modelTier}
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
# ${options.name}
|
|
163
|
+
|
|
164
|
+
${options.description}
|
|
165
|
+
|
|
166
|
+
## Execution
|
|
167
|
+
|
|
168
|
+
Use the generated provider command artifact for slash-command UX, but treat this SKILL.md as the canonical source for model policy and deployment translation.
|
|
169
|
+
`;
|
|
170
|
+
return {
|
|
171
|
+
name: options.name,
|
|
172
|
+
path: filePath,
|
|
173
|
+
content,
|
|
174
|
+
skillContent,
|
|
175
|
+
skillPath,
|
|
176
|
+
platform: options.platform,
|
|
177
|
+
template,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if file exists
|
|
182
|
+
*/
|
|
183
|
+
async function fileExists(path) {
|
|
184
|
+
try {
|
|
185
|
+
await access(path, constants.F_OK);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Backup existing file
|
|
194
|
+
*/
|
|
195
|
+
async function backupFile(path) {
|
|
196
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
|
|
197
|
+
const backupPath = `${path}.backup-${timestamp}`;
|
|
198
|
+
const content = await readFile(path, 'utf-8');
|
|
199
|
+
await writeFile(backupPath, content, 'utf-8');
|
|
200
|
+
return backupPath;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Deploy a generated command to the filesystem
|
|
204
|
+
*/
|
|
205
|
+
export async function deployCommand(command, options = {}) {
|
|
206
|
+
try {
|
|
207
|
+
// Validate command first
|
|
208
|
+
const validation = validateCommand(command);
|
|
209
|
+
if (!validation.valid) {
|
|
210
|
+
const errors = validation.issues.filter(i => i.type === 'error').map(i => i.message);
|
|
211
|
+
return {
|
|
212
|
+
command,
|
|
213
|
+
success: false,
|
|
214
|
+
error: `Validation failed: ${errors.join('; ')}`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Check if file exists
|
|
218
|
+
const exists = await fileExists(command.path);
|
|
219
|
+
// Handle existing file
|
|
220
|
+
if (exists && !options.force) {
|
|
221
|
+
return {
|
|
222
|
+
command,
|
|
223
|
+
success: false,
|
|
224
|
+
error: `File already exists: ${command.path}. Use force option to overwrite.`,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// Backup if requested and file exists
|
|
228
|
+
let backed_up = false;
|
|
229
|
+
if (exists && options.backup) {
|
|
230
|
+
await backupFile(command.path);
|
|
231
|
+
backed_up = true;
|
|
232
|
+
}
|
|
233
|
+
// Ensure directory exists
|
|
234
|
+
const dir = dirname(command.path);
|
|
235
|
+
await mkdir(dir, { recursive: true });
|
|
236
|
+
await mkdir(dirname(command.skillPath), { recursive: true });
|
|
237
|
+
// Write command file
|
|
238
|
+
await writeFile(command.skillPath, command.skillContent, 'utf-8');
|
|
239
|
+
await writeFile(command.path, command.content, 'utf-8');
|
|
240
|
+
return {
|
|
241
|
+
command,
|
|
242
|
+
success: true,
|
|
243
|
+
backed_up,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return {
|
|
248
|
+
command,
|
|
249
|
+
success: false,
|
|
250
|
+
error: error instanceof Error ? error.message : String(error),
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Generate and deploy a command in one step
|
|
256
|
+
*/
|
|
257
|
+
export async function generateAndDeploy(options, deployOptions = {}) {
|
|
258
|
+
const command = await generateCommand(options);
|
|
259
|
+
// If dry run, don't deploy
|
|
260
|
+
if (options.dryRun) {
|
|
261
|
+
return {
|
|
262
|
+
command,
|
|
263
|
+
success: true,
|
|
264
|
+
error: undefined,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return deployCommand(command, deployOptions);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* List existing commands in a project
|
|
271
|
+
*/
|
|
272
|
+
export async function listCommands(platform, projectPath) {
|
|
273
|
+
const commandsDir = getCommandsDirectory(platform, projectPath);
|
|
274
|
+
const ext = getFileExtension(platform);
|
|
275
|
+
try {
|
|
276
|
+
const { readdir } = await import('fs/promises');
|
|
277
|
+
const files = await readdir(commandsDir);
|
|
278
|
+
return files
|
|
279
|
+
.filter(f => f.endsWith(ext))
|
|
280
|
+
.map(f => f.replace(ext, ''))
|
|
281
|
+
.sort();
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// Directory doesn't exist or is empty
|
|
285
|
+
return [];
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommandSmith - Platform-Aware Slash Command Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates slash commands with templates and multi-platform support.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { generateCommand, deployCommand } from './commandsmith/index.js';
|
|
9
|
+
*
|
|
10
|
+
* // Generate a command
|
|
11
|
+
* const command = await generateCommand({
|
|
12
|
+
* name: 'my-workflow',
|
|
13
|
+
* description: 'Execute my custom workflow',
|
|
14
|
+
* template: 'orchestration',
|
|
15
|
+
* platform: 'claude',
|
|
16
|
+
* projectPath: '/path/to/project',
|
|
17
|
+
* args: [
|
|
18
|
+
* { name: 'target', description: 'Target environment', required: true },
|
|
19
|
+
* ],
|
|
20
|
+
* options: [
|
|
21
|
+
* { name: 'dry-run', description: 'Preview changes', type: 'boolean' },
|
|
22
|
+
* ],
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Deploy the command
|
|
26
|
+
* const result = await deployCommand(command, { backup: true });
|
|
27
|
+
* if (result.success) {
|
|
28
|
+
* console.log(`Command deployed to ${result.command.path}`);
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @module commandsmith
|
|
33
|
+
*/
|
|
34
|
+
// Export template functions
|
|
35
|
+
export { generateFrontmatter, generateArgumentsSection, generateOptionsSection, generateUtilityTemplate, generateTransformationTemplate, generateOrchestrationTemplate, generateCommandContent, } from './templates.js';
|
|
36
|
+
// Export generator functions
|
|
37
|
+
export { validateCommand, generateCommand, deployCommand, generateAndDeploy, listCommands, } from './generator.js';
|
|
38
|
+
// Note: Platform type is exported from agentsmith to avoid conflicts with toolsmith
|
|
39
|
+
// Export platform utilities (re-export from shared location)
|
|
40
|
+
export { getCommandsDirectory, getAgentsDirectory, getSkillsDirectory, getFileExtension, getRulesDirectory, usesAggregatedFiles, getConfigFileName, getPlatformDirectories, } from '../platform-paths.js';
|
|
41
|
+
//# sourceMappingURL=index.js.map
|