@cleocode/core 2026.10.8 → 2026.10.9
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/build-provenance.json +2 -2
- package/dist/cloud/auto-sync-command-entry.d.ts +13 -0
- package/dist/cloud/auto-sync-command-entry.d.ts.map +1 -0
- package/dist/cloud/auto-sync-command-entry.js +18 -0
- package/dist/cloud/auto-sync-command-entry.js.map +1 -0
- package/dist/cloud/auto-sync-command.d.ts +64 -0
- package/dist/cloud/auto-sync-command.d.ts.map +1 -0
- package/dist/cloud/auto-sync-command.js +109 -0
- package/dist/cloud/auto-sync-command.js.map +1 -0
- package/dist/cloud/auto-sync.d.ts +111 -0
- package/dist/cloud/auto-sync.d.ts.map +1 -0
- package/dist/cloud/auto-sync.js +275 -0
- package/dist/cloud/auto-sync.js.map +1 -0
- package/dist/cloud/nexus-cloud-device-overview.d.ts +52 -0
- package/dist/cloud/nexus-cloud-device-overview.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-device-overview.js +105 -0
- package/dist/cloud/nexus-cloud-device-overview.js.map +1 -0
- package/dist/cloud/nexus-cloud-journal-activity.d.ts +56 -0
- package/dist/cloud/nexus-cloud-journal-activity.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-journal-activity.js +98 -0
- package/dist/cloud/nexus-cloud-journal-activity.js.map +1 -0
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-status.js +88 -5
- package/dist/cloud/nexus-cloud-status.js.map +1 -1
- package/dist/cloud/nexus-vault.d.ts +19 -5
- package/dist/cloud/nexus-vault.d.ts.map +1 -1
- package/dist/cloud/nexus-vault.js +376 -71
- package/dist/cloud/nexus-vault.js.map +1 -1
- package/dist/cloud/replica-rebind.d.ts +14 -0
- package/dist/cloud/replica-rebind.d.ts.map +1 -1
- package/dist/cloud/replica-rebind.js +20 -1
- package/dist/cloud/replica-rebind.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -1
- package/dist/docs/docs-ops.d.ts +4 -2
- package/dist/docs/docs-ops.d.ts.map +1 -1
- package/dist/docs/docs-ops.js +107 -15
- package/dist/docs/docs-ops.js.map +1 -1
- package/dist/doctor/system-health.d.ts +76 -2
- package/dist/doctor/system-health.d.ts.map +1 -1
- package/dist/doctor/system-health.js +264 -41
- package/dist/doctor/system-health.js.map +1 -1
- package/dist/hooks/project-runner.d.ts +10 -0
- package/dist/hooks/project-runner.d.ts.map +1 -0
- package/dist/hooks/project-runner.js +328 -0
- package/dist/hooks/project-runner.js.map +1 -0
- package/dist/hooks/project-state.d.ts +41 -0
- package/dist/hooks/project-state.d.ts.map +1 -0
- package/dist/hooks/project-state.js +331 -0
- package/dist/hooks/project-state.js.map +1 -0
- package/dist/hooks/release-gate.d.ts +61 -0
- package/dist/hooks/release-gate.d.ts.map +1 -0
- package/dist/hooks/release-gate.js +70 -0
- package/dist/hooks/release-gate.js.map +1 -0
- package/dist/nexus/analyze-orchestrator.d.ts +2 -0
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +1 -0
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/freshness.d.ts +67 -3
- package/dist/nexus/freshness.d.ts.map +1 -1
- package/dist/nexus/freshness.js +130 -9
- package/dist/nexus/freshness.js.map +1 -1
- package/dist/nexus/refresh-child.d.ts +14 -0
- package/dist/nexus/refresh-child.d.ts.map +1 -0
- package/dist/nexus/refresh-child.js +24 -0
- package/dist/nexus/refresh-child.js.map +1 -0
- package/dist/orchestrate/spawn-ops.d.ts +8 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +42 -12
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/spawn.d.ts +5 -0
- package/dist/orchestration/spawn.d.ts.map +1 -1
- package/dist/orchestration/spawn.js +4 -1
- package/dist/orchestration/spawn.js.map +1 -1
- package/dist/release/channel.d.ts.map +1 -1
- package/dist/release/channel.js +10 -0
- package/dist/release/channel.js.map +1 -1
- package/dist/release/github-pr.d.ts.map +1 -1
- package/dist/release/github-pr.js +1 -0
- package/dist/release/github-pr.js.map +1 -1
- package/dist/release/plan.d.ts +8 -3
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +72 -15
- package/dist/release/plan.js.map +1 -1
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +6 -15
- package/dist/release/reconcile.js.map +1 -1
- package/dist/sentient/daemon-entry.d.ts +6 -0
- package/dist/sentient/daemon-entry.d.ts.map +1 -1
- package/dist/sentient/daemon-entry.js +12 -0
- package/dist/sentient/daemon-entry.js.map +1 -1
- package/dist/sentient/worktree-dispatch.d.ts +7 -0
- package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
- package/dist/sentient/worktree-dispatch.js +37 -1
- package/dist/sentient/worktree-dispatch.js.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.d.ts +4 -1
- package/dist/sessions/session-end-snapshot-entry.d.ts.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.js +9 -1
- package/dist/sessions/session-end-snapshot-entry.js.map +1 -1
- package/dist/spawn/agent-identity.d.ts.map +1 -1
- package/dist/spawn/agent-identity.js +96 -1
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/spawn/branch-lock.d.ts +27 -8
- package/dist/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +57 -73
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/store/agent-resolver.d.ts +6 -0
- package/dist/store/agent-resolver.d.ts.map +1 -1
- package/dist/store/agent-resolver.js +2 -0
- package/dist/store/agent-resolver.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +20 -0
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +81 -8
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/bare-family.d.ts.map +1 -1
- package/dist/store/exodus/bare-family.js +4 -1
- package/dist/store/exodus/bare-family.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +2 -0
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +16 -4
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/reconcile.d.ts.map +1 -1
- package/dist/store/exodus/reconcile.js +2 -0
- package/dist/store/exodus/reconcile.js.map +1 -1
- package/dist/store/portable-bundle-import.d.ts +17 -0
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +46 -31
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +5 -0
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/row-identity-registry.d.ts +4 -3
- package/dist/store/row-identity-registry.d.ts.map +1 -1
- package/dist/store/row-identity-registry.js +37 -35
- package/dist/store/row-identity-registry.js.map +1 -1
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +6 -1
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/schema/cleo-global/agent-registry.d.ts +16 -0
- package/dist/store/schema/cleo-global/agent-registry.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/agent-registry.js +4 -1
- package/dist/store/schema/cleo-global/agent-registry.js.map +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts +126 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.js +41 -1
- package/dist/store/schema/cleo-project/provenance-orphans.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +40 -0
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +122 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sync/activity.d.ts +64 -0
- package/dist/store/sync/activity.d.ts.map +1 -0
- package/dist/store/sync/activity.js +220 -0
- package/dist/store/sync/activity.js.map +1 -0
- package/dist/store/sync/apply/applier.d.ts.map +1 -1
- package/dist/store/sync/apply/applier.js +58 -2
- package/dist/store/sync/apply/applier.js.map +1 -1
- package/dist/store/sync/apply/write-api.d.ts.map +1 -1
- package/dist/store/sync/apply/write-api.js +45 -3
- package/dist/store/sync/apply/write-api.js.map +1 -1
- package/dist/store/sync/capture.d.ts +6 -4
- package/dist/store/sync/capture.d.ts.map +1 -1
- package/dist/store/sync/capture.js +16 -4
- package/dist/store/sync/capture.js.map +1 -1
- package/dist/store/sync/collision-settle.d.ts +120 -0
- package/dist/store/sync/collision-settle.d.ts.map +1 -1
- package/dist/store/sync/collision-settle.js +342 -5
- package/dist/store/sync/collision-settle.js.map +1 -1
- package/dist/store/sync/flags.d.ts +34 -0
- package/dist/store/sync/flags.d.ts.map +1 -1
- package/dist/store/sync/flags.js +46 -0
- package/dist/store/sync/flags.js.map +1 -1
- package/dist/store/sync/genesis.d.ts +8 -0
- package/dist/store/sync/genesis.d.ts.map +1 -1
- package/dist/store/sync/genesis.js +18 -5
- package/dist/store/sync/genesis.js.map +1 -1
- package/dist/store/sync/push.d.ts +4 -2
- package/dist/store/sync/push.d.ts.map +1 -1
- package/dist/store/sync/push.js +10 -1
- package/dist/store/sync/push.js.map +1 -1
- package/dist/store/sync/rebind.d.ts +20 -0
- package/dist/store/sync/rebind.d.ts.map +1 -1
- package/dist/store/sync/rebind.js +86 -4
- package/dist/store/sync/rebind.js.map +1 -1
- package/dist/store/sync/reconcile-copy.d.ts +152 -0
- package/dist/store/sync/reconcile-copy.d.ts.map +1 -0
- package/dist/store/sync/reconcile-copy.js +428 -0
- package/dist/store/sync/reconcile-copy.js.map +1 -0
- package/dist/store/sync/reconcile.d.ts +80 -0
- package/dist/store/sync/reconcile.d.ts.map +1 -1
- package/dist/store/sync/reconcile.js +97 -5
- package/dist/store/sync/reconcile.js.map +1 -1
- package/dist/store/sync/repair.d.ts +11 -0
- package/dist/store/sync/repair.d.ts.map +1 -1
- package/dist/store/sync/repair.js +14 -3
- package/dist/store/sync/repair.js.map +1 -1
- package/dist/store/sync/replica.d.ts +74 -1
- package/dist/store/sync/replica.d.ts.map +1 -1
- package/dist/store/sync/replica.js +104 -6
- package/dist/store/sync/replica.js.map +1 -1
- package/dist/store/sync/row-meta.d.ts +4 -2
- package/dist/store/sync/row-meta.d.ts.map +1 -1
- package/dist/store/sync/row-meta.js +6 -4
- package/dist/store/sync/row-meta.js.map +1 -1
- package/dist/store/sync/sealer.d.ts +2 -0
- package/dist/store/sync/sealer.d.ts.map +1 -1
- package/dist/store/sync/sealer.js +33 -4
- package/dist/store/sync/sealer.js.map +1 -1
- package/dist/store/sync/structural.d.ts.map +1 -1
- package/dist/store/sync/structural.js +3 -1
- package/dist/store/sync/structural.js.map +1 -1
- package/dist/store/sync/timestamp-canon.d.ts.map +1 -1
- package/dist/store/sync/timestamp-canon.js +2 -0
- package/dist/store/sync/timestamp-canon.js.map +1 -1
- package/dist/store/table-classification.d.ts +29 -0
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +85 -19
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +28 -10
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/vault-manifest.d.ts +5 -0
- package/dist/store/vault-manifest.d.ts.map +1 -1
- package/dist/store/vault-manifest.js +14 -1
- package/dist/store/vault-manifest.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +15 -5
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +20 -8
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/done-record.d.ts +14 -4
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +21 -9
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +45 -4
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts +5 -4
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +18 -11
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/tool-cache.d.ts +27 -1
- package/dist/tasks/tool-cache.d.ts.map +1 -1
- package/dist/tasks/tool-cache.js +110 -6
- package/dist/tasks/tool-cache.js.map +1 -1
- package/dist/tools/fs.d.ts +3 -1
- package/dist/tools/fs.d.ts.map +1 -1
- package/dist/tools/fs.js +35 -2
- package/dist/tools/fs.js.map +1 -1
- package/dist/validation/engine-ops.d.ts +10 -3
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +17 -8
- package/dist/validation/engine-ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20261010180000_t12915-agent-registry-uids/migration.sql +18 -0
- package/migrations/drizzle-cleo-project/20261010170000_t12896b-brain-task-observations/migration.sql +37 -0
- package/migrations/sync-journal/20261009150000_t13335-capture-pin/migration.sql +13 -0
- package/package.json +18 -13
- package/schemas/config.schema.json +12 -0
- package/schemas/project-context.schema.json +5 -0
- package/templates/CLEO-INJECTION.md +2 -2
- package/templates/CLEO-REFERENCE.md +6 -4
- package/templates/git-hooks/pre-push +29 -1
- package/templates/workflows/release-prepare.yml.tmpl +1 -0
|
@@ -35,6 +35,24 @@ async function backend() {
|
|
|
35
35
|
// ---------------------------------------------------------------------------
|
|
36
36
|
// Public dispatch API
|
|
37
37
|
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Admit one worktree dependency install as a `scoped-build` run, without
|
|
40
|
+
* waiting: the release on a grant, `null` when the budget is busy.
|
|
41
|
+
*
|
|
42
|
+
* @task T13524
|
|
43
|
+
*/
|
|
44
|
+
export async function admitWorktreeInstall() {
|
|
45
|
+
const { governor } = await import('../resources/governor.js');
|
|
46
|
+
try {
|
|
47
|
+
const grant = await governor.acquire('scoped-build', { blocking: false });
|
|
48
|
+
return grant.deferred ? null : () => grant.release();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Admission state cannot be kept here (sandbox, read-only home): fail open,
|
|
52
|
+
// as every other governed run does.
|
|
53
|
+
return async () => { };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
38
56
|
/**
|
|
39
57
|
* Create a worktree for an agent task via the native backend.
|
|
40
58
|
*
|
|
@@ -50,7 +68,25 @@ async function backend() {
|
|
|
50
68
|
*/
|
|
51
69
|
export async function spawnWorktree(projectRoot, options) {
|
|
52
70
|
const { createWorktree } = await backend();
|
|
53
|
-
|
|
71
|
+
const { createProjectHookExecutor } = await import('../hooks/project-runner.js');
|
|
72
|
+
const hookOptions = {
|
|
73
|
+
...options,
|
|
74
|
+
projectHookExecutor: options.projectHookExecutor ?? createProjectHookExecutor(projectRoot),
|
|
75
|
+
};
|
|
76
|
+
// T13522: install the git shim before the worktree advertises strict protection.
|
|
77
|
+
let withShim = hookOptions;
|
|
78
|
+
if (!options.gitShim) {
|
|
79
|
+
const { ensureGitShimDir } = await import('../spawn/branch-lock.js');
|
|
80
|
+
const shim = ensureGitShimDir(projectRoot);
|
|
81
|
+
withShim = { ...hookOptions, gitShim: { dir: shim.dir, installed: shim.installed } };
|
|
82
|
+
}
|
|
83
|
+
// T13524: admit the dependency install through the machine-wide heavy queue
|
|
84
|
+
// (the same `scoped-build` class as `cleo run --class build`); a busy budget
|
|
85
|
+
// defers it to the worker instead of blocking the spawn.
|
|
86
|
+
const admitted = withShim.skipInstall || withShim.admitInstall
|
|
87
|
+
? withShim
|
|
88
|
+
: { ...withShim, admitInstall: admitWorktreeInstall };
|
|
89
|
+
return createWorktree(projectRoot, admitted);
|
|
54
90
|
}
|
|
55
91
|
/**
|
|
56
92
|
* Destroy a worktree for a completed task via the native backend.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-dispatch.js","sourceRoot":"","sources":["../../src/sentient/worktree-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;GAKG;AACH,KAAK,UAAU,OAAO;IACpB,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,OAA8B;IAE9B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"worktree-dispatch.js","sourceRoot":"","sources":["../../src/sentient/worktree-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;GAKG;AACH,KAAK,UAAU,OAAO;IACpB,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,oCAAoC;QACpC,OAAO,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,OAA8B;IAE9B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IAC3C,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG;QAClB,GAAG,OAAO;QACV,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,yBAAyB,CAAC,WAAW,CAAC;KAC3F,CAAC;IACF,iFAAiF;IACjF,IAAI,QAAQ,GAA0B,WAAW,CAAC;IAClD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC3C,QAAQ,GAAG,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;IACvF,CAAC;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,yDAAyD;IACzD,MAAM,QAAQ,GACZ,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,YAAY;QAC3C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;IAC1D,OAAO,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,OAA+B;IAE/B,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAgC,EAAE;IACrE,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,aAA0B;IAE1B,OAAO,mBAAmB,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,EAAE;AACF,oEAAoE;AACpE,4EAA4E;AAC5E,uEAAuE;AACvE,8EAA8E;AAE9E,IAAI,qBAAqB,GAA+D,IAAI,CAAC;AAC7F,IAAI,mBAAmB,GAA6D,IAAI,CAAC;AACzF,IAAI,oBAAoB,GAA8D,IAAI,CAAC;AAE3F;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAA6B;IACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,sCAAsC;IACnD,CAAC;IACD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,OAA0E;IAE1E,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,EAAE;YACpB,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,qBAAqB;QAAE,OAAO,CAAC,qBAAqB;IAExD,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IAC5B,qBAAqB,GAAG,GAAG,CAAC,eAAe,CAAC;IAC5C,mBAAmB,GAAG,GAAG,CAAC,aAAa,CAAC;IACxC,oBAAoB,GAAG,GAAG,CAAC,cAAc,CAAC;AAC5C,CAAC"}
|
|
@@ -19,12 +19,15 @@
|
|
|
19
19
|
* reader, and CLEO keeps stdout for LAFS envelopes).
|
|
20
20
|
*
|
|
21
21
|
* After the snapshot it embeds one bounded batch of observations that one-shot
|
|
22
|
-
* processes stored unembedded (T13126, `memory/embedding-backfill.ts`)
|
|
22
|
+
* processes stored unembedded (T13126, `memory/embedding-backfill.ts`), then
|
|
23
|
+
* runs the automatic cloud sync (T13468, `cloud/auto-sync.ts`). Both run only
|
|
24
|
+
* here, in the detached worker, never in the process that ended the session.
|
|
23
25
|
*
|
|
24
26
|
* argv: `<projectRoot> <markerToken>`
|
|
25
27
|
*
|
|
26
28
|
* @task T12508
|
|
27
29
|
* @task T13126
|
|
30
|
+
* @task T13468
|
|
28
31
|
*/
|
|
29
32
|
export {};
|
|
30
33
|
//# sourceMappingURL=session-end-snapshot-entry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end-snapshot-entry.d.ts","sourceRoot":"","sources":["../../src/sessions/session-end-snapshot-entry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-end-snapshot-entry.d.ts","sourceRoot":"","sources":["../../src/sessions/session-end-snapshot-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
|
@@ -19,15 +19,19 @@
|
|
|
19
19
|
* reader, and CLEO keeps stdout for LAFS envelopes).
|
|
20
20
|
*
|
|
21
21
|
* After the snapshot it embeds one bounded batch of observations that one-shot
|
|
22
|
-
* processes stored unembedded (T13126, `memory/embedding-backfill.ts`)
|
|
22
|
+
* processes stored unembedded (T13126, `memory/embedding-backfill.ts`), then
|
|
23
|
+
* runs the automatic cloud sync (T13468, `cloud/auto-sync.ts`). Both run only
|
|
24
|
+
* here, in the detached worker, never in the process that ended the session.
|
|
23
25
|
*
|
|
24
26
|
* argv: `<projectRoot> <markerToken>`
|
|
25
27
|
*
|
|
26
28
|
* @task T12508
|
|
27
29
|
* @task T13126
|
|
30
|
+
* @task T13468
|
|
28
31
|
*/
|
|
29
32
|
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
30
33
|
import { join } from 'node:path';
|
|
34
|
+
import { autoCloudSync } from '../cloud/auto-sync.js';
|
|
31
35
|
import { runBoundedEmbeddingBackfill } from '../memory/embedding-backfill.js';
|
|
32
36
|
import { getCleoDir } from '../paths.js';
|
|
33
37
|
import { SNAPSHOT_LOCK_WAIT_RETRIES } from '../store/snapshot-gate.js';
|
|
@@ -50,6 +54,9 @@ releaseSessionEndWorkerMarker(projectRoot, markerToken);
|
|
|
50
54
|
// class, so the model loads once per session instead of once per observe. It is
|
|
51
55
|
// a no-op when nothing is pending. Best-effort: it never throws.
|
|
52
56
|
const embeddings = await runBoundedEmbeddingBackfill(projectRoot);
|
|
57
|
+
// T13468: sync the main brain (and the project) with the cloud. Best-effort,
|
|
58
|
+
// throttled, single-flight and bounded; it never throws.
|
|
59
|
+
const autoSync = await autoCloudSync(projectRoot, 'session-end');
|
|
53
60
|
try {
|
|
54
61
|
const logsDir = join(getCleoDir(projectRoot), 'logs');
|
|
55
62
|
mkdirSync(logsDir, { recursive: true });
|
|
@@ -60,6 +67,7 @@ try {
|
|
|
60
67
|
projectRoot,
|
|
61
68
|
result,
|
|
62
69
|
embeddings,
|
|
70
|
+
autoSync,
|
|
63
71
|
})}\n`);
|
|
64
72
|
}
|
|
65
73
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end-snapshot-entry.js","sourceRoot":"","sources":["../../src/sessions/session-end-snapshot-entry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-end-snapshot-entry.js","sourceRoot":"","sources":["../../src/sessions/session-end-snapshot-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEnG,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAE1C,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE;IACxD,eAAe,EAAE,0BAA0B;IAC3C,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,WAAW,EAAE,WAAW,CAAC;CAC9E,CAAC,CAAC;AACH,2EAA2E;AAC3E,6BAA6B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAExD,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,iEAAiE;AACjE,MAAM,UAAU,GAAG,MAAM,2BAA2B,CAAC,WAAW,CAAC,CAAC;AAElE,6EAA6E;AAC7E,yDAAyD;AACzD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAEjE,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,cAAc,CACZ,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EACzC,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,KAAK,EAAE,sBAAsB;QAC7B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW;QACX,MAAM;QACN,UAAU;QACV,QAAQ;KACT,CAAC,IAAI,CACP,CAAC;AACJ,CAAC;AAAC,MAAM,CAAC;IACP,mEAAmE;AACrE,CAAC;AACD,6DAA6D;AAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-identity.d.ts","sourceRoot":"","sources":["../../src/spawn/agent-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-identity.d.ts","sourceRoot":"","sources":["../../src/spawn/agent-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,qBAAqB,CAAC;AAS9D,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CA4C7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,GAAG,SAAS,CAIrF;AAED,2FAA2F;AAC3F,MAAM,MAAM,sBAAsB,GAC9B;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAwB,GACzF,OAAO,CAAC,sBAAsB,CAAC,CAsDjC;AAwGD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,CAAC,sBAAsB,EAAE;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,GACxD,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -25,7 +25,8 @@ import { generateSessionId } from '../sessions/session-id.js';
|
|
|
25
25
|
import { getTaskAccessor } from '../store/data-accessor.js';
|
|
26
26
|
import { withLock } from '../store/lock.js';
|
|
27
27
|
import { endSession } from '../store/session-store.js';
|
|
28
|
-
import {
|
|
28
|
+
import { isClaimExpired, taskClaimedError, taskClaimLeaseMs } from '../store/task-claim.js';
|
|
29
|
+
import { claimSpawnedTask, releaseOwnClaim, releaseSpawnClaim, } from '../task-work/claims.js';
|
|
29
30
|
/**
|
|
30
31
|
* Derive a deterministic agent handle for a spawned task.
|
|
31
32
|
*
|
|
@@ -154,6 +155,16 @@ export async function requireSpawnSession(projectRoot, taskId, allocate = alloca
|
|
|
154
155
|
cause,
|
|
155
156
|
};
|
|
156
157
|
}
|
|
158
|
+
if (identity.reused) {
|
|
159
|
+
const verdict = await assessReusedSession(projectRoot, taskId, identity);
|
|
160
|
+
if (verdict.kind === 'refuse')
|
|
161
|
+
return verdict.refusal;
|
|
162
|
+
// An unused session keeps its spawn lease untouched: renewing it here would
|
|
163
|
+
// read as worker activity to the next re-spawn.
|
|
164
|
+
if (verdict.kind === 'unused') {
|
|
165
|
+
return { ok: true, identity, claim: { claim: verdict.lease, previous: verdict.lease } };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
157
168
|
let claim;
|
|
158
169
|
try {
|
|
159
170
|
claim = await claimSpawnedTask(projectRoot, taskId, {
|
|
@@ -179,6 +190,90 @@ export async function requireSpawnSession(projectRoot, taskId, allocate = alloca
|
|
|
179
190
|
}
|
|
180
191
|
return { ok: true, identity, claim };
|
|
181
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Decide what a re-spawn may do with the task's per-agent session (T13491,
|
|
195
|
+
* axiom T1544). A re-spawn reuses that session; a second agent bound to a
|
|
196
|
+
* session a live worker is using would bleed into it.
|
|
197
|
+
*
|
|
198
|
+
* The worker signal is the lease itself: spawn grants `claimedAt + lease`,
|
|
199
|
+
* and every mutation the holder makes renews it at once (no throttle, unlike
|
|
200
|
+
* `lastActivity`). A live lease that runs past what its spawn granted means a
|
|
201
|
+
* worker has done work under the session: refuse with `E_TASK_CLAIMED` naming
|
|
202
|
+
* the holder and a hand-off. A live lease still at its spawn value means no
|
|
203
|
+
* worker has used the session yet (the orchestrator asks for the prompt
|
|
204
|
+
* again): reuse it without renewing, so the next re-spawn still reads it as
|
|
205
|
+
* unused.
|
|
206
|
+
*
|
|
207
|
+
* The holder stops counting as live through the existing rules only: ending
|
|
208
|
+
* its session releases the lease and worktree lock (T13425, SQL trigger), and
|
|
209
|
+
* a lease its worker stopped renewing expires. An expired lease is released
|
|
210
|
+
* (audited as `spawn_session_reclaim`) so the re-claim starts a fresh lease
|
|
211
|
+
* with a new `claimedAt`.
|
|
212
|
+
*
|
|
213
|
+
* shortcut: the comparison uses the current `CLEO_CLAIM_LEASE_MINUTES`; a
|
|
214
|
+
* lease length changed between spawn and re-spawn misreads one lease period.
|
|
215
|
+
*
|
|
216
|
+
* @param projectRoot - Project root.
|
|
217
|
+
* @param taskId - The task being spawned.
|
|
218
|
+
* @param identity - The reused per-agent session.
|
|
219
|
+
* @returns Claim as usual, reuse the unused lease, or refuse.
|
|
220
|
+
* @task T13491
|
|
221
|
+
* @task T13498
|
|
222
|
+
*/
|
|
223
|
+
async function assessReusedSession(projectRoot, taskId, identity) {
|
|
224
|
+
const acc = await getTaskAccessor(projectRoot);
|
|
225
|
+
const held = (await acc.loadSingleTask(taskId))?.claim;
|
|
226
|
+
if (!held || held.sessionId !== identity.sessionId)
|
|
227
|
+
return { kind: 'claim' };
|
|
228
|
+
const now = new Date().toISOString();
|
|
229
|
+
if (isClaimExpired(held, now)) {
|
|
230
|
+
await releaseOwnClaim(acc, taskId, identity.sessionId);
|
|
231
|
+
await acc.appendLog({
|
|
232
|
+
action: 'spawn_session_reclaim',
|
|
233
|
+
taskId,
|
|
234
|
+
actor: identity.agentId,
|
|
235
|
+
sessionId: identity.sessionId,
|
|
236
|
+
timestamp: now,
|
|
237
|
+
details: { reason: 'lease-expired', leaseExpiresAt: held.leaseExpiresAt },
|
|
238
|
+
before: held,
|
|
239
|
+
});
|
|
240
|
+
return { kind: 'claim' };
|
|
241
|
+
}
|
|
242
|
+
const granted = Date.parse(held.claimedAt) + taskClaimLeaseMs();
|
|
243
|
+
// Spawn writes claimedAt and the expiry from one instant, so an untouched lease is exact.
|
|
244
|
+
if (Date.parse(held.leaseExpiresAt) <= granted) {
|
|
245
|
+
return { kind: 'unused', lease: held };
|
|
246
|
+
}
|
|
247
|
+
const err = taskClaimedError(taskId, held, { sessionId: null, agentId: null }, now, 'orchestrate spawn');
|
|
248
|
+
const who = held.agentId
|
|
249
|
+
? `session ${held.sessionId} (agent ${held.agentId})`
|
|
250
|
+
: `session ${held.sessionId}`;
|
|
251
|
+
const message = `Refusing to spawn ${taskId}: a live worker is using ${who}, the session this spawn would hand the child; ` +
|
|
252
|
+
`it renewed its lease after the spawn (lease now expires ${held.leaseExpiresAt}).`;
|
|
253
|
+
return {
|
|
254
|
+
kind: 'refuse',
|
|
255
|
+
refusal: {
|
|
256
|
+
ok: false,
|
|
257
|
+
// @sync-invariant none:local-only refuses before any write; lease liveness is this device's spawn coordination
|
|
258
|
+
code: 'E_TASK_CLAIMED',
|
|
259
|
+
exitCode: ExitCode.TASK_CLAIMED,
|
|
260
|
+
message,
|
|
261
|
+
fix: `Hand off instead of spawning over it: coordinate with that worker, or once it has stopped end its session ` +
|
|
262
|
+
`(cleo session end --session ${held.sessionId}), which releases its claim and worktree lock, then spawn again. ` +
|
|
263
|
+
`A worker that stops renewing loses the lease at ${held.leaseExpiresAt}; the next spawn then reclaims the session (audited).`,
|
|
264
|
+
cause: message,
|
|
265
|
+
details: {
|
|
266
|
+
...(err.details ?? {}),
|
|
267
|
+
handoff: {
|
|
268
|
+
holderSessionId: held.sessionId,
|
|
269
|
+
holderAgentId: held.agentId,
|
|
270
|
+
claimedAt: held.claimedAt,
|
|
271
|
+
leaseExpiresAt: held.leaseExpiresAt,
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
}
|
|
182
277
|
/**
|
|
183
278
|
* Undo a {@link requireSpawnSession} whose spawn then failed (T12502): give
|
|
184
279
|
* the task claim back to its previous holder (the orchestrator on a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../src/spawn/agent-identity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../src/spawn/agent-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,7 +67,9 @@ export declare function createAgentWorktree(taskId: string, projectRoot: string)
|
|
|
67
67
|
* env block and prompt preamble that bind the agent to its worktree.
|
|
68
68
|
*
|
|
69
69
|
* @param worktree - The created worktree state.
|
|
70
|
-
* @param
|
|
70
|
+
* @param shim - The {@link ensureGitShimDir} result; strict protection and the
|
|
71
|
+
* PATH entry apply only when it is installed (T13522). A bare directory
|
|
72
|
+
* string is taken as installed (legacy callers).
|
|
71
73
|
* @param identity - Per-agent session + agent identity to inject (T11343).
|
|
72
74
|
* `sessionId` → `CLEO_SESSION_ID`, `agentId` → `CLEO_AGENT_ID`. Only set
|
|
73
75
|
* when non-empty so an unallocated identity never clobbers an inherited env.
|
|
@@ -78,7 +80,7 @@ export declare function createAgentWorktree(taskId: string, projectRoot: string)
|
|
|
78
80
|
* @task T1121
|
|
79
81
|
* @task T11343
|
|
80
82
|
*/
|
|
81
|
-
export declare function buildWorktreeSpawnResult(worktree: AgentWorktreeState,
|
|
83
|
+
export declare function buildWorktreeSpawnResult(worktree: AgentWorktreeState, shim: string | GitShimInstall, identity?: {
|
|
82
84
|
sessionId?: string | null;
|
|
83
85
|
agentId?: string | null;
|
|
84
86
|
}): WorktreeSpawnResult;
|
|
@@ -352,18 +354,35 @@ export declare function completeAgentWorktreeIntegration(taskId: string, project
|
|
|
352
354
|
skipFetch?: boolean;
|
|
353
355
|
auditLogPath?: string;
|
|
354
356
|
}): WorktreeIntegrationResult;
|
|
357
|
+
/** Result of {@link ensureGitShimDir}. */
|
|
358
|
+
export interface GitShimInstall {
|
|
359
|
+
/** Directory to prepend to a worker's PATH. */
|
|
360
|
+
readonly dir: string;
|
|
361
|
+
/** True only when an executable `git` launcher now points at the real shim. */
|
|
362
|
+
readonly installed: boolean;
|
|
363
|
+
/** The shim entry point used, when one was found. */
|
|
364
|
+
readonly shimBinPath: string | null;
|
|
365
|
+
/** Why the shim is not installed. */
|
|
366
|
+
readonly reason?: string;
|
|
367
|
+
}
|
|
355
368
|
/**
|
|
356
|
-
*
|
|
369
|
+
* Install the git shim launcher in the project's `.cleo/bin/git-shim/` dir
|
|
370
|
+
* (T1118, wired in by T13522). Idempotent.
|
|
357
371
|
*
|
|
358
|
-
* The shim
|
|
372
|
+
* The shim is resolved from the `@cleocode/git-shim` package the running CLI
|
|
373
|
+
* was installed with, not from the project's node_modules, so a standalone
|
|
374
|
+
* project gets it too. When it cannot be found or the launcher cannot be
|
|
375
|
+
* written, nothing is installed and `installed` is `false`: callers then
|
|
376
|
+
* advertise `CLEO_BRANCH_PROTECTION=unavailable` rather than a fence that is
|
|
377
|
+
* not there.
|
|
359
378
|
*
|
|
360
379
|
* @param projectRoot - Absolute path to the project root.
|
|
361
|
-
* @
|
|
362
|
-
*
|
|
380
|
+
* @param shimBinPath - The shim entry point (tests); defaults to the installed package's.
|
|
381
|
+
* @returns Where the shim lives and whether it is installed.
|
|
363
382
|
* @task T1118
|
|
364
|
-
* @task
|
|
383
|
+
* @task T13522
|
|
365
384
|
*/
|
|
366
|
-
export declare function ensureGitShimDir(projectRoot: string):
|
|
385
|
+
export declare function ensureGitShimDir(projectRoot: string, shimBinPath?: string): GitShimInstall;
|
|
367
386
|
/**
|
|
368
387
|
* Detect platform capabilities for filesystem hardening.
|
|
369
388
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-lock.d.ts","sourceRoot":"","sources":["../../src/spawn/branch-lock.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"branch-lock.d.ts","sourceRoot":"","sources":["../../src/spawn/branch-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
* @adr ADR-062
|
|
21
21
|
*/
|
|
22
22
|
import { execFileSync } from 'node:child_process';
|
|
23
|
-
import { appendFileSync, chmodSync, existsSync, mkdirSync, readFileSync, realpathSync, rmSync,
|
|
23
|
+
import { accessSync, appendFileSync, chmodSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, rmSync, } from 'node:fs';
|
|
24
24
|
import { platform } from 'node:os';
|
|
25
25
|
import { dirname, isAbsolute, join, relative } from 'node:path';
|
|
26
|
-
import { installGitShimLaunchers } from '@cleocode/git-shim';
|
|
26
|
+
import { installGitShimLaunchers, resolveShimBinPath } from '@cleocode/git-shim';
|
|
27
27
|
import { computeProjectHash, findOnPath, pathEnvKey, prependPathEntry, resolveWorktreeRootForHash, } from '@cleocode/paths';
|
|
28
28
|
// ---------------------------------------------------------------------------
|
|
29
29
|
// Re-exports from @cleocode/worktree
|
|
@@ -155,7 +155,9 @@ function shellQuote(value) {
|
|
|
155
155
|
* env block and prompt preamble that bind the agent to its worktree.
|
|
156
156
|
*
|
|
157
157
|
* @param worktree - The created worktree state.
|
|
158
|
-
* @param
|
|
158
|
+
* @param shim - The {@link ensureGitShimDir} result; strict protection and the
|
|
159
|
+
* PATH entry apply only when it is installed (T13522). A bare directory
|
|
160
|
+
* string is taken as installed (legacy callers).
|
|
159
161
|
* @param identity - Per-agent session + agent identity to inject (T11343).
|
|
160
162
|
* `sessionId` → `CLEO_SESSION_ID`, `agentId` → `CLEO_AGENT_ID`. Only set
|
|
161
163
|
* when non-empty so an unallocated identity never clobbers an inherited env.
|
|
@@ -166,20 +168,26 @@ function shellQuote(value) {
|
|
|
166
168
|
* @task T1121
|
|
167
169
|
* @task T11343
|
|
168
170
|
*/
|
|
169
|
-
export function buildWorktreeSpawnResult(worktree,
|
|
171
|
+
export function buildWorktreeSpawnResult(worktree, shim, identity = {}) {
|
|
170
172
|
const pathKey = pathEnvKey();
|
|
173
|
+
const shimDir = typeof shim === 'string' ? shim : shim.dir;
|
|
174
|
+
const shimActive = typeof shim === 'string' || shim.installed;
|
|
171
175
|
const envVars = {
|
|
172
176
|
CLEO_AGENT_ROLE: 'worker',
|
|
173
177
|
CLEO_AGENT_CWD: worktree.path,
|
|
174
178
|
CLEO_WORKTREE_ROOT: worktree.path,
|
|
175
179
|
CLEO_WORKTREE_BRANCH: worktree.branch,
|
|
176
180
|
CLEO_PROJECT_HASH: worktree.projectHash,
|
|
177
|
-
CLEO_BRANCH_PROTECTION: 'strict',
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
CLEO_BRANCH_PROTECTION: shimActive ? 'strict' : 'unavailable',
|
|
182
|
+
...(shimActive
|
|
183
|
+
? {
|
|
184
|
+
CLEO_SHIM_MARKER: '.cleo/bin/git-shim',
|
|
185
|
+
// Prepend the shim directory so `git` resolves to the shim. The platform
|
|
186
|
+
// delimiter matters: `${shimDir}:${PATH}` on Windows fuses the shim dir
|
|
187
|
+
// with the first real entry and loses both (T12605).
|
|
188
|
+
[pathKey]: prependPathEntry(shimDir, process.env[pathKey]),
|
|
189
|
+
}
|
|
190
|
+
: {}),
|
|
183
191
|
};
|
|
184
192
|
// T11343 — bind the spawned agent's OWN session + identity into the worker
|
|
185
193
|
// env so every short-lived `cleo` call inside the worktree resolves THIS
|
|
@@ -204,7 +212,9 @@ export function buildWorktreeSpawnResult(worktree, shimDir, identity = {}) {
|
|
|
204
212
|
' git checkout, git switch, git branch -b/-D, git reset --hard,',
|
|
205
213
|
' git worktree add/remove, git rebase, git stash pop, git push --force',
|
|
206
214
|
'',
|
|
207
|
-
|
|
215
|
+
shimActive
|
|
216
|
+
? 'A git shim is active on your PATH that will exit 77 if you attempt these, or a push to main.'
|
|
217
|
+
: 'No git shim could be installed for this worktree: these rules are NOT enforced, so follow them yourself.',
|
|
208
218
|
`Your working directory is: ${worktree.path}`,
|
|
209
219
|
'All your commits must land on YOUR branch only.',
|
|
210
220
|
'',
|
|
@@ -982,78 +992,52 @@ export function completeAgentWorktreeIntegration(taskId, projectRoot, opts = {})
|
|
|
982
992
|
}
|
|
983
993
|
return { ...mergeResult, auditLogEntry };
|
|
984
994
|
}
|
|
985
|
-
// ---------------------------------------------------------------------------
|
|
986
|
-
// L2 — Shim materialisation
|
|
987
|
-
// ---------------------------------------------------------------------------
|
|
988
|
-
/** Minimal stub shim script content for when the package isn't installed. */
|
|
989
|
-
const STUB_SHIM_CONTENT = `#!/usr/bin/env node
|
|
990
|
-
// git-shim stub (install @cleocode/git-shim for the full binary)
|
|
991
|
-
import { spawnSync } from 'node:child_process';
|
|
992
|
-
const RESTRICTED = new Set(['worker','lead','subagent']);
|
|
993
|
-
const BLOCKED = new Set(['checkout','switch','rebase']);
|
|
994
|
-
const role = process.env['CLEO_AGENT_ROLE'];
|
|
995
|
-
const sub = process.argv[2];
|
|
996
|
-
if (role && RESTRICTED.has(role) && sub && BLOCKED.has(sub) && !process.env['CLEO_ALLOW_BRANCH_OPS']) {
|
|
997
|
-
process.stderr.write('[git-shim] BLOCKED: ' + sub + ' is not allowed for role ' + role + '\\n');
|
|
998
|
-
process.exit(77);
|
|
999
|
-
}
|
|
1000
|
-
const git = process.env['CLEO_REAL_GIT_PATH'] || '/usr/bin/git';
|
|
1001
|
-
const r = spawnSync(git, process.argv.slice(2), { stdio: 'inherit' });
|
|
1002
|
-
process.exit(r.status ?? 0);
|
|
1003
|
-
`;
|
|
1004
995
|
/**
|
|
1005
|
-
*
|
|
996
|
+
* Install the git shim launcher in the project's `.cleo/bin/git-shim/` dir
|
|
997
|
+
* (T1118, wired in by T13522). Idempotent.
|
|
1006
998
|
*
|
|
1007
|
-
* The shim
|
|
999
|
+
* The shim is resolved from the `@cleocode/git-shim` package the running CLI
|
|
1000
|
+
* was installed with, not from the project's node_modules, so a standalone
|
|
1001
|
+
* project gets it too. When it cannot be found or the launcher cannot be
|
|
1002
|
+
* written, nothing is installed and `installed` is `false`: callers then
|
|
1003
|
+
* advertise `CLEO_BRANCH_PROTECTION=unavailable` rather than a fence that is
|
|
1004
|
+
* not there.
|
|
1008
1005
|
*
|
|
1009
1006
|
* @param projectRoot - Absolute path to the project root.
|
|
1010
|
-
* @
|
|
1011
|
-
*
|
|
1007
|
+
* @param shimBinPath - The shim entry point (tests); defaults to the installed package's.
|
|
1008
|
+
* @returns Where the shim lives and whether it is installed.
|
|
1012
1009
|
* @task T1118
|
|
1013
|
-
* @task
|
|
1010
|
+
* @task T13522
|
|
1014
1011
|
*/
|
|
1015
|
-
export function ensureGitShimDir(projectRoot) {
|
|
1016
|
-
const
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
join(projectRoot, 'node_modules', '@cleocode', 'git-shim', 'dist', 'shim.js'),
|
|
1025
|
-
join(projectRoot, '..', '..', 'node_modules', '@cleocode', 'git-shim', 'dist', 'shim.js'),
|
|
1026
|
-
];
|
|
1027
|
-
for (const p of candidatePaths) {
|
|
1028
|
-
if (existsSync(p)) {
|
|
1029
|
-
shimBinPath = p;
|
|
1030
|
-
break;
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
}
|
|
1034
|
-
catch {
|
|
1035
|
-
// ignore
|
|
1036
|
-
}
|
|
1037
|
-
if (!shimBinPath) {
|
|
1038
|
-
// Write a minimal stub shim.
|
|
1039
|
-
shimBinPath = join(shimDir, '_shim_bin.cjs');
|
|
1040
|
-
try {
|
|
1041
|
-
writeFileSync(shimBinPath, STUB_SHIM_CONTENT, { encoding: 'utf-8', mode: 0o755 });
|
|
1042
|
-
}
|
|
1043
|
-
catch {
|
|
1044
|
-
// ignore — best effort
|
|
1045
|
-
}
|
|
1012
|
+
export function ensureGitShimDir(projectRoot, shimBinPath = resolveShimBinPath()) {
|
|
1013
|
+
const dir = join(projectRoot, '.cleo', 'bin', 'git-shim');
|
|
1014
|
+
if (!existsSync(shimBinPath)) {
|
|
1015
|
+
return {
|
|
1016
|
+
dir,
|
|
1017
|
+
installed: false,
|
|
1018
|
+
shimBinPath: null,
|
|
1019
|
+
reason: `git shim not found at ${shimBinPath}`,
|
|
1020
|
+
};
|
|
1046
1021
|
}
|
|
1047
|
-
// Create/update the `git` launcher: a symlink on POSIX; on Windows a
|
|
1048
|
-
// `git.cmd` + sh launcher, since PATHEXT ignores extensionless files and
|
|
1049
|
-
// file symlinks need privileges (T12605).
|
|
1050
1022
|
try {
|
|
1051
|
-
|
|
1023
|
+
// A symlink on POSIX; on Windows a `git.cmd` + sh launcher, since PATHEXT
|
|
1024
|
+
// ignores extensionless files and file symlinks need privileges (T12605).
|
|
1025
|
+
const launchers = installGitShimLaunchers(dir, shimBinPath);
|
|
1026
|
+
// Windows has no execute bit: there the launcher existing is the check.
|
|
1027
|
+
for (const launcher of launchers) {
|
|
1028
|
+
accessSync(launcher, process.platform === 'win32' ? constants.F_OK : constants.X_OK);
|
|
1029
|
+
}
|
|
1030
|
+
return { dir, installed: true, shimBinPath };
|
|
1052
1031
|
}
|
|
1053
|
-
catch {
|
|
1054
|
-
|
|
1032
|
+
catch (err) {
|
|
1033
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1034
|
+
return {
|
|
1035
|
+
dir,
|
|
1036
|
+
installed: false,
|
|
1037
|
+
shimBinPath,
|
|
1038
|
+
reason: `git shim launcher not installed: ${reason}`,
|
|
1039
|
+
};
|
|
1055
1040
|
}
|
|
1056
|
-
return shimDir;
|
|
1057
1041
|
}
|
|
1058
1042
|
// ---------------------------------------------------------------------------
|
|
1059
1043
|
// L3 — Filesystem hardening
|