openplanr 0.1.0 → 0.3.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 +23 -5
- package/dist/agents/agent-factory.d.ts +7 -0
- package/dist/agents/agent-factory.d.ts.map +1 -0
- package/dist/agents/agent-factory.js +22 -0
- package/dist/agents/agent-factory.js.map +1 -0
- package/dist/agents/claude-agent.d.ts +13 -0
- package/dist/agents/claude-agent.d.ts.map +1 -0
- package/dist/agents/claude-agent.js +48 -0
- package/dist/agents/claude-agent.js.map +1 -0
- package/dist/agents/codex-agent.d.ts +13 -0
- package/dist/agents/codex-agent.d.ts.map +1 -0
- package/dist/agents/codex-agent.js +47 -0
- package/dist/agents/codex-agent.js.map +1 -0
- package/dist/agents/cursor-agent.d.ts +13 -0
- package/dist/agents/cursor-agent.d.ts.map +1 -0
- package/dist/agents/cursor-agent.js +40 -0
- package/dist/agents/cursor-agent.js.map +1 -0
- package/dist/agents/implementation-bridge.d.ts +21 -0
- package/dist/agents/implementation-bridge.d.ts.map +1 -0
- package/dist/agents/implementation-bridge.js +173 -0
- package/dist/agents/implementation-bridge.js.map +1 -0
- package/dist/agents/index.d.ts +6 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +5 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/prompt-composer.d.ts +30 -0
- package/dist/agents/prompt-composer.d.ts.map +1 -0
- package/dist/agents/prompt-composer.js +81 -0
- package/dist/agents/prompt-composer.js.map +1 -0
- package/dist/agents/task-parser.d.ts +38 -0
- package/dist/agents/task-parser.d.ts.map +1 -0
- package/dist/agents/task-parser.js +83 -0
- package/dist/agents/task-parser.js.map +1 -0
- package/dist/agents/types.d.ts +23 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +8 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/utils.d.ts +9 -0
- package/dist/agents/utils.d.ts.map +1 -0
- package/dist/agents/utils.js +21 -0
- package/dist/agents/utils.js.map +1 -0
- package/dist/ai/codebase/context-builder.d.ts +31 -0
- package/dist/ai/codebase/context-builder.d.ts.map +1 -0
- package/dist/ai/codebase/context-builder.js +93 -0
- package/dist/ai/codebase/context-builder.js.map +1 -0
- package/dist/ai/codebase/file-reader.d.ts +22 -0
- package/dist/ai/codebase/file-reader.d.ts.map +1 -0
- package/dist/ai/codebase/file-reader.js +111 -0
- package/dist/ai/codebase/file-reader.js.map +1 -0
- package/dist/ai/codebase/index.d.ts +5 -0
- package/dist/ai/codebase/index.d.ts.map +1 -0
- package/dist/ai/codebase/index.js +5 -0
- package/dist/ai/codebase/index.js.map +1 -0
- package/dist/ai/codebase/stack-detector.d.ts +18 -0
- package/dist/ai/codebase/stack-detector.d.ts.map +1 -0
- package/dist/ai/codebase/stack-detector.js +147 -0
- package/dist/ai/codebase/stack-detector.js.map +1 -0
- package/dist/ai/codebase/tree-generator.d.ts +8 -0
- package/dist/ai/codebase/tree-generator.d.ts.map +1 -0
- package/dist/ai/codebase/tree-generator.js +85 -0
- package/dist/ai/codebase/tree-generator.js.map +1 -0
- package/dist/ai/errors.d.ts +22 -0
- package/dist/ai/errors.d.ts.map +1 -0
- package/dist/ai/errors.js +70 -0
- package/dist/ai/errors.js.map +1 -0
- package/dist/ai/index.d.ts +11 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompts/prompt-builder.d.ts +42 -0
- package/dist/ai/prompts/prompt-builder.d.ts.map +1 -0
- package/dist/ai/prompts/prompt-builder.js +96 -0
- package/dist/ai/prompts/prompt-builder.js.map +1 -0
- package/dist/ai/prompts/system-prompts.d.ts +13 -0
- package/dist/ai/prompts/system-prompts.d.ts.map +1 -0
- package/dist/ai/prompts/system-prompts.js +124 -0
- package/dist/ai/prompts/system-prompts.js.map +1 -0
- package/dist/ai/provider-factory.d.ts +10 -0
- package/dist/ai/provider-factory.d.ts.map +1 -0
- package/dist/ai/provider-factory.js +33 -0
- package/dist/ai/provider-factory.js.map +1 -0
- package/dist/ai/providers/anthropic-provider.d.ts +22 -0
- package/dist/ai/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/ai/providers/anthropic-provider.js +82 -0
- package/dist/ai/providers/anthropic-provider.js.map +1 -0
- package/dist/ai/providers/ollama-provider.d.ts +13 -0
- package/dist/ai/providers/ollama-provider.d.ts.map +1 -0
- package/dist/ai/providers/ollama-provider.js +16 -0
- package/dist/ai/providers/ollama-provider.js.map +1 -0
- package/dist/ai/providers/openai-provider.d.ts +17 -0
- package/dist/ai/providers/openai-provider.d.ts.map +1 -0
- package/dist/ai/providers/openai-provider.js +58 -0
- package/dist/ai/providers/openai-provider.js.map +1 -0
- package/dist/ai/schemas/ai-response-schemas.d.ts +425 -0
- package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -0
- package/dist/ai/schemas/ai-response-schemas.js +87 -0
- package/dist/ai/schemas/ai-response-schemas.js.map +1 -0
- package/dist/ai/types.d.ts +40 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +16 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/commands/checklist.d.ts.map +1 -1
- package/dist/cli/commands/checklist.js +60 -1
- package/dist/cli/commands/checklist.js.map +1 -1
- package/dist/cli/commands/config.d.ts +8 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +112 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/epic.d.ts +7 -0
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +161 -31
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/feature.d.ts +6 -0
- package/dist/cli/commands/feature.d.ts.map +1 -1
- package/dist/cli/commands/feature.js +143 -30
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +48 -6
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +15 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +259 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/refine.d.ts +9 -0
- package/dist/cli/commands/refine.d.ts.map +1 -0
- package/dist/cli/commands/refine.js +101 -0
- package/dist/cli/commands/refine.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +150 -18
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/story.d.ts +6 -0
- package/dist/cli/commands/story.d.ts.map +1 -1
- package/dist/cli/commands/story.js +259 -45
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +12 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +227 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +9 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +350 -35
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/index.js +16 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/models/schema.d.ts +41 -0
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +9 -0
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +9 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/ai-service.d.ts +40 -0
- package/dist/services/ai-service.d.ts.map +1 -0
- package/dist/services/ai-service.js +150 -0
- package/dist/services/ai-service.js.map +1 -0
- package/dist/services/artifact-gathering.d.ts +49 -0
- package/dist/services/artifact-gathering.d.ts.map +1 -0
- package/dist/services/artifact-gathering.js +128 -0
- package/dist/services/artifact-gathering.js.map +1 -0
- package/dist/services/artifact-service.d.ts +47 -0
- package/dist/services/artifact-service.d.ts.map +1 -1
- package/dist/services/artifact-service.js +169 -0
- package/dist/services/artifact-service.js.map +1 -1
- package/dist/services/checklist-service.d.ts +23 -0
- package/dist/services/checklist-service.d.ts.map +1 -1
- package/dist/services/checklist-service.js +44 -0
- package/dist/services/checklist-service.js.map +1 -1
- package/dist/services/credentials-service.d.ts +22 -0
- package/dist/services/credentials-service.d.ts.map +1 -0
- package/dist/services/credentials-service.js +58 -0
- package/dist/services/credentials-service.js.map +1 -0
- package/dist/services/id-service.d.ts.map +1 -1
- package/dist/services/id-service.js +8 -5
- package/dist/services/id-service.js.map +1 -1
- package/dist/services/prompt-service.d.ts +6 -0
- package/dist/services/prompt-service.d.ts.map +1 -1
- package/dist/services/prompt-service.js +7 -1
- package/dist/services/prompt-service.js.map +1 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +6 -0
- package/dist/services/template-service.js.map +1 -1
- package/dist/templates/checklists/agile-checklist.md.hbs +8 -8
- package/dist/templates/epics/epic.md.hbs +8 -2
- package/dist/templates/features/feature.md.hbs +3 -3
- package/dist/templates/rules/cursor/2001-agile-create-epic.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/2002-agile-create-features.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/2003-agile-create-user-story.mdc.hbs +1 -1
- package/dist/templates/stories/user-story.md.hbs +2 -2
- package/dist/templates/tasks/task-list.md.hbs +26 -3
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +12 -5
- package/dist/templates/templates/adrs/adr-general.md.hbs +0 -46
- package/dist/templates/templates/checklists/agile-checklist.md.hbs +0 -49
- package/dist/templates/templates/epics/epic.md.hbs +0 -46
- package/dist/templates/templates/features/feature.md.hbs +0 -42
- package/dist/templates/templates/rules/claude/CLAUDE.md.hbs +0 -63
- package/dist/templates/templates/rules/codex/AGENTS.md.hbs +0 -28
- package/dist/templates/templates/rules/cursor/2000-agile-checklist.mdc.hbs +0 -33
- package/dist/templates/templates/rules/cursor/2001-agile-create-epic.mdc.hbs +0 -35
- package/dist/templates/templates/rules/cursor/2002-agile-create-features.mdc.hbs +0 -35
- package/dist/templates/templates/rules/cursor/2003-agile-create-user-story.mdc.hbs +0 -31
- package/dist/templates/templates/rules/cursor/2100-create-task-list.mdc.hbs +0 -36
- package/dist/templates/templates/rules/cursor/2101-implement-task-list.mdc.hbs +0 -28
- package/dist/templates/templates/stories/gherkin.feature.hbs +0 -13
- package/dist/templates/templates/stories/user-story.md.hbs +0 -28
- package/dist/templates/templates/tasks/task-list.md.hbs +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-service.js","sourceRoot":"","sources":["../../src/services/artifact-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact-service.js","sourceRoot":"","sources":["../../src/services/artifact-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,gBAAgB,GAA2B;IAC/C,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,MAAM;IACX,SAAS,EAAE,YAAY;CACxB,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAuB,EAAE,IAAkB;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,YAAoB,EACpB,IAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAErB,MAAM,SAAS,GAAG,IAAoC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,UAAU,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE;QACjD,GAAG,IAAI;QACP,EAAE;QACF,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE7B,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,cAAc,EAAE,MAAM,QAAQ,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,MAAuB,EACvB,IAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAA2D,EAAE,CAAC;IAE3E,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACZ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;gBAClC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,EAAU;IAEV,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,cAAc,EAAE,MAAM,QAAQ,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,EAAU;IAEV,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,EAAU,EACV,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,EAAU;IAEV,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,MAAuB,EACvB,UAAwB,EACxB,QAAgB,EAChB,SAAuB,EACvB,OAAe,EACf,UAAkB;IAElB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClF,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,OAAO,KAAK,UAAU,QAAQ,MAAM,IAAI,aAAa,MAAM,CAAC;IAE/E,wGAAwG;IACxG,MAAM,kBAAkB,GAAG,8DAA8D,CAAC;IAE1F,IAAI,OAAe,CAAC;IACpB,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,gDAAgD;QAChD,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,iFAAiF;QACjF,MAAM,UAAU,GAA2B;YACzC,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,UAAU;SACjB,CAAC;QACF,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc;YAAE,OAAO;QAE5B,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO;QAE9B,wEAAwE;QACxE,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,eAAe,GAAG,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACxF,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC;YACzB,kCAAkC;YAClC,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC3C,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,2DAA2D;YAC3D,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,GAAG,GAAiC;QACxC,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;KACX,CAAC;IACF,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAuB,EACvB,IAAkB,EAClB,EAAU;IAMV,MAAM,MAAM,GAIR,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE7B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAA6B,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACvE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAA+B,CAAC;gBAC7D,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;oBAC7E,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;wBAClE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAA4B,CAAC;wBACzD,IAAI,MAAM,EAAE,CAAC;4BACX,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;4BACpE,IAAI,IAAI;gCAAE,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;wBACrE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAA+B,CAAC;QAChE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC7E,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAA4B,CAAC;gBACzD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBACpE,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAA4B,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACpE,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
import type { OpenPlanrConfig } from '../models/types.js';
|
|
2
|
+
export interface ChecklistItem {
|
|
3
|
+
index: number;
|
|
4
|
+
activity: string;
|
|
5
|
+
done: boolean;
|
|
6
|
+
lineIndex: number;
|
|
7
|
+
}
|
|
2
8
|
export declare function getChecklistPath(projectDir: string, config: OpenPlanrConfig): string;
|
|
3
9
|
export declare function createChecklist(projectDir: string, config: OpenPlanrConfig): Promise<string>;
|
|
4
10
|
export declare function readChecklist(projectDir: string, config: OpenPlanrConfig): Promise<string | null>;
|
|
5
11
|
export declare function resetChecklist(projectDir: string, config: OpenPlanrConfig): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Parse checklist markdown into structured items.
|
|
14
|
+
* Matches table rows with `[ ]` or `[x]` in the Status column.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseChecklistItems(content: string): ChecklistItem[];
|
|
17
|
+
/**
|
|
18
|
+
* Toggle checklist items by their indices and return updated content.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toggleChecklistItems(content: string, toggleIndices: Set<number>, items: ChecklistItem[]): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get checklist completion progress.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getChecklistProgress(items: ChecklistItem[]): {
|
|
25
|
+
done: number;
|
|
26
|
+
total: number;
|
|
27
|
+
percent: number;
|
|
28
|
+
};
|
|
6
29
|
//# sourceMappingURL=checklist-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checklist-service.d.ts","sourceRoot":"","sources":["../../src/services/checklist-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAEpF;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
1
|
+
{"version":3,"file":"checklist-service.d.ts","sourceRoot":"","sources":["../../src/services/checklist-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAEpF;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,KAAK,EAAE,aAAa,EAAE,GACrB,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAKA"}
|
|
@@ -23,4 +23,48 @@ export async function readChecklist(projectDir, config) {
|
|
|
23
23
|
export async function resetChecklist(projectDir, config) {
|
|
24
24
|
return createChecklist(projectDir, config);
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse checklist markdown into structured items.
|
|
28
|
+
* Matches table rows with `[ ]` or `[x]` in the Status column.
|
|
29
|
+
*/
|
|
30
|
+
export function parseChecklistItems(content) {
|
|
31
|
+
const items = [];
|
|
32
|
+
const lines = content.split('\n');
|
|
33
|
+
for (let i = 0; i < lines.length; i++) {
|
|
34
|
+
const line = lines[i];
|
|
35
|
+
// Match: | <number> | <activity> | <command/artifact> | [x] or [ ] |
|
|
36
|
+
const match = line.match(/^\|\s*(\d+)\s*\|([^|]+)\|[^|]+\|\s*\[(x| )\]\s*\|/);
|
|
37
|
+
if (match) {
|
|
38
|
+
items.push({
|
|
39
|
+
index: parseInt(match[1], 10),
|
|
40
|
+
activity: match[2].trim(),
|
|
41
|
+
done: match[3] === 'x',
|
|
42
|
+
lineIndex: i,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return items;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Toggle checklist items by their indices and return updated content.
|
|
50
|
+
*/
|
|
51
|
+
export function toggleChecklistItems(content, toggleIndices, items) {
|
|
52
|
+
const lines = content.split('\n');
|
|
53
|
+
for (const item of items) {
|
|
54
|
+
if (toggleIndices.has(item.index)) {
|
|
55
|
+
const newStatus = item.done ? '[ ]' : '[x]';
|
|
56
|
+
lines[item.lineIndex] = lines[item.lineIndex].replace(/\[(x| )\]\s*\|$/, `${newStatus} |`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return lines.join('\n');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get checklist completion progress.
|
|
63
|
+
*/
|
|
64
|
+
export function getChecklistProgress(items) {
|
|
65
|
+
const total = items.length;
|
|
66
|
+
const done = items.filter((i) => i.done).length;
|
|
67
|
+
const percent = total > 0 ? Math.round((done / total) * 100) : 0;
|
|
68
|
+
return { done, total, percent };
|
|
69
|
+
}
|
|
26
70
|
//# sourceMappingURL=checklist-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checklist-service.js","sourceRoot":"","sources":["../../src/services/checklist-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"checklist-service.js","sourceRoot":"","sources":["../../src/services/checklist-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AASxD,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,MAAuB;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,MAAuB;IAEvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,mCAAmC,EACnC;QACE,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC7C,EACD,MAAM,CAAC,iBAAiB,CACzB,CAAC;IACF,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,MAAuB;IAEvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAuB;IAEvB,OAAO,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,qEAAqE;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC9E,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACzB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;gBACtB,SAAS,EAAE,CAAC;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,aAA0B,EAC1B,KAAsB;IAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CACnD,iBAAiB,EACjB,GAAG,SAAS,IAAI,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAsB;IAKzD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages API key storage in the user's home directory.
|
|
3
|
+
*
|
|
4
|
+
* Keys are stored in ~/.planr/credentials.json with restricted
|
|
5
|
+
* file permissions (0o600). Environment variables take precedence
|
|
6
|
+
* over stored credentials.
|
|
7
|
+
*/
|
|
8
|
+
interface Credentials {
|
|
9
|
+
[provider: string]: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loadCredentials(): Promise<Credentials>;
|
|
12
|
+
export declare function saveCredential(provider: string, apiKey: string): Promise<void>;
|
|
13
|
+
export declare function clearCredential(provider: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve API key for a provider using the fallback chain:
|
|
16
|
+
* 1. Environment variable (ANTHROPIC_API_KEY, OPENAI_API_KEY)
|
|
17
|
+
* 2. ~/.planr/credentials.json
|
|
18
|
+
* 3. undefined (caller decides how to handle)
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveApiKey(provider: string): Promise<string | undefined>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=credentials-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-service.d.ts","sourceRoot":"","sources":["../../src/services/credentials-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,UAAU,WAAW;IACnB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAS5D;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQrE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAUjF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages API key storage in the user's home directory.
|
|
3
|
+
*
|
|
4
|
+
* Keys are stored in ~/.planr/credentials.json with restricted
|
|
5
|
+
* file permissions (0o600). Environment variables take precedence
|
|
6
|
+
* over stored credentials.
|
|
7
|
+
*/
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import os from 'node:os';
|
|
10
|
+
import fse from 'fs-extra';
|
|
11
|
+
import { ENV_KEY_MAP } from '../ai/types.js';
|
|
12
|
+
const CREDENTIALS_DIR = path.join(os.homedir(), '.planr');
|
|
13
|
+
const CREDENTIALS_FILE = path.join(CREDENTIALS_DIR, 'credentials.json');
|
|
14
|
+
export async function loadCredentials() {
|
|
15
|
+
if (!(await fse.pathExists(CREDENTIALS_FILE)))
|
|
16
|
+
return {};
|
|
17
|
+
try {
|
|
18
|
+
const raw = await fse.readFile(CREDENTIALS_FILE, 'utf-8');
|
|
19
|
+
return JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function saveCredential(provider, apiKey) {
|
|
26
|
+
await fse.ensureDir(CREDENTIALS_DIR);
|
|
27
|
+
const credentials = await loadCredentials();
|
|
28
|
+
credentials[provider] = apiKey;
|
|
29
|
+
await fse.writeFile(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), {
|
|
30
|
+
encoding: 'utf-8',
|
|
31
|
+
mode: 0o600,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function clearCredential(provider) {
|
|
35
|
+
const credentials = await loadCredentials();
|
|
36
|
+
delete credentials[provider];
|
|
37
|
+
await fse.writeFile(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), {
|
|
38
|
+
encoding: 'utf-8',
|
|
39
|
+
mode: 0o600,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve API key for a provider using the fallback chain:
|
|
44
|
+
* 1. Environment variable (ANTHROPIC_API_KEY, OPENAI_API_KEY)
|
|
45
|
+
* 2. ~/.planr/credentials.json
|
|
46
|
+
* 3. undefined (caller decides how to handle)
|
|
47
|
+
*/
|
|
48
|
+
export async function resolveApiKey(provider) {
|
|
49
|
+
// Check environment variable first
|
|
50
|
+
const envVar = ENV_KEY_MAP[provider];
|
|
51
|
+
if (envVar && process.env[envVar]) {
|
|
52
|
+
return process.env[envVar];
|
|
53
|
+
}
|
|
54
|
+
// Fall back to stored credentials
|
|
55
|
+
const credentials = await loadCredentials();
|
|
56
|
+
return credentials[provider];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=credentials-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-service.js","sourceRoot":"","sources":["../../src/services/credentials-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;AAMxE,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,MAAc;IACnE,MAAM,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAErC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAC5C,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IAE/B,MAAM,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC1E,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE7B,MAAM,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC1E,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,mCAAmC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,kCAAkC;IAClC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id-service.d.ts","sourceRoot":"","sources":["../../src/services/id-service.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"id-service.d.ts","sourceRoot":"","sources":["../../src/services/id-service.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB5E;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI1E"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { listFiles } from '../utils/fs.js';
|
|
2
2
|
export async function getNextId(dir, prefix) {
|
|
3
3
|
const files = await listFiles(dir, new RegExp(`^${prefix}-\\d{3}`));
|
|
4
|
-
|
|
4
|
+
const usedNums = new Set();
|
|
5
5
|
for (const file of files) {
|
|
6
6
|
const match = file.match(new RegExp(`^${prefix}-(\\d{3})`));
|
|
7
7
|
if (match) {
|
|
8
|
-
|
|
9
|
-
if (num > maxId)
|
|
10
|
-
maxId = num;
|
|
8
|
+
usedNums.add(parseInt(match[1], 10));
|
|
11
9
|
}
|
|
12
10
|
}
|
|
13
|
-
|
|
11
|
+
// Find the first available gap starting from 1
|
|
12
|
+
let next = 1;
|
|
13
|
+
while (usedNums.has(next)) {
|
|
14
|
+
next++;
|
|
15
|
+
}
|
|
16
|
+
const nextNum = next.toString().padStart(3, '0');
|
|
14
17
|
return `${prefix}-${nextNum}`;
|
|
15
18
|
}
|
|
16
19
|
export function parseId(id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id-service.js","sourceRoot":"","sources":["../../src/services/id-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc;IACzD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC;IACpE,
|
|
1
|
+
{"version":3,"file":"id-service.js","sourceRoot":"","sources":["../../src/services/id-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc;IACzD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC;QAC5D,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,+CAA+C;IAC/C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,EAAE,CAAC;IACT,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC3D,CAAC"}
|
|
@@ -5,5 +5,11 @@ export declare function promptSelect<T extends string>(message: string, choices:
|
|
|
5
5
|
}>): Promise<T>;
|
|
6
6
|
export declare function promptConfirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
7
7
|
export declare function promptEditor(message: string, defaultValue?: string): Promise<string>;
|
|
8
|
+
export declare function promptSecret(message: string): Promise<string>;
|
|
9
|
+
export declare function promptCheckbox<T extends string>(message: string, choices: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
value: T;
|
|
12
|
+
checked?: boolean;
|
|
13
|
+
}>): Promise<T[]>;
|
|
8
14
|
export declare function promptMultiText(message: string, hint?: string): Promise<string[]>;
|
|
9
15
|
//# sourceMappingURL=prompt-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../src/services/prompt-service.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExF;AAED,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1F;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQvF"}
|
|
1
|
+
{"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../src/services/prompt-service.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExF;AAED,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAED,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,EACnD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC5D,OAAO,CAAC,CAAC,EAAE,CAAC,CAEd;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQvF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { input, select, confirm, editor } from '@inquirer/prompts';
|
|
1
|
+
import { input, password, select, confirm, editor, checkbox } from '@inquirer/prompts';
|
|
2
2
|
export async function promptText(message, defaultValue) {
|
|
3
3
|
return input({ message, default: defaultValue });
|
|
4
4
|
}
|
|
@@ -11,6 +11,12 @@ export async function promptConfirm(message, defaultValue = true) {
|
|
|
11
11
|
export async function promptEditor(message, defaultValue) {
|
|
12
12
|
return editor({ message, default: defaultValue });
|
|
13
13
|
}
|
|
14
|
+
export async function promptSecret(message) {
|
|
15
|
+
return password({ message, mask: '*' });
|
|
16
|
+
}
|
|
17
|
+
export async function promptCheckbox(message, choices) {
|
|
18
|
+
return checkbox({ message, choices });
|
|
19
|
+
}
|
|
14
20
|
export async function promptMultiText(message, hint) {
|
|
15
21
|
const result = await input({
|
|
16
22
|
message: `${message}${hint ? ` (${hint})` : ''}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-service.js","sourceRoot":"","sources":["../../src/services/prompt-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-service.js","sourceRoot":"","sources":["../../src/services/prompt-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,YAAqB;IACrE,OAAO,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,OAA0C;IAE1C,OAAO,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,YAAY,GAAG,IAAI;IACtE,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,YAAqB;IACvE,OAAO,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,OAA6D;IAE7D,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,IAAa;IAClE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;KACjD,CAAC,CAAC;IACH,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-service.d.ts","sourceRoot":"","sources":["../../src/services/template-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-service.d.ts","sourceRoot":"","sources":["../../src/services/template-service.ts"],"names":[],"mappings":"AAuBA,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|
|
@@ -2,6 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import Handlebars from 'handlebars';
|
|
3
3
|
import { readFile, fileExists } from '../utils/fs.js';
|
|
4
4
|
import { getTemplatesDir } from '../utils/constants.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
5
6
|
const compiledCache = new Map();
|
|
6
7
|
Handlebars.registerHelper('date', () => new Date().toISOString().split('T')[0]);
|
|
7
8
|
Handlebars.registerHelper('uppercase', (str) => typeof str === 'string' ? str.toUpperCase() : '');
|
|
@@ -10,14 +11,19 @@ Handlebars.registerHelper('checkboxList', (items) => {
|
|
|
10
11
|
return '';
|
|
11
12
|
return items.map((item) => `- [ ] ${item}`).join('\n');
|
|
12
13
|
});
|
|
14
|
+
Handlebars.registerHelper('join', (arr, sep) => Array.isArray(arr) ? arr.join(typeof sep === 'string' ? sep : ', ') : '');
|
|
13
15
|
export async function renderTemplate(templatePath, data, overrideDir) {
|
|
14
16
|
const fullPath = await resolveTemplatePath(templatePath, overrideDir);
|
|
15
17
|
let compiled = compiledCache.get(fullPath);
|
|
16
18
|
if (!compiled) {
|
|
19
|
+
logger.debug(`Compiling template: ${fullPath}`);
|
|
17
20
|
const raw = await readFile(fullPath);
|
|
18
21
|
compiled = Handlebars.compile(raw, { noEscape: true });
|
|
19
22
|
compiledCache.set(fullPath, compiled);
|
|
20
23
|
}
|
|
24
|
+
else {
|
|
25
|
+
logger.debug(`Using cached template: ${fullPath}`);
|
|
26
|
+
}
|
|
21
27
|
return compiled(data);
|
|
22
28
|
}
|
|
23
29
|
async function resolveTemplatePath(templatePath, overrideDir) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-service.js","sourceRoot":"","sources":["../../src/services/template-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"template-service.js","sourceRoot":"","sources":["../../src/services/template-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsC,CAAC;AAEpE,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhF,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CACrD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CACjD,CAAC;AAEF,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,KAAe,EAAE,EAAE;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAa,EAAE,GAAY,EAAE,EAAE,CAChE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CACzE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAAoB,EACpB,IAA6B,EAC7B,WAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,YAAoB,EACpB,WAAoB;IAEpB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC1D,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Agile Development Guide — {{projectName}}
|
|
2
2
|
|
|
3
|
-
> Generated by
|
|
3
|
+
> Generated by Planr on {{date}}
|
|
4
4
|
|
|
5
5
|
## Phase 1: Requirements Analysis
|
|
6
6
|
|
|
7
7
|
| # | Activity | Command | Status |
|
|
8
8
|
|---|----------|---------|--------|
|
|
9
|
-
| 1 | Create Epic | `
|
|
10
|
-
| 2 | Create Features from Epic | `
|
|
11
|
-
| 3 | Create User Stories from Features | `
|
|
9
|
+
| 1 | Create Epic | `planr epic create` | [ ] |
|
|
10
|
+
| 2 | Create Features from Epic | `planr feature create --epic <ID>` | [ ] |
|
|
11
|
+
| 3 | Create User Stories from Features | `planr story create --feature <ID>` | [ ] |
|
|
12
12
|
|
|
13
13
|
## Phase 2: Technical Design
|
|
14
14
|
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
|
|
31
31
|
| # | Activity | Command | Status |
|
|
32
32
|
|---|----------|---------|--------|
|
|
33
|
-
| 10 | Create Task Lists | `
|
|
34
|
-
| 11 | Implement Tasks | `
|
|
33
|
+
| 10 | Create Task Lists | `planr task create --story <ID>` | [ ] |
|
|
34
|
+
| 11 | Implement Tasks | `planr task implement <ID>` | [ ] |
|
|
35
35
|
| 12 | Create Definition of Done | `docs/agile/checklists/` | [ ] |
|
|
36
36
|
|
|
37
37
|
## Phase 5: Solution Review
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
|
|
46
46
|
- Complete each phase before moving to the next
|
|
47
47
|
- All artifacts should be version controlled alongside your code
|
|
48
|
-
- Use `
|
|
49
|
-
- Use `
|
|
48
|
+
- Use `planr status` to see overall progress
|
|
49
|
+
- Use `planr rules generate` to keep AI agent rules in sync with your artifacts
|
|
@@ -23,7 +23,13 @@ project: "{{projectName}}"
|
|
|
23
23
|
{{solutionOverview}}
|
|
24
24
|
|
|
25
25
|
## Success Criteria
|
|
26
|
+
{{#if successCriteriaList}}
|
|
27
|
+
{{#each successCriteriaList}}
|
|
28
|
+
- {{this}}
|
|
29
|
+
{{/each}}
|
|
30
|
+
{{else}}
|
|
26
31
|
{{successCriteria}}
|
|
32
|
+
{{/if}}
|
|
27
33
|
|
|
28
34
|
## Key Features
|
|
29
35
|
{{#each keyFeatures}}
|
|
@@ -39,8 +45,8 @@ project: "{{projectName}}"
|
|
|
39
45
|
## Features
|
|
40
46
|
{{#if featureIds}}
|
|
41
47
|
{{#each featureIds}}
|
|
42
|
-
- [{{this}}](../features/{{this}}.md)
|
|
48
|
+
- [{{this.id}}](../features/{{this.filename}}.md)
|
|
43
49
|
{{/each}}
|
|
44
50
|
{{else}}
|
|
45
|
-
_No features created yet. Run `
|
|
51
|
+
_No features created yet. Run `planr feature create --epic {{id}}` to break this epic into features._
|
|
46
52
|
{{/if}}
|
|
@@ -10,7 +10,7 @@ status: "planning"
|
|
|
10
10
|
|
|
11
11
|
# {{id}}: {{title}}
|
|
12
12
|
|
|
13
|
-
**Epic:** [{{epicId}}](../epics/{{
|
|
13
|
+
**Epic:** [{{epicId}}](../epics/{{epicFilename}}.md)
|
|
14
14
|
|
|
15
15
|
## Overview
|
|
16
16
|
{{overview}}
|
|
@@ -23,10 +23,10 @@ status: "planning"
|
|
|
23
23
|
## User Stories
|
|
24
24
|
{{#if storyIds}}
|
|
25
25
|
{{#each storyIds}}
|
|
26
|
-
- [{{this}}](../stories/{{this}}.md)
|
|
26
|
+
- [{{this.id}}](../stories/{{this.filename}}.md)
|
|
27
27
|
{{/each}}
|
|
28
28
|
{{else}}
|
|
29
|
-
_No user stories created yet. Run `
|
|
29
|
+
_No user stories created yet. Run `planr story create --feature {{id}}` to create user stories._
|
|
30
30
|
{{/if}}
|
|
31
31
|
|
|
32
32
|
## Dependencies
|
|
@@ -29,7 +29,7 @@ Generate the epic document at `{{agilePath}}/epics/` using this structure:
|
|
|
29
29
|
- Sections: Business Value, Target Users, Problem Statement, Solution Overview, Success Criteria, Key Features, Dependencies, Risks
|
|
30
30
|
|
|
31
31
|
### Phase 3: Next Steps
|
|
32
|
-
Recommend creating features from this epic using `
|
|
32
|
+
Recommend creating features from this epic using `planr feature create --epic <ID>`.
|
|
33
33
|
|
|
34
34
|
## Existing Epics
|
|
35
35
|
Check `{{agilePath}}/epics/` for existing epics to avoid duplication.
|
|
@@ -32,4 +32,4 @@ Generate feature documents at `{{agilePath}}/features/` with:
|
|
|
32
32
|
- Cross-references to the epic document
|
|
33
33
|
|
|
34
34
|
### Phase 4: Next Steps
|
|
35
|
-
Recommend creating user stories with `
|
|
35
|
+
Recommend creating user stories with `planr story create --feature <ID>`.
|
|
@@ -28,4 +28,4 @@ Generate two files per story:
|
|
|
28
28
|
2. Gherkin feature file at `{{agilePath}}/stories/US-XXX-gherkin.feature`
|
|
29
29
|
|
|
30
30
|
### Phase 4: Next Steps
|
|
31
|
-
Recommend creating tasks with `
|
|
31
|
+
Recommend creating tasks with `planr task create --story <ID>`.
|
|
@@ -9,7 +9,7 @@ status: "planning"
|
|
|
9
9
|
|
|
10
10
|
# {{id}}: {{title}}
|
|
11
11
|
|
|
12
|
-
**Feature:** [{{featureId}}](../features/{{
|
|
12
|
+
**Feature:** [{{featureId}}](../features/{{featureFilename}}.md)
|
|
13
13
|
|
|
14
14
|
## User Story
|
|
15
15
|
**As a** {{role}}
|
|
@@ -25,4 +25,4 @@ See [{{id}}-gherkin.feature](./{{id}}-gherkin.feature) for detailed Gherkin scen
|
|
|
25
25
|
{{/if}}
|
|
26
26
|
|
|
27
27
|
## Tasks
|
|
28
|
-
_Run `
|
|
28
|
+
_Run `planr task create --story {{id}}` to generate tasks._
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: "{{id}}"
|
|
3
3
|
title: "{{title}}"
|
|
4
|
-
storyId: "{{storyId}}"
|
|
4
|
+
{{#if storyId}}storyId: "{{storyId}}"{{/if}}
|
|
5
|
+
{{#if featureId}}featureId: "{{featureId}}"{{/if}}
|
|
5
6
|
created: "{{date}}"
|
|
6
7
|
updated: "{{date}}"
|
|
7
8
|
status: "pending"
|
|
@@ -9,7 +10,15 @@ status: "pending"
|
|
|
9
10
|
|
|
10
11
|
# {{id}}: {{title}}
|
|
11
12
|
|
|
12
|
-
**User Story:** [{{storyId}}](../stories/{{
|
|
13
|
+
{{#if storyId}}**User Story:** [{{storyId}}](../stories/{{storyFilename}}.md){{/if}}
|
|
14
|
+
{{#if featureId}}**Feature:** [{{featureId}}](../features/{{featureFilename}}.md){{/if}}
|
|
15
|
+
|
|
16
|
+
{{#if artifactSources}}
|
|
17
|
+
## Artifact Sources
|
|
18
|
+
{{#each artifactSources}}
|
|
19
|
+
- **{{this.type}}:** `{{this.path}}`
|
|
20
|
+
{{/each}}
|
|
21
|
+
{{/if}}
|
|
13
22
|
|
|
14
23
|
## Tasks
|
|
15
24
|
|
|
@@ -20,5 +29,19 @@ status: "pending"
|
|
|
20
29
|
{{/each}}
|
|
21
30
|
{{/each}}
|
|
22
31
|
|
|
32
|
+
{{#if acceptanceCriteriaMapping}}
|
|
33
|
+
## Acceptance Criteria Mapping
|
|
34
|
+
{{#each acceptanceCriteriaMapping}}
|
|
35
|
+
- [ ] {{this.criterion}} ({{this.sourceStoryId}}) → Tasks {{join this.taskIds ", "}}
|
|
36
|
+
{{/each}}
|
|
37
|
+
{{/if}}
|
|
38
|
+
|
|
39
|
+
{{#if relevantFiles}}
|
|
40
|
+
## Relevant Files
|
|
41
|
+
{{#each relevantFiles}}
|
|
42
|
+
- `{{this.path}}` — {{this.reason}}
|
|
43
|
+
{{/each}}
|
|
44
|
+
{{/if}}
|
|
45
|
+
|
|
23
46
|
## Notes
|
|
24
|
-
_Mark tasks complete by checking the boxes above, or run `
|
|
47
|
+
_Mark tasks complete by checking the boxes above, or run `planr task implement {{id}}`._
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export declare function setVerbose(enabled: boolean): void;
|
|
2
|
+
export declare function isVerbose(): boolean;
|
|
1
3
|
export declare const logger: {
|
|
2
4
|
info(msg: string): void;
|
|
3
5
|
success(msg: string): void;
|
|
@@ -5,5 +7,6 @@ export declare const logger: {
|
|
|
5
7
|
error(msg: string): void;
|
|
6
8
|
heading(msg: string): void;
|
|
7
9
|
dim(msg: string): void;
|
|
10
|
+
debug(msg: string): void;
|
|
8
11
|
};
|
|
9
12
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,eAAO,MAAM,MAAM;cACP,MAAM;iBAGH,MAAM;cAGT,MAAM;eAGL,MAAM;iBAGJ,MAAM;aAGV,MAAM;eAGJ,MAAM;CAKlB,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
let verboseEnabled = false;
|
|
3
|
+
export function setVerbose(enabled) {
|
|
4
|
+
verboseEnabled = enabled;
|
|
5
|
+
}
|
|
6
|
+
export function isVerbose() {
|
|
7
|
+
return verboseEnabled;
|
|
8
|
+
}
|
|
2
9
|
export const logger = {
|
|
3
10
|
info(msg) {
|
|
4
11
|
console.log(chalk.blue('ℹ'), msg);
|
|
@@ -18,5 +25,10 @@ export const logger = {
|
|
|
18
25
|
dim(msg) {
|
|
19
26
|
console.log(chalk.dim(msg));
|
|
20
27
|
},
|
|
28
|
+
debug(msg) {
|
|
29
|
+
if (verboseEnabled) {
|
|
30
|
+
console.log(chalk.gray(`[DEBUG] ${msg}`));
|
|
31
|
+
}
|
|
32
|
+
},
|
|
21
33
|
};
|
|
22
34
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,GAAW;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,GAAG,CAAC,GAAW;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,GAAW;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,GAAG,CAAC,GAAW;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,GAAW;QACf,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF,CAAC"}
|