@tacuchi/agent-workflow-cli 25.8.0 → 26.0.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/CHANGELOG.md +106 -0
- package/README.md +6 -3
- package/dist/adapters/git-cli.js +225 -17
- package/dist/adapters/git-cli.js.map +1 -1
- package/dist/adapters/node-file-system.js +48 -0
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/amend-service.js +51 -14
- package/dist/application/amend-service.js.map +1 -1
- package/dist/application/branch-resolver.js +6 -3
- package/dist/application/branch-resolver.js.map +1 -1
- package/dist/application/capability/design-handler.js +218 -43
- package/dist/application/capability/design-handler.js.map +1 -1
- package/dist/application/capability/dispatcher.js +182 -19
- package/dist/application/capability/dispatcher.js.map +1 -1
- package/dist/application/capability/durable-effect.js +3 -0
- package/dist/application/capability/durable-effect.js.map +1 -1
- package/dist/application/capability/readiness.js +8 -54
- package/dist/application/capability/readiness.js.map +1 -1
- package/dist/application/capability/resolution.js +124 -192
- package/dist/application/capability/resolution.js.map +1 -1
- package/dist/application/check-branch-service.js +158 -19
- package/dist/application/check-branch-service.js.map +1 -1
- package/dist/application/checkpoint/markdown.js +2 -2
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint/state-reader.js +12 -0
- package/dist/application/checkpoint/state-reader.js.map +1 -1
- package/dist/application/checkpoint-service.js +12 -4
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +91 -17
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/claims-ledger.js +137 -11
- package/dist/application/claims-ledger.js.map +1 -1
- package/dist/application/claims-recovery.js +85 -44
- package/dist/application/claims-recovery.js.map +1 -1
- package/dist/application/database-tool-catalog.js +33 -0
- package/dist/application/database-tool-catalog.js.map +1 -1
- package/dist/application/design/consumer-document.js +2 -2
- package/dist/application/design/consumer-document.js.map +1 -1
- package/dist/application/design/design-content-gate-service.js +20 -2
- package/dist/application/design/design-content-gate-service.js.map +1 -1
- package/dist/application/design/design-gate-service.js +2 -0
- package/dist/application/design/design-gate-service.js.map +1 -1
- package/dist/application/design/design-index-service.js +4 -0
- package/dist/application/design/design-index-service.js.map +1 -1
- package/dist/application/design/design-publish-service.js +1 -4
- package/dist/application/design/design-publish-service.js.map +1 -1
- package/dist/application/design/design-record-service.js +13 -7
- package/dist/application/design/design-record-service.js.map +1 -1
- package/dist/application/design/design-resolver-service.js +22 -3
- package/dist/application/design/design-resolver-service.js.map +1 -1
- package/dist/application/design/design-simple-service.js +24 -5
- package/dist/application/design/design-simple-service.js.map +1 -1
- package/dist/application/design/digest.js +41 -0
- package/dist/application/design/digest.js.map +1 -0
- package/dist/application/dev-only-services.js +166 -20
- package/dist/application/dev-only-services.js.map +1 -1
- package/dist/application/doc-branch-ledger.js +145 -0
- package/dist/application/doc-branch-ledger.js.map +1 -0
- package/dist/application/docs-canon-service.js +1 -1
- package/dist/application/docs-canon-service.js.map +1 -1
- package/dist/application/doctor/dist-integrity.js +113 -0
- package/dist/application/doctor/dist-integrity.js.map +1 -0
- package/dist/application/doctor/hosts.js +5 -2
- package/dist/application/doctor/hosts.js.map +1 -1
- package/dist/application/doctor/prepare.js +3 -3
- package/dist/application/doctor/prepare.js.map +1 -1
- package/dist/application/doctor/provider-installation.js +39 -19
- package/dist/application/doctor/provider-installation.js.map +1 -1
- package/dist/application/doctor/provider-mcps.js +9 -1
- package/dist/application/doctor/provider-mcps.js.map +1 -1
- package/dist/application/doctor/provider-skills.js +29 -115
- package/dist/application/doctor/provider-skills.js.map +1 -1
- package/dist/application/doctor/provider-visibility.js +76 -3
- package/dist/application/doctor/provider-visibility.js.map +1 -1
- package/dist/application/doctor/provider-workspace-block.js +156 -0
- package/dist/application/doctor/provider-workspace-block.js.map +1 -0
- package/dist/application/doctor/repair-runner.js +36 -39
- package/dist/application/doctor/repair-runner.js.map +1 -1
- package/dist/application/doctor/report.js +24 -4
- package/dist/application/doctor/report.js.map +1 -1
- package/dist/application/export-catalog-check.js +200 -0
- package/dist/application/export-catalog-check.js.map +1 -0
- package/dist/application/export-service.js +716 -79
- package/dist/application/export-service.js.map +1 -1
- package/dist/application/fix-git-service.js +285 -64
- package/dist/application/fix-git-service.js.map +1 -1
- package/dist/application/flow/advance.js +202 -25
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/annul-service.js +3 -1
- package/dist/application/flow/annul-service.js.map +1 -1
- package/dist/application/flow/batch-commit.js +189 -0
- package/dist/application/flow/batch-commit.js.map +1 -0
- package/dist/application/flow/checkout-observation.js +63 -10
- package/dist/application/flow/checkout-observation.js.map +1 -1
- package/dist/application/flow/close-artifacts.js +105 -0
- package/dist/application/flow/close-artifacts.js.map +1 -0
- package/dist/application/flow/close-at-boundary.js +25 -14
- package/dist/application/flow/close-at-boundary.js.map +1 -1
- package/dist/application/flow/close-document-guidance.js +70 -0
- package/dist/application/flow/close-document-guidance.js.map +1 -0
- package/dist/application/flow/flow-service.js +46 -3
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +300 -82
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/internal-drive.js +24 -1
- package/dist/application/flow/internal-drive.js.map +1 -1
- package/dist/application/flow/plan-entry.js +82 -0
- package/dist/application/flow/plan-entry.js.map +1 -0
- package/dist/application/flow/prove.js +32 -1
- package/dist/application/flow/prove.js.map +1 -1
- package/dist/application/flow/quick-checkouts.js +48 -0
- package/dist/application/flow/quick-checkouts.js.map +1 -0
- package/dist/application/flow/reinfer-batch.js +177 -0
- package/dist/application/flow/reinfer-batch.js.map +1 -0
- package/dist/application/flow/reopen-run.js +12 -5
- package/dist/application/flow/reopen-run.js.map +1 -1
- package/dist/application/flow/run-state-service.js +2 -0
- package/dist/application/flow/run-state-service.js.map +1 -1
- package/dist/application/flow/submit.js +584 -117
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/generate-launch-service.js +16 -6
- package/dist/application/generate-launch-service.js.map +1 -1
- package/dist/application/git-flow-service.js +34 -3
- package/dist/application/git-flow-service.js.map +1 -1
- package/dist/application/history-publications.js +24 -0
- package/dist/application/history-publications.js.map +1 -1
- package/dist/application/history-reconcile-service.js +45 -0
- package/dist/application/history-reconcile-service.js.map +1 -0
- package/dist/application/history-table.js +61 -12
- package/dist/application/history-table.js.map +1 -1
- package/dist/application/history-update-service.js +25 -4
- package/dist/application/history-update-service.js.map +1 -1
- package/dist/application/hook-branch-check.js +25 -3
- package/dist/application/hook-branch-check.js.map +1 -1
- package/dist/application/hook-git-commit-advisor.js +3 -4
- package/dist/application/hook-git-commit-advisor.js.map +1 -1
- package/dist/application/hook-turn-start.js +51 -0
- package/dist/application/hook-turn-start.js.map +1 -0
- package/dist/application/host-memory/codex.js +1 -1
- package/dist/application/host-memory/codex.js.map +1 -1
- package/dist/application/hub-registry.js +135 -0
- package/dist/application/hub-registry.js.map +1 -0
- package/dist/application/local-proposal.js +72 -19
- package/dist/application/local-proposal.js.map +1 -1
- package/dist/application/mcp-host-reader.js +1 -1
- package/dist/application/mcp-host-reader.js.map +1 -1
- package/dist/application/mcp-host-writer.js +16 -10
- package/dist/application/mcp-host-writer.js.map +1 -1
- package/dist/application/merge-state-service.js +150 -34
- package/dist/application/merge-state-service.js.map +1 -1
- package/dist/application/multiroot/claude.js +17 -10
- package/dist/application/multiroot/claude.js.map +1 -1
- package/dist/application/multiroot/codex.js +17 -11
- package/dist/application/multiroot/codex.js.map +1 -1
- package/dist/application/multiroot-service.js +52 -28
- package/dist/application/multiroot-service.js.map +1 -1
- package/dist/application/parsers/execution-batches.js +64 -0
- package/dist/application/parsers/execution-batches.js.map +1 -0
- package/dist/application/parsers/phases.js +23 -2
- package/dist/application/parsers/phases.js.map +1 -1
- package/dist/application/parsers/project-block.js +146 -17
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/parsers/tasks.js +16 -2
- package/dist/application/parsers/tasks.js.map +1 -1
- package/dist/application/parsers/toml.js +19 -0
- package/dist/application/parsers/toml.js.map +1 -0
- package/dist/application/paths-service.js +13 -16
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/persist-service.js +118 -5
- package/dist/application/persist-service.js.map +1 -1
- package/dist/application/plan-exec-batch-service.js +162 -22
- package/dist/application/plan-exec-batch-service.js.map +1 -1
- package/dist/application/plan-exec-decision-service.js +61 -12
- package/dist/application/plan-exec-decision-service.js.map +1 -1
- package/dist/application/plan-exec-plan-diff.js +105 -0
- package/dist/application/plan-exec-plan-diff.js.map +1 -0
- package/dist/application/plan-lint-service.js +33 -5
- package/dist/application/plan-lint-service.js.map +1 -1
- package/dist/application/plan-passes.js +41 -0
- package/dist/application/plan-passes.js.map +1 -0
- package/dist/application/preparation-receipts.js +58 -0
- package/dist/application/preparation-receipts.js.map +1 -0
- package/dist/application/project-md-upsert-service.js +191 -52
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/project-tab-data.js +40 -10
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/release-data/artifacts.js +15 -7
- package/dist/application/release-data/artifacts.js.map +1 -1
- package/dist/application/release-data/bundles.js +52 -6
- package/dist/application/release-data/bundles.js.map +1 -1
- package/dist/application/release-data/common.js +2 -2
- package/dist/application/release-data/common.js.map +1 -1
- package/dist/application/release-data/rollback.js +7 -0
- package/dist/application/release-data/rollback.js.map +1 -0
- package/dist/application/release-data/sessions.js +2 -2
- package/dist/application/release-data/sessions.js.map +1 -1
- package/dist/application/release-pass-ledger.js +1 -1
- package/dist/application/render/history-row.js +2 -0
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/render/project-block.js +28 -11
- package/dist/application/render/project-block.js.map +1 -1
- package/dist/application/reseal-service.js +1 -0
- package/dist/application/reseal-service.js.map +1 -1
- package/dist/application/resume-service.js +55 -8
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/retirement/apply.js +25 -7
- package/dist/application/retirement/apply.js.map +1 -1
- package/dist/application/retirement/attribution.js +122 -50
- package/dist/application/retirement/attribution.js.map +1 -1
- package/dist/application/retirement/prepare.js +17 -11
- package/dist/application/retirement/prepare.js.map +1 -1
- package/dist/application/retirement/preview.js +2 -1
- package/dist/application/retirement/preview.js.map +1 -1
- package/dist/application/self/clean-legacy.js +1 -2
- package/dist/application/self/clean-legacy.js.map +1 -1
- package/dist/application/self/codex-plugin.js +1 -1
- package/dist/application/self/codex-plugin.js.map +1 -1
- package/dist/application/self/host-states.js +3 -3
- package/dist/application/self/host-states.js.map +1 -1
- package/dist/application/self/install-hooks.js +1 -1
- package/dist/application/self/install-hooks.js.map +1 -1
- package/dist/application/self/install-skill.js +5 -49
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/mcp-config.js +19 -11
- package/dist/application/self/mcp-config.js.map +1 -1
- package/dist/application/self/opencode-plugin.js +1 -0
- package/dist/application/self/opencode-plugin.js.map +1 -1
- package/dist/application/self/skill-files.js +29 -0
- package/dist/application/self/skill-files.js.map +1 -0
- package/dist/application/self/uninstall.js +1 -1
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +66 -5
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/session-archive-service.js +113 -0
- package/dist/application/session-archive-service.js.map +1 -0
- package/dist/application/session-binding-service.js +35 -0
- package/dist/application/session-binding-service.js.map +1 -1
- package/dist/application/session-close-service.js +390 -54
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-create-service.js +97 -5
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-custody-recorder.js +15 -12
- package/dist/application/session-custody-recorder.js.map +1 -1
- package/dist/application/session-custody-service.js +1 -0
- package/dist/application/session-custody-service.js.map +1 -1
- package/dist/application/session-narrative.js +42 -12
- package/dist/application/session-narrative.js.map +1 -1
- package/dist/application/session-pause-service.js +46 -0
- package/dist/application/session-pause-service.js.map +1 -0
- package/dist/application/session-resolver.js +36 -11
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/session-resume-service.js +134 -13
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/sessions-service.js +4 -0
- package/dist/application/sessions-service.js.map +1 -1
- package/dist/application/sessions-sweep-service.js +77 -0
- package/dist/application/sessions-sweep-service.js.map +1 -0
- package/dist/application/settle-service.js +3 -1
- package/dist/application/settle-service.js.map +1 -1
- package/dist/application/skills-resolver-service.js +6 -92
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/source-add-service.js +37 -0
- package/dist/application/source-add-service.js.map +1 -0
- package/dist/application/source-boundary-policy.js +105 -8
- package/dist/application/source-boundary-policy.js.map +1 -1
- package/dist/application/source-pipeline.js +68 -0
- package/dist/application/source-pipeline.js.map +1 -0
- package/dist/application/source-remove-service.js +15 -3
- package/dist/application/source-remove-service.js.map +1 -1
- package/dist/application/sources-service.js +71 -16
- package/dist/application/sources-service.js.map +1 -1
- package/dist/application/status-service.js +55 -5
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/unit-dependencies.js +100 -0
- package/dist/application/unit-dependencies.js.map +1 -0
- package/dist/application/unit-membership.js +37 -0
- package/dist/application/unit-membership.js.map +1 -0
- package/dist/application/unit-residue.js +72 -0
- package/dist/application/unit-residue.js.map +1 -0
- package/dist/application/visibility-doctor-service.js +66 -4
- package/dist/application/visibility-doctor-service.js.map +1 -1
- package/dist/application/working-branch-service.js +6 -0
- package/dist/application/working-branch-service.js.map +1 -1
- package/dist/application/workline-graph.js +1 -1
- package/dist/application/workline-graph.js.map +1 -1
- package/dist/application/workline-index-service.js +118 -17
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-commit-service.js +218 -0
- package/dist/application/workspace-commit-service.js.map +1 -0
- package/dist/application/workspace-init-service.js +64 -34
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/application/workspace-local-config.js +90 -0
- package/dist/application/workspace-local-config.js.map +1 -0
- package/dist/application/workspace-materialization-service.js +52 -3
- package/dist/application/workspace-materialization-service.js.map +1 -1
- package/dist/application/workspace-migrate/apply.js +525 -4
- package/dist/application/workspace-migrate/apply.js.map +1 -1
- package/dist/application/workspace-migrate/markers.js +9 -6
- package/dist/application/workspace-migrate/markers.js.map +1 -1
- package/dist/application/workspace-migrate/plan.js +97 -5
- package/dist/application/workspace-migrate/plan.js.map +1 -1
- package/dist/application/workspace-move-service.js +270 -0
- package/dist/application/workspace-move-service.js.map +1 -0
- package/dist/application/workspace-untrack-service.js +28 -0
- package/dist/application/workspace-untrack-service.js.map +1 -0
- package/dist/application/worktree-service.js +654 -105
- package/dist/application/worktree-service.js.map +1 -1
- package/dist/cli/ascii.js +2 -0
- package/dist/cli/ascii.js.map +1 -1
- package/dist/cli/commands/add-source.js +38 -0
- package/dist/cli/commands/add-source.js.map +1 -0
- package/dist/cli/commands/amend.js +14 -3
- package/dist/cli/commands/amend.js.map +1 -1
- package/dist/cli/commands/capability.js +23 -4
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/designs.js +14 -5
- package/dist/cli/commands/designs.js.map +1 -1
- package/dist/cli/commands/dev-only.js +19 -6
- package/dist/cli/commands/dev-only.js.map +1 -1
- package/dist/cli/commands/doc-branch.js +184 -0
- package/dist/cli/commands/doc-branch.js.map +1 -0
- package/dist/cli/commands/doctor.js +5 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export.js +78 -18
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/fix-git.js +89 -14
- package/dist/cli/commands/fix-git.js.map +1 -1
- package/dist/cli/commands/flow.js +120 -15
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/generate-launch.js +14 -2
- package/dist/cli/commands/generate-launch.js.map +1 -1
- package/dist/cli/commands/history-update.js +1 -1
- package/dist/cli/commands/history-update.js.map +1 -1
- package/dist/cli/commands/history.js +14 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/hook.js +15 -2
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/index.js +18 -5
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/merge-state.js +2 -2
- package/dist/cli/commands/merge-state.js.map +1 -1
- package/dist/cli/commands/persist.js +6 -5
- package/dist/cli/commands/persist.js.map +1 -1
- package/dist/cli/commands/project-md-upsert.js +5 -3
- package/dist/cli/commands/project-md-upsert.js.map +1 -1
- package/dist/cli/commands/release-pass.js +3 -3
- package/dist/cli/commands/release-pass.js.map +1 -1
- package/dist/cli/commands/resume.js +12 -3
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/self.js +8 -24
- package/dist/cli/commands/self.js.map +1 -1
- package/dist/cli/commands/session-close.js +64 -9
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/commands/session-create.js +4 -2
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/session-pause.js +14 -0
- package/dist/cli/commands/session-pause.js.map +1 -0
- package/dist/cli/commands/sessions.js +16 -3
- package/dist/cli/commands/sessions.js.map +1 -1
- package/dist/cli/commands/set-branch.js +28 -4
- package/dist/cli/commands/set-branch.js.map +1 -1
- package/dist/cli/commands/set-edit-mode.js +20 -0
- package/dist/cli/commands/set-edit-mode.js.map +1 -0
- package/dist/cli/commands/set-pipeline.js +35 -0
- package/dist/cli/commands/set-pipeline.js.map +1 -0
- package/dist/cli/commands/skills.js +4 -11
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sources.js +4 -0
- package/dist/cli/commands/sources.js.map +1 -1
- package/dist/cli/commands/status.js +35 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/unknown-flags.js +1 -0
- package/dist/cli/commands/unknown-flags.js.map +1 -1
- package/dist/cli/commands/visibility.js +1 -0
- package/dist/cli/commands/visibility.js.map +1 -1
- package/dist/cli/commands/workspace-commit.js +62 -0
- package/dist/cli/commands/workspace-commit.js.map +1 -0
- package/dist/cli/commands/workspace-init.js +39 -2
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/cli/commands/workspace-migrate.js +31 -3
- package/dist/cli/commands/workspace-migrate.js.map +1 -1
- package/dist/cli/commands/workspace-move.js +42 -0
- package/dist/cli/commands/workspace-move.js.map +1 -0
- package/dist/cli/commands/worktree.js +4 -4
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/context-id.js +6 -0
- package/dist/cli/context-id.js.map +1 -1
- package/dist/cli/full-cli.js +555 -0
- package/dist/cli/full-cli.js.map +1 -0
- package/dist/cli/help-groups.js +76 -19
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/hook-stdin-cache.js +12 -0
- package/dist/cli/hook-stdin-cache.js.map +1 -0
- package/dist/cli/main.js +47 -453
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/parser.js +4 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/app.js +3 -4
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/host-admin-section.js +2 -13
- package/dist/cli/tui/components/host-admin-section.js.map +1 -1
- package/dist/cli/tui/components/tabs-config.js +1 -2
- package/dist/cli/tui/components/tabs-config.js.map +1 -1
- package/dist/cli/tui/components/workspace-init-form.js +4 -1
- package/dist/cli/tui/components/workspace-init-form.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +6 -1
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab.js +4 -3
- package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +7 -2
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/cli/tui/tui-prefs.js +2 -0
- package/dist/cli/tui/tui-prefs.js.map +1 -1
- package/dist/dist-manifest.json +3973 -0
- package/dist/domain/capability/protocol.js +3 -1
- package/dist/domain/capability/protocol.js.map +1 -1
- package/dist/domain/decision-note.js +13 -0
- package/dist/domain/decision-note.js.map +1 -1
- package/dist/domain/design/artifact.js +22 -3
- package/dist/domain/design/artifact.js.map +1 -1
- package/dist/domain/design/capability.js +1 -0
- package/dist/domain/design/capability.js.map +1 -1
- package/dist/domain/design/expansion.js +1 -1
- package/dist/domain/design/expansion.js.map +1 -1
- package/dist/domain/design/maturity.js +16 -0
- package/dist/domain/design/maturity.js.map +1 -1
- package/dist/domain/design/reference.js +5 -0
- package/dist/domain/design/reference.js.map +1 -1
- package/dist/domain/doctor/operations.js +20 -12
- package/dist/domain/doctor/operations.js.map +1 -1
- package/dist/domain/effective-contract.js +3 -1
- package/dist/domain/effective-contract.js.map +1 -1
- package/dist/domain/elicitation.js +1 -1
- package/dist/domain/flow/answer.js +265 -130
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +194 -37
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/batch-review.js +65 -0
- package/dist/domain/flow/batch-review.js.map +1 -0
- package/dist/domain/flow/decision-schema.js +47 -0
- package/dist/domain/flow/decision-schema.js.map +1 -0
- package/dist/domain/flow/directive.js +16 -0
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/execution-result.js +91 -2
- package/dist/domain/flow/execution-result.js.map +1 -1
- package/dist/domain/flow/run-state.js +352 -24
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/flow/test-run-evidence.js +285 -0
- package/dist/domain/flow/test-run-evidence.js.map +1 -0
- package/dist/domain/flow/unchanged-phase.js +15 -0
- package/dist/domain/flow/unchanged-phase.js.map +1 -0
- package/dist/domain/harnesses.js +14 -5
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/isolation-unit.js +2 -2
- package/dist/domain/isolation-unit.js.map +1 -1
- package/dist/domain/lineage.js +7 -2
- package/dist/domain/lineage.js.map +1 -1
- package/dist/domain/obligation-correspondence.js +4 -2
- package/dist/domain/obligation-correspondence.js.map +1 -1
- package/dist/domain/plan-handoff.js +5 -0
- package/dist/domain/plan-handoff.js.map +1 -0
- package/dist/domain/proposal.js +18 -7
- package/dist/domain/proposal.js.map +1 -1
- package/dist/domain/reservation.js +5 -3
- package/dist/domain/reservation.js.map +1 -1
- package/dist/domain/retirement/proposal.js +1 -0
- package/dist/domain/retirement/proposal.js.map +1 -1
- package/dist/domain/session/custody.js +10 -6
- package/dist/domain/session/custody.js.map +1 -1
- package/dist/domain/session/narrative.js +4 -1
- package/dist/domain/session/narrative.js.map +1 -1
- package/dist/domain/skills.js +4 -6
- package/dist/domain/skills.js.map +1 -1
- package/dist/domain/sql-lexer.js +1 -1
- package/dist/domain/sql-lexer.js.map +1 -1
- package/dist/runtime/namespace-resolver.js +4 -0
- package/dist/runtime/namespace-resolver.js.map +1 -1
- package/dist/runtime/workline-marker.js +35 -8
- package/dist/runtime/workline-marker.js.map +1 -1
- package/dist/runtime/workspace-resolution.js +123 -0
- package/dist/runtime/workspace-resolution.js.map +1 -0
- package/package.json +6 -5
- package/skills/w/SKILL.md +12 -17
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +1 -1
- package/skills/w/artifacts/artifacts-core/SCRIPTS.rollback.sql +8 -0
- package/skills/w/artifacts/artifacts-core/SCRIPTS.sql +4 -8
- package/skills/w/commands/export-diagrams.md +3 -3
- package/skills/w/commands/export-manuals.md +6 -6
- package/skills/w/commands/export-reports.md +3 -3
- package/skills/w/commands/export-scripts.md +5 -5
- package/skills/w/commands/fix-git.md +12 -13
- package/skills/w/commands/persist.md +2 -2
- package/skills/w/commands/plan-exec.md +4 -2
- package/skills/w/commands/spec-new.md +1 -1
- package/skills/w/commands/workspace-init.md +2 -0
- package/skills/w/context/MANIFEST.json +1 -1
- package/skills/w/exports/README.md +4 -4
- package/skills/w/exports/export-diagrams/EXPORT.md +4 -4
- package/skills/w/exports/export-manuals/EXPORT.md +14 -16
- package/skills/w/exports/export-reports/EXPORT.md +3 -3
- package/skills/w/exports/export-scripts/EXPORT.md +46 -22
- package/skills/w/harness/HARNESS.md +4 -7
- package/skills/w/hooks/hooks.template.json +6 -4
- package/skills/w/loops/CHASSIS.md +12 -6
- package/skills/w/loops/CODE-POLICIES.md +8 -5
- package/skills/w/loops/README.md +2 -2
- package/skills/w/loops/plan-exec-loop/LOOP.md +23 -22
- package/skills/w/loops/plan-new-loop/LOOP.md +23 -31
- package/skills/w/loops/plan-refine-loop/LOOP.md +8 -2
- package/skills/w/loops/quick-loop/LOOP.md +7 -6
- package/skills/w/loops/spec-refine-loop/LOOP.md +1 -1
- package/skills/w/modules/DESIGN-REFERENCES.md +9 -11
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +4 -4
- package/skills/w/modules/SESSION-NUMBERING.md +2 -0
- package/skills/w/roles/README.md +11 -47
- package/skills/w/roles/design/CONTRACT.md +6 -4
- package/skills/w/roles/design/ROLE.md +7 -3
- package/skills/w/roles/diagrams/ROLE.md +1 -1
- package/skills/w/roles/git/ROLE.md +17 -10
- package/skills/w/roles/research/ROLE.md +2 -2
- package/skills/w/roles/sql/ROLE.md +17 -15
- package/skills/w/schemas/design/ui-screen.v1.schema.json +9 -0
- package/dist/application/capability/descriptor-loader.js +0 -109
- package/dist/application/capability/descriptor-loader.js.map +0 -1
- package/dist/application/capability/installed-inventory.js +0 -168
- package/dist/application/capability/installed-inventory.js.map +0 -1
- package/dist/application/self/install-plugin-skills-git.js +0 -226
- package/dist/application/self/install-plugin-skills-git.js.map +0 -1
- package/dist/application/self/install-plugin-skills.js +0 -203
- package/dist/application/self/install-plugin-skills.js.map +0 -1
- package/dist/application/self/plugin-cache-clear.js +0 -133
- package/dist/application/self/plugin-cache-clear.js.map +0 -1
- package/dist/application/self/plugin-cache-reload.js +0 -141
- package/dist/application/self/plugin-cache-reload.js.map +0 -1
- package/dist/application/self/skills-apply.js +0 -623
- package/dist/application/self/skills-apply.js.map +0 -1
- package/dist/application/self/skills-catalog.js +0 -35
- package/dist/application/self/skills-catalog.js.map +0 -1
- package/dist/application/self/skills-change.js +0 -479
- package/dist/application/self/skills-change.js.map +0 -1
- package/dist/application/self/skills-discovery.js +0 -275
- package/dist/application/self/skills-discovery.js.map +0 -1
- package/dist/application/self/skills-manager.js +0 -253
- package/dist/application/self/skills-manager.js.map +0 -1
- package/dist/application/self/skills-payload.js +0 -566
- package/dist/application/self/skills-payload.js.map +0 -1
- package/dist/application/self/skills-registry.js +0 -107
- package/dist/application/self/skills-registry.js.map +0 -1
- package/dist/application/skill-index-service.js +0 -78
- package/dist/application/skill-index-service.js.map +0 -1
- package/dist/cli/commands/plugin-cache.js +0 -25
- package/dist/cli/commands/plugin-cache.js.map +0 -1
- package/dist/cli/commands/skill-index.js +0 -19
- package/dist/cli/commands/skill-index.js.map +0 -1
- package/dist/cli/tui/data/recommended-skills.js +0 -482
- package/dist/cli/tui/data/recommended-skills.js.map +0 -1
- package/dist/cli/tui/tabs/skills-tab.js +0 -664
- package/dist/cli/tui/tabs/skills-tab.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths-service.js","sourceRoot":"","sources":["../../src/application/paths-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"paths-service.js","sourceRoot":"","sources":["../../src/application/paths-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { dirname, isAbsolute, join } from "node:path";
|
|
2
3
|
import { CORRELATIVE_SOURCE, compareCorrelatives } from "../domain/correlative.js";
|
|
3
4
|
import { withSpecBaseline } from "../domain/lineage.js";
|
|
5
|
+
import { baseDigest } from "../domain/proposal.js";
|
|
6
|
+
import { checkSafeRelativePath } from "../domain/safe-path.js";
|
|
4
7
|
import { runNextNumber } from "./dev-only-services.js";
|
|
5
8
|
import { resolveCoreDocsCanon } from "./docs-canon-service.js";
|
|
6
9
|
import { appendPublications, publicationRows } from "./history-publications.js";
|
|
@@ -33,6 +36,7 @@ const CONTRACT = [
|
|
|
33
36
|
"decisions { category: 'research'|'spec'|'plan', slug: kebab-case, mode: 'new'|'update',",
|
|
34
37
|
"target?: ruta existente cuando mode='update', target_digest?: su digest del inventario },",
|
|
35
38
|
"y artifacts: exactamente UN { path, content }. El path va dentro del destino de la categoría",
|
|
39
|
+
"Adjuntos binarios opcionales en decisions.attachments: [{source: archivo local, path: destino numerado junto al .md}]. El CLI lee sus bytes, sella sha256 y escribe en modo exclusivo.",
|
|
36
40
|
"y su NNN es consultivo: el CLI reasigna el número dentro del lock.",
|
|
37
41
|
"Si el contenido ya existe como documento, respondé state='ambiguous' con reason.",
|
|
38
42
|
].join(" ");
|
|
@@ -62,7 +66,8 @@ export async function preparePersist(fs, env, paths) {
|
|
|
62
66
|
// The seal covers the whole inventory: a document appearing anywhere in
|
|
63
67
|
// docs/ between prepare and apply invalidates the duplicate check AND the
|
|
64
68
|
// consultative numbering the answer reasoned over.
|
|
65
|
-
inputs: inventory,
|
|
69
|
+
inputs: { inventory, workspace: cwd },
|
|
70
|
+
scope: { workspace: cwd },
|
|
66
71
|
contract: CONTRACT,
|
|
67
72
|
inventory,
|
|
68
73
|
allowedDestinations: Object.values(categories).map((c) => c.dir),
|
|
@@ -95,7 +100,7 @@ async function readCategory(fs, dir, relative, infix) {
|
|
|
95
100
|
number: match[1],
|
|
96
101
|
slug: match[2] ?? "",
|
|
97
102
|
summary: summarize(text),
|
|
98
|
-
digest:
|
|
103
|
+
digest: baseDigest(text),
|
|
99
104
|
});
|
|
100
105
|
}
|
|
101
106
|
catch {
|
|
@@ -150,6 +155,78 @@ export function validatePersist(raw, request) {
|
|
|
150
155
|
},
|
|
151
156
|
};
|
|
152
157
|
}
|
|
158
|
+
/** Validate binary inputs against the same document proposal, sealing their raw bytes. */
|
|
159
|
+
export async function validatePersistWithAttachments(fs, paths, raw, request) {
|
|
160
|
+
const validated = validatePersist(raw, request);
|
|
161
|
+
if (!validated.ok)
|
|
162
|
+
return validated;
|
|
163
|
+
const parsed = parseSemanticResponse(raw, request);
|
|
164
|
+
if (!parsed.ok)
|
|
165
|
+
return parsed;
|
|
166
|
+
const rawAttachments = parsed.value.decisions?.attachments;
|
|
167
|
+
if (rawAttachments === undefined)
|
|
168
|
+
return validated;
|
|
169
|
+
if (!Array.isArray(rawAttachments))
|
|
170
|
+
return { ok: false, failure: reject("decisions.attachments debe ser una lista") };
|
|
171
|
+
const doc = parsed.value.artifacts?.[0]?.path;
|
|
172
|
+
if (doc === undefined)
|
|
173
|
+
return { ok: false, failure: reject("falta el documento del adjunto") };
|
|
174
|
+
const prefix = doc.replace(/\.md$/, "");
|
|
175
|
+
const dir = validated.value.preview.destination;
|
|
176
|
+
const attachments = [];
|
|
177
|
+
for (const item of rawAttachments) {
|
|
178
|
+
if (typeof item !== "object" ||
|
|
179
|
+
item === null ||
|
|
180
|
+
typeof item.source !== "string" ||
|
|
181
|
+
typeof item.path !== "string") {
|
|
182
|
+
return { ok: false, failure: reject("cada adjunto exige source y path de texto") };
|
|
183
|
+
}
|
|
184
|
+
const destination = checkSafeRelativePath(item.path);
|
|
185
|
+
if (!destination.ok ||
|
|
186
|
+
dirname(item.path) !== dir ||
|
|
187
|
+
!item.path.startsWith(prefix) ||
|
|
188
|
+
item.path === doc ||
|
|
189
|
+
!/\.[a-z0-9]+$/i.test(item.path)) {
|
|
190
|
+
return {
|
|
191
|
+
ok: false,
|
|
192
|
+
failure: reject(`adjunto '${item.path}' fuera del destino del documento`),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
const source = isAbsolute(item.source)
|
|
196
|
+
? item.source
|
|
197
|
+
: (() => {
|
|
198
|
+
const checked = checkSafeRelativePath(item.source);
|
|
199
|
+
return checked.ok ? join(paths.workspaceDir(), checked.path) : null;
|
|
200
|
+
})();
|
|
201
|
+
if (source === null)
|
|
202
|
+
return { ok: false, failure: reject(`source '${item.source}' no es una ruta local segura`) };
|
|
203
|
+
let bytes;
|
|
204
|
+
try {
|
|
205
|
+
bytes = await fs.readBytes(source);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return { ok: false, failure: reject(`no se pudo leer el adjunto local '${item.source}'`) };
|
|
209
|
+
}
|
|
210
|
+
if (attachments.some((entry) => entry.path === item.path))
|
|
211
|
+
return { ok: false, failure: reject(`adjunto repetido: ${item.path}`) };
|
|
212
|
+
attachments.push({
|
|
213
|
+
source: item.source,
|
|
214
|
+
path: destination.path,
|
|
215
|
+
bytes: bytes.length,
|
|
216
|
+
digest: `sha256:${createHash("sha256").update(bytes).digest("hex")}`,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
ok: true,
|
|
221
|
+
value: {
|
|
222
|
+
preview: { ...validated.value.preview, attachments },
|
|
223
|
+
approval_digest: semanticDigest({
|
|
224
|
+
document: validated.value.approval_digest,
|
|
225
|
+
attachments: attachments.map(({ path, digest }) => ({ path, digest })),
|
|
226
|
+
}),
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
153
230
|
/**
|
|
154
231
|
* A plan's lineage, read the way the flow's publication reads it: sealed from
|
|
155
232
|
* its header label, standalone by its marker, or refused. Other categories
|
|
@@ -240,7 +317,7 @@ function checkFilename(path, dir, infix, slug) {
|
|
|
240
317
|
* concurrent runs cannot both claim `007`.
|
|
241
318
|
*/
|
|
242
319
|
export async function applyPersist(fs, env, paths, input) {
|
|
243
|
-
const validated =
|
|
320
|
+
const validated = await validatePersistWithAttachments(fs, paths, input.raw, input.request);
|
|
244
321
|
if (!validated.ok)
|
|
245
322
|
return validated;
|
|
246
323
|
if (validated.value.approval_digest !== input.approval) {
|
|
@@ -285,12 +362,48 @@ export async function applyPersist(fs, env, paths, input) {
|
|
|
285
362
|
const content = await sealedContent(fs, paths, preview.category, artifact.content, input.request);
|
|
286
363
|
if ("failure" in content)
|
|
287
364
|
return { ok: false, failure: content.failure };
|
|
365
|
+
const previous = preview.mode === "update" ? await fs.readText(join(paths.workspaceDir(), path)) : null;
|
|
288
366
|
const published = await publishArtifacts(fs, paths.workspaceDir(), [{ path, content: content.text }], { overwrite: preview.mode === "update" });
|
|
289
367
|
// Under the SAME lock as the write: the index is part of publishing, not a
|
|
290
368
|
// chore after it. Outside the lock two concurrent publications would
|
|
291
369
|
// read-modify-write the same record and one row would simply be lost.
|
|
292
370
|
if (published.ok) {
|
|
293
|
-
|
|
371
|
+
const written = [...published.value.written];
|
|
372
|
+
for (const attachment of preview.attachments ?? []) {
|
|
373
|
+
const destination = preview.mode === "new"
|
|
374
|
+
? `${category.dir}/${path.slice(category.dir.length + 1).replace(/\.md$/, "")}${attachment.path.slice(artifact.path.replace(/\.md$/, "").length)}`
|
|
375
|
+
: attachment.path;
|
|
376
|
+
const source = isAbsolute(attachment.source)
|
|
377
|
+
? attachment.source
|
|
378
|
+
: join(paths.workspaceDir(), attachment.source);
|
|
379
|
+
try {
|
|
380
|
+
const bytes = await fs.readBytes(source);
|
|
381
|
+
if (`sha256:${createHash("sha256").update(bytes).digest("hex")}` !== attachment.digest)
|
|
382
|
+
throw new Error("digest cambió");
|
|
383
|
+
const created = await fs.publishBytesExclusive(join(paths.workspaceDir(), destination), bytes);
|
|
384
|
+
if (!created.created)
|
|
385
|
+
throw new Error("el destino ya existe");
|
|
386
|
+
written.push(destination);
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
for (const name of written.slice(1))
|
|
390
|
+
await fs.remove(join(paths.workspaceDir(), name));
|
|
391
|
+
if (previous === null)
|
|
392
|
+
await fs.remove(join(paths.workspaceDir(), path));
|
|
393
|
+
else
|
|
394
|
+
await fs.writeText(join(paths.workspaceDir(), path), previous);
|
|
395
|
+
return {
|
|
396
|
+
ok: false,
|
|
397
|
+
failure: {
|
|
398
|
+
code: "PUBLISH_FAILED",
|
|
399
|
+
message: `no se pudo publicar '${destination}': ${error instanceof Error ? error.message : String(error)}`,
|
|
400
|
+
action: "corregí el adjunto o destino y repetí validate",
|
|
401
|
+
},
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
await appendPublications(fs, paths.cwdHistoryFile(), publicationRows(written, OPERATION));
|
|
406
|
+
return { ok: true, value: { written } };
|
|
294
407
|
}
|
|
295
408
|
return published;
|
|
296
409
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persist-service.js","sourceRoot":"","sources":["../../src/application/persist-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persist-service.js","sourceRoot":"","sources":["../../src/application/persist-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,14 +8,17 @@
|
|
|
8
8
|
* the only authorities on what can be credited.
|
|
9
9
|
*/
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
-
import { withPlanExecBatchLoop, withPlanExecBatchPublication, withPlanExecBatchPublicationPrepared, withPlanExecBatchStage, } from "../domain/flow/run-state.js";
|
|
12
|
-
import {
|
|
11
|
+
import { iterationOf, sameIteration, withPlanExecBatchLoop, withPlanExecBatchPublication, withPlanExecBatchPublicationPrepared, withPlanExecBatchStage, } from "../domain/flow/run-state.js";
|
|
12
|
+
import { approvedValidationOnly } from "../domain/flow/unchanged-phase.js";
|
|
13
|
+
import { baseDigest, canonicalEol, matchTextSeal, sealProposal } from "../domain/proposal.js";
|
|
13
14
|
import { applyUnderLock } from "./flow/run-state-service.js";
|
|
14
15
|
import { applyLocalProposal } from "./local-proposal.js";
|
|
15
16
|
import { scanMarkdown } from "./markdown.js";
|
|
17
|
+
import { parseExecutionBatches } from "./parsers/execution-batches.js";
|
|
16
18
|
import { parsePhases } from "./parsers/phases.js";
|
|
17
19
|
import { parsePlanStatus } from "./parsers/plan-status.js";
|
|
18
20
|
import { parseTasks } from "./parsers/tasks.js";
|
|
21
|
+
import { batchMarksOnly, planLineDiff, sealedPlanPath } from "./plan-exec-plan-diff.js";
|
|
19
22
|
const TASK_ID = /\b(T\d+\.\d+)\b/;
|
|
20
23
|
const PHASE_HEADING = /^\s*###\s+F(\d+)\b/i;
|
|
21
24
|
const PHASE_BOUNDARY = /^\s*#{1,3}\s+/;
|
|
@@ -41,40 +44,149 @@ export function inferPlanExecBatch(text, input) {
|
|
|
41
44
|
if (absent.length > 0) {
|
|
42
45
|
return fail("PLAN_EXEC_BATCH_INVALID", `el batch nombra fases que el plan no declara: ${absent.map((phase) => `F${phase}`).join(", ")}`);
|
|
43
46
|
}
|
|
44
|
-
const
|
|
47
|
+
const openTasks = parseTasks(text)
|
|
45
48
|
.items // A batch only owns work still open when its snapshot is sealed. Already
|
|
46
49
|
// checked tasks stay evidence of an earlier iteration; including them here
|
|
47
50
|
// would let a retry appear to re-accredit somebody else's completed work.
|
|
48
|
-
.filter((task) => task.status === "open" && task.phase !== undefined && phases.includes(task.phase))
|
|
51
|
+
.filter((task) => task.status === "open" && task.phase !== undefined && phases.includes(task.phase));
|
|
52
|
+
const tasks = openTasks
|
|
49
53
|
.map((task) => taskIdOf(task.text))
|
|
50
54
|
.filter((id) => id !== null);
|
|
51
|
-
if (
|
|
55
|
+
if (input.validation_only && openTasks.length > 0) {
|
|
56
|
+
return fail("PLAN_VALIDATION_ONLY_HAS_TASKS", "una fase con tareas abiertas no puede acreditarse como validación sin cambios");
|
|
57
|
+
}
|
|
58
|
+
if (tasks.length !== openTasks.length ||
|
|
59
|
+
(!input.validation_only && tasks.length === 0) ||
|
|
60
|
+
new Set(tasks).size !== tasks.length) {
|
|
52
61
|
return fail("PLAN_EXEC_BATCH_INVALID", "las fases del batch no exponen tareas Tn.m únicas que el CLI pueda acreditar");
|
|
53
62
|
}
|
|
54
63
|
return {
|
|
55
64
|
ok: true,
|
|
56
65
|
batch: {
|
|
57
66
|
id: input.id,
|
|
67
|
+
...(input.validation_only ? { kind: "validation-only" } : {}),
|
|
58
68
|
iteration: input.iteration,
|
|
59
69
|
mode: input.mode,
|
|
60
70
|
phases,
|
|
61
71
|
tasks,
|
|
62
72
|
plan_digest: baseDigest(text),
|
|
63
73
|
stage: "inferred",
|
|
74
|
+
...(tasks.length === 0 ? { validation_only: true } : {}),
|
|
75
|
+
...(input.partition === undefined
|
|
76
|
+
? {}
|
|
77
|
+
: {
|
|
78
|
+
partition: {
|
|
79
|
+
...input.partition,
|
|
80
|
+
effective: { mode: input.mode, phases: [...phases] },
|
|
81
|
+
},
|
|
82
|
+
}),
|
|
64
83
|
},
|
|
65
84
|
};
|
|
66
85
|
}
|
|
86
|
+
/** Infer from phase state, then narrow by the declared partition and live signals. */
|
|
87
|
+
export function inferNextPlanExecBatch(text, state) {
|
|
88
|
+
const phases = parsePhases(text).items;
|
|
89
|
+
if (phases.some((phase, index) => !Number.isSafeInteger(phase.n) ||
|
|
90
|
+
phase.n < 1 ||
|
|
91
|
+
(index > 0 && phase.n <= (phases[index - 1]?.n ?? 0)))) {
|
|
92
|
+
return fail("PLAN_EXEC_BATCH_PHASES_INVALID", "las fases no tienen numeración positiva única en orden", "corregí el orden de las fases con plan-refine antes de inferir el lote");
|
|
93
|
+
}
|
|
94
|
+
const first = phases.findIndex((phase) => phase.state !== "validada");
|
|
95
|
+
if (first < 0)
|
|
96
|
+
return noPendingPhases(text);
|
|
97
|
+
const pending = phases
|
|
98
|
+
.slice(first)
|
|
99
|
+
.filter((phase) => phase.state !== "validada")
|
|
100
|
+
.map((phase) => phase.n);
|
|
101
|
+
const openPhase = pending[0];
|
|
102
|
+
if (openPhase === undefined)
|
|
103
|
+
return fail("PLAN_EXEC_BATCH_INVALID", "no hay una fase inicial legible");
|
|
104
|
+
const declared = parseExecutionBatches(text);
|
|
105
|
+
const row = declared.rows.find((batch) => batch.phases.includes(openPhase));
|
|
106
|
+
let effective = declared.status === "invalid"
|
|
107
|
+
? { mode: "isolated", phases: [openPhase] }
|
|
108
|
+
: {
|
|
109
|
+
mode: row?.mode ?? "continuous",
|
|
110
|
+
phases: (row?.phases ?? pending).filter((phase) => pending.includes(phase)),
|
|
111
|
+
};
|
|
112
|
+
let reason = declared.status === "invalid"
|
|
113
|
+
? `sección ilegible: ${declared.reason}`
|
|
114
|
+
: row === undefined
|
|
115
|
+
? "sin sección: rango máximo pendiente"
|
|
116
|
+
: `fila declarada ${row.id}`;
|
|
117
|
+
const transition = "plan-exec.batch-eligibility-signal";
|
|
118
|
+
const observation = [...state.observations]
|
|
119
|
+
.reverse()
|
|
120
|
+
.find((item) => item.transition === transition && sameIteration(item, iterationOf(state, transition)));
|
|
121
|
+
if (observation !== undefined && observation.signals.length > 0) {
|
|
122
|
+
effective = { mode: "isolated", phases: [openPhase] };
|
|
123
|
+
reason += `; aislado por ${observation.signals.join(", ")}`;
|
|
124
|
+
}
|
|
125
|
+
const open = new Set(parseTasks(text)
|
|
126
|
+
.items.filter((task) => task.status === "open")
|
|
127
|
+
.map((task) => task.phase));
|
|
128
|
+
if (!open.has(openPhase)) {
|
|
129
|
+
effective = {
|
|
130
|
+
...effective,
|
|
131
|
+
phases: consecutiveValidationPhases(phases.slice(first), effective.phases, open),
|
|
132
|
+
};
|
|
133
|
+
reason += "; sólo validación, sin tareas abiertas";
|
|
134
|
+
}
|
|
135
|
+
const iteration = Math.max(0, ...(state.batches ?? []).map((batch) => batch.iteration)) + 1;
|
|
136
|
+
const inferred = inferPlanExecBatch(text, {
|
|
137
|
+
id: `batch-${iteration}`,
|
|
138
|
+
iteration,
|
|
139
|
+
...effective,
|
|
140
|
+
...(open.has(openPhase) ? {} : { validation_only: true }),
|
|
141
|
+
partition: { declared: declared.status === "valid" ? declared.rows : null, effective, reason },
|
|
142
|
+
});
|
|
143
|
+
if (!inferred.ok || inferred.batch.kind !== "validation-only")
|
|
144
|
+
return inferred;
|
|
145
|
+
if (!approvedValidationOnly(state, inferred.batch)) {
|
|
146
|
+
return fail("PLAN_EXEC_BATCH_PHASE_UNRESOLVED", `F${openPhase} no tiene tareas abiertas ni aprobación de validación sin cambios al entrar`, "reanudá el consentimiento de entrada; si ya pasó sin observar esta fase, usá aw flow restart para observarla y aprobarla");
|
|
147
|
+
}
|
|
148
|
+
return inferred;
|
|
149
|
+
}
|
|
150
|
+
function noPendingPhases(text) {
|
|
151
|
+
if (parseTasks(text).open > 0) {
|
|
152
|
+
return fail("PLAN_EXEC_BATCH_PHASES_INVALID", "hay tareas abiertas pero no fases pendientes legibles", "normalizá con plan-refine las líneas Estado de las fases; las tareas abiertas no habilitan la validación final");
|
|
153
|
+
}
|
|
154
|
+
return fail("PLAN_EXEC_BATCH_NONE_OPEN", "el plan no tiene fases ni tareas pendientes", "reanudá la corrida para que exponga la validación final");
|
|
155
|
+
}
|
|
156
|
+
/** Stop at any intervening phase, even a validated one: validation-only is consecutive. */
|
|
157
|
+
function consecutiveValidationPhases(phases, range, open) {
|
|
158
|
+
const consecutive = [];
|
|
159
|
+
for (const phase of phases) {
|
|
160
|
+
if (phase.state === "validada" || open.has(phase.n) || !range.includes(phase.n))
|
|
161
|
+
break;
|
|
162
|
+
consecutive.push(phase.n);
|
|
163
|
+
}
|
|
164
|
+
return consecutive;
|
|
165
|
+
}
|
|
67
166
|
/** Validate the batch against the plan and build the one exact plan-document edit. */
|
|
68
167
|
export function preparePlanExecBatchPublication(text, input) {
|
|
69
168
|
const before = baseDigest(text);
|
|
70
|
-
if (
|
|
71
|
-
|
|
169
|
+
if (input.sealed_text != null &&
|
|
170
|
+
matchTextSeal(input.batch.plan_digest, input.sealed_text) === null) {
|
|
171
|
+
return fail("PLAN_EXEC_BATCH_SNAPSHOT_INVALID", "la copia sellada no corresponde al digest del lote", "restaurá la copia original de la sesión; no se compara el plan contra texto no autenticado");
|
|
172
|
+
}
|
|
173
|
+
if (matchTextSeal(input.batch.plan_digest, text) === null &&
|
|
174
|
+
(input.sealed_text === undefined ||
|
|
175
|
+
input.sealed_text === null ||
|
|
176
|
+
!batchMarksOnly(input.sealed_text, text, input.batch, input.phase_updates))) {
|
|
177
|
+
return fail("PLAN_EXEC_BATCH_STALE", "el plan cambió desde que se infirió el batch", input.sealed_text == null
|
|
178
|
+
? `no hay copia del texto sellado para este lote anterior (sello ${input.batch.plan_digest}, vigente ${before}); no se acreditan tareas contra un plan movido`
|
|
179
|
+
: `diferencias del plan sellado y vigente:\n${planLineDiff(input.sealed_text, text)}`);
|
|
72
180
|
}
|
|
73
181
|
const completed = uniqueStrings(input.completed_tasks);
|
|
74
182
|
if (!sameSet(completed, input.batch.tasks)) {
|
|
75
183
|
return fail("PLAN_EXEC_BATCH_TASK_SET_INVALID", "la publicación no acredita exactamente las tareas del batch", `este batch sólo puede acreditar: ${input.batch.tasks.join(", ")}`);
|
|
76
184
|
}
|
|
77
185
|
const parsedTasks = parseTasks(text).items;
|
|
186
|
+
if (input.batch.kind === "validation-only" &&
|
|
187
|
+
parsedTasks.some((task) => task.status === "open" && input.batch.phases.includes(task.phase ?? -1))) {
|
|
188
|
+
return fail("PLAN_VALIDATION_ONLY_HAS_TASKS", "el lote de validación sin cambios ahora tiene tareas abiertas");
|
|
189
|
+
}
|
|
78
190
|
const byId = new Map(parsedTasks
|
|
79
191
|
.map((task) => [taskIdOf(task.text), task])
|
|
80
192
|
.filter((entry) => entry[0] !== null));
|
|
@@ -113,6 +225,11 @@ export function preparePlanExecBatchPublication(text, input) {
|
|
|
113
225
|
if (unknownPhase !== undefined) {
|
|
114
226
|
return fail("PLAN_EXEC_BATCH_PHASE_UNKNOWN", `el plan no declara F${unknownPhase.phase}`, "re-inferí el batch sobre el plan vigente");
|
|
115
227
|
}
|
|
228
|
+
if (input.transition === "plan-exec.batch-close" &&
|
|
229
|
+
(!sameSet(updates.map((update) => String(update.phase)), input.batch.phases.map(String)) ||
|
|
230
|
+
updates.some((update) => update.state !== "validada"))) {
|
|
231
|
+
return fail("PLAN_EXEC_BATCH_PHASE_SET_INVALID", "el cierre debe validar todas las fases del batch juntas");
|
|
232
|
+
}
|
|
116
233
|
const marked = markTasks(text, new Set(completed));
|
|
117
234
|
if (!marked.ok)
|
|
118
235
|
return marked;
|
|
@@ -205,6 +322,15 @@ export function preparePlanExecAnnulment(text, input) {
|
|
|
205
322
|
* `already_applied` and seals the trace; if either base moved it refuses stale.
|
|
206
323
|
*/
|
|
207
324
|
export async function publishPlanExecBatch(fs, paths, input) {
|
|
325
|
+
let sealedText = null;
|
|
326
|
+
try {
|
|
327
|
+
const snapshot = sealedPlanPath(input.location.dir, input.batch.plan_digest);
|
|
328
|
+
if (await fs.exists(snapshot))
|
|
329
|
+
sealedText = await fs.readText(snapshot);
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
return fail("PLAN_EXEC_BATCH_SNAPSHOT_UNAVAILABLE", `no se pudo leer la copia sellada de ${input.batch.id}`, "restaurá la copia en la sesión antes de cerrar este lote");
|
|
333
|
+
}
|
|
208
334
|
// Persist the sealed before/after pair first. The plan write deliberately
|
|
209
335
|
// happens OUTSIDE this lock: `applyLocalProposal` has its own workspace lock,
|
|
210
336
|
// and a long nested lock would turn recovery into a deadlock. More importantly,
|
|
@@ -239,7 +365,7 @@ export async function publishPlanExecBatch(fs, paths, input) {
|
|
|
239
365
|
};
|
|
240
366
|
}
|
|
241
367
|
if (publication.status === "applied") {
|
|
242
|
-
if (
|
|
368
|
+
if (matchTextSeal(publication.after_plan_digest, text.content) === null) {
|
|
243
369
|
return {
|
|
244
370
|
ok: false,
|
|
245
371
|
failure: recoveryStale(input.plan),
|
|
@@ -263,7 +389,7 @@ export async function publishPlanExecBatch(fs, paths, input) {
|
|
|
263
389
|
// The document landed before the process could seal the final state.
|
|
264
390
|
// Finish from the pre-written digest; do not derive a new batch or mark
|
|
265
391
|
// anything a second time.
|
|
266
|
-
if (
|
|
392
|
+
if (matchTextSeal(publication.after_plan_digest, text.content) !== null) {
|
|
267
393
|
let next = withPlanExecBatchPublication(current, existing.id, digest);
|
|
268
394
|
next = withPlanExecBatchStage(next, existing.id, "closed", publication.transition, "completed");
|
|
269
395
|
next = withPlanExecBatchLoop(next, loopAfterPublication(text.content, existing.iteration));
|
|
@@ -276,10 +402,13 @@ export async function publishPlanExecBatch(fs, paths, input) {
|
|
|
276
402
|
value: { batch: closed, prepared: null, already_applied: true },
|
|
277
403
|
};
|
|
278
404
|
}
|
|
279
|
-
if (
|
|
405
|
+
if (matchTextSeal(publication.before_plan_digest, text.content) === null) {
|
|
280
406
|
return { ok: false, failure: recoveryStale(input.plan) };
|
|
281
407
|
}
|
|
282
|
-
const prepared = preparePlanExecBatchPublication(text.content,
|
|
408
|
+
const prepared = preparePlanExecBatchPublication(text.content, {
|
|
409
|
+
...input,
|
|
410
|
+
sealed_text: sealedText,
|
|
411
|
+
});
|
|
283
412
|
if (!prepared.ok)
|
|
284
413
|
return { ok: false, failure: prepared.failure };
|
|
285
414
|
if (prepared.prepared.after_digest !== publication.after_plan_digest) {
|
|
@@ -298,7 +427,10 @@ export async function publishPlanExecBatch(fs, paths, input) {
|
|
|
298
427
|
if (existing === undefined) {
|
|
299
428
|
return { ok: false, failure: batchNotInferred(input.batch.id) };
|
|
300
429
|
}
|
|
301
|
-
const prepared = preparePlanExecBatchPublication(text.content,
|
|
430
|
+
const prepared = preparePlanExecBatchPublication(text.content, {
|
|
431
|
+
...input,
|
|
432
|
+
sealed_text: sealedText,
|
|
433
|
+
});
|
|
302
434
|
if (!prepared.ok)
|
|
303
435
|
return { ok: false, failure: prepared.failure };
|
|
304
436
|
let next = current;
|
|
@@ -362,11 +494,11 @@ export async function publishPlanExecBatch(fs, paths, input) {
|
|
|
362
494
|
return text;
|
|
363
495
|
const digest = baseDigest(text.content);
|
|
364
496
|
if (publication.status === "applied") {
|
|
365
|
-
if (
|
|
497
|
+
if (matchTextSeal(publication.after_plan_digest, text.content) === null)
|
|
366
498
|
return { ok: false, failure: recoveryStale(input.plan) };
|
|
367
499
|
return { ok: true, state: current, value: existing, persist: false };
|
|
368
500
|
}
|
|
369
|
-
if (
|
|
501
|
+
if (matchTextSeal(publication.after_plan_digest, text.content) === null) {
|
|
370
502
|
return { ok: false, failure: recoveryStale(input.plan) };
|
|
371
503
|
}
|
|
372
504
|
let next = withPlanExecBatchPublication(current, existing.id, digest);
|
|
@@ -384,13 +516,16 @@ export async function publishPlanExecBatch(fs, paths, input) {
|
|
|
384
516
|
batch: finalized.value,
|
|
385
517
|
written: applied.result.written,
|
|
386
518
|
already_applied: applied.result.already_applied,
|
|
519
|
+
...(applied.result.notice === undefined ? {} : { notice: applied.result.notice }),
|
|
387
520
|
state: finalized.state,
|
|
388
521
|
};
|
|
389
522
|
}
|
|
390
523
|
/** Set the box of every `wanted` task to `mark` — `x` to credit, a space to reopen. */
|
|
391
524
|
function markTasks(text, wanted, mark = "x") {
|
|
392
525
|
const seen = new Set();
|
|
393
|
-
const lines = text
|
|
526
|
+
const lines = canonicalEol(text)
|
|
527
|
+
.split("\n")
|
|
528
|
+
.map((line) => {
|
|
394
529
|
const match = /^(\s*[-*]\s*)\[([ xX])\](\s+.*)$/.exec(line);
|
|
395
530
|
if (match === null)
|
|
396
531
|
return line;
|
|
@@ -404,14 +539,14 @@ function markTasks(text, wanted, mark = "x") {
|
|
|
404
539
|
if (missing.length > 0) {
|
|
405
540
|
return fail("PLAN_EXEC_BATCH_TASK_UNKNOWN", `no se pudo ubicar la casilla de ${missing.join(", ")}`, "el plan cambió de forma: re-inferí el batch antes de publicar");
|
|
406
541
|
}
|
|
407
|
-
return { ok: true, content: lines.join("\n") };
|
|
542
|
+
return { ok: true, content: withEol(lines.join("\n"), text) };
|
|
408
543
|
}
|
|
409
544
|
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: this is one bounded Markdown block rewrite whose alternatives preserve exact bytes.
|
|
410
545
|
function rewritePhases(text, updates) {
|
|
411
546
|
if (updates.length === 0)
|
|
412
547
|
return { ok: true, content: text };
|
|
413
548
|
const byPhase = new Map(updates.map((update) => [update.phase, update]));
|
|
414
|
-
const lines = text.split("\n");
|
|
549
|
+
const lines = canonicalEol(text).split("\n");
|
|
415
550
|
const seen = new Set();
|
|
416
551
|
for (let start = 0; start < lines.length; start += 1) {
|
|
417
552
|
const heading = PHASE_HEADING.exec(lines[start] ?? "");
|
|
@@ -456,12 +591,12 @@ function rewritePhases(text, updates) {
|
|
|
456
591
|
if (missing.length > 0) {
|
|
457
592
|
return fail("PLAN_EXEC_BATCH_PHASE_UNKNOWN", `no se pudo ubicar ${missing.map((update) => `F${update.phase}`).join(", ")}`, "re-inferí el batch sobre el plan vigente");
|
|
458
593
|
}
|
|
459
|
-
return { ok: true, content: lines.join("\n") };
|
|
594
|
+
return { ok: true, content: withEol(lines.join("\n"), text) };
|
|
460
595
|
}
|
|
461
596
|
/** Rewrite only the plan preamble — never a `> Estado:` owned by a phase. */
|
|
462
597
|
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: bounded Markdown scan/rewrite keeps plan and phase status surfaces separate.
|
|
463
598
|
function rewritePlanDonePreamble(text, closure, assurance) {
|
|
464
|
-
const scanned = scanMarkdown(text);
|
|
599
|
+
const scanned = scanMarkdown(canonicalEol(text));
|
|
465
600
|
const [title, ...rest] = scanned.headings;
|
|
466
601
|
const firstSection = title?.level === 1 ? rest[0] : title;
|
|
467
602
|
const end = firstSection?.line ?? scanned.lines.length;
|
|
@@ -509,14 +644,14 @@ function rewritePlanDonePreamble(text, closure, assurance) {
|
|
|
509
644
|
else {
|
|
510
645
|
lines[assuranceAt] = `> Assurance: ${assurance}`;
|
|
511
646
|
}
|
|
512
|
-
return lines.join("\n");
|
|
647
|
+
return withEol(lines.join("\n"), text);
|
|
513
648
|
}
|
|
514
649
|
/**
|
|
515
650
|
* Reopen the plan preamble: `> Estado: open`, and the closure and assurance lines
|
|
516
651
|
* that only a `done` plan carries removed. Never a `> Estado:` owned by a phase.
|
|
517
652
|
*/
|
|
518
653
|
function rewritePlanReopenPreamble(text) {
|
|
519
|
-
const scanned = scanMarkdown(text);
|
|
654
|
+
const scanned = scanMarkdown(canonicalEol(text));
|
|
520
655
|
const [title, ...rest] = scanned.headings;
|
|
521
656
|
const firstSection = title?.level === 1 ? rest[0] : title;
|
|
522
657
|
const end = firstSection?.line ?? scanned.lines.length;
|
|
@@ -528,7 +663,12 @@ function rewritePlanReopenPreamble(text) {
|
|
|
528
663
|
continue;
|
|
529
664
|
kept.push(preamble && PLAN_STATUS.test(bare) ? "> Estado: open" : line);
|
|
530
665
|
}
|
|
531
|
-
return kept.join("\n");
|
|
666
|
+
return withEol(kept.join("\n"), text);
|
|
667
|
+
}
|
|
668
|
+
function withEol(canonical, original) {
|
|
669
|
+
const crlf = original.match(/\r\n/g)?.length ?? 0;
|
|
670
|
+
const all = original.match(/\n/g)?.length ?? 0;
|
|
671
|
+
return crlf > all / 2 ? canonical.replace(/\n/g, "\r\n") : canonical;
|
|
532
672
|
}
|
|
533
673
|
function taskIdOf(text) {
|
|
534
674
|
return TASK_ID.exec(text)?.[1] ?? null;
|