light-plan 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +3181 -2
- package/assets/README.md +111 -0
- package/assets/agents/lpm-developer.md +468 -0
- package/assets/agents/lpm-planner.md +532 -0
- package/assets/harnesses/claude.yml +43 -0
- package/assets/harnesses/copilot.yml +54 -0
- package/assets/harnesses/reasonix.yml +49 -0
- package/assets/hcm/light-plan.yml +45 -0
- package/assets/skills/lpm-board-health.md +243 -0
- package/assets/skills/lpm-board-setup.md +354 -0
- package/assets/skills/lpm-delivery.md +344 -0
- package/assets/skills/lpm-planning.md +411 -0
- package/assets/skills/lpm-templates.md +144 -0
- package/assets/skills/lpm.md +267 -0
- package/dist/cli/agent-view.d.ts +27 -0
- package/dist/cli/agent-view.js +247 -0
- package/dist/cli/agent-view.js.map +1 -0
- package/dist/cli/commands/agent/assets.d.ts +64 -0
- package/dist/cli/commands/agent/assets.js +106 -0
- package/dist/cli/commands/agent/assets.js.map +1 -0
- package/dist/cli/commands/agent/glob.d.ts +25 -0
- package/dist/cli/commands/agent/glob.js +82 -0
- package/dist/cli/commands/agent/glob.js.map +1 -0
- package/dist/cli/commands/agent/index.d.ts +11 -0
- package/dist/cli/commands/agent/index.js +284 -0
- package/dist/cli/commands/agent/index.js.map +1 -0
- package/dist/cli/commands/agent/install.d.ts +59 -0
- package/dist/cli/commands/agent/install.js +131 -0
- package/dist/cli/commands/agent/install.js.map +1 -0
- package/dist/cli/commands/agent/mapping.d.ts +175 -0
- package/dist/cli/commands/agent/mapping.js +256 -0
- package/dist/cli/commands/agent/mapping.js.map +1 -0
- package/dist/cli/commands/check.d.ts +2 -0
- package/dist/cli/commands/check.js +81 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/comment.d.ts +2 -0
- package/dist/cli/commands/comment.js +104 -0
- package/dist/cli/commands/comment.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +2 -0
- package/dist/cli/commands/convert.js +115 -0
- package/dist/cli/commands/convert.js.map +1 -0
- package/dist/cli/commands/copy.d.ts +2 -0
- package/dist/cli/commands/copy.js +69 -0
- package/dist/cli/commands/copy.js.map +1 -0
- package/dist/cli/commands/export.d.ts +11 -0
- package/dist/cli/commands/export.js +226 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/flag.d.ts +2 -0
- package/dist/cli/commands/flag.js +172 -0
- package/dist/cli/commands/flag.js.map +1 -0
- package/dist/cli/commands/git.d.ts +11 -0
- package/dist/cli/commands/git.js +357 -0
- package/dist/cli/commands/git.js.map +1 -0
- package/dist/cli/commands/hcm/bundle.d.ts +60 -0
- package/dist/cli/commands/hcm/bundle.js +166 -0
- package/dist/cli/commands/hcm/bundle.js.map +1 -0
- package/dist/cli/commands/hcm/index.d.ts +11 -0
- package/dist/cli/commands/hcm/index.js +162 -0
- package/dist/cli/commands/hcm/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.js +81 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/insert.d.ts +2 -0
- package/dist/cli/commands/insert.js +70 -0
- package/dist/cli/commands/insert.js.map +1 -0
- package/dist/cli/commands/instructions.d.ts +7 -0
- package/dist/cli/commands/instructions.js +256 -0
- package/dist/cli/commands/instructions.js.map +1 -0
- package/dist/cli/commands/link.d.ts +2 -0
- package/dist/cli/commands/link.js +121 -0
- package/dist/cli/commands/link.js.map +1 -0
- package/dist/cli/commands/mcp/config.d.ts +71 -0
- package/dist/cli/commands/mcp/config.js +119 -0
- package/dist/cli/commands/mcp/config.js.map +1 -0
- package/dist/cli/commands/mcp/index.d.ts +9 -0
- package/dist/cli/commands/mcp/index.js +92 -0
- package/dist/cli/commands/mcp/index.js.map +1 -0
- package/dist/cli/commands/mcp/serve.d.ts +1 -0
- package/dist/cli/commands/mcp/serve.js +76 -0
- package/dist/cli/commands/mcp/serve.js.map +1 -0
- package/dist/cli/commands/mcp/setup.d.ts +1 -0
- package/dist/cli/commands/mcp/setup.js +83 -0
- package/dist/cli/commands/mcp/setup.js.map +1 -0
- package/dist/cli/commands/me.d.ts +2 -0
- package/dist/cli/commands/me.js +85 -0
- package/dist/cli/commands/me.js.map +1 -0
- package/dist/cli/commands/move.d.ts +2 -0
- package/dist/cli/commands/move.js +81 -0
- package/dist/cli/commands/move.js.map +1 -0
- package/dist/cli/commands/new.d.ts +2 -0
- package/dist/cli/commands/new.js +222 -0
- package/dist/cli/commands/new.js.map +1 -0
- package/dist/cli/commands/open.d.ts +2 -0
- package/dist/cli/commands/open.js +43 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/period.d.ts +10 -0
- package/dist/cli/commands/period.js +165 -0
- package/dist/cli/commands/period.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +2 -0
- package/dist/cli/commands/profile.js +133 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/queue.d.ts +2 -0
- package/dist/cli/commands/queue.js +582 -0
- package/dist/cli/commands/queue.js.map +1 -0
- package/dist/cli/commands/remote.d.ts +10 -0
- package/dist/cli/commands/remote.js +3142 -0
- package/dist/cli/commands/remote.js.map +1 -0
- package/dist/cli/commands/rm.d.ts +2 -0
- package/dist/cli/commands/rm.js +63 -0
- package/dist/cli/commands/rm.js.map +1 -0
- package/dist/cli/commands/set.d.ts +2 -0
- package/dist/cli/commands/set.js +139 -0
- package/dist/cli/commands/set.js.map +1 -0
- package/dist/cli/commands/split.d.ts +2 -0
- package/dist/cli/commands/split.js +90 -0
- package/dist/cli/commands/split.js.map +1 -0
- package/dist/cli/commands/task.d.ts +2 -0
- package/dist/cli/commands/task.js +298 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +2 -0
- package/dist/cli/commands/team.js +114 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/template.d.ts +2 -0
- package/dist/cli/commands/template.js +338 -0
- package/dist/cli/commands/template.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +2 -0
- package/dist/cli/commands/ui.js +98 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/upstream.d.ts +2 -0
- package/dist/cli/commands/upstream.js +218 -0
- package/dist/cli/commands/upstream.js.map +1 -0
- package/dist/cli/context.d.ts +24 -0
- package/dist/cli/context.js +52 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +208 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/live.d.ts +71 -0
- package/dist/cli/live.js +182 -0
- package/dist/cli/live.js.map +1 -0
- package/dist/cli/plan.d.ts +28 -0
- package/dist/cli/plan.js +76 -0
- package/dist/cli/plan.js.map +1 -0
- package/dist/cli/prompt.d.ts +60 -0
- package/dist/cli/prompt.js +185 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/ui.d.ts +65 -0
- package/dist/cli/ui.js +79 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/core/board/dependency-rollup.d.ts +54 -0
- package/dist/core/board/dependency-rollup.js +72 -0
- package/dist/core/board/dependency-rollup.js.map +1 -0
- package/dist/core/board/flag-rollup.d.ts +33 -0
- package/dist/core/board/flag-rollup.js +56 -0
- package/dist/core/board/flag-rollup.js.map +1 -0
- package/dist/core/board/index.d.ts +21 -0
- package/dist/core/board/index.js +22 -0
- package/dist/core/board/index.js.map +1 -0
- package/dist/core/board/load/cache.d.ts +52 -0
- package/dist/core/board/load/cache.js +105 -0
- package/dist/core/board/load/cache.js.map +1 -0
- package/dist/core/board/load/fields.d.ts +33 -0
- package/dist/core/board/load/fields.js +154 -0
- package/dist/core/board/load/fields.js.map +1 -0
- package/dist/core/board/load/scan.d.ts +39 -0
- package/dist/core/board/load/scan.js +88 -0
- package/dist/core/board/load/scan.js.map +1 -0
- package/dist/core/board/load/tree.d.ts +10 -0
- package/dist/core/board/load/tree.js +114 -0
- package/dist/core/board/load/tree.js.map +1 -0
- package/dist/core/board/load.d.ts +69 -0
- package/dist/core/board/load.js +204 -0
- package/dist/core/board/load.js.map +1 -0
- package/dist/core/board/query.d.ts +126 -0
- package/dist/core/board/query.js +291 -0
- package/dist/core/board/query.js.map +1 -0
- package/dist/core/board/registry.d.ts +51 -0
- package/dist/core/board/registry.js +98 -0
- package/dist/core/board/registry.js.map +1 -0
- package/dist/core/board/remote-scopes.d.ts +71 -0
- package/dist/core/board/remote-scopes.js +103 -0
- package/dist/core/board/remote-scopes.js.map +1 -0
- package/dist/core/board/rollup.d.ts +32 -0
- package/dist/core/board/rollup.js +67 -0
- package/dist/core/board/rollup.js.map +1 -0
- package/dist/core/board/scope.d.ts +81 -0
- package/dist/core/board/scope.js +134 -0
- package/dist/core/board/scope.js.map +1 -0
- package/dist/core/board/simulate.d.ts +138 -0
- package/dist/core/board/simulate.js +141 -0
- package/dist/core/board/simulate.js.map +1 -0
- package/dist/core/board/tasks/index.d.ts +25 -0
- package/dist/core/board/tasks/index.js +26 -0
- package/dist/core/board/tasks/index.js.map +1 -0
- package/dist/core/board/tasks/ranking.d.ts +155 -0
- package/dist/core/board/tasks/ranking.js +374 -0
- package/dist/core/board/tasks/ranking.js.map +1 -0
- package/dist/core/board/tasks/roster.d.ts +42 -0
- package/dist/core/board/tasks/roster.js +82 -0
- package/dist/core/board/tasks/roster.js.map +1 -0
- package/dist/core/board/tasks.d.ts +1 -0
- package/dist/core/board/tasks.js +2 -0
- package/dist/core/board/tasks.js.map +1 -0
- package/dist/core/config/index.d.ts +9 -0
- package/dist/core/config/index.js +10 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/config/lookup.d.ts +114 -0
- package/dist/core/config/lookup.js +221 -0
- package/dist/core/config/lookup.js.map +1 -0
- package/dist/core/config/remote-blocks.d.ts +17 -0
- package/dist/core/config/remote-blocks.js +47 -0
- package/dist/core/config/remote-blocks.js.map +1 -0
- package/dist/core/config/schema.d.ts +10 -0
- package/dist/core/config/schema.js +451 -0
- package/dist/core/config/schema.js.map +1 -0
- package/dist/core/errors.d.ts +23 -0
- package/dist/core/errors.js +31 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/gitsync/hosts.d.ts +40 -0
- package/dist/core/gitsync/hosts.js +115 -0
- package/dist/core/gitsync/hosts.js.map +1 -0
- package/dist/core/gitsync/index.d.ts +25 -0
- package/dist/core/gitsync/index.js +25 -0
- package/dist/core/gitsync/index.js.map +1 -0
- package/dist/core/gitsync/integrate.d.ts +72 -0
- package/dist/core/gitsync/integrate.js +115 -0
- package/dist/core/gitsync/integrate.js.map +1 -0
- package/dist/core/gitsync/repo.d.ts +61 -0
- package/dist/core/gitsync/repo.js +213 -0
- package/dist/core/gitsync/repo.js.map +1 -0
- package/dist/core/gitsync/run.d.ts +58 -0
- package/dist/core/gitsync/run.js +102 -0
- package/dist/core/gitsync/run.js.map +1 -0
- package/dist/core/gitsync/status.d.ts +59 -0
- package/dist/core/gitsync/status.js +81 -0
- package/dist/core/gitsync/status.js.map +1 -0
- package/dist/core/gitsync/sync.d.ts +111 -0
- package/dist/core/gitsync/sync.js +275 -0
- package/dist/core/gitsync/sync.js.map +1 -0
- package/dist/core/index.d.ts +31 -0
- package/dist/core/index.js +32 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/instructions/analyze.d.ts +70 -0
- package/dist/core/instructions/analyze.js +275 -0
- package/dist/core/instructions/analyze.js.map +1 -0
- package/dist/core/instructions/builtin.d.ts +21 -0
- package/dist/core/instructions/builtin.js +133 -0
- package/dist/core/instructions/builtin.js.map +1 -0
- package/dist/core/instructions/context.d.ts +155 -0
- package/dist/core/instructions/context.js +209 -0
- package/dist/core/instructions/context.js.map +1 -0
- package/dist/core/instructions/index.d.ts +29 -0
- package/dist/core/instructions/index.js +30 -0
- package/dist/core/instructions/index.js.map +1 -0
- package/dist/core/instructions/instructions.d.ts +90 -0
- package/dist/core/instructions/instructions.js +179 -0
- package/dist/core/instructions/instructions.js.map +1 -0
- package/dist/core/instructions/template.d.ts +108 -0
- package/dist/core/instructions/template.js +252 -0
- package/dist/core/instructions/template.js.map +1 -0
- package/dist/core/model/attributes.d.ts +16 -0
- package/dist/core/model/attributes.js +119 -0
- package/dist/core/model/attributes.js.map +1 -0
- package/dist/core/model/index.d.ts +10 -0
- package/dist/core/model/index.js +11 -0
- package/dist/core/model/index.js.map +1 -0
- package/dist/core/model/links.d.ts +34 -0
- package/dist/core/model/links.js +114 -0
- package/dist/core/model/links.js.map +1 -0
- package/dist/core/model/profile.d.ts +31 -0
- package/dist/core/model/profile.js +8 -0
- package/dist/core/model/profile.js.map +1 -0
- package/dist/core/model/types.d.ts +441 -0
- package/dist/core/model/types.js +167 -0
- package/dist/core/model/types.js.map +1 -0
- package/dist/core/model/zod.d.ts +6 -0
- package/dist/core/model/zod.js +11 -0
- package/dist/core/model/zod.js.map +1 -0
- package/dist/core/operations/board-index.d.ts +45 -0
- package/dist/core/operations/board-index.js +147 -0
- package/dist/core/operations/board-index.js.map +1 -0
- package/dist/core/operations/claim.d.ts +69 -0
- package/dist/core/operations/claim.js +115 -0
- package/dist/core/operations/claim.js.map +1 -0
- package/dist/core/operations/comment.d.ts +30 -0
- package/dist/core/operations/comment.js +46 -0
- package/dist/core/operations/comment.js.map +1 -0
- package/dist/core/operations/create.d.ts +82 -0
- package/dist/core/operations/create.js +306 -0
- package/dist/core/operations/create.js.map +1 -0
- package/dist/core/operations/flag.d.ts +58 -0
- package/dist/core/operations/flag.js +95 -0
- package/dist/core/operations/flag.js.map +1 -0
- package/dist/core/operations/git-sync.d.ts +148 -0
- package/dist/core/operations/git-sync.js +341 -0
- package/dist/core/operations/git-sync.js.map +1 -0
- package/dist/core/operations/index.d.ts +44 -0
- package/dist/core/operations/index.js +45 -0
- package/dist/core/operations/index.js.map +1 -0
- package/dist/core/operations/init.d.ts +25 -0
- package/dist/core/operations/init.js +122 -0
- package/dist/core/operations/init.js.map +1 -0
- package/dist/core/operations/link.d.ts +40 -0
- package/dist/core/operations/link.js +131 -0
- package/dist/core/operations/link.js.map +1 -0
- package/dist/core/operations/move.d.ts +43 -0
- package/dist/core/operations/move.js +103 -0
- package/dist/core/operations/move.js.map +1 -0
- package/dist/core/operations/profile.d.ts +23 -0
- package/dist/core/operations/profile.js +26 -0
- package/dist/core/operations/profile.js.map +1 -0
- package/dist/core/operations/remotes-off.d.ts +12 -0
- package/dist/core/operations/remotes-off.js +67 -0
- package/dist/core/operations/remotes-off.js.map +1 -0
- package/dist/core/operations/remove.d.ts +18 -0
- package/dist/core/operations/remove.js +114 -0
- package/dist/core/operations/remove.js.map +1 -0
- package/dist/core/operations/retype.d.ts +25 -0
- package/dist/core/operations/retype.js +59 -0
- package/dist/core/operations/retype.js.map +1 -0
- package/dist/core/operations/rollup.d.ts +74 -0
- package/dist/core/operations/rollup.js +121 -0
- package/dist/core/operations/rollup.js.map +1 -0
- package/dist/core/operations/shared.d.ts +133 -0
- package/dist/core/operations/shared.js +383 -0
- package/dist/core/operations/shared.js.map +1 -0
- package/dist/core/operations/update.d.ts +43 -0
- package/dist/core/operations/update.js +161 -0
- package/dist/core/operations/update.js.map +1 -0
- package/dist/core/operations/user.d.ts +27 -0
- package/dist/core/operations/user.js +68 -0
- package/dist/core/operations/user.js.map +1 -0
- package/dist/core/profile/current.d.ts +35 -0
- package/dist/core/profile/current.js +31 -0
- package/dist/core/profile/current.js.map +1 -0
- package/dist/core/profile/index.d.ts +14 -0
- package/dist/core/profile/index.js +15 -0
- package/dist/core/profile/index.js.map +1 -0
- package/dist/core/profile/schema.d.ts +9 -0
- package/dist/core/profile/schema.js +100 -0
- package/dist/core/profile/schema.js.map +1 -0
- package/dist/core/storage/activity.d.ts +78 -0
- package/dist/core/storage/activity.js +131 -0
- package/dist/core/storage/activity.js.map +1 -0
- package/dist/core/storage/atomic.d.ts +34 -0
- package/dist/core/storage/atomic.js +117 -0
- package/dist/core/storage/atomic.js.map +1 -0
- package/dist/core/storage/comments.d.ts +39 -0
- package/dist/core/storage/comments.js +88 -0
- package/dist/core/storage/comments.js.map +1 -0
- package/dist/core/storage/document.d.ts +16 -0
- package/dist/core/storage/document.js +98 -0
- package/dist/core/storage/document.js.map +1 -0
- package/dist/core/storage/frontmatter.d.ts +16 -0
- package/dist/core/storage/frontmatter.js +33 -0
- package/dist/core/storage/frontmatter.js.map +1 -0
- package/dist/core/storage/git.d.ts +8 -0
- package/dist/core/storage/git.js +48 -0
- package/dist/core/storage/git.js.map +1 -0
- package/dist/core/storage/index.d.ts +27 -0
- package/dist/core/storage/index.js +28 -0
- package/dist/core/storage/index.js.map +1 -0
- package/dist/core/storage/local.d.ts +57 -0
- package/dist/core/storage/local.js +133 -0
- package/dist/core/storage/local.js.map +1 -0
- package/dist/core/storage/lock.d.ts +85 -0
- package/dist/core/storage/lock.js +364 -0
- package/dist/core/storage/lock.js.map +1 -0
- package/dist/core/storage/paths.d.ts +125 -0
- package/dist/core/storage/paths.js +202 -0
- package/dist/core/storage/paths.js.map +1 -0
- package/dist/core/storage/state.d.ts +32 -0
- package/dist/core/storage/state.js +71 -0
- package/dist/core/storage/state.js.map +1 -0
- package/dist/core/storage/templates.d.ts +29 -0
- package/dist/core/storage/templates.js +62 -0
- package/dist/core/storage/templates.js.map +1 -0
- package/dist/core/storage/views.d.ts +18 -0
- package/dist/core/storage/views.js +62 -0
- package/dist/core/storage/views.js.map +1 -0
- package/dist/core/validation/check.d.ts +4 -0
- package/dist/core/validation/check.js +22 -0
- package/dist/core/validation/check.js.map +1 -0
- package/dist/core/validation/checks/collection.d.ts +4 -0
- package/dist/core/validation/checks/collection.js +152 -0
- package/dist/core/validation/checks/collection.js.map +1 -0
- package/dist/core/validation/checks/counters.d.ts +3 -0
- package/dist/core/validation/checks/counters.js +23 -0
- package/dist/core/validation/checks/counters.js.map +1 -0
- package/dist/core/validation/checks/dependencies.d.ts +3 -0
- package/dist/core/validation/checks/dependencies.js +58 -0
- package/dist/core/validation/checks/dependencies.js.map +1 -0
- package/dist/core/validation/checks/gitignore.d.ts +10 -0
- package/dist/core/validation/checks/gitignore.js +22 -0
- package/dist/core/validation/checks/gitignore.js.map +1 -0
- package/dist/core/validation/checks/index-file.d.ts +8 -0
- package/dist/core/validation/checks/index-file.js +26 -0
- package/dist/core/validation/checks/index-file.js.map +1 -0
- package/dist/core/validation/checks/index.d.ts +20 -0
- package/dist/core/validation/checks/index.js +21 -0
- package/dist/core/validation/checks/index.js.map +1 -0
- package/dist/core/validation/checks/issues.d.ts +3 -0
- package/dist/core/validation/checks/issues.js +152 -0
- package/dist/core/validation/checks/issues.js.map +1 -0
- package/dist/core/validation/checks/periods.d.ts +3 -0
- package/dist/core/validation/checks/periods.js +89 -0
- package/dist/core/validation/checks/periods.js.map +1 -0
- package/dist/core/validation/checks/remotes.d.ts +20 -0
- package/dist/core/validation/checks/remotes.js +42 -0
- package/dist/core/validation/checks/remotes.js.map +1 -0
- package/dist/core/validation/checks/resources.d.ts +3 -0
- package/dist/core/validation/checks/resources.js +77 -0
- package/dist/core/validation/checks/resources.js.map +1 -0
- package/dist/core/validation/checks/rollup.d.ts +27 -0
- package/dist/core/validation/checks/rollup.js +53 -0
- package/dist/core/validation/checks/rollup.js.map +1 -0
- package/dist/core/validation/checks/squads.d.ts +3 -0
- package/dist/core/validation/checks/squads.js +42 -0
- package/dist/core/validation/checks/squads.js.map +1 -0
- package/dist/core/validation/checks/templates.d.ts +14 -0
- package/dist/core/validation/checks/templates.js +119 -0
- package/dist/core/validation/checks/templates.js.map +1 -0
- package/dist/core/validation/fix.d.ts +7 -0
- package/dist/core/validation/fix.js +273 -0
- package/dist/core/validation/fix.js.map +1 -0
- package/dist/core/validation/index.d.ts +7 -0
- package/dist/core/validation/index.js +8 -0
- package/dist/core/validation/index.js.map +1 -0
- package/dist/core/validation/shared.d.ts +47 -0
- package/dist/core/validation/shared.js +66 -0
- package/dist/core/validation/shared.js.map +1 -0
- package/dist/mcp/context.d.ts +70 -0
- package/dist/mcp/context.js +110 -0
- package/dist/mcp/context.js.map +1 -0
- package/dist/mcp/index.d.ts +49 -0
- package/dist/mcp/index.js +90 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/reply.d.ts +28 -0
- package/dist/mcp/reply.js +34 -0
- package/dist/mcp/reply.js.map +1 -0
- package/dist/mcp/tools/plan/create.d.ts +3 -0
- package/dist/mcp/tools/plan/create.js +128 -0
- package/dist/mcp/tools/plan/create.js.map +1 -0
- package/dist/mcp/tools/plan/delete.d.ts +3 -0
- package/dist/mcp/tools/plan/delete.js +35 -0
- package/dist/mcp/tools/plan/delete.js.map +1 -0
- package/dist/mcp/tools/plan/graph.d.ts +3 -0
- package/dist/mcp/tools/plan/graph.js +53 -0
- package/dist/mcp/tools/plan/graph.js.map +1 -0
- package/dist/mcp/tools/plan/index.d.ts +15 -0
- package/dist/mcp/tools/plan/index.js +16 -0
- package/dist/mcp/tools/plan/index.js.map +1 -0
- package/dist/mcp/tools/plan/link.d.ts +3 -0
- package/dist/mcp/tools/plan/link.js +46 -0
- package/dist/mcp/tools/plan/link.js.map +1 -0
- package/dist/mcp/tools/plan/registrar.d.ts +10 -0
- package/dist/mcp/tools/plan/registrar.js +24 -0
- package/dist/mcp/tools/plan/registrar.js.map +1 -0
- package/dist/mcp/tools/plan/reshape.d.ts +3 -0
- package/dist/mcp/tools/plan/reshape.js +95 -0
- package/dist/mcp/tools/plan/reshape.js.map +1 -0
- package/dist/mcp/tools/plan/timeline.d.ts +3 -0
- package/dist/mcp/tools/plan/timeline.js +68 -0
- package/dist/mcp/tools/plan/timeline.js.map +1 -0
- package/dist/mcp/tools/plan/upstream.d.ts +14 -0
- package/dist/mcp/tools/plan/upstream.js +69 -0
- package/dist/mcp/tools/plan/upstream.js.map +1 -0
- package/dist/mcp/tools/plan.d.ts +1 -0
- package/dist/mcp/tools/plan.js +2 -0
- package/dist/mcp/tools/plan.js.map +1 -0
- package/dist/mcp/tools/read.d.ts +3 -0
- package/dist/mcp/tools/read.js +339 -0
- package/dist/mcp/tools/read.js.map +1 -0
- package/dist/mcp/tools/remote.d.ts +3 -0
- package/dist/mcp/tools/remote.js +254 -0
- package/dist/mcp/tools/remote.js.map +1 -0
- package/dist/mcp/tools/templates.d.ts +12 -0
- package/dist/mcp/tools/templates.js +165 -0
- package/dist/mcp/tools/templates.js.map +1 -0
- package/dist/mcp/tools/work.d.ts +16 -0
- package/dist/mcp/tools/work.js +359 -0
- package/dist/mcp/tools/work.js.map +1 -0
- package/dist/remote/accounts.d.ts +158 -0
- package/dist/remote/accounts.js +207 -0
- package/dist/remote/accounts.js.map +1 -0
- package/dist/remote/adopt.d.ts +139 -0
- package/dist/remote/adopt.js +181 -0
- package/dist/remote/adopt.js.map +1 -0
- package/dist/remote/anchor.d.ts +35 -0
- package/dist/remote/anchor.js +53 -0
- package/dist/remote/anchor.js.map +1 -0
- package/dist/remote/attributes.d.ts +103 -0
- package/dist/remote/attributes.js +245 -0
- package/dist/remote/attributes.js.map +1 -0
- package/dist/remote/audit.d.ts +112 -0
- package/dist/remote/audit.js +215 -0
- package/dist/remote/audit.js.map +1 -0
- package/dist/remote/capabilities.d.ts +267 -0
- package/dist/remote/capabilities.js +225 -0
- package/dist/remote/capabilities.js.map +1 -0
- package/dist/remote/check.d.ts +49 -0
- package/dist/remote/check.js +356 -0
- package/dist/remote/check.js.map +1 -0
- package/dist/remote/comments.d.ts +86 -0
- package/dist/remote/comments.js +87 -0
- package/dist/remote/comments.js.map +1 -0
- package/dist/remote/config-file.d.ts +237 -0
- package/dist/remote/config-file.js +640 -0
- package/dist/remote/config-file.js.map +1 -0
- package/dist/remote/conflicts.d.ts +110 -0
- package/dist/remote/conflicts.js +188 -0
- package/dist/remote/conflicts.js.map +1 -0
- package/dist/remote/connection-catalogue.d.ts +65 -0
- package/dist/remote/connection-catalogue.js +66 -0
- package/dist/remote/connection-catalogue.js.map +1 -0
- package/dist/remote/connection.d.ts +84 -0
- package/dist/remote/connection.js +229 -0
- package/dist/remote/connection.js.map +1 -0
- package/dist/remote/coverage.d.ts +65 -0
- package/dist/remote/coverage.js +244 -0
- package/dist/remote/coverage.js.map +1 -0
- package/dist/remote/credentials.d.ts +95 -0
- package/dist/remote/credentials.js +210 -0
- package/dist/remote/credentials.js.map +1 -0
- package/dist/remote/execute.d.ts +178 -0
- package/dist/remote/execute.js +1245 -0
- package/dist/remote/execute.js.map +1 -0
- package/dist/remote/fingerprint.d.ts +172 -0
- package/dist/remote/fingerprint.js +337 -0
- package/dist/remote/fingerprint.js.map +1 -0
- package/dist/remote/fixtures.d.ts +176 -0
- package/dist/remote/fixtures.js +432 -0
- package/dist/remote/fixtures.js.map +1 -0
- package/dist/remote/guard.d.ts +90 -0
- package/dist/remote/guard.js +83 -0
- package/dist/remote/guard.js.map +1 -0
- package/dist/remote/hierarchy.d.ts +141 -0
- package/dist/remote/hierarchy.js +129 -0
- package/dist/remote/hierarchy.js.map +1 -0
- package/dist/remote/index.d.ts +145 -0
- package/dist/remote/index.js +146 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/remote/inspect.d.ts +103 -0
- package/dist/remote/inspect.js +152 -0
- package/dist/remote/inspect.js.map +1 -0
- package/dist/remote/labels.d.ts +75 -0
- package/dist/remote/labels.js +137 -0
- package/dist/remote/labels.js.map +1 -0
- package/dist/remote/ladder.d.ts +145 -0
- package/dist/remote/ladder.js +387 -0
- package/dist/remote/ladder.js.map +1 -0
- package/dist/remote/ledger.d.ts +97 -0
- package/dist/remote/ledger.js +148 -0
- package/dist/remote/ledger.js.map +1 -0
- package/dist/remote/lifecycle.d.ts +175 -0
- package/dist/remote/lifecycle.js +274 -0
- package/dist/remote/lifecycle.js.map +1 -0
- package/dist/remote/links.d.ts +411 -0
- package/dist/remote/links.js +748 -0
- package/dist/remote/links.js.map +1 -0
- package/dist/remote/managed-block.d.ts +182 -0
- package/dist/remote/managed-block.js +406 -0
- package/dist/remote/managed-block.js.map +1 -0
- package/dist/remote/managed-comment.d.ts +104 -0
- package/dist/remote/managed-comment.js +92 -0
- package/dist/remote/managed-comment.js.map +1 -0
- package/dist/remote/mapping.d.ts +282 -0
- package/dist/remote/mapping.js +336 -0
- package/dist/remote/mapping.js.map +1 -0
- package/dist/remote/merge.d.ts +172 -0
- package/dist/remote/merge.js +221 -0
- package/dist/remote/merge.js.map +1 -0
- package/dist/remote/periods.d.ts +209 -0
- package/dist/remote/periods.js +224 -0
- package/dist/remote/periods.js.map +1 -0
- package/dist/remote/plan.d.ts +671 -0
- package/dist/remote/plan.js +1210 -0
- package/dist/remote/plan.js.map +1 -0
- package/dist/remote/policy.d.ts +67 -0
- package/dist/remote/policy.js +67 -0
- package/dist/remote/policy.js.map +1 -0
- package/dist/remote/preflight.d.ts +112 -0
- package/dist/remote/preflight.js +342 -0
- package/dist/remote/preflight.js.map +1 -0
- package/dist/remote/prerequisites.d.ts +113 -0
- package/dist/remote/prerequisites.js +161 -0
- package/dist/remote/prerequisites.js.map +1 -0
- package/dist/remote/provider.d.ts +802 -0
- package/dist/remote/provider.js +27 -0
- package/dist/remote/provider.js.map +1 -0
- package/dist/remote/providers/github/config.d.ts +84 -0
- package/dist/remote/providers/github/config.js +161 -0
- package/dist/remote/providers/github/config.js.map +1 -0
- package/dist/remote/providers/github/connector.d.ts +33 -0
- package/dist/remote/providers/github/connector.js +774 -0
- package/dist/remote/providers/github/connector.js.map +1 -0
- package/dist/remote/providers/github/edges.d.ts +29 -0
- package/dist/remote/providers/github/edges.js +56 -0
- package/dist/remote/providers/github/edges.js.map +1 -0
- package/dist/remote/providers/github/hierarchy.d.ts +21 -0
- package/dist/remote/providers/github/hierarchy.js +46 -0
- package/dist/remote/providers/github/hierarchy.js.map +1 -0
- package/dist/remote/providers/github/index.d.ts +26 -0
- package/dist/remote/providers/github/index.js +69 -0
- package/dist/remote/providers/github/index.js.map +1 -0
- package/dist/remote/providers/github/project-iteration.d.ts +71 -0
- package/dist/remote/providers/github/project-iteration.js +203 -0
- package/dist/remote/providers/github/project-iteration.js.map +1 -0
- package/dist/remote/providers/github/project-provision.d.ts +130 -0
- package/dist/remote/providers/github/project-provision.js +247 -0
- package/dist/remote/providers/github/project-provision.js.map +1 -0
- package/dist/remote/providers/github/project-status.d.ts +115 -0
- package/dist/remote/providers/github/project-status.js +317 -0
- package/dist/remote/providers/github/project-status.js.map +1 -0
- package/dist/remote/providers/github/projects.d.ts +181 -0
- package/dist/remote/providers/github/projects.js +481 -0
- package/dist/remote/providers/github/projects.js.map +1 -0
- package/dist/remote/providers/github/translator.d.ts +103 -0
- package/dist/remote/providers/github/translator.js +400 -0
- package/dist/remote/providers/github/translator.js.map +1 -0
- package/dist/remote/providers/jira/config.d.ts +96 -0
- package/dist/remote/providers/jira/config.js +200 -0
- package/dist/remote/providers/jira/config.js.map +1 -0
- package/dist/remote/providers/jira/connector.d.ts +42 -0
- package/dist/remote/providers/jira/connector.js +1688 -0
- package/dist/remote/providers/jira/connector.js.map +1 -0
- package/dist/remote/providers/jira/fields.d.ts +292 -0
- package/dist/remote/providers/jira/fields.js +463 -0
- package/dist/remote/providers/jira/fields.js.map +1 -0
- package/dist/remote/providers/jira/hierarchy.d.ts +28 -0
- package/dist/remote/providers/jira/hierarchy.js +60 -0
- package/dist/remote/providers/jira/hierarchy.js.map +1 -0
- package/dist/remote/providers/jira/index.d.ts +29 -0
- package/dist/remote/providers/jira/index.js +100 -0
- package/dist/remote/providers/jira/index.js.map +1 -0
- package/dist/remote/providers/jira/links.d.ts +41 -0
- package/dist/remote/providers/jira/links.js +102 -0
- package/dist/remote/providers/jira/links.js.map +1 -0
- package/dist/remote/providers/jira/sprints.d.ts +80 -0
- package/dist/remote/providers/jira/sprints.js +107 -0
- package/dist/remote/providers/jira/sprints.js.map +1 -0
- package/dist/remote/providers/jira/translator.d.ts +61 -0
- package/dist/remote/providers/jira/translator.js +382 -0
- package/dist/remote/providers/jira/translator.js.map +1 -0
- package/dist/remote/providers/jira/types.d.ts +112 -0
- package/dist/remote/providers/jira/types.js +160 -0
- package/dist/remote/providers/jira/types.js.map +1 -0
- package/dist/remote/providers/jira/vocabulary.d.ts +55 -0
- package/dist/remote/providers/jira/vocabulary.js +91 -0
- package/dist/remote/providers/jira/vocabulary.js.map +1 -0
- package/dist/remote/providers/jsonfile/config.d.ts +61 -0
- package/dist/remote/providers/jsonfile/config.js +83 -0
- package/dist/remote/providers/jsonfile/config.js.map +1 -0
- package/dist/remote/providers/jsonfile/connector.d.ts +34 -0
- package/dist/remote/providers/jsonfile/connector.js +251 -0
- package/dist/remote/providers/jsonfile/connector.js.map +1 -0
- package/dist/remote/providers/jsonfile/index.d.ts +38 -0
- package/dist/remote/providers/jsonfile/index.js +90 -0
- package/dist/remote/providers/jsonfile/index.js.map +1 -0
- package/dist/remote/providers/jsonfile/store.d.ts +59 -0
- package/dist/remote/providers/jsonfile/store.js +48 -0
- package/dist/remote/providers/jsonfile/store.js.map +1 -0
- package/dist/remote/providers/jsonfile/translator.d.ts +54 -0
- package/dist/remote/providers/jsonfile/translator.js +199 -0
- package/dist/remote/providers/jsonfile/translator.js.map +1 -0
- package/dist/remote/providers/linear/config.d.ts +83 -0
- package/dist/remote/providers/linear/config.js +140 -0
- package/dist/remote/providers/linear/config.js.map +1 -0
- package/dist/remote/providers/linear/connector.d.ts +36 -0
- package/dist/remote/providers/linear/connector.js +438 -0
- package/dist/remote/providers/linear/connector.js.map +1 -0
- package/dist/remote/providers/linear/estimate.d.ts +63 -0
- package/dist/remote/providers/linear/estimate.js +112 -0
- package/dist/remote/providers/linear/estimate.js.map +1 -0
- package/dist/remote/providers/linear/index.d.ts +31 -0
- package/dist/remote/providers/linear/index.js +75 -0
- package/dist/remote/providers/linear/index.js.map +1 -0
- package/dist/remote/providers/linear/labels.d.ts +51 -0
- package/dist/remote/providers/linear/labels.js +129 -0
- package/dist/remote/providers/linear/labels.js.map +1 -0
- package/dist/remote/providers/linear/states.d.ts +97 -0
- package/dist/remote/providers/linear/states.js +124 -0
- package/dist/remote/providers/linear/states.js.map +1 -0
- package/dist/remote/providers/linear/translator.d.ts +48 -0
- package/dist/remote/providers/linear/translator.js +343 -0
- package/dist/remote/providers/linear/translator.js.map +1 -0
- package/dist/remote/providers/linear/vocabulary.d.ts +27 -0
- package/dist/remote/providers/linear/vocabulary.js +42 -0
- package/dist/remote/providers/linear/vocabulary.js.map +1 -0
- package/dist/remote/provision.d.ts +45 -0
- package/dist/remote/provision.js +81 -0
- package/dist/remote/provision.js.map +1 -0
- package/dist/remote/pull.d.ts +52 -0
- package/dist/remote/pull.js +116 -0
- package/dist/remote/pull.js.map +1 -0
- package/dist/remote/readiness.d.ts +67 -0
- package/dist/remote/readiness.js +336 -0
- package/dist/remote/readiness.js.map +1 -0
- package/dist/remote/rebase.d.ts +157 -0
- package/dist/remote/rebase.js +255 -0
- package/dist/remote/rebase.js.map +1 -0
- package/dist/remote/reconcile.d.ts +115 -0
- package/dist/remote/reconcile.js +140 -0
- package/dist/remote/reconcile.js.map +1 -0
- package/dist/remote/redact.d.ts +70 -0
- package/dist/remote/redact.js +132 -0
- package/dist/remote/redact.js.map +1 -0
- package/dist/remote/registry.d.ts +32 -0
- package/dist/remote/registry.js +54 -0
- package/dist/remote/registry.js.map +1 -0
- package/dist/remote/remotes.d.ts +94 -0
- package/dist/remote/remotes.js +182 -0
- package/dist/remote/remotes.js.map +1 -0
- package/dist/remote/render.d.ts +147 -0
- package/dist/remote/render.js +683 -0
- package/dist/remote/render.js.map +1 -0
- package/dist/remote/report.d.ts +63 -0
- package/dist/remote/report.js +345 -0
- package/dist/remote/report.js.map +1 -0
- package/dist/remote/resolutions.d.ts +115 -0
- package/dist/remote/resolutions.js +217 -0
- package/dist/remote/resolutions.js.map +1 -0
- package/dist/remote/scaffold.d.ts +134 -0
- package/dist/remote/scaffold.js +370 -0
- package/dist/remote/scaffold.js.map +1 -0
- package/dist/remote/scope.d.ts +57 -0
- package/dist/remote/scope.js +91 -0
- package/dist/remote/scope.js.map +1 -0
- package/dist/remote/selection.d.ts +38 -0
- package/dist/remote/selection.js +50 -0
- package/dist/remote/selection.js.map +1 -0
- package/dist/remote/shape.d.ts +141 -0
- package/dist/remote/shape.js +220 -0
- package/dist/remote/shape.js.map +1 -0
- package/dist/remote/status.d.ts +104 -0
- package/dist/remote/status.js +238 -0
- package/dist/remote/status.js.map +1 -0
- package/dist/remote/sync.d.ts +182 -0
- package/dist/remote/sync.js +523 -0
- package/dist/remote/sync.js.map +1 -0
- package/dist/remote/transport/budget.d.ts +48 -0
- package/dist/remote/transport/budget.js +68 -0
- package/dist/remote/transport/budget.js.map +1 -0
- package/dist/remote/transport/connector.d.ts +115 -0
- package/dist/remote/transport/connector.js +21 -0
- package/dist/remote/transport/connector.js.map +1 -0
- package/dist/remote/transport/error.d.ts +88 -0
- package/dist/remote/transport/error.js +196 -0
- package/dist/remote/transport/error.js.map +1 -0
- package/dist/remote/transport/gh.d.ts +20 -0
- package/dist/remote/transport/gh.js +41 -0
- package/dist/remote/transport/gh.js.map +1 -0
- package/dist/remote/transport/graphql.d.ts +25 -0
- package/dist/remote/transport/graphql.js +81 -0
- package/dist/remote/transport/graphql.js.map +1 -0
- package/dist/remote/transport/http.d.ts +47 -0
- package/dist/remote/transport/http.js +195 -0
- package/dist/remote/transport/http.js.map +1 -0
- package/dist/remote/transport/index.d.ts +18 -0
- package/dist/remote/transport/index.js +19 -0
- package/dist/remote/transport/index.js.map +1 -0
- package/dist/remote/transport/process.d.ts +39 -0
- package/dist/remote/transport/process.js +121 -0
- package/dist/remote/transport/process.js.map +1 -0
- package/dist/remote/transport/rest.d.ts +22 -0
- package/dist/remote/transport/rest.js +57 -0
- package/dist/remote/transport/rest.js.map +1 -0
- package/dist/remote/transport/retry.d.ts +91 -0
- package/dist/remote/transport/retry.js +138 -0
- package/dist/remote/transport/retry.js.map +1 -0
- package/dist/remote/transport-error.d.ts +19 -0
- package/dist/remote/transport-error.js +22 -0
- package/dist/remote/transport-error.js.map +1 -0
- package/dist/remote/vocabulary.d.ts +126 -0
- package/dist/remote/vocabulary.js +57 -0
- package/dist/remote/vocabulary.js.map +1 -0
- package/dist/runner/config.d.ts +7 -0
- package/dist/runner/config.js +61 -0
- package/dist/runner/config.js.map +1 -0
- package/dist/runner/git.d.ts +19 -0
- package/dist/runner/git.js +26 -0
- package/dist/runner/git.js.map +1 -0
- package/dist/runner/index.d.ts +20 -0
- package/dist/runner/index.js +21 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/loop.d.ts +46 -0
- package/dist/runner/loop.js +243 -0
- package/dist/runner/loop.js.map +1 -0
- package/dist/runner/pi.d.ts +39 -0
- package/dist/runner/pi.js +276 -0
- package/dist/runner/pi.js.map +1 -0
- package/dist/runner/shell.d.ts +44 -0
- package/dist/runner/shell.js +174 -0
- package/dist/runner/shell.js.map +1 -0
- package/dist/runner/stats.d.ts +19 -0
- package/dist/runner/stats.js +58 -0
- package/dist/runner/stats.js.map +1 -0
- package/dist/runner/types.d.ts +218 -0
- package/dist/runner/types.js +37 -0
- package/dist/runner/types.js.map +1 -0
- package/dist/server/git.d.ts +8 -0
- package/dist/server/git.js +50 -0
- package/dist/server/git.js.map +1 -0
- package/dist/server/http/respond.d.ts +13 -0
- package/dist/server/http/respond.js +59 -0
- package/dist/server/http/respond.js.map +1 -0
- package/dist/server/http/router.d.ts +27 -0
- package/dist/server/http/router.js +48 -0
- package/dist/server/http/router.js.map +1 -0
- package/dist/server/http/static.d.ts +14 -0
- package/dist/server/http/static.js +55 -0
- package/dist/server/http/static.js.map +1 -0
- package/dist/server/index.d.ts +58 -0
- package/dist/server/index.js +124 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes/board.d.ts +8 -0
- package/dist/server/routes/board.js +19 -0
- package/dist/server/routes/board.js.map +1 -0
- package/dist/server/routes/comments.d.ts +13 -0
- package/dist/server/routes/comments.js +36 -0
- package/dist/server/routes/comments.js.map +1 -0
- package/dist/server/routes/flags.d.ts +16 -0
- package/dist/server/routes/flags.js +37 -0
- package/dist/server/routes/flags.js.map +1 -0
- package/dist/server/routes/git.d.ts +13 -0
- package/dist/server/routes/git.js +84 -0
- package/dist/server/routes/git.js.map +1 -0
- package/dist/server/routes/remotes.d.ts +36 -0
- package/dist/server/routes/remotes.js +749 -0
- package/dist/server/routes/remotes.js.map +1 -0
- package/dist/server/routes/views.d.ts +10 -0
- package/dist/server/routes/views.js +63 -0
- package/dist/server/routes/views.js.map +1 -0
- package/dist/server/views/schema.d.ts +2 -0
- package/dist/server/views/schema.js +121 -0
- package/dist/server/views/schema.js.map +1 -0
- package/dist/server/views/store.d.ts +17 -0
- package/dist/server/views/store.js +67 -0
- package/dist/server/views/store.js.map +1 -0
- package/dist/shared/adf.d.ts +83 -0
- package/dist/shared/adf.js +795 -0
- package/dist/shared/adf.js.map +1 -0
- package/dist/shared/blocking.d.ts +130 -0
- package/dist/shared/blocking.js +179 -0
- package/dist/shared/blocking.js.map +1 -0
- package/dist/shared/changes.d.ts +100 -0
- package/dist/shared/changes.js +112 -0
- package/dist/shared/changes.js.map +1 -0
- package/dist/shared/cohesion.d.ts +75 -0
- package/dist/shared/cohesion.js +132 -0
- package/dist/shared/cohesion.js.map +1 -0
- package/dist/shared/dependency-rollup.d.ts +91 -0
- package/dist/shared/dependency-rollup.js +132 -0
- package/dist/shared/dependency-rollup.js.map +1 -0
- package/dist/shared/errors.d.ts +23 -0
- package/dist/shared/errors.js +24 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/flag-rollup.d.ts +88 -0
- package/dist/shared/flag-rollup.js +119 -0
- package/dist/shared/flag-rollup.js.map +1 -0
- package/dist/shared/git-sync.d.ts +90 -0
- package/dist/shared/git-sync.js +9 -0
- package/dist/shared/git-sync.js.map +1 -0
- package/dist/shared/index.d.ts +40 -0
- package/dist/shared/index.js +41 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/model.d.ts +218 -0
- package/dist/shared/model.js +95 -0
- package/dist/shared/model.js.map +1 -0
- package/dist/shared/period-query.d.ts +21 -0
- package/dist/shared/period-query.js +26 -0
- package/dist/shared/period-query.js.map +1 -0
- package/dist/shared/period-stance.d.ts +45 -0
- package/dist/shared/period-stance.js +50 -0
- package/dist/shared/period-stance.js.map +1 -0
- package/dist/shared/plans/breakdown.d.ts +66 -0
- package/dist/shared/plans/breakdown.js +186 -0
- package/dist/shared/plans/breakdown.js.map +1 -0
- package/dist/shared/plans/index.d.ts +21 -0
- package/dist/shared/plans/index.js +22 -0
- package/dist/shared/plans/index.js.map +1 -0
- package/dist/shared/plans/instantiate.d.ts +61 -0
- package/dist/shared/plans/instantiate.js +184 -0
- package/dist/shared/plans/instantiate.js.map +1 -0
- package/dist/shared/plans/reading.d.ts +79 -0
- package/dist/shared/plans/reading.js +149 -0
- package/dist/shared/plans/reading.js.map +1 -0
- package/dist/shared/plans/reparent.d.ts +54 -0
- package/dist/shared/plans/reparent.js +217 -0
- package/dist/shared/plans/reparent.js.map +1 -0
- package/dist/shared/plans/timeline.d.ts +93 -0
- package/dist/shared/plans/timeline.js +224 -0
- package/dist/shared/plans/timeline.js.map +1 -0
- package/dist/shared/plans/upstream.d.ts +67 -0
- package/dist/shared/plans/upstream.js +73 -0
- package/dist/shared/plans/upstream.js.map +1 -0
- package/dist/shared/remote-api.d.ts +413 -0
- package/dist/shared/remote-api.js +11 -0
- package/dist/shared/remote-api.js.map +1 -0
- package/dist/shared/remote-coverage.d.ts +120 -0
- package/dist/shared/remote-coverage.js +98 -0
- package/dist/shared/remote-coverage.js.map +1 -0
- package/dist/shared/remote-readiness.d.ts +162 -0
- package/dist/shared/remote-readiness.js +49 -0
- package/dist/shared/remote-readiness.js.map +1 -0
- package/dist/shared/remote-status.d.ts +268 -0
- package/dist/shared/remote-status.js +79 -0
- package/dist/shared/remote-status.js.map +1 -0
- package/dist/shared/rollup.d.ts +90 -0
- package/dist/shared/rollup.js +119 -0
- package/dist/shared/rollup.js.map +1 -0
- package/dist/shared/static.d.ts +65 -0
- package/dist/shared/static.js +107 -0
- package/dist/shared/static.js.map +1 -0
- package/dist/shared/template-params.d.ts +80 -0
- package/dist/shared/template-params.js +141 -0
- package/dist/shared/template-params.js.map +1 -0
- package/dist/shared/view.d.ts +105 -0
- package/dist/shared/view.js +44 -0
- package/dist/shared/view.js.map +1 -0
- package/dist/shared/work-unit.d.ts +34 -0
- package/dist/shared/work-unit.js +47 -0
- package/dist/shared/work-unit.js.map +1 -0
- package/dist/sync/apply.d.ts +21 -0
- package/dist/sync/apply.js +149 -0
- package/dist/sync/apply.js.map +1 -0
- package/dist/sync/dto.d.ts +9 -0
- package/dist/sync/dto.js +162 -0
- package/dist/sync/dto.js.map +1 -0
- package/dist/sync/index.d.ts +24 -0
- package/dist/sync/index.js +25 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/patch.d.ts +13 -0
- package/dist/sync/patch.js +212 -0
- package/dist/sync/patch.js.map +1 -0
- package/dist/sync/session.d.ts +31 -0
- package/dist/sync/session.js +55 -0
- package/dist/sync/session.js.map +1 -0
- package/dist/sync/static.d.ts +11 -0
- package/dist/sync/static.js +33 -0
- package/dist/sync/static.js.map +1 -0
- package/package.json +95 -4
- package/templates/blank.yml +71 -0
- package/templates/context/bug.md +107 -0
- package/templates/context/default.md +119 -0
- package/templates/context/epic.md +81 -0
- package/templates/context/feature.md +91 -0
- package/templates/context/research.md +87 -0
- package/templates/context/review.md +81 -0
- package/templates/context/story.md +94 -0
- package/templates/context/sub_task.md +108 -0
- package/templates/context/task.md +86 -0
- package/templates/context/test.md +73 -0
- package/templates/context/user_story.md +147 -0
- package/templates/kanban.yml +226 -0
- package/templates/scrum.yml +567 -0
- package/web/dist/assets/index-D0j8OnHq.js +35 -0
- package/web/dist/assets/index-DFL7v8aP.css +1 -0
- package/web/dist/index.html +13 -0
- package/web/dist-viewer/assets/index-Bcns6OuC.css +1 -0
- package/web/dist-viewer/assets/index-vVXzeiFo.js +7 -0
- package/web/dist-viewer/index.html +14 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lpm
|
|
3
|
+
description: How to drive a light-plan board — the `lpm` CLI and the light-plan MCP server. Load this whenever a task involves a `.lpm` folder, the `lpm` command, a light-plan board, or the light-plan MCP tools (board_overview, next_tasks, create_document, …); when asked to read, populate, work or fix a board; or when a repository turns out to contain a `.lpm` directory and you need to know what it is. Start here, then load lpm-board-setup, lpm-planning, lpm-delivery or lpm-board-health for the specific job.
|
|
4
|
+
roles:
|
|
5
|
+
- developer
|
|
6
|
+
- pm
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Working a light-plan board
|
|
10
|
+
|
|
11
|
+
**light-plan** is a file-based issue tracker. A board is a `.lpm/` folder of
|
|
12
|
+
nested directories, each holding one markdown document (YAML frontmatter + a
|
|
13
|
+
body). It is versioned with git, has no server and no database, and is driven
|
|
14
|
+
three ways that all produce the same board: the `lpm` CLI, an MCP server for
|
|
15
|
+
agents, and a web app (`lpm ui`).
|
|
16
|
+
|
|
17
|
+
This skill is the orientation and the map. Five companions cover the jobs:
|
|
18
|
+
|
|
19
|
+
| Skill | Load it when |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| `lpm-board-setup` | creating a board, editing `.lpm/config.yml`, adding people, wiring up developers or agents |
|
|
22
|
+
| `lpm-planning` | writing epics/features/stories, breaking work down, sequencing, assigning, scheduling |
|
|
23
|
+
| `lpm-templates` | the reusable pieces of plan in `.lpm/registry/` — **check these before creating anything** |
|
|
24
|
+
| `lpm-delivery` | picking work up, recording progress, closing issues |
|
|
25
|
+
| `lpm-board-health` | `lpm check`, repairing a board, "why is nobody offered work", publishing |
|
|
26
|
+
|
|
27
|
+
## The first rule: the board defines its own vocabulary
|
|
28
|
+
|
|
29
|
+
There is no universal "epic", "story", "sprint" or "done". Every board declares
|
|
30
|
+
its own types, its own hierarchy and its own statuses in `.lpm/config.yml`.
|
|
31
|
+
|
|
32
|
+
**Find out before you act.**
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
lpm check # validates, and fails loudly if you are not on a board
|
|
36
|
+
cat .lpm/config.yml
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Over MCP, one call answers everything:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
board_overview
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
It returns the types and the hierarchy they nest in, the statuses (marking which
|
|
46
|
+
are `active` and which `terminal`), the `priorityAttribute` and `effortAttribute`
|
|
47
|
+
the engine ranks by, who you are, the scope you are being offered, and how much
|
|
48
|
+
of each collection the board holds. **Every other tool speaks in those names.**
|
|
49
|
+
Never guess one.
|
|
50
|
+
|
|
51
|
+
## Three collections, one engine
|
|
52
|
+
|
|
53
|
+
| Folder | Holds | Answers |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| `.lpm/board/` | **issues** | what gets built |
|
|
56
|
+
| `.lpm/timeline/` | **periods** — sprints, increments | when it gets built |
|
|
57
|
+
| `.lpm/team/` | **resources** — people and pools | who builds it |
|
|
58
|
+
|
|
59
|
+
They are structurally identical: nested folders, one markdown document each, one
|
|
60
|
+
id namespace apiece (`LP-1`, `TL-1`, `RS-1`). Periods and resources are optional —
|
|
61
|
+
a board that declares no period types simply has no `timeline/`.
|
|
62
|
+
|
|
63
|
+
**A folder is named after its id and nothing else** — `board/LP-1/LP-2/_issue.md`.
|
|
64
|
+
The titles are in `.lpm/INDEX.md`, a generated outline of the whole board with a
|
|
65
|
+
link to every document, nested the way the folders are. Read it to get your
|
|
66
|
+
bearings on an unfamiliar board; never edit it, since every command that adds,
|
|
67
|
+
removes, moves or renames a document rewrites it.
|
|
68
|
+
|
|
69
|
+
An issue at **any** level can be scheduled into any period and assigned to any
|
|
70
|
+
resource. An epic can sit on an increment while its stories sit on sprints.
|
|
71
|
+
|
|
72
|
+
## How work reaches a person
|
|
73
|
+
|
|
74
|
+
This is the mechanic everything else serves. `lpm task next` / `next_tasks`
|
|
75
|
+
offers an issue only when **all** of these hold:
|
|
76
|
+
|
|
77
|
+
1. it is a **work unit** — an issue with no children, or one whose type the board
|
|
78
|
+
declares `atomic`, which is offered whole and hides what is nested in it.
|
|
79
|
+
Containers are never offered; the units under them carry the work;
|
|
80
|
+
2. its status is neither terminal nor already active;
|
|
81
|
+
3. it is assigned to that person, **or** parked in a generic pool they cover;
|
|
82
|
+
4. everything it waits on is finished — **`depends_on`, its own and every
|
|
83
|
+
ancestor's**. A story sits inside a feature, and a feature that waits on
|
|
84
|
+
another feature waits on it with everything in it, so no story under the
|
|
85
|
+
second feature is offered until the first one's work is done.
|
|
86
|
+
|
|
87
|
+
A dependency on a **container** is cleared by the work inside it, not by the
|
|
88
|
+
container's own status — nobody moves a feature through the columns, so waiting
|
|
89
|
+
for one to say `done` would idle the team for ever. Closing it outright still
|
|
90
|
+
answers for everything under it.
|
|
91
|
+
|
|
92
|
+
And the container's status follows: finishing the last open issue in a feature
|
|
93
|
+
finishes the feature, and its epic with it, as far up as it goes. Reopening one,
|
|
94
|
+
or adding a new issue inside a finished container, reopens them. Never close a
|
|
95
|
+
parent by hand — `finish_task` reports what it carried in `rolledUp`, and
|
|
96
|
+
`lpm check --fix` repairs a board where a hand edit or a merge left one behind.
|
|
97
|
+
|
|
98
|
+
Ranking, in order: the running or overdue period first, then unscheduled work,
|
|
99
|
+
then periods that have not started; within that the board's priority attribute,
|
|
100
|
+
then the status closest to done, then the part of the plan already under way (a
|
|
101
|
+
feature somebody is inside, then one closest to finished — so a queue finishes a
|
|
102
|
+
feature rather than opening one in each), then how much each issue unblocks, then
|
|
103
|
+
age.
|
|
104
|
+
|
|
105
|
+
Four practical consequences: **assigning an epic assigns nothing**, **a
|
|
106
|
+
dependency is a gate that idles somebody**, **one edge between two features
|
|
107
|
+
sequences every story under them**, and **work in a pool nobody covers can
|
|
108
|
+
never be picked up**.
|
|
109
|
+
|
|
110
|
+
## The surface, side by side
|
|
111
|
+
|
|
112
|
+
Everything is available both ways. Use MCP tools when you have them — they are
|
|
113
|
+
one call and return structured JSON; fall back to the CLI in a shell.
|
|
114
|
+
|
|
115
|
+
### Reading
|
|
116
|
+
|
|
117
|
+
| Intent | MCP | CLI |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| What kind of board is this | `board_overview` | `cat .lpm/config.yml` |
|
|
120
|
+
| Survey documents | `list_documents { kind, type, status, assignee, period, parent, under, workUnitsOnly, search, limit }` | `lpm team`, `lpm task next` |
|
|
121
|
+
| One document in full | `get_document { id }` | `lpm open <id> --path`, `lpm comment <id> --list` |
|
|
122
|
+
| **The brief for an issue** | `get_instructions { id }` | `lpm instructions <id>` |
|
|
123
|
+
| Validate | `check_board` | `lpm check` (exit 1 while errors remain) |
|
|
124
|
+
| Who is loaded | `team_load { period }` | `lpm team [--period <id>] [--open]` |
|
|
125
|
+
|
|
126
|
+
`get_document` is the one that answers "can I start this?" — it returns the body,
|
|
127
|
+
attributes, `ancestors`, `children`, `blockedBy` / `blocks` and the whole
|
|
128
|
+
comment log together.
|
|
129
|
+
|
|
130
|
+
`get_instructions` is the one that answers "what do I need to know to do it?" It
|
|
131
|
+
walks the hierarchy and returns **one piece of markdown**: the titles and bodies
|
|
132
|
+
of every ancestor (the epic and feature this issue belongs to, whatever the board
|
|
133
|
+
calls them), then the issue itself, its breakdown, **the files it names**, **where
|
|
134
|
+
the work comes from and where it is going**, the research it rests on and its work
|
|
135
|
+
log. `get_document` hands you a record; `get_instructions` hands you the reason it
|
|
136
|
+
exists. **Read it before writing any code.**
|
|
137
|
+
|
|
138
|
+
If the brief opens with a **flag**, somebody picked this up and stopped — read the
|
|
139
|
+
work log before anything else.
|
|
140
|
+
|
|
141
|
+
The layout comes from the board — `.lpm/templates/context/<type>.md`, falling back
|
|
142
|
+
to `default.md` and then to a built-in layout — so a team decides what its
|
|
143
|
+
developers are told. Do not pass `template` unless you were asked to use a
|
|
144
|
+
specific one.
|
|
145
|
+
|
|
146
|
+
Those layouts are **Eta templates, which means executable JavaScript**. Every one
|
|
147
|
+
is checked before it is compiled, and one that reaches for the host (`process`,
|
|
148
|
+
`require`, `this`, a computed property key) is refused. If `get_instructions`
|
|
149
|
+
comes back refusing a template, **do not work around it** — no `--unsafe` exists
|
|
150
|
+
for agents, and the right response is to report it: the board is carrying a
|
|
151
|
+
layout that can run code, which a human needs to look at. `lpm instructions
|
|
152
|
+
--audit` is the whole-board version of that check and exits 1 on a finding.
|
|
153
|
+
|
|
154
|
+
### Planning
|
|
155
|
+
|
|
156
|
+
| Intent | MCP | CLI |
|
|
157
|
+
| --- | --- | --- |
|
|
158
|
+
| Create | `create_document { type, title, parent, body, status, assignee, period, dependsOn, relatedFiles, starts, ends, capacity, attributes }` | `lpm new <type> -t "..." -p <parent> --set k=v --related <path>` |
|
|
159
|
+
| Edit content / placement | `update_document { id, title, body, status, assignee, period, relatedFiles, starts, ends, capacity, attributes }` | `lpm set <id> …` (content) and `lpm move <id> …` (placement) |
|
|
160
|
+
| Change what it is | `convert_document { id, type, under, buildParents, dryRun }` | `lpm convert <id> <type> [--under <id>] [--build-parents] [--dry-run]` |
|
|
161
|
+
| Break up | `split_issue { id, titles, count, mode, chain, splitEffort, dryRun }` | `lpm split <id> --titles "A,B,C" [--replace] [--no-chain] [--split-effort] [--dry-run]` |
|
|
162
|
+
| Insert into an edge | `insert_between { source, target, issue, type, title }` | `lpm insert --between LP-4..LP-7 -t "..."` |
|
|
163
|
+
| Duplicate | `copy_documents { ids, under }` | `lpm copy <id> --under <id>` |
|
|
164
|
+
| Delete | `delete_document { id, recursive, dryRun }` | `lpm rm <id> -r [--dry-run]` |
|
|
165
|
+
| Dependency | `link_issues { blocked, blockedBy, remove }` | `lpm link <id> --depends-on <ids>` |
|
|
166
|
+
| Non-blocking link | *(CLI only)* | `lpm link <id> --relates-to <ids>` |
|
|
167
|
+
| Coverage | *(CLI only)* | `lpm link RS-1 --covers RS-4` |
|
|
168
|
+
|
|
169
|
+
### Working
|
|
170
|
+
|
|
171
|
+
| Intent | MCP | CLI |
|
|
172
|
+
| --- | --- | --- |
|
|
173
|
+
| What should I do | `next_tasks { assignee, includeUnassigned, limit }` | `lpm task next [--unassigned] [--limit n]` |
|
|
174
|
+
| What do I hold | `current_tasks { assignee }` | `lpm task current` |
|
|
175
|
+
| Claim | `start_task { id, assignee, force }` | `lpm task start [<id>] [--force]` |
|
|
176
|
+
| **Get the brief for it** | `get_instructions { id }` | `lpm instructions [<id>]` |
|
|
177
|
+
| Finish | `finish_task { id, comment }` | `lpm task done [<id>]` |
|
|
178
|
+
| **Say the work stopped** | `flag_issue { id, reason, comment }` | `lpm flag [<id>] --reason blocked\|paused\|help --comment "..."` |
|
|
179
|
+
| Say it can resume | `clear_flag { id, comment }` | `lpm flag clear <id> --comment "..."` |
|
|
180
|
+
| What has stopped | `flagged_issues` | `lpm flag list` |
|
|
181
|
+
| Comment | `add_comment { id, body, author }` | `lpm comment <id> -m "..."` / `-f file` / `-f -` |
|
|
182
|
+
| Read the log | `list_comments { id }` | `lpm comment <id> --list` |
|
|
183
|
+
| Delete a comment | `remove_comment { id, index }` | `lpm comment <id> --remove <n>` |
|
|
184
|
+
| Identity | — | `lpm me [<id\|name>]`, `lpm profile` |
|
|
185
|
+
| Look at it | — | `lpm ui` |
|
|
186
|
+
| Publish it | — | `lpm export [--site docs] [--workflow]` |
|
|
187
|
+
|
|
188
|
+
`lpm <command> --help` documents the rest. `lpm --help` lists every command.
|
|
189
|
+
|
|
190
|
+
## Hard rules
|
|
191
|
+
|
|
192
|
+
- **Never hand-edit files under `.lpm/`** to make a change you could make with a
|
|
193
|
+
tool. The tools validate the hierarchy, allocate ids, keep forward and derived
|
|
194
|
+
links consistent, and write frontmatter in the order the engine expects.
|
|
195
|
+
(Hand-editing is *supported* — see `lpm-board-health` — but it is a repair
|
|
196
|
+
path, not a workflow.)
|
|
197
|
+
- **Never invent a type, status or attribute name.** Use what `board_overview`
|
|
198
|
+
returned.
|
|
199
|
+
- **Ids are never reused.** Deleting `LP-7` does not free the number.
|
|
200
|
+
- **Only forward edges are stored.** `depends_on` and a resource's
|
|
201
|
+
`covers` live in the file; "what does this block" and "who covers this pool"
|
|
202
|
+
are derived at load. Never try to write an inverse.
|
|
203
|
+
- **`depends_on` is the only edge that gates the queue**; `relates_to` implies
|
|
204
|
+
nothing. A cycle is refused, and `lpm check` also catches one that appears
|
|
205
|
+
only after the edges are inherited.
|
|
206
|
+
- **`dryRun` first** on `split_issue`, `convert_document` and `delete_document`
|
|
207
|
+
whenever children or dependencies are involved.
|
|
208
|
+
- **A cycle is refused**, by the tools and by `lpm check`.
|
|
209
|
+
- **Comments are not board state.** They live in a `_comments.md` beside the
|
|
210
|
+
document, are read on demand, and are written straight through — even in the
|
|
211
|
+
web app, which queues everything else.
|
|
212
|
+
- **Never start an issue without reading its brief.** `get_instructions` /
|
|
213
|
+
`lpm instructions` is one call and it is the difference between building the
|
|
214
|
+
requirement and building your guess at it.
|
|
215
|
+
- **A flag is not board state either**, and for the same reason as a comment: it
|
|
216
|
+
says work stopped *now*. It is written straight through, never queued, and the
|
|
217
|
+
web app writes it the moment you press the button.
|
|
218
|
+
- **When work stops, flag it.** An issue that is going nowhere and does not say so
|
|
219
|
+
is a lie the board tells everyone who looks at it. Clearing a flag is the plan
|
|
220
|
+
owner's call, not the implementer's — `clear_flag` says "carry on".
|
|
221
|
+
- **`related_files` is never resolved or checked.** An issue may name a file that
|
|
222
|
+
does not exist yet; that is often the point. Treat an entry as a lead, and add
|
|
223
|
+
the files you actually touched.
|
|
224
|
+
|
|
225
|
+
## Two edits that look alike and are not
|
|
226
|
+
|
|
227
|
+
`lpm set` / `update_document`'s content fields change **what a document holds**
|
|
228
|
+
(title, body, attributes, dates, capacity). `lpm move` / `update_document`'s
|
|
229
|
+
`status`, `assignee` and `period` change **where it sits**. `lpm convert` /
|
|
230
|
+
`convert_document` changes **what it is**, and may relocate it to the depth its
|
|
231
|
+
new type belongs at.
|
|
232
|
+
|
|
233
|
+
Reach for the one that matches the intent; the engine enforces the difference.
|
|
234
|
+
|
|
235
|
+
## The web app, in one paragraph
|
|
236
|
+
|
|
237
|
+
`lpm ui` serves a local editor: a dependency canvas, a drawer (table, periods,
|
|
238
|
+
Gantt, queue, team) and a side panel. **Editing there is queued, not immediate** —
|
|
239
|
+
every action updates a working copy and appends to a pending list, and nothing
|
|
240
|
+
touches `.lpm` until Push. A push is partial rather than atomic: what lands,
|
|
241
|
+
lands, and failures stay pending. `lpm export` publishes a read-only static
|
|
242
|
+
viewer, and it publishes the board **as committed** — queued changes never travel.
|
|
243
|
+
|
|
244
|
+
## Identity and scoping
|
|
245
|
+
|
|
246
|
+
Who you are decides what `lpm task next` offers. `lpm me <id|name>` stores it per
|
|
247
|
+
checkout in `.lpm/local.json` (git-ignored). `LPM_USER` overrides it for one
|
|
248
|
+
command. Over MCP it is `--user`, held per session and never written to disk, so a
|
|
249
|
+
swarm of agents can share one checkout.
|
|
250
|
+
|
|
251
|
+
A **profile** additionally narrows which part of the board you are offered — see
|
|
252
|
+
`lpm-board-setup` and `docs/profiles.md`. Scope decides what is *offered*, never
|
|
253
|
+
what is *reachable*: `get_document` reads any id. It is routing, not access
|
|
254
|
+
control.
|
|
255
|
+
|
|
256
|
+
## Orientation checklist
|
|
257
|
+
|
|
258
|
+
Run this before doing anything on an unfamiliar board:
|
|
259
|
+
|
|
260
|
+
1. `board_overview` (or read `.lpm/config.yml`) — types, hierarchy, statuses,
|
|
261
|
+
ranking attributes, whether periods and resources exist at all.
|
|
262
|
+
2. `list_documents { workUnitsOnly: true, limit: 50 }` — the shape of what is there.
|
|
263
|
+
3. `lpm check` / `check_board` — is it currently valid?
|
|
264
|
+
4. `team_load` — who exists, and is anything uncovered or unowned?
|
|
265
|
+
5. `lpm me` — do you have an identity, and does work route to it?
|
|
266
|
+
|
|
267
|
+
Then, before doing any single issue: `get_instructions { id }`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RunEvent } from '../runner/index.js';
|
|
2
|
+
export interface AgentView {
|
|
3
|
+
/** Feed the view one event from the run. */
|
|
4
|
+
feed(event: RunEvent): void;
|
|
5
|
+
/** Take the pane down and give the terminal back. Safe to call twice. */
|
|
6
|
+
stop(): void;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentViewOptions {
|
|
9
|
+
/** Draw plain lines even on a terminal. */
|
|
10
|
+
plain?: boolean;
|
|
11
|
+
/** Lines of agent output to show at once. */
|
|
12
|
+
height?: number;
|
|
13
|
+
/** Where the pane is drawn. Defaults to stderr; a test passes its own. */
|
|
14
|
+
stream?: NodeJS.WriteStream;
|
|
15
|
+
}
|
|
16
|
+
/** `12s`, `3m 12s`, `1h 04m` — short enough to sit in a corner. */
|
|
17
|
+
export declare function elapsed(ms: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* Make a fragment of somebody else's output safe to put in a frame.
|
|
20
|
+
*
|
|
21
|
+
* Tool output is whatever a command wrote: carriage returns that would jump the
|
|
22
|
+
* cursor, escape sequences that would repaint half the screen, tabs that make a
|
|
23
|
+
* line wider than it measures. All of it is flattened to plain text, because
|
|
24
|
+
* the pane's arithmetic only holds if a line is as wide as it looks.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sanitize(text: string): string;
|
|
27
|
+
export declare function createAgentView(options?: AgentViewOptions): AgentView;
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { attachScrollKeys, createLivePane, createScrollBuffer, visibleWidth } from './live.js';
|
|
2
|
+
import { bold, cyan, dim, err, green, red, yellow } from './ui.js';
|
|
3
|
+
/**
|
|
4
|
+
* What `lpm queue agent` looks like while it runs.
|
|
5
|
+
*
|
|
6
|
+
* The run reports itself as a stream of `RunEvent`s; this is the only thing
|
|
7
|
+
* that decides how any of it is drawn. Two shapes, chosen by where the output
|
|
8
|
+
* goes and never by a flag alone:
|
|
9
|
+
*
|
|
10
|
+
* - **On a terminal**, a pane at the bottom of the screen: which task, which
|
|
11
|
+
* stage, which tool, and the tail of what the agent is saying and running.
|
|
12
|
+
* It is a window, not a transcript — a few lines that are rewritten in place
|
|
13
|
+
* and can be scrolled back through, so an hour-long run does not bury the
|
|
14
|
+
* report it ends with.
|
|
15
|
+
* - **Anywhere else** (a pipe, a log, `--plain`), one line per thing that
|
|
16
|
+
* happened and nothing else. The agent's own chatter is dropped rather than
|
|
17
|
+
* flooding a log with a model thinking out loud.
|
|
18
|
+
*
|
|
19
|
+
* Nothing here writes to stdout: the run's report is stdout, and this is the
|
|
20
|
+
* commentary beside it, so `lpm queue agent > run.txt` still gets a clean file.
|
|
21
|
+
*/
|
|
22
|
+
/** How many lines of the agent's stream the pane shows at once. */
|
|
23
|
+
const WINDOW = 10;
|
|
24
|
+
/** Redraw at most this often. Deltas arrive far faster than anyone can read. */
|
|
25
|
+
const FRAME_MS = 120;
|
|
26
|
+
/** What each stage of a task is called on screen, in the order they happen. */
|
|
27
|
+
const PHASES = {
|
|
28
|
+
picking: 'reading the board',
|
|
29
|
+
claiming: 'claiming the task',
|
|
30
|
+
briefing: 'building the brief',
|
|
31
|
+
running: 'agent working',
|
|
32
|
+
recording: 'recording the outcome',
|
|
33
|
+
committing: 'committing',
|
|
34
|
+
};
|
|
35
|
+
/** `12s`, `3m 12s`, `1h 04m` — short enough to sit in a corner. */
|
|
36
|
+
export function elapsed(ms) {
|
|
37
|
+
const total = Math.max(0, Math.round(ms / 1000));
|
|
38
|
+
const seconds = total % 60;
|
|
39
|
+
const minutes = Math.floor(total / 60) % 60;
|
|
40
|
+
const hours = Math.floor(total / 3600);
|
|
41
|
+
if (hours)
|
|
42
|
+
return `${hours}h ${String(minutes).padStart(2, '0')}m`;
|
|
43
|
+
if (minutes)
|
|
44
|
+
return `${minutes}m ${String(seconds).padStart(2, '0')}s`;
|
|
45
|
+
return `${seconds}s`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Make a fragment of somebody else's output safe to put in a frame.
|
|
49
|
+
*
|
|
50
|
+
* Tool output is whatever a command wrote: carriage returns that would jump the
|
|
51
|
+
* cursor, escape sequences that would repaint half the screen, tabs that make a
|
|
52
|
+
* line wider than it measures. All of it is flattened to plain text, because
|
|
53
|
+
* the pane's arithmetic only holds if a line is as wide as it looks.
|
|
54
|
+
*/
|
|
55
|
+
export function sanitize(text) {
|
|
56
|
+
return text
|
|
57
|
+
.replace(/\r\n?/g, '\n')
|
|
58
|
+
.replace(/\x1b\[[0-9;?]*[a-zA-Z]/g, '')
|
|
59
|
+
.replace(/\t/g, ' ')
|
|
60
|
+
.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, '');
|
|
61
|
+
}
|
|
62
|
+
export function createAgentView(options = {}) {
|
|
63
|
+
const height = options.height ?? WINDOW;
|
|
64
|
+
const stream = options.stream ?? process.stderr;
|
|
65
|
+
const pane = createLivePane({ stream });
|
|
66
|
+
const live = pane.live && !options.plain;
|
|
67
|
+
const buffer = createScrollBuffer();
|
|
68
|
+
let task = null;
|
|
69
|
+
let phase = 'picking';
|
|
70
|
+
let tool = null;
|
|
71
|
+
let tools = 0;
|
|
72
|
+
let errors = 0;
|
|
73
|
+
let dirty = true;
|
|
74
|
+
let timer;
|
|
75
|
+
let detachKeys;
|
|
76
|
+
let stopped = false;
|
|
77
|
+
// One partial line at a time, tagged with what is writing it: a switch from
|
|
78
|
+
// the agent's prose to a command's output ends the line in progress, so two
|
|
79
|
+
// sources cannot end up spliced into one.
|
|
80
|
+
let pending = '';
|
|
81
|
+
let pendingFrom = '';
|
|
82
|
+
const flush = () => {
|
|
83
|
+
if (!pending)
|
|
84
|
+
return;
|
|
85
|
+
buffer.push(pending);
|
|
86
|
+
pending = '';
|
|
87
|
+
};
|
|
88
|
+
const append = (from, text, style) => {
|
|
89
|
+
if (from !== pendingFrom) {
|
|
90
|
+
flush();
|
|
91
|
+
pendingFrom = from;
|
|
92
|
+
}
|
|
93
|
+
const parts = sanitize(text).split('\n');
|
|
94
|
+
for (let i = 0; i < parts.length; i += 1) {
|
|
95
|
+
pending += style(parts[i]);
|
|
96
|
+
if (i < parts.length - 1)
|
|
97
|
+
flush();
|
|
98
|
+
}
|
|
99
|
+
dirty = true;
|
|
100
|
+
};
|
|
101
|
+
const line = (text) => {
|
|
102
|
+
flush();
|
|
103
|
+
buffer.push(text);
|
|
104
|
+
dirty = true;
|
|
105
|
+
};
|
|
106
|
+
const columns = () => Math.max(40, (stream.columns ?? 80) - 1);
|
|
107
|
+
/** Left text, right text, one line, whatever width the terminal is now. */
|
|
108
|
+
const pad = (left, right) => {
|
|
109
|
+
const gap = columns() - visibleWidth(left) - visibleWidth(right) - 2;
|
|
110
|
+
return gap > 1 ? `${left}${' '.repeat(gap)}${right}` : left;
|
|
111
|
+
};
|
|
112
|
+
const frame = () => {
|
|
113
|
+
const rows = [];
|
|
114
|
+
if (task) {
|
|
115
|
+
const left = ` ${bold(task.id)} ${task.title}`;
|
|
116
|
+
const right = `task ${task.index} · ${elapsed(Date.now() - task.startedAt)}`;
|
|
117
|
+
rows.push(pad(left, right));
|
|
118
|
+
const counts = [`${tools} ${tools === 1 ? 'tool' : 'tools'}`];
|
|
119
|
+
if (errors)
|
|
120
|
+
counts.push(`${errors} failed`);
|
|
121
|
+
const doing = tool ? `${PHASES[phase]} · ${cyan(tool)}` : PHASES[phase];
|
|
122
|
+
rows.push(pad(` ${dim(doing)}`, dim(counts.join(' · '))));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
rows.push(` ${dim(PHASES[phase])}`);
|
|
126
|
+
}
|
|
127
|
+
rows.push(dim(` ${'─'.repeat(Math.max(10, columns() - 4))}`));
|
|
128
|
+
const window = buffer.window(height);
|
|
129
|
+
for (const text of window)
|
|
130
|
+
rows.push(` ${text}`);
|
|
131
|
+
for (let i = window.length; i < height; i += 1)
|
|
132
|
+
rows.push('');
|
|
133
|
+
const hint = detachKeys ? '↑↓ PgUp/PgDn scroll · Ctrl+C stop' : '';
|
|
134
|
+
rows.push(pad(` ${dim(hint)}`, buffer.behind ? dim(`${buffer.behind} lines back`) : ''));
|
|
135
|
+
return rows;
|
|
136
|
+
};
|
|
137
|
+
const draw = () => {
|
|
138
|
+
if (!live || stopped)
|
|
139
|
+
return;
|
|
140
|
+
pane.set(frame());
|
|
141
|
+
dirty = false;
|
|
142
|
+
};
|
|
143
|
+
if (live) {
|
|
144
|
+
detachKeys = attachScrollKeys((delta) => {
|
|
145
|
+
buffer.scroll(delta);
|
|
146
|
+
dirty = true;
|
|
147
|
+
}, () => {
|
|
148
|
+
stop();
|
|
149
|
+
err(dim(' interrupted — the task stays in progress and the next run resumes it'));
|
|
150
|
+
process.exit(130);
|
|
151
|
+
});
|
|
152
|
+
// The clock in the corner has to move even when nothing is happening: a
|
|
153
|
+
// frozen frame and a stalled run look identical, and only one of them is a
|
|
154
|
+
// reason to reach for Ctrl-C.
|
|
155
|
+
timer = setInterval(() => {
|
|
156
|
+
if (dirty || task)
|
|
157
|
+
draw();
|
|
158
|
+
}, FRAME_MS);
|
|
159
|
+
timer.unref();
|
|
160
|
+
}
|
|
161
|
+
function stop() {
|
|
162
|
+
if (stopped)
|
|
163
|
+
return;
|
|
164
|
+
stopped = true;
|
|
165
|
+
if (timer)
|
|
166
|
+
clearInterval(timer);
|
|
167
|
+
detachKeys?.();
|
|
168
|
+
pane.stop();
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
stop,
|
|
172
|
+
feed(event) {
|
|
173
|
+
switch (event.type) {
|
|
174
|
+
case 'task-start':
|
|
175
|
+
task = { index: event.index, id: event.id, title: event.title, startedAt: Date.now() };
|
|
176
|
+
tool = null;
|
|
177
|
+
tools = 0;
|
|
178
|
+
errors = 0;
|
|
179
|
+
// The header already names the task; this is the marker somebody
|
|
180
|
+
// scrolling back needs to see where one task ended and the next began.
|
|
181
|
+
if (live)
|
|
182
|
+
line(`${dim('──')} ${bold(event.id)} ${event.title}`);
|
|
183
|
+
else
|
|
184
|
+
err(`${dim('picked')} ${bold(event.id)} ${event.title}`);
|
|
185
|
+
break;
|
|
186
|
+
case 'phase':
|
|
187
|
+
phase = event.phase;
|
|
188
|
+
if (event.phase !== 'running')
|
|
189
|
+
tool = null;
|
|
190
|
+
dirty = true;
|
|
191
|
+
break;
|
|
192
|
+
case 'agent-text':
|
|
193
|
+
if (live)
|
|
194
|
+
append('text', event.text, (text) => text);
|
|
195
|
+
break;
|
|
196
|
+
case 'agent-thinking':
|
|
197
|
+
if (live)
|
|
198
|
+
append('thinking', event.text, dim);
|
|
199
|
+
break;
|
|
200
|
+
case 'tool-start':
|
|
201
|
+
tools += 1;
|
|
202
|
+
tool = event.summary ? `${event.name} ${event.summary}` : event.name;
|
|
203
|
+
if (live)
|
|
204
|
+
line(`${cyan(`❯ ${event.name}`)} ${dim(event.summary)}`);
|
|
205
|
+
else
|
|
206
|
+
err(` ${dim(`${event.name} ${event.summary}`.trim())}`);
|
|
207
|
+
break;
|
|
208
|
+
case 'tool-output':
|
|
209
|
+
if (live)
|
|
210
|
+
append('output', event.text, dim);
|
|
211
|
+
break;
|
|
212
|
+
case 'tool-end':
|
|
213
|
+
if (event.isError)
|
|
214
|
+
errors += 1;
|
|
215
|
+
if (live && event.isError)
|
|
216
|
+
line(red(` ${event.name} failed`));
|
|
217
|
+
tool = null;
|
|
218
|
+
dirty = true;
|
|
219
|
+
break;
|
|
220
|
+
case 'task-end': {
|
|
221
|
+
const mark = event.completed
|
|
222
|
+
? green('done')
|
|
223
|
+
: yellow(`flagged${event.flagReason ? ` (${event.flagReason})` : ''}`);
|
|
224
|
+
if (live)
|
|
225
|
+
line(`${bold(event.id)} ${mark}`);
|
|
226
|
+
else
|
|
227
|
+
err(` ${bold(event.id)} ${mark} ${dim(firstLine(event.summary))}`);
|
|
228
|
+
task = null;
|
|
229
|
+
tool = null;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
case 'note':
|
|
233
|
+
if (live)
|
|
234
|
+
line(dim(event.text));
|
|
235
|
+
else
|
|
236
|
+
err(event.text);
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
if (dirty)
|
|
240
|
+
draw();
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function firstLine(text) {
|
|
245
|
+
return text.split('\n')[0] ?? '';
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=agent-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-view.js","sourceRoot":"","sources":["../../src/cli/agent-view.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;;;;;;;;;;;;;;;GAkBG;AAEH,mEAAmE;AACnE,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,gFAAgF;AAChF,MAAM,QAAQ,GAAG,GAAG,CAAC;AAkBrB,+EAA+E;AAC/E,MAAM,MAAM,GAA6B;IACvC,OAAO,EAAE,mBAAmB;IAC5B,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,eAAe;IACxB,SAAS,EAAE,uBAAuB;IAClC,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,mEAAmE;AACnE,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,KAAK,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK;QAAE,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IACnE,IAAI,OAAO;QAAE,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IACvE,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;SACtC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AASD,MAAM,UAAU,eAAe,CAAC,UAA4B,EAAE;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IAEpC,IAAI,IAAI,GAAgB,IAAI,CAAC;IAC7B,IAAI,KAAK,GAAa,SAAS,CAAC;IAChC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,KAAiC,CAAC;IACtC,IAAI,UAAoC,CAAC;IACzC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,4EAA4E;IAC5E,4EAA4E;IAC5E,0CAA0C;IAC1C,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,KAA+B,EAAQ,EAAE;QACnF,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,KAAK,EAAE,CAAC;YACR,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,EAAE,CAAC;QACpC,CAAC;QACD,KAAK,GAAG,IAAI,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;QAClC,KAAK,EAAE,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvE,2EAA2E;IAC3E,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;QAClD,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAa,EAAE;QAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,CAAC,IAAI,IAAI,OAAO;YAAE,OAAO;QAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAClB,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACT,UAAU,GAAG,gBAAgB,CAC3B,CAAC,KAAK,EAAE,EAAE;YACR,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC,EACD,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CACF,CAAC;QACF,wEAAwE;QACxE,2EAA2E;QAC3E,8BAA8B;QAC9B,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YACvB,IAAI,KAAK,IAAI,IAAI;gBAAE,IAAI,EAAE,CAAC;QAC5B,CAAC,EAAE,QAAQ,CAAC,CAAC;QACb,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAED,SAAS,IAAI;QACX,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,KAAK;YAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,UAAU,EAAE,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI,CAAC,KAAK;YACR,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,YAAY;oBACf,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBACvF,IAAI,GAAG,IAAI,CAAC;oBACZ,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM,GAAG,CAAC,CAAC;oBACX,iEAAiE;oBACjE,uEAAuE;oBACvE,IAAI,IAAI;wBAAE,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;;wBAC5D,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC/D,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;oBACpB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;wBAAE,IAAI,GAAG,IAAI,CAAC;oBAC3C,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACR,KAAK,YAAY;oBACf,IAAI,IAAI;wBAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBACrD,MAAM;gBACR,KAAK,gBAAgB;oBACnB,IAAI,IAAI;wBAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,IAAI,CAAC,CAAC;oBACX,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACrE,IAAI,IAAI;wBAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;;wBAC9D,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9D,MAAM;gBACR,KAAK,aAAa;oBAChB,IAAI,IAAI;wBAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,UAAU;oBACb,IAAI,KAAK,CAAC,OAAO;wBAAE,MAAM,IAAI,CAAC,CAAC;oBAC/B,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO;wBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;oBAC/D,IAAI,GAAG,IAAI,CAAC;oBACZ,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACR,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;wBACf,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzE,IAAI,IAAI;wBAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;;wBACvC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1E,IAAI,GAAG,IAAI,CAAC;oBACZ,IAAI,GAAG,IAAI,CAAC;oBACZ,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM;oBACT,IAAI,IAAI;wBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;wBAC3B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrB,MAAM;YACV,CAAC;YACD,IAAI,KAAK;gBAAE,IAAI,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The files this package ships — a neutral tree that no harness uses directly:
|
|
3
|
+
*
|
|
4
|
+
* assets/
|
|
5
|
+
* agents/<name>.md markdown with portable frontmatter
|
|
6
|
+
* skills/<name>.md
|
|
7
|
+
* <anything>/... any file at all: scripts, JSON, templates
|
|
8
|
+
* harnesses/<name>.yml where all of the above lands, per harness
|
|
9
|
+
*
|
|
10
|
+
* **Nothing here knows what an "agent" or a "skill" is.** This walks the tree
|
|
11
|
+
* and reads frontmatter where a file has some; the harness mappings select what
|
|
12
|
+
* to copy with `.gitignore`-style patterns and say where it goes. Adding a new
|
|
13
|
+
* kind of asset is a file, not a code change.
|
|
14
|
+
*
|
|
15
|
+
* `assets/` is resolved relative to this file's depth, the same way
|
|
16
|
+
* `operations/init.ts` finds its templates, so it works from `src/` and `dist/`.
|
|
17
|
+
* Moving this file breaks `lpm agent`.
|
|
18
|
+
*/
|
|
19
|
+
export type Role = 'developer' | 'pm';
|
|
20
|
+
export declare const ROLES: Role[];
|
|
21
|
+
/**
|
|
22
|
+
* Reserved names under `assets/`: the mappings themselves (per harness, and
|
|
23
|
+
* per hcm bundle) and the note explaining the tree. Everything else is payload, so `from: "**"` copies what
|
|
24
|
+
* a person means by it.
|
|
25
|
+
*/
|
|
26
|
+
export declare const RESERVED: string[];
|
|
27
|
+
export interface AssetFile {
|
|
28
|
+
/** Path relative to `assets/`, forward slashes: `agents/lpm-developer.md`. */
|
|
29
|
+
relativePath: string;
|
|
30
|
+
/** Absolute path on disk. */
|
|
31
|
+
file: string;
|
|
32
|
+
/** First path segment, kept because it reads well in reports: `agents`. */
|
|
33
|
+
kind: string;
|
|
34
|
+
/** Basename without its extension: `lpm-developer`. */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Basename with its extension. */
|
|
37
|
+
basename: string;
|
|
38
|
+
/** Extension without the dot, or '' when there is none. */
|
|
39
|
+
ext: string;
|
|
40
|
+
/** Parsed frontmatter, when the file has any. */
|
|
41
|
+
front: Frontmatter | null;
|
|
42
|
+
}
|
|
43
|
+
export interface Frontmatter {
|
|
44
|
+
name?: string;
|
|
45
|
+
description?: string;
|
|
46
|
+
roles?: Role[];
|
|
47
|
+
tools?: string[];
|
|
48
|
+
/** The body after the frontmatter block. */
|
|
49
|
+
body: string;
|
|
50
|
+
}
|
|
51
|
+
export declare function assetsDir(): string;
|
|
52
|
+
/**
|
|
53
|
+
* Read frontmatter if the file starts with a `---` block. Returns null for
|
|
54
|
+
* anything else, which is how a script or a JSON file passes through untouched.
|
|
55
|
+
*/
|
|
56
|
+
export declare function readFrontmatter(file: string): Frontmatter | null;
|
|
57
|
+
/** Every shippable file under `assets/`, with its frontmatter where it has any. */
|
|
58
|
+
export declare function loadAssetFiles(): AssetFile[];
|
|
59
|
+
/**
|
|
60
|
+
* Does this file belong to one of the roles asked for? A file that declares no
|
|
61
|
+
* roles belongs to all of them — a shared script or template is not somebody's
|
|
62
|
+
* private business.
|
|
63
|
+
*/
|
|
64
|
+
export declare function inRoles(asset: AssetFile, roles: Role[]): boolean;
|