@g3nomaly/skills 1.0.0 → 1.0.1
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/dist/cli/adapter.d.ts +19 -16
- package/dist/cli/adapter.d.ts.map +1 -1
- package/dist/cli/adapter.js +39 -63
- package/dist/cli/adapter.js.map +1 -1
- package/dist/cli/commands/add.d.ts +7 -10
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +12 -98
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/ls.d.ts +9 -2
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +21 -5
- package/dist/cli/commands/ls.js.map +1 -1
- package/dist/cli/commands/remove.d.ts +7 -7
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +11 -56
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/source.d.ts +29 -0
- package/dist/cli/commands/source.d.ts.map +1 -0
- package/dist/cli/commands/source.js +31 -0
- package/dist/cli/commands/source.js.map +1 -0
- package/dist/cli/commands/update.d.ts +6 -6
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +9 -43
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +79 -58
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/index.js.map +1 -1
- package/dist/packages/index.d.ts +3 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +3 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/install.d.ts +24 -0
- package/dist/packages/install.d.ts.map +1 -0
- package/dist/packages/install.js +47 -0
- package/dist/packages/install.js.map +1 -0
- package/dist/registry/index.d.ts +4 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +3 -2
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/locate.d.ts +22 -0
- package/dist/registry/locate.d.ts.map +1 -0
- package/dist/registry/locate.js +81 -0
- package/dist/registry/locate.js.map +1 -0
- package/dist/registry/manifest.d.ts +9 -0
- package/dist/registry/manifest.d.ts.map +1 -0
- package/dist/registry/manifest.js +14 -0
- package/dist/registry/manifest.js.map +1 -0
- package/dist/registry/readSkillDir.d.ts +8 -6
- package/dist/registry/readSkillDir.d.ts.map +1 -1
- package/dist/registry/readSkillDir.js +19 -24
- package/dist/registry/readSkillDir.js.map +1 -1
- package/dist/registry/readSource.d.ts +9 -0
- package/dist/registry/readSource.d.ts.map +1 -0
- package/dist/registry/readSource.js +30 -0
- package/dist/registry/readSource.js.map +1 -0
- package/dist/registry/types.d.ts +16 -16
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/types.js +13 -23
- package/dist/registry/types.js.map +1 -1
- package/dist/sources/builtins.d.ts +4 -0
- package/dist/sources/builtins.d.ts.map +1 -0
- package/dist/sources/builtins.js +5 -0
- package/dist/sources/builtins.js.map +1 -0
- package/dist/sources/index.d.ts +2 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +3 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +7 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +20 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +8 -32
- package/dist/cli/commands/hook.d.ts +0 -6
- package/dist/cli/commands/hook.d.ts.map +0 -1
- package/dist/cli/commands/hook.js +0 -18
- package/dist/cli/commands/hook.js.map +0 -1
- package/dist/decisions/index.d.ts +0 -6
- package/dist/decisions/index.d.ts.map +0 -1
- package/dist/decisions/index.js +0 -5
- package/dist/decisions/index.js.map +0 -1
- package/dist/decisions/paths.d.ts +0 -4
- package/dist/decisions/paths.d.ts.map +0 -1
- package/dist/decisions/paths.js +0 -12
- package/dist/decisions/paths.js.map +0 -1
- package/dist/decisions/read.d.ts +0 -18
- package/dist/decisions/read.d.ts.map +0 -1
- package/dist/decisions/read.js +0 -45
- package/dist/decisions/read.js.map +0 -1
- package/dist/decisions/write.d.ts +0 -20
- package/dist/decisions/write.d.ts.map +0 -1
- package/dist/decisions/write.js +0 -48
- package/dist/decisions/write.js.map +0 -1
- package/dist/filetree/ensure.d.ts +0 -7
- package/dist/filetree/ensure.d.ts.map +0 -1
- package/dist/filetree/ensure.js +0 -36
- package/dist/filetree/ensure.js.map +0 -1
- package/dist/filetree/entries.d.ts +0 -9
- package/dist/filetree/entries.d.ts.map +0 -1
- package/dist/filetree/entries.js +0 -49
- package/dist/filetree/entries.js.map +0 -1
- package/dist/filetree/frontmatter.d.ts +0 -16
- package/dist/filetree/frontmatter.d.ts.map +0 -1
- package/dist/filetree/frontmatter.js +0 -43
- package/dist/filetree/frontmatter.js.map +0 -1
- package/dist/filetree/generate.d.ts +0 -16
- package/dist/filetree/generate.d.ts.map +0 -1
- package/dist/filetree/generate.js +0 -62
- package/dist/filetree/generate.js.map +0 -1
- package/dist/filetree/index.d.ts +0 -17
- package/dist/filetree/index.d.ts.map +0 -1
- package/dist/filetree/index.js +0 -13
- package/dist/filetree/index.js.map +0 -1
- package/dist/filetree/levels.d.ts +0 -25
- package/dist/filetree/levels.d.ts.map +0 -1
- package/dist/filetree/levels.js +0 -45
- package/dist/filetree/levels.js.map +0 -1
- package/dist/filetree/locate.d.ts +0 -44
- package/dist/filetree/locate.d.ts.map +0 -1
- package/dist/filetree/locate.js +0 -76
- package/dist/filetree/locate.js.map +0 -1
- package/dist/filetree/paths.d.ts +0 -15
- package/dist/filetree/paths.d.ts.map +0 -1
- package/dist/filetree/paths.js +0 -38
- package/dist/filetree/paths.js.map +0 -1
- package/dist/filetree/read.d.ts +0 -23
- package/dist/filetree/read.d.ts.map +0 -1
- package/dist/filetree/read.js +0 -36
- package/dist/filetree/read.js.map +0 -1
- package/dist/filetree/remove.d.ts +0 -9
- package/dist/filetree/remove.d.ts.map +0 -1
- package/dist/filetree/remove.js +0 -17
- package/dist/filetree/remove.js.map +0 -1
- package/dist/filetree/root.d.ts +0 -9
- package/dist/filetree/root.d.ts.map +0 -1
- package/dist/filetree/root.js +0 -15
- package/dist/filetree/root.js.map +0 -1
- package/dist/filetree/status.d.ts +0 -21
- package/dist/filetree/status.d.ts.map +0 -1
- package/dist/filetree/status.js +0 -55
- package/dist/filetree/status.js.map +0 -1
- package/dist/hooks/cli.d.ts +0 -29
- package/dist/hooks/cli.d.ts.map +0 -1
- package/dist/hooks/cli.js +0 -65
- package/dist/hooks/cli.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -3
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -3
- package/dist/hooks/index.js.map +0 -1
- package/dist/plugins/grilling/.claude-plugin/plugin.json +0 -7
- package/dist/plugins/grilling/skills/domain-modeling/ADR-FORMAT.md +0 -47
- package/dist/plugins/grilling/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
- package/dist/plugins/grilling/skills/domain-modeling/SKILL.md +0 -74
- package/dist/plugins/grilling/skills/domain-modeling/agents/openai.yaml +0 -3
- package/dist/plugins/grilling/skills/grill-me/SKILL.md +0 -7
- package/dist/plugins/grilling/skills/grill-me/agents/openai.yaml +0 -5
- package/dist/plugins/grilling/skills/grill-with-docs/SKILL.md +0 -7
- package/dist/plugins/grilling/skills/grill-with-docs/agents/openai.yaml +0 -5
- package/dist/plugins/grilling/skills/grilling/SKILL.md +0 -12
- package/dist/plugins/grilling/skills/grilling/agents/openai.yaml +0 -3
- package/dist/plugins/speech/.claude-plugin/plugin.json +0 -7
- package/dist/plugins/speech/skills/emphasise/SKILL.md +0 -49
- package/dist/plugins/speech/skills/emphasise/agents/openai.yaml +0 -5
- package/dist/plugins/speech/skills/unslop/SKILL.md +0 -80
- package/dist/plugins/task-manager/.claude-plugin/plugin.json +0 -11
- package/dist/plugins/task-manager/hooks/hooks.json +0 -19
- package/dist/plugins/task-manager/skills/decisions/SKILL.md +0 -39
- package/dist/plugins/task-manager/skills/decisions/agents/openai.yaml +0 -5
- package/dist/plugins/task-manager/skills/decisions/references/usage.md +0 -26
- package/dist/plugins/task-manager/skills/task-manager/SKILL.md +0 -99
- package/dist/plugins/task-manager/skills/vocabulary/SKILL.md +0 -42
- package/dist/plugins/task-manager/skills/vocabulary/agents/openai.yaml +0 -5
- package/dist/plugins/task-manager/skills/vocabulary/references/usage.md +0 -26
- package/dist/plugins/using-hooks/.claude-plugin/plugin.json +0 -7
- package/dist/plugins/using-hooks/skills/hook-post-tool-use/SKILL.md +0 -79
- package/dist/plugins/using-hooks/skills/hook-post-tool-use/agents/openai.yaml +0 -5
- package/dist/plugins/using-hooks/skills/hook-pre-tool-use/SKILL.md +0 -84
- package/dist/plugins/using-hooks/skills/hook-pre-tool-use/agents/openai.yaml +0 -5
- package/dist/plugins/using-hooks/skills/hook-stop/SKILL.md +0 -69
- package/dist/plugins/using-hooks/skills/hook-stop/agents/openai.yaml +0 -5
- package/dist/plugins/using-hooks/skills/hook-user-prompt-submit/SKILL.md +0 -64
- package/dist/plugins/using-hooks/skills/hook-user-prompt-submit/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/.claude-plugin/plugin.json +0 -16
- package/dist/plugins/workflow/agents/reviewer.md +0 -9
- package/dist/plugins/workflow/skills/execute/SKILL.md +0 -21
- package/dist/plugins/workflow/skills/execute/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/orchestrator/SKILL.md +0 -27
- package/dist/plugins/workflow/skills/orchestrator/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/plan/SKILL.md +0 -18
- package/dist/plugins/workflow/skills/plan/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/plan/references/task-frontmatter.md +0 -33
- package/dist/plugins/workflow/skills/review/SKILL.md +0 -25
- package/dist/plugins/workflow/skills/review/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/run/SKILL.md +0 -33
- package/dist/plugins/workflow/skills/run/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/run/references/sub-agents.md +0 -46
- package/dist/plugins/workflow/skills/sync/SKILL.md +0 -18
- package/dist/plugins/workflow/skills/sync/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/worktree/SKILL.md +0 -38
- package/dist/plugins/workflow/skills/worktree/agents/openai.yaml +0 -5
- package/dist/plugins/workflow/skills/worktree/references/git-commands.md +0 -27
- package/dist/plugins/writing/.claude-plugin/plugin.json +0 -7
- package/dist/plugins/writing/skills/writing-great-hooks/SKILL.md +0 -192
- package/dist/plugins/writing/skills/writing-great-hooks/agents/openai.yaml +0 -5
- package/dist/plugins/writing/skills/writing-great-skills/GLOSSARY.md +0 -201
- package/dist/plugins/writing/skills/writing-great-skills/SKILL.md +0 -92
- package/dist/plugins/writing/skills/writing-great-skills/agents/openai.yaml +0 -5
- package/dist/plugins/writing/skills/writing-great-tasks/SKILL.md +0 -136
- package/dist/plugins/writing/skills/writing-great-tasks/agents/openai.yaml +0 -5
- package/dist/plugins/writing/skills/writing-great-tasks/templates/template_task.md +0 -108
- package/dist/registry/loadPackageRegistry.d.ts +0 -14
- package/dist/registry/loadPackageRegistry.d.ts.map +0 -1
- package/dist/registry/loadPackageRegistry.js +0 -59
- package/dist/registry/loadPackageRegistry.js.map +0 -1
- package/dist/registry/userManifest.d.ts +0 -7
- package/dist/registry/userManifest.d.ts.map +0 -1
- package/dist/registry/userManifest.js +0 -21
- package/dist/registry/userManifest.js.map +0 -1
- package/dist/remote/fetch.d.ts +0 -16
- package/dist/remote/fetch.d.ts.map +0 -1
- package/dist/remote/fetch.js +0 -41
- package/dist/remote/fetch.js.map +0 -1
- package/dist/remote/index.d.ts +0 -7
- package/dist/remote/index.d.ts.map +0 -1
- package/dist/remote/index.js +0 -5
- package/dist/remote/index.js.map +0 -1
- package/dist/remote/manifest.d.ts +0 -23
- package/dist/remote/manifest.d.ts.map +0 -1
- package/dist/remote/manifest.js +0 -116
- package/dist/remote/manifest.js.map +0 -1
- package/dist/remote/registry.d.ts +0 -18
- package/dist/remote/registry.d.ts.map +0 -1
- package/dist/remote/registry.js +0 -58
- package/dist/remote/registry.js.map +0 -1
- package/dist/schemas/config.d.ts +0 -3
- package/dist/schemas/config.d.ts.map +0 -1
- package/dist/schemas/config.js +0 -3
- package/dist/schemas/config.js.map +0 -1
- package/dist/schemas/decision.d.ts +0 -43
- package/dist/schemas/decision.d.ts.map +0 -1
- package/dist/schemas/decision.js +0 -24
- package/dist/schemas/decision.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -17
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/index.js +0 -10
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/phase.d.ts +0 -46
- package/dist/schemas/phase.d.ts.map +0 -1
- package/dist/schemas/phase.js +0 -16
- package/dist/schemas/phase.js.map +0 -1
- package/dist/schemas/plan.d.ts +0 -44
- package/dist/schemas/plan.d.ts.map +0 -1
- package/dist/schemas/plan.js +0 -15
- package/dist/schemas/plan.js.map +0 -1
- package/dist/schemas/primitives.d.ts +0 -38
- package/dist/schemas/primitives.d.ts.map +0 -1
- package/dist/schemas/primitives.js +0 -33
- package/dist/schemas/primitives.js.map +0 -1
- package/dist/schemas/task.d.ts +0 -70
- package/dist/schemas/task.d.ts.map +0 -1
- package/dist/schemas/task.js +0 -19
- package/dist/schemas/task.js.map +0 -1
- package/dist/schemas/term.d.ts +0 -17
- package/dist/schemas/term.d.ts.map +0 -1
- package/dist/schemas/term.js +0 -22
- package/dist/schemas/term.js.map +0 -1
- package/dist/schemas/validation.d.ts +0 -24
- package/dist/schemas/validation.d.ts.map +0 -1
- package/dist/schemas/validation.js +0 -39
- package/dist/schemas/validation.js.map +0 -1
- package/dist/task-manager/hooks/add-decision.d.ts +0 -2
- package/dist/task-manager/hooks/add-decision.d.ts.map +0 -1
- package/dist/task-manager/hooks/add-decision.js +0 -19
- package/dist/task-manager/hooks/add-decision.js.map +0 -1
- package/dist/task-manager/hooks/cleanup.d.ts +0 -2
- package/dist/task-manager/hooks/cleanup.d.ts.map +0 -1
- package/dist/task-manager/hooks/cleanup.js +0 -27
- package/dist/task-manager/hooks/cleanup.js.map +0 -1
- package/dist/task-manager/hooks/get-decision.d.ts +0 -2
- package/dist/task-manager/hooks/get-decision.d.ts.map +0 -1
- package/dist/task-manager/hooks/get-decision.js +0 -11
- package/dist/task-manager/hooks/get-decision.js.map +0 -1
- package/dist/task-manager/hooks/get-entry.d.ts +0 -2
- package/dist/task-manager/hooks/get-entry.d.ts.map +0 -1
- package/dist/task-manager/hooks/get-entry.js +0 -20
- package/dist/task-manager/hooks/get-entry.js.map +0 -1
- package/dist/task-manager/hooks/get-term.d.ts +0 -2
- package/dist/task-manager/hooks/get-term.d.ts.map +0 -1
- package/dist/task-manager/hooks/get-term.js +0 -13
- package/dist/task-manager/hooks/get-term.js.map +0 -1
- package/dist/task-manager/hooks/guard-tree.d.ts +0 -2
- package/dist/task-manager/hooks/guard-tree.d.ts.map +0 -1
- package/dist/task-manager/hooks/guard-tree.js +0 -63
- package/dist/task-manager/hooks/guard-tree.js.map +0 -1
- package/dist/task-manager/hooks/index.d.ts +0 -4
- package/dist/task-manager/hooks/index.d.ts.map +0 -1
- package/dist/task-manager/hooks/index.js +0 -32
- package/dist/task-manager/hooks/index.js.map +0 -1
- package/dist/task-manager/hooks/list-decisions.d.ts +0 -2
- package/dist/task-manager/hooks/list-decisions.d.ts.map +0 -1
- package/dist/task-manager/hooks/list-decisions.js +0 -20
- package/dist/task-manager/hooks/list-decisions.js.map +0 -1
- package/dist/task-manager/hooks/list-entries.d.ts +0 -2
- package/dist/task-manager/hooks/list-entries.d.ts.map +0 -1
- package/dist/task-manager/hooks/list-entries.js +0 -19
- package/dist/task-manager/hooks/list-entries.js.map +0 -1
- package/dist/task-manager/hooks/list-terms.d.ts +0 -2
- package/dist/task-manager/hooks/list-terms.d.ts.map +0 -1
- package/dist/task-manager/hooks/list-terms.js +0 -8
- package/dist/task-manager/hooks/list-terms.js.map +0 -1
- package/dist/task-manager/hooks/next-entry.d.ts +0 -2
- package/dist/task-manager/hooks/next-entry.d.ts.map +0 -1
- package/dist/task-manager/hooks/next-entry.js +0 -23
- package/dist/task-manager/hooks/next-entry.js.map +0 -1
- package/dist/task-manager/hooks/remove-term.d.ts +0 -2
- package/dist/task-manager/hooks/remove-term.d.ts.map +0 -1
- package/dist/task-manager/hooks/remove-term.js +0 -15
- package/dist/task-manager/hooks/remove-term.js.map +0 -1
- package/dist/task-manager/hooks/set-state.d.ts +0 -2
- package/dist/task-manager/hooks/set-state.d.ts.map +0 -1
- package/dist/task-manager/hooks/set-state.js +0 -15
- package/dist/task-manager/hooks/set-state.js.map +0 -1
- package/dist/task-manager/hooks/set-term.d.ts +0 -2
- package/dist/task-manager/hooks/set-term.d.ts.map +0 -1
- package/dist/task-manager/hooks/set-term.js +0 -27
- package/dist/task-manager/hooks/set-term.js.map +0 -1
- package/dist/task-manager/hooks/sync-tree.d.ts +0 -2
- package/dist/task-manager/hooks/sync-tree.d.ts.map +0 -1
- package/dist/task-manager/hooks/sync-tree.js +0 -28
- package/dist/task-manager/hooks/sync-tree.js.map +0 -1
- package/dist/task-manager/index.d.ts +0 -2
- package/dist/task-manager/index.d.ts.map +0 -1
- package/dist/task-manager/index.js +0 -3
- package/dist/task-manager/index.js.map +0 -1
- package/dist/vocabulary/file.d.ts +0 -15
- package/dist/vocabulary/file.d.ts.map +0 -1
- package/dist/vocabulary/file.js +0 -80
- package/dist/vocabulary/file.js.map +0 -1
- package/dist/vocabulary/index.d.ts +0 -4
- package/dist/vocabulary/index.d.ts.map +0 -1
- package/dist/vocabulary/index.js +0 -4
- package/dist/vocabulary/index.js.map +0 -1
- package/dist/vocabulary/match.d.ts +0 -22
- package/dist/vocabulary/match.d.ts.map +0 -1
- package/dist/vocabulary/match.js +0 -31
- package/dist/vocabulary/match.js.map +0 -1
- package/dist/workflow/gates.d.ts +0 -24
- package/dist/workflow/gates.d.ts.map +0 -1
- package/dist/workflow/gates.js +0 -34
- package/dist/workflow/gates.js.map +0 -1
- package/dist/workflow/hooks/advance-step.d.ts +0 -2
- package/dist/workflow/hooks/advance-step.d.ts.map +0 -1
- package/dist/workflow/hooks/advance-step.js +0 -51
- package/dist/workflow/hooks/advance-step.js.map +0 -1
- package/dist/workflow/hooks/current-step.d.ts +0 -2
- package/dist/workflow/hooks/current-step.d.ts.map +0 -1
- package/dist/workflow/hooks/current-step.js +0 -24
- package/dist/workflow/hooks/current-step.js.map +0 -1
- package/dist/workflow/hooks/index.d.ts +0 -4
- package/dist/workflow/hooks/index.d.ts.map +0 -1
- package/dist/workflow/hooks/index.js +0 -10
- package/dist/workflow/hooks/index.js.map +0 -1
- package/dist/workflow/hooks/ready-phases.d.ts +0 -2
- package/dist/workflow/hooks/ready-phases.d.ts.map +0 -1
- package/dist/workflow/hooks/ready-phases.js +0 -15
- package/dist/workflow/hooks/ready-phases.js.map +0 -1
- package/dist/workflow/index.d.ts +0 -8
- package/dist/workflow/index.d.ts.map +0 -1
- package/dist/workflow/index.js +0 -6
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/phase.d.ts +0 -16
- package/dist/workflow/phase.d.ts.map +0 -1
- package/dist/workflow/phase.js +0 -22
- package/dist/workflow/phase.js.map +0 -1
- package/dist/workflow/steps.d.ts +0 -15
- package/dist/workflow/steps.d.ts.map +0 -1
- package/dist/workflow/steps.js +0 -32
- package/dist/workflow/steps.js.map +0 -1
package/dist/decisions/read.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/decisions/read.ts
|
|
2
|
-
import { readdir } from "node:fs/promises";
|
|
3
|
-
import { FileValidationError, parseFile } from "../schemas/validation";
|
|
4
|
-
import { DecisionSchema } from "../schemas/decision";
|
|
5
|
-
import { MARKDOWN } from "../filetree/levels";
|
|
6
|
-
import { readDocument } from "../filetree/frontmatter";
|
|
7
|
-
import { decisionPathFor, decisionsDirFor } from "./paths";
|
|
8
|
-
/** Ids of a plan's decisions, in numbered order. A plan with no `decisions/` folder has none. */
|
|
9
|
-
export async function listDecisionIds(planDir) {
|
|
10
|
-
let files;
|
|
11
|
-
try {
|
|
12
|
-
files = await readdir(decisionsDirFor(planDir), { withFileTypes: true });
|
|
13
|
-
}
|
|
14
|
-
catch (error) {
|
|
15
|
-
if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT")
|
|
16
|
-
return [];
|
|
17
|
-
throw error;
|
|
18
|
-
}
|
|
19
|
-
return files
|
|
20
|
-
.filter((entry) => entry.isFile() && entry.name.endsWith(MARKDOWN))
|
|
21
|
-
.map((entry) => entry.name.slice(0, -MARKDOWN.length))
|
|
22
|
-
.sort((a, b) => a.localeCompare(b));
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Reads one decision of a plan and checks it against its schema.
|
|
26
|
-
*
|
|
27
|
-
* @param id file name without extension, e.g. `0001-use-jwt`
|
|
28
|
-
* @throws FileValidationError when a field fails its schema, or when the `id`
|
|
29
|
-
* inside the file disagrees with the file it was read from
|
|
30
|
-
*/
|
|
31
|
-
export async function readDecision(planDir, id) {
|
|
32
|
-
const file = decisionPathFor(planDir, id);
|
|
33
|
-
if (!(await Bun.file(file).exists())) {
|
|
34
|
-
throw new Error(`no decision "${id}" in ${decisionsDirFor(planDir)}`);
|
|
35
|
-
}
|
|
36
|
-
const { frontmatter, body } = await readDocument(file);
|
|
37
|
-
const meta = parseFile(DecisionSchema, file, frontmatter);
|
|
38
|
-
if (meta.id !== id) {
|
|
39
|
-
throw new FileValidationError(file, [
|
|
40
|
-
{ field: "id", message: `is "${meta.id}" but it was read as "${id}"` },
|
|
41
|
-
]);
|
|
42
|
-
}
|
|
43
|
-
return { file, meta, body };
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=read.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/decisions/read.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAiB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAS3D,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,IAAI,KAAK,CAAC;IAEV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzG,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAClE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACrD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,EAAU;IAC5D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,QAAQ,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAE1D,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE;YAClC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,yBAAyB,EAAE,GAAG,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type DecisionStatus } from "../schemas/decision";
|
|
2
|
-
import { type DecisionDocument } from "./read";
|
|
3
|
-
/** What `addDecision` needs from its caller; the id and date are worked out here. */
|
|
4
|
-
export interface NewDecision {
|
|
5
|
-
title: string;
|
|
6
|
-
status: DecisionStatus;
|
|
7
|
-
/** Id of the earlier decision this one replaces; that file is moved to `superseded` */
|
|
8
|
-
supersedes?: string;
|
|
9
|
-
body: string;
|
|
10
|
-
}
|
|
11
|
-
/** Next free id in a plan: one above the highest number in use, then the title as a slug. */
|
|
12
|
-
export declare function nextDecisionId(planDir: string, title: string): Promise<string>;
|
|
13
|
-
/**
|
|
14
|
-
* Writes a new decision file into a plan, numbered after the ones already
|
|
15
|
-
* there and dated today. Called by the `add-decision` hook.
|
|
16
|
-
*
|
|
17
|
-
* @throws Error when `supersedes` names no decision of this plan
|
|
18
|
-
*/
|
|
19
|
-
export declare function addDecision(planDir: string, decision: NewDecision): Promise<DecisionDocument>;
|
|
20
|
-
//# sourceMappingURL=write.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/decisions/write.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGhG,OAAO,EAAiC,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE9E,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AASD,6FAA6F;AAC7F,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOpF;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwBnG"}
|
package/dist/decisions/write.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/decisions/write.ts
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
|
-
import { parseFile } from "../schemas/validation";
|
|
4
|
-
import { DecisionSchema, DecisionStatusSchema } from "../schemas/decision";
|
|
5
|
-
import { setStatusLine } from "../filetree/status";
|
|
6
|
-
import { decisionPathFor, decisionsDirFor } from "./paths";
|
|
7
|
-
import { listDecisionIds, readDecision } from "./read";
|
|
8
|
-
function slugFor(title) {
|
|
9
|
-
const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
10
|
-
if (slug === "")
|
|
11
|
-
throw new Error(`title "${title}" has no letters or digits to build an id from`);
|
|
12
|
-
return slug;
|
|
13
|
-
}
|
|
14
|
-
/** Next free id in a plan: one above the highest number in use, then the title as a slug. */
|
|
15
|
-
export async function nextDecisionId(planDir, title) {
|
|
16
|
-
const numbers = (await listDecisionIds(planDir)).map((id) => Number.parseInt(id.slice(0, 4), 10));
|
|
17
|
-
const next = Math.max(0, ...numbers.filter((n) => Number.isInteger(n))) + 1;
|
|
18
|
-
if (next > 9999)
|
|
19
|
-
throw new Error(`${decisionsDirFor(planDir)} has used every decision number`);
|
|
20
|
-
return `${String(next).padStart(4, "0")}-${slugFor(title)}`;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Writes a new decision file into a plan, numbered after the ones already
|
|
24
|
-
* there and dated today. Called by the `add-decision` hook.
|
|
25
|
-
*
|
|
26
|
-
* @throws Error when `supersedes` names no decision of this plan
|
|
27
|
-
*/
|
|
28
|
-
export async function addDecision(planDir, decision) {
|
|
29
|
-
const replaced = decision.supersedes === undefined
|
|
30
|
-
? undefined
|
|
31
|
-
: await readDecision(planDir, decision.supersedes);
|
|
32
|
-
const id = await nextDecisionId(planDir, decision.title);
|
|
33
|
-
const file = decisionPathFor(planDir, id);
|
|
34
|
-
const meta = parseFile(DecisionSchema, file, {
|
|
35
|
-
id,
|
|
36
|
-
title: decision.title,
|
|
37
|
-
status: decision.status,
|
|
38
|
-
date: new Date().toISOString().slice(0, 10),
|
|
39
|
-
...(decision.supersedes === undefined ? {} : { supersedes: decision.supersedes }),
|
|
40
|
-
});
|
|
41
|
-
await mkdir(decisionsDirFor(planDir), { recursive: true });
|
|
42
|
-
await Bun.write(file, `---\n${Bun.YAML.stringify(meta, null, 2).trimEnd()}\n---\n\n${decision.body.trim()}\n`);
|
|
43
|
-
if (replaced !== undefined && replaced.meta.status !== "superseded") {
|
|
44
|
-
await setStatusLine(replaced.file, "superseded", DecisionStatusSchema);
|
|
45
|
-
}
|
|
46
|
-
return readDecision(planDir, id);
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=write.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/decisions/write.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates every folder and index file the tree under `root` is missing, and
|
|
3
|
-
* leaves everything that already exists untouched. A hook can call this on
|
|
4
|
-
* every run.
|
|
5
|
-
*/
|
|
6
|
-
export declare function ensureTree(root: string): Promise<void>;
|
|
7
|
-
//# sourceMappingURL=ensure.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure.d.ts","sourceRoot":"","sources":["../../src/filetree/ensure.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D"}
|
package/dist/filetree/ensure.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/filetree/ensure.ts
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
|
-
import { resolve } from "node:path";
|
|
4
|
-
import { CHILD_LEVEL } from "./levels";
|
|
5
|
-
import { childDirFor, indexPathFor, tasksDirFor } from "./paths";
|
|
6
|
-
import { listEntryNames } from "./entries";
|
|
7
|
-
import { generateIndex } from "./generate";
|
|
8
|
-
/**
|
|
9
|
-
* Creates every folder and index file the tree under `root` is missing, and
|
|
10
|
-
* leaves everything that already exists untouched. A hook can call this on
|
|
11
|
-
* every run.
|
|
12
|
-
*/
|
|
13
|
-
export async function ensureTree(root) {
|
|
14
|
-
await ensureFrom(resolve(root), "root");
|
|
15
|
-
}
|
|
16
|
-
/** `dir` is absolute; `childDirFor` keeps it that way down the walk. */
|
|
17
|
-
async function ensureFrom(dir, level) {
|
|
18
|
-
await mkdir(dir, { recursive: true });
|
|
19
|
-
if (level === "phase")
|
|
20
|
-
await mkdir(tasksDirFor(dir), { recursive: true });
|
|
21
|
-
await ensureIndexFile(dir, level);
|
|
22
|
-
const child = CHILD_LEVEL[level];
|
|
23
|
-
if (child === null)
|
|
24
|
-
return;
|
|
25
|
-
for (const name of await listEntryNames(dir, level)) {
|
|
26
|
-
await ensureFrom(childDirFor(dir, name), child);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/** Builds a missing index from the folder it belongs to; keeps an existing one. */
|
|
30
|
-
async function ensureIndexFile(dir, level) {
|
|
31
|
-
const exists = await Bun.file(indexPathFor(dir, level)).exists();
|
|
32
|
-
if (exists)
|
|
33
|
-
return;
|
|
34
|
-
await generateIndex(dir, level);
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=ensure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure.js","sourceRoot":"","sources":["../../src/filetree/ensure.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,KAAgB;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,OAAO;QAAE,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAElC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAE3B,KAAK,MAAM,IAAI,IAAI,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,KAAgB;IAC1D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,IAAI,MAAM;QAAE,OAAO;IAEnB,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type TreeLevel } from "./levels";
|
|
2
|
-
/**
|
|
3
|
-
* Names of the entries of a folder at `level`, alphabetical — the order the
|
|
4
|
-
* queue runs in. A folder only counts as an entry once it holds its own
|
|
5
|
-
* `<name>.md`, so a directory left behind by hand is skipped rather than
|
|
6
|
-
* reported as a broken plan.
|
|
7
|
-
*/
|
|
8
|
-
export declare function listEntryNames(dir: string, level: TreeLevel): Promise<string[]>;
|
|
9
|
-
//# sourceMappingURL=entries.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/filetree/entries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAGhE;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMrF"}
|
package/dist/filetree/entries.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/filetree/entries.ts
|
|
2
|
-
import { readdir } from "node:fs/promises";
|
|
3
|
-
import { ENTRY_KIND, MARKDOWN } from "./levels";
|
|
4
|
-
import { entryPathFor, tasksDirFor } from "./paths";
|
|
5
|
-
/**
|
|
6
|
-
* Names of the entries of a folder at `level`, alphabetical — the order the
|
|
7
|
-
* queue runs in. A folder only counts as an entry once it holds its own
|
|
8
|
-
* `<name>.md`, so a directory left behind by hand is skipped rather than
|
|
9
|
-
* reported as a broken plan.
|
|
10
|
-
*/
|
|
11
|
-
export async function listEntryNames(dir, level) {
|
|
12
|
-
const names = ENTRY_KIND[level] === "folder"
|
|
13
|
-
? await listFolderEntries(dir, level)
|
|
14
|
-
: await listTaskEntries(dir);
|
|
15
|
-
return names.sort((a, b) => a.localeCompare(b));
|
|
16
|
-
}
|
|
17
|
-
async function listFolderEntries(dir, level) {
|
|
18
|
-
const names = [];
|
|
19
|
-
for (const entry of await readdir(dir, { withFileTypes: true })) {
|
|
20
|
-
if (!entry.isDirectory())
|
|
21
|
-
continue;
|
|
22
|
-
const described = await Bun.file(entryPathFor(dir, level, entry.name)).exists();
|
|
23
|
-
if (described)
|
|
24
|
-
names.push(entry.name);
|
|
25
|
-
}
|
|
26
|
-
return names;
|
|
27
|
-
}
|
|
28
|
-
/** A phase with no `tasks/` folder yet has no tasks, which is not an error. */
|
|
29
|
-
async function listTaskEntries(phaseDir) {
|
|
30
|
-
let files;
|
|
31
|
-
try {
|
|
32
|
-
files = await readdir(tasksDirFor(phaseDir), { withFileTypes: true });
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
if (isMissing(error))
|
|
36
|
-
return [];
|
|
37
|
-
throw error;
|
|
38
|
-
}
|
|
39
|
-
return files
|
|
40
|
-
.filter((entry) => entry.isFile() && entry.name.endsWith(MARKDOWN))
|
|
41
|
-
.map((entry) => entry.name.slice(0, -MARKDOWN.length));
|
|
42
|
-
}
|
|
43
|
-
function isMissing(error) {
|
|
44
|
-
return (typeof error === "object" &&
|
|
45
|
-
error !== null &&
|
|
46
|
-
"code" in error &&
|
|
47
|
-
error.code === "ENOENT");
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=entries.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/filetree/entries.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,KAAgB;IAChE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ;QAC1C,CAAC,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;QACrC,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,KAAgB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QAEnC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChF,IAAI,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,IAAI,KAAK,CAAC;IAEV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAClE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,QAAQ,CACxB,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/** A `.md` file split at its closing fence. */
|
|
2
|
-
export interface Document {
|
|
3
|
-
frontmatter: unknown;
|
|
4
|
-
/** Everything after the closing fence, leading blank lines trimmed. */
|
|
5
|
-
body: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Reads a `.md` file as its frontmatter mapping plus the prose under it.
|
|
9
|
-
*
|
|
10
|
-
* @throws FileValidationError when the file has no frontmatter block or the
|
|
11
|
-
* block is not a YAML mapping
|
|
12
|
-
*/
|
|
13
|
-
export declare function readDocument(file: string): Promise<Document>;
|
|
14
|
-
/** Reads only the frontmatter mapping of a `.md` file. */
|
|
15
|
-
export declare function readFrontmatter(file: string): Promise<unknown>;
|
|
16
|
-
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/filetree/frontmatter.ts"],"names":[],"mappings":"AAKA,+CAA+C;AAC/C,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmBlE;AAED,0DAA0D;AAC1D,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/filetree/frontmatter.ts
|
|
2
|
-
import { FileValidationError } from "../schemas/validation";
|
|
3
|
-
const FENCE = "---";
|
|
4
|
-
/**
|
|
5
|
-
* Reads a `.md` file as its frontmatter mapping plus the prose under it.
|
|
6
|
-
*
|
|
7
|
-
* @throws FileValidationError when the file has no frontmatter block or the
|
|
8
|
-
* block is not a YAML mapping
|
|
9
|
-
*/
|
|
10
|
-
export async function readDocument(file) {
|
|
11
|
-
const text = await Bun.file(file).text();
|
|
12
|
-
const split = splitAtFences(text);
|
|
13
|
-
if (split === null) {
|
|
14
|
-
throw new FileValidationError(file, [
|
|
15
|
-
{ field: "(frontmatter)", message: `no ${FENCE} block at the top of the file` },
|
|
16
|
-
]);
|
|
17
|
-
}
|
|
18
|
-
const frontmatter = Bun.YAML.parse(split.block);
|
|
19
|
-
if (typeof frontmatter !== "object" || frontmatter === null || Array.isArray(frontmatter)) {
|
|
20
|
-
throw new FileValidationError(file, [
|
|
21
|
-
{ field: "(frontmatter)", message: "block is not a YAML mapping" },
|
|
22
|
-
]);
|
|
23
|
-
}
|
|
24
|
-
return { frontmatter, body: split.body };
|
|
25
|
-
}
|
|
26
|
-
/** Reads only the frontmatter mapping of a `.md` file. */
|
|
27
|
-
export async function readFrontmatter(file) {
|
|
28
|
-
return (await readDocument(file)).frontmatter;
|
|
29
|
-
}
|
|
30
|
-
/** Text inside the fences and text after them, or `null` when there are none. */
|
|
31
|
-
function splitAtFences(text) {
|
|
32
|
-
const lines = text.split("\n");
|
|
33
|
-
if (lines[0]?.trimEnd() !== FENCE)
|
|
34
|
-
return null;
|
|
35
|
-
const closing = lines.findIndex((line, index) => index > 0 && line.trimEnd() === FENCE);
|
|
36
|
-
if (closing === -1)
|
|
37
|
-
return null;
|
|
38
|
-
return {
|
|
39
|
-
block: lines.slice(1, closing).join("\n"),
|
|
40
|
-
body: lines.slice(closing + 1).join("\n").replace(/^\n+/, ""),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/filetree/frontmatter.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,KAAK,GAAG,KAAK,CAAC;AASpB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE;YAClC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,+BAA+B,EAAE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE;YAClC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,6BAA6B,EAAE;SACnE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAChD,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC;IACxF,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type TreeLevel } from "./levels";
|
|
2
|
-
/**
|
|
3
|
-
* Rebuilds one folder's index from the entries directly under it, replacing
|
|
4
|
-
* whatever was there. Plans and phases are read from `<name>/<name>.md`, tasks
|
|
5
|
-
* from `tasks/<id>.md`, so the result only depends on that one folder.
|
|
6
|
-
*
|
|
7
|
-
* @throws FileValidationError when an entry fails its schema or its identifier
|
|
8
|
-
* does not match the folder or file it was read from
|
|
9
|
-
*/
|
|
10
|
-
export declare function generateIndex(dir: string, level: TreeLevel): Promise<void>;
|
|
11
|
-
/**
|
|
12
|
-
* Rebuilds every index in the tree, from the root folder down.
|
|
13
|
-
* Run `ensureTree` first — a plan or phase without its folder throws here.
|
|
14
|
-
*/
|
|
15
|
-
export declare function generateTree(root: string): Promise<void>;
|
|
16
|
-
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/filetree/generate.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAKvD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhF;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/filetree/generate.ts
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
import { parseFile } from "../schemas/validation";
|
|
4
|
-
import { PlanIndexSchema } from "../schemas/plan";
|
|
5
|
-
import { PhaseIndexSchema } from "../schemas/phase";
|
|
6
|
-
import { TaskIndexSchema } from "../schemas/task";
|
|
7
|
-
import { CHILD_LEVEL } from "./levels";
|
|
8
|
-
import { childDirFor, indexPathFor } from "./paths";
|
|
9
|
-
import { listEntryNames } from "./entries";
|
|
10
|
-
import { readEntry } from "./read";
|
|
11
|
-
/**
|
|
12
|
-
* Rebuilds one folder's index from the entries directly under it, replacing
|
|
13
|
-
* whatever was there. Plans and phases are read from `<name>/<name>.md`, tasks
|
|
14
|
-
* from `tasks/<id>.md`, so the result only depends on that one folder.
|
|
15
|
-
*
|
|
16
|
-
* @throws FileValidationError when an entry fails its schema or its identifier
|
|
17
|
-
* does not match the folder or file it was read from
|
|
18
|
-
*/
|
|
19
|
-
export async function generateIndex(dir, level) {
|
|
20
|
-
switch (level) {
|
|
21
|
-
case "root":
|
|
22
|
-
await writeIndex(dir, level, PlanIndexSchema, { plans: await collect(dir, level) });
|
|
23
|
-
return;
|
|
24
|
-
case "plan":
|
|
25
|
-
await writeIndex(dir, level, PhaseIndexSchema, { phases: await collect(dir, level) });
|
|
26
|
-
return;
|
|
27
|
-
case "phase":
|
|
28
|
-
await writeIndex(dir, level, TaskIndexSchema, { tasks: await collect(dir, level) });
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Rebuilds every index in the tree, from the root folder down.
|
|
34
|
-
* Run `ensureTree` first — a plan or phase without its folder throws here.
|
|
35
|
-
*/
|
|
36
|
-
export async function generateTree(root) {
|
|
37
|
-
await generateFrom(resolve(root), "root");
|
|
38
|
-
}
|
|
39
|
-
/** `dir` is absolute; `childDirFor` keeps it that way down the walk. */
|
|
40
|
-
async function generateFrom(dir, level) {
|
|
41
|
-
await generateIndex(dir, level);
|
|
42
|
-
const child = CHILD_LEVEL[level];
|
|
43
|
-
if (child === null)
|
|
44
|
-
return;
|
|
45
|
-
for (const name of await listEntryNames(dir, level)) {
|
|
46
|
-
await generateFrom(childDirFor(dir, name), child);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/** Reads and validates every entry of `dir`, in queue order. */
|
|
50
|
-
async function collect(dir, level) {
|
|
51
|
-
const entries = [];
|
|
52
|
-
for (const name of await listEntryNames(dir, level)) {
|
|
53
|
-
entries.push((await readEntry(dir, level, name)).meta);
|
|
54
|
-
}
|
|
55
|
-
return entries;
|
|
56
|
-
}
|
|
57
|
-
async function writeIndex(dir, level, schema, index) {
|
|
58
|
-
const file = indexPathFor(dir, level);
|
|
59
|
-
const validated = parseFile(schema, file, index);
|
|
60
|
-
await Bun.write(file, `${JSON.stringify(validated, null, 2)}\n`);
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/filetree/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/filetree/index.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export { LEVELS, INDEX_FILES, CHILD_LEVEL, ENTRY_KIND, ENTRY_TYPE, ID_FIELD, TASKS_DIR, MARKDOWN, } from "./levels";
|
|
2
|
-
export type { TreeLevel } from "./levels";
|
|
3
|
-
export { indexPathFor, entryPathFor, childDirFor, tasksDirFor, levelFor } from "./paths";
|
|
4
|
-
export { listEntryNames } from "./entries";
|
|
5
|
-
export { readDocument, readFrontmatter } from "./frontmatter";
|
|
6
|
-
export type { Document } from "./frontmatter";
|
|
7
|
-
export { readEntry } from "./read";
|
|
8
|
-
export type { EntryOf, EntryDocument } from "./read";
|
|
9
|
-
export { listAllEntries, locateEntry, locateEntryOfType, resolveParent } from "./locate";
|
|
10
|
-
export type { EntryLocation, ParentFolder } from "./locate";
|
|
11
|
-
export { setEntryStatus, setStatusLine } from "./status";
|
|
12
|
-
export type { StatusChange } from "./status";
|
|
13
|
-
export { removeEntry } from "./remove";
|
|
14
|
-
export { resolveFiletreeRoot } from "./root";
|
|
15
|
-
export { ensureTree } from "./ensure";
|
|
16
|
-
export { generateIndex, generateTree } from "./generate";
|
|
17
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filetree/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/filetree/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/filetree/index.ts
|
|
2
|
-
export { LEVELS, INDEX_FILES, CHILD_LEVEL, ENTRY_KIND, ENTRY_TYPE, ID_FIELD, TASKS_DIR, MARKDOWN, } from "./levels";
|
|
3
|
-
export { indexPathFor, entryPathFor, childDirFor, tasksDirFor, levelFor } from "./paths";
|
|
4
|
-
export { listEntryNames } from "./entries";
|
|
5
|
-
export { readDocument, readFrontmatter } from "./frontmatter";
|
|
6
|
-
export { readEntry } from "./read";
|
|
7
|
-
export { listAllEntries, locateEntry, locateEntryOfType, resolveParent } from "./locate";
|
|
8
|
-
export { setEntryStatus, setStatusLine } from "./status";
|
|
9
|
-
export { removeEntry } from "./remove";
|
|
10
|
-
export { resolveFiletreeRoot } from "./root";
|
|
11
|
-
export { ensureTree } from "./ensure";
|
|
12
|
-
export { generateIndex, generateTree } from "./generate";
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filetree/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The three depths of the tree, named after the folder that holds them.
|
|
3
|
-
* A `root` folder holds plans, a `plan` folder holds phases, a `phase` folder
|
|
4
|
-
* holds tasks. Every `paths`, `entries` and `filetree` function is keyed by this.
|
|
5
|
-
*/
|
|
6
|
-
export declare const LEVELS: readonly ["root", "plan", "phase"];
|
|
7
|
-
export type TreeLevel = (typeof LEVELS)[number];
|
|
8
|
-
/** Index file each level writes, in the folder whose entries it lists. */
|
|
9
|
-
export declare const INDEX_FILES: Record<TreeLevel, string>;
|
|
10
|
-
/** Level of the folder opened by an entry, or `null` where entries are leaves. */
|
|
11
|
-
export declare const CHILD_LEVEL: Record<TreeLevel, TreeLevel | null>;
|
|
12
|
-
/** What a level's entries are called, for messages and hook output. */
|
|
13
|
-
export declare const ENTRY_TYPE: Record<TreeLevel, "plan" | "phase" | "task">;
|
|
14
|
-
/** Frontmatter field carrying an entry's identifier, per level. */
|
|
15
|
-
export declare const ID_FIELD: Record<TreeLevel, "name" | "id">;
|
|
16
|
-
/** Folder inside a phase holding its task files. */
|
|
17
|
-
export declare const TASKS_DIR = "tasks";
|
|
18
|
-
/**
|
|
19
|
-
* How a level's entries sit on disk. A `folder` entry owns a directory named
|
|
20
|
-
* after it holding `<name>.md`; a `file` entry is a `.md` file in `TASKS_DIR`.
|
|
21
|
-
*/
|
|
22
|
-
export declare const ENTRY_KIND: Record<TreeLevel, "folder" | "file">;
|
|
23
|
-
/** Extension of every file carrying an entry's frontmatter. */
|
|
24
|
-
export declare const MARKDOWN = ".md";
|
|
25
|
-
//# sourceMappingURL=levels.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"levels.d.ts","sourceRoot":"","sources":["../../src/filetree/levels.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,MAAM,YAAI,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,0EAA0E;AAC1E,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAIjD,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAI3D,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAInE,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIrD,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,CAI3D,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,QAAQ,CAAC"}
|
package/dist/filetree/levels.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// packages/skills/src/filetree/levels.ts
|
|
2
|
-
/**
|
|
3
|
-
* The three depths of the tree, named after the folder that holds them.
|
|
4
|
-
* A `root` folder holds plans, a `plan` folder holds phases, a `phase` folder
|
|
5
|
-
* holds tasks. Every `paths`, `entries` and `filetree` function is keyed by this.
|
|
6
|
-
*/
|
|
7
|
-
export const LEVELS = ["root", "plan", "phase"];
|
|
8
|
-
/** Index file each level writes, in the folder whose entries it lists. */
|
|
9
|
-
export const INDEX_FILES = {
|
|
10
|
-
root: "root-index.json",
|
|
11
|
-
plan: "plan-index.json",
|
|
12
|
-
phase: "phase-index.json",
|
|
13
|
-
};
|
|
14
|
-
/** Level of the folder opened by an entry, or `null` where entries are leaves. */
|
|
15
|
-
export const CHILD_LEVEL = {
|
|
16
|
-
root: "plan",
|
|
17
|
-
plan: "phase",
|
|
18
|
-
phase: null,
|
|
19
|
-
};
|
|
20
|
-
/** What a level's entries are called, for messages and hook output. */
|
|
21
|
-
export const ENTRY_TYPE = {
|
|
22
|
-
root: "plan",
|
|
23
|
-
plan: "phase",
|
|
24
|
-
phase: "task",
|
|
25
|
-
};
|
|
26
|
-
/** Frontmatter field carrying an entry's identifier, per level. */
|
|
27
|
-
export const ID_FIELD = {
|
|
28
|
-
root: "name",
|
|
29
|
-
plan: "name",
|
|
30
|
-
phase: "id",
|
|
31
|
-
};
|
|
32
|
-
/** Folder inside a phase holding its task files. */
|
|
33
|
-
export const TASKS_DIR = "tasks";
|
|
34
|
-
/**
|
|
35
|
-
* How a level's entries sit on disk. A `folder` entry owns a directory named
|
|
36
|
-
* after it holding `<name>.md`; a `file` entry is a `.md` file in `TASKS_DIR`.
|
|
37
|
-
*/
|
|
38
|
-
export const ENTRY_KIND = {
|
|
39
|
-
root: "folder",
|
|
40
|
-
plan: "folder",
|
|
41
|
-
phase: "file",
|
|
42
|
-
};
|
|
43
|
-
/** Extension of every file carrying an entry's frontmatter. */
|
|
44
|
-
export const MARKDOWN = ".md";
|
|
45
|
-
//# sourceMappingURL=levels.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"levels.js","sourceRoot":"","sources":["../../src/filetree/levels.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAIzD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,IAAI,EAAG,iBAAiB;IACxB,IAAI,EAAG,iBAAiB;IACxB,KAAK,EAAE,kBAAkB;CAC1B,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAwC;IAC9D,IAAI,EAAG,MAAM;IACb,IAAI,EAAG,OAAO;IACd,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAiD;IACtE,IAAI,EAAG,MAAM;IACb,IAAI,EAAG,OAAO;IACd,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAqC;IACxD,IAAI,EAAG,MAAM;IACb,IAAI,EAAG,MAAM;IACb,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAyC;IAC9D,IAAI,EAAG,QAAQ;IACf,IAAI,EAAG,QAAQ;IACf,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { type TreeLevel } from "./levels";
|
|
2
|
-
/** Where one entry sits, from the folder that lists it. */
|
|
3
|
-
export interface EntryLocation {
|
|
4
|
-
/** Level of `dir` — the folder whose index lists this entry. */
|
|
5
|
-
level: TreeLevel;
|
|
6
|
-
/** What this entry is: a `root` folder lists plans, a `phase` folder tasks. */
|
|
7
|
-
type: "plan" | "phase" | "task";
|
|
8
|
-
name: string;
|
|
9
|
-
dir: string;
|
|
10
|
-
file: string;
|
|
11
|
-
/** Names from the tree root down to and including this entry. */
|
|
12
|
-
trail: string[];
|
|
13
|
-
}
|
|
14
|
-
/** Where a folder's entries are listed, and at which level. */
|
|
15
|
-
export interface ParentFolder {
|
|
16
|
-
dir: string;
|
|
17
|
-
level: TreeLevel;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Every entry in the tree, in the order the queue runs: each folder's entries
|
|
21
|
-
* alphabetically, and each entry's own entries directly after it.
|
|
22
|
-
*/
|
|
23
|
-
export declare function listAllEntries(root: string): Promise<EntryLocation[]>;
|
|
24
|
-
/**
|
|
25
|
-
* Finds the one entry named `name` anywhere in the tree.
|
|
26
|
-
*
|
|
27
|
-
* @throws Error when nothing is named `name`, or when two entries are — a name
|
|
28
|
-
* the caller cannot act on is reported rather than resolved by guessing
|
|
29
|
-
*/
|
|
30
|
-
export declare function locateEntry(root: string, name: string): Promise<EntryLocation>;
|
|
31
|
-
/**
|
|
32
|
-
* `locateEntry` for a caller that only accepts one kind of entry, such as a
|
|
33
|
-
* hook whose `--in` must name a plan.
|
|
34
|
-
*
|
|
35
|
-
* @throws Error when the entry named `name` is of another type
|
|
36
|
-
*/
|
|
37
|
-
export declare function locateEntryOfType(root: string, name: string, type: EntryLocation["type"]): Promise<EntryLocation>;
|
|
38
|
-
/**
|
|
39
|
-
* Folder whose entries `parent` holds, or the tree root when no parent is named.
|
|
40
|
-
*
|
|
41
|
-
* @param parent name of a plan or phase; a task holds nothing
|
|
42
|
-
*/
|
|
43
|
-
export declare function resolveParent(root: string, parent?: string): Promise<ParentFolder>;
|
|
44
|
-
//# sourceMappingURL=locate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/filetree/locate.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAInE,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,KAAK,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAI3E;AA0BD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAcpF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,aAAa,CAAC,CAQxB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAWxF"}
|