@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
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { BLOCK_MIRROR_FILES, parseProjectBlock, } from "./parsers/project-block.js";
|
|
3
|
+
import { finalValidationOverrides } from "./source-boundary-policy.js";
|
|
4
|
+
export function sourcePipeline(block, alias, origin = "CLAUDE.md") {
|
|
5
|
+
const declaration = block.pipeline?.[alias];
|
|
6
|
+
const value = (field) => {
|
|
7
|
+
const command = declaration?.[field];
|
|
8
|
+
if (command === undefined)
|
|
9
|
+
return { kind: "undeclared", action: `aw set-pipeline ${alias} ${field} <comando|ninguno>` };
|
|
10
|
+
return command === "ninguno"
|
|
11
|
+
? { kind: "none", value: "ninguno" }
|
|
12
|
+
: { kind: "command", command };
|
|
13
|
+
};
|
|
14
|
+
return { alias, build: value("build"), test: value("test"), origin };
|
|
15
|
+
}
|
|
16
|
+
/** The first mirror declaring a field wins; a second mirror can supply a missing field. */
|
|
17
|
+
export async function readSourcePipelines(fs, paths) {
|
|
18
|
+
const result = new Map();
|
|
19
|
+
for (const name of BLOCK_MIRROR_FILES) {
|
|
20
|
+
const file = join(paths.workspaceDir(), name);
|
|
21
|
+
if (!(await fs.exists(file)))
|
|
22
|
+
continue;
|
|
23
|
+
const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
|
|
24
|
+
if (block === null)
|
|
25
|
+
continue;
|
|
26
|
+
for (const { alias } of block.fuentes) {
|
|
27
|
+
const candidate = sourcePipeline(block, alias, name);
|
|
28
|
+
const existing = result.get(alias);
|
|
29
|
+
if (!existing)
|
|
30
|
+
result.set(alias, candidate);
|
|
31
|
+
else
|
|
32
|
+
result.set(alias, {
|
|
33
|
+
...existing,
|
|
34
|
+
build: existing.build.kind === "undeclared" ? candidate.build : existing.build,
|
|
35
|
+
test: existing.test.kind === "undeclared" ? candidate.test : existing.test,
|
|
36
|
+
origin: existing.build.kind === "undeclared" && existing.test.kind === "undeclared"
|
|
37
|
+
? candidate.origin
|
|
38
|
+
: existing.origin,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return [...result.values()];
|
|
43
|
+
}
|
|
44
|
+
/** A plan override is per command and per source; `ninguno` is never a runnable command. */
|
|
45
|
+
export function resolveFinalValidation(plan, aliases, pipelines) {
|
|
46
|
+
const overrides = finalValidationOverrides(plan);
|
|
47
|
+
return aliases
|
|
48
|
+
.filter((alias) => alias !== "workspace")
|
|
49
|
+
.map((alias) => {
|
|
50
|
+
const override = overrides.find((item) => item.alias === alias);
|
|
51
|
+
const source = pipelines.find((item) => item.alias === alias);
|
|
52
|
+
const command = (field) => {
|
|
53
|
+
const fromPlan = override?.[field];
|
|
54
|
+
if (fromPlan !== undefined)
|
|
55
|
+
return { command: fromPlan, origin: "plan" };
|
|
56
|
+
const fromSource = source?.[field];
|
|
57
|
+
if (fromSource?.kind === "command")
|
|
58
|
+
return { command: fromSource.command, origin: "source" };
|
|
59
|
+
return {
|
|
60
|
+
command: null,
|
|
61
|
+
origin: null,
|
|
62
|
+
action: `declará ${field === "test" ? "tests" : "build"} para '${alias}' en el pipeline versionado de la fuente (aw set-pipeline ${alias} ${field} <comando>) o en ## Validations del plan con Validación final · \`${alias}\` · ${field === "test" ? "tests" : "build"} \`<comando>\``,
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
return { alias, build: command("build"), test: command("test") };
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=source-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-pipeline.js","sourceRoot":"","sources":["../../src/application/source-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { runMultiroot } from "./multiroot-service.js";
|
|
|
3
3
|
import { readWorkspaceBlock } from "./parsers/project-block.js";
|
|
4
4
|
import { ProcessRegistryService } from "./process-registry-service.js";
|
|
5
5
|
import { runProjectMdUpsertWrite } from "./project-md-upsert-service.js";
|
|
6
|
+
import { writeWorkspaceLocalConfig } from "./workspace-local-config.js";
|
|
6
7
|
import { ensureWorklineMaterialized, } from "./workspace-materialization-service.js";
|
|
7
8
|
/**
|
|
8
9
|
* Removes a source from the workspace entirely, composing existing services in
|
|
@@ -30,9 +31,20 @@ export async function removeSource(deps, alias) {
|
|
|
30
31
|
// the receipt in this operation's result.
|
|
31
32
|
const materialization = await ensureWorklineMaterialized(fs, paths);
|
|
32
33
|
// 2. Remove multi-root visibility (claude/codex/warp/oz). Idempotent per host.
|
|
33
|
-
|
|
34
|
+
if (fuente.path !== null)
|
|
35
|
+
await runMultiroot(fs, env, paths, "detach", { paths: [fuente.path] });
|
|
34
36
|
// 3. Prune the WORKSPACE block: Fuentes + working_branches + qa_branches for the alias.
|
|
35
|
-
await runProjectMdUpsertWrite(fs, env, paths, {
|
|
37
|
+
const updated = await runProjectMdUpsertWrite(fs, env, paths, {
|
|
38
|
+
op: "init",
|
|
39
|
+
removeAliases: [alias],
|
|
40
|
+
});
|
|
41
|
+
if ("error" in updated || !updated.ok)
|
|
42
|
+
return {
|
|
43
|
+
error: "error" in updated
|
|
44
|
+
? updated.error
|
|
45
|
+
: (updated.results?.find((file) => file.error)?.error ?? "el bloque no se publicó"),
|
|
46
|
+
};
|
|
47
|
+
await writeWorkspaceLocalConfig(fs, paths, { [alias]: null });
|
|
36
48
|
// 4. Stop running processes launched from this source.
|
|
37
49
|
const registry = new ProcessRegistryService(fs, proc, paths.cwdProcessesFile(), paths.cwdLockFile());
|
|
38
50
|
const running = (await registry.list()).filter((r) => r.sourceAlias === alias && r.state === "running");
|
|
@@ -44,7 +56,7 @@ export async function removeSource(deps, alias) {
|
|
|
44
56
|
await fs.remove(join(paths.cwdLaunchDir(), alias));
|
|
45
57
|
return {
|
|
46
58
|
alias,
|
|
47
|
-
path: fuente.path,
|
|
59
|
+
path: fuente.path ?? "(local)",
|
|
48
60
|
processesStopped: running.length,
|
|
49
61
|
...(materialization.materialized ? { materialization } : {}),
|
|
50
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-remove-service.js","sourceRoot":"","sources":["../../src/application/source-remove-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAsB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAEL,0BAA0B,GAC3B,MAAM,wCAAwC,CAAC;AAsBhD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAsB,EACtB,KAAa;IAEb,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IACrC,CAAC;IAED,8EAA8E;IAC9E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC;IAC/C,CAAC;IAED,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,0CAA0C;IAC1C,MAAM,eAAe,GAAG,MAAM,0BAA0B,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEpE,+EAA+E;IAC/E,MAAM,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"source-remove-service.js","sourceRoot":"","sources":["../../src/application/source-remove-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { dirname } from "node:path";
|
|
2
|
+
import { documentOfSession, readDocBranches, resolveDocBranch } from "./doc-branch-ledger.js";
|
|
3
|
+
import { declaringHubs } from "./hub-registry.js";
|
|
4
|
+
import { readWorkspaceBlock, requireSourcePath, } from "./parsers/project-block.js";
|
|
3
5
|
import { relpath } from "./paths.js";
|
|
6
|
+
import { resolveSessionTarget } from "./session-resolver.js";
|
|
4
7
|
export async function runSources(fs, _env, git, paths, input) {
|
|
5
8
|
const cwd = paths.workspaceDir();
|
|
9
|
+
const ownRoot = await fs.realPath(cwd).catch(() => cwd);
|
|
6
10
|
const block = await readWorkspaceBlock(fs, cwd, paths.blockMarkers());
|
|
7
11
|
const verbose = input.verbose === true;
|
|
8
12
|
if (!block || block.fuentes.length === 0) {
|
|
@@ -21,9 +25,34 @@ export async function runSources(fs, _env, git, paths, input) {
|
|
|
21
25
|
// Expected work branch comes from WORKSPACE block working_branches per source;
|
|
22
26
|
// decoupled from sessions/flow.
|
|
23
27
|
const workingBranches = block.working_branches;
|
|
28
|
+
const resolution = await resolveSessionTarget(fs, paths, {
|
|
29
|
+
intent: "read",
|
|
30
|
+
bind: false,
|
|
31
|
+
...(input.sessionCode ? { code: input.sessionCode } : {}),
|
|
32
|
+
...(input.contextId ? { contextId: input.contextId } : {}),
|
|
33
|
+
});
|
|
34
|
+
if (input.sessionCode !== undefined && resolution?.outcome !== "resolved") {
|
|
35
|
+
return {
|
|
36
|
+
sources: [],
|
|
37
|
+
working_branches_from_status: workingBranches,
|
|
38
|
+
cross_source_consistent: false,
|
|
39
|
+
divergent_sources: [],
|
|
40
|
+
error: resolution?.message ?? "sesión no resuelta",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const document = resolution?.outcome === "resolved"
|
|
44
|
+
? await documentOfSession(fs, paths, resolution.session.folder)
|
|
45
|
+
: { status: "none" };
|
|
46
|
+
const ledger = await readDocBranches(fs, paths);
|
|
24
47
|
const enriched = [];
|
|
25
48
|
for (const src of sources) {
|
|
26
|
-
const
|
|
49
|
+
const effective = await resolveDocBranch(fs, paths, src, block, document, ledger);
|
|
50
|
+
const expected = effective.branch;
|
|
51
|
+
const others = src.path === null
|
|
52
|
+
? []
|
|
53
|
+
: (await declaringHubs(fs, dirname(paths.userRoot()), paths.namespace, src.path))
|
|
54
|
+
.filter((hub) => hub.root !== ownRoot)
|
|
55
|
+
.map((hub) => ({ root: hub.root, working_branch: hub.workingBranch }));
|
|
27
56
|
if (input.skipGit === true) {
|
|
28
57
|
// Mirror Python: skip_git produces only alias/path/main_branch/expected_work_branch.
|
|
29
58
|
enriched.push({
|
|
@@ -31,10 +60,35 @@ export async function runSources(fs, _env, git, paths, input) {
|
|
|
31
60
|
path: src.path,
|
|
32
61
|
main_branch: src.main_branch,
|
|
33
62
|
expected_work_branch: expected,
|
|
63
|
+
expected_origin: effective.origin,
|
|
64
|
+
...(effective.origin === "none"
|
|
65
|
+
? {
|
|
66
|
+
working_branch_notice: `rama de trabajo no declarada para ${src.alias}; usá 'aw set-working-branch ${src.alias} <rama>'`,
|
|
67
|
+
}
|
|
68
|
+
: {}),
|
|
69
|
+
other_workspaces: others,
|
|
34
70
|
});
|
|
35
71
|
}
|
|
36
72
|
else {
|
|
37
|
-
|
|
73
|
+
const checked = await checkSourceBranch(fs, git, src, expected);
|
|
74
|
+
enriched.push({
|
|
75
|
+
...checked,
|
|
76
|
+
expected_origin: effective.origin,
|
|
77
|
+
...(effective.origin === "none"
|
|
78
|
+
? {
|
|
79
|
+
working_branch_notice: `rama de trabajo no declarada para ${src.alias}; usá 'aw set-working-branch ${src.alias} <rama>'`,
|
|
80
|
+
}
|
|
81
|
+
: {}),
|
|
82
|
+
other_workspaces: others,
|
|
83
|
+
...(others.some((hub) => hub.working_branch !== null && hub.working_branch === checked.current_branch)
|
|
84
|
+
? {
|
|
85
|
+
shared_branch_warning: `El checkout está en la rama de trabajo de otro workspace: ${others
|
|
86
|
+
.filter((hub) => hub.working_branch === checked.current_branch)
|
|
87
|
+
.map((hub) => hub.root)
|
|
88
|
+
.join(", ")}`,
|
|
89
|
+
}
|
|
90
|
+
: {}),
|
|
91
|
+
});
|
|
38
92
|
}
|
|
39
93
|
}
|
|
40
94
|
const { consistent, divergent } = computeCrossSourceConsistency(enriched);
|
|
@@ -43,6 +97,7 @@ export async function runSources(fs, _env, git, paths, input) {
|
|
|
43
97
|
working_branches_from_status: workingBranches,
|
|
44
98
|
cross_source_consistent: consistent,
|
|
45
99
|
divergent_sources: divergent,
|
|
100
|
+
...(ledger.unreadable > 0 ? { doc_branch_unreadable: ledger.unreadable } : {}),
|
|
46
101
|
};
|
|
47
102
|
if (verbose) {
|
|
48
103
|
payload.session_code = input.sessionCode ?? "";
|
|
@@ -64,20 +119,25 @@ async function checkSourceBranch(fs, git, source, expected) {
|
|
|
64
119
|
is_repo: false,
|
|
65
120
|
error: null,
|
|
66
121
|
};
|
|
67
|
-
|
|
68
|
-
|
|
122
|
+
let repo;
|
|
123
|
+
try {
|
|
124
|
+
repo = await requireSourcePath(fs, source);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
base.error = err.message;
|
|
128
|
+
base.error_code = "SOURCE_PATH_MISSING";
|
|
69
129
|
return base;
|
|
70
130
|
}
|
|
71
|
-
if (!(await git.isGitRepo(
|
|
131
|
+
if (!(await git.isGitRepo(repo))) {
|
|
72
132
|
base.error = "Not a git repository";
|
|
73
133
|
return base;
|
|
74
134
|
}
|
|
75
135
|
base.is_repo = true;
|
|
76
|
-
const current = (await git.currentBranch(
|
|
136
|
+
const current = (await git.currentBranch(repo)) ?? null;
|
|
77
137
|
base.current_branch = current;
|
|
78
138
|
base.match = expected === null ? null : current === expected;
|
|
79
139
|
try {
|
|
80
|
-
const changed = await git.changedFiles(
|
|
140
|
+
const changed = await git.changedFiles(repo);
|
|
81
141
|
base.changed_files = changed;
|
|
82
142
|
base.dirty = changed.length > 0;
|
|
83
143
|
}
|
|
@@ -88,14 +148,9 @@ async function checkSourceBranch(fs, git, source, expected) {
|
|
|
88
148
|
return base;
|
|
89
149
|
}
|
|
90
150
|
function computeCrossSourceConsistency(sources) {
|
|
91
|
-
const candidates = sources.filter((s) => s.is_repo && s.error === null && s.
|
|
92
|
-
if (candidates.length < 2)
|
|
93
|
-
return { consistent: true, divergent: [] };
|
|
94
|
-
const branches = new Set(candidates.map((s) => s.current_branch));
|
|
95
|
-
if (branches.size <= 1)
|
|
96
|
-
return { consistent: true, divergent: [] };
|
|
151
|
+
const candidates = sources.filter((s) => s.is_repo && s.error === null && s.expected_work_branch !== null && s.match === false);
|
|
97
152
|
return {
|
|
98
|
-
consistent:
|
|
153
|
+
consistent: candidates.length === 0,
|
|
99
154
|
divergent: candidates.map((s) => ({
|
|
100
155
|
alias: s.alias,
|
|
101
156
|
current: s.current_branch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources-service.js","sourceRoot":"","sources":["../../src/application/sources-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sources-service.js","sourceRoot":"","sources":["../../src/application/sources-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { sameCorrelative } from "../domain/correlative.js";
|
|
1
2
|
import { projectRun } from "./flow/run-projection.js";
|
|
3
|
+
import { readHistoryRows } from "./history-table.js";
|
|
2
4
|
import { readEvents } from "./retirement/history-events.js";
|
|
5
|
+
import { sessionNumericCode } from "./session-resolver.js";
|
|
3
6
|
import { buildWorklineIndex, } from "./workline-index-service.js";
|
|
4
7
|
/**
|
|
5
8
|
* Read-only whole-workspace status aggregator. Never throws on a reachable cwd:
|
|
@@ -11,9 +14,17 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
|
|
|
11
14
|
const events = await readEvents(fs, paths);
|
|
12
15
|
const active = [];
|
|
13
16
|
const closed = [];
|
|
17
|
+
const paused = [];
|
|
18
|
+
const abandoned = [];
|
|
14
19
|
for (const session of index.sessions) {
|
|
15
|
-
const
|
|
16
|
-
|
|
20
|
+
const destination = session.state === "closed"
|
|
21
|
+
? closed
|
|
22
|
+
: session.state === "paused"
|
|
23
|
+
? paused
|
|
24
|
+
: session.state === "abandoned"
|
|
25
|
+
? abandoned
|
|
26
|
+
: active;
|
|
27
|
+
destination.push({
|
|
17
28
|
code: session.code,
|
|
18
29
|
folder: session.folder,
|
|
19
30
|
type: session.type,
|
|
@@ -21,15 +32,48 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
|
|
|
21
32
|
phase: session.phase,
|
|
22
33
|
date: session.date,
|
|
23
34
|
relative: session.relative,
|
|
24
|
-
flow:
|
|
35
|
+
flow: session.state === "active" ? await projectRun(fs, paths, session.folder) : null,
|
|
25
36
|
units: session.units,
|
|
26
37
|
});
|
|
27
38
|
}
|
|
39
|
+
const historyPath = paths.cwdHistoryFile();
|
|
40
|
+
const rows = (await fs.exists(historyPath))
|
|
41
|
+
? readHistoryRows(await fs.readText(historyPath))
|
|
42
|
+
: [];
|
|
43
|
+
const localFolders = new Set(index.sessions.map((session) => session.folder));
|
|
44
|
+
const sameFolder = (rowKey) => localFolders.has(rowKey) ||
|
|
45
|
+
[...localFolders].some((folder) => folder.replace(/^session(?=\d)/, "") === rowKey);
|
|
46
|
+
const historyRemoteRows = rows
|
|
47
|
+
.filter((row) => row.state !== "retired" && !sameFolder(row.key))
|
|
48
|
+
.map((row) => row.key);
|
|
49
|
+
const historyCollisions = [];
|
|
50
|
+
for (const session of index.sessions) {
|
|
51
|
+
const number = sessionNumericCode(session.folder);
|
|
52
|
+
if (number === null)
|
|
53
|
+
continue;
|
|
54
|
+
for (const row of rows) {
|
|
55
|
+
const recorded = sessionNumericCode(row.key);
|
|
56
|
+
if (recorded === null ||
|
|
57
|
+
!sameCorrelative(number, recorded) ||
|
|
58
|
+
row.key === session.folder ||
|
|
59
|
+
session.folder.replace(/^session(?=\d)/, "") === row.key ||
|
|
60
|
+
!row.key.includes("-"))
|
|
61
|
+
continue;
|
|
62
|
+
historyCollisions.push({
|
|
63
|
+
local: session.folder,
|
|
64
|
+
registered: row.key,
|
|
65
|
+
action: "aw workspace-migrate --renumber",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
28
69
|
return {
|
|
29
70
|
workspace: index.workspace,
|
|
71
|
+
last_activity: index.last_activity,
|
|
30
72
|
specs: index.specs,
|
|
31
73
|
plans: index.plans,
|
|
32
|
-
sessions: { active, closed },
|
|
74
|
+
sessions: { active, closed, paused, abandoned },
|
|
75
|
+
history_remote_rows: historyRemoteRows,
|
|
76
|
+
history_collisions: historyCollisions,
|
|
33
77
|
discarded: index.discarded,
|
|
34
78
|
terminal_events: events,
|
|
35
79
|
pending_retirements: index.pending_retirements,
|
|
@@ -41,13 +85,19 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
|
|
|
41
85
|
loose_sessions: index.loose_sessions,
|
|
42
86
|
designs: index.designs,
|
|
43
87
|
orphan_units: index.orphan_units,
|
|
88
|
+
...(index.unreadable_sources !== undefined
|
|
89
|
+
? { unreadable_sources: index.unreadable_sources }
|
|
90
|
+
: {}),
|
|
91
|
+
...(index.isolation_error !== undefined ? { isolation_error: index.isolation_error } : {}),
|
|
44
92
|
...(index.docs_canon_error !== undefined ? { docs_canon_error: index.docs_canon_error } : {}),
|
|
45
93
|
counts: {
|
|
46
94
|
specs: index.specs.length,
|
|
47
|
-
specs_refined: index.specs.filter((s) => s.
|
|
95
|
+
specs_refined: index.specs.filter((s) => s.status === "ready-for-plan").length,
|
|
48
96
|
plans: index.plans.length,
|
|
49
97
|
sessions_active: active.length,
|
|
50
98
|
sessions_closed: closed.length,
|
|
99
|
+
sessions_paused: paused.length,
|
|
100
|
+
sessions_abandoned: abandoned.length,
|
|
51
101
|
discarded: index.discarded.length,
|
|
52
102
|
terminal_events: events.length,
|
|
53
103
|
pending: index.pipeline.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-service.js","sourceRoot":"","sources":["../../src/application/status-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status-service.js","sourceRoot":"","sources":["../../src/application/status-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
const LOCKFILES = ["npm-shrinkwrap.json", "package-lock.json", "yarn.lock", "pnpm-lock.yaml"];
|
|
3
|
+
/** A unit never installs into the source; it only borrows an identical installation. */
|
|
4
|
+
export async function linkUnitDependencies(fs, git, source, unit) {
|
|
5
|
+
const modules = join(source, "node_modules");
|
|
6
|
+
const unitModules = join(unit, "node_modules");
|
|
7
|
+
const sourceModules = await fs.lstat(modules);
|
|
8
|
+
if (sourceModules === null || sourceModules.type !== "dir")
|
|
9
|
+
return {
|
|
10
|
+
status: "not_linked",
|
|
11
|
+
message: "sin node_modules en la fuente; instalá dependencias en la unidad",
|
|
12
|
+
};
|
|
13
|
+
const matchingLock = await firstLock(fs, unit);
|
|
14
|
+
if (matchingLock === null ||
|
|
15
|
+
(await firstLock(fs, source)) !== matchingLock ||
|
|
16
|
+
!(await sameBytes(fs, join(source, "package.json"), join(unit, "package.json"))) ||
|
|
17
|
+
!(await sameBytes(fs, join(source, matchingLock), join(unit, matchingLock)))) {
|
|
18
|
+
const install = matchingLock === "package-lock.json" || matchingLock === "npm-shrinkwrap.json"
|
|
19
|
+
? "npm ci"
|
|
20
|
+
: matchingLock === "yarn.lock"
|
|
21
|
+
? "yarn install --frozen-lockfile"
|
|
22
|
+
: matchingLock === "pnpm-lock.yaml"
|
|
23
|
+
? "pnpm install --frozen-lockfile"
|
|
24
|
+
: "npm install";
|
|
25
|
+
return {
|
|
26
|
+
status: "not_linked",
|
|
27
|
+
message: `manifiesto o lockfile distinto o ausente; quitá cualquier enlace antes de instalar y corré '${install}' en la unidad`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const present = await fs.lstat(unitModules);
|
|
31
|
+
if (present !== null) {
|
|
32
|
+
if (!present.isSymlink || (await fs.realPath(unitModules)) !== (await fs.realPath(modules)))
|
|
33
|
+
return {
|
|
34
|
+
status: "not_linked",
|
|
35
|
+
message: "node_modules propio en la unidad; no se sustituye ni se modifica",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
await fs.symlink(modules, unitModules);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
if (!git.ignoredOutsideIndex || !git.excludePattern)
|
|
43
|
+
throw new Error("git no permite verificar el ignore de node_modules");
|
|
44
|
+
if (!(await git.ignoredOutsideIndex(source, unit, "node_modules"))) {
|
|
45
|
+
await git.excludePattern(source, "/node_modules");
|
|
46
|
+
if (!(await git.ignoredOutsideIndex(source, unit, "node_modules")))
|
|
47
|
+
throw new Error("git sigue mostrando node_modules como no rastreado");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (present === null)
|
|
52
|
+
await fs.remove(unitModules);
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
status: "linked",
|
|
57
|
+
message: "node_modules enlazado con la fuente: instalar aquí escribe en la fuente; npm ci vaciaría su node_modules. Quitá el enlace 'node_modules' antes de instalar en la unidad",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function firstLock(fs, root) {
|
|
61
|
+
for (const lock of LOCKFILES)
|
|
62
|
+
if ((await fs.lstat(join(root, lock))) !== null)
|
|
63
|
+
return lock;
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
async function sameBytes(fs, left, right) {
|
|
67
|
+
try {
|
|
68
|
+
const a = await fs.readBytes(left);
|
|
69
|
+
const b = await fs.readBytes(right);
|
|
70
|
+
return Buffer.from(a).equals(Buffer.from(b));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** A link is ours only when its resolved target is the source installation. */
|
|
77
|
+
export async function unlinkUnitDependencies(fs, source, unit) {
|
|
78
|
+
const path = join(unit, "node_modules");
|
|
79
|
+
const link = await fs.lstat(path);
|
|
80
|
+
if (!link?.isSymlink ||
|
|
81
|
+
(await fs.realPath(path)) !== (await fs.realPath(join(source, "node_modules"))))
|
|
82
|
+
return false;
|
|
83
|
+
await fs.remove(path);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
/** Shared by release, integrate, reclaim and retirement. No recursive traversal of a link. */
|
|
87
|
+
export async function removeUnitSafely(fs, git, source, unit) {
|
|
88
|
+
if ((await git.operationState(unit)) !== "clean" || (await git.isDirty(unit)))
|
|
89
|
+
throw new Error(`la unidad ${unit} tiene cambios sin commitear u operación git pendiente`);
|
|
90
|
+
const removedLink = await unlinkUnitDependencies(fs, source, unit);
|
|
91
|
+
try {
|
|
92
|
+
await git.worktreeRemove(source, unit);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
if (removedLink && (await fs.lstat(unit)) !== null)
|
|
96
|
+
await fs.symlink(join(source, "node_modules"), join(unit, "node_modules"));
|
|
97
|
+
throw err;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=unit-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-dependencies.js","sourceRoot":"","sources":["../../src/application/unit-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { parseUnitPath, workspaceKey } from "../domain/isolation-unit.js";
|
|
2
|
+
import { readCustody } from "./session-custody-service.js";
|
|
3
|
+
import { listSessionFolders } from "./session-resolver.js";
|
|
4
|
+
/** Every known historical key and every sealed unit of this hub. */
|
|
5
|
+
export async function hubUnitPaths(fs, paths, root) {
|
|
6
|
+
const keys = new Set([workspaceKey(paths.workspaceDir())]);
|
|
7
|
+
try {
|
|
8
|
+
const local = JSON.parse(await fs.readText(paths.cwdLocalConfigFile()));
|
|
9
|
+
if (local &&
|
|
10
|
+
typeof local === "object" &&
|
|
11
|
+
"previous_keys" in local &&
|
|
12
|
+
Array.isArray(local.previous_keys)) {
|
|
13
|
+
for (const key of local.previous_keys)
|
|
14
|
+
if (typeof key === "string")
|
|
15
|
+
keys.add(key);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
/* legacy hub */
|
|
20
|
+
}
|
|
21
|
+
const owned = new Set();
|
|
22
|
+
for (const session of await listSessionFolders(fs, paths.cwdSessionsDir())) {
|
|
23
|
+
const custody = await readCustody(fs, session.path);
|
|
24
|
+
if (custody.status !== "present")
|
|
25
|
+
continue;
|
|
26
|
+
for (const source of custody.custody.sources)
|
|
27
|
+
if (source.unit_path)
|
|
28
|
+
owned.add(source.unit_path);
|
|
29
|
+
}
|
|
30
|
+
return (path) => {
|
|
31
|
+
const unit = parseUnitPath(root, path);
|
|
32
|
+
if (unit === null)
|
|
33
|
+
return false;
|
|
34
|
+
return owned.has(path) || keys.has(unit.workspaceKey);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=unit-membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-membership.js","sourceRoot":"","sources":["../../src/application/unit-membership.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAkB,EAClB,KAAmB,EACnB,IAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACjF,IACE,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,eAAe,IAAI,KAAK;YACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAClC,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa;gBAAE,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,SAAS;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO;YAAE,IAAI,MAAM,CAAC,SAAS;gBAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC"}
|