@baselane/packs 0.1.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/LICENSE +191 -0
- package/NOTICE +6 -0
- package/README.md +15 -0
- package/dist/ai-merge.d.ts +26 -0
- package/dist/ai-merge.js +165 -0
- package/dist/aliases.d.ts +7 -0
- package/dist/aliases.js +9 -0
- package/dist/compose-draft.d.ts +19 -0
- package/dist/compose-draft.js +170 -0
- package/dist/drift-detect.d.ts +8 -0
- package/dist/drift-detect.js +21 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +21 -0
- package/dist/ingest.d.ts +25 -0
- package/dist/ingest.js +262 -0
- package/dist/load.d.ts +7 -0
- package/dist/load.js +29 -0
- package/dist/manifest.d.ts +71 -0
- package/dist/manifest.js +208 -0
- package/dist/materialize-harness.d.ts +15 -0
- package/dist/materialize-harness.js +48 -0
- package/dist/merge-region.d.ts +60 -0
- package/dist/merge-region.js +166 -0
- package/dist/overlap.d.ts +32 -0
- package/dist/overlap.js +49 -0
- package/dist/pack-from-fileset.d.ts +13 -0
- package/dist/pack-from-fileset.js +133 -0
- package/dist/render/adapters.d.ts +6 -0
- package/dist/render/adapters.js +43 -0
- package/dist/render/agents-md.d.ts +3 -0
- package/dist/render/agents-md.js +49 -0
- package/dist/render/bundle-union.d.ts +10 -0
- package/dist/render/bundle-union.js +87 -0
- package/dist/render/bundle.d.ts +3 -0
- package/dist/render/bundle.js +51 -0
- package/dist/render/capabilities.d.ts +19 -0
- package/dist/render/capabilities.js +86 -0
- package/dist/render/claude.d.ts +3 -0
- package/dist/render/claude.js +92 -0
- package/dist/render/design.d.ts +27 -0
- package/dist/render/design.js +443 -0
- package/dist/render/graph.d.ts +11 -0
- package/dist/render/graph.js +245 -0
- package/dist/render/memory.d.ts +35 -0
- package/dist/render/memory.js +353 -0
- package/dist/render/render-pack.d.ts +3 -0
- package/dist/render/render-pack.js +43 -0
- package/dist/render/repo-union.d.ts +14 -0
- package/dist/render/repo-union.js +94 -0
- package/dist/render/rollout-files.d.ts +18 -0
- package/dist/render/rollout-files.js +39 -0
- package/dist/render/system-map.d.ts +8 -0
- package/dist/render/system-map.js +73 -0
- package/dist/render/tasks.d.ts +32 -0
- package/dist/render/tasks.js +327 -0
- package/dist/render/wiki.d.ts +30 -0
- package/dist/render/wiki.js +288 -0
- package/dist/seed/graph-seed.d.ts +17 -0
- package/dist/seed/graph-seed.js +18 -0
- package/dist/seed/wiki-seed.d.ts +23 -0
- package/dist/seed/wiki-seed.js +133 -0
- package/dist/seed-skills.d.ts +18 -0
- package/dist/seed-skills.js +134 -0
- package/dist/types.d.ts +122 -0
- package/dist/types.js +1 -0
- package/dist/validate.d.ts +30 -0
- package/dist/validate.js +397 -0
- package/package.json +38 -0
- package/packs/database-review/pack.json +44 -0
- package/packs/database-review/rendered/.baselane/capabilities.json +10 -0
- package/packs/database-review/rendered/.baselane/system-map/README.md +18 -0
- package/packs/database-review/rendered/.claude/agents/database-reviewer.md +8 -0
- package/packs/database-review/rendered/.claude/commands/db-review.md +6 -0
- package/packs/database-review/rendered/.claude/commands/map.md +6 -0
- package/packs/database-review/rendered/.claude/settings.json +26 -0
- package/packs/database-review/rendered/.github/copilot-instructions.md +48 -0
- package/packs/database-review/rendered/AGENTS.md +66 -0
- package/packs/database-review/rendered/CLAUDE.md +9 -0
- package/packs/database-review/rendered/GEMINI.md +3 -0
- package/packs/disciplined-workflow/pack.json +63 -0
- package/packs/disciplined-workflow/rendered/.baselane/capabilities.json +10 -0
- package/packs/disciplined-workflow/rendered/.baselane/tasks/README.md +36 -0
- package/packs/disciplined-workflow/rendered/.claude/agents/plan-reviewer.md +8 -0
- package/packs/disciplined-workflow/rendered/.claude/agents/task-reviewer.md +8 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/brainstorm.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/execute-plan.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/plan-work.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/write-plan.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/settings.json +24 -0
- package/packs/disciplined-workflow/rendered/.github/copilot-instructions.md +24 -0
- package/packs/disciplined-workflow/rendered/AGENTS.md +43 -0
- package/packs/disciplined-workflow/rendered/CLAUDE.md +12 -0
- package/packs/disciplined-workflow/rendered/GEMINI.md +3 -0
- package/packs/frontend-design/pack.json +129 -0
- package/packs/frontend-design/rendered/.claude/skills/clone/SKILL.md +39 -0
- package/packs/frontend-design/rendered/.claude/skills/functional-ui/SKILL.md +78 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/SKILL.md +36 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-core.md +254 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-frameworks.md +266 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-performance.md +79 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-plugins.md +433 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-react.md +136 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-scrolltrigger.md +296 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-timeline.md +107 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-utils.md +284 -0
- package/packs/frontend-design/rendered/.claude/skills/marketing-ui/SKILL.md +36 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/SKILL.md +267 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/base-vs-radix.md +306 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/cli.md +290 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/composition.md +195 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/customization.md +209 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/forms.md +192 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/icons.md +101 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/mcp.md +105 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/registry.md +277 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/styling.md +162 -0
- package/packs/frontend-design/rendered/.github/copilot-instructions.md +474 -0
- package/packs/frontend-design/rendered/AGENTS.md +33 -0
- package/packs/frontend-design/rendered/CLAUDE.md +10 -0
- package/packs/frontend-design/rendered/GEMINI.md +456 -0
- package/packs/frontend-taste/pack.json +43 -0
- package/packs/frontend-taste/rendered/.baselane/capabilities.json +16 -0
- package/packs/frontend-taste/rendered/.claude/agents/taste-reviewer.md +8 -0
- package/packs/frontend-taste/rendered/.claude/commands/design-review.md +6 -0
- package/packs/frontend-taste/rendered/.claude/settings.json +15 -0
- package/packs/frontend-taste/rendered/.github/copilot-instructions.md +51 -0
- package/packs/frontend-taste/rendered/AGENTS.md +68 -0
- package/packs/frontend-taste/rendered/CLAUDE.md +8 -0
- package/packs/frontend-taste/rendered/DESIGN.md +72 -0
- package/packs/frontend-taste/rendered/GEMINI.md +3 -0
- package/packs/go-rules/pack.json +38 -0
- package/packs/go-rules/rendered/.claude/agents/go-reviewer.md +8 -0
- package/packs/go-rules/rendered/.claude/commands/go-review.md +6 -0
- package/packs/go-rules/rendered/.claude/settings.json +15 -0
- package/packs/go-rules/rendered/.github/copilot-instructions.md +44 -0
- package/packs/go-rules/rendered/AGENTS.md +54 -0
- package/packs/go-rules/rendered/CLAUDE.md +8 -0
- package/packs/go-rules/rendered/GEMINI.md +3 -0
- package/packs/python-rules/pack.json +38 -0
- package/packs/python-rules/rendered/.claude/agents/python-reviewer.md +8 -0
- package/packs/python-rules/rendered/.claude/commands/python-review.md +6 -0
- package/packs/python-rules/rendered/.claude/settings.json +15 -0
- package/packs/python-rules/rendered/.github/copilot-instructions.md +43 -0
- package/packs/python-rules/rendered/AGENTS.md +53 -0
- package/packs/python-rules/rendered/CLAUDE.md +8 -0
- package/packs/python-rules/rendered/GEMINI.md +3 -0
- package/packs/second-brain/pack.json +36 -0
- package/packs/second-brain/rendered/.baselane/capabilities.json +25 -0
- package/packs/second-brain/rendered/.baselane/memory/README.md +34 -0
- package/packs/second-brain/rendered/.baselane/wiki/README.md +62 -0
- package/packs/second-brain/rendered/.claude/agents/librarian.md +14 -0
- package/packs/second-brain/rendered/.claude/commands/remember.md +6 -0
- package/packs/second-brain/rendered/.claude/commands/wiki.md +6 -0
- package/packs/second-brain/rendered/.claude/settings.json +35 -0
- package/packs/second-brain/rendered/.github/copilot-instructions.md +24 -0
- package/packs/second-brain/rendered/AGENTS.md +41 -0
- package/packs/second-brain/rendered/CLAUDE.md +9 -0
- package/packs/second-brain/rendered/GEMINI.md +3 -0
- package/packs/security-review/pack.json +72 -0
- package/packs/security-review/rendered/.claude/agents/security-reviewer.md +8 -0
- package/packs/security-review/rendered/.claude/commands/security-audit.md +6 -0
- package/packs/security-review/rendered/.claude/commands/security-scan.md +6 -0
- package/packs/security-review/rendered/.claude/settings.json +35 -0
- package/packs/security-review/rendered/.claude/skills/security-audit/SKILL.md +44 -0
- package/packs/security-review/rendered/.claude/skills/validate-at-boundaries/SKILL.md +41 -0
- package/packs/security-review/rendered/.github/copilot-instructions.md +137 -0
- package/packs/security-review/rendered/AGENTS.md +66 -0
- package/packs/security-review/rendered/CLAUDE.md +11 -0
- package/packs/security-review/rendered/GEMINI.md +90 -0
- package/packs/software-engineer-harness/pack.json +98 -0
- package/packs/software-engineer-harness/rendered/.baselane/capabilities.json +15 -0
- package/packs/software-engineer-harness/rendered/.baselane/system-map/README.md +18 -0
- package/packs/software-engineer-harness/rendered/.baselane/tasks/README.md +36 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/architect.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/checker.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/code-reviewer.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/code-simplifier.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/planner.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/reviewer.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/build-and-check.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/map.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/plan-change.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/plan-work.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/review-change.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/tdd-task.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/settings.json +35 -0
- package/packs/software-engineer-harness/rendered/.github/copilot-instructions.md +37 -0
- package/packs/software-engineer-harness/rendered/AGENTS.md +58 -0
- package/packs/software-engineer-harness/rendered/CLAUDE.md +18 -0
- package/packs/software-engineer-harness/rendered/GEMINI.md +3 -0
- package/packs/systematic-debugging/pack.json +44 -0
- package/packs/systematic-debugging/rendered/.claude/agents/debugger.md +8 -0
- package/packs/systematic-debugging/rendered/.claude/commands/debug.md +6 -0
- package/packs/systematic-debugging/rendered/.claude/commands/root-cause.md +6 -0
- package/packs/systematic-debugging/rendered/.claude/settings.json +15 -0
- package/packs/systematic-debugging/rendered/.github/copilot-instructions.md +20 -0
- package/packs/systematic-debugging/rendered/AGENTS.md +31 -0
- package/packs/systematic-debugging/rendered/CLAUDE.md +9 -0
- package/packs/systematic-debugging/rendered/GEMINI.md +3 -0
- package/packs/token-efficiency-harness/pack.json +49 -0
- package/packs/token-efficiency-harness/rendered/.baselane/capabilities.json +10 -0
- package/packs/token-efficiency-harness/rendered/.baselane/memory/README.md +34 -0
- package/packs/token-efficiency-harness/rendered/.claude/agents/scout.md +8 -0
- package/packs/token-efficiency-harness/rendered/.claude/commands/handoff.md +6 -0
- package/packs/token-efficiency-harness/rendered/.claude/commands/remember.md +6 -0
- package/packs/token-efficiency-harness/rendered/.claude/commands/usage-audit.md +6 -0
- package/packs/token-efficiency-harness/rendered/.claude/settings.json +26 -0
- package/packs/token-efficiency-harness/rendered/.github/copilot-instructions.md +26 -0
- package/packs/token-efficiency-harness/rendered/AGENTS.md +44 -0
- package/packs/token-efficiency-harness/rendered/CLAUDE.md +10 -0
- package/packs/token-efficiency-harness/rendered/GEMINI.md +3 -0
- package/packs/typescript-rules/pack.json +46 -0
- package/packs/typescript-rules/rendered/.claude/agents/typescript-reviewer.md +8 -0
- package/packs/typescript-rules/rendered/.claude/commands/typescript-review.md +6 -0
- package/packs/typescript-rules/rendered/.claude/settings.json +15 -0
- package/packs/typescript-rules/rendered/.claude/skills/immutable-updates/SKILL.md +46 -0
- package/packs/typescript-rules/rendered/.github/copilot-instructions.md +89 -0
- package/packs/typescript-rules/rendered/AGENTS.md +55 -0
- package/packs/typescript-rules/rendered/CLAUDE.md +9 -0
- package/packs/typescript-rules/rendered/GEMINI.md +51 -0
- package/skills/algorithmic-art/LICENSE +202 -0
- package/skills/algorithmic-art/LICENSE.txt +202 -0
- package/skills/algorithmic-art/SKILL.md +405 -0
- package/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/algorithmic-art/templates/viewer.html +599 -0
- package/skills/brainstorming/LICENSE +21 -0
- package/skills/brainstorming/SKILL.md +159 -0
- package/skills/brainstorming/scripts/frame-template.html +213 -0
- package/skills/brainstorming/scripts/helper.js +167 -0
- package/skills/brainstorming/scripts/server.cjs +723 -0
- package/skills/brainstorming/scripts/start-server.sh +209 -0
- package/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/brainstorming/visual-companion.md +291 -0
- package/skills/brand-guidelines/LICENSE +202 -0
- package/skills/brand-guidelines/LICENSE.txt +202 -0
- package/skills/brand-guidelines/SKILL.md +73 -0
- package/skills/canvas-design/LICENSE +202 -0
- package/skills/canvas-design/LICENSE.txt +202 -0
- package/skills/canvas-design/SKILL.md +130 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/dispatching-parallel-agents/LICENSE +21 -0
- package/skills/dispatching-parallel-agents/SKILL.md +185 -0
- package/skills/executing-plans/LICENSE +21 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/LICENSE +21 -0
- package/skills/finishing-a-development-branch/SKILL.md +241 -0
- package/skills/first-party/README.md +32 -0
- package/skills/first-party/append-only-jsonl-stores/SKILL.md +50 -0
- package/skills/first-party/golden-snapshot-discipline/SKILL.md +45 -0
- package/skills/first-party/immutable-updates/SKILL.md +46 -0
- package/skills/first-party/manifest.json +10 -0
- package/skills/first-party/ts-extension-imports/SKILL.md +49 -0
- package/skills/first-party/validate-at-boundaries/SKILL.md +41 -0
- package/skills/first-party/zero-dependency-discipline/SKILL.md +41 -0
- package/skills/frontend-design/LICENSE +177 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +55 -0
- package/skills/internal-comms/LICENSE +202 -0
- package/skills/internal-comms/LICENSE.txt +202 -0
- package/skills/internal-comms/SKILL.md +32 -0
- package/skills/internal-comms/examples/3p-updates.md +47 -0
- package/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/internal-comms/examples/faq-answers.md +30 -0
- package/skills/internal-comms/examples/general-comms.md +16 -0
- package/skills/mcp-builder/LICENSE +202 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/receiving-code-review/LICENSE +21 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/requesting-code-review/LICENSE +21 -0
- package/skills/requesting-code-review/SKILL.md +103 -0
- package/skills/requesting-code-review/code-reviewer.md +172 -0
- package/skills/seed-manifest.json +185 -0
- package/skills/skill-creator/LICENSE +202 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/slack-gif-creator/LICENSE +202 -0
- package/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/slack-gif-creator/SKILL.md +254 -0
- package/skills/slack-gif-creator/core/easing.py +234 -0
- package/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/slack-gif-creator/core/validators.py +136 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/subagent-driven-development/LICENSE +21 -0
- package/skills/subagent-driven-development/SKILL.md +418 -0
- package/skills/subagent-driven-development/implementer-prompt.md +139 -0
- package/skills/subagent-driven-development/scripts/review-package +44 -0
- package/skills/subagent-driven-development/scripts/sdd-workspace +22 -0
- package/skills/subagent-driven-development/scripts/task-brief +40 -0
- package/skills/subagent-driven-development/task-reviewer-prompt.md +188 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/LICENSE +21 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/LICENSE +21 -0
- package/skills/test-driven-development/SKILL.md +371 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/theme-factory/LICENSE +202 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/using-git-worktrees/LICENSE +21 -0
- package/skills/using-git-worktrees/SKILL.md +202 -0
- package/skills/using-superpowers/LICENSE +21 -0
- package/skills/using-superpowers/SKILL.md +62 -0
- package/skills/using-superpowers/references/antigravity-tools.md +23 -0
- package/skills/using-superpowers/references/codex-tools.md +39 -0
- package/skills/using-superpowers/references/pi-tools.md +16 -0
- package/skills/verification-before-completion/LICENSE +21 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/web-artifacts-builder/LICENSE +202 -0
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/webapp-testing/LICENSE +202 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/writing-plans/LICENSE +21 -0
- package/skills/writing-plans/SKILL.md +174 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { renderAgentsMd } from "./agents-md.js";
|
|
2
|
+
import { renderCapabilities } from "./capabilities.js";
|
|
3
|
+
import { renderClaudeFiles } from "./claude.js";
|
|
4
|
+
import { renderCopilot, renderGemini } from "./adapters.js";
|
|
5
|
+
import { hasRepoMemoryFiles, renderRepoMemoryFiles, withMemoryScaffolding } from "./memory.js";
|
|
6
|
+
import { hasRepoDesignAnalyze, renderRepoDesignFiles, withDesignAnalyzeScaffolding } from "./design.js";
|
|
7
|
+
import { hasRepoTasksLedger, renderRepoTasksFiles, withTasksScaffolding } from "./tasks.js";
|
|
8
|
+
import { hasRepoWikiBaselane, renderRepoWikiFiles, withWikiScaffolding } from "./wiki.js";
|
|
9
|
+
import { hasRepoGraphCapability, renderRepoGraphFiles, withGraphScaffolding } from "./graph.js";
|
|
10
|
+
import { hasRepoSystemMapCapability, renderRepoSystemMapFiles, withSystemMapScaffolding } from "./system-map.js";
|
|
11
|
+
/** Full deterministic file map for one pack: canonical AGENTS.md + all tool targets. */
|
|
12
|
+
export function renderPack(pack) {
|
|
13
|
+
const { manifest } = renderCapabilities(pack);
|
|
14
|
+
// A repo-store memory+files (or tasks+ledger, wiki+baselane, or graph) capability adds its
|
|
15
|
+
// command and Stop-hook reminder to the repo's own Claude Code surface; org-store versions
|
|
16
|
+
// live on the laptop instead (see render/bundle.ts), so this pack is left untouched in that case.
|
|
17
|
+
let claudePack = pack;
|
|
18
|
+
if (hasRepoMemoryFiles(pack))
|
|
19
|
+
claudePack = withMemoryScaffolding(claudePack, "repo");
|
|
20
|
+
if (hasRepoTasksLedger(pack))
|
|
21
|
+
claudePack = withTasksScaffolding(claudePack, "repo");
|
|
22
|
+
if (hasRepoWikiBaselane(pack))
|
|
23
|
+
claudePack = withWikiScaffolding(claudePack, "repo");
|
|
24
|
+
if (hasRepoDesignAnalyze(pack))
|
|
25
|
+
claudePack = withDesignAnalyzeScaffolding(claudePack, "repo");
|
|
26
|
+
if (hasRepoGraphCapability(pack))
|
|
27
|
+
claudePack = withGraphScaffolding(claudePack);
|
|
28
|
+
if (hasRepoSystemMapCapability(pack))
|
|
29
|
+
claudePack = withSystemMapScaffolding(claudePack);
|
|
30
|
+
return {
|
|
31
|
+
"AGENTS.md": renderAgentsMd(pack),
|
|
32
|
+
...renderClaudeFiles(claudePack),
|
|
33
|
+
".github/copilot-instructions.md": renderCopilot(pack),
|
|
34
|
+
"GEMINI.md": renderGemini(pack),
|
|
35
|
+
...(manifest ? { ".baselane/capabilities.json": manifest } : {}),
|
|
36
|
+
...renderRepoMemoryFiles(pack),
|
|
37
|
+
...renderRepoDesignFiles(pack),
|
|
38
|
+
...renderRepoTasksFiles(pack),
|
|
39
|
+
...renderRepoWikiFiles(pack),
|
|
40
|
+
...renderRepoGraphFiles(pack),
|
|
41
|
+
...renderRepoSystemMapFiles(pack),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FileMap, WorkflowPack } from "../types.ts";
|
|
2
|
+
export interface RepoUnion {
|
|
3
|
+
files: FileMap;
|
|
4
|
+
collisions: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Unions every NON-entry (fully-generated) repo file `renderPack` produces across an ordered
|
|
8
|
+
* (most-specific-first) effective pack set — the repo-committed counterpart of
|
|
9
|
+
* render/bundle-union.ts's laptop-bundle union. `.claude/settings.json` hooks concatenate per
|
|
10
|
+
* event; `.baselane/capabilities.json` capabilities dedup; every other path is first-writer-wins
|
|
11
|
+
* with a collisions note on a differing later write. `renderRepoFileUnion([p]).files` is
|
|
12
|
+
* byte-identical to `renderPack(p)` minus its ENTRY_FILES keys.
|
|
13
|
+
*/
|
|
14
|
+
export declare function renderRepoFileUnion(packs: WorkflowPack[]): RepoUnion;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ENTRY_FILES } from "../merge-region.js";
|
|
2
|
+
import { renderPack } from "./render-pack.js";
|
|
3
|
+
const SETTINGS_PATH = ".claude/settings.json";
|
|
4
|
+
const MANIFEST_PATH = ".baselane/capabilities.json";
|
|
5
|
+
/** Concatenates every rendered pack's hook entries per event, raw. Mirrors
|
|
6
|
+
* render/bundle-union.ts's mergeRenderedSettings but is NOT shared code with it — that module
|
|
7
|
+
* feeds a different consumer (/api/plan's laptop bundle) over bundle-relative paths; this one
|
|
8
|
+
* feeds the repo commit over repo-relative paths. Duplicated on purpose to avoid coupling two
|
|
9
|
+
* independent consumers to one shared internal. */
|
|
10
|
+
function mergeSettingsJson(jsons) {
|
|
11
|
+
const byEvent = {};
|
|
12
|
+
for (const json of jsons) {
|
|
13
|
+
let parsed;
|
|
14
|
+
try {
|
|
15
|
+
parsed = JSON.parse(json);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const hooks = parsed.hooks;
|
|
21
|
+
if (!hooks || typeof hooks !== "object")
|
|
22
|
+
continue;
|
|
23
|
+
for (const [event, entries] of Object.entries(hooks)) {
|
|
24
|
+
if (!Array.isArray(entries))
|
|
25
|
+
continue;
|
|
26
|
+
(byEvent[event] ??= []).push(...entries);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return JSON.stringify({ hooks: byEvent }, null, 2) + "\n";
|
|
30
|
+
}
|
|
31
|
+
/** Unions each manifest's capabilities, dedup by exact JSON identity, first occurrence wins. */
|
|
32
|
+
function mergeCapabilitiesManifest(jsons) {
|
|
33
|
+
const capabilities = [];
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
for (const json of jsons) {
|
|
36
|
+
let parsed;
|
|
37
|
+
try {
|
|
38
|
+
parsed = JSON.parse(json);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const list = parsed.capabilities;
|
|
44
|
+
if (!Array.isArray(list))
|
|
45
|
+
continue;
|
|
46
|
+
for (const c of list) {
|
|
47
|
+
const key = JSON.stringify(c);
|
|
48
|
+
if (!seen.has(key)) {
|
|
49
|
+
seen.add(key);
|
|
50
|
+
capabilities.push(c);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return JSON.stringify({ version: 1, capabilities }, null, 2) + "\n";
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Unions every NON-entry (fully-generated) repo file `renderPack` produces across an ordered
|
|
58
|
+
* (most-specific-first) effective pack set — the repo-committed counterpart of
|
|
59
|
+
* render/bundle-union.ts's laptop-bundle union. `.claude/settings.json` hooks concatenate per
|
|
60
|
+
* event; `.baselane/capabilities.json` capabilities dedup; every other path is first-writer-wins
|
|
61
|
+
* with a collisions note on a differing later write. `renderRepoFileUnion([p]).files` is
|
|
62
|
+
* byte-identical to `renderPack(p)` minus its ENTRY_FILES keys.
|
|
63
|
+
*/
|
|
64
|
+
export function renderRepoFileUnion(packs) {
|
|
65
|
+
const files = {};
|
|
66
|
+
const collisions = [];
|
|
67
|
+
const settingsJsons = [];
|
|
68
|
+
const manifestJsons = [];
|
|
69
|
+
for (const pack of packs) {
|
|
70
|
+
for (const [path, content] of Object.entries(renderPack(pack))) {
|
|
71
|
+
if (ENTRY_FILES.includes(path))
|
|
72
|
+
continue;
|
|
73
|
+
if (path === SETTINGS_PATH) {
|
|
74
|
+
settingsJsons.push(content);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (path === MANIFEST_PATH) {
|
|
78
|
+
manifestJsons.push(content);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (!(path in files)) {
|
|
82
|
+
files[path] = content;
|
|
83
|
+
}
|
|
84
|
+
else if (files[path] !== content && !collisions.includes(path)) {
|
|
85
|
+
collisions.push(path);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (settingsJsons.length > 0)
|
|
90
|
+
files[SETTINGS_PATH] = mergeSettingsJson(settingsJsons);
|
|
91
|
+
if (manifestJsons.length > 0)
|
|
92
|
+
files[MANIFEST_PATH] = mergeCapabilitiesManifest(manifestJsons);
|
|
93
|
+
return { files, collisions };
|
|
94
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FileMap, WorkflowPack } from "../types.ts";
|
|
2
|
+
export interface RolloutFiles {
|
|
3
|
+
files: FileMap;
|
|
4
|
+
collisions: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Renders the full file set for the single combined `baselane/rollout` branch, given the repo's
|
|
8
|
+
* ordered (most-specific-first) effective pack set. `baseEntryFiles` is each ENTRY_FILES path's
|
|
9
|
+
* current content on the repo's default branch (or absent/undefined if the file doesn't exist
|
|
10
|
+
* there) — the caller (distributeRollout) fetches these; this function is otherwise pure.
|
|
11
|
+
*
|
|
12
|
+
* Entry files (AGENTS.md/CLAUDE.md/GEMINI.md/.github/copilot-instructions.md): strip any pack's
|
|
13
|
+
* region that isn't in `packs`, then fold `mergeManagedRegion` over `packs` in order. The result
|
|
14
|
+
* carries exactly `packs`' regions — idempotent on a repeat call with the same set and base.
|
|
15
|
+
* Every other rendered path (settings.json, agents/commands/skills, capability files) comes from
|
|
16
|
+
* `renderRepoFileUnion`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderRolloutFiles(baseEntryFiles: Record<string, string | null | undefined>, packs: WorkflowPack[]): RolloutFiles;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ENTRY_FILES, mergeManagedRegion, stripManagedRegion, strippedManagedPackIds } from "../merge-region.js";
|
|
2
|
+
import { renderPack } from "./render-pack.js";
|
|
3
|
+
import { renderRepoFileUnion } from "./repo-union.js";
|
|
4
|
+
/**
|
|
5
|
+
* Renders the full file set for the single combined `baselane/rollout` branch, given the repo's
|
|
6
|
+
* ordered (most-specific-first) effective pack set. `baseEntryFiles` is each ENTRY_FILES path's
|
|
7
|
+
* current content on the repo's default branch (or absent/undefined if the file doesn't exist
|
|
8
|
+
* there) — the caller (distributeRollout) fetches these; this function is otherwise pure.
|
|
9
|
+
*
|
|
10
|
+
* Entry files (AGENTS.md/CLAUDE.md/GEMINI.md/.github/copilot-instructions.md): strip any pack's
|
|
11
|
+
* region that isn't in `packs`, then fold `mergeManagedRegion` over `packs` in order. The result
|
|
12
|
+
* carries exactly `packs`' regions — idempotent on a repeat call with the same set and base.
|
|
13
|
+
* Every other rendered path (settings.json, agents/commands/skills, capability files) comes from
|
|
14
|
+
* `renderRepoFileUnion`.
|
|
15
|
+
*/
|
|
16
|
+
export function renderRolloutFiles(baseEntryFiles, packs) {
|
|
17
|
+
const files = {};
|
|
18
|
+
const wantedIds = new Set(packs.map((p) => p.id));
|
|
19
|
+
const rendered = packs.map((pack) => ({ pack, body: renderPack(pack) }));
|
|
20
|
+
for (const path of ENTRY_FILES) {
|
|
21
|
+
let content = baseEntryFiles[path] ?? null;
|
|
22
|
+
if (content !== null) {
|
|
23
|
+
for (const packId of strippedManagedPackIds(content)) {
|
|
24
|
+
if (!wantedIds.has(packId))
|
|
25
|
+
content = stripManagedRegion(content, packId);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const { pack, body } of rendered) {
|
|
29
|
+
const managedBody = body[path];
|
|
30
|
+
if (managedBody === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
content = mergeManagedRegion(content, managedBody, pack.id, pack.version);
|
|
33
|
+
}
|
|
34
|
+
if (content !== null)
|
|
35
|
+
files[path] = content;
|
|
36
|
+
}
|
|
37
|
+
const repoUnion = renderRepoFileUnion(packs);
|
|
38
|
+
return { files: { ...files, ...repoUnion.files }, collisions: repoUnion.collisions };
|
|
39
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FileMap, WorkflowPack } from "../types.ts";
|
|
2
|
+
export declare const SYSTEM_MAP_AGENTS_NOTE: string;
|
|
3
|
+
export declare function hasRepoSystemMapCapability(pack: WorkflowPack): boolean;
|
|
4
|
+
export declare function hasOrgSystemMapCapability(pack: WorkflowPack): boolean;
|
|
5
|
+
/** Adds the /map command + Stop-hook reminder for repo-store system-map packs. */
|
|
6
|
+
export declare function withSystemMapScaffolding(pack: WorkflowPack): WorkflowPack;
|
|
7
|
+
export declare function renderRepoSystemMapFiles(pack: WorkflowPack): FileMap;
|
|
8
|
+
export declare function renderBundleSystemMapFiles(pack: WorkflowPack): FileMap;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const SYSTEM_MAP_README = `# System map
|
|
2
|
+
|
|
3
|
+
\`ARCHITECTURE.md\` at the repo root carries a baselane-managed region generated from static
|
|
4
|
+
analysis: languages, layout, commands, import-graph hotspots, and measured conventions —
|
|
5
|
+
including **hidden rules** (conventions the code follows at >=90% consistency that no lint
|
|
6
|
+
config enforces). Human prose outside the managed region is never touched.
|
|
7
|
+
|
|
8
|
+
## Regenerating
|
|
9
|
+
|
|
10
|
+
Run \`baselane map .\` from the repo root after structural changes (modules added/moved,
|
|
11
|
+
commands changed, conventions shifted). Add \`--llm\` for an AI-narrated architecture section
|
|
12
|
+
(needs BASELANE_ANTHROPIC_KEY or ANTHROPIC_API_KEY). Commit the refreshed \`ARCHITECTURE.md\`
|
|
13
|
+
and \`.baselane/system-map/report.json\` together.
|
|
14
|
+
|
|
15
|
+
## Reading it
|
|
16
|
+
|
|
17
|
+
Consult ARCHITECTURE.md's conventions section before writing code — the hidden rules are the
|
|
18
|
+
ones nobody will tell you about in review until you break them.
|
|
19
|
+
`;
|
|
20
|
+
const SYSTEM_MAP_COMMAND = {
|
|
21
|
+
name: "map",
|
|
22
|
+
description: "Consult or regenerate the generated ARCHITECTURE.md system map.",
|
|
23
|
+
argument_hint: '<question about the architecture | "regenerate">',
|
|
24
|
+
prompt: "Follow the protocol in `.baselane/system-map/README.md` for $ARGUMENTS. For a question, " +
|
|
25
|
+
"read `ARCHITECTURE.md` (the baselane-managed region) and answer from it — especially the " +
|
|
26
|
+
'Conventions & hidden rules section — before grepping. If $ARGUMENTS is "regenerate" (or ' +
|
|
27
|
+
"modules/commands/conventions just changed), run `baselane map .` from the repo root and " +
|
|
28
|
+
"commit the refreshed ARCHITECTURE.md and .baselane/system-map/report.json.",
|
|
29
|
+
};
|
|
30
|
+
const SYSTEM_MAP_STOP_HOOK = {
|
|
31
|
+
event: "Stop",
|
|
32
|
+
matcher: "",
|
|
33
|
+
description: "Reminds the agent to regenerate the system map after structural changes.",
|
|
34
|
+
action: "print-reminder",
|
|
35
|
+
message: "Before finishing, if you added/moved modules, changed commands, or shifted a convention, " +
|
|
36
|
+
"regenerate the system map (`baselane map .`) — see .baselane/system-map/README.md.",
|
|
37
|
+
};
|
|
38
|
+
export const SYSTEM_MAP_AGENTS_NOTE = "### System map\n\n" +
|
|
39
|
+
"`ARCHITECTURE.md` carries a generated, baselane-managed system map — languages, layout, " +
|
|
40
|
+
"commands, import-graph hotspots, and measured conventions including hidden rules (consistent " +
|
|
41
|
+
"but unenforced). Read its conventions section before writing code, and regenerate with " +
|
|
42
|
+
"`baselane map .` (or `/map regenerate`) after structural changes.";
|
|
43
|
+
// Methods that render real scaffolding today — kept in lockstep with capabilities.ts's
|
|
44
|
+
// PROVISIONED_METHODS["system-map"] entry (bug #10: an unrecognized method must stay
|
|
45
|
+
// "coming soon" in BOTH the manifest AND the filesystem, never one without the other).
|
|
46
|
+
const REAL_METHODS = new Set(["analyze", "analyze+llm"]);
|
|
47
|
+
function systemMapCapabilities(pack, store) {
|
|
48
|
+
return (pack.capabilities ?? []).filter((c) => c.type === "system-map" && c.store === store && REAL_METHODS.has(c.method));
|
|
49
|
+
}
|
|
50
|
+
export function hasRepoSystemMapCapability(pack) {
|
|
51
|
+
return systemMapCapabilities(pack, "repo").length > 0;
|
|
52
|
+
}
|
|
53
|
+
export function hasOrgSystemMapCapability(pack) {
|
|
54
|
+
return systemMapCapabilities(pack, "org").length > 0;
|
|
55
|
+
}
|
|
56
|
+
/** Adds the /map command + Stop-hook reminder for repo-store system-map packs. */
|
|
57
|
+
export function withSystemMapScaffolding(pack) {
|
|
58
|
+
return {
|
|
59
|
+
...pack,
|
|
60
|
+
commands: [...pack.commands, SYSTEM_MAP_COMMAND],
|
|
61
|
+
hooks: [...pack.hooks, SYSTEM_MAP_STOP_HOOK],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function renderRepoSystemMapFiles(pack) {
|
|
65
|
+
if (!hasRepoSystemMapCapability(pack))
|
|
66
|
+
return {};
|
|
67
|
+
return { ".baselane/system-map/README.md": SYSTEM_MAP_README };
|
|
68
|
+
}
|
|
69
|
+
export function renderBundleSystemMapFiles(pack) {
|
|
70
|
+
if (!hasOrgSystemMapCapability(pack))
|
|
71
|
+
return {};
|
|
72
|
+
return { "system-map/README.md": SYSTEM_MAP_README };
|
|
73
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { FileMap, WorkflowPack } from "../types.ts";
|
|
2
|
+
/** The AGENTS.md capabilities-section note for a tasks+ledger capability, regardless of store. */
|
|
3
|
+
export declare const TASKS_AGENTS_NOTE: string;
|
|
4
|
+
export declare const TASKS_SPECKIT_AGENTS_NOTE: string;
|
|
5
|
+
export declare const TASKS_TASKMASTER_AGENTS_NOTE: string;
|
|
6
|
+
export declare const TASKS_BEADS_AGENTS_NOTE: string;
|
|
7
|
+
/** Despite the name — kept for compatibility with the existing gate call sites in
|
|
8
|
+
* render-pack.ts/bundle.ts/capabilities.ts — this now guards `withTasksScaffolding` for every
|
|
9
|
+
* wired-up tasks method in the repo store, not `ledger` alone. */
|
|
10
|
+
export declare function hasRepoTasksLedger(pack: WorkflowPack): boolean;
|
|
11
|
+
/** Org-store counterpart of {@link hasRepoTasksLedger}. */
|
|
12
|
+
export declare function hasOrgTasksLedger(pack: WorkflowPack): boolean;
|
|
13
|
+
/** #9: `TASKS_AGENTS_NOTE` describes the `ledger` method (`.baselane/tasks/progress.md`,
|
|
14
|
+
* `/plan-work`). Unlike {@link hasRepoTasksLedger} (which gates scaffolding for ANY tasks method),
|
|
15
|
+
* this gates only that note — so a speckit/taskmaster/beads pack isn't handed a note pointing at a
|
|
16
|
+
* ledger it never created. */
|
|
17
|
+
export declare function hasRepoTasksLedgerMethod(pack: WorkflowPack): boolean;
|
|
18
|
+
/** #9: narrow, note-only gates for the sibling methods — same rationale as
|
|
19
|
+
* {@link hasRepoTasksLedgerMethod} above. */
|
|
20
|
+
export declare function hasRepoTasksSpeckitMethod(pack: WorkflowPack): boolean;
|
|
21
|
+
export declare function hasRepoTasksTaskmasterMethod(pack: WorkflowPack): boolean;
|
|
22
|
+
export declare function hasRepoTasksBeadsMethod(pack: WorkflowPack): boolean;
|
|
23
|
+
/** Adds the present tasks method(s)' command(s) + Stop-hook reminder(s) for one store to a
|
|
24
|
+
* pack, without disturbing what it already declares. `store` defaults to "repo" for
|
|
25
|
+
* compatibility with pre-multi-method call sites; render-pack.ts passes "repo" and bundle.ts
|
|
26
|
+
* passes "org" explicitly so a method declared in one store never leaks scaffolding into the
|
|
27
|
+
* other's file map. */
|
|
28
|
+
export declare function withTasksScaffolding(pack: WorkflowPack, store?: "org" | "repo"): WorkflowPack;
|
|
29
|
+
/** `.baselane/tasks/...`, for whichever repo-store tasks methods the pack declares. */
|
|
30
|
+
export declare function renderRepoTasksFiles(pack: WorkflowPack): FileMap;
|
|
31
|
+
/** `tasks/...` in the laptop bundle, for whichever org-store tasks methods the pack declares. */
|
|
32
|
+
export declare function renderBundleTasksFiles(pack: WorkflowPack): FileMap;
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/** `.baselane/tasks/README.md` (repo) / `tasks/README.md` (bundle) — same body either way. */
|
|
2
|
+
const TASKS_README = `# Tasks & progress ledger
|
|
3
|
+
|
|
4
|
+
This directory anchors multi-session AI work so it survives context compaction — the
|
|
5
|
+
plan lives in one file, completed work is logged in another, and neither depends on
|
|
6
|
+
what an agent remembers from a prior session.
|
|
7
|
+
|
|
8
|
+
## Files
|
|
9
|
+
|
|
10
|
+
- \`PLAN.md\` — at the repo root, or \`.baselane/tasks/PLAN.md\` if the root is reserved
|
|
11
|
+
for something else. The plan, as bite-size checkboxed tasks:
|
|
12
|
+
|
|
13
|
+
\`\`\`markdown
|
|
14
|
+
- [ ] Add the tasks-ledger capability
|
|
15
|
+
- [x] Wire render-pack.ts and bundle.ts
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
- \`.baselane/tasks/progress.md\` — an append-only ledger, one line per completed step,
|
|
19
|
+
each with a commit reference:
|
|
20
|
+
|
|
21
|
+
\`\`\`markdown
|
|
22
|
+
- 2026-07-09: Wired render-pack.ts and bundle.ts — commit \`a1b2c3d\`
|
|
23
|
+
\`\`\`
|
|
24
|
+
|
|
25
|
+
Never rewrite a line once it's committed to the ledger — only append.
|
|
26
|
+
|
|
27
|
+
## Rule
|
|
28
|
+
|
|
29
|
+
- **On session start, read the ledger before the plan.** \`progress.md\` says what is
|
|
30
|
+
actually done; \`PLAN.md\` says what was intended. Trust the ledger and \`git log\`
|
|
31
|
+
over either your own memory or a stale-looking checkbox — a checkbox can lag behind
|
|
32
|
+
reality, but a completed-and-committed ledger line cannot.
|
|
33
|
+
- **Append after each completed step**, not in a batch at the end of the session. The
|
|
34
|
+
ledger's value is that it survives a compaction or a dropped session mid-task; a step
|
|
35
|
+
that isn't logged until "later" is a step that can be lost.
|
|
36
|
+
- Use \`/plan-work\` to draft or refresh \`PLAN.md\` as checkboxed tasks from a spec or
|
|
37
|
+
requirement.
|
|
38
|
+
`;
|
|
39
|
+
const PLAN_WORK_COMMAND = {
|
|
40
|
+
name: "plan-work",
|
|
41
|
+
description: "Draft or refresh PLAN.md as bite-size checkboxed tasks.",
|
|
42
|
+
argument_hint: "<goal or spec>",
|
|
43
|
+
prompt: "Draft or refresh `PLAN.md` (repo root, or `.baselane/tasks/PLAN.md` if the root is " +
|
|
44
|
+
"reserved) for $ARGUMENTS: break the goal into bite-size, independently verifiable, " +
|
|
45
|
+
"checkboxed tasks (`- [ ] ...`). If `PLAN.md` already exists, first reconcile it " +
|
|
46
|
+
"against `.baselane/tasks/progress.md` — check off anything the ledger shows as " +
|
|
47
|
+
"done — then add only the tasks still remaining.",
|
|
48
|
+
};
|
|
49
|
+
const TASKS_STOP_HOOK = {
|
|
50
|
+
event: "Stop",
|
|
51
|
+
matcher: "",
|
|
52
|
+
description: "Reminds the agent to append completed steps to the progress ledger before ending.",
|
|
53
|
+
action: "print-reminder",
|
|
54
|
+
message: "Before finishing, append any steps completed this session to " +
|
|
55
|
+
".baselane/tasks/progress.md with a commit reference, and check off finished tasks in PLAN.md.",
|
|
56
|
+
};
|
|
57
|
+
/** `.baselane/tasks/speckit/README.md` (repo) / `tasks/speckit/README.md` (bundle) — GitHub Spec Kit. */
|
|
58
|
+
const SPECKIT_README = `# Tasks adapter: speckit (GitHub Spec Kit)
|
|
59
|
+
|
|
60
|
+
This project uses GitHub's Spec Kit for spec-driven development: a spec, then a plan, then
|
|
61
|
+
a task list, then implementation — each stage a file under \`.specify/\`, reviewed before the
|
|
62
|
+
next stage starts.
|
|
63
|
+
|
|
64
|
+
## Setup
|
|
65
|
+
|
|
66
|
+
\`\`\`bash
|
|
67
|
+
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
|
|
68
|
+
specify init --here
|
|
69
|
+
\`\`\`
|
|
70
|
+
|
|
71
|
+
\`specify init --here\` scaffolds \`.specify/\` into the current repo (use \`specify init
|
|
72
|
+
<project>\` instead to create a new directory).
|
|
73
|
+
|
|
74
|
+
## Usage
|
|
75
|
+
|
|
76
|
+
Inside Claude Code, drive the flow with Spec Kit's own slash commands, in order:
|
|
77
|
+
|
|
78
|
+
1. \`/specify <what to build>\` — writes \`.specify/.../spec.md\`, the requirements.
|
|
79
|
+
2. \`/plan\` — writes \`.specify/.../plan.md\`, the technical approach.
|
|
80
|
+
3. \`/tasks\` — writes \`.specify/.../tasks.md\`, a checkboxed task breakdown.
|
|
81
|
+
4. \`/implement\` — executes the tasks, one at a time.
|
|
82
|
+
|
|
83
|
+
Use \`/speckit-flow\` in this pack to keep that flow reconciled with this repo's own ledger
|
|
84
|
+
as you go, rather than running the four steps in isolation.
|
|
85
|
+
|
|
86
|
+
## How this maps to the baselane protocol
|
|
87
|
+
|
|
88
|
+
\`spec.md\` + \`plan.md\` together are the requirements/design half of what \`PLAN.md\` would
|
|
89
|
+
otherwise hold; \`tasks.md\` is the checkboxed task list itself. Spec Kit does not keep an
|
|
90
|
+
append-only, commit-referenced ledger the way \`.baselane/tasks/progress.md\` does — so as
|
|
91
|
+
each task in \`tasks.md\` is completed, still append a line to
|
|
92
|
+
\`.baselane/tasks/progress.md\` with a commit reference. Trust the ledger and \`git log\` over
|
|
93
|
+
a checkbox in \`tasks.md\`, same as the baselane protocol's own rule.
|
|
94
|
+
`;
|
|
95
|
+
const SPECKIT_FLOW_COMMAND = {
|
|
96
|
+
name: "speckit-flow",
|
|
97
|
+
description: "Drive the Spec Kit spec→plan→tasks→implement flow, reconciled with the progress ledger.",
|
|
98
|
+
argument_hint: "<what to build>",
|
|
99
|
+
prompt: "Drive GitHub Spec Kit's flow for $ARGUMENTS: run `/specify $ARGUMENTS` if `spec.md` " +
|
|
100
|
+
"doesn't exist yet, then `/plan`, then `/tasks` to produce a checkboxed `tasks.md` " +
|
|
101
|
+
"under `.specify/`. Before implementing, reconcile `.specify/.../tasks.md` against " +
|
|
102
|
+
"`.baselane/tasks/progress.md` — trust the ledger over a stale-looking checkbox. Then " +
|
|
103
|
+
"run `/implement` one task at a time, and after each task completes, append a line to " +
|
|
104
|
+
"`.baselane/tasks/progress.md` with a commit reference before moving to the next.",
|
|
105
|
+
};
|
|
106
|
+
const SPECKIT_STOP_HOOK = {
|
|
107
|
+
event: "Stop",
|
|
108
|
+
matcher: "",
|
|
109
|
+
description: "Confirms Spec Kit is installed and reminds the agent to log completed tasks to the ledger.",
|
|
110
|
+
action: "run-command",
|
|
111
|
+
command: 'command -v specify >/dev/null 2>&1 && echo "Before finishing, append any tasks.md items completed this session to .baselane/tasks/progress.md with a commit reference." || echo "specify-cli not installed — see .baselane/tasks/speckit/README.md for setup (uv tool install specify-cli --from git+https://github.com/github/spec-kit.git)"',
|
|
112
|
+
};
|
|
113
|
+
/** `.baselane/tasks/taskmaster/README.md` (repo) / `tasks/taskmaster/README.md` (bundle) — Task Master AI. */
|
|
114
|
+
const TASKMASTER_README = `# Tasks adapter: taskmaster (Task Master AI)
|
|
115
|
+
|
|
116
|
+
This project uses Task Master AI to break a PRD or goal into a dependency-aware task list
|
|
117
|
+
that an agent can work through directly from the CLI.
|
|
118
|
+
|
|
119
|
+
## Setup
|
|
120
|
+
|
|
121
|
+
\`\`\`bash
|
|
122
|
+
npm install -g task-master-ai
|
|
123
|
+
task-master init
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
\`task-master init\` scaffolds a \`.taskmaster/\` directory and prompts for the model provider
|
|
127
|
+
API key it should use to generate and expand tasks.
|
|
128
|
+
|
|
129
|
+
## Usage
|
|
130
|
+
|
|
131
|
+
- \`task-master parse-prd <file>\` — turns a requirements doc into an initial task list.
|
|
132
|
+
- \`task-master list\` — shows all tasks and their status.
|
|
133
|
+
- \`task-master next\` — picks the next unblocked task to work on.
|
|
134
|
+
- \`task-master set-status --id=<id> --status=done\` — marks a task complete.
|
|
135
|
+
|
|
136
|
+
## How this maps to the baselane protocol
|
|
137
|
+
|
|
138
|
+
Task Master's task list (\`.taskmaster/tasks/\`) is the equivalent of \`PLAN.md\`'s checkboxed
|
|
139
|
+
tasks, and \`task-master next\` is how you decide what to work on instead of scanning
|
|
140
|
+
\`PLAN.md\` yourself. Task Master does not write a commit-referenced ledger entry when a
|
|
141
|
+
task is marked done, so after every \`task-master set-status ... --status=done\`, still
|
|
142
|
+
append a line to \`.baselane/tasks/progress.md\` with the commit reference — the same
|
|
143
|
+
append-only discipline the baselane protocol requires, just triggered from a different CLI.
|
|
144
|
+
`;
|
|
145
|
+
const TASKMASTER_STOP_HOOK = {
|
|
146
|
+
event: "Stop",
|
|
147
|
+
matcher: "",
|
|
148
|
+
description: "Confirms Task Master is installed and reminds the agent to log completed tasks to the ledger.",
|
|
149
|
+
action: "run-command",
|
|
150
|
+
command: 'command -v task-master >/dev/null 2>&1 && echo "Before finishing, append any task-master tasks marked done this session to .baselane/tasks/progress.md with a commit reference." || echo "task-master-ai not installed — see .baselane/tasks/taskmaster/README.md for setup (npm install -g task-master-ai && task-master init)"',
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* `.baselane/tasks/beads/README.md` (repo) / `tasks/beads/README.md` (bundle) — beads (task #38).
|
|
154
|
+
*
|
|
155
|
+
* beads (`bd`, github.com/gastownhall/beads — formerly steveyegge/beads) is a real, actively
|
|
156
|
+
* maintained dependency-aware issue tracker built for coding agents: a Dolt-backed (versioned
|
|
157
|
+
* SQL, cell-level merge) local database with hash-based issue IDs specifically to avoid
|
|
158
|
+
* merge collisions when multiple agents work in parallel branches, plus JSON output so an
|
|
159
|
+
* agent can consume `bd` output programmatically. Validated via web search before adoption,
|
|
160
|
+
* per this repo's AGENTS.md rule on new external tools.
|
|
161
|
+
*/
|
|
162
|
+
const BEADS_README = `# Tasks adapter: beads
|
|
163
|
+
|
|
164
|
+
This project uses [beads](https://github.com/gastownhall/beads) (the \`bd\` CLI) for a
|
|
165
|
+
dependency-aware task ledger: issues form a DAG (not just a flat list), so \`bd\` can tell you
|
|
166
|
+
exactly which tasks are actually unblocked right now — durable across sessions and safe for
|
|
167
|
+
multiple agents to share, since it's backed by a version-controlled, git-friendly database
|
|
168
|
+
with cell-level merge and hash-based issue IDs (built specifically to avoid ID collisions
|
|
169
|
+
when parallel agents create issues on separate branches).
|
|
170
|
+
|
|
171
|
+
## Setup
|
|
172
|
+
|
|
173
|
+
Install \`bd\` with whichever fits this machine (see the project's docs for the full matrix):
|
|
174
|
+
|
|
175
|
+
\`\`\`bash
|
|
176
|
+
brew install beads # macOS/Linux, via the gastownhall tap
|
|
177
|
+
# or
|
|
178
|
+
npm install -g @beads/bd # Node.js environments
|
|
179
|
+
# or
|
|
180
|
+
curl -fsSL https://raw.githubusercontent.com/gastownhall/beads/main/scripts/install.sh | bash
|
|
181
|
+
\`\`\`
|
|
182
|
+
|
|
183
|
+
Then scaffold it into this repo:
|
|
184
|
+
|
|
185
|
+
\`\`\`bash
|
|
186
|
+
bd init
|
|
187
|
+
\`\`\`
|
|
188
|
+
|
|
189
|
+
A machine that runs the desktop agent should install \`bd\` once, the same way it installs any
|
|
190
|
+
other harness dependency — the Stop hook below checks for it and prints this same setup block
|
|
191
|
+
if it's missing, so a session never fails silently for want of the tool.
|
|
192
|
+
|
|
193
|
+
## Usage
|
|
194
|
+
|
|
195
|
+
- \`bd create "<title>"\` — file a new issue (add \`--depends-on <id>\` to record a dependency).
|
|
196
|
+
- \`bd list\` — see everything open.
|
|
197
|
+
- \`bd ready\` — the key agent-facing command: lists only the issues with no *uncompleted*
|
|
198
|
+
dependency, i.e. what can actually be worked on right now — read this before picking a task,
|
|
199
|
+
not \`bd list\`.
|
|
200
|
+
- \`bd close <id>\` — mark an issue done once its work is committed.
|
|
201
|
+
- \`bd quickstart\` — beads' own interactive walkthrough, useful the first time in a repo.
|
|
202
|
+
|
|
203
|
+
## How this maps to the baselane protocol
|
|
204
|
+
|
|
205
|
+
\`bd\`'s issue DAG plus \`bd ready\` is a more structured version of what \`PLAN.md\` +
|
|
206
|
+
\`.baselane/tasks/progress.md\` do by hand: the plan is the set of open issues, the "what's
|
|
207
|
+
next" question is answered by \`bd ready\` instead of scanning checkboxes, and closing an
|
|
208
|
+
issue with \`bd close <id>\` is the completion event — still append a line to
|
|
209
|
+
\`.baselane/tasks/progress.md\` with the commit reference when you do, so the append-only,
|
|
210
|
+
commit-referenced ledger this repo's other tasks methods rely on stays populated regardless
|
|
211
|
+
of which method a given session is using.
|
|
212
|
+
`;
|
|
213
|
+
const BEADS_STOP_HOOK = {
|
|
214
|
+
event: "Stop",
|
|
215
|
+
matcher: "",
|
|
216
|
+
description: "Confirms beads (bd) is installed and reminds the agent to log completed tasks to the ledger.",
|
|
217
|
+
action: "run-command",
|
|
218
|
+
command: 'command -v bd >/dev/null 2>&1 && echo "Before finishing, bd close any issues completed this session and append a line to .baselane/tasks/progress.md with a commit reference." || echo "beads (bd) not installed — see .baselane/tasks/beads/README.md for setup (brew install beads, or npm install -g @beads/bd, then bd init)"',
|
|
219
|
+
};
|
|
220
|
+
/** The AGENTS.md capabilities-section note for a tasks+ledger capability, regardless of store. */
|
|
221
|
+
export const TASKS_AGENTS_NOTE = "### Tasks\n\n" +
|
|
222
|
+
"On session start, read `.baselane/tasks/progress.md` before `PLAN.md` — trust the " +
|
|
223
|
+
"ledger and `git log` over memory. Use `/plan-work` to draft or refresh `PLAN.md`, " +
|
|
224
|
+
"and append to the ledger after each completed step.";
|
|
225
|
+
// #9: each sibling method gets its own note naming the path/command it actually scaffolds,
|
|
226
|
+
// instead of tasks+ledger's note being handed to every method (see hasRepoTasksLedgerMethod).
|
|
227
|
+
export const TASKS_SPECKIT_AGENTS_NOTE = "### Tasks (speckit)\n\n" +
|
|
228
|
+
"This project drives GitHub Spec Kit's spec→plan→tasks→implement flow (see " +
|
|
229
|
+
"`.baselane/tasks/speckit/README.md`) — use `/speckit-flow`, and still append a line to " +
|
|
230
|
+
"`.baselane/tasks/progress.md` with a commit reference after each completed task.";
|
|
231
|
+
export const TASKS_TASKMASTER_AGENTS_NOTE = "### Tasks (taskmaster)\n\n" +
|
|
232
|
+
"This project uses Task Master AI (see `.baselane/tasks/taskmaster/README.md`) — use " +
|
|
233
|
+
"`task-master next` to pick up work, and append a line to `.baselane/tasks/progress.md` with a " +
|
|
234
|
+
"commit reference after each `task-master set-status ... --status=done`.";
|
|
235
|
+
export const TASKS_BEADS_AGENTS_NOTE = "### Tasks (beads)\n\n" +
|
|
236
|
+
"This project uses beads (see `.baselane/tasks/beads/README.md`) — run `bd ready` before " +
|
|
237
|
+
"picking a task, and append a line to `.baselane/tasks/progress.md` with a commit reference " +
|
|
238
|
+
"when you `bd close` an issue.";
|
|
239
|
+
function tasksCapabilitiesFor(pack, store) {
|
|
240
|
+
return (pack.capabilities ?? []).filter((c) => c.type === "tasks" && c.store === store);
|
|
241
|
+
}
|
|
242
|
+
function hasTasksMethod(pack, store, method) {
|
|
243
|
+
return tasksCapabilitiesFor(pack, store).some((c) => c.method === method);
|
|
244
|
+
}
|
|
245
|
+
/** True if this store has any wired-up tasks method (ledger, speckit, taskmaster, beads) that
|
|
246
|
+
* needs scaffolding spliced into the pack via `withTasksScaffolding`. */
|
|
247
|
+
function hasTasksScaffoldingNeed(pack, store) {
|
|
248
|
+
return (hasTasksMethod(pack, store, "ledger") ||
|
|
249
|
+
hasTasksMethod(pack, store, "speckit") ||
|
|
250
|
+
hasTasksMethod(pack, store, "taskmaster") ||
|
|
251
|
+
hasTasksMethod(pack, store, "beads"));
|
|
252
|
+
}
|
|
253
|
+
/** Despite the name — kept for compatibility with the existing gate call sites in
|
|
254
|
+
* render-pack.ts/bundle.ts/capabilities.ts — this now guards `withTasksScaffolding` for every
|
|
255
|
+
* wired-up tasks method in the repo store, not `ledger` alone. */
|
|
256
|
+
export function hasRepoTasksLedger(pack) {
|
|
257
|
+
return hasTasksScaffoldingNeed(pack, "repo");
|
|
258
|
+
}
|
|
259
|
+
/** Org-store counterpart of {@link hasRepoTasksLedger}. */
|
|
260
|
+
export function hasOrgTasksLedger(pack) {
|
|
261
|
+
return hasTasksScaffoldingNeed(pack, "org");
|
|
262
|
+
}
|
|
263
|
+
/** #9: `TASKS_AGENTS_NOTE` describes the `ledger` method (`.baselane/tasks/progress.md`,
|
|
264
|
+
* `/plan-work`). Unlike {@link hasRepoTasksLedger} (which gates scaffolding for ANY tasks method),
|
|
265
|
+
* this gates only that note — so a speckit/taskmaster/beads pack isn't handed a note pointing at a
|
|
266
|
+
* ledger it never created. */
|
|
267
|
+
export function hasRepoTasksLedgerMethod(pack) {
|
|
268
|
+
return hasTasksMethod(pack, "repo", "ledger");
|
|
269
|
+
}
|
|
270
|
+
/** #9: narrow, note-only gates for the sibling methods — same rationale as
|
|
271
|
+
* {@link hasRepoTasksLedgerMethod} above. */
|
|
272
|
+
export function hasRepoTasksSpeckitMethod(pack) {
|
|
273
|
+
return hasTasksMethod(pack, "repo", "speckit");
|
|
274
|
+
}
|
|
275
|
+
export function hasRepoTasksTaskmasterMethod(pack) {
|
|
276
|
+
return hasTasksMethod(pack, "repo", "taskmaster");
|
|
277
|
+
}
|
|
278
|
+
export function hasRepoTasksBeadsMethod(pack) {
|
|
279
|
+
return hasTasksMethod(pack, "repo", "beads");
|
|
280
|
+
}
|
|
281
|
+
/** Adds the present tasks method(s)' command(s) + Stop-hook reminder(s) for one store to a
|
|
282
|
+
* pack, without disturbing what it already declares. `store` defaults to "repo" for
|
|
283
|
+
* compatibility with pre-multi-method call sites; render-pack.ts passes "repo" and bundle.ts
|
|
284
|
+
* passes "org" explicitly so a method declared in one store never leaks scaffolding into the
|
|
285
|
+
* other's file map. */
|
|
286
|
+
export function withTasksScaffolding(pack, store = "repo") {
|
|
287
|
+
const methods = new Set(tasksCapabilitiesFor(pack, store).map((c) => c.method));
|
|
288
|
+
const commands = [...pack.commands];
|
|
289
|
+
const hooks = [...pack.hooks];
|
|
290
|
+
if (methods.has("ledger")) {
|
|
291
|
+
commands.push(PLAN_WORK_COMMAND);
|
|
292
|
+
hooks.push(TASKS_STOP_HOOK);
|
|
293
|
+
}
|
|
294
|
+
if (methods.has("speckit")) {
|
|
295
|
+
commands.push(SPECKIT_FLOW_COMMAND);
|
|
296
|
+
hooks.push(SPECKIT_STOP_HOOK);
|
|
297
|
+
}
|
|
298
|
+
if (methods.has("taskmaster"))
|
|
299
|
+
hooks.push(TASKMASTER_STOP_HOOK);
|
|
300
|
+
if (methods.has("beads"))
|
|
301
|
+
hooks.push(BEADS_STOP_HOOK);
|
|
302
|
+
return { ...pack, commands, hooks };
|
|
303
|
+
}
|
|
304
|
+
/** File map for one store's tasks capabilities — `ledger`'s README at the top-level slot, every
|
|
305
|
+
* other real method under its own subdirectory so multiple methods can coexist without one
|
|
306
|
+
* silently clobbering another's docs. `pathFor` picks repo vs bundle path shape for a leaf. */
|
|
307
|
+
function tasksFilesFor(pack, store, pathFor) {
|
|
308
|
+
const methods = new Set(tasksCapabilitiesFor(pack, store).map((c) => c.method));
|
|
309
|
+
const files = {};
|
|
310
|
+
if (methods.has("ledger"))
|
|
311
|
+
files[pathFor("tasks/README.md")] = TASKS_README;
|
|
312
|
+
if (methods.has("speckit"))
|
|
313
|
+
files[pathFor("tasks/speckit/README.md")] = SPECKIT_README;
|
|
314
|
+
if (methods.has("taskmaster"))
|
|
315
|
+
files[pathFor("tasks/taskmaster/README.md")] = TASKMASTER_README;
|
|
316
|
+
if (methods.has("beads"))
|
|
317
|
+
files[pathFor("tasks/beads/README.md")] = BEADS_README;
|
|
318
|
+
return files;
|
|
319
|
+
}
|
|
320
|
+
/** `.baselane/tasks/...`, for whichever repo-store tasks methods the pack declares. */
|
|
321
|
+
export function renderRepoTasksFiles(pack) {
|
|
322
|
+
return tasksFilesFor(pack, "repo", (leaf) => `.baselane/${leaf}`);
|
|
323
|
+
}
|
|
324
|
+
/** `tasks/...` in the laptop bundle, for whichever org-store tasks methods the pack declares. */
|
|
325
|
+
export function renderBundleTasksFiles(pack) {
|
|
326
|
+
return tasksFilesFor(pack, "org", (leaf) => leaf);
|
|
327
|
+
}
|