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 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/core/board/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type { Issue, Period, Resource } from '../model/types.js';
|
|
2
|
+
import type { LoadedBoard } from './load.js';
|
|
3
|
+
import type { TaskOptions, TaskRoute } from './tasks.js';
|
|
4
|
+
/**
|
|
5
|
+
* "If this one person were the only contributor, what would they do, and in
|
|
6
|
+
* what order?"
|
|
7
|
+
*
|
|
8
|
+
* The queue answers "what is next" one step at a time, which is the question a
|
|
9
|
+
* developer has. The question a plan owner has is the whole sequence: take the
|
|
10
|
+
* top of the queue, finish it, ask again, and keep going until nothing is left
|
|
11
|
+
* that this person could ever pick up. That is all this is — `nextTasks` in a
|
|
12
|
+
* loop over a board held in memory.
|
|
13
|
+
*
|
|
14
|
+
* Two properties make it worth having rather than guessing:
|
|
15
|
+
*
|
|
16
|
+
* - **It drives the real queue.** Every step comes from `nextTasks` against a
|
|
17
|
+
* board with the earlier steps marked finished, so the order it reports is
|
|
18
|
+
* the order the board would actually offer. A second copy of the ranking
|
|
19
|
+
* rules that agreed today and drifted tomorrow would be worse than nothing.
|
|
20
|
+
* - **Nothing is written and no clock moves.** The overlay lives for the
|
|
21
|
+
* length of the call, and `today` is fixed throughout, so a period that has
|
|
22
|
+
* not started stays not-started for the whole run. This reports an order,
|
|
23
|
+
* never a schedule: it does not know how long anything takes and must not
|
|
24
|
+
* appear to.
|
|
25
|
+
*
|
|
26
|
+
* There is deliberately nothing here that decides *what* may be picked up.
|
|
27
|
+
* Every rule about that — routing, scope, work units, blockers, parked periods —
|
|
28
|
+
* lives in `candidatesFor` and reaches this file only through `nextTasks`, so a
|
|
29
|
+
* developer running `lpm task next` step by step gets the sequence this reports.
|
|
30
|
+
* The moment this module grows a filter of its own, that stops being true.
|
|
31
|
+
*
|
|
32
|
+
* What the run *cannot* reach is the other half of the answer, and is reported
|
|
33
|
+
* beside it. Under "only contributor", work held by somebody else is never
|
|
34
|
+
* finished, so anything waiting on it waits forever — which is exactly the
|
|
35
|
+
* thing a reader wants to see.
|
|
36
|
+
*
|
|
37
|
+
* The one place the run is allowed to start from something the queue does not
|
|
38
|
+
* offer is work already in flight — it has been picked up, and pretending it is
|
|
39
|
+
* not there would leave its dependents blocked forever. That licence stops at a
|
|
40
|
+
* **flag**: a flag says the work has stopped and needs a person, and this run
|
|
41
|
+
* has nobody else in it, so taking a flagged issue as step 1 would assume away
|
|
42
|
+
* the very thing holding the queue up and report everything behind it as
|
|
43
|
+
* reachable. Flagged work is reported as skipped instead, which is what makes
|
|
44
|
+
* this agree with `lpm task next` and `lpm queue agent` on a stalled board.
|
|
45
|
+
*
|
|
46
|
+
* That licence is not this file's to grant either: it is `resumableTasks` in
|
|
47
|
+
* `board/tasks/ranking.ts`, and `lpm queue agent` resumes through exactly the
|
|
48
|
+
* same call. A private copy here is how the two came to disagree — the run
|
|
49
|
+
* predicted a sequence starting from work the agent could never pick back up.
|
|
50
|
+
*/
|
|
51
|
+
/** Why a piece of work was never picked up. */
|
|
52
|
+
export type SkipReason =
|
|
53
|
+
/** Flagged: whoever holds it has said the work has stopped. */
|
|
54
|
+
'flagged'
|
|
55
|
+
/** Somebody else has it in flight, and this run never finishes their work. */
|
|
56
|
+
| 'active'
|
|
57
|
+
/** The reader's profile does not offer it. */
|
|
58
|
+
| 'scope'
|
|
59
|
+
/** Assigned elsewhere, or to nobody when nobody was being considered. */
|
|
60
|
+
| 'routing'
|
|
61
|
+
/** The period is owned by a squad the resource does not belong to. */
|
|
62
|
+
| 'squad'
|
|
63
|
+
/** In a period somebody switched off. Asked for with `includeParked`. */
|
|
64
|
+
| 'parked'
|
|
65
|
+
/** Waiting on work this run never finished. */
|
|
66
|
+
| 'blocked'
|
|
67
|
+
/** Reachable and ready — only possible when `limit` cut the run short. */
|
|
68
|
+
| 'ready';
|
|
69
|
+
export interface SimulationStep {
|
|
70
|
+
/** 1-based position in the sequence. */
|
|
71
|
+
order: number;
|
|
72
|
+
issue: Issue;
|
|
73
|
+
route: TaskRoute;
|
|
74
|
+
/** The pool the work was parked in, when `route` is 'pool'. */
|
|
75
|
+
pool: Resource | null;
|
|
76
|
+
period: Period | null;
|
|
77
|
+
/**
|
|
78
|
+
* True when this issue was already in an active status when the run began.
|
|
79
|
+
* Work in flight is not offered by the queue — it has been picked up — so it
|
|
80
|
+
* is done first rather than ignored, or everything waiting on it would look
|
|
81
|
+
* blocked forever.
|
|
82
|
+
*/
|
|
83
|
+
started: boolean;
|
|
84
|
+
/** Effort declared on this issue, or null when none is recorded. */
|
|
85
|
+
effort: number | null;
|
|
86
|
+
/** Effort of every step so far including this one; null on a board with none. */
|
|
87
|
+
cumulative: number | null;
|
|
88
|
+
/** Work that stopped being blocked because this step finished. */
|
|
89
|
+
unblocked: Issue[];
|
|
90
|
+
}
|
|
91
|
+
export interface SimulationSkip {
|
|
92
|
+
issue: Issue;
|
|
93
|
+
reason: SkipReason;
|
|
94
|
+
/** Unfinished blockers left when the run ended. Only for `reason` 'blocked'. */
|
|
95
|
+
blockedBy: Issue[];
|
|
96
|
+
/** Who is holding it, when somebody is and the board knows them. */
|
|
97
|
+
holder: Resource | null;
|
|
98
|
+
/** The period it sits in, so a parked one can be named rather than implied. */
|
|
99
|
+
period: Period | null;
|
|
100
|
+
}
|
|
101
|
+
export interface QueueSimulation {
|
|
102
|
+
resource: Resource;
|
|
103
|
+
/** The sequence, in the order the board would offer it. */
|
|
104
|
+
steps: SimulationStep[];
|
|
105
|
+
/** Open work units the run never reached, with the reason for each. */
|
|
106
|
+
skipped: SimulationSkip[];
|
|
107
|
+
/** Total effort of the steps; null when the board measures no effort. */
|
|
108
|
+
effort: number | null;
|
|
109
|
+
/** Steps carrying no effort, when the board measures effort at all. */
|
|
110
|
+
unestimated: number;
|
|
111
|
+
/** True when `limit` stopped the run with work still takeable. */
|
|
112
|
+
truncated: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Open work the queue withheld because its period is switched off. Always
|
|
115
|
+
* reported, so a run that is short because the team parked six sprints says
|
|
116
|
+
* so rather than looking like a board with nothing left on it.
|
|
117
|
+
*/
|
|
118
|
+
parked: number;
|
|
119
|
+
/**
|
|
120
|
+
* Work of this resource's that is flagged, and so was never started from.
|
|
121
|
+
* Reported for the same reason `parked` is: a run that is empty because every
|
|
122
|
+
* issue this person holds has stopped is not a board with nothing left on it,
|
|
123
|
+
* and the difference is the whole answer.
|
|
124
|
+
*/
|
|
125
|
+
flagged: number;
|
|
126
|
+
}
|
|
127
|
+
export interface SimulateOptions extends TaskOptions {
|
|
128
|
+
/** Stop after this many steps. Omit to run the queue dry. */
|
|
129
|
+
limit?: number;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Work the queue through as one person, and report the sequence.
|
|
133
|
+
*
|
|
134
|
+
* The caller resolves the resource, because naming somebody is the CLI's job
|
|
135
|
+
* (`findResource` takes a name as readily as an id) and a report about a person
|
|
136
|
+
* who does not exist has nothing to say.
|
|
137
|
+
*/
|
|
138
|
+
export declare function simulateQueue(board: LoadedBoard, resource: Resource, options?: SimulateOptions): QueueSimulation;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { isActiveStatus, isTerminalStatus, terminalStatusId } from '../config/lookup.js';
|
|
2
|
+
import { BoardError } from '../errors.js';
|
|
3
|
+
import { periodOf, workUnits } from './query.js';
|
|
4
|
+
import { inScope } from './scope.js';
|
|
5
|
+
import { blockersOf, effortOf, isParked, nextTasks, resumableTasks, routeOf } from './tasks.js';
|
|
6
|
+
/**
|
|
7
|
+
* The board as it would be with `issue` finished.
|
|
8
|
+
*
|
|
9
|
+
* A shallow overlay: only the status of one issue changes, so every index that
|
|
10
|
+
* does not depend on status (`dependents`, `resourcesById`, the trees) is shared
|
|
11
|
+
* rather than rebuilt. The trees are the one thing left holding a stale status,
|
|
12
|
+
* and nothing that ranks work reads them.
|
|
13
|
+
*/
|
|
14
|
+
function withFinished(board, issue, status) {
|
|
15
|
+
const finished = { ...issue, status };
|
|
16
|
+
const byId = new Map(board.byId);
|
|
17
|
+
byId.set(issue.id, finished);
|
|
18
|
+
return {
|
|
19
|
+
...board,
|
|
20
|
+
issues: board.issues.map((other) => (other.id === issue.id ? finished : other)),
|
|
21
|
+
byId,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Work that had `issue` as its last unfinished blocker. */
|
|
25
|
+
function unblockedBy(before, after, issue) {
|
|
26
|
+
return (before.dependents.get(issue.id) ?? [])
|
|
27
|
+
.map((id) => after.byId.get(id))
|
|
28
|
+
.filter((other) => Boolean(other))
|
|
29
|
+
.filter((other) => blockersOf(after, other).length === 0);
|
|
30
|
+
}
|
|
31
|
+
/** Why this open work unit was never picked up. Most specific cause first. */
|
|
32
|
+
function classify(board, issue, resource, options) {
|
|
33
|
+
const holder = issue.assignee ? (board.resourcesById.get(issue.assignee) ?? null) : null;
|
|
34
|
+
const skip = (reason, blockedBy = []) => ({
|
|
35
|
+
issue,
|
|
36
|
+
reason,
|
|
37
|
+
blockedBy,
|
|
38
|
+
holder,
|
|
39
|
+
period: periodOf(board, issue),
|
|
40
|
+
});
|
|
41
|
+
// Ahead of everything: a flag is a statement that this work has stopped and
|
|
42
|
+
// needs a person, which is the answer a reader can act on. It is also why the
|
|
43
|
+
// run is short, so it must not be reported as something vaguer.
|
|
44
|
+
if (issue.flag)
|
|
45
|
+
return skip('flagged');
|
|
46
|
+
if (isActiveStatus(board.config, issue.status))
|
|
47
|
+
return skip('active');
|
|
48
|
+
if (options.scope && !inScope(options.scope, issue))
|
|
49
|
+
return skip('scope');
|
|
50
|
+
if (!routeOf(board, issue, resource, options))
|
|
51
|
+
return skip('routing');
|
|
52
|
+
const squadGate = issue.period ? board.periodSquadMembers.get(issue.period) : undefined;
|
|
53
|
+
if (squadGate && !squadGate.has(resource.id))
|
|
54
|
+
return skip('squad');
|
|
55
|
+
// Ahead of 'blocked': parked work was never a candidate, so saying what it is
|
|
56
|
+
// waiting on would answer a question the queue never got as far as asking.
|
|
57
|
+
if (!options.includeParked && isParked(board, issue))
|
|
58
|
+
return skip('parked');
|
|
59
|
+
const blockedBy = blockersOf(board, issue);
|
|
60
|
+
return blockedBy.length ? skip('blocked', blockedBy) : skip('ready');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Work the queue through as one person, and report the sequence.
|
|
64
|
+
*
|
|
65
|
+
* The caller resolves the resource, because naming somebody is the CLI's job
|
|
66
|
+
* (`findResource` takes a name as readily as an id) and a report about a person
|
|
67
|
+
* who does not exist has nothing to say.
|
|
68
|
+
*/
|
|
69
|
+
export function simulateQueue(board, resource, options = {}) {
|
|
70
|
+
const done = terminalStatusId(board.config);
|
|
71
|
+
if (!done) {
|
|
72
|
+
throw new BoardError('This board has no end state, so nothing can be simulated as finished', [
|
|
73
|
+
'Mark one of the statuses in .lpm/config.yml with `terminal: true`.',
|
|
74
|
+
]);
|
|
75
|
+
}
|
|
76
|
+
const measuresEffort = Boolean(board.config.effort_attribute);
|
|
77
|
+
const limit = options.limit === undefined ? Infinity : Math.max(0, options.limit);
|
|
78
|
+
const steps = [];
|
|
79
|
+
let state = board;
|
|
80
|
+
let total = 0;
|
|
81
|
+
const take = (candidate, started) => {
|
|
82
|
+
const effort = effortOf(state, candidate.issue);
|
|
83
|
+
if (effort !== null)
|
|
84
|
+
total += effort;
|
|
85
|
+
const next = withFinished(state, candidate.issue, done);
|
|
86
|
+
steps.push({
|
|
87
|
+
order: steps.length + 1,
|
|
88
|
+
issue: candidate.issue,
|
|
89
|
+
route: candidate.route,
|
|
90
|
+
pool: candidate.pool,
|
|
91
|
+
period: candidate.period,
|
|
92
|
+
started,
|
|
93
|
+
effort,
|
|
94
|
+
cumulative: measuresEffort ? total : null,
|
|
95
|
+
unblocked: unblockedBy(state, next, candidate.issue),
|
|
96
|
+
});
|
|
97
|
+
state = next;
|
|
98
|
+
};
|
|
99
|
+
// The limit is checked only once something takeable has been found, so a run
|
|
100
|
+
// that happened to end on exactly the limit is not reported as cut short.
|
|
101
|
+
let truncated = false;
|
|
102
|
+
// Work already picked up comes first: the queue does not offer it, and a run
|
|
103
|
+
// that pretended it was not there would leave its dependents blocked forever.
|
|
104
|
+
// `resumableTasks` is the same call `lpm queue agent` makes to resume its own
|
|
105
|
+
// work, which is what keeps the prediction and the run in step.
|
|
106
|
+
for (const candidate of resumableTasks(board, resource.id, options)) {
|
|
107
|
+
if (steps.length >= limit) {
|
|
108
|
+
truncated = true;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
take(candidate, true);
|
|
112
|
+
}
|
|
113
|
+
// Then the queue itself, re-asked after every step — the whole point being
|
|
114
|
+
// that finishing one thing changes what the board offers next.
|
|
115
|
+
while (!truncated) {
|
|
116
|
+
const [top] = nextTasks(state, resource.id, { ...options, limit: 1 });
|
|
117
|
+
if (!top)
|
|
118
|
+
break;
|
|
119
|
+
if (steps.length >= limit) {
|
|
120
|
+
truncated = true;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
take(top, false);
|
|
124
|
+
}
|
|
125
|
+
const taken = new Set(steps.map((step) => step.issue.id));
|
|
126
|
+
const skipped = workUnits(state)
|
|
127
|
+
.filter((issue) => !taken.has(issue.id))
|
|
128
|
+
.filter((issue) => !isTerminalStatus(state.config, issue.status))
|
|
129
|
+
.map((issue) => classify(state, issue, resource, options));
|
|
130
|
+
return {
|
|
131
|
+
resource,
|
|
132
|
+
steps,
|
|
133
|
+
skipped,
|
|
134
|
+
effort: measuresEffort ? total : null,
|
|
135
|
+
unestimated: measuresEffort ? steps.filter((step) => step.effort === null).length : 0,
|
|
136
|
+
truncated,
|
|
137
|
+
parked: skipped.filter((skip) => skip.reason === 'parked').length,
|
|
138
|
+
flagged: skipped.filter((skip) => skip.reason === 'flagged' && skip.issue.assignee === resource.id).length,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=simulate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/core/board/simulate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "What should I work on?" plus "who is carrying how much?" — the read-only
|
|
3
|
+
* resource dimension of the board.
|
|
4
|
+
*
|
|
5
|
+
* Split across two modules so each answers one question:
|
|
6
|
+
*
|
|
7
|
+
* - `ranking.ts` — ranking work: `nextTasks`, `blockedTasks`, `resumableTasks`,
|
|
8
|
+
* `currentTasks`, `previousTasks`, `rankCandidates`, `routeOf`, `isParked`,
|
|
9
|
+
* `blockersOf`, `isBlocked`, `upstreamOf`, `effortOf`, `TaskOptions`,
|
|
10
|
+
* `TaskCandidate`, `TaskRoute`, `UpstreamIssue`.
|
|
11
|
+
*
|
|
12
|
+
* - `roster.ts` — reporting load: `resourceLoad`, `LoadRow`, `LoadReport`.
|
|
13
|
+
*
|
|
14
|
+
* Everything here derives from the board plus the config; nothing writes.
|
|
15
|
+
* `lpm task` and `lpm team` are thin printers over these functions.
|
|
16
|
+
*
|
|
17
|
+
* The export surface is load-bearing: `simulate.ts` deliberately imports
|
|
18
|
+
* `resumableTasks`, `routeOf` and `isParked` so the simulator can never
|
|
19
|
+
* disagree with the queue — and `src/runner/loop.ts` imports `resumableTasks`
|
|
20
|
+
* for the same reason, so `lpm queue agent` resumes exactly the work
|
|
21
|
+
* `lpm queue simulate` says it will. `test/simulate.test.ts` and
|
|
22
|
+
* `test/runner-loop.test.ts` enforce it.
|
|
23
|
+
*/
|
|
24
|
+
export * from './ranking.js';
|
|
25
|
+
export * from './roster.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "What should I work on?" plus "who is carrying how much?" — the read-only
|
|
3
|
+
* resource dimension of the board.
|
|
4
|
+
*
|
|
5
|
+
* Split across two modules so each answers one question:
|
|
6
|
+
*
|
|
7
|
+
* - `ranking.ts` — ranking work: `nextTasks`, `blockedTasks`, `resumableTasks`,
|
|
8
|
+
* `currentTasks`, `previousTasks`, `rankCandidates`, `routeOf`, `isParked`,
|
|
9
|
+
* `blockersOf`, `isBlocked`, `upstreamOf`, `effortOf`, `TaskOptions`,
|
|
10
|
+
* `TaskCandidate`, `TaskRoute`, `UpstreamIssue`.
|
|
11
|
+
*
|
|
12
|
+
* - `roster.ts` — reporting load: `resourceLoad`, `LoadRow`, `LoadReport`.
|
|
13
|
+
*
|
|
14
|
+
* Everything here derives from the board plus the config; nothing writes.
|
|
15
|
+
* `lpm task` and `lpm team` are thin printers over these functions.
|
|
16
|
+
*
|
|
17
|
+
* The export surface is load-bearing: `simulate.ts` deliberately imports
|
|
18
|
+
* `resumableTasks`, `routeOf` and `isParked` so the simulator can never
|
|
19
|
+
* disagree with the queue — and `src/runner/loop.ts` imports `resumableTasks`
|
|
20
|
+
* for the same reason, so `lpm queue agent` resumes exactly the work
|
|
21
|
+
* `lpm queue simulate` says it will. `test/simulate.test.ts` and
|
|
22
|
+
* `test/runner-loop.test.ts` enforce it.
|
|
23
|
+
*/
|
|
24
|
+
export * from './ranking.js';
|
|
25
|
+
export * from './roster.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/board/tasks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { Issue, Period, Resource } from '../../model/types.js';
|
|
2
|
+
import type { BlockingLookup, UpstreamEntry } from '../../../shared/blocking.js';
|
|
3
|
+
import type { LoadedBoard } from '../load.js';
|
|
4
|
+
import type { ResolvedScope } from '../scope.js';
|
|
5
|
+
/**
|
|
6
|
+
* "What should I work on?" — ranking work by schedule, priority, status and
|
|
7
|
+
* how far along the part of the plan it sits in already is.
|
|
8
|
+
* Everything here derives from the board plus the config; nothing writes.
|
|
9
|
+
* `lpm task` and `lpm task next` are thin printers over these functions.
|
|
10
|
+
*/
|
|
11
|
+
export interface TaskOptions {
|
|
12
|
+
/** Also consider issues nobody is assigned to. */
|
|
13
|
+
includeUnassigned?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Also consider work in a period somebody switched off. Off by default: the
|
|
16
|
+
* switch means "not this one", so parked work is not offered until it is
|
|
17
|
+
* asked for. It stays reachable by id, like everything else the switch and a
|
|
18
|
+
* profile's scope steer — see `isParked`.
|
|
19
|
+
*/
|
|
20
|
+
includeParked?: boolean;
|
|
21
|
+
/** Today as YYYY-MM-DD. Injectable so recommendations are testable. */
|
|
22
|
+
today?: string;
|
|
23
|
+
limit?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Only offer work inside this scope — the reader's profile, resolved. Omit
|
|
26
|
+
* it for the whole board. It narrows what is *offered*: `currentTasks` and
|
|
27
|
+
* `previousTasks` deliberately ignore it, because work already picked up
|
|
28
|
+
* stays yours even if the scope it came from moves.
|
|
29
|
+
*/
|
|
30
|
+
scope?: ResolvedScope | null;
|
|
31
|
+
/**
|
|
32
|
+
* Prefer work under this parent (by id) ahead of everything else, so a run
|
|
33
|
+
* finishes the feature it is inside before starting another. This is the
|
|
34
|
+
* emphatic form of the cohesion every ranking applies (`src/shared/cohesion.ts`
|
|
35
|
+
* keeps a queue inside the containers already under way); it outranks even the
|
|
36
|
+
* schedule, which is why it is off by default and only `lpm queue agent` sets
|
|
37
|
+
* it, to the parent of the task it just finished.
|
|
38
|
+
* It reorders what is *offered* and never widens it: the sibling still has to
|
|
39
|
+
* be a ready, in-scope, routable work unit to be picked at all.
|
|
40
|
+
*/
|
|
41
|
+
focusParent?: string | null;
|
|
42
|
+
}
|
|
43
|
+
/** How a piece of work reached the person being advised. */
|
|
44
|
+
export type TaskRoute = 'direct' | 'pool' | 'unassigned';
|
|
45
|
+
export interface TaskCandidate {
|
|
46
|
+
issue: Issue;
|
|
47
|
+
route: TaskRoute;
|
|
48
|
+
/** The pool the work is parked in, when `route` is 'pool'. */
|
|
49
|
+
pool: Resource | null;
|
|
50
|
+
period: Period | null;
|
|
51
|
+
/** Issues that must finish first. Empty for anything `nextTasks` returns. */
|
|
52
|
+
blockedBy: Issue[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Adapt a `LoadedBoard` to the id-based lookup `src/shared/blocking.ts` reads.
|
|
56
|
+
*
|
|
57
|
+
* Exported because `validation/checks/dependencies.ts` runs the cycle check
|
|
58
|
+
* over the *inherited* graph these rules produce, and a second adapter there
|
|
59
|
+
* would be a second answer to "what gates this issue".
|
|
60
|
+
*/
|
|
61
|
+
export declare function blockingLookupFor(board: LoadedBoard): BlockingLookup;
|
|
62
|
+
/**
|
|
63
|
+
* Issues that must be finished before `issue` can start, nearest cause first.
|
|
64
|
+
*
|
|
65
|
+
* Dependencies are inherited: an issue waits on everything its ancestors wait
|
|
66
|
+
* on. A dependency on a container is cleared by the work inside it rather than
|
|
67
|
+
* by the container's own status.
|
|
68
|
+
*
|
|
69
|
+
* @see src/shared/blocking.ts for the rules and why they are that way.
|
|
70
|
+
*/
|
|
71
|
+
export declare function blockersOf(board: LoadedBoard, issue: Issue): Issue[];
|
|
72
|
+
export declare function isBlocked(board: LoadedBoard, issue: Issue): boolean;
|
|
73
|
+
/** An upstream issue with the document resolved. @see upstreamOf */
|
|
74
|
+
export interface UpstreamIssue extends UpstreamEntry {
|
|
75
|
+
issue: Issue;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Everything that has to be finished before `issue` can be, nearest cause
|
|
79
|
+
* first — the whole chain, not just the nearest link of it.
|
|
80
|
+
*
|
|
81
|
+
* `blockersOf` says why the work cannot start today. This says what would have
|
|
82
|
+
* to happen for it to be closed at all: what the blockers wait on, what those
|
|
83
|
+
* wait on, and the open work inside each blocking container, which is what a
|
|
84
|
+
* container amounts to and what somebody would actually be handed.
|
|
85
|
+
*
|
|
86
|
+
* Read-only, and it answers for the board as it stands — a dangling id blocks
|
|
87
|
+
* nothing, exactly as it does for the queue.
|
|
88
|
+
*
|
|
89
|
+
* @see src/shared/blocking.ts for the rules and why they are that way.
|
|
90
|
+
*/
|
|
91
|
+
export declare function upstreamOf(board: LoadedBoard, issue: Issue): UpstreamIssue[];
|
|
92
|
+
/**
|
|
93
|
+
* Work sitting in a period somebody switched off — including one nested inside
|
|
94
|
+
* a switched-off period, since `periodStance` cascades the way parking an
|
|
95
|
+
* increment parks the sprints in it.
|
|
96
|
+
*
|
|
97
|
+
* This is the one definition of "parked", and `candidatesFor` is the one place
|
|
98
|
+
* that acts on it, so `lpm task next`, `lpm task start`, MCP `next_tasks` and
|
|
99
|
+
* `simulateQueue` cannot disagree about whether a parked sprint is on offer.
|
|
100
|
+
*/
|
|
101
|
+
export declare function isParked(board: LoadedBoard, issue: Issue): boolean;
|
|
102
|
+
/** Effort declared on an issue, when the board measures effort at all. */
|
|
103
|
+
export declare function effortOf(board: LoadedBoard, issue: Issue): number | null;
|
|
104
|
+
/**
|
|
105
|
+
* The order the queue offers work in, applied to candidates that did not come
|
|
106
|
+
* from `candidatesFor` — work already under way, say. Exported so a caller that
|
|
107
|
+
* assembles its own list still ranks it the one way the board ranks work.
|
|
108
|
+
*/
|
|
109
|
+
export declare function rankCandidates(board: LoadedBoard, candidates: TaskCandidate[], options?: TaskOptions): TaskCandidate[];
|
|
110
|
+
/**
|
|
111
|
+
* How a piece of work reaches a resource, or null when it never does: assigned
|
|
112
|
+
* to it, parked in a pool it covers, or assigned to nobody when the caller is
|
|
113
|
+
* willing to consider that.
|
|
114
|
+
*
|
|
115
|
+
* The public face of the rule `candidatesFor` filters by. It answers *routing*
|
|
116
|
+
* alone and says nothing about whether the work is ready, in scope or finished
|
|
117
|
+
* — a caller explaining why something was never offered needs to separate those
|
|
118
|
+
* reasons, and asking this is how it does so without restating the rule.
|
|
119
|
+
*/
|
|
120
|
+
export declare function routeOf(board: LoadedBoard, issue: Issue, resource: Resource, options?: TaskOptions): {
|
|
121
|
+
route: TaskRoute;
|
|
122
|
+
pool: Resource | null;
|
|
123
|
+
} | null;
|
|
124
|
+
/** What to work on next: ready, unblocked work, best first. */
|
|
125
|
+
export declare function nextTasks(board: LoadedBoard, resourceId: string, options?: TaskOptions): TaskCandidate[];
|
|
126
|
+
/** Work that would be next if something else were finished first. */
|
|
127
|
+
export declare function blockedTasks(board: LoadedBoard, resourceId: string, options?: TaskOptions): TaskCandidate[];
|
|
128
|
+
/**
|
|
129
|
+
* Work this resource has already picked up and may carry straight on with.
|
|
130
|
+
*
|
|
131
|
+
* The queue never offers what has been picked up — `candidatesFor` skips an
|
|
132
|
+
* active status, because a thing in progress is not a thing to start. That
|
|
133
|
+
* leaves a hole for anything working the queue on its own: a run that only ever
|
|
134
|
+
* asked `nextTasks` could never come back to a task it left half-finished, so
|
|
135
|
+
* one interrupted task dammed the board and everything waiting on it was
|
|
136
|
+
* blocked for ever. This is the one definition of "what may I carry on with",
|
|
137
|
+
* called by `simulateQueue` to seed a run and by `lpm queue agent` to resume
|
|
138
|
+
* one, so the prediction and the run cannot disagree about it.
|
|
139
|
+
*
|
|
140
|
+
* Two things are not resumable. A container somebody moved into an active
|
|
141
|
+
* column is not a thing you pick up — its children are, and counting it would
|
|
142
|
+
* double the work it stands for. And a **flag** ends the licence: it says the
|
|
143
|
+
* work has stopped and needs a person, which is a decision no one-person run
|
|
144
|
+
* is going to make on its own, so carrying on with it would assume away the
|
|
145
|
+
* very thing holding the queue up.
|
|
146
|
+
*
|
|
147
|
+
* Like `currentTasks`, this ignores scope and the period switch: work already
|
|
148
|
+
* picked up stays yours even if the queue that offered it has moved. It is
|
|
149
|
+
* ranked but never truncated — the caller decides how much of it to take.
|
|
150
|
+
*/
|
|
151
|
+
export declare function resumableTasks(board: LoadedBoard, resourceId: string, options?: TaskOptions): TaskCandidate[];
|
|
152
|
+
/** What a resource is working on right now: assigned to it, in an active status. */
|
|
153
|
+
export declare function currentTasks(board: LoadedBoard, resourceId: string): Issue[];
|
|
154
|
+
/** What a resource finished most recently, newest first. */
|
|
155
|
+
export declare function previousTasks(board: LoadedBoard, resourceId: string, limit?: number): Issue[];
|