@dewtech/dare-cli 2.16.0 → 3.0.0
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 +196 -3
- package/dist/__tests__/confidence.test.d.ts +2 -0
- package/dist/__tests__/confidence.test.d.ts.map +1 -0
- package/dist/__tests__/confidence.test.js +73 -0
- package/dist/__tests__/confidence.test.js.map +1 -0
- package/dist/__tests__/datamodel.test.d.ts +2 -0
- package/dist/__tests__/datamodel.test.d.ts.map +1 -0
- package/dist/__tests__/datamodel.test.js +131 -0
- package/dist/__tests__/datamodel.test.js.map +1 -0
- package/dist/__tests__/dna-detector.test.d.ts +2 -0
- package/dist/__tests__/dna-detector.test.d.ts.map +1 -0
- package/dist/__tests__/dna-detector.test.js +97 -0
- package/dist/__tests__/dna-detector.test.js.map +1 -0
- package/dist/__tests__/dna-facts.test.d.ts +2 -0
- package/dist/__tests__/dna-facts.test.d.ts.map +1 -0
- package/dist/__tests__/dna-facts.test.js +44 -0
- package/dist/__tests__/dna-facts.test.js.map +1 -0
- package/dist/__tests__/graph-renderer.test.d.ts +2 -0
- package/dist/__tests__/graph-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/graph-renderer.test.js +85 -0
- package/dist/__tests__/graph-renderer.test.js.map +1 -0
- package/dist/__tests__/migration.test.d.ts +2 -0
- package/dist/__tests__/migration.test.d.ts.map +1 -0
- package/dist/__tests__/migration.test.js +77 -0
- package/dist/__tests__/migration.test.js.map +1 -0
- package/dist/__tests__/module-detector.test.d.ts +2 -0
- package/dist/__tests__/module-detector.test.d.ts.map +1 -0
- package/dist/__tests__/module-detector.test.js +83 -0
- package/dist/__tests__/module-detector.test.js.map +1 -0
- package/dist/__tests__/refine.test.d.ts +2 -0
- package/dist/__tests__/refine.test.d.ts.map +1 -0
- package/dist/__tests__/refine.test.js +186 -0
- package/dist/__tests__/refine.test.js.map +1 -0
- package/dist/__tests__/reverse-facts.test.d.ts +2 -0
- package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-facts.test.js +78 -0
- package/dist/__tests__/reverse-facts.test.js.map +1 -0
- package/dist/__tests__/review.test.d.ts +2 -0
- package/dist/__tests__/review.test.d.ts.map +1 -0
- package/dist/__tests__/review.test.js +242 -0
- package/dist/__tests__/review.test.js.map +1 -0
- package/dist/__tests__/update.test.d.ts +2 -0
- package/dist/__tests__/update.test.d.ts.map +1 -0
- package/dist/__tests__/update.test.js +150 -0
- package/dist/__tests__/update.test.js.map +1 -0
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +38 -3
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/blueprint.js +122 -122
- package/dist/commands/dag.d.ts.map +1 -1
- package/dist/commands/dag.js +43 -79
- package/dist/commands/dag.js.map +1 -1
- package/dist/commands/dna.d.ts +3 -0
- package/dist/commands/dna.d.ts.map +1 -0
- package/dist/commands/dna.js +69 -0
- package/dist/commands/dna.js.map +1 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +76 -0
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +101 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/new.d.ts +16 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +103 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/refine.d.ts +16 -0
- package/dist/commands/refine.d.ts.map +1 -0
- package/dist/commands/refine.js +167 -0
- package/dist/commands/refine.js.map +1 -0
- package/dist/commands/reverse.d.ts +3 -0
- package/dist/commands/reverse.d.ts.map +1 -0
- package/dist/commands/reverse.js +201 -0
- package/dist/commands/reverse.js.map +1 -0
- package/dist/commands/review.d.ts +16 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +106 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +149 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/welcome.d.ts +14 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +29 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/skills/commands/add.d.ts +23 -0
- package/dist/skills/commands/add.d.ts.map +1 -0
- package/dist/skills/commands/add.js +206 -0
- package/dist/skills/commands/add.js.map +1 -0
- package/dist/skills/commands/info.d.ts +14 -0
- package/dist/skills/commands/info.d.ts.map +1 -0
- package/dist/skills/commands/info.js +99 -0
- package/dist/skills/commands/info.js.map +1 -0
- package/dist/skills/commands/list.d.ts +19 -0
- package/dist/skills/commands/list.d.ts.map +1 -0
- package/dist/skills/commands/list.js +163 -0
- package/dist/skills/commands/list.js.map +1 -0
- package/dist/skills/commands/publish.d.ts +56 -0
- package/dist/skills/commands/publish.d.ts.map +1 -0
- package/dist/skills/commands/publish.js +272 -0
- package/dist/skills/commands/publish.js.map +1 -0
- package/dist/skills/commands/remove.d.ts +19 -0
- package/dist/skills/commands/remove.d.ts.map +1 -0
- package/dist/skills/commands/remove.js +96 -0
- package/dist/skills/commands/remove.js.map +1 -0
- package/dist/skills/commands/update.d.ts +31 -0
- package/dist/skills/commands/update.d.ts.map +1 -0
- package/dist/skills/commands/update.js +132 -0
- package/dist/skills/commands/update.js.map +1 -0
- package/dist/skills/index.d.ts +22 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +33 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/manifest.d.ts +54 -0
- package/dist/skills/manifest.d.ts.map +1 -0
- package/dist/skills/manifest.js +162 -0
- package/dist/skills/manifest.js.map +1 -0
- package/dist/skills/registry-local.d.ts +67 -0
- package/dist/skills/registry-local.d.ts.map +1 -0
- package/dist/skills/registry-local.js +130 -0
- package/dist/skills/registry-local.js.map +1 -0
- package/dist/skills/registry-mock.json +109 -0
- package/dist/skills/registry-remote.d.ts +110 -0
- package/dist/skills/registry-remote.d.ts.map +1 -0
- package/dist/skills/registry-remote.js +246 -0
- package/dist/skills/registry-remote.js.map +1 -0
- package/dist/skills/registry.d.ts +49 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +94 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/tests/manifest.spec.d.ts +8 -0
- package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
- package/dist/skills/tests/manifest.spec.js +176 -0
- package/dist/skills/tests/manifest.spec.js.map +1 -0
- package/dist/skills/tests/publish.spec.d.ts +12 -0
- package/dist/skills/tests/publish.spec.d.ts.map +1 -0
- package/dist/skills/tests/publish.spec.js +276 -0
- package/dist/skills/tests/publish.spec.js.map +1 -0
- package/dist/skills/tests/registry-local.spec.d.ts +8 -0
- package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
- package/dist/skills/tests/registry-local.spec.js +231 -0
- package/dist/skills/tests/registry-local.spec.js.map +1 -0
- package/dist/skills/tests/registry.spec.d.ts +7 -0
- package/dist/skills/tests/registry.spec.d.ts.map +1 -0
- package/dist/skills/tests/registry.spec.js +58 -0
- package/dist/skills/tests/registry.spec.js.map +1 -0
- package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
- package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
- package/dist/skills/tests/remote-registry.spec.js +357 -0
- package/dist/skills/tests/remote-registry.spec.js.map +1 -0
- package/dist/skills/tests/update.spec.d.ts +9 -0
- package/dist/skills/tests/update.spec.d.ts.map +1 -0
- package/dist/skills/tests/update.spec.js +166 -0
- package/dist/skills/tests/update.spec.js.map +1 -0
- package/dist/types/Refine.types.d.ts +96 -0
- package/dist/types/Refine.types.d.ts.map +1 -0
- package/dist/types/Refine.types.js +19 -0
- package/dist/types/Refine.types.js.map +1 -0
- package/dist/types/Review.types.d.ts +86 -0
- package/dist/types/Review.types.d.ts.map +1 -0
- package/dist/types/Review.types.js +15 -0
- package/dist/types/Review.types.js.map +1 -0
- package/dist/types/UpdateManifest.types.d.ts +91 -0
- package/dist/types/UpdateManifest.types.d.ts.map +1 -0
- package/dist/types/UpdateManifest.types.js +13 -0
- package/dist/types/UpdateManifest.types.js.map +1 -0
- package/dist/utils/ReviewRunner.d.ts +42 -0
- package/dist/utils/ReviewRunner.d.ts.map +1 -0
- package/dist/utils/ReviewRunner.js +175 -0
- package/dist/utils/ReviewRunner.js.map +1 -0
- package/dist/utils/UpdateApplier.d.ts +42 -0
- package/dist/utils/UpdateApplier.d.ts.map +1 -0
- package/dist/utils/UpdateApplier.js +207 -0
- package/dist/utils/UpdateApplier.js.map +1 -0
- package/dist/utils/UpdateDetector.d.ts +56 -0
- package/dist/utils/UpdateDetector.d.ts.map +1 -0
- package/dist/utils/UpdateDetector.js +164 -0
- package/dist/utils/UpdateDetector.js.map +1 -0
- package/dist/utils/banner.d.ts +28 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +77 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/banner.spec.d.ts +5 -0
- package/dist/utils/banner.spec.d.ts.map +1 -0
- package/dist/utils/banner.spec.js +253 -0
- package/dist/utils/banner.spec.js.map +1 -0
- package/dist/utils/complexity-analyzer.d.ts +60 -0
- package/dist/utils/complexity-analyzer.d.ts.map +1 -0
- package/dist/utils/complexity-analyzer.js +292 -0
- package/dist/utils/complexity-analyzer.js.map +1 -0
- package/dist/utils/confidence.d.ts +41 -0
- package/dist/utils/confidence.d.ts.map +1 -0
- package/dist/utils/confidence.js +101 -0
- package/dist/utils/confidence.js.map +1 -0
- package/dist/utils/datamodel.d.ts +41 -0
- package/dist/utils/datamodel.d.ts.map +1 -0
- package/dist/utils/datamodel.js +535 -0
- package/dist/utils/datamodel.js.map +1 -0
- package/dist/utils/dna-detector.d.ts +61 -0
- package/dist/utils/dna-detector.d.ts.map +1 -0
- package/dist/utils/dna-detector.js +354 -0
- package/dist/utils/dna-detector.js.map +1 -0
- package/dist/utils/dna-facts.d.ts +13 -0
- package/dist/utils/dna-facts.d.ts.map +1 -0
- package/dist/utils/dna-facts.js +109 -0
- package/dist/utils/dna-facts.js.map +1 -0
- package/dist/utils/excalidraw-renderer.d.ts +11 -71
- package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
- package/dist/utils/excalidraw-renderer.js +29 -162
- package/dist/utils/excalidraw-renderer.js.map +1 -1
- package/dist/utils/graph-renderer.d.ts +115 -0
- package/dist/utils/graph-renderer.d.ts.map +1 -0
- package/dist/utils/graph-renderer.js +216 -0
- package/dist/utils/graph-renderer.js.map +1 -0
- package/dist/utils/migration.d.ts +64 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +183 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/module-detector.d.ts +46 -0
- package/dist/utils/module-detector.d.ts.map +1 -0
- package/dist/utils/module-detector.js +348 -0
- package/dist/utils/module-detector.js.map +1 -0
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +273 -254
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/reverse-facts.d.ts +50 -0
- package/dist/utils/reverse-facts.d.ts.map +1 -0
- package/dist/utils/reverse-facts.js +291 -0
- package/dist/utils/reverse-facts.js.map +1 -0
- package/dist/utils/stack-bootstrap.js +371 -371
- package/dist/utils/static-analyzer.d.ts +29 -0
- package/dist/utils/static-analyzer.d.ts.map +1 -0
- package/dist/utils/static-analyzer.js +390 -0
- package/dist/utils/static-analyzer.js.map +1 -0
- package/dist/utils/version-compare.d.ts +27 -0
- package/dist/utils/version-compare.d.ts.map +1 -0
- package/dist/utils/version-compare.js +47 -0
- package/dist/utils/version-compare.js.map +1 -0
- package/package.json +8 -3
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +48 -0
- package/templates/backend/node-nestjs/.env.example +9 -9
- package/templates/backend/node-nestjs/nest-cli.json +8 -8
- package/templates/backend/node-nestjs/package.json +50 -50
- package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
- package/templates/backend/node-nestjs/src/app.module.ts +15 -15
- package/templates/backend/node-nestjs/src/app.service.ts +8 -8
- package/templates/backend/node-nestjs/src/main.ts +24 -24
- package/templates/backend/node-nestjs/tsconfig.json +21 -21
- package/templates/backend/php-laravel/.env.example +22 -22
- package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
- package/templates/backend/php-laravel/composer.json +40 -40
- package/templates/backend/python-fastapi/.env.example +4 -4
- package/templates/backend/python-fastapi/app/api/router.py +8 -8
- package/templates/backend/python-fastapi/app/core/config.py +20 -20
- package/templates/backend/python-fastapi/main.py +35 -35
- package/templates/backend/python-fastapi/requirements.txt +13 -13
- package/templates/backend/rust-axum/.env.example +3 -3
- package/templates/backend/rust-axum/Cargo.toml +23 -23
- package/templates/backend/rust-axum/src/errors.rs +30 -30
- package/templates/backend/rust-axum/src/main.rs +32 -32
- package/templates/backend/rust-axum/src/routes.rs +6 -6
- package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
- package/templates/frontend/leptos-csr/Cargo.toml +16 -16
- package/templates/frontend/leptos-csr/Trunk.toml +10 -10
- package/templates/frontend/leptos-csr/index.html +11 -11
- package/templates/frontend/leptos-csr/src/lib.rs +20 -20
- package/templates/frontend/leptos-csr/style/main.scss +19 -19
- package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
- package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
- package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
- package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
- package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
- package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
- package/templates/frontend/react/index.html +12 -12
- package/templates/frontend/react/package.json +35 -35
- package/templates/frontend/react/src/App.tsx +25 -25
- package/templates/frontend/react/src/main.tsx +9 -9
- package/templates/frontend/vue/package.json +32 -32
- package/templates/frontend/vue/src/App.vue +7 -7
- package/templates/frontend/vue/src/main.ts +10 -10
- package/templates/frontend/vue/src/router/index.ts +14 -14
- package/templates/frontend/vue/src/views/HomeView.vue +6 -6
- package/templates/hooks/pre-commit-dare-validate +24 -24
- package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -0
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +180 -36
- package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
- package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
- package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
- package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
- package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
- package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
- package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
- package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
- package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
- package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -0
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -0
- package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
- package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
- package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -224
- package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
- package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
- package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
- package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
- package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
- package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -100
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -78
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -110
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
- package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
- package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
- package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
- package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
- package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
- package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
- package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
- package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
- package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
- package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
- package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
- package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
- package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
- package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -0
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -0
- package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
- package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
- package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
- package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
- package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
- package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
- package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
- package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
- package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
- package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
- package/templates/ide/claude/.claude/settings.example.json +35 -35
- package/templates/ide/claude/CLAUDE.md +146 -146
- package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/claude/templates/DESIGN-template.md +129 -129
- package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -100
- package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -41
- package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -142
- package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -0
- package/templates/ide/cursor/.cursor/commands/review-task.md +91 -0
- package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
- package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
- package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
- package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
- package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
- package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
- package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
- package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
- package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
- package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
- package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
- package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
- package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
- package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
- package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
- package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
- package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -100
- package/templates/shared/docker-compose.yml +41 -41
- package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
- package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
- package/dist/__tests__/dag-runner/adapters.test.js +0 -134
- package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
- package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
- package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
- package/dist/dag-runner/adapters/antigravity.js +0 -54
- package/dist/dag-runner/adapters/antigravity.js.map +0 -1
- package/dist/dag-runner/adapters/claude.d.ts +0 -6
- package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
- package/dist/dag-runner/adapters/claude.js +0 -48
- package/dist/dag-runner/adapters/claude.js.map +0 -1
- package/dist/dag-runner/adapters/cursor.d.ts +0 -6
- package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
- package/dist/dag-runner/adapters/cursor.js +0 -58
- package/dist/dag-runner/adapters/cursor.js.map +0 -1
- package/dist/dag-runner/adapters/index.d.ts +0 -46
- package/dist/dag-runner/adapters/index.d.ts.map +0 -1
- package/dist/dag-runner/adapters/index.js +0 -55
- package/dist/dag-runner/adapters/index.js.map +0 -1
- package/dist/dag-runner/utils/timeout.d.ts +0 -27
- package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
- package/dist/dag-runner/utils/timeout.js +0 -55
- package/dist/dag-runner/utils/timeout.js.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalRegistry — persistent skill registry stored in `~/.dare/registry/`.
|
|
3
|
+
*
|
|
4
|
+
* Directory layout:
|
|
5
|
+
*
|
|
6
|
+
* ```
|
|
7
|
+
* ~/.dare/registry/
|
|
8
|
+
* ├── index.json # { skills: [{ name, version, description, ... }] }
|
|
9
|
+
* ├── dare-ax/
|
|
10
|
+
* │ └── 1.0.0/
|
|
11
|
+
* │ ├── skill.yml
|
|
12
|
+
* │ └── index.ts
|
|
13
|
+
* └── dare-layered-design/
|
|
14
|
+
* └── 1.0.0/
|
|
15
|
+
* └── ...
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* This acts as a local publish target that `dare skill publish` writes to, and
|
|
19
|
+
* `dare skill add` falls back to when the remote mock registry has no match.
|
|
20
|
+
*
|
|
21
|
+
* @module skills/registry-local
|
|
22
|
+
*/
|
|
23
|
+
import fs from 'fs-extra';
|
|
24
|
+
import path from 'path';
|
|
25
|
+
import os from 'os';
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Constants
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/** Default path for the local registry root. Tests can override via env var. */
|
|
30
|
+
function getRegistryRoot() {
|
|
31
|
+
return process.env['DARE_LOCAL_REGISTRY'] ?? path.join(os.homedir(), '.dare', 'registry');
|
|
32
|
+
}
|
|
33
|
+
const INDEX_FILE = 'index.json';
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// LocalRegistry
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
export class LocalRegistry {
|
|
38
|
+
constructor(root) {
|
|
39
|
+
this._root = root ?? getRegistryRoot();
|
|
40
|
+
}
|
|
41
|
+
// ---- Read -----------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* Returns all skills in the local registry index.
|
|
44
|
+
*/
|
|
45
|
+
list() {
|
|
46
|
+
return this._readIndex().skills;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Finds a skill by name (and optionally an exact version).
|
|
50
|
+
* Returns `null` when not found.
|
|
51
|
+
*/
|
|
52
|
+
find(name, version) {
|
|
53
|
+
const skills = this._readIndex().skills;
|
|
54
|
+
const matches = skills.filter((s) => s.name === name);
|
|
55
|
+
if (matches.length === 0)
|
|
56
|
+
return null;
|
|
57
|
+
if (version) {
|
|
58
|
+
return matches.find((s) => s.version === version) ?? null;
|
|
59
|
+
}
|
|
60
|
+
// Return the latest by published_at, or just the last entry.
|
|
61
|
+
return matches.sort((a, b) => (b.published_at ?? '').localeCompare(a.published_at ?? ''))[0] ?? null;
|
|
62
|
+
}
|
|
63
|
+
// ---- Write ----------------------------------------------------------------
|
|
64
|
+
/**
|
|
65
|
+
* Publishes a skill from `skillPath` into the local registry.
|
|
66
|
+
*
|
|
67
|
+
* Copies all files (excluding node_modules/, dist/, .git/) from `skillPath`
|
|
68
|
+
* into `~/.dare/registry/<name>/<version>/` and updates `index.json`.
|
|
69
|
+
*/
|
|
70
|
+
publish(skillPath, meta) {
|
|
71
|
+
const destDir = path.join(this._root, meta.name, meta.version);
|
|
72
|
+
fs.ensureDirSync(destDir);
|
|
73
|
+
// Copy files (excluding node_modules, dist, .git).
|
|
74
|
+
const entries = fs.readdirSync(skillPath, { withFileTypes: true });
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
if (['node_modules', 'dist', '.git'].includes(entry.name))
|
|
77
|
+
continue;
|
|
78
|
+
const src = path.join(skillPath, entry.name);
|
|
79
|
+
const dst = path.join(destDir, entry.name);
|
|
80
|
+
fs.copySync(src, dst);
|
|
81
|
+
}
|
|
82
|
+
// Update index.
|
|
83
|
+
const index = this._readIndex();
|
|
84
|
+
const existing = index.skills.findIndex((s) => s.name === meta.name && s.version === meta.version);
|
|
85
|
+
if (existing >= 0) {
|
|
86
|
+
index.skills[existing] = meta;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
index.skills.push(meta);
|
|
90
|
+
}
|
|
91
|
+
this._writeIndex(index);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Installs a skill from the local registry into a project.
|
|
95
|
+
*
|
|
96
|
+
* Copies files from `~/.dare/registry/<name>/<version>/` into
|
|
97
|
+
* `<targetProjectPath>/packages/skills/<name>/`.
|
|
98
|
+
*/
|
|
99
|
+
install(name, version, targetProjectPath) {
|
|
100
|
+
const srcDir = path.join(this._root, name, version);
|
|
101
|
+
if (!fs.pathExistsSync(srcDir)) {
|
|
102
|
+
throw new Error(`Local registry does not have "${name}@${version}". ` +
|
|
103
|
+
`Run \`dare skill publish\` first.`);
|
|
104
|
+
}
|
|
105
|
+
const destDir = path.join(targetProjectPath, 'packages', 'skills', name);
|
|
106
|
+
fs.ensureDirSync(destDir);
|
|
107
|
+
fs.copySync(srcDir, destDir);
|
|
108
|
+
}
|
|
109
|
+
// ---- Private --------------------------------------------------------------
|
|
110
|
+
_indexPath() {
|
|
111
|
+
return path.join(this._root, INDEX_FILE);
|
|
112
|
+
}
|
|
113
|
+
_readIndex() {
|
|
114
|
+
const p = this._indexPath();
|
|
115
|
+
if (!fs.pathExistsSync(p)) {
|
|
116
|
+
return { skills: [] };
|
|
117
|
+
}
|
|
118
|
+
const raw = fs.readFileSync(p, 'utf-8');
|
|
119
|
+
const parsed = JSON.parse(raw);
|
|
120
|
+
if (typeof parsed !== 'object' || parsed === null || !Array.isArray(parsed['skills'])) {
|
|
121
|
+
return { skills: [] };
|
|
122
|
+
}
|
|
123
|
+
return parsed;
|
|
124
|
+
}
|
|
125
|
+
_writeIndex(index) {
|
|
126
|
+
fs.ensureDirSync(this._root);
|
|
127
|
+
fs.writeFileSync(this._indexPath(), JSON.stringify(index, null, 2) + '\n', 'utf-8');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=registry-local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-local.js","sourceRoot":"","sources":["../../src/skills/registry-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAyBpB,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,iFAAiF;AACjF,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,OAAO,aAAa;IAGxB,YAAY,IAAa;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;IACzC,CAAC;IAED,8EAA8E;IAE9E;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAAY,EAAE,OAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAEtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;QAC5D,CAAC;QAED,6DAA6D;QAC7D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAC3D,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACf,CAAC;IAED,8EAA8E;IAE9E;;;;;OAKG;IACH,OAAO,CAAC,SAAiB,EAAE,IAAwB;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE1B,mDAAmD;QACnD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAC1D,CAAC;QACF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,IAAY,EAAE,OAAe,EAAE,iBAAyB;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,IAAI,OAAO,KAAK;gBACnD,mCAAmC,CACtC,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1B,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,8EAA8E;IAEtE,UAAU;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEO,UAAU;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,MAAkC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACnH,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,MAA4B,CAAC;IACtC,CAAC;IAEO,WAAW,CAAC,KAAyB;QAC3C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skills": [
|
|
3
|
+
{
|
|
4
|
+
"name": "dare-ax",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"description": "Agent Experience patterns for DARE projects",
|
|
7
|
+
"author": "Wanderson",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
10
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
11
|
+
"keywords": ["ax", "agent-experience", "discovery"],
|
|
12
|
+
"dependencies": {},
|
|
13
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
14
|
+
"size_kb": 48
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "dare-layered-design",
|
|
18
|
+
"version": "1.0.0",
|
|
19
|
+
"description": "Layered architecture patterns (domain / application / infra)",
|
|
20
|
+
"author": "Wanderson",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
23
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
24
|
+
"keywords": ["layered", "architecture", "ddd"],
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"dare-ax": ">=1.0.0"
|
|
27
|
+
},
|
|
28
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
29
|
+
"size_kb": 72
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "dare-llm-integration",
|
|
33
|
+
"version": "1.0.0",
|
|
34
|
+
"description": "LLM integration patterns (prompts, chains, tools)",
|
|
35
|
+
"author": "Wanderson",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
38
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
39
|
+
"keywords": ["llm", "ai", "prompts", "chains"],
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"dare-ax": ">=1.0.0"
|
|
42
|
+
},
|
|
43
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
44
|
+
"size_kb": 96
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "dare-frontend-design",
|
|
48
|
+
"version": "1.0.0",
|
|
49
|
+
"description": "Frontend architecture patterns (components, state, routing)",
|
|
50
|
+
"author": "Wanderson",
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
53
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
54
|
+
"keywords": ["frontend", "components", "state", "routing"],
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"dare-ax": ">=1.0.0"
|
|
57
|
+
},
|
|
58
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
59
|
+
"size_kb": 84
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "dare-realtime",
|
|
63
|
+
"version": "1.0.0",
|
|
64
|
+
"description": "Real-time patterns (WebSocket / SSE / CRDT)",
|
|
65
|
+
"author": "Wanderson",
|
|
66
|
+
"license": "MIT",
|
|
67
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
68
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
69
|
+
"keywords": ["realtime", "websocket", "sse", "crdt"],
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"dare-ax": ">=1.0.0"
|
|
72
|
+
},
|
|
73
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
74
|
+
"size_kb": 112
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "dare-quality-telemetry",
|
|
78
|
+
"version": "1.0.0",
|
|
79
|
+
"description": "Quality metrics collection (M-01 to M-04 tracking)",
|
|
80
|
+
"author": "Wanderson",
|
|
81
|
+
"license": "MIT",
|
|
82
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
83
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
84
|
+
"keywords": ["quality", "telemetry", "metrics", "observability"],
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"dare-ax": ">=1.0.0"
|
|
87
|
+
},
|
|
88
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
89
|
+
"size_kb": 64
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "ruby-rails-8",
|
|
93
|
+
"version": "1.0.0",
|
|
94
|
+
"description": "Rails 8 full-stack with all DARE patterns pre-configured",
|
|
95
|
+
"author": "Wanderson",
|
|
96
|
+
"license": "MIT",
|
|
97
|
+
"homepage": "https://github.com/dewtech-technologies/dare-method",
|
|
98
|
+
"repository": "https://github.com/dewtech-technologies/dare-method",
|
|
99
|
+
"keywords": ["rails", "ruby", "fullstack", "hotwire"],
|
|
100
|
+
"dependencies": {
|
|
101
|
+
"dare-ax": ">=1.0.0",
|
|
102
|
+
"dare-layered-design": ">=1.0.0",
|
|
103
|
+
"dare-realtime": ">=1.0.0"
|
|
104
|
+
},
|
|
105
|
+
"published_at": "2026-05-26T00:00:00Z",
|
|
106
|
+
"size_kb": 240
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote registry client and resolver for the DARE skill registry.
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - `RemoteRegistry` — HTTP client for the Vercel Functions backend
|
|
6
|
+
* - `RegistryResolver` — combina remote + local + mock em ordem de prioridade
|
|
7
|
+
*
|
|
8
|
+
* Priority: Remote (if online) → Local (~/.dare/registry/) → Mock (offline)
|
|
9
|
+
*
|
|
10
|
+
* @module skills/registry-remote
|
|
11
|
+
*/
|
|
12
|
+
import { type RegistrySkill } from './registry.js';
|
|
13
|
+
import { LocalRegistry } from './registry-local.js';
|
|
14
|
+
export interface RemoteSkill {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
description: string;
|
|
18
|
+
author: string;
|
|
19
|
+
license: string;
|
|
20
|
+
dare_version: string;
|
|
21
|
+
dependencies: Record<string, string>;
|
|
22
|
+
keywords: string[];
|
|
23
|
+
homepage?: string;
|
|
24
|
+
publishedAt: string;
|
|
25
|
+
}
|
|
26
|
+
export type SkillSource = 'remote' | 'local' | 'mock';
|
|
27
|
+
export interface ResolvedSkill extends RegistrySkill {
|
|
28
|
+
source: SkillSource;
|
|
29
|
+
}
|
|
30
|
+
export interface PublishPayload {
|
|
31
|
+
version: string;
|
|
32
|
+
description: string;
|
|
33
|
+
author: string;
|
|
34
|
+
license: string;
|
|
35
|
+
dare_version: string;
|
|
36
|
+
dependencies: Record<string, string>;
|
|
37
|
+
keywords: string[];
|
|
38
|
+
homepage?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* HTTP client for the DARE registry backend (Vercel Functions).
|
|
42
|
+
*
|
|
43
|
+
* All network calls use `AbortController` with a configurable timeout.
|
|
44
|
+
*/
|
|
45
|
+
export declare class RemoteRegistry {
|
|
46
|
+
private readonly _baseUrl;
|
|
47
|
+
private readonly _timeoutMs;
|
|
48
|
+
constructor(baseUrl?: string, timeoutMs?: number);
|
|
49
|
+
/**
|
|
50
|
+
* Lists all skills from the remote registry.
|
|
51
|
+
* Returns an empty array on network failure.
|
|
52
|
+
*
|
|
53
|
+
* @throws Never — failures are returned as empty array.
|
|
54
|
+
*/
|
|
55
|
+
list(options?: {
|
|
56
|
+
keyword?: string;
|
|
57
|
+
author?: string;
|
|
58
|
+
}): Promise<RemoteSkill[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Fetches details for a single skill by name.
|
|
61
|
+
* Returns `null` when not found (404) or on network failure.
|
|
62
|
+
*/
|
|
63
|
+
find(name: string): Promise<RemoteSkill | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Publishes a skill to the remote registry.
|
|
66
|
+
*
|
|
67
|
+
* @param skillName - The skill name (used in the URL path)
|
|
68
|
+
* @param payload - Skill metadata
|
|
69
|
+
* @param token - Bearer token for authentication
|
|
70
|
+
* @throws Error if the request fails or returns a non-2xx status.
|
|
71
|
+
*/
|
|
72
|
+
publish(skillName: string, payload: PublishPayload, token: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Checks connectivity to the registry by fetching the skills list.
|
|
75
|
+
* Returns `true` if the registry responds with a 2xx status.
|
|
76
|
+
*/
|
|
77
|
+
isOnline(): Promise<boolean>;
|
|
78
|
+
private _fetch;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Combines remote, local, and mock registries with priority fallback.
|
|
82
|
+
*
|
|
83
|
+
* Priority order:
|
|
84
|
+
* 1. Remote (if available and online — timeout = 3s)
|
|
85
|
+
* 2. Local (`~/.dare/registry/`)
|
|
86
|
+
* 3. Mock (bundled JSON fallback)
|
|
87
|
+
*
|
|
88
|
+
* Skills from higher-priority sources overwrite those with the same
|
|
89
|
+
* `name@version` from lower-priority sources.
|
|
90
|
+
*/
|
|
91
|
+
export declare class RegistryResolver {
|
|
92
|
+
private readonly _remote;
|
|
93
|
+
private readonly _local;
|
|
94
|
+
constructor(remote?: RemoteRegistry, local?: LocalRegistry);
|
|
95
|
+
/**
|
|
96
|
+
* Returns all skills with source annotations.
|
|
97
|
+
* Falls back automatically if remote is offline.
|
|
98
|
+
*/
|
|
99
|
+
list(): Promise<ResolvedSkill[]>;
|
|
100
|
+
/**
|
|
101
|
+
* Finds a single skill by name.
|
|
102
|
+
* Uses remote first, then local, then mock.
|
|
103
|
+
*/
|
|
104
|
+
find(name: string): Promise<ResolvedSkill | null>;
|
|
105
|
+
}
|
|
106
|
+
/** Shared remote registry client. */
|
|
107
|
+
export declare const remoteRegistry: RemoteRegistry;
|
|
108
|
+
/** Shared resolver (remote → local → mock). */
|
|
109
|
+
export declare const registryResolver: RegistryResolver;
|
|
110
|
+
//# sourceMappingURL=registry-remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-remote.d.ts","sourceRoot":"","sources":["../../src/skills/registry-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC;AAM7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,OAAO,SAAqC,EAC5C,SAAS,SAAQ;IAMnB;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAUvF;;;OAGG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWrD;;;;;;;OAOG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvF;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;YAYpB,MAAM;CAUrB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAGrC,MAAM,CAAC,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,aAAa;IAMvB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAoDtC;;;OAGG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAmDxD;AAMD,qCAAqC;AACrC,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote registry client and resolver for the DARE skill registry.
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - `RemoteRegistry` — HTTP client for the Vercel Functions backend
|
|
6
|
+
* - `RegistryResolver` — combina remote + local + mock em ordem de prioridade
|
|
7
|
+
*
|
|
8
|
+
* Priority: Remote (if online) → Local (~/.dare/registry/) → Mock (offline)
|
|
9
|
+
*
|
|
10
|
+
* @module skills/registry-remote
|
|
11
|
+
*/
|
|
12
|
+
import { registry as mockRegistry } from './registry.js';
|
|
13
|
+
import { LocalRegistry } from './registry-local.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// RemoteRegistry
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* HTTP client for the DARE registry backend (Vercel Functions).
|
|
19
|
+
*
|
|
20
|
+
* All network calls use `AbortController` with a configurable timeout.
|
|
21
|
+
*/
|
|
22
|
+
export class RemoteRegistry {
|
|
23
|
+
constructor(baseUrl = 'https://dare-registry.vercel.app', timeoutMs = 3000) {
|
|
24
|
+
this._baseUrl = baseUrl.replace(/\/$/, '');
|
|
25
|
+
this._timeoutMs = timeoutMs;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Lists all skills from the remote registry.
|
|
29
|
+
* Returns an empty array on network failure.
|
|
30
|
+
*
|
|
31
|
+
* @throws Never — failures are returned as empty array.
|
|
32
|
+
*/
|
|
33
|
+
async list(options = {}) {
|
|
34
|
+
const url = new URL(`${this._baseUrl}/api/skills`);
|
|
35
|
+
if (options.keyword)
|
|
36
|
+
url.searchParams.set('keyword', options.keyword);
|
|
37
|
+
if (options.author)
|
|
38
|
+
url.searchParams.set('author', options.author);
|
|
39
|
+
const response = await this._fetch(url.toString());
|
|
40
|
+
const data = await response.json();
|
|
41
|
+
return data.skills ?? [];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Fetches details for a single skill by name.
|
|
45
|
+
* Returns `null` when not found (404) or on network failure.
|
|
46
|
+
*/
|
|
47
|
+
async find(name) {
|
|
48
|
+
const url = `${this._baseUrl}/api/skills/${encodeURIComponent(name)}`;
|
|
49
|
+
const response = await this._fetch(url);
|
|
50
|
+
if (response.status === 404)
|
|
51
|
+
return null;
|
|
52
|
+
if (!response.ok)
|
|
53
|
+
return null;
|
|
54
|
+
const data = await response.json();
|
|
55
|
+
return data.latest ?? null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Publishes a skill to the remote registry.
|
|
59
|
+
*
|
|
60
|
+
* @param skillName - The skill name (used in the URL path)
|
|
61
|
+
* @param payload - Skill metadata
|
|
62
|
+
* @param token - Bearer token for authentication
|
|
63
|
+
* @throws Error if the request fails or returns a non-2xx status.
|
|
64
|
+
*/
|
|
65
|
+
async publish(skillName, payload, token) {
|
|
66
|
+
const url = `${this._baseUrl}/api/publish/${encodeURIComponent(skillName)}`;
|
|
67
|
+
const response = await this._fetch(url, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers: {
|
|
70
|
+
'Content-Type': 'application/json',
|
|
71
|
+
'Authorization': `Bearer ${token}`,
|
|
72
|
+
},
|
|
73
|
+
body: JSON.stringify(payload),
|
|
74
|
+
});
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
let detail = `HTTP ${response.status}`;
|
|
77
|
+
try {
|
|
78
|
+
const err = await response.json();
|
|
79
|
+
detail = err.detail ?? err.title ?? detail;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// ignore
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Remote publish failed: ${detail}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Checks connectivity to the registry by fetching the skills list.
|
|
89
|
+
* Returns `true` if the registry responds with a 2xx status.
|
|
90
|
+
*/
|
|
91
|
+
async isOnline() {
|
|
92
|
+
try {
|
|
93
|
+
const url = `${this._baseUrl}/api/skills`;
|
|
94
|
+
const response = await this._fetch(url);
|
|
95
|
+
return response.ok;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// ---- private ---------------------------------------------------------------
|
|
102
|
+
async _fetch(url, init) {
|
|
103
|
+
const controller = new AbortController();
|
|
104
|
+
const timer = setTimeout(() => controller.abort(), this._timeoutMs);
|
|
105
|
+
try {
|
|
106
|
+
const response = await fetch(url, { ...init, signal: controller.signal });
|
|
107
|
+
return response;
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
clearTimeout(timer);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// RegistryResolver
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
/**
|
|
118
|
+
* Combines remote, local, and mock registries with priority fallback.
|
|
119
|
+
*
|
|
120
|
+
* Priority order:
|
|
121
|
+
* 1. Remote (if available and online — timeout = 3s)
|
|
122
|
+
* 2. Local (`~/.dare/registry/`)
|
|
123
|
+
* 3. Mock (bundled JSON fallback)
|
|
124
|
+
*
|
|
125
|
+
* Skills from higher-priority sources overwrite those with the same
|
|
126
|
+
* `name@version` from lower-priority sources.
|
|
127
|
+
*/
|
|
128
|
+
export class RegistryResolver {
|
|
129
|
+
constructor(remote, local) {
|
|
130
|
+
this._remote = remote ?? new RemoteRegistry();
|
|
131
|
+
this._local = local ?? new LocalRegistry();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns all skills with source annotations.
|
|
135
|
+
* Falls back automatically if remote is offline.
|
|
136
|
+
*/
|
|
137
|
+
async list() {
|
|
138
|
+
const map = new Map();
|
|
139
|
+
// 1. Mock (lowest priority — add first so it can be overwritten)
|
|
140
|
+
for (const s of mockRegistry.loadAll()) {
|
|
141
|
+
map.set(`${s.name}@${s.version}`, { ...s, source: 'mock' });
|
|
142
|
+
}
|
|
143
|
+
// 2. Local (overlays mock)
|
|
144
|
+
for (const s of this._local.list()) {
|
|
145
|
+
map.set(`${s.name}@${s.version}`, {
|
|
146
|
+
name: s.name,
|
|
147
|
+
version: s.version,
|
|
148
|
+
description: s.description,
|
|
149
|
+
author: s.author,
|
|
150
|
+
license: s.license,
|
|
151
|
+
homepage: s.homepage ?? '',
|
|
152
|
+
repository: s.repository ?? '',
|
|
153
|
+
keywords: s.keywords ?? [],
|
|
154
|
+
dependencies: {},
|
|
155
|
+
published_at: s.published_at ?? '',
|
|
156
|
+
size_kb: s.size_kb ?? 0,
|
|
157
|
+
source: 'local',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// 3. Remote (highest priority — overlays local and mock)
|
|
161
|
+
try {
|
|
162
|
+
const remoteSkills = await this._remote.list();
|
|
163
|
+
for (const s of remoteSkills) {
|
|
164
|
+
map.set(`${s.name}@${s.version}`, {
|
|
165
|
+
name: s.name,
|
|
166
|
+
version: s.version,
|
|
167
|
+
description: s.description,
|
|
168
|
+
author: s.author,
|
|
169
|
+
license: s.license,
|
|
170
|
+
homepage: s.homepage ?? '',
|
|
171
|
+
repository: '',
|
|
172
|
+
keywords: s.keywords,
|
|
173
|
+
dependencies: s.dependencies,
|
|
174
|
+
published_at: s.publishedAt,
|
|
175
|
+
size_kb: 0,
|
|
176
|
+
source: 'remote',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Remote offline — local/mock fallback already in map
|
|
182
|
+
}
|
|
183
|
+
return Array.from(map.values());
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Finds a single skill by name.
|
|
187
|
+
* Uses remote first, then local, then mock.
|
|
188
|
+
*/
|
|
189
|
+
async find(name) {
|
|
190
|
+
// Try remote first
|
|
191
|
+
try {
|
|
192
|
+
const remote = await this._remote.find(name);
|
|
193
|
+
if (remote) {
|
|
194
|
+
return {
|
|
195
|
+
name: remote.name,
|
|
196
|
+
version: remote.version,
|
|
197
|
+
description: remote.description,
|
|
198
|
+
author: remote.author,
|
|
199
|
+
license: remote.license,
|
|
200
|
+
homepage: remote.homepage ?? '',
|
|
201
|
+
repository: '',
|
|
202
|
+
keywords: remote.keywords,
|
|
203
|
+
dependencies: remote.dependencies,
|
|
204
|
+
published_at: remote.publishedAt,
|
|
205
|
+
size_kb: 0,
|
|
206
|
+
source: 'remote',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// fallthrough to local
|
|
212
|
+
}
|
|
213
|
+
// Try local
|
|
214
|
+
const local = this._local.find(name);
|
|
215
|
+
if (local) {
|
|
216
|
+
return {
|
|
217
|
+
name: local.name,
|
|
218
|
+
version: local.version,
|
|
219
|
+
description: local.description,
|
|
220
|
+
author: local.author,
|
|
221
|
+
license: local.license,
|
|
222
|
+
homepage: local.homepage ?? '',
|
|
223
|
+
repository: local.repository ?? '',
|
|
224
|
+
keywords: local.keywords ?? [],
|
|
225
|
+
dependencies: {},
|
|
226
|
+
published_at: local.published_at ?? '',
|
|
227
|
+
size_kb: local.size_kb ?? 0,
|
|
228
|
+
source: 'local',
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// Fallback to mock
|
|
232
|
+
const mock = mockRegistry.findByName(name);
|
|
233
|
+
if (mock) {
|
|
234
|
+
return { ...mock, source: 'mock' };
|
|
235
|
+
}
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
// Singleton instances
|
|
241
|
+
// ---------------------------------------------------------------------------
|
|
242
|
+
/** Shared remote registry client. */
|
|
243
|
+
export const remoteRegistry = new RemoteRegistry();
|
|
244
|
+
/** Shared resolver (remote → local → mock). */
|
|
245
|
+
export const registryResolver = new RegistryResolver();
|
|
246
|
+
//# sourceMappingURL=registry-remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-remote.js","sourceRoot":"","sources":["../../src/skills/registry-remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry client — mock implementation backed by a local JSON file.
|
|
3
|
+
*
|
|
4
|
+
* When the real HTTP registry (`registry.dare-method.dev`) is available,
|
|
5
|
+
* replace `loadAll()` and `findByName()` with fetch calls.
|
|
6
|
+
* The rest of the skill commands depend only on this interface, so the
|
|
7
|
+
* swap will be transparent to them.
|
|
8
|
+
*
|
|
9
|
+
* @module skills/registry
|
|
10
|
+
*/
|
|
11
|
+
export interface RegistrySkill {
|
|
12
|
+
name: string;
|
|
13
|
+
version: string;
|
|
14
|
+
description: string;
|
|
15
|
+
author: string;
|
|
16
|
+
license: string;
|
|
17
|
+
homepage: string;
|
|
18
|
+
repository: string;
|
|
19
|
+
keywords: string[];
|
|
20
|
+
/** Map of skill name → semver range */
|
|
21
|
+
dependencies: Record<string, string>;
|
|
22
|
+
published_at: string;
|
|
23
|
+
size_kb: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class Registry {
|
|
26
|
+
private _data;
|
|
27
|
+
/**
|
|
28
|
+
* Returns all skills known to the registry.
|
|
29
|
+
* Result is cached in-memory for the lifetime of the process.
|
|
30
|
+
*/
|
|
31
|
+
loadAll(): RegistrySkill[];
|
|
32
|
+
/**
|
|
33
|
+
* Looks up a skill by exact name.
|
|
34
|
+
* Returns `undefined` when not found.
|
|
35
|
+
*/
|
|
36
|
+
findByName(name: string): RegistrySkill | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Returns the list of (transitive) dependencies for a skill in
|
|
39
|
+
* topological install order (deepest dependency first).
|
|
40
|
+
*
|
|
41
|
+
* Throws when a dependency is not in the registry.
|
|
42
|
+
* Throws on circular dependency chains.
|
|
43
|
+
*/
|
|
44
|
+
resolveDependencies(skillName: string): RegistrySkill[];
|
|
45
|
+
private _getData;
|
|
46
|
+
}
|
|
47
|
+
/** Singleton instance used by all skill commands. */
|
|
48
|
+
export declare const registry: Registry;
|
|
49
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAA6B;IAE1C;;;OAGG;IACH,OAAO,IAAI,aAAa,EAAE;IAI1B;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAInD;;;;;;OAMG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAuCvD,OAAO,CAAC,QAAQ;CAqBjB;AAED,qDAAqD;AACrD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
|