@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,275 +0,0 @@
|
|
|
1
|
-
// Addressing a skill INSIDE a source (Spec 043 · AC-04): a candidate is
|
|
2
|
-
// identified by (source, resolved ref, path relative to the source root), and
|
|
3
|
-
// its invocable name travels beside that triple instead of being it.
|
|
4
|
-
//
|
|
5
|
-
// Why not the previous by-name discovery: it stopped as soon as the root was
|
|
6
|
-
// itself a skill, walked three levels down and discarded repeated names — so a
|
|
7
|
-
// collection's leaves were unreachable and `plugins/<x>/skills/<x>` fell off
|
|
8
|
-
// the edge. Here the GIT listing is the commit's own tree (no depth, nothing
|
|
9
|
-
// hidden below a recognized root, no dedupe) and the LOCAL walk declares its
|
|
10
|
-
// limits and says when it was cut.
|
|
11
|
-
import { lstat, mkdtemp, readFile, readdir, rm } from "node:fs/promises";
|
|
12
|
-
import { tmpdir } from "node:os";
|
|
13
|
-
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
14
|
-
import { gitClone, gitCloneSkillManifests, gitListTreePaths, gitResolveCommit, gitSparseAddFile, gitSparseAddSkillDir, gitSparseDisable, } from "./install-plugin-skills-git.js";
|
|
15
|
-
import { hasValidFrontmatter } from "./install-plugin-skills.js";
|
|
16
|
-
import { resolveSkillSource, skillFrontmatterName } from "./skills-manager.js";
|
|
17
|
-
/** Bounded local walk. A source deeper or wider than this is reported cut. */
|
|
18
|
-
export const LOCAL_WALK_LIMITS = { maxDepth: 6, maxEntries: 5000 };
|
|
19
|
-
const MANIFEST = "SKILL.md";
|
|
20
|
-
/** A path a person typed: it must stay inside the source and cross no link. */
|
|
21
|
-
export async function validateRelativePath(root, relPath) {
|
|
22
|
-
const clean = relPath.replace(/^\/+|\/+$/g, "");
|
|
23
|
-
if (clean.length === 0)
|
|
24
|
-
return { absolute: root };
|
|
25
|
-
if (isAbsolute(relPath)) {
|
|
26
|
-
return { code: "PATH_NOT_RELATIVE", message: `'${relPath}' no es una ruta del origen` };
|
|
27
|
-
}
|
|
28
|
-
const absolute = resolve(root, clean);
|
|
29
|
-
const inside = relative(resolve(root), absolute);
|
|
30
|
-
if (inside.startsWith("..") || isAbsolute(inside)) {
|
|
31
|
-
return { code: "PATH_ESCAPES_SOURCE", message: `'${relPath}' se sale del origen` };
|
|
32
|
-
}
|
|
33
|
-
const crossing = await crossesLink(resolve(root), clean);
|
|
34
|
-
if (crossing !== null) {
|
|
35
|
-
return crossing === "missing"
|
|
36
|
-
? { code: "PATH_NOT_FOUND", message: `'${relPath}' no existe en el origen` }
|
|
37
|
-
: { code: "PATH_IS_SYMLINK", message: `'${relPath}' cruza un enlace simbólico` };
|
|
38
|
-
}
|
|
39
|
-
return { absolute };
|
|
40
|
-
}
|
|
41
|
-
/** Every segment, not just the leaf: a link halfway down redirects the rest. */
|
|
42
|
-
async function crossesLink(root, clean) {
|
|
43
|
-
let walked = root;
|
|
44
|
-
for (const segment of clean.split("/")) {
|
|
45
|
-
walked = join(walked, segment);
|
|
46
|
-
const stats = await lstat(walked).catch(() => null);
|
|
47
|
-
if (stats === null)
|
|
48
|
-
return "missing";
|
|
49
|
-
if (stats.isSymbolicLink())
|
|
50
|
-
return "symlink";
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
/** Candidate at an explicit path — the way in that no exploration limit gates. */
|
|
55
|
-
export async function candidateAtPath(root, relPath) {
|
|
56
|
-
const validated = await validateRelativePath(root, relPath);
|
|
57
|
-
if ("code" in validated)
|
|
58
|
-
return validated;
|
|
59
|
-
const manifest = join(validated.absolute, MANIFEST);
|
|
60
|
-
const content = await readFile(manifest, "utf8").catch(() => null);
|
|
61
|
-
if (content === null || !hasValidFrontmatter(content)) {
|
|
62
|
-
return {
|
|
63
|
-
code: "MANIFEST_ABSENT",
|
|
64
|
-
message: `'${relPath || "."}' no tiene un ${MANIFEST} con name y description`,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
return candidateOf(root, validated.absolute, content);
|
|
68
|
-
}
|
|
69
|
-
function candidateOf(root, dir, content) {
|
|
70
|
-
const rel = relative(resolve(root), resolve(dir)).split(sep).join("/");
|
|
71
|
-
const directory = rel === "" ? basename(resolve(root)) : basename(dir);
|
|
72
|
-
return { path: rel, name: skillFrontmatterName(content) ?? directory, directory };
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Bounded walk of a local source. Excludes `.git`, `node_modules` and every
|
|
76
|
-
* symlink (a link's `Dirent` is not a directory), keeps `.claude` eligible —
|
|
77
|
-
* the standard home of a repo's own skills — and, unlike the by-name
|
|
78
|
-
* discovery, does NOT stop at a directory that is already a skill: a
|
|
79
|
-
* collection's leaves are exactly what lives below one.
|
|
80
|
-
*/
|
|
81
|
-
async function walkLocalManifests(root, budget) {
|
|
82
|
-
const candidates = [];
|
|
83
|
-
let truncated = false;
|
|
84
|
-
const visit = async (dir, depth) => {
|
|
85
|
-
if (depth > LOCAL_WALK_LIMITS.maxDepth) {
|
|
86
|
-
truncated = true;
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
let entries;
|
|
90
|
-
try {
|
|
91
|
-
entries = await readdir(dir, { withFileTypes: true });
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
truncated = true;
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
const content = await readFile(join(dir, MANIFEST), "utf8").catch(() => null);
|
|
98
|
-
if (content !== null && hasValidFrontmatter(content)) {
|
|
99
|
-
candidates.push(candidateOf(root, dir, content));
|
|
100
|
-
}
|
|
101
|
-
for (const entry of entries) {
|
|
102
|
-
if (budget.entries <= 0) {
|
|
103
|
-
truncated = true;
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
budget.entries -= 1;
|
|
107
|
-
if (!walkable(entry))
|
|
108
|
-
continue;
|
|
109
|
-
await visit(join(dir, entry.name), depth + 1);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
await visit(resolve(root), 0);
|
|
113
|
-
return { candidates, truncated };
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Whether the walk descends into this entry.
|
|
117
|
-
*
|
|
118
|
-
* `.claude` is the one dot-dir kept: it is the standard home of a repo's own
|
|
119
|
-
* skills, so excluding it would hide exactly what somebody is looking for. A
|
|
120
|
-
* symlink's `Dirent` is not a directory, which is how links stay unfollowed.
|
|
121
|
-
*/
|
|
122
|
-
function walkable(entry) {
|
|
123
|
-
if (!entry.isDirectory())
|
|
124
|
-
return false;
|
|
125
|
-
if (entry.name === "node_modules" || entry.name === ".git")
|
|
126
|
-
return false;
|
|
127
|
-
return !entry.name.startsWith(".") || entry.name === ".claude";
|
|
128
|
-
}
|
|
129
|
-
/** Files of a local source, under the same declared limits as the manifest
|
|
130
|
-
* walk: it answers "does the source have this?" without following a link. */
|
|
131
|
-
async function walkLocalFiles(root) {
|
|
132
|
-
const base = resolve(root);
|
|
133
|
-
const out = [];
|
|
134
|
-
const pending = [{ dir: base, depth: 0 }];
|
|
135
|
-
let budget = LOCAL_WALK_LIMITS.maxEntries;
|
|
136
|
-
while (pending.length > 0) {
|
|
137
|
-
const next = pending.pop();
|
|
138
|
-
if (next === undefined || next.depth > LOCAL_WALK_LIMITS.maxDepth)
|
|
139
|
-
continue;
|
|
140
|
-
const entries = await readdir(next.dir, { withFileTypes: true }).catch(() => []);
|
|
141
|
-
for (const entry of entries) {
|
|
142
|
-
if (budget <= 0)
|
|
143
|
-
return out.sort();
|
|
144
|
-
budget -= 1;
|
|
145
|
-
const full = join(next.dir, entry.name);
|
|
146
|
-
// A link's `Dirent` is neither a directory nor a file: it falls through.
|
|
147
|
-
if (walkable(entry))
|
|
148
|
-
pending.push({ dir: full, depth: next.depth + 1 });
|
|
149
|
-
else if (entry.isFile())
|
|
150
|
-
out.push(relative(base, full).split(sep).join("/"));
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return out.sort();
|
|
154
|
-
}
|
|
155
|
-
/** Manifests of a git clone, read from the COMMIT's tree. */
|
|
156
|
-
async function gitManifests(root, paths) {
|
|
157
|
-
const candidates = [];
|
|
158
|
-
for (const path of paths) {
|
|
159
|
-
if (path !== MANIFEST && !path.endsWith(`/${MANIFEST}`))
|
|
160
|
-
continue;
|
|
161
|
-
const absolute = join(root, path);
|
|
162
|
-
const content = await readFile(absolute, "utf8").catch(() => null);
|
|
163
|
-
if (content === null || !hasValidFrontmatter(content))
|
|
164
|
-
continue;
|
|
165
|
-
candidates.push(candidateOf(root, dirname(absolute), content));
|
|
166
|
-
}
|
|
167
|
-
return candidates;
|
|
168
|
-
}
|
|
169
|
-
export async function acquireSource(source, ref) {
|
|
170
|
-
const resolved = resolveSkillSource(source, ref);
|
|
171
|
-
if ("error" in resolved)
|
|
172
|
-
return { code: "INVALID_SOURCE", message: resolved.error };
|
|
173
|
-
if (resolved.kind === "local") {
|
|
174
|
-
const stats = await lstat(resolved.path).catch(() => null);
|
|
175
|
-
if (stats === null) {
|
|
176
|
-
return { code: "SOURCE_NOT_FOUND", message: `el path local '${resolved.path}' no existe` };
|
|
177
|
-
}
|
|
178
|
-
if (stats.isSymbolicLink()) {
|
|
179
|
-
return {
|
|
180
|
-
code: "SOURCE_IS_SYMLINK",
|
|
181
|
-
message: `'${resolved.path}' es un enlace simbólico: declará su destino real`,
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
const walk = await walkLocalManifests(resolved.path, { entries: LOCAL_WALK_LIMITS.maxEntries });
|
|
185
|
-
return {
|
|
186
|
-
inventory: {
|
|
187
|
-
source: resolved.path,
|
|
188
|
-
kind: "local",
|
|
189
|
-
requestedRef: null,
|
|
190
|
-
resolvedRef: null,
|
|
191
|
-
candidates: walk.candidates,
|
|
192
|
-
truncated: walk.truncated,
|
|
193
|
-
limits: { ...LOCAL_WALK_LIMITS },
|
|
194
|
-
},
|
|
195
|
-
root: resolved.path,
|
|
196
|
-
materialize: async (relPath) => resolve(resolved.path, relPath),
|
|
197
|
-
listPaths: () => walkLocalFiles(resolved.path),
|
|
198
|
-
materializeFile: async (relPath) => {
|
|
199
|
-
const absolute = resolve(resolved.path, relPath);
|
|
200
|
-
return (await lstat(absolute).catch(() => null)) === null ? null : absolute;
|
|
201
|
-
},
|
|
202
|
-
release: async () => { },
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
const temp = await mkdtemp(join(tmpdir(), "aw-skill-source-"));
|
|
206
|
-
const release = async () => {
|
|
207
|
-
await rm(temp, { recursive: true, force: true }).catch(() => { });
|
|
208
|
-
};
|
|
209
|
-
// A server that refuses the partial clone falls back to a full one; then the
|
|
210
|
-
// whole tree is already checked out and `materialize` is identity.
|
|
211
|
-
let sparse = true;
|
|
212
|
-
try {
|
|
213
|
-
await gitCloneSkillManifests(resolved.url, temp, resolved.ref);
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
await rm(temp, { recursive: true, force: true }).catch(() => { });
|
|
217
|
-
try {
|
|
218
|
-
await gitClone(resolved.url, temp, resolved.ref);
|
|
219
|
-
sparse = false;
|
|
220
|
-
}
|
|
221
|
-
catch (err) {
|
|
222
|
-
await release();
|
|
223
|
-
return { code: "GIT_CLONE_FAILED", message: `git clone falló: ${err.message}` };
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
try {
|
|
227
|
-
const tree = await gitListTreePaths(temp);
|
|
228
|
-
const candidates = await gitManifests(temp, tree);
|
|
229
|
-
const resolvedRef = await gitResolveCommit(temp);
|
|
230
|
-
return {
|
|
231
|
-
inventory: {
|
|
232
|
-
// The registry records the source the person gave, never the temp dir.
|
|
233
|
-
source: source.split("#")[0] ?? source,
|
|
234
|
-
kind: "git",
|
|
235
|
-
requestedRef: resolved.ref ?? null,
|
|
236
|
-
resolvedRef,
|
|
237
|
-
candidates,
|
|
238
|
-
truncated: false,
|
|
239
|
-
limits: null,
|
|
240
|
-
},
|
|
241
|
-
root: temp,
|
|
242
|
-
materialize: async (relPath) => {
|
|
243
|
-
if (sparse) {
|
|
244
|
-
if (relPath === "")
|
|
245
|
-
await gitSparseDisable(temp);
|
|
246
|
-
else
|
|
247
|
-
await gitSparseAddSkillDir(temp, relPath);
|
|
248
|
-
}
|
|
249
|
-
return resolve(temp, relPath);
|
|
250
|
-
},
|
|
251
|
-
listPaths: async () => tree,
|
|
252
|
-
materializeFile: async (relPath) => {
|
|
253
|
-
if (!tree.includes(relPath))
|
|
254
|
-
return null;
|
|
255
|
-
if (sparse)
|
|
256
|
-
await gitSparseAddFile(temp, relPath);
|
|
257
|
-
return resolve(temp, relPath);
|
|
258
|
-
},
|
|
259
|
-
release,
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
catch (err) {
|
|
263
|
-
await release();
|
|
264
|
-
return {
|
|
265
|
-
code: "SOURCE_UNREADABLE",
|
|
266
|
-
message: `no se pudo leer el árbol de '${source}': ${err.message}`,
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
/** By-name selection, kept ONLY while it resolves a single option: two skills
|
|
271
|
-
* with the same name in one source are two alternatives, not a coin toss. */
|
|
272
|
-
export function candidatesNamed(inventory, name) {
|
|
273
|
-
return inventory.candidates.filter((c) => c.name === name || c.directory === name);
|
|
274
|
-
}
|
|
275
|
-
//# sourceMappingURL=skills-discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-discovery.js","sourceRoot":"","sources":["../../../src/application/self/skills-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
// Standalone-skills INVENTORY and ownership (skills.sh model): canonical copy
|
|
2
|
-
// in ~/.agents/skills/<n> (the open-standard anchor that non-Claude hosts
|
|
3
|
-
// scan) + a replica per host that does not read it.
|
|
4
|
-
//
|
|
5
|
-
// This module READS. Since Spec 043 the only way to change an installation is
|
|
6
|
-
// `prepareSkillChange` + `applySkillChange` (skills-change / skills-apply):
|
|
7
|
-
// one preparation, one preview, one concrete approval and one journal. There
|
|
8
|
-
// is deliberately no mutating function here for a surface to reach for — that
|
|
9
|
-
// was how the TUI could install without showing what it was about to do.
|
|
10
|
-
//
|
|
11
|
-
// The user-level registry (skills-registry.ts) stays the source of truth for
|
|
12
|
-
// WHAT this engine manages, and `installedAt` is still the only signal that
|
|
13
|
-
// says this engine materialized a directory: everything else on those roots
|
|
14
|
-
// belongs to somebody else (the `w` bundle, plugin skills, a manual install)
|
|
15
|
-
// and is reported, never touched.
|
|
16
|
-
import { readFile, readlink } from "node:fs/promises";
|
|
17
|
-
import { isAbsolute, join, resolve } from "node:path";
|
|
18
|
-
import { harnessByInstallTarget } from "../../domain/harnesses.js";
|
|
19
|
-
import { hasValidFrontmatter } from "./install-plugin-skills.js";
|
|
20
|
-
import { COMMAND_SKILL_PREFIX, LEGACY_SKILL_NAMES, SKILL_DIR_NAME } from "./install-skill.js";
|
|
21
|
-
import { curationOf, isRecommendedEntry, } from "./skills-catalog.js";
|
|
22
|
-
import { isValidSkillName, readSkillsRegistry, readSkillsShLockSources, } from "./skills-registry.js";
|
|
23
|
-
export function canonicalSkillsRoot(home) {
|
|
24
|
-
return join(home, ".agents", "skills");
|
|
25
|
-
}
|
|
26
|
-
export function claudeReplicaRoot(home) {
|
|
27
|
-
return join(home, ".claude", "skills");
|
|
28
|
-
}
|
|
29
|
-
export function geminiReplicaRoot(home) {
|
|
30
|
-
return join(home, ".gemini", "skills");
|
|
31
|
-
}
|
|
32
|
-
// Ownership marker for COPY replicas (counterpart of the symlink, which
|
|
33
|
-
// authenticates by pointing at our canonical): without it, a same-named real
|
|
34
|
-
// dir from another origin would be indistinguishable from our copy and
|
|
35
|
-
// teardown/reinstall could clobber it.
|
|
36
|
-
export const REPLICA_MARKER_FILENAME = ".aw-replica";
|
|
37
|
-
const REPLICA_HOSTS = [
|
|
38
|
-
{ key: "claude", root: claudeReplicaRoot, preferSymlink: true },
|
|
39
|
-
{ key: "gemini", root: geminiReplicaRoot, preferSymlink: false },
|
|
40
|
-
];
|
|
41
|
-
/**
|
|
42
|
-
* Labels of the hosts that get a replica, for surfaces that describe the
|
|
43
|
-
* action. The TUI used to spell "Claude, Gemini" into four separate strings, so
|
|
44
|
-
* adding a replica host meant remembering all four.
|
|
45
|
-
*/
|
|
46
|
-
export const REPLICA_HOST_LABELS = REPLICA_HOSTS.map((h) => harnessByInstallTarget(h.key)?.label ?? h.key);
|
|
47
|
-
/** Replica host keys in display order — surfaces enumerate from here, not by hand. */
|
|
48
|
-
export const REPLICA_HOST_KEYS = REPLICA_HOSTS.map((h) => h.key);
|
|
49
|
-
/**
|
|
50
|
-
* Normalizes the user's source: git URL (with `#ref`), `owner/repo` shorthand
|
|
51
|
-
* (→ GitHub) or absolute local path. Relative paths are rejected on purpose:
|
|
52
|
-
* the registry must resolve from any future cwd.
|
|
53
|
-
*/
|
|
54
|
-
export function resolveSkillSource(raw, ref) {
|
|
55
|
-
const trimmed = raw.trim();
|
|
56
|
-
if (trimmed.length === 0)
|
|
57
|
-
return { error: "la fuente no puede estar vacía" };
|
|
58
|
-
// file:// counts as git (clone over local transport) — lets users register
|
|
59
|
-
// local repos WITH history, unlike a plain path.
|
|
60
|
-
if (/^(https?:\/\/|git@|ssh:\/\/|file:\/\/)/.test(trimmed)) {
|
|
61
|
-
const hashIdx = trimmed.indexOf("#");
|
|
62
|
-
const url = hashIdx >= 0 ? trimmed.slice(0, hashIdx) : trimmed;
|
|
63
|
-
const parsedRef = ref ?? (hashIdx >= 0 ? trimmed.slice(hashIdx + 1) : undefined);
|
|
64
|
-
return { kind: "git", url, ...(parsedRef ? { ref: parsedRef } : {}) };
|
|
65
|
-
}
|
|
66
|
-
if (isAbsolute(trimmed))
|
|
67
|
-
return { kind: "local", path: trimmed };
|
|
68
|
-
// The GitHub shorthand requires segments starting alphanumeric: "./x" or
|
|
69
|
-
// "../x" are relative paths (rejected), not owner/repo.
|
|
70
|
-
if (/^[A-Za-z0-9][\w.-]*\/[A-Za-z0-9][\w.-]*$/.test(trimmed)) {
|
|
71
|
-
return { kind: "git", url: `https://github.com/${trimmed}.git`, ...(ref ? { ref } : {}) };
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
error: `fuente inválida: '${raw}'. Usá owner/repo, una URL git o un path local absoluto.`,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
async function isSkillDir(dir) {
|
|
78
|
-
try {
|
|
79
|
-
return hasValidFrontmatter(await readFile(join(dir, "SKILL.md"), "utf8"));
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/** Frontmatter `name:` — the skill's real name when the source IS a skill dir
|
|
86
|
-
* (the basename of a temp clone is random, never usable). Exported so the
|
|
87
|
-
* path-addressable discovery reads identity the same way this engine does. */
|
|
88
|
-
export function skillFrontmatterName(content) {
|
|
89
|
-
const block = content.match(/^---[ \t]*\r?\n([\s\S]*?)\r?\n---/)?.[1] ?? "";
|
|
90
|
-
return block.match(/^name:\s*(\S[^\r\n]*)/m)?.[1]?.trim() ?? null;
|
|
91
|
-
}
|
|
92
|
-
export async function inspectSkillOwnership(ctx, name, entry) {
|
|
93
|
-
const home = ctx.env.homeDir();
|
|
94
|
-
const canonicalPath = join(canonicalSkillsRoot(home), name);
|
|
95
|
-
const present = await ctx.fs.exists(canonicalPath);
|
|
96
|
-
// `installedAt` is the only signal that says THIS manager materialized it;
|
|
97
|
-
// a same-named dir nobody registered belongs to whoever put it there.
|
|
98
|
-
const canonicalState = !present
|
|
99
|
-
? "absent"
|
|
100
|
-
: entry?.installedAt
|
|
101
|
-
? "ours"
|
|
102
|
-
: "foreign";
|
|
103
|
-
const replicas = [];
|
|
104
|
-
for (const host of REPLICA_HOSTS) {
|
|
105
|
-
replicas.push({
|
|
106
|
-
host: host.key,
|
|
107
|
-
path: join(host.root(home), name),
|
|
108
|
-
state: await inspectReplica(ctx, name, entry?.mode, host),
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
return { name, canonical: { path: canonicalPath, state: canonicalState }, replicas };
|
|
112
|
-
}
|
|
113
|
-
/** The catalog's contribution to a row: what the review says about this name,
|
|
114
|
-
* or nothing at all — an unreviewed installation borrows no verdict. */
|
|
115
|
-
function catalogFields(entry) {
|
|
116
|
-
const curation = curationOf(entry);
|
|
117
|
-
return {
|
|
118
|
-
...(entry?.description ? { description: entry.description } : {}),
|
|
119
|
-
...(curation !== undefined ? { curation } : {}),
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
/** Single list for the TUI: registered (installed or not) + canonicals outside
|
|
123
|
-
* the registry (`unmanaged`) + the recommended catalog entries nobody has.
|
|
124
|
-
* Order: installed → unmanaged → registered → recommended; alphabetical
|
|
125
|
-
* within each group.
|
|
126
|
-
*
|
|
127
|
-
* `catalog` is the WHOLE reviewed record (Spec 043): its metadata reaches
|
|
128
|
-
* every row it knows — a withdrawn entry included, which is what keeps an
|
|
129
|
-
* installation readable after it stops being recommended — while only the
|
|
130
|
-
* recommended entries produce a `recommended` row of their own. */
|
|
131
|
-
export async function listSkills(ctx, catalog) {
|
|
132
|
-
const { registry, warning } = await readSkillsRegistry(ctx);
|
|
133
|
-
const home = ctx.env.homeDir();
|
|
134
|
-
const catalogByName = new Map(catalog.map((s) => [s.name, s]));
|
|
135
|
-
const items = [];
|
|
136
|
-
for (const [name, entry] of Object.entries(registry.skills)) {
|
|
137
|
-
const canonical = await ctx.fs.exists(join(canonicalSkillsRoot(home), name));
|
|
138
|
-
const replica = (await ctx.fs.lstat(join(claudeReplicaRoot(home), name))) !== null;
|
|
139
|
-
const gemini = (await ctx.fs.lstat(join(geminiReplicaRoot(home), name))) !== null;
|
|
140
|
-
items.push({
|
|
141
|
-
name,
|
|
142
|
-
source: entry.source,
|
|
143
|
-
...(entry.ref ? { ref: entry.ref } : {}),
|
|
144
|
-
...(entry.mode ? { mode: entry.mode } : {}),
|
|
145
|
-
...(entry.installedAt ? { installedAt: entry.installedAt } : {}),
|
|
146
|
-
...catalogFields(catalogByName.get(name)),
|
|
147
|
-
status: canonical ? "installed" : "registered",
|
|
148
|
-
replicas: { agents: canonical, claude: replica, gemini },
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
// Canonicals outside the registry (skills.sh, manual): shown as `unmanaged`
|
|
152
|
-
// so the tab reflects the WHOLE anchor, without making them operable
|
|
153
|
-
// (ownership guard intact). The source comes from the skills.sh lock when it
|
|
154
|
-
// knows it; "" when nobody does. Excluded: the `w` bundle and its
|
|
155
|
-
// synthesized `w-*` namespace (skill-as-command) + legacy names (managed by
|
|
156
|
-
// [Workline], not "someone else's"). With an UNREADABLE registry nothing is
|
|
157
|
-
// classified: entries could belong to this engine and would be mislabeled as
|
|
158
|
-
// foreign.
|
|
159
|
-
const bundleOwned = new Set([SKILL_DIR_NAME, ...LEGACY_SKILL_NAMES]);
|
|
160
|
-
const unmanaged = new Set();
|
|
161
|
-
const root = canonicalSkillsRoot(home);
|
|
162
|
-
if (warning === undefined) {
|
|
163
|
-
try {
|
|
164
|
-
const lockSources = await readSkillsShLockSources(ctx);
|
|
165
|
-
for (const entry of await ctx.fs.list(root)) {
|
|
166
|
-
// A symlink-to-dir is typed "other" (Dirent does not resolve it); only
|
|
167
|
-
// files are discarded — isSkillDir reads THROUGH the link and decides.
|
|
168
|
-
if (entry.type === "file" || entry.name.startsWith("."))
|
|
169
|
-
continue;
|
|
170
|
-
if (bundleOwned.has(entry.name) || entry.name.startsWith(COMMAND_SKILL_PREFIX))
|
|
171
|
-
continue;
|
|
172
|
-
if (Object.hasOwn(registry.skills, entry.name) || !isValidSkillName(entry.name))
|
|
173
|
-
continue;
|
|
174
|
-
if (!(await isSkillDir(join(root, entry.name))))
|
|
175
|
-
continue;
|
|
176
|
-
unmanaged.add(entry.name);
|
|
177
|
-
const replica = (await ctx.fs.lstat(join(claudeReplicaRoot(home), entry.name))) !== null;
|
|
178
|
-
const gemini = (await ctx.fs.lstat(join(geminiReplicaRoot(home), entry.name))) !== null;
|
|
179
|
-
items.push({
|
|
180
|
-
name: entry.name,
|
|
181
|
-
source: lockSources[entry.name] ?? "",
|
|
182
|
-
...catalogFields(catalogByName.get(entry.name)),
|
|
183
|
-
status: "unmanaged",
|
|
184
|
-
replicas: { agents: true, claude: replica, gemini },
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
catch {
|
|
189
|
-
// Anchor absent or unreadable (e.g. permissions): the scan is best-effort —
|
|
190
|
-
// managed skills are already listed; never empty the tab over this.
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
for (const s of catalog) {
|
|
194
|
-
// A withdrawn entry is no longer offered: it keeps its metadata for the
|
|
195
|
-
// rows above, but it never comes back as a `recommended` one.
|
|
196
|
-
if (!isRecommendedEntry(s))
|
|
197
|
-
continue;
|
|
198
|
-
if (Object.hasOwn(registry.skills, s.name) || unmanaged.has(s.name))
|
|
199
|
-
continue;
|
|
200
|
-
// Same-named canonical the scan did not list (invalid frontmatter, file,
|
|
201
|
-
// unreadable registry): offering Install guarantees SKILL_NAME_COLLISION —
|
|
202
|
-
// better not to offer the catalog entry.
|
|
203
|
-
if (await ctx.fs.exists(join(root, s.name)))
|
|
204
|
-
continue;
|
|
205
|
-
items.push({
|
|
206
|
-
name: s.name,
|
|
207
|
-
source: s.source,
|
|
208
|
-
...catalogFields(s),
|
|
209
|
-
status: "recommended",
|
|
210
|
-
replicas: { agents: false, claude: false, gemini: false },
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
const rank = {
|
|
214
|
-
installed: 0,
|
|
215
|
-
unmanaged: 1,
|
|
216
|
-
registered: 2,
|
|
217
|
-
recommended: 3,
|
|
218
|
-
};
|
|
219
|
-
return items.sort((a, b) => rank[a.status] - rank[b.status] || a.name.localeCompare(b.name));
|
|
220
|
-
}
|
|
221
|
-
/** Replica ownership on a host: ours only if it is a symlink pointing at OUR
|
|
222
|
-
* canonical, a real dir with the `.aw-replica` marker, or — legacy
|
|
223
|
-
* (pre-marker copies, Windows) — a real dir with registered mode:"copy". A
|
|
224
|
-
* user's symlink pointing elsewhere is foreign — never re-pointed. */
|
|
225
|
-
async function inspectReplica(ctx, name, registeredMode, host) {
|
|
226
|
-
const home = ctx.env.homeDir();
|
|
227
|
-
const replicaRoot = host.root(home);
|
|
228
|
-
const replica = join(replicaRoot, name);
|
|
229
|
-
// A location this manager cannot even READ is definitely not one it owns —
|
|
230
|
-
// e.g. somebody left a FILE where the skills root goes. `foreign` is the
|
|
231
|
-
// honest answer: report it, never write through it.
|
|
232
|
-
const existing = await ctx.fs.lstat(replica).catch(() => "unreadable");
|
|
233
|
-
if (existing === "unreadable")
|
|
234
|
-
return "foreign";
|
|
235
|
-
if (!existing)
|
|
236
|
-
return "absent";
|
|
237
|
-
if (existing.isSymlink) {
|
|
238
|
-
try {
|
|
239
|
-
const target = await readlink(replica);
|
|
240
|
-
const canonical = join(canonicalSkillsRoot(home), name);
|
|
241
|
-
return resolve(replicaRoot, target) === resolve(canonical) ? "ours" : "foreign";
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
return "foreign";
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
if (await ctx.fs.exists(join(replica, REPLICA_MARKER_FILENAME)))
|
|
248
|
-
return "ours";
|
|
249
|
-
// Legacy: pre-marker copies on the claude host authenticated only via the
|
|
250
|
-
// registered mode.
|
|
251
|
-
return host.key === "claude" && registeredMode === "copy" ? "ours" : "foreign";
|
|
252
|
-
}
|
|
253
|
-
//# sourceMappingURL=skills-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-manager.js","sourceRoot":"","sources":["../../../src/application/self/skills-manager.ts"],"names":[],"mappings":"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"}
|