@dewtech/dare-cli 2.17.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 +98 -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.js +49 -49
- 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.js +38 -38
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +32 -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/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/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/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/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/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.js +252 -252
- 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/package.json +8 -3
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +48 -48
- 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-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 -114
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
- 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 -265
- 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 -141
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
- 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 -145
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
- 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 -141
- package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -86
- package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -184
- package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -107
- package/templates/ide/cursor/.cursor/commands/review-task.md +91 -91
- 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 -141
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,gFAAgF,CAAC;KAC7F,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAEnC,mFAAmF;AACnF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest — reads and writes `.dare/skills.yml`
|
|
3
|
+
*
|
|
4
|
+
* Source of truth for all installed skills in a DARE project.
|
|
5
|
+
* Format is intentionally human-readable but managed by the CLI (ADR-01).
|
|
6
|
+
*
|
|
7
|
+
* @module skills/manifest
|
|
8
|
+
*/
|
|
9
|
+
export interface SkillEntry {
|
|
10
|
+
name: string;
|
|
11
|
+
version: string;
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
dependsOn?: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface Manifest {
|
|
16
|
+
skills: SkillEntry[];
|
|
17
|
+
}
|
|
18
|
+
export declare class ManifestReader {
|
|
19
|
+
/**
|
|
20
|
+
* Returns true when a manifest file exists at the given project root.
|
|
21
|
+
*/
|
|
22
|
+
exists(projectPath: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Reads and parses the manifest.
|
|
25
|
+
* Throws a descriptive error when the file is absent or malformed.
|
|
26
|
+
*/
|
|
27
|
+
read(projectPath: string): Manifest;
|
|
28
|
+
/**
|
|
29
|
+
* Reads the manifest if it exists, or returns an empty one.
|
|
30
|
+
*/
|
|
31
|
+
readOrEmpty(projectPath: string): Manifest;
|
|
32
|
+
private _validate;
|
|
33
|
+
}
|
|
34
|
+
export declare class ManifestWriter {
|
|
35
|
+
private readonly _reader;
|
|
36
|
+
/**
|
|
37
|
+
* Writes (overwrites) the full manifest to disk.
|
|
38
|
+
* Creates `.dare/` directory if it does not exist.
|
|
39
|
+
*/
|
|
40
|
+
write(projectPath: string, manifest: Manifest): void;
|
|
41
|
+
/**
|
|
42
|
+
* Adds a skill entry to the manifest.
|
|
43
|
+
* If the skill already exists (same name), it is replaced.
|
|
44
|
+
*/
|
|
45
|
+
addSkill(projectPath: string, skill: SkillEntry): void;
|
|
46
|
+
/**
|
|
47
|
+
* Removes a skill entry by name.
|
|
48
|
+
* No-op if the skill is not present.
|
|
49
|
+
*/
|
|
50
|
+
removeSkill(projectPath: string, skillName: string): void;
|
|
51
|
+
/** Convert to a plain object that yaml serialises predictably. */
|
|
52
|
+
private _toSerializable;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/skills/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAoBD,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIpC;;;OAGG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAuBnC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAS1C,OAAO,CAAC,SAAS;CAqDlB;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAYpD;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAatD;;;OAGG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAQzD,kEAAkE;IAClE,OAAO,CAAC,eAAe;CAexB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest — reads and writes `.dare/skills.yml`
|
|
3
|
+
*
|
|
4
|
+
* Source of truth for all installed skills in a DARE project.
|
|
5
|
+
* Format is intentionally human-readable but managed by the CLI (ADR-01).
|
|
6
|
+
*
|
|
7
|
+
* @module skills/manifest
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'fs-extra';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Constants
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
const MANIFEST_DIR = '.dare';
|
|
16
|
+
const MANIFEST_FILE = 'skills.yml';
|
|
17
|
+
function manifestPath(projectPath) {
|
|
18
|
+
return path.join(projectPath, MANIFEST_DIR, MANIFEST_FILE);
|
|
19
|
+
}
|
|
20
|
+
const HEADER_COMMENT = '# .dare/skills.yml — Managed by DARE CLI. Do not edit manually.\n';
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// ManifestReader
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
export class ManifestReader {
|
|
25
|
+
/**
|
|
26
|
+
* Returns true when a manifest file exists at the given project root.
|
|
27
|
+
*/
|
|
28
|
+
exists(projectPath) {
|
|
29
|
+
return fs.pathExistsSync(manifestPath(projectPath));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reads and parses the manifest.
|
|
33
|
+
* Throws a descriptive error when the file is absent or malformed.
|
|
34
|
+
*/
|
|
35
|
+
read(projectPath) {
|
|
36
|
+
const filePath = manifestPath(projectPath);
|
|
37
|
+
if (!fs.pathExistsSync(filePath)) {
|
|
38
|
+
throw new Error(`Manifest not found at ${filePath}. Run 'dare skill add <name>' to create one.`);
|
|
39
|
+
}
|
|
40
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
parsed = parseYaml(raw);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
throw new Error(`Failed to parse ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
47
|
+
}
|
|
48
|
+
return this._validate(parsed, filePath);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reads the manifest if it exists, or returns an empty one.
|
|
52
|
+
*/
|
|
53
|
+
readOrEmpty(projectPath) {
|
|
54
|
+
if (!this.exists(projectPath)) {
|
|
55
|
+
return { skills: [] };
|
|
56
|
+
}
|
|
57
|
+
return this.read(projectPath);
|
|
58
|
+
}
|
|
59
|
+
// ---- private -------------------------------------------------------------
|
|
60
|
+
_validate(raw, filePath) {
|
|
61
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
62
|
+
throw new Error(`${filePath}: expected an object at top level, got ${typeof raw}.`);
|
|
63
|
+
}
|
|
64
|
+
const obj = raw;
|
|
65
|
+
if (!Array.isArray(obj['skills'])) {
|
|
66
|
+
throw new Error(`${filePath}: 'skills' must be an array.`);
|
|
67
|
+
}
|
|
68
|
+
const skills = obj['skills'].map((item, idx) => {
|
|
69
|
+
if (typeof item !== 'object' || item === null) {
|
|
70
|
+
throw new Error(`${filePath}: skills[${idx}] must be an object.`);
|
|
71
|
+
}
|
|
72
|
+
const entry = item;
|
|
73
|
+
if (typeof entry['name'] !== 'string' || !entry['name']) {
|
|
74
|
+
throw new Error(`${filePath}: skills[${idx}].name must be a non-empty string.`);
|
|
75
|
+
}
|
|
76
|
+
if (typeof entry['version'] !== 'string' || !entry['version']) {
|
|
77
|
+
throw new Error(`${filePath}: skills[${idx}].version must be a non-empty string.`);
|
|
78
|
+
}
|
|
79
|
+
if (typeof entry['enabled'] !== 'boolean') {
|
|
80
|
+
throw new Error(`${filePath}: skills[${idx}].enabled must be a boolean.`);
|
|
81
|
+
}
|
|
82
|
+
const skill = {
|
|
83
|
+
name: entry['name'],
|
|
84
|
+
version: entry['version'],
|
|
85
|
+
enabled: entry['enabled'],
|
|
86
|
+
};
|
|
87
|
+
if (Array.isArray(entry['dependsOn'])) {
|
|
88
|
+
skill.dependsOn = entry['dependsOn'].map((d, i) => {
|
|
89
|
+
if (typeof d !== 'string') {
|
|
90
|
+
throw new Error(`${filePath}: skills[${idx}].dependsOn[${i}] must be a string.`);
|
|
91
|
+
}
|
|
92
|
+
return d;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return skill;
|
|
96
|
+
});
|
|
97
|
+
return { skills };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// ManifestWriter
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
export class ManifestWriter {
|
|
104
|
+
constructor() {
|
|
105
|
+
this._reader = new ManifestReader();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Writes (overwrites) the full manifest to disk.
|
|
109
|
+
* Creates `.dare/` directory if it does not exist.
|
|
110
|
+
*/
|
|
111
|
+
write(projectPath, manifest) {
|
|
112
|
+
const filePath = manifestPath(projectPath);
|
|
113
|
+
fs.ensureDirSync(path.dirname(filePath));
|
|
114
|
+
const yamlBody = stringifyYaml(this._toSerializable(manifest), {
|
|
115
|
+
indent: 2,
|
|
116
|
+
lineWidth: 120,
|
|
117
|
+
});
|
|
118
|
+
fs.writeFileSync(filePath, HEADER_COMMENT + yamlBody, 'utf-8');
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Adds a skill entry to the manifest.
|
|
122
|
+
* If the skill already exists (same name), it is replaced.
|
|
123
|
+
*/
|
|
124
|
+
addSkill(projectPath, skill) {
|
|
125
|
+
const manifest = this._reader.readOrEmpty(projectPath);
|
|
126
|
+
const idx = manifest.skills.findIndex((s) => s.name === skill.name);
|
|
127
|
+
if (idx >= 0) {
|
|
128
|
+
manifest.skills[idx] = skill;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
manifest.skills.push(skill);
|
|
132
|
+
}
|
|
133
|
+
this.write(projectPath, manifest);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Removes a skill entry by name.
|
|
137
|
+
* No-op if the skill is not present.
|
|
138
|
+
*/
|
|
139
|
+
removeSkill(projectPath, skillName) {
|
|
140
|
+
const manifest = this._reader.readOrEmpty(projectPath);
|
|
141
|
+
manifest.skills = manifest.skills.filter((s) => s.name !== skillName);
|
|
142
|
+
this.write(projectPath, manifest);
|
|
143
|
+
}
|
|
144
|
+
// ---- private -------------------------------------------------------------
|
|
145
|
+
/** Convert to a plain object that yaml serialises predictably. */
|
|
146
|
+
_toSerializable(manifest) {
|
|
147
|
+
return {
|
|
148
|
+
skills: manifest.skills.map((s) => {
|
|
149
|
+
const entry = {
|
|
150
|
+
name: s.name,
|
|
151
|
+
version: s.version,
|
|
152
|
+
enabled: s.enabled,
|
|
153
|
+
};
|
|
154
|
+
if (s.dependsOn && s.dependsOn.length > 0) {
|
|
155
|
+
entry['dependsOn'] = s.dependsOn;
|
|
156
|
+
}
|
|
157
|
+
return entry;
|
|
158
|
+
}),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/skills/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
export interface LocalRegistrySkill {
|
|
24
|
+
name: string;
|
|
25
|
+
version: string;
|
|
26
|
+
description: string;
|
|
27
|
+
author: string;
|
|
28
|
+
license: string;
|
|
29
|
+
homepage?: string;
|
|
30
|
+
repository?: string;
|
|
31
|
+
keywords?: string[];
|
|
32
|
+
dare_version?: string;
|
|
33
|
+
published_at?: string;
|
|
34
|
+
size_kb?: number;
|
|
35
|
+
source: 'local';
|
|
36
|
+
}
|
|
37
|
+
export declare class LocalRegistry {
|
|
38
|
+
private readonly _root;
|
|
39
|
+
constructor(root?: string);
|
|
40
|
+
/**
|
|
41
|
+
* Returns all skills in the local registry index.
|
|
42
|
+
*/
|
|
43
|
+
list(): LocalRegistrySkill[];
|
|
44
|
+
/**
|
|
45
|
+
* Finds a skill by name (and optionally an exact version).
|
|
46
|
+
* Returns `null` when not found.
|
|
47
|
+
*/
|
|
48
|
+
find(name: string, version?: string): LocalRegistrySkill | null;
|
|
49
|
+
/**
|
|
50
|
+
* Publishes a skill from `skillPath` into the local registry.
|
|
51
|
+
*
|
|
52
|
+
* Copies all files (excluding node_modules/, dist/, .git/) from `skillPath`
|
|
53
|
+
* into `~/.dare/registry/<name>/<version>/` and updates `index.json`.
|
|
54
|
+
*/
|
|
55
|
+
publish(skillPath: string, meta: LocalRegistrySkill): void;
|
|
56
|
+
/**
|
|
57
|
+
* Installs a skill from the local registry into a project.
|
|
58
|
+
*
|
|
59
|
+
* Copies files from `~/.dare/registry/<name>/<version>/` into
|
|
60
|
+
* `<targetProjectPath>/packages/skills/<name>/`.
|
|
61
|
+
*/
|
|
62
|
+
install(name: string, version: string, targetProjectPath: string): void;
|
|
63
|
+
private _indexPath;
|
|
64
|
+
private _readIndex;
|
|
65
|
+
private _writeIndex;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=registry-local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-local.d.ts","sourceRoot":"","sources":["../../src/skills/registry-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,MAAM,WAAW,kBAAkB;IACjC,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,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAqBD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,CAAC,EAAE,MAAM;IAMzB;;OAEG;IACH,IAAI,IAAI,kBAAkB,EAAE;IAI5B;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAkB/D;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IA0B1D;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAevE,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;CAIpB"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|