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,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The push preflight (LP-273): every value on the board that a remote's
|
|
3
|
+
* mapping cannot carry, collected into `Problem`s **before anything is
|
|
4
|
+
* written**.
|
|
5
|
+
*
|
|
6
|
+
* Two passes of checking exist and are deliberately different:
|
|
7
|
+
*
|
|
8
|
+
* - `checkRemoteConfiguration` (`check.ts`) validates the *mapping* offline:
|
|
9
|
+
* a status mapping that is not total, an account `via` naming no string
|
|
10
|
+
* attribute, a mapping key for an undeclared attribute. It reads the config
|
|
11
|
+
* alone, whatever documents exist.
|
|
12
|
+
* - this module validates the *values*: walk the in-scope documents and ask
|
|
13
|
+
* each one "can the mapping carry you?" — its type, its status, its
|
|
14
|
+
* attributes, its assignee and its period. The answer is a `Problem[]` that
|
|
15
|
+
* a sync command prints before pushing, and `hasErrorProblems` decides
|
|
16
|
+
* whether any request is made at all.
|
|
17
|
+
*
|
|
18
|
+
* The split that matters here is **dropped vs degraded**:
|
|
19
|
+
*
|
|
20
|
+
* - a value the mapping cannot carry *and* cannot encode is **dropped** — the
|
|
21
|
+
* remote issue is written without it, and it is lost. That is an error, and
|
|
22
|
+
* it blocks the push: an unmapped type, an unmapped status, an attribute
|
|
23
|
+
* value that will not coerce (an enum value with no remote option), a stale
|
|
24
|
+
* assignee id, a stale period id.
|
|
25
|
+
* - a value the mapping cannot carry natively but the degradation ladder
|
|
26
|
+
* encodes elsewhere is **degraded** — a warning, and the push proceeds with
|
|
27
|
+
* it named in the summary: an attribute with no mapping (the managed block
|
|
28
|
+
* or a custom field), a person with no account (pushed unassigned).
|
|
29
|
+
*
|
|
30
|
+
* Pure: no disk, no network. The board and the opened remote are passed in, so
|
|
31
|
+
* a dry-run is this exact code path with the writes gated off.
|
|
32
|
+
*
|
|
33
|
+
* The push is the only direction here. Pull-side gaps (an unknown account, a
|
|
34
|
+
* remote value that will not coerce back) are found *during* the pull, not
|
|
35
|
+
* before it, and belong to `planPull`'s reporting — this module is the gate in
|
|
36
|
+
* front of a write.
|
|
37
|
+
*/
|
|
38
|
+
import { isGenericType } from '../core/config/lookup.js';
|
|
39
|
+
import { displayPath } from '../core/storage/paths.js';
|
|
40
|
+
import { uniqueResourceGaps } from './accounts.js';
|
|
41
|
+
import { isProbe } from './capabilities.js';
|
|
42
|
+
import { mapStatusToRemote, mapTypeToRemote, normalizeStatusMappings, } from './mapping.js';
|
|
43
|
+
import { mappingClaims, reconcileMapping } from './reconcile.js';
|
|
44
|
+
import { normalizePeriodMapping } from './periods.js';
|
|
45
|
+
import { isInScope, resolveScope } from './scope.js';
|
|
46
|
+
/** The mapping's `types` / `attributes` blocks, whatever shape they take. */
|
|
47
|
+
function asRecord(value) {
|
|
48
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
return {};
|
|
52
|
+
}
|
|
53
|
+
/** A value that carries nothing to map. */
|
|
54
|
+
function isBlank(value) {
|
|
55
|
+
if (value === undefined || value === null || value === '')
|
|
56
|
+
return true;
|
|
57
|
+
return Array.isArray(value) && value.length === 0;
|
|
58
|
+
}
|
|
59
|
+
/** An issue as the translator sees it — `BoardFields` without the ids. */
|
|
60
|
+
export function boardFieldsOf(issue) {
|
|
61
|
+
return {
|
|
62
|
+
title: issue.title,
|
|
63
|
+
body: issue.body,
|
|
64
|
+
type: issue.type,
|
|
65
|
+
status: issue.status,
|
|
66
|
+
assignee: issue.assignee,
|
|
67
|
+
period: issue.period,
|
|
68
|
+
attributes: issue.attributes,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** The roster slice the account mapping reads: resources keyed by id. */
|
|
72
|
+
export function rosterOf(board) {
|
|
73
|
+
const roster = new Map();
|
|
74
|
+
for (const resource of board.resources) {
|
|
75
|
+
roster.set(resource.id, {
|
|
76
|
+
id: resource.id,
|
|
77
|
+
title: resource.title,
|
|
78
|
+
generic: isGenericType(board.config, resource.type),
|
|
79
|
+
attributes: resource.attributes,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return roster;
|
|
83
|
+
}
|
|
84
|
+
/** The timeline slice the period mapping reads: periods keyed by id. */
|
|
85
|
+
export function periodIndexOf(board) {
|
|
86
|
+
const index = new Map();
|
|
87
|
+
for (const period of board.periods) {
|
|
88
|
+
index.set(period.id, {
|
|
89
|
+
id: period.id,
|
|
90
|
+
title: period.title,
|
|
91
|
+
type: period.type,
|
|
92
|
+
parentId: period.parentId,
|
|
93
|
+
starts: period.starts,
|
|
94
|
+
ends: period.ends,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return index;
|
|
98
|
+
}
|
|
99
|
+
/** Every attribute declared on some issue type, keyed by name. */
|
|
100
|
+
export function attributeDefsOf(board) {
|
|
101
|
+
const defs = {};
|
|
102
|
+
for (const type of Object.values(board.config.issue_types)) {
|
|
103
|
+
for (const [name, def] of Object.entries(type.attributes)) {
|
|
104
|
+
defs[name] = def;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return defs;
|
|
108
|
+
}
|
|
109
|
+
/** Dedupe coercion failures by (direction, attribute, reason), sorted. */
|
|
110
|
+
function uniqueAttributeProblems(problems) {
|
|
111
|
+
const seen = new Set();
|
|
112
|
+
const out = [];
|
|
113
|
+
for (const problem of problems) {
|
|
114
|
+
const key = `${problem.direction}\u0000${problem.attribute}\u0000${problem.reason}`;
|
|
115
|
+
if (seen.has(key))
|
|
116
|
+
continue;
|
|
117
|
+
seen.add(key);
|
|
118
|
+
out.push(problem);
|
|
119
|
+
}
|
|
120
|
+
return out.sort((a, b) => a.attribute.localeCompare(b.attribute) || a.reason.localeCompare(b.reason));
|
|
121
|
+
}
|
|
122
|
+
/** Dedupe period gaps by period id, sorted. */
|
|
123
|
+
function uniquePeriodGaps(gaps) {
|
|
124
|
+
const seen = new Set();
|
|
125
|
+
const out = [];
|
|
126
|
+
for (const gap of gaps) {
|
|
127
|
+
if (seen.has(gap.periodId))
|
|
128
|
+
continue;
|
|
129
|
+
seen.add(gap.periodId);
|
|
130
|
+
out.push(gap);
|
|
131
|
+
}
|
|
132
|
+
return out.sort((a, b) => a.periodId.localeCompare(b.periodId));
|
|
133
|
+
}
|
|
134
|
+
export function pushGaps(board, remote, issues) {
|
|
135
|
+
const roster = rosterOf(board);
|
|
136
|
+
const periods = periodIndexOf(board);
|
|
137
|
+
const attributeDefs = attributeDefsOf(board);
|
|
138
|
+
const attributeProblems = [];
|
|
139
|
+
const resourceGaps = [];
|
|
140
|
+
const periodGaps = [];
|
|
141
|
+
for (const issue of issues) {
|
|
142
|
+
const op = { kind: 'create', localId: issue.id, fields: boardFieldsOf(issue) };
|
|
143
|
+
const result = remote.provider.translator.describeRequest(op, remote.mapping, attributeDefs, roster, periods);
|
|
144
|
+
attributeProblems.push(...result.problems);
|
|
145
|
+
resourceGaps.push(...result.resourceGaps);
|
|
146
|
+
periodGaps.push(...result.periodGaps);
|
|
147
|
+
}
|
|
148
|
+
return { attributeProblems, resourceGaps, periodGaps };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* `accounts` and `periods` say whether those two families are rendered here.
|
|
152
|
+
* The readiness check turns them off because it reports the same gaps in a
|
|
153
|
+
* richer form — with the remote's own answer beside them, and a fix to choose
|
|
154
|
+
* — and one thing reported twice in one dialog reads as two things.
|
|
155
|
+
*/
|
|
156
|
+
export function preflightPush(board, remote, include = {}) {
|
|
157
|
+
const problems = [];
|
|
158
|
+
const configPath = displayPath(board.paths, board.paths.configPath);
|
|
159
|
+
const scope = resolveScope(board.issues, remote.scope);
|
|
160
|
+
const inScope = board.issues.filter((issue) => isInScope(scope, issue.id));
|
|
161
|
+
const periods = periodIndexOf(board);
|
|
162
|
+
// A connection key that only part of the mapping needs — Jira's Agile board
|
|
163
|
+
// id, which a sprint cannot be found or created without. The provider states
|
|
164
|
+
// the demand (`conditionalConnection`); this is where the mapping and the
|
|
165
|
+
// connection are both in hand, and it runs before anything is written. Until
|
|
166
|
+
// this check existed the push got as far as creating sprints and *then*
|
|
167
|
+
// stopped, having already asked for confirmation to write.
|
|
168
|
+
for (const need of remote.provider.conditionalConnection ?? []) {
|
|
169
|
+
if (remote.mapping[need.needs] === undefined)
|
|
170
|
+
continue;
|
|
171
|
+
const value = remote.connection[need.key];
|
|
172
|
+
if (value !== undefined && value !== '')
|
|
173
|
+
continue;
|
|
174
|
+
problems.push({
|
|
175
|
+
level: 'error',
|
|
176
|
+
path: configPath,
|
|
177
|
+
message: `remotes.${remote.name}.connection.${need.key}: the mapping carries ` +
|
|
178
|
+
`"${need.needs}" and this remote has no ${need.key} — ${need.why}`,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
const typeMappings = asRecord(remote.mapping['types']);
|
|
182
|
+
const statusMappings = normalizeStatusMappings(asRecord(remote.mapping['statuses']));
|
|
183
|
+
// An unmapped type is dropped — the issue is filed without it. Error.
|
|
184
|
+
const usedTypes = [...new Set(inScope.map((issue) => issue.type))].sort();
|
|
185
|
+
for (const type of usedTypes) {
|
|
186
|
+
if (mapTypeToRemote(typeMappings, type) === undefined) {
|
|
187
|
+
problems.push({
|
|
188
|
+
level: 'error',
|
|
189
|
+
path: configPath,
|
|
190
|
+
message: `remotes.${remote.name}.mapping.types.${type}: type "${type}" has no mapping`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// An unmapped status is dropped. Normally `openRemote` already refuses a
|
|
195
|
+
// non-total status mapping; this is the same rule against the values the
|
|
196
|
+
// board actually uses, kept for a remote opened through another path.
|
|
197
|
+
const usedStatuses = [...new Set(inScope.map((issue) => issue.status))].sort();
|
|
198
|
+
for (const status of usedStatuses) {
|
|
199
|
+
if (mapStatusToRemote(statusMappings, status) === undefined) {
|
|
200
|
+
problems.push({
|
|
201
|
+
level: 'error',
|
|
202
|
+
path: configPath,
|
|
203
|
+
message: `remotes.${remote.name}.mapping.statuses.${status}: status "${status}" has no mapping`,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Run the translator over every in-scope document — attributes, assignees and
|
|
208
|
+
// periods — exactly as the push will, collecting what it reports.
|
|
209
|
+
const { attributeProblems, resourceGaps, periodGaps } = pushGaps(board, remote, inScope);
|
|
210
|
+
// An attribute that is used but not mapped degrades — a warning, never an
|
|
211
|
+
// error: the value is encoded elsewhere, not lost.
|
|
212
|
+
const mappedAttributes = new Set(Object.keys(asRecord(remote.mapping['attributes'])));
|
|
213
|
+
const usedAttributes = new Set();
|
|
214
|
+
for (const issue of inScope) {
|
|
215
|
+
for (const [name, value] of Object.entries(issue.attributes)) {
|
|
216
|
+
if (!isBlank(value))
|
|
217
|
+
usedAttributes.add(name);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Custom fields may be a probe (account-dependent) — offline, the preflight
|
|
221
|
+
// reads the declared cell conservatively: a probed or absent cell means the
|
|
222
|
+
// managed block, a literal non-null cell means a custom field. The resolved
|
|
223
|
+
// answer is the sync command's to supply (LP-275 names the rung for real).
|
|
224
|
+
const customFields = remote.provider.capabilities.customFields;
|
|
225
|
+
const provisionable = !isProbe(customFields) && customFields !== null;
|
|
226
|
+
const rung = provisionable ? 'a custom field' : 'the managed block';
|
|
227
|
+
for (const attribute of [...usedAttributes].sort()) {
|
|
228
|
+
if (mappedAttributes.has(attribute))
|
|
229
|
+
continue;
|
|
230
|
+
problems.push({
|
|
231
|
+
level: 'warn',
|
|
232
|
+
path: configPath,
|
|
233
|
+
message: `remotes.${remote.name}.mapping.attributes.${attribute}: attribute "${attribute}" is not mapped; it will be encoded in ${rung}`,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
// A coercion failure is dropped — an enum value with no remote option, free
|
|
237
|
+
// text in a number field. Error.
|
|
238
|
+
for (const problem of uniqueAttributeProblems(attributeProblems)) {
|
|
239
|
+
problems.push({
|
|
240
|
+
level: 'error',
|
|
241
|
+
path: configPath,
|
|
242
|
+
message: `remotes.${remote.name}.mapping.attributes.${problem.attribute}: ${problem.reason}`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// A stale assignee id is dropped; a person with no account is degraded to
|
|
246
|
+
// unassigned. The gap carries no level, so the split is made here: an id not
|
|
247
|
+
// on the roster is an error, everything else a warning.
|
|
248
|
+
for (const gap of include.accounts === false ? [] : uniqueResourceGaps(resourceGaps)) {
|
|
249
|
+
const stale = !board.resourcesById.has(gap.resourceId);
|
|
250
|
+
problems.push(stale
|
|
251
|
+
? {
|
|
252
|
+
level: 'error',
|
|
253
|
+
path: configPath,
|
|
254
|
+
message: `remotes.${remote.name}.mapping.accounts: assignee "${gap.resourceId}" is not on the roster`,
|
|
255
|
+
}
|
|
256
|
+
: {
|
|
257
|
+
level: 'warn',
|
|
258
|
+
path: configPath,
|
|
259
|
+
message: `remotes.${remote.name}.mapping.accounts.via: ${gap.resourceTitle} is pushed unassigned (${gap.reason})`,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// A period id the timeline does not know is dropped. Error.
|
|
263
|
+
for (const gap of include.periods === false ? [] : uniquePeriodGaps(periodGaps)) {
|
|
264
|
+
problems.push({
|
|
265
|
+
level: 'error',
|
|
266
|
+
path: configPath,
|
|
267
|
+
message: `remotes.${remote.name}.mapping.periods: period "${gap.periodId}" is not on the timeline`,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
// Iteration fields have a fixed duration set on the field, not per item
|
|
271
|
+
// (LP-313 note): a board whose mapped periods vary in length cannot fit one
|
|
272
|
+
// iteration field, so the mismatch is reported at preflight rather than a
|
|
273
|
+
// push quietly rounding.
|
|
274
|
+
const periodMapping = normalizePeriodMapping(remote.mapping['periods']);
|
|
275
|
+
if (periodMapping?.carrier === 'iteration') {
|
|
276
|
+
const durations = new Set();
|
|
277
|
+
for (const period of board.periods) {
|
|
278
|
+
if (period.type !== periodMapping.container)
|
|
279
|
+
continue;
|
|
280
|
+
if (period.starts === undefined || period.ends === undefined)
|
|
281
|
+
continue;
|
|
282
|
+
const start = Date.parse(period.starts);
|
|
283
|
+
const end = Date.parse(period.ends);
|
|
284
|
+
if (Number.isNaN(start) || Number.isNaN(end))
|
|
285
|
+
continue;
|
|
286
|
+
durations.add(Math.round((end - start) / 86400000));
|
|
287
|
+
}
|
|
288
|
+
if (durations.size > 1) {
|
|
289
|
+
problems.push({
|
|
290
|
+
level: 'warn',
|
|
291
|
+
path: configPath,
|
|
292
|
+
message: `remotes.${remote.name}.mapping.periods: the ${periodMapping.container} periods vary in length (${[...durations].sort((a, b) => a - b).join(', ')} days), but a GitHub iteration field has one fixed duration — the carrier will not fit irregular sprints`,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return problems;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* The gate the story names: an error-level problem means no request that
|
|
300
|
+
* writes may be made. Warnings (degraded fields) do not block — the sync
|
|
301
|
+
* proceeds and the caller shows them in its summary.
|
|
302
|
+
*/
|
|
303
|
+
export function hasErrorProblems(problems) {
|
|
304
|
+
return problems.some((problem) => problem.level === 'error');
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The mapped names this project does not have — the check that turns a
|
|
308
|
+
* mid-push `400 Specify a valid issue type` into a refusal before anything is
|
|
309
|
+
* written.
|
|
310
|
+
*
|
|
311
|
+
* Pure: the caller does the asking (`connector.vocabulary()`) and hands the
|
|
312
|
+
* answer here. It is the same reconciliation `lpm remote setup` prints, read
|
|
313
|
+
* for a different purpose: setup *reports* so somebody can fix the mapping,
|
|
314
|
+
* and a push *refuses*, because filing an issue under a type the project has
|
|
315
|
+
* never heard of cannot do anything but fail.
|
|
316
|
+
*
|
|
317
|
+
* A vocabulary the remote does not report at all (an absent list) is not
|
|
318
|
+
* evidence of anything and produces no problems — the same rule as every other
|
|
319
|
+
* "absence is not evidence" case in this layer.
|
|
320
|
+
*/
|
|
321
|
+
export function vocabularyProblems(remote, vocabulary, configPath) {
|
|
322
|
+
const report = reconcileMapping(mappingClaims(remote.mapping), vocabulary);
|
|
323
|
+
const problems = [];
|
|
324
|
+
for (const [block, entries] of [
|
|
325
|
+
['types', report.types],
|
|
326
|
+
['statuses', report.statuses],
|
|
327
|
+
]) {
|
|
328
|
+
for (const entry of entries?.entries ?? []) {
|
|
329
|
+
if (entry.verdict !== 'unresolved')
|
|
330
|
+
continue;
|
|
331
|
+
const has = (entries?.candidates ?? []).join(', ');
|
|
332
|
+
problems.push({
|
|
333
|
+
level: 'error',
|
|
334
|
+
path: configPath,
|
|
335
|
+
message: `remotes.${remote.name}.mapping.${block}.${entry.boardKey}: the remote has no ` +
|
|
336
|
+
`"${entry.claimed}"${has === '' ? '' : ` — it has: ${has}`}`,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return problems;
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/remote/preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a remote must already have before a push can land — created by the push
|
|
3
|
+
* itself.
|
|
4
|
+
*
|
|
5
|
+
* Some of what a board carries is not an issue field on the other side but a
|
|
6
|
+
* *thing the tracker has to own first*: a GitHub repository only applies labels
|
|
7
|
+
* it already defines, a Projects v2 board only sets a field that has been
|
|
8
|
+
* created with the right options. Push a plan onto a fresh project and every
|
|
9
|
+
* one of those is missing.
|
|
10
|
+
*
|
|
11
|
+
* **Sprints are deliberately not in that list, though they look like they
|
|
12
|
+
* belong.** A label is vocabulary — it exists only because the mapping needs
|
|
13
|
+
* somewhere to put a type — but a sprint is a *document on the board*, with a
|
|
14
|
+
* name and dates somebody wrote down. Creating one is filing part of the plan,
|
|
15
|
+
* not preparing to file it, and bundling it in here meant a board's whole
|
|
16
|
+
* timeline had to land before a single story could: one refused sprint name
|
|
17
|
+
* and nothing could be pushed at all. Periods are pushed like any other
|
|
18
|
+
* document (`lpm remote push TL-3`), and an issue whose sprint is not there
|
|
19
|
+
* yet is filed unscheduled and repaired by the push that files the sprint.
|
|
20
|
+
*
|
|
21
|
+
* This used to be a command of its own — `lpm remote provision` — which meant
|
|
22
|
+
* the first push failed, printed the name of a second command, and worked on
|
|
23
|
+
* the retry. That is a tool asking somebody to learn a word ("provision") for a
|
|
24
|
+
* step it could simply take: nothing here is a decision, it is all *implied* by
|
|
25
|
+
* the mapping the board already wrote down. A sprint is a period on the board,
|
|
26
|
+
* a label is how this provider carries a type; creating them is part of filing
|
|
27
|
+
* the plan, not a separate act.
|
|
28
|
+
*
|
|
29
|
+
* So the push does it, and reports what it made. Two entry points, the same
|
|
30
|
+
* split the rest of this layer uses: `planPrerequisites` asks the remote what
|
|
31
|
+
* it has and returns what is missing (read-only, safe on a dry run), and
|
|
32
|
+
* `createPrerequisites` makes them. The *desired* sets stay pure in
|
|
33
|
+
* `provision.ts` — this module is only the I/O and the ordering.
|
|
34
|
+
*
|
|
35
|
+
* Nothing here is destructive: every operation creates something the mapping
|
|
36
|
+
* already names, each is idempotent, and a provider whose connector cannot do
|
|
37
|
+
* one of them simply reports nothing for it.
|
|
38
|
+
*/
|
|
39
|
+
import type { LoadedBoard } from '../core/board/load.js';
|
|
40
|
+
import type { BoardPaths } from '../core/storage/paths.js';
|
|
41
|
+
import type { Connector } from './provider.js';
|
|
42
|
+
import type { OpenedRemote } from './remotes.js';
|
|
43
|
+
import { type ProjectProvisionPlan } from './providers/github/project-provision.js';
|
|
44
|
+
/** One sprint the timeline names and the remote has not got. */
|
|
45
|
+
export interface MissingSprint {
|
|
46
|
+
name: string;
|
|
47
|
+
starts?: string;
|
|
48
|
+
ends?: string;
|
|
49
|
+
}
|
|
50
|
+
/** What the remote is missing, before a push writes anything. */
|
|
51
|
+
export interface Prerequisites {
|
|
52
|
+
/** Mapped labels the remote does not define. */
|
|
53
|
+
labels: string[];
|
|
54
|
+
/**
|
|
55
|
+
* Sprints named by the periods this run was *asked* to file, and only those.
|
|
56
|
+
* Empty unless the run names period documents — pushing work never files the
|
|
57
|
+
* timeline behind it.
|
|
58
|
+
*/
|
|
59
|
+
sprints: MissingSprint[];
|
|
60
|
+
/** The Projects v2 fields and options to create, when the mapping names a Project. */
|
|
61
|
+
project?: {
|
|
62
|
+
id: string;
|
|
63
|
+
plan: ProjectProvisionPlan;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** One thing the remote would not create, and what it said about it. */
|
|
67
|
+
export interface PrerequisiteFailure {
|
|
68
|
+
/** What was being created — `sprint "Sprint 5 — Test Coverage"`. */
|
|
69
|
+
what: string;
|
|
70
|
+
/** The remote's own complaint, as the connector rendered it. */
|
|
71
|
+
message: string;
|
|
72
|
+
/** The connector's hints, when it had any. */
|
|
73
|
+
details: readonly string[];
|
|
74
|
+
}
|
|
75
|
+
/** What a push actually created, for its report. */
|
|
76
|
+
export interface PrerequisiteReport {
|
|
77
|
+
labels: string[];
|
|
78
|
+
sprints: string[];
|
|
79
|
+
/** Projects v2 fields created, and single-select options added. */
|
|
80
|
+
projectFields: number;
|
|
81
|
+
projectOptions: number;
|
|
82
|
+
/**
|
|
83
|
+
* What the remote refused. **Collected, never thrown**, for two reasons. A
|
|
84
|
+
* push is partial rather than atomic everywhere else, and a sprint the
|
|
85
|
+
* tracker will not create is no reason to refuse to file forty issues that
|
|
86
|
+
* have nothing to do with it — whatever actually needed the missing thing
|
|
87
|
+
* fails as its own operation, with its own message. And stopping at the
|
|
88
|
+
* first refusal means learning about the others one run at a time: a board
|
|
89
|
+
* with sixteen sprints, three of them named too long for Jira, took three
|
|
90
|
+
* pushes to reveal three problems that could have been one list.
|
|
91
|
+
*/
|
|
92
|
+
failures: PrerequisiteFailure[];
|
|
93
|
+
}
|
|
94
|
+
/** True when nothing at all is missing — the ordinary case after the first push. */
|
|
95
|
+
export declare function isSatisfied(pre: Prerequisites): boolean;
|
|
96
|
+
/** An empty report, for a run that had nothing to create. */
|
|
97
|
+
export declare function emptyReport(): PrerequisiteReport;
|
|
98
|
+
/**
|
|
99
|
+
* Ask the remote what it is missing. Read-only on both sides, so a dry run can
|
|
100
|
+
* say what a real push would create without creating it.
|
|
101
|
+
*
|
|
102
|
+
* A connector that cannot list a kind of thing contributes nothing of that kind
|
|
103
|
+
* — the capability is the connector's to have, never this module's to assume.
|
|
104
|
+
*/
|
|
105
|
+
export declare function planPrerequisites(board: LoadedBoard, remote: OpenedRemote, connector: Connector, paths: BoardPaths, options?: {
|
|
106
|
+
periods?: 'all' | ReadonlySet<string>;
|
|
107
|
+
}): Promise<Prerequisites>;
|
|
108
|
+
/**
|
|
109
|
+
* Create what `planPrerequisites` found, in the order a push needs it: labels
|
|
110
|
+
* and sprints before any issue is written, Project fields before a status is
|
|
111
|
+
* set on one.
|
|
112
|
+
*/
|
|
113
|
+
export declare function createPrerequisites(remote: OpenedRemote, connector: Connector, paths: BoardPaths, pre: Prerequisites): Promise<PrerequisiteReport>;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a remote must already have before a push can land — created by the push
|
|
3
|
+
* itself.
|
|
4
|
+
*
|
|
5
|
+
* Some of what a board carries is not an issue field on the other side but a
|
|
6
|
+
* *thing the tracker has to own first*: a GitHub repository only applies labels
|
|
7
|
+
* it already defines, a Projects v2 board only sets a field that has been
|
|
8
|
+
* created with the right options. Push a plan onto a fresh project and every
|
|
9
|
+
* one of those is missing.
|
|
10
|
+
*
|
|
11
|
+
* **Sprints are deliberately not in that list, though they look like they
|
|
12
|
+
* belong.** A label is vocabulary — it exists only because the mapping needs
|
|
13
|
+
* somewhere to put a type — but a sprint is a *document on the board*, with a
|
|
14
|
+
* name and dates somebody wrote down. Creating one is filing part of the plan,
|
|
15
|
+
* not preparing to file it, and bundling it in here meant a board's whole
|
|
16
|
+
* timeline had to land before a single story could: one refused sprint name
|
|
17
|
+
* and nothing could be pushed at all. Periods are pushed like any other
|
|
18
|
+
* document (`lpm remote push TL-3`), and an issue whose sprint is not there
|
|
19
|
+
* yet is filed unscheduled and repaired by the push that files the sprint.
|
|
20
|
+
*
|
|
21
|
+
* This used to be a command of its own — `lpm remote provision` — which meant
|
|
22
|
+
* the first push failed, printed the name of a second command, and worked on
|
|
23
|
+
* the retry. That is a tool asking somebody to learn a word ("provision") for a
|
|
24
|
+
* step it could simply take: nothing here is a decision, it is all *implied* by
|
|
25
|
+
* the mapping the board already wrote down. A sprint is a period on the board,
|
|
26
|
+
* a label is how this provider carries a type; creating them is part of filing
|
|
27
|
+
* the plan, not a separate act.
|
|
28
|
+
*
|
|
29
|
+
* So the push does it, and reports what it made. Two entry points, the same
|
|
30
|
+
* split the rest of this layer uses: `planPrerequisites` asks the remote what
|
|
31
|
+
* it has and returns what is missing (read-only, safe on a dry run), and
|
|
32
|
+
* `createPrerequisites` makes them. The *desired* sets stay pure in
|
|
33
|
+
* `provision.ts` — this module is only the I/O and the ordering.
|
|
34
|
+
*
|
|
35
|
+
* Nothing here is destructive: every operation creates something the mapping
|
|
36
|
+
* already names, each is idempotent, and a provider whose connector cannot do
|
|
37
|
+
* one of them simply reports nothing for it.
|
|
38
|
+
*/
|
|
39
|
+
import { BoardError } from '../core/errors.js';
|
|
40
|
+
import { labelColor, missingLabels } from './labels.js';
|
|
41
|
+
import { missingSprints } from './providers/jira/sprints.js';
|
|
42
|
+
import { desiredLabelsOf, desiredSprintsOf } from './provision.js';
|
|
43
|
+
import { resolveProjectIds } from './providers/github/projects.js';
|
|
44
|
+
import { desiredProjectFields, planProjectProvision, provisionProjectGraphql, } from './providers/github/project-provision.js';
|
|
45
|
+
/** True when nothing at all is missing — the ordinary case after the first push. */
|
|
46
|
+
export function isSatisfied(pre) {
|
|
47
|
+
return (pre.labels.length === 0 &&
|
|
48
|
+
pre.sprints.length === 0 &&
|
|
49
|
+
(pre.project === undefined || pre.project.plan.empty));
|
|
50
|
+
}
|
|
51
|
+
/** An empty report, for a run that had nothing to create. */
|
|
52
|
+
export function emptyReport() {
|
|
53
|
+
return { labels: [], sprints: [], projectFields: 0, projectOptions: 0, failures: [] };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Ask the remote what it is missing. Read-only on both sides, so a dry run can
|
|
57
|
+
* say what a real push would create without creating it.
|
|
58
|
+
*
|
|
59
|
+
* A connector that cannot list a kind of thing contributes nothing of that kind
|
|
60
|
+
* — the capability is the connector's to have, never this module's to assume.
|
|
61
|
+
*/
|
|
62
|
+
export async function planPrerequisites(board, remote, connector, paths, options) {
|
|
63
|
+
const labels = typeof connector.listLabels === 'function' && typeof connector.createLabel === 'function'
|
|
64
|
+
? missingLabels(desiredLabelsOf(board, remote), await connector.listLabels())
|
|
65
|
+
: [];
|
|
66
|
+
// Only the periods this run names. `desiredSprintsOf` still answers "every
|
|
67
|
+
// period at the mapped level", and `lpm remote push --all` asks for exactly
|
|
68
|
+
// that; a run that named some documents asks for those.
|
|
69
|
+
const wanted = options?.periods;
|
|
70
|
+
const sprints = wanted !== undefined &&
|
|
71
|
+
typeof connector.listSprints === 'function' &&
|
|
72
|
+
typeof connector.createSprint === 'function'
|
|
73
|
+
? missingSprints(desiredSprintsOf(board, remote).filter((sprint) => wanted === 'all' || wanted.has(sprint.name)), await connector.listSprints())
|
|
74
|
+
: [];
|
|
75
|
+
const input = projectInputOf(remote);
|
|
76
|
+
let project;
|
|
77
|
+
if (input !== undefined) {
|
|
78
|
+
// Always against the live Project: the plan must compare what is desired to
|
|
79
|
+
// what exists *now*, not to a cache that may predate a field created by
|
|
80
|
+
// hand.
|
|
81
|
+
const resolved = await resolveProjectIds(connector, input, paths, remote.name, {
|
|
82
|
+
refresh: true,
|
|
83
|
+
});
|
|
84
|
+
project = {
|
|
85
|
+
id: resolved.ids.project.id,
|
|
86
|
+
plan: planProjectProvision(resolved.ids, desiredProjectFields(board, remote)),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return { labels, sprints, ...(project !== undefined ? { project } : {}) };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create what `planPrerequisites` found, in the order a push needs it: labels
|
|
93
|
+
* and sprints before any issue is written, Project fields before a status is
|
|
94
|
+
* set on one.
|
|
95
|
+
*/
|
|
96
|
+
export async function createPrerequisites(remote, connector, paths, pre) {
|
|
97
|
+
const report = emptyReport();
|
|
98
|
+
/** Run one creation, recording a refusal rather than abandoning the rest. */
|
|
99
|
+
const attempt = async (what, run) => {
|
|
100
|
+
try {
|
|
101
|
+
await run();
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
report.failures.push({
|
|
106
|
+
what,
|
|
107
|
+
message: error instanceof Error ? error.message : String(error),
|
|
108
|
+
details: error instanceof BoardError ? error.details : [],
|
|
109
|
+
});
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
for (const label of pre.labels) {
|
|
114
|
+
const made = await attempt(`label ${label}`, async () => {
|
|
115
|
+
await connector.createLabel(label, labelColor(label));
|
|
116
|
+
});
|
|
117
|
+
if (made)
|
|
118
|
+
report.labels.push(label);
|
|
119
|
+
}
|
|
120
|
+
for (const sprint of pre.sprints) {
|
|
121
|
+
const made = await attempt(`sprint "${sprint.name}"`, async () => {
|
|
122
|
+
await connector.createSprint(sprint.name, sprint.starts, sprint.ends);
|
|
123
|
+
});
|
|
124
|
+
if (made)
|
|
125
|
+
report.sprints.push(sprint.name);
|
|
126
|
+
}
|
|
127
|
+
if (pre.project !== undefined && !pre.project.plan.empty) {
|
|
128
|
+
const project = pre.project;
|
|
129
|
+
await attempt('Projects v2 fields', async () => {
|
|
130
|
+
const outcome = await provisionProjectGraphql(connector, project.id, project.plan);
|
|
131
|
+
report.projectFields = outcome.created.length;
|
|
132
|
+
report.projectOptions = outcome.optionsAdded.reduce((total, field) => total + field.added.length, 0);
|
|
133
|
+
// Re-resolve so the new field and option node ids land in the committed
|
|
134
|
+
// cache: the executor reads them rather than resolving again.
|
|
135
|
+
const input = projectInputOf(remote);
|
|
136
|
+
if (input !== undefined) {
|
|
137
|
+
await resolveProjectIds(connector, input, paths, remote.name, { refresh: true });
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return report;
|
|
142
|
+
}
|
|
143
|
+
/** The Projects v2 target a mapping names, or `undefined` when it names none. */
|
|
144
|
+
function projectInputOf(remote) {
|
|
145
|
+
const project = remote.mapping['project'];
|
|
146
|
+
if (project === undefined)
|
|
147
|
+
return undefined;
|
|
148
|
+
const repo = remote.connection['repo'];
|
|
149
|
+
if (typeof repo !== 'string' || repo === '') {
|
|
150
|
+
throw new BoardError(`Remote "${remote.name}" has no repository`, [
|
|
151
|
+
`Set remotes.${remote.name}.connection.repo to "owner/repo".`,
|
|
152
|
+
]);
|
|
153
|
+
}
|
|
154
|
+
const fields = remote.mapping['fields'] ?? {};
|
|
155
|
+
return {
|
|
156
|
+
repo,
|
|
157
|
+
project: project,
|
|
158
|
+
fields: Object.fromEntries(Object.entries(fields).map(([key, value]) => [key, String(value)])),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=prerequisites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../src/remote/prerequisites.ts"],"names":[],"mappings":"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"}
|