@cleocode/core 2026.9.22 → 2026.9.24
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/dist/admin/import-tasks.d.ts.map +1 -1
- package/dist/admin/import-tasks.js +35 -6
- package/dist/admin/import-tasks.js.map +1 -1
- package/dist/admin/import.d.ts.map +1 -1
- package/dist/admin/import.js +25 -6
- package/dist/admin/import.js.map +1 -1
- package/dist/build-provenance.json +6 -0
- package/dist/cloud/http.d.ts +8 -0
- package/dist/cloud/http.d.ts.map +1 -1
- package/dist/cloud/http.js +8 -1
- package/dist/cloud/http.js.map +1 -1
- package/dist/cloud/index.d.ts +6 -1
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +6 -1
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/nexus-auth.d.ts +169 -0
- package/dist/cloud/nexus-auth.d.ts.map +1 -0
- package/dist/cloud/nexus-auth.js +372 -0
- package/dist/cloud/nexus-auth.js.map +1 -0
- package/dist/cloud/nexus-credentials.d.ts +188 -0
- package/dist/cloud/nexus-credentials.d.ts.map +1 -0
- package/dist/cloud/nexus-credentials.js +323 -0
- package/dist/cloud/nexus-credentials.js.map +1 -0
- package/dist/cloud/nexus-link.d.ts +85 -0
- package/dist/cloud/nexus-link.d.ts.map +1 -0
- package/dist/cloud/nexus-link.js +226 -0
- package/dist/cloud/nexus-link.js.map +1 -0
- package/dist/cloud/presence.d.ts +88 -0
- package/dist/cloud/presence.d.ts.map +1 -0
- package/dist/cloud/presence.js +137 -0
- package/dist/cloud/presence.js.map +1 -0
- package/dist/cloud/projects.d.ts +3 -1
- package/dist/cloud/projects.d.ts.map +1 -1
- package/dist/cloud/projects.js +4 -2
- package/dist/cloud/projects.js.map +1 -1
- package/dist/crypto/credentials.d.ts +14 -4
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +15 -1
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/decide/audit.d.ts +7 -1
- package/dist/decide/audit.d.ts.map +1 -1
- package/dist/decide/audit.js.map +1 -1
- package/dist/decide/bench/dataset.d.ts +125 -0
- package/dist/decide/bench/dataset.d.ts.map +1 -0
- package/dist/decide/bench/dataset.js +457 -0
- package/dist/decide/bench/dataset.js.map +1 -0
- package/dist/decide/bench/index.d.ts +23 -0
- package/dist/decide/bench/index.d.ts.map +1 -0
- package/dist/decide/bench/index.js +23 -0
- package/dist/decide/bench/index.js.map +1 -0
- package/dist/decide/bench/metrics.d.ts +55 -0
- package/dist/decide/bench/metrics.d.ts.map +1 -0
- package/dist/decide/bench/metrics.js +100 -0
- package/dist/decide/bench/metrics.js.map +1 -0
- package/dist/decide/bench/operation.d.ts +119 -0
- package/dist/decide/bench/operation.d.ts.map +1 -0
- package/dist/decide/bench/operation.js +171 -0
- package/dist/decide/bench/operation.js.map +1 -0
- package/dist/decide/bench/profiles.d.ts +74 -0
- package/dist/decide/bench/profiles.d.ts.map +1 -0
- package/dist/decide/bench/profiles.js +131 -0
- package/dist/decide/bench/profiles.js.map +1 -0
- package/dist/decide/bench/questions.d.ts +40 -0
- package/dist/decide/bench/questions.d.ts.map +1 -0
- package/dist/decide/bench/questions.js +107 -0
- package/dist/decide/bench/questions.js.map +1 -0
- package/dist/decide/bench/report.d.ts +21 -0
- package/dist/decide/bench/report.d.ts.map +1 -0
- package/dist/decide/bench/report.js +120 -0
- package/dist/decide/bench/report.js.map +1 -0
- package/dist/decide/bench/runner.d.ts +203 -0
- package/dist/decide/bench/runner.d.ts.map +1 -0
- package/dist/decide/bench/runner.js +335 -0
- package/dist/decide/bench/runner.js.map +1 -0
- package/dist/decide/bench/source.d.ts +21 -0
- package/dist/decide/bench/source.d.ts.map +1 -0
- package/dist/decide/bench/source.js +67 -0
- package/dist/decide/bench/source.js.map +1 -0
- package/dist/decide/bench/spot-check.d.ts +117 -0
- package/dist/decide/bench/spot-check.d.ts.map +1 -0
- package/dist/decide/bench/spot-check.js +221 -0
- package/dist/decide/bench/spot-check.js.map +1 -0
- package/dist/decide/bench/stats.d.ts +57 -0
- package/dist/decide/bench/stats.d.ts.map +1 -0
- package/dist/decide/bench/stats.js +82 -0
- package/dist/decide/bench/stats.js.map +1 -0
- package/dist/decide/bench/types.d.ts +216 -0
- package/dist/decide/bench/types.d.ts.map +1 -0
- package/dist/decide/bench/types.js +104 -0
- package/dist/decide/bench/types.js.map +1 -0
- package/dist/decide/client.d.ts +80 -4
- package/dist/decide/client.d.ts.map +1 -1
- package/dist/decide/client.js +428 -39
- package/dist/decide/client.js.map +1 -1
- package/dist/decide/credentials.d.ts +200 -16
- package/dist/decide/credentials.d.ts.map +1 -1
- package/dist/decide/credentials.js +547 -45
- package/dist/decide/credentials.js.map +1 -1
- package/dist/decide/index.d.ts +10 -4
- package/dist/decide/index.d.ts.map +1 -1
- package/dist/decide/index.js +10 -4
- package/dist/decide/index.js.map +1 -1
- package/dist/decide/jev-wire.d.ts +105 -7
- package/dist/decide/jev-wire.d.ts.map +1 -1
- package/dist/decide/jev-wire.js +426 -54
- package/dist/decide/jev-wire.js.map +1 -1
- package/dist/decide/operations.d.ts +149 -21
- package/dist/decide/operations.d.ts.map +1 -1
- package/dist/decide/operations.js +241 -31
- package/dist/decide/operations.js.map +1 -1
- package/dist/decide/provider-state.d.ts +162 -0
- package/dist/decide/provider-state.d.ts.map +1 -0
- package/dist/decide/provider-state.js +267 -0
- package/dist/decide/provider-state.js.map +1 -0
- package/dist/decide/provider.d.ts +31 -5
- package/dist/decide/provider.d.ts.map +1 -1
- package/dist/decide/provider.js.map +1 -1
- package/dist/decide/providers.d.ts +71 -0
- package/dist/decide/providers.d.ts.map +1 -0
- package/dist/decide/providers.js +85 -0
- package/dist/decide/providers.js.map +1 -0
- package/dist/decide/site.d.ts +2 -2
- package/dist/decide/site.d.ts.map +1 -1
- package/dist/decide/site.js +2 -0
- package/dist/decide/site.js.map +1 -1
- package/dist/decide/sites/list.d.ts +46 -0
- package/dist/decide/sites/list.d.ts.map +1 -0
- package/dist/decide/sites/list.js +206 -0
- package/dist/decide/sites/list.js.map +1 -0
- package/dist/decide/sites/registry.d.ts +152 -0
- package/dist/decide/sites/registry.d.ts.map +1 -0
- package/dist/decide/sites/registry.js +398 -0
- package/dist/decide/sites/registry.js.map +1 -0
- package/dist/decide/spend.d.ts +196 -0
- package/dist/decide/spend.d.ts.map +1 -0
- package/dist/decide/spend.js +387 -0
- package/dist/decide/spend.js.map +1 -0
- package/dist/decide/wizard.d.ts +61 -0
- package/dist/decide/wizard.d.ts.map +1 -0
- package/dist/decide/wizard.js +197 -0
- package/dist/decide/wizard.js.map +1 -0
- package/dist/dispatch/mvi-projection.d.ts +15 -2
- package/dist/dispatch/mvi-projection.d.ts.map +1 -1
- package/dist/dispatch/mvi-projection.js +73 -12
- package/dist/dispatch/mvi-projection.js.map +1 -1
- package/dist/docs/adr-allocator.d.ts +2 -2
- package/dist/docs/adr-allocator.d.ts.map +1 -1
- package/dist/docs/adr-allocator.js +17 -4
- package/dist/docs/adr-allocator.js.map +1 -1
- package/dist/docs/blob-consolidation.js +1 -1
- package/dist/docs/blob-consolidation.js.map +1 -1
- package/dist/docs/display-alias.d.ts +1 -1
- package/dist/docs/display-alias.d.ts.map +1 -1
- package/dist/docs/display-alias.js +7 -4
- package/dist/docs/display-alias.js.map +1 -1
- package/dist/docs/docs-audit.d.ts.map +1 -1
- package/dist/docs/docs-audit.js +1 -2
- package/dist/docs/docs-audit.js.map +1 -1
- package/dist/docs/docs-inconsistency-detector.js +1 -1
- package/dist/docs/docs-inconsistency-detector.js.map +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +6 -1
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/export-document.js +3462 -1227
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/numbering.js +1 -1
- package/dist/docs/numbering.js.map +1 -1
- package/dist/docs/supersede.d.ts.map +1 -1
- package/dist/docs/supersede.js +6 -3
- package/dist/docs/supersede.js.map +1 -1
- package/dist/docs/version-ssot.js +1 -1
- package/dist/docs/version-ssot.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +39 -24
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/knowledge-summary.d.ts +10 -3
- package/dist/doctor/knowledge-summary.d.ts.map +1 -1
- package/dist/doctor/knowledge-summary.js +10 -3
- package/dist/doctor/knowledge-summary.js.map +1 -1
- package/dist/doctor/project-identity.d.ts +128 -37
- package/dist/doctor/project-identity.d.ts.map +1 -1
- package/dist/doctor/project-identity.js +476 -63
- package/dist/doctor/project-identity.js.map +1 -1
- package/dist/doctor/twin-collapse.d.ts +52 -2
- package/dist/doctor/twin-collapse.d.ts.map +1 -1
- package/dist/doctor/twin-collapse.js +108 -4
- package/dist/doctor/twin-collapse.js.map +1 -1
- package/dist/error-catalog.js +2 -2
- package/dist/error-catalog.js.map +1 -1
- package/dist/error-registry.js +1 -1
- package/dist/error-registry.js.map +1 -1
- package/dist/gateway-client/generated/types.gen.d.ts +22 -2
- package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/init/scaffold-workflows.d.ts.map +1 -1
- package/dist/init/scaffold-workflows.js +6 -3
- package/dist/init/scaffold-workflows.js.map +1 -1
- package/dist/init/upgrade-workflows.d.ts.map +1 -1
- package/dist/init/upgrade-workflows.js +6 -3
- package/dist/init/upgrade-workflows.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +20 -11
- package/dist/init.js.map +1 -1
- package/dist/inject/index.d.ts.map +1 -1
- package/dist/inject/index.js +2 -3
- package/dist/inject/index.js.map +1 -1
- package/dist/internal.d.ts +6 -5
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +7 -5
- package/dist/internal.js.map +1 -1
- package/dist/llm/credential-remove-entry.d.ts +59 -0
- package/dist/llm/credential-remove-entry.d.ts.map +1 -0
- package/dist/llm/credential-remove-entry.js +101 -0
- package/dist/llm/credential-remove-entry.js.map +1 -0
- package/dist/llm/oauth/device-code.d.ts +26 -6
- package/dist/llm/oauth/device-code.d.ts.map +1 -1
- package/dist/llm/oauth/device-code.js +44 -12
- package/dist/llm/oauth/device-code.js.map +1 -1
- package/dist/llm/plugin-facade.js +3556 -1321
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/attention.d.ts.map +1 -1
- package/dist/memory/attention.js +5 -3
- package/dist/memory/attention.js.map +1 -1
- package/dist/memory/decision-contradiction.d.ts +3 -3
- package/dist/memory/decision-contradiction.d.ts.map +1 -1
- package/dist/memory/decision-contradiction.js +4 -3
- package/dist/memory/decision-contradiction.js.map +1 -1
- package/dist/memory/decisions.d.ts +48 -3
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +98 -14
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +2 -0
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/learnings.d.ts +6 -6
- package/dist/memory/observation-type-decision.d.ts +2 -2
- package/dist/memory/observation-type-decision.d.ts.map +1 -1
- package/dist/memory/observation-type-decision.js +3 -2
- package/dist/memory/observation-type-decision.js.map +1 -1
- package/dist/memory/patterns.d.ts +4 -4
- package/dist/memory/pipeline-manifest-sqlite.d.ts +111 -0
- package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.js +230 -2
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.d.ts.map +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js +5 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js.map +1 -1
- package/dist/nexus/fleet-status.d.ts +83 -0
- package/dist/nexus/fleet-status.d.ts.map +1 -0
- package/dist/nexus/fleet-status.js +414 -0
- package/dist/nexus/fleet-status.js.map +1 -0
- package/dist/nexus/git-state.d.ts +15 -0
- package/dist/nexus/git-state.d.ts.map +1 -1
- package/dist/nexus/git-state.js +67 -2
- package/dist/nexus/git-state.js.map +1 -1
- package/dist/nexus/identity.d.ts.map +1 -1
- package/dist/nexus/identity.js +4 -0
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/index.d.ts +4 -1
- package/dist/nexus/index.d.ts.map +1 -1
- package/dist/nexus/index.js +7 -1
- package/dist/nexus/index.js.map +1 -1
- package/dist/nexus/migrate-json-to-sqlite.d.ts +3 -2
- package/dist/nexus/migrate-json-to-sqlite.d.ts.map +1 -1
- package/dist/nexus/migrate-json-to-sqlite.js +9 -17
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
- package/dist/nexus/migrations/M-split-graph.d.ts.map +1 -1
- package/dist/nexus/migrations/M-split-graph.js +4 -0
- package/dist/nexus/migrations/M-split-graph.js.map +1 -1
- package/dist/nexus/ops.d.ts +1 -0
- package/dist/nexus/ops.d.ts.map +1 -1
- package/dist/nexus/project-activity.d.ts +104 -0
- package/dist/nexus/project-activity.d.ts.map +1 -0
- package/dist/nexus/project-activity.js +150 -0
- package/dist/nexus/project-activity.js.map +1 -0
- package/dist/nexus/query.d.ts +2 -2
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +4 -19
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-errors.d.ts +61 -0
- package/dist/nexus/registry-errors.d.ts.map +1 -0
- package/dist/nexus/registry-errors.js +85 -0
- package/dist/nexus/registry-errors.js.map +1 -0
- package/dist/nexus/registry.d.ts +30 -5
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +115 -70
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/store.d.ts.map +1 -1
- package/dist/nexus/store.js +2 -0
- package/dist/nexus/store.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts +4 -0
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +82 -14
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/plan.d.ts.map +1 -1
- package/dist/orchestrate/plan.js +3 -0
- package/dist/orchestrate/plan.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +29 -27
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +29 -3
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/bootstrap.d.ts.map +1 -1
- package/dist/orchestration/bootstrap.js +20 -14
- package/dist/orchestration/bootstrap.js.map +1 -1
- package/dist/orchestration/index.d.ts +15 -1
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +25 -6
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts +7 -1
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +20 -5
- package/dist/orchestration/lead-rollup.js.map +1 -1
- package/dist/orchestration/owner-decision-readiness.d.ts +2 -2
- package/dist/orchestration/owner-decision-readiness.d.ts.map +1 -1
- package/dist/orchestration/owner-decision-readiness.js +3 -2
- package/dist/orchestration/owner-decision-readiness.js.map +1 -1
- package/dist/orchestration/spawn-prompt.js +1 -1
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/validate-spawn.d.ts.map +1 -1
- package/dist/orchestration/validate-spawn.js +2 -0
- package/dist/orchestration/validate-spawn.js.map +1 -1
- package/dist/orchestration/waves.d.ts +21 -10
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +38 -35
- package/dist/orchestration/waves.js.map +1 -1
- package/dist/paths.d.ts +9 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +30 -13
- package/dist/paths.js.map +1 -1
- package/dist/phases/index.d.ts +1 -1
- package/dist/phases/index.d.ts.map +1 -1
- package/dist/phases/index.js +3 -4
- package/dist/phases/index.js.map +1 -1
- package/dist/project-info.d.ts +40 -3
- package/dist/project-info.d.ts.map +1 -1
- package/dist/project-info.js +74 -6
- package/dist/project-info.js.map +1 -1
- package/dist/project-lifecycle.d.ts +28 -7
- package/dist/project-lifecycle.d.ts.map +1 -1
- package/dist/project-lifecycle.js +114 -47
- package/dist/project-lifecycle.js.map +1 -1
- package/dist/project-scope.d.ts +86 -3
- package/dist/project-scope.d.ts.map +1 -1
- package/dist/project-scope.js +192 -17
- package/dist/project-scope.js.map +1 -1
- package/dist/release/github-pr.d.ts.map +1 -1
- package/dist/release/github-pr.js +2 -1
- package/dist/release/github-pr.js.map +1 -1
- package/dist/release/open.d.ts +12 -2
- package/dist/release/open.d.ts.map +1 -1
- package/dist/release/open.js +32 -3
- package/dist/release/open.js.map +1 -1
- package/dist/release/preflight-skip.d.ts +73 -0
- package/dist/release/preflight-skip.d.ts.map +1 -0
- package/dist/release/preflight-skip.js +254 -0
- package/dist/release/preflight-skip.js.map +1 -0
- package/dist/render/decide/index.d.ts +51 -0
- package/dist/render/decide/index.d.ts.map +1 -0
- package/dist/render/decide/index.js +289 -0
- package/dist/render/decide/index.js.map +1 -0
- package/dist/render/index.d.ts +1 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts +5 -0
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +53 -0
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/routing/capability-matrix.d.ts.map +1 -1
- package/dist/routing/capability-matrix.js +7 -0
- package/dist/routing/capability-matrix.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts +14 -6
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +39 -17
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/project-identity.d.ts +115 -23
- package/dist/scaffold/project-identity.d.ts.map +1 -1
- package/dist/scaffold/project-identity.js +196 -44
- package/dist/scaffold/project-identity.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +3569 -1334
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/cross-project-hygiene.d.ts +12 -6
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +15 -10
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/session/engine-ops.d.ts +13 -4
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +38 -45
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/briefing.d.ts +7 -3
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +32 -71
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/drift-watchdog.d.ts.map +1 -1
- package/dist/sessions/drift-watchdog.js +11 -19
- package/dist/sessions/drift-watchdog.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts +109 -27
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +171 -39
- package/dist/sessions/focus-state-store.js.map +1 -1
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +9 -18
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +4 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +35 -6
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-drift.d.ts.map +1 -1
- package/dist/sessions/session-drift.js +4 -2
- package/dist/sessions/session-drift.js.map +1 -1
- package/dist/sessions/session-view.d.ts +8 -1
- package/dist/sessions/session-view.d.ts.map +1 -1
- package/dist/sessions/session-view.js +9 -2
- package/dist/sessions/session-view.js.map +1 -1
- package/dist/setup/config-json-merge.d.ts +28 -0
- package/dist/setup/config-json-merge.d.ts.map +1 -1
- package/dist/setup/config-json-merge.js +52 -0
- package/dist/setup/config-json-merge.js.map +1 -1
- package/dist/setup/index.d.ts +15 -10
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +19 -10
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/sections/llm.js +1 -1
- package/dist/setup/sections/llm.js.map +1 -1
- package/dist/setup/sections/nexus-account.d.ts +32 -0
- package/dist/setup/sections/nexus-account.d.ts.map +1 -0
- package/dist/setup/sections/nexus-account.js +64 -0
- package/dist/setup/sections/nexus-account.js.map +1 -0
- package/dist/setup/sections/system-one.d.ts +28 -0
- package/dist/setup/sections/system-one.d.ts.map +1 -0
- package/dist/setup/sections/system-one.js +53 -0
- package/dist/setup/sections/system-one.js.map +1 -0
- package/dist/setup/wizard.d.ts +15 -1
- package/dist/setup/wizard.d.ts.map +1 -1
- package/dist/setup/wizard.js +15 -0
- package/dist/setup/wizard.js.map +1 -1
- package/dist/skills/orchestrator/startup.d.ts.map +1 -1
- package/dist/skills/orchestrator/startup.js +18 -31
- package/dist/skills/orchestrator/startup.js.map +1 -1
- package/dist/skills/prune-bundled.d.ts +40 -1
- package/dist/skills/prune-bundled.d.ts.map +1 -1
- package/dist/skills/prune-bundled.js +117 -1
- package/dist/skills/prune-bundled.js.map +1 -1
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +60 -53
- package/dist/snapshot/index.js.map +1 -1
- package/dist/spawn/agent-identity.d.ts +33 -1
- package/dist/spawn/agent-identity.d.ts.map +1 -1
- package/dist/spawn/agent-identity.js +53 -1
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/spawn/index.d.ts +1 -1
- package/dist/spawn/index.d.ts.map +1 -1
- package/dist/spawn/index.js +1 -1
- package/dist/spawn/index.js.map +1 -1
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +3 -4
- package/dist/stats/index.js.map +1 -1
- package/dist/status/index.d.ts +12 -3
- package/dist/status/index.d.ts.map +1 -1
- package/dist/status/index.js +47 -5
- package/dist/status/index.js.map +1 -1
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +2 -0
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/attachment-repair.d.ts.map +1 -1
- package/dist/store/attachment-repair.js +42 -3
- package/dist/store/attachment-repair.js.map +1 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +30 -46
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/backup-pack.js +1 -1
- package/dist/store/backup-pack.js.map +1 -1
- package/dist/store/backup-recover-brain.d.ts +4 -0
- package/dist/store/backup-recover-brain.d.ts.map +1 -1
- package/dist/store/backup-recover-brain.js +2 -0
- package/dist/store/backup-recover-brain.js.map +1 -1
- package/dist/store/backup-recover.d.ts +9 -0
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +28 -1
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/backup-sidecar.d.ts +30 -0
- package/dist/store/backup-sidecar.d.ts.map +1 -1
- package/dist/store/backup-sidecar.js +90 -2
- package/dist/store/backup-sidecar.js.map +1 -1
- package/dist/store/backup.d.ts +15 -1
- package/dist/store/backup.d.ts.map +1 -1
- package/dist/store/backup.js +18 -2
- package/dist/store/backup.js.map +1 -1
- package/dist/store/blob-keep.d.ts +135 -0
- package/dist/store/blob-keep.d.ts.map +1 -0
- package/dist/store/blob-keep.js +283 -0
- package/dist/store/blob-keep.js.map +1 -0
- package/dist/store/conduit-sqlite.d.ts.map +1 -1
- package/dist/store/conduit-sqlite.js +3 -0
- package/dist/store/conduit-sqlite.js.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +11 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/credential-transfer.d.ts +37 -5
- package/dist/store/credential-transfer.d.ts.map +1 -1
- package/dist/store/credential-transfer.js +75 -18
- package/dist/store/credential-transfer.js.map +1 -1
- package/dist/store/cross-db-cleanup.d.ts.map +1 -1
- package/dist/store/cross-db-cleanup.js +2 -0
- package/dist/store/cross-db-cleanup.js.map +1 -1
- package/dist/store/data-accessor.d.ts +1 -1
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/db-helpers.d.ts +18 -0
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +46 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +13 -2
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +35 -0
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +3 -3
- package/dist/store/exodus/runtime-targets.js +3 -3
- package/dist/store/import-remap.d.ts +12 -1
- package/dist/store/import-remap.d.ts.map +1 -1
- package/dist/store/import-remap.js +14 -0
- package/dist/store/import-remap.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts +3 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +3 -1
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/memory-accessor.js +1 -1
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -1
- package/dist/store/migrate-signaldock-to-conduit.js +3 -0
- package/dist/store/migrate-signaldock-to-conduit.js.map +1 -1
- package/dist/store/migration-manager.d.ts +61 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +138 -6
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-sqlite.d.ts.map +1 -1
- package/dist/store/migration-sqlite.js +2 -0
- package/dist/store/migration-sqlite.js.map +1 -1
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +3 -0
- package/dist/store/nexus-sqlite.js.map +1 -1
- package/dist/store/nexus-validation-schemas.d.ts +64 -0
- package/dist/store/nexus-validation-schemas.d.ts.map +1 -1
- package/dist/store/open-cleo-db.d.ts.map +1 -1
- package/dist/store/open-cleo-db.js +3 -0
- package/dist/store/open-cleo-db.js.map +1 -1
- package/dist/store/portable-bundle-import.d.ts +8 -0
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +12 -0
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
- package/dist/store/portable-bundle-relocate.js +2 -0
- package/dist/store/portable-bundle-relocate.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +2 -1
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +15 -14
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/ports/domain-binding.d.ts.map +1 -1
- package/dist/store/ports/domain-binding.js +5 -0
- package/dist/store/ports/domain-binding.js.map +1 -1
- package/dist/store/pre-repair-snapshot.d.ts +4 -1
- package/dist/store/pre-repair-snapshot.d.ts.map +1 -1
- package/dist/store/pre-repair-snapshot.js +5 -1
- package/dist/store/pre-repair-snapshot.js.map +1 -1
- package/dist/store/regenerators.d.ts +4 -2
- package/dist/store/regenerators.d.ts.map +1 -1
- package/dist/store/regenerators.js +7 -3
- package/dist/store/regenerators.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts +4 -0
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
- package/dist/store/repair-malformed-dbs.js +3 -0
- package/dist/store/repair-malformed-dbs.js.map +1 -1
- package/dist/store/safety-data-accessor.d.ts +8 -3
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +11 -4
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +48 -0
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +17 -0
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-project/docs.d.ts +16 -0
- package/dist/store/schema/cleo-project/docs.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/docs.js +10 -0
- package/dist/store/schema/cleo-project/docs.js.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +80 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +25 -1
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts +1 -1
- package/dist/store/schema/nexus-schema.d.ts +48 -0
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +28 -7
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/session-store.d.ts +65 -0
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +108 -7
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/split-brain-import.d.ts.map +1 -1
- package/dist/store/split-brain-import.js +2 -0
- package/dist/store/split-brain-import.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +252 -47
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite-native.d.ts.map +1 -1
- package/dist/store/sqlite-native.js +1 -0
- package/dist/store/sqlite-native.js.map +1 -1
- package/dist/store/sqlite.d.ts +15 -3
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +57 -20
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/store-write-guard.d.ts +9 -3
- package/dist/store/store-write-guard.d.ts.map +1 -1
- package/dist/store/store-write-guard.js +25 -4
- package/dist/store/store-write-guard.js.map +1 -1
- package/dist/store/table-classification.d.ts +1 -1
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +34 -8
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/task-claim.d.ts +144 -0
- package/dist/store/task-claim.d.ts.map +1 -0
- package/dist/store/task-claim.js +195 -0
- package/dist/store/task-claim.js.map +1 -0
- package/dist/store/task-version.d.ts +43 -5
- package/dist/store/task-version.d.ts.map +1 -1
- package/dist/store/task-version.js +113 -17
- package/dist/store/task-version.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +2 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +1 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.js +1 -1
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +339 -22
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +1323 -48
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +8 -3
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +10 -4
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +161 -1
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/with-retry.d.ts +36 -0
- package/dist/store/with-retry.d.ts.map +1 -1
- package/dist/store/with-retry.js +51 -0
- package/dist/store/with-retry.js.map +1 -1
- package/dist/store/worktree-build-guard.d.ts +200 -0
- package/dist/store/worktree-build-guard.d.ts.map +1 -0
- package/dist/store/worktree-build-guard.js +497 -0
- package/dist/store/worktree-build-guard.js.map +1 -0
- package/dist/store/worktree-isolation-guard.d.ts +138 -0
- package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
- package/dist/store/worktree-isolation-guard.js +189 -2
- package/dist/store/worktree-isolation-guard.js.map +1 -1
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +2 -0
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/system/backup.d.ts +13 -2
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +11 -3
- package/dist/system/backup.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +3 -1
- package/dist/system/health.js.map +1 -1
- package/dist/system/inject-generate.d.ts.map +1 -1
- package/dist/system/inject-generate.js +23 -10
- package/dist/system/inject-generate.js.map +1 -1
- package/dist/system/project-health.d.ts +8 -0
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +13 -5
- package/dist/system/project-health.js.map +1 -1
- package/dist/task-tools/index.d.ts +4 -2
- package/dist/task-tools/index.d.ts.map +1 -1
- package/dist/task-tools/index.js +3 -2
- package/dist/task-tools/index.js.map +1 -1
- package/dist/task-tools/score-task-priority.d.ts +131 -18
- package/dist/task-tools/score-task-priority.d.ts.map +1 -1
- package/dist/task-tools/score-task-priority.js +243 -80
- package/dist/task-tools/score-task-priority.js.map +1 -1
- package/dist/task-work/claims.d.ts +215 -0
- package/dist/task-work/claims.d.ts.map +1 -0
- package/dist/task-work/claims.js +272 -0
- package/dist/task-work/claims.js.map +1 -0
- package/dist/task-work/index.d.ts +47 -3
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +74 -41
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +3 -2
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +5 -1
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +21 -3
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/analyze.d.ts +29 -1
- package/dist/tasks/analyze.d.ts.map +1 -1
- package/dist/tasks/analyze.js +47 -37
- package/dist/tasks/analyze.js.map +1 -1
- package/dist/tasks/backfill-child-projections.d.ts.map +1 -1
- package/dist/tasks/backfill-child-projections.js +4 -1
- package/dist/tasks/backfill-child-projections.js.map +1 -1
- package/dist/tasks/change-set.d.ts +5 -0
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +75 -6
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/command-line.d.ts +54 -0
- package/dist/tasks/command-line.d.ts.map +1 -0
- package/dist/tasks/command-line.js +151 -0
- package/dist/tasks/command-line.js.map +1 -0
- package/dist/tasks/complete.d.ts +16 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +27 -7
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/component-pr.d.ts +162 -1
- package/dist/tasks/component-pr.d.ts.map +1 -1
- package/dist/tasks/component-pr.js +639 -53
- package/dist/tasks/component-pr.js.map +1 -1
- package/dist/tasks/delete.d.ts.map +1 -1
- package/dist/tasks/delete.js +20 -0
- package/dist/tasks/delete.js.map +1 -1
- package/dist/tasks/done-record.d.ts +14 -1
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +37 -0
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/duplicate-detector.d.ts +23 -4
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +14 -5
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/tasks/engine-wrap-ops.d.ts +48 -10
- package/dist/tasks/engine-wrap-ops.d.ts.map +1 -1
- package/dist/tasks/engine-wrap-ops.js +78 -10
- package/dist/tasks/engine-wrap-ops.js.map +1 -1
- package/dist/tasks/engine-wrap.d.ts +1 -1
- package/dist/tasks/engine-wrap.d.ts.map +1 -1
- package/dist/tasks/engine-wrap.js +1 -1
- package/dist/tasks/engine-wrap.js.map +1 -1
- package/dist/tasks/evidence.d.ts +2 -0
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +30 -4
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +48 -12
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/graph-ops.d.ts +9 -2
- package/dist/tasks/graph-ops.d.ts.map +1 -1
- package/dist/tasks/graph-ops.js +24 -32
- package/dist/tasks/graph-ops.js.map +1 -1
- package/dist/tasks/index.d.ts +1 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +1 -1
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/ops.d.ts +1 -0
- package/dist/tasks/ops.d.ts.map +1 -1
- package/dist/tasks/plan.d.ts.map +1 -1
- package/dist/tasks/plan.js +16 -60
- package/dist/tasks/plan.js.map +1 -1
- package/dist/tasks/ranking-audit.d.ts +122 -0
- package/dist/tasks/ranking-audit.d.ts.map +1 -0
- package/dist/tasks/ranking-audit.js +193 -0
- package/dist/tasks/ranking-audit.js.map +1 -0
- package/dist/tasks/task-analyze.d.ts.map +1 -1
- package/dist/tasks/task-analyze.js +19 -32
- package/dist/tasks/task-analyze.js.map +1 -1
- package/dist/tasks/task-context.d.ts.map +1 -1
- package/dist/tasks/task-context.js +13 -0
- package/dist/tasks/task-context.js.map +1 -1
- package/dist/tasks/task-import.d.ts.map +1 -1
- package/dist/tasks/task-import.js +21 -12
- package/dist/tasks/task-import.js.map +1 -1
- package/dist/tasks/task-next.d.ts +67 -2
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +99 -102
- package/dist/tasks/task-next.js.map +1 -1
- package/dist/tasks/task-ops.d.ts +1 -1
- package/dist/tasks/task-ops.d.ts.map +1 -1
- package/dist/tasks/task-ops.js +1 -1
- package/dist/tasks/task-ops.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +7 -1
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +24 -10
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/update.d.ts +8 -2
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +35 -6
- package/dist/tasks/update.js.map +1 -1
- package/dist/telemetry/sqlite.d.ts.map +1 -1
- package/dist/telemetry/sqlite.js +2 -0
- package/dist/telemetry/sqlite.js.map +1 -1
- package/dist/upgrade.d.ts +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +48 -9
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +20 -6
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +53 -10
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/validate-ops.d.ts.map +1 -1
- package/dist/validation/validate-ops.js +2 -3
- package/dist/validation/validate-ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260929010000_t12512-registry-probed-opened/migration.sql +35 -0
- package/migrations/drizzle-cleo-global/20260929020000_t12721-git-state-head-committed-at/migration.sql +25 -0
- package/migrations/drizzle-cleo-project/20260929000000_t12535-docs-attachments-union-shape/migration.sql +21 -0
- package/migrations/drizzle-cleo-project/20260929120000_t12502-task-claim-leases/migration.sql +77 -0
- package/migrations/drizzle-cleo-project/20260929130000_t12736-claim-lease-iso-repair/migration.sql +37 -0
- package/package.json +24 -14
- package/schemas/config.schema.json +13 -0
- package/schemas/project-info.schema.json +10 -4
- package/templates/CLEO-INJECTION.md +1 -1
- package/templates/CLEO-REFERENCE.md +7 -3
- package/templates/cleo-gitignore +11 -0
- package/templates/workflows/release-prepare.yml.tmpl +156 -10
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
* nextAction, …). Historically it lived under ONE global meta key
|
|
6
6
|
* (`focus_state`) shared by every agent — so two concurrent agents writing
|
|
7
7
|
* their current task clobbered each other. This module keys it per resolved
|
|
8
|
-
* session id (`focus_state:<sessionId>`)
|
|
9
|
-
*
|
|
8
|
+
* session id (`focus_state:<sessionId>`). The legacy global key remains the
|
|
9
|
+
* focus of an UNBOUND caller only (T12501).
|
|
10
10
|
*
|
|
11
11
|
* Single source of truth: every read/write callsite across engine-ops,
|
|
12
12
|
* briefing, drift-watchdog, session-drift, session-switch, and orchestrate/pivot
|
|
13
|
-
* routes through {@link readFocusState} / {@link writeFocusState}
|
|
14
|
-
*
|
|
13
|
+
* routes through {@link readFocusState} / {@link writeFocusState}, and every
|
|
14
|
+
* caller picks its session through {@link resolveFocusSessionId}, so the
|
|
15
|
+
* keying is never duplicated (T12501).
|
|
15
16
|
*
|
|
16
17
|
* @task T11345
|
|
17
18
|
* @epic T11284
|
|
@@ -20,10 +21,17 @@ import type { TaskWorkState } from '@cleocode/contracts';
|
|
|
20
21
|
/**
|
|
21
22
|
* The legacy global focus_state meta key, shared by all agents before T11345.
|
|
22
23
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
24
|
+
* UNBOUND CALLERS ONLY (T12501): it is the focus of a caller that is bound to
|
|
25
|
+
* no session — {@link resolveFocusSessionId} returned `null`. A caller bound
|
|
26
|
+
* to a session never reads or writes it: its focus lives only under
|
|
27
|
+
* `focus_state:<sessionId>`. The exceptions only ever CLEAR its pointer: a
|
|
28
|
+
* bound session with no key yet adopts a live legacy pointer once on upgrade
|
|
29
|
+
* ({@link readFocusState}), a bound `cleo stop` releases it
|
|
30
|
+
* ({@link releaseLegacyPointer}), and {@link clearFocusForFinishedTask} clears
|
|
31
|
+
* a pointer to a finished task wherever it is.
|
|
25
32
|
*
|
|
26
33
|
* @task T11345
|
|
34
|
+
* @task T12501
|
|
27
35
|
*/
|
|
28
36
|
export declare const LEGACY_FOCUS_STATE_KEY: "focus_state";
|
|
29
37
|
/**
|
|
@@ -47,11 +55,40 @@ export interface FocusStateMetaAccessor {
|
|
|
47
55
|
}) => Promise<T>): Promise<T>;
|
|
48
56
|
}
|
|
49
57
|
/**
|
|
50
|
-
*
|
|
58
|
+
* THE focus-key rule (T12501): the session whose focus key the CALLER reads
|
|
59
|
+
* and writes. Every focus reader and writer — start, stop, pivot, complete's
|
|
60
|
+
* clear, `cleo current`, session status, briefing, inject, bootstrap, stats,
|
|
61
|
+
* validation, attention and orchestrator startup — resolves through this one
|
|
62
|
+
* function, so a write and the read that follows it can never land on
|
|
63
|
+
* different keys.
|
|
64
|
+
*
|
|
65
|
+
* It is the mutation resolver (`resolveBoundSessionId` in `store/session-store.ts`): the daemon
|
|
66
|
+
* connection handle, then an env-named session whose row exists, then the
|
|
67
|
+
* session this terminal started or resumed. It never guesses the newest
|
|
68
|
+
* active row — from an unbound terminal that is another agent's session, and
|
|
69
|
+
* its focus is not this caller's.
|
|
70
|
+
*
|
|
71
|
+
* `null` means the caller is bound to no session (or the session store
|
|
72
|
+
* cannot be opened); {@link focusStateKey} then maps it to the legacy global
|
|
73
|
+
* key (unbound callers only).
|
|
74
|
+
*
|
|
75
|
+
* @param cwd - Project root for session resolution.
|
|
76
|
+
* @returns The bound session id, or `null` when the caller is unbound.
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* const focus = await readLiveFocus(acc, await resolveFocusSessionId(projectRoot));
|
|
80
|
+
* ```
|
|
81
|
+
* @task T12501
|
|
82
|
+
*/
|
|
83
|
+
export declare function resolveFocusSessionId(cwd?: string): Promise<string | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Compute the focus_state meta key for a session id from
|
|
86
|
+
* {@link resolveFocusSessionId} (or an explicitly named session).
|
|
51
87
|
*
|
|
52
88
|
* - A non-empty session id → the per-session key `focus_state:<sessionId>`.
|
|
53
|
-
* - `null` / `undefined` (
|
|
54
|
-
*
|
|
89
|
+
* - `null` / `undefined` (the caller is bound to no session) → the legacy
|
|
90
|
+
* global key, {@link LEGACY_FOCUS_STATE_KEY}. Only an unbound caller lands
|
|
91
|
+
* here (T12501).
|
|
55
92
|
*
|
|
56
93
|
* @param sessionId - Resolved session id, or `null` when none.
|
|
57
94
|
* @returns The meta key to read/write.
|
|
@@ -59,31 +96,69 @@ export interface FocusStateMetaAccessor {
|
|
|
59
96
|
*/
|
|
60
97
|
export declare function focusStateKey(sessionId: string | null | undefined): string;
|
|
61
98
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* the
|
|
65
|
-
*
|
|
99
|
+
* The focus session id for a caller already resolved by the read resolver
|
|
100
|
+
* (`resolveSessionForRead`): its own session when bound, `null` when the row
|
|
101
|
+
* is only the newest active one. Equal to {@link resolveFocusSessionId} — the
|
|
102
|
+
* read resolver tries the same bound tiers first — so a surface that needs
|
|
103
|
+
* both the session row and the focus key resolves once (T12501).
|
|
104
|
+
*
|
|
105
|
+
* @param read - The read resolution: the session and its `unbound` label.
|
|
106
|
+
* @returns The bound session id, or `null` for an unbound caller.
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const read = await resolveSessionForRead(root);
|
|
110
|
+
* const focus = await readLiveFocus(acc, focusSessionIdFromRead(read));
|
|
111
|
+
* ```
|
|
112
|
+
* @task T12501
|
|
113
|
+
*/
|
|
114
|
+
export declare function focusSessionIdFromRead(read: {
|
|
115
|
+
readonly session: {
|
|
116
|
+
readonly id: string;
|
|
117
|
+
} | null;
|
|
118
|
+
readonly unbound: boolean;
|
|
119
|
+
}): string | null;
|
|
120
|
+
/**
|
|
121
|
+
* Read the RAW focus_state blob for a session id — for read-modify-write
|
|
122
|
+
* only. Anything that reports or acts on the current task reads
|
|
123
|
+
* {@link readLiveFocus}, which never returns a finished task (T12684).
|
|
66
124
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
125
|
+
* Reads {@link focusStateKey}. The legacy global key is an unbound caller's
|
|
126
|
+
* focus, never read as a bound session's — except once, on upgrade: when the
|
|
127
|
+
* session's key is ABSENT (not merely `currentTask: null`) and the legacy key
|
|
128
|
+
* holds a live pointer, the session adopts it and the legacy pointer is
|
|
129
|
+
* cleared, so no second session can adopt it too (T12501).
|
|
71
130
|
*
|
|
72
131
|
* @param accessor - Metadata accessor.
|
|
73
|
-
* @param sessionId -
|
|
74
|
-
*
|
|
132
|
+
* @param sessionId - Session id from {@link resolveFocusSessionId}, or `null`
|
|
133
|
+
* for an unbound caller (the legacy key).
|
|
134
|
+
* @returns The focus_state blob, or `null` when there is none.
|
|
75
135
|
* @task T11345
|
|
136
|
+
* @task T12501
|
|
76
137
|
*/
|
|
77
138
|
export declare function readFocusState(accessor: FocusStateMetaAccessor, sessionId: string | null | undefined): Promise<TaskWorkState | null>;
|
|
78
139
|
/**
|
|
79
|
-
*
|
|
140
|
+
* Clear the legacy global pointer when it names `taskId` — for a BOUND
|
|
141
|
+
* caller's `cleo stop`, so a pre-upgrade pointer to the task it stopped is not
|
|
142
|
+
* left behind for unbound callers (T12501). Compare-and-set on the pointer.
|
|
143
|
+
*
|
|
144
|
+
* @param accessor - Metadata accessor.
|
|
145
|
+
* @param taskId - The task being stopped.
|
|
146
|
+
* @returns `true` when the legacy pointer was cleared.
|
|
147
|
+
* @task T12501
|
|
148
|
+
*/
|
|
149
|
+
export declare function releaseLegacyPointer(accessor: FocusStateMetaAccessor, taskId: string): Promise<boolean>;
|
|
150
|
+
/**
|
|
151
|
+
* Write the focus_state blob for a session id.
|
|
80
152
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
153
|
+
* A bound session writes only its own key, so concurrent sessions never
|
|
154
|
+
* clobber each other; only an unbound caller (`sessionId` null) writes the
|
|
155
|
+
* legacy key. (A bound session touches the legacy key only to clear a pointer:
|
|
156
|
+
* adoption on upgrade, {@link releaseLegacyPointer} and
|
|
157
|
+
* {@link clearFocusForFinishedTask}.) (T12501)
|
|
84
158
|
*
|
|
85
159
|
* @param accessor - Metadata accessor.
|
|
86
|
-
* @param sessionId -
|
|
160
|
+
* @param sessionId - Session id from {@link resolveFocusSessionId}, or `null`
|
|
161
|
+
* for an unbound caller (the legacy key).
|
|
87
162
|
* @param value - The focus_state blob to persist.
|
|
88
163
|
* @task T11345
|
|
89
164
|
*/
|
|
@@ -98,7 +173,8 @@ export declare function writeFocusState(accessor: FocusStateMetaAccessor, sessio
|
|
|
98
173
|
*
|
|
99
174
|
* @param accessor - Metadata accessor.
|
|
100
175
|
* @param sessionIds - Session ids whose scoped key may hold the pointer
|
|
101
|
-
* (the
|
|
176
|
+
* (the caller's {@link resolveFocusSessionId}); duplicates and nulls are
|
|
177
|
+
* ignored.
|
|
102
178
|
* @param taskId - The completed task.
|
|
103
179
|
* @returns The meta keys that were cleared (empty when none pointed at it).
|
|
104
180
|
* @task T12660
|
|
@@ -160,9 +236,15 @@ export interface LiveFocus {
|
|
|
160
236
|
* read reports it stale.
|
|
161
237
|
*
|
|
162
238
|
* @param accessor - Metadata accessor with a live task lookup.
|
|
163
|
-
* @param sessionId -
|
|
239
|
+
* @param sessionId - Session id from {@link resolveFocusSessionId}, or `null`
|
|
240
|
+
* for an unbound caller (the legacy key).
|
|
241
|
+
* @param known - Tasks the caller already loaded (e.g. the briefing's task
|
|
242
|
+
* map): a pointer found there skips the extra lookup (T12698). A pointer
|
|
243
|
+
* absent from it (archived tasks are not listed) is still looked up.
|
|
164
244
|
* @returns The blob, the live current task, and the stale pointer if any.
|
|
165
245
|
* @task T12684
|
|
166
246
|
*/
|
|
167
|
-
export declare function readLiveFocus(accessor: LiveFocusAccessor, sessionId: string | null | undefined
|
|
247
|
+
export declare function readLiveFocus(accessor: LiveFocusAccessor, sessionId: string | null | undefined, known?: ReadonlyMap<string, {
|
|
248
|
+
status: string;
|
|
249
|
+
}>): Promise<LiveFocus>;
|
|
168
250
|
//# sourceMappingURL=focus-state-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-state-store.d.ts","sourceRoot":"","sources":["../../src/sessions/focus-state-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"focus-state-store.d.ts","sourceRoot":"","sources":["../../src/sessions/focus-state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
* nextAction, …). Historically it lived under ONE global meta key
|
|
6
6
|
* (`focus_state`) shared by every agent — so two concurrent agents writing
|
|
7
7
|
* their current task clobbered each other. This module keys it per resolved
|
|
8
|
-
* session id (`focus_state:<sessionId>`)
|
|
9
|
-
*
|
|
8
|
+
* session id (`focus_state:<sessionId>`). The legacy global key remains the
|
|
9
|
+
* focus of an UNBOUND caller only (T12501).
|
|
10
10
|
*
|
|
11
11
|
* Single source of truth: every read/write callsite across engine-ops,
|
|
12
12
|
* briefing, drift-watchdog, session-drift, session-switch, and orchestrate/pivot
|
|
13
|
-
* routes through {@link readFocusState} / {@link writeFocusState}
|
|
14
|
-
*
|
|
13
|
+
* routes through {@link readFocusState} / {@link writeFocusState}, and every
|
|
14
|
+
* caller picks its session through {@link resolveFocusSessionId}, so the
|
|
15
|
+
* keying is never duplicated (T12501).
|
|
15
16
|
*
|
|
16
17
|
* @task T11345
|
|
17
18
|
* @epic T11284
|
|
@@ -20,18 +21,65 @@ import { TERMINAL_TASK_STATUSES } from '@cleocode/contracts';
|
|
|
20
21
|
/**
|
|
21
22
|
* The legacy global focus_state meta key, shared by all agents before T11345.
|
|
22
23
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
24
|
+
* UNBOUND CALLERS ONLY (T12501): it is the focus of a caller that is bound to
|
|
25
|
+
* no session — {@link resolveFocusSessionId} returned `null`. A caller bound
|
|
26
|
+
* to a session never reads or writes it: its focus lives only under
|
|
27
|
+
* `focus_state:<sessionId>`. The exceptions only ever CLEAR its pointer: a
|
|
28
|
+
* bound session with no key yet adopts a live legacy pointer once on upgrade
|
|
29
|
+
* ({@link readFocusState}), a bound `cleo stop` releases it
|
|
30
|
+
* ({@link releaseLegacyPointer}), and {@link clearFocusForFinishedTask} clears
|
|
31
|
+
* a pointer to a finished task wherever it is.
|
|
25
32
|
*
|
|
26
33
|
* @task T11345
|
|
34
|
+
* @task T12501
|
|
27
35
|
*/
|
|
28
36
|
export const LEGACY_FOCUS_STATE_KEY = 'focus_state';
|
|
29
37
|
/**
|
|
30
|
-
*
|
|
38
|
+
* THE focus-key rule (T12501): the session whose focus key the CALLER reads
|
|
39
|
+
* and writes. Every focus reader and writer — start, stop, pivot, complete's
|
|
40
|
+
* clear, `cleo current`, session status, briefing, inject, bootstrap, stats,
|
|
41
|
+
* validation, attention and orchestrator startup — resolves through this one
|
|
42
|
+
* function, so a write and the read that follows it can never land on
|
|
43
|
+
* different keys.
|
|
44
|
+
*
|
|
45
|
+
* It is the mutation resolver (`resolveBoundSessionId` in `store/session-store.ts`): the daemon
|
|
46
|
+
* connection handle, then an env-named session whose row exists, then the
|
|
47
|
+
* session this terminal started or resumed. It never guesses the newest
|
|
48
|
+
* active row — from an unbound terminal that is another agent's session, and
|
|
49
|
+
* its focus is not this caller's.
|
|
50
|
+
*
|
|
51
|
+
* `null` means the caller is bound to no session (or the session store
|
|
52
|
+
* cannot be opened); {@link focusStateKey} then maps it to the legacy global
|
|
53
|
+
* key (unbound callers only).
|
|
54
|
+
*
|
|
55
|
+
* @param cwd - Project root for session resolution.
|
|
56
|
+
* @returns The bound session id, or `null` when the caller is unbound.
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* const focus = await readLiveFocus(acc, await resolveFocusSessionId(projectRoot));
|
|
60
|
+
* ```
|
|
61
|
+
* @task T12501
|
|
62
|
+
*/
|
|
63
|
+
export async function resolveFocusSessionId(cwd) {
|
|
64
|
+
// Dynamic: the store module is heavy and this module is imported widely.
|
|
65
|
+
const { resolveBoundSessionId } = await import('../store/session-store.js');
|
|
66
|
+
try {
|
|
67
|
+
return await resolveBoundSessionId(cwd);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// No readable session store means no session can be bound: the caller is
|
|
71
|
+
// unbound, exactly as before any session existed.
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compute the focus_state meta key for a session id from
|
|
77
|
+
* {@link resolveFocusSessionId} (or an explicitly named session).
|
|
31
78
|
*
|
|
32
79
|
* - A non-empty session id → the per-session key `focus_state:<sessionId>`.
|
|
33
|
-
* - `null` / `undefined` (
|
|
34
|
-
*
|
|
80
|
+
* - `null` / `undefined` (the caller is bound to no session) → the legacy
|
|
81
|
+
* global key, {@link LEGACY_FOCUS_STATE_KEY}. Only an unbound caller lands
|
|
82
|
+
* here (T12501).
|
|
35
83
|
*
|
|
36
84
|
* @param sessionId - Resolved session id, or `null` when none.
|
|
37
85
|
* @returns The meta key to read/write.
|
|
@@ -41,43 +89,122 @@ export function focusStateKey(sessionId) {
|
|
|
41
89
|
return sessionId ? `${LEGACY_FOCUS_STATE_KEY}:${sessionId}` : LEGACY_FOCUS_STATE_KEY;
|
|
42
90
|
}
|
|
43
91
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* the
|
|
47
|
-
*
|
|
92
|
+
* The focus session id for a caller already resolved by the read resolver
|
|
93
|
+
* (`resolveSessionForRead`): its own session when bound, `null` when the row
|
|
94
|
+
* is only the newest active one. Equal to {@link resolveFocusSessionId} — the
|
|
95
|
+
* read resolver tries the same bound tiers first — so a surface that needs
|
|
96
|
+
* both the session row and the focus key resolves once (T12501).
|
|
97
|
+
*
|
|
98
|
+
* @param read - The read resolution: the session and its `unbound` label.
|
|
99
|
+
* @returns The bound session id, or `null` for an unbound caller.
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const read = await resolveSessionForRead(root);
|
|
103
|
+
* const focus = await readLiveFocus(acc, focusSessionIdFromRead(read));
|
|
104
|
+
* ```
|
|
105
|
+
* @task T12501
|
|
106
|
+
*/
|
|
107
|
+
export function focusSessionIdFromRead(read) {
|
|
108
|
+
return read.unbound ? null : (read.session?.id ?? null);
|
|
109
|
+
}
|
|
110
|
+
/** Whether the accessor can look a task up (a {@link LiveFocusAccessor}). */
|
|
111
|
+
function hasTaskLookup(accessor) {
|
|
112
|
+
return 'loadSingleTask' in accessor;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Upgrade path (T12501): a bound session with no focus key yet adopts the
|
|
116
|
+
* pre-upgrade focus held in the legacy global key — once.
|
|
48
117
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
118
|
+
* Only a live pointer is adopted (a done, cancelled, archived or missing task
|
|
119
|
+
* is not). The blob is copied to the session key and the legacy pointer is
|
|
120
|
+
* cleared with a compare-and-set on that pointer, inside one transaction when
|
|
121
|
+
* the store offers one, so exactly one bound session can adopt it.
|
|
122
|
+
*
|
|
123
|
+
* @returns The adopted (or concurrently written) blob, or `null`.
|
|
124
|
+
*/
|
|
125
|
+
async function adoptLegacyFocus(accessor, sessionId) {
|
|
126
|
+
if (!hasTaskLookup(accessor))
|
|
127
|
+
return null;
|
|
128
|
+
const legacy = await accessor.getMetaValue(LEGACY_FOCUS_STATE_KEY);
|
|
129
|
+
const pointer = legacy?.currentTask ?? null;
|
|
130
|
+
if (!pointer)
|
|
131
|
+
return null;
|
|
132
|
+
if (staleFocusPointer(pointer, (await accessor.loadSingleTask(pointer))?.status))
|
|
133
|
+
return null;
|
|
134
|
+
const key = focusStateKey(sessionId);
|
|
135
|
+
const adopt = async (set) => {
|
|
136
|
+
const own = await accessor.getMetaValue(key);
|
|
137
|
+
if (own)
|
|
138
|
+
return own; // written meanwhile — the session's own focus wins
|
|
139
|
+
const now = await accessor.getMetaValue(LEGACY_FOCUS_STATE_KEY);
|
|
140
|
+
if (!now || now.currentTask !== pointer)
|
|
141
|
+
return null; // another session adopted it
|
|
142
|
+
await set(key, now);
|
|
143
|
+
await set(LEGACY_FOCUS_STATE_KEY, { ...now, currentTask: null });
|
|
144
|
+
return now;
|
|
145
|
+
};
|
|
146
|
+
return accessor.transaction
|
|
147
|
+
? accessor.transaction((tx) => adopt((k, v) => tx.setMetaValue(k, v)))
|
|
148
|
+
: adopt((k, v) => accessor.setMetaValue(k, v));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Read the RAW focus_state blob for a session id — for read-modify-write
|
|
152
|
+
* only. Anything that reports or acts on the current task reads
|
|
153
|
+
* {@link readLiveFocus}, which never returns a finished task (T12684).
|
|
154
|
+
*
|
|
155
|
+
* Reads {@link focusStateKey}. The legacy global key is an unbound caller's
|
|
156
|
+
* focus, never read as a bound session's — except once, on upgrade: when the
|
|
157
|
+
* session's key is ABSENT (not merely `currentTask: null`) and the legacy key
|
|
158
|
+
* holds a live pointer, the session adopts it and the legacy pointer is
|
|
159
|
+
* cleared, so no second session can adopt it too (T12501).
|
|
53
160
|
*
|
|
54
161
|
* @param accessor - Metadata accessor.
|
|
55
|
-
* @param sessionId -
|
|
56
|
-
*
|
|
162
|
+
* @param sessionId - Session id from {@link resolveFocusSessionId}, or `null`
|
|
163
|
+
* for an unbound caller (the legacy key).
|
|
164
|
+
* @returns The focus_state blob, or `null` when there is none.
|
|
57
165
|
* @task T11345
|
|
166
|
+
* @task T12501
|
|
58
167
|
*/
|
|
59
168
|
export async function readFocusState(accessor, sessionId) {
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
169
|
+
const own = await accessor.getMetaValue(focusStateKey(sessionId));
|
|
170
|
+
if (own || !sessionId)
|
|
171
|
+
return own;
|
|
172
|
+
return adoptLegacyFocus(accessor, sessionId);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Clear the legacy global pointer when it names `taskId` — for a BOUND
|
|
176
|
+
* caller's `cleo stop`, so a pre-upgrade pointer to the task it stopped is not
|
|
177
|
+
* left behind for unbound callers (T12501). Compare-and-set on the pointer.
|
|
178
|
+
*
|
|
179
|
+
* @param accessor - Metadata accessor.
|
|
180
|
+
* @param taskId - The task being stopped.
|
|
181
|
+
* @returns `true` when the legacy pointer was cleared.
|
|
182
|
+
* @task T12501
|
|
183
|
+
*/
|
|
184
|
+
export async function releaseLegacyPointer(accessor, taskId) {
|
|
185
|
+
const clear = async (set) => {
|
|
186
|
+
const legacy = await accessor.getMetaValue(LEGACY_FOCUS_STATE_KEY);
|
|
187
|
+
if (legacy?.currentTask !== taskId)
|
|
188
|
+
return false;
|
|
189
|
+
await set(LEGACY_FOCUS_STATE_KEY, { ...legacy, currentTask: null });
|
|
190
|
+
return true;
|
|
191
|
+
};
|
|
192
|
+
return accessor.transaction
|
|
193
|
+
? accessor.transaction((tx) => clear((k, v) => tx.setMetaValue(k, v)))
|
|
194
|
+
: clear((k, v) => accessor.setMetaValue(k, v));
|
|
71
195
|
}
|
|
72
196
|
/**
|
|
73
|
-
* Write the focus_state blob for a
|
|
197
|
+
* Write the focus_state blob for a session id.
|
|
74
198
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
199
|
+
* A bound session writes only its own key, so concurrent sessions never
|
|
200
|
+
* clobber each other; only an unbound caller (`sessionId` null) writes the
|
|
201
|
+
* legacy key. (A bound session touches the legacy key only to clear a pointer:
|
|
202
|
+
* adoption on upgrade, {@link releaseLegacyPointer} and
|
|
203
|
+
* {@link clearFocusForFinishedTask}.) (T12501)
|
|
78
204
|
*
|
|
79
205
|
* @param accessor - Metadata accessor.
|
|
80
|
-
* @param sessionId -
|
|
206
|
+
* @param sessionId - Session id from {@link resolveFocusSessionId}, or `null`
|
|
207
|
+
* for an unbound caller (the legacy key).
|
|
81
208
|
* @param value - The focus_state blob to persist.
|
|
82
209
|
* @task T11345
|
|
83
210
|
*/
|
|
@@ -94,7 +221,8 @@ export async function writeFocusState(accessor, sessionId, value) {
|
|
|
94
221
|
*
|
|
95
222
|
* @param accessor - Metadata accessor.
|
|
96
223
|
* @param sessionIds - Session ids whose scoped key may hold the pointer
|
|
97
|
-
* (the
|
|
224
|
+
* (the caller's {@link resolveFocusSessionId}); duplicates and nulls are
|
|
225
|
+
* ignored.
|
|
98
226
|
* @param taskId - The completed task.
|
|
99
227
|
* @returns The meta keys that were cleared (empty when none pointed at it).
|
|
100
228
|
* @task T12660
|
|
@@ -164,16 +292,20 @@ export function staleFocusWarning(stale, next) {
|
|
|
164
292
|
* read reports it stale.
|
|
165
293
|
*
|
|
166
294
|
* @param accessor - Metadata accessor with a live task lookup.
|
|
167
|
-
* @param sessionId -
|
|
295
|
+
* @param sessionId - Session id from {@link resolveFocusSessionId}, or `null`
|
|
296
|
+
* for an unbound caller (the legacy key).
|
|
297
|
+
* @param known - Tasks the caller already loaded (e.g. the briefing's task
|
|
298
|
+
* map): a pointer found there skips the extra lookup (T12698). A pointer
|
|
299
|
+
* absent from it (archived tasks are not listed) is still looked up.
|
|
168
300
|
* @returns The blob, the live current task, and the stale pointer if any.
|
|
169
301
|
* @task T12684
|
|
170
302
|
*/
|
|
171
|
-
export async function readLiveFocus(accessor, sessionId) {
|
|
303
|
+
export async function readLiveFocus(accessor, sessionId, known) {
|
|
172
304
|
const state = await readFocusState(accessor, sessionId);
|
|
173
305
|
const pointer = state?.currentTask ?? null;
|
|
174
306
|
if (!pointer)
|
|
175
307
|
return { state, currentTask: null, staleFocus: null };
|
|
176
|
-
const staleFocus = staleFocusPointer(pointer, (await accessor.loadSingleTask(pointer))?.status);
|
|
308
|
+
const staleFocus = staleFocusPointer(pointer, (known?.get(pointer) ?? (await accessor.loadSingleTask(pointer)))?.status);
|
|
177
309
|
return { state, currentTask: staleFocus ? null : pointer, staleFocus };
|
|
178
310
|
}
|
|
179
311
|
//# sourceMappingURL=focus-state-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-state-store.js","sourceRoot":"","sources":["../../src/sessions/focus-state-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"focus-state-store.js","sourceRoot":"","sources":["../../src/sessions/focus-state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/sessions/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EACV,iBAAiB,
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/sessions/handoff.ts"],"names":[],"mappings":"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"}
|
package/dist/sessions/handoff.js
CHANGED
|
@@ -19,6 +19,8 @@ import { CleoError } from '../errors.js';
|
|
|
19
19
|
import { assessKnowledgeCoverage } from '../nexus/knowledge.js';
|
|
20
20
|
import { getTaskAccessor } from '../store/data-accessor.js';
|
|
21
21
|
import { insertHandoffEntry } from '../store/session-store.js';
|
|
22
|
+
import { rankTasks } from '../task-tools/score-task-priority.js';
|
|
23
|
+
import { loadRankingContext } from '../tasks/task-next.js';
|
|
22
24
|
import { getDecisionLog } from './decisions.js';
|
|
23
25
|
const execFileAsync = promisify(execFile);
|
|
24
26
|
/**
|
|
@@ -45,7 +47,7 @@ export async function computeHandoff(projectRoot, options) {
|
|
|
45
47
|
tasksCompleted: session.tasksCompleted ?? [],
|
|
46
48
|
tasksCreated: session.tasksCreated ?? [],
|
|
47
49
|
decisionsRecorded: decisions.length,
|
|
48
|
-
nextSuggested: computeNextSuggested(session, tasks),
|
|
50
|
+
nextSuggested: computeNextSuggested(session, tasks, (await loadRankingContext(accessor, tasks)).ctx),
|
|
49
51
|
openBlockers: findOpenBlockers(tasks, session),
|
|
50
52
|
openBugs: findOpenBugs(tasks, session),
|
|
51
53
|
// GH #1277 — emitted unconditionally. `null` is a recorded answer; an
|
|
@@ -59,10 +61,10 @@ export async function computeHandoff(projectRoot, options) {
|
|
|
59
61
|
return handoff;
|
|
60
62
|
}
|
|
61
63
|
/**
|
|
62
|
-
* Compute top-3 next suggested tasks
|
|
63
|
-
*
|
|
64
|
+
* Compute top-3 next suggested tasks: uncompleted tasks within the session
|
|
65
|
+
* scope, in THE comparator's order (D11161, T12692).
|
|
64
66
|
*/
|
|
65
|
-
function computeNextSuggested(session, tasks) {
|
|
67
|
+
function computeNextSuggested(session, tasks, ranking) {
|
|
66
68
|
// Filter to tasks in scope
|
|
67
69
|
const scopeTaskIds = getScopeTaskIds(session, tasks);
|
|
68
70
|
// Get uncompleted tasks in scope
|
|
@@ -70,21 +72,10 @@ function computeNextSuggested(session, tasks) {
|
|
|
70
72
|
t.status !== 'done' &&
|
|
71
73
|
t.status !== 'archived' &&
|
|
72
74
|
t.status !== 'cancelled');
|
|
73
|
-
//
|
|
74
|
-
const
|
|
75
|
-
critical: 0,
|
|
76
|
-
high: 1,
|
|
77
|
-
medium: 2,
|
|
78
|
-
low: 3,
|
|
79
|
-
};
|
|
80
|
-
pendingTasks.sort((a, b) => {
|
|
81
|
-
const priorityDiff = (priorityOrder[a.priority ?? 'medium'] ?? 99) - (priorityOrder[b.priority ?? 'medium'] ?? 99);
|
|
82
|
-
if (priorityDiff !== 0)
|
|
83
|
-
return priorityDiff;
|
|
84
|
-
return (a.createdAt ?? '').localeCompare(b.createdAt ?? '');
|
|
85
|
-
});
|
|
75
|
+
// T12692: THE comparator (D11161) — band, severity, tiebreak, createdAt, id.
|
|
76
|
+
const ranked = rankTasks(pendingTasks, ranking).map((r) => r.task);
|
|
86
77
|
// Take top 3
|
|
87
|
-
return
|
|
78
|
+
return ranked.slice(0, 3).map((t) => t.id);
|
|
88
79
|
}
|
|
89
80
|
/**
|
|
90
81
|
* Find tasks with blockers in the session scope.
|