opencode-swarm 7.152.1 → 7.153.1

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.
Files changed (121) hide show
  1. package/.opencode/skills/swarm-pr-review/SKILL.md +10 -10
  2. package/dist/background/pending-delegations.d.ts +7 -0
  3. package/dist/cli/{capability-probe-va4kk8vg.js → capability-probe-5wa7mcp6.js} +3 -2
  4. package/dist/cli/{config-doctor-bbqmye7a.js → config-doctor-ze21qs6b.js} +3 -3
  5. package/dist/cli/{core-fh4e6ex0.js → core-qdmhh1kx.js} +2 -2
  6. package/dist/cli/{curation-policy-nem98yc9.js → curation-policy-twa6agf8.js} +7 -7
  7. package/dist/cli/{curator-909s9dvs.js → curator-hxb3wsxr.js} +32 -33
  8. package/dist/cli/curator-llm-factory-s8atmc2n.js +64 -0
  9. package/dist/cli/{evidence-summary-service-kqw4y0yr.js → evidence-summary-service-wzzym9r7.js} +15 -15
  10. package/dist/cli/{gate-evidence-ycts62pj.js → gate-evidence-f71dn9vv.js} +8 -8
  11. package/dist/cli/guardrail-explain-5kzeem4m.js +65 -0
  12. package/dist/cli/{guardrail-log-e1tmdxxa.js → guardrail-log-38jnajpa.js} +6 -6
  13. package/dist/cli/{guardrail-reset-gdnaxxvb.js → guardrail-reset-wzvtmpn2.js} +32 -33
  14. package/dist/cli/{hive-promoter-d0xydg6r.js → hive-promoter-55qcqgfx.js} +32 -33
  15. package/dist/cli/{index-x6803sxh.js → index-0tyc8kdg.js} +2 -2
  16. package/dist/cli/{index-z8s2asdk.js → index-0tzv5zg2.js} +22 -150
  17. package/dist/cli/{index-3djxegsc.js → index-1akn19mp.js} +1 -1
  18. package/dist/cli/{index-q77e475x.js → index-1dtshrzg.js} +5 -5
  19. package/dist/cli/{index-73pmnsjg.js → index-1gzdnjg9.js} +2 -2
  20. package/dist/cli/{index-4tvvh7pn.js → index-23rneydq.js} +36 -35
  21. package/dist/cli/{index-z4bg1hv8.js → index-2mqmvxac.js} +9 -2
  22. package/dist/cli/index-3cegckkq.js +239 -0
  23. package/dist/cli/{index-pvrap7xg.js → index-3ttktt56.js} +1 -1
  24. package/dist/cli/{index-85gkedsf.js → index-4fwbbad3.js} +521 -15
  25. package/dist/cli/{index-qqrdmaxq.js → index-4g0g3dqz.js} +2 -2
  26. package/dist/cli/{index-44xdtqz8.js → index-4pjkdcgc.js} +1 -1
  27. package/dist/cli/{index-29vd7v3e.js → index-6vgb5fyb.js} +1 -1
  28. package/dist/cli/{index-sg2sx2q7.js → index-6ybjrqf7.js} +13095 -9360
  29. package/dist/cli/{index-txbd25bc.js → index-891g7hbf.js} +1 -1
  30. package/dist/cli/{index-02ajc6d1.js → index-8v9sj4aq.js} +2 -2
  31. package/dist/cli/{index-z9fyd0d6.js → index-9v8d3c0k.js} +450 -48
  32. package/dist/cli/{index-26vyr198.js → index-af0cqe6n.js} +16 -16
  33. package/dist/cli/{index-ryecg2st.js → index-ajkxx2k6.js} +3 -3
  34. package/dist/cli/{index-k3d919yf.js → index-gn26q90p.js} +85 -24
  35. package/dist/cli/{index-0tfgn5x0.js → index-k10qtq71.js} +9 -9
  36. package/dist/cli/{index-xyfdmrv7.js → index-mb7b1gye.js} +3 -3
  37. package/dist/cli/{index-0q2mjxp2.js → index-meg33yyv.js} +1 -1
  38. package/dist/cli/{index-cpg98bh1.js → index-myt57pht.js} +1 -1
  39. package/dist/cli/{index-2e1294d1.js → index-n5pxkera.js} +16 -10
  40. package/dist/cli/{index-n0vc5b5t.js → index-n823qsae.js} +16 -7
  41. package/dist/cli/{index-6zkm4p7p.js → index-pk1gbqmq.js} +1 -1
  42. package/dist/cli/{index-nd8tkb3g.js → index-smqsp8hs.js} +5 -5
  43. package/dist/cli/{index-7fh82sm1.js → index-td0jz8xe.js} +6 -6
  44. package/dist/cli/{index-dn6yt0xg.js → index-tdzbm974.js} +7 -7
  45. package/dist/cli/{index-rq6aetkv.js → index-v689bmr2.js} +4 -4
  46. package/dist/cli/{index-79g6edht.js → index-x3y6zhgj.js} +1 -1
  47. package/dist/cli/{index-aw492hpn.js → index-x8vw6ap1.js} +58 -41
  48. package/dist/cli/{index-96m8ckpq.js → index-xkjrg9k4.js} +4 -4
  49. package/dist/cli/{index-mken64yj.js → index-zppxpc3y.js} +2 -2
  50. package/dist/cli/index.js +32 -33
  51. package/dist/cli/{knowledge-escalator-4egcr928.js → knowledge-escalator-w05ztgvk.js} +13 -13
  52. package/dist/cli/{knowledge-events-kdyv4jzn.js → knowledge-events-pwm9jc0m.js} +11 -11
  53. package/dist/cli/{knowledge-link-h8cwj7af.js → knowledge-link-ge0rddxw.js} +6 -6
  54. package/dist/cli/{knowledge-store-dq3cvg53.js → knowledge-store-4xv65tj2.js} +7 -7
  55. package/dist/cli/{knowledge-validator-4bhtden9.js → knowledge-validator-0ttfsca7.js} +9 -9
  56. package/dist/cli/{model-preflight-7ea00h34.js → model-preflight-b95w8wxy.js} +1 -1
  57. package/dist/cli/{pending-delegations-a2nmssr1.js → pending-delegations-nk78wx7h.js} +4 -4
  58. package/dist/cli/{pr-subscriptions-7879nq5k.js → pr-subscriptions-dq1f61ye.js} +4 -4
  59. package/dist/cli/{runner-w81n9js3.js → runner-n50w1y4w.js} +7 -7
  60. package/dist/cli/{scan-cursor-2eezv81a.js → scan-cursor-b6n15w8d.js} +8 -8
  61. package/dist/cli/{schema-v4qcqhek.js → schema-jkbfwqr2.js} +2 -2
  62. package/dist/cli/{scope-persistence-y2r227r0.js → scope-persistence-5xt2m5ep.js} +10 -10
  63. package/dist/cli/{skill-generator-hhzxvb3h.js → skill-generator-3keadpf7.js} +15 -15
  64. package/dist/cli/{telemetry-52pw5xac.js → telemetry-hh1j99za.js} +1 -1
  65. package/dist/cli/{worktree-collision-ownership-p31zm5k0.js → worktree-collision-ownership-4drcjymy.js} +15 -10
  66. package/dist/cli/{worktree-isolation-ve338ez6.js → worktree-isolation-1ymaxn4h.js} +32 -33
  67. package/dist/commands/approve-write.d.ts +1 -0
  68. package/dist/commands/index.d.ts +1 -0
  69. package/dist/commands/lanes.d.ts +25 -0
  70. package/dist/commands/registry.d.ts +7 -0
  71. package/dist/config/schema.d.ts +39 -4
  72. package/dist/consensus/contracts.d.ts +14 -0
  73. package/dist/consensus/corpus.d.ts +16 -0
  74. package/dist/hooks/delegation-gate/worktree-isolation.d.ts +50 -3
  75. package/dist/hooks/delegation-gate/worktree-provisioning-owner.d.ts +40 -2
  76. package/dist/hooks/delegation-gate/worktree-recovery-authority.d.ts +201 -0
  77. package/dist/hooks/full-auto-permission.d.ts +7 -0
  78. package/dist/hooks/guardrails/index.d.ts +2 -1
  79. package/dist/hooks/guardrails/tool-before.d.ts +4 -0
  80. package/dist/hooks/init-orphan-recovery.d.ts +5 -1
  81. package/dist/hooks/pr-workflow-gate.d.ts +12 -0
  82. package/dist/hooks/scope-guard.d.ts +1 -3
  83. package/dist/hooks/trajectory-logger.d.ts +22 -6
  84. package/dist/hooks/trajectory-step-state.d.ts +43 -2
  85. package/dist/index.js +645 -622
  86. package/dist/learning/provenance.d.ts +9 -0
  87. package/dist/observability/catalog.d.ts +6 -4
  88. package/dist/prm/index.d.ts +3 -3
  89. package/dist/prm/replay.d.ts +29 -2
  90. package/dist/prm/trajectory-store.d.ts +210 -20
  91. package/dist/sandbox/capability-probe.d.ts +40 -1
  92. package/dist/sandbox/executor.d.ts +26 -1
  93. package/dist/sandbox/linux/bubblewrap-executor.d.ts +3 -1
  94. package/dist/sandbox/macos/sandbox-exec-executor.d.ts +3 -1
  95. package/dist/sandbox/skip-state.d.ts +24 -0
  96. package/dist/sandbox/win32/native-sandbox-executor.d.ts +5 -1
  97. package/dist/security/command-classifier.d.ts +22 -0
  98. package/dist/security/protected-input-integrity.d.ts +19 -0
  99. package/dist/security/protected-path-policy.d.ts +9 -0
  100. package/dist/security/write-authority.d.ts +46 -0
  101. package/dist/services/diagnose-service.d.ts +1 -1
  102. package/dist/services/skill-generator.d.ts +2 -0
  103. package/dist/services/skill-improver.d.ts +69 -0
  104. package/dist/telemetry.d.ts +21 -1
  105. package/dist/tools/dispatch-lanes.d.ts +47 -0
  106. package/dist/tools/repo-graph/query.d.ts +2 -1
  107. package/dist/tools/repo-graph/types.d.ts +64 -0
  108. package/dist/tools/repo-graph.d.ts +1 -1
  109. package/dist/tools/skill-improve.d.ts +7 -0
  110. package/dist/utils/atomic-write.d.ts +2 -0
  111. package/dist/utils/canonical-root.d.ts +31 -0
  112. package/dist/workflow/coder-settlement.d.ts +2 -0
  113. package/dist/worktree/index.d.ts +2 -2
  114. package/dist/worktree/merge.d.ts +47 -0
  115. package/package.json +2 -1
  116. package/dist/cli/curator-llm-factory-462rysph.js +0 -65
  117. package/dist/cli/guardrail-explain-7620hasq.js +0 -66
  118. package/dist/cli/index-3g0xk6tk.js +0 -219
  119. package/dist/cli/index-fxvgaeq4.js +0 -125
  120. package/dist/cli/worktree-provisioning-owner-cve95q4f.js +0 -22
  121. package/dist/cli/{curator-drift-2h1d2fnq.js → curator-drift-h57z6tm3.js} +1 -1
@@ -0,0 +1,239 @@
1
+ // @bun
2
+ import {
3
+ validateSwarmPath
4
+ } from "./index-4cgee5vh.js";
5
+ import {
6
+ atomicWriteSwarmFileSync
7
+ } from "./index-td0jz8xe.js";
8
+
9
+ // src/hooks/delegation-gate/worktree-provisioning-owner.ts
10
+ import { createHash } from "crypto";
11
+ import * as fs from "fs";
12
+ import * as path from "path";
13
+ var PROVISIONING_OWNER_DIR = "worktree-provisioning-owners";
14
+ var MAX_PROVISIONING_OWNERS = 512;
15
+ var MAX_PROVISIONING_OWNER_BYTES = 16 * 1024;
16
+ var PROVISIONING_JOURNAL_PATH = path.join(".swarm", "worktree-provisioning-lifecycle.json");
17
+ var MAX_PROVISIONING_JOURNAL_BYTES = 256 * 1024;
18
+ var MAX_PROVISIONING_JOURNAL_ENTRIES = 512;
19
+ var WORKTREE_PROVISIONING_OWNER_LEASE_MS = 5 * 60 * 1000;
20
+ var WORKTREE_LIFECYCLE_LOCK_FILE = ".swarm/locks/init-orphan-recovery.lock";
21
+ var WORKTREE_PROVISIONING_LIFECYCLE_STATES = [
22
+ "OWNER_PUBLISHED",
23
+ "OWNER_REMOVED"
24
+ ];
25
+ function ownerDirectory(directory) {
26
+ return path.dirname(validateSwarmPath(directory, path.join(PROVISIONING_OWNER_DIR, ".containment-anchor")));
27
+ }
28
+ function ownerPath(directory, callID) {
29
+ const digest = createHash("sha256").update(callID).digest("hex");
30
+ return validateSwarmPath(directory, path.join(PROVISIONING_OWNER_DIR, `${digest}.json`));
31
+ }
32
+ function journalPath(directory) {
33
+ return validateSwarmPath(directory, PROVISIONING_JOURNAL_PATH);
34
+ }
35
+ function isOwner(value) {
36
+ if (!value || typeof value !== "object" || Array.isArray(value))
37
+ return false;
38
+ const candidate = value;
39
+ const schemaVersion = candidate.schemaVersion;
40
+ const validTaskIdentity = schemaVersion === 1 ? candidate.taskId === undefined && candidate.reservationId === undefined && candidate.generation === undefined && candidate.branchName === undefined : schemaVersion === 2 && typeof candidate.taskId === "string" && candidate.taskId.length > 0 && candidate.taskId.length <= 512 && candidate.reservationId === undefined && candidate.generation === undefined && candidate.branchName === undefined;
41
+ const validV3Identity = schemaVersion === 3 && typeof candidate.taskId === "string" && candidate.taskId.length > 0 && candidate.taskId.length <= 512 && typeof candidate.reservationId === "string" && candidate.reservationId.length > 0 && candidate.reservationId.length <= 512 && typeof candidate.generation === "number" && Number.isInteger(candidate.generation) && candidate.generation > 0 && typeof candidate.branchName === "string" && candidate.branchName.length > 0 && candidate.branchName.length <= 1024;
42
+ return (schemaVersion === 1 || schemaVersion === 2 || schemaVersion === 3) && (validTaskIdentity || validV3Identity) && typeof candidate.callID === "string" && candidate.callID.length > 0 && candidate.callID.length <= 512 && typeof candidate.parentSessionId === "string" && candidate.parentSessionId.length > 0 && candidate.parentSessionId.length <= 512 && typeof candidate.worktreeSessionId === "string" && candidate.worktreeSessionId.length > 0 && candidate.worktreeSessionId.length <= 512 && typeof candidate.createdAt === "number" && Number.isFinite(candidate.createdAt) && candidate.createdAt >= 0;
43
+ }
44
+ function isLifecycleEntry(value) {
45
+ if (!value || typeof value !== "object" || Array.isArray(value))
46
+ return false;
47
+ const candidate = value;
48
+ const validState = WORKTREE_PROVISIONING_LIFECYCLE_STATES.includes(candidate.state);
49
+ return candidate.schemaVersion === 1 && validState && typeof candidate.callID === "string" && candidate.callID.length > 0 && candidate.callID.length <= 512 && typeof candidate.parentSessionId === "string" && candidate.parentSessionId.length > 0 && candidate.parentSessionId.length <= 512 && typeof candidate.worktreeSessionId === "string" && candidate.worktreeSessionId.length > 0 && candidate.worktreeSessionId.length <= 512 && (candidate.taskId === undefined || typeof candidate.taskId === "string" && candidate.taskId.length > 0 && candidate.taskId.length <= 512) && (candidate.reservationId === undefined || typeof candidate.reservationId === "string" && candidate.reservationId.length > 0 && candidate.reservationId.length <= 512) && (candidate.generation === undefined || typeof candidate.generation === "number" && Number.isInteger(candidate.generation) && candidate.generation > 0) && (candidate.branchName === undefined || typeof candidate.branchName === "string" && candidate.branchName.length > 0 && candidate.branchName.length <= 1024) && typeof candidate.recordedAt === "number" && Number.isFinite(candidate.recordedAt) && candidate.recordedAt >= 0;
50
+ }
51
+ function readBoundedJsonFile(filePath, maxBytes) {
52
+ try {
53
+ const stat = fs.statSync(filePath);
54
+ if (stat.size > maxBytes) {
55
+ return {
56
+ ok: false,
57
+ reason: `${path.basename(filePath)} exceeds the ${maxBytes}-byte safety bound`
58
+ };
59
+ }
60
+ const raw = fs.readFileSync(filePath, "utf8");
61
+ if (Buffer.byteLength(raw, "utf8") > maxBytes) {
62
+ return {
63
+ ok: false,
64
+ reason: `${path.basename(filePath)} changed beyond the ${maxBytes}-byte safety bound`
65
+ };
66
+ }
67
+ return { ok: true, value: JSON.parse(raw) };
68
+ } catch (error) {
69
+ if (error.code === "ENOENT") {
70
+ return { ok: true, value: undefined };
71
+ }
72
+ return {
73
+ ok: false,
74
+ reason: `${path.basename(filePath)} is unreadable or malformed: ${error instanceof Error ? error.message : String(error)}`
75
+ };
76
+ }
77
+ }
78
+ function readOwner(directory, callID) {
79
+ const absolutePath = ownerPath(directory, callID);
80
+ const loaded = readBoundedJsonFile(absolutePath, MAX_PROVISIONING_OWNER_BYTES);
81
+ if (!loaded.ok || loaded.value === undefined)
82
+ return null;
83
+ return isOwner(loaded.value) ? loaded.value : null;
84
+ }
85
+ function loadLifecycleJournal(directory) {
86
+ const loaded = readBoundedJsonFile(journalPath(directory), MAX_PROVISIONING_JOURNAL_BYTES);
87
+ if (!loaded.ok)
88
+ return { status: "uncertain", reason: loaded.reason };
89
+ if (loaded.value === undefined)
90
+ return { status: "ok", entries: [] };
91
+ const parsed = loaded.value;
92
+ if (parsed.schemaVersion !== 1 || !Array.isArray(parsed.entries)) {
93
+ return {
94
+ status: "uncertain",
95
+ reason: "worktree provisioning lifecycle journal is malformed"
96
+ };
97
+ }
98
+ if (parsed.entries.length > MAX_PROVISIONING_JOURNAL_ENTRIES) {
99
+ return {
100
+ status: "uncertain",
101
+ reason: `worktree provisioning lifecycle journal exceeds the ${MAX_PROVISIONING_JOURNAL_ENTRIES}-entry safety bound`
102
+ };
103
+ }
104
+ const entries = [];
105
+ for (const entry of parsed.entries) {
106
+ if (!isLifecycleEntry(entry)) {
107
+ return {
108
+ status: "uncertain",
109
+ reason: "worktree provisioning lifecycle journal contains an invalid entry"
110
+ };
111
+ }
112
+ entries.push(entry);
113
+ }
114
+ return { status: "ok", entries };
115
+ }
116
+ function appendLifecycleEntry(directory, owner, state) {
117
+ const loaded = loadLifecycleJournal(directory);
118
+ if (loaded.status === "uncertain") {
119
+ throw new Error(loaded.reason);
120
+ }
121
+ const entries = [
122
+ ...loaded.entries,
123
+ {
124
+ schemaVersion: 1,
125
+ state,
126
+ callID: owner.callID,
127
+ parentSessionId: owner.parentSessionId,
128
+ worktreeSessionId: owner.worktreeSessionId,
129
+ ...owner.taskId ? { taskId: owner.taskId } : {},
130
+ ...owner.reservationId ? { reservationId: owner.reservationId } : {},
131
+ ...owner.generation !== undefined ? { generation: owner.generation } : {},
132
+ ...owner.branchName ? { branchName: owner.branchName } : {},
133
+ recordedAt: Date.now()
134
+ }
135
+ ];
136
+ const journal = {
137
+ schemaVersion: 1,
138
+ entries: entries.slice(-MAX_PROVISIONING_JOURNAL_ENTRIES)
139
+ };
140
+ atomicWriteSwarmFileSync(journalPath(directory), JSON.stringify(journal, null, 2));
141
+ }
142
+ function recordWorktreeProvisioningOwner(directory, input) {
143
+ const wantsV3 = input.reservationId !== undefined || input.generation !== undefined || input.branchName !== undefined;
144
+ if (wantsV3 && (!input.taskId || !input.reservationId || input.generation === undefined || !input.branchName)) {
145
+ throw new Error("worktree provisioning owner v3 requires taskId, reservationId, generation, and branchName");
146
+ }
147
+ const owner = {
148
+ schemaVersion: wantsV3 ? 3 : input.taskId ? 2 : 1,
149
+ callID: input.callID,
150
+ parentSessionId: input.parentSessionId,
151
+ worktreeSessionId: input.worktreeSessionId,
152
+ ...input.taskId ? { taskId: input.taskId } : {},
153
+ ...input.reservationId ? { reservationId: input.reservationId } : {},
154
+ ...input.generation !== undefined ? { generation: input.generation } : {},
155
+ ...input.branchName ? { branchName: input.branchName } : {},
156
+ createdAt: Date.now()
157
+ };
158
+ if (!isOwner(owner)) {
159
+ throw new Error("invalid worktree provisioning owner");
160
+ }
161
+ const absolutePath = ownerPath(directory, input.callID);
162
+ fs.mkdirSync(path.dirname(absolutePath), { recursive: true });
163
+ atomicWriteSwarmFileSync(absolutePath, `${JSON.stringify(owner)}
164
+ `);
165
+ appendLifecycleEntry(directory, owner, "OWNER_PUBLISHED");
166
+ return owner;
167
+ }
168
+ function removeWorktreeProvisioningOwner(directory, callID, expected) {
169
+ try {
170
+ const owner = readOwner(directory, callID);
171
+ if (owner?.schemaVersion === 3 && (!expected || expected.reservationId !== owner.reservationId || expected.generation !== owner.generation || expected.branchName !== owner.branchName)) {
172
+ return false;
173
+ }
174
+ fs.unlinkSync(ownerPath(directory, callID));
175
+ if (owner)
176
+ appendLifecycleEntry(directory, owner, "OWNER_REMOVED");
177
+ return true;
178
+ } catch (error) {
179
+ return error.code === "ENOENT";
180
+ }
181
+ }
182
+ function scanWorktreeProvisioningOwnersForRecovery(directory) {
183
+ let directoryPath;
184
+ let entries;
185
+ try {
186
+ directoryPath = ownerDirectory(directory);
187
+ entries = fs.readdirSync(directoryPath, { withFileTypes: true }).filter((entry) => entry.isFile() && entry.name.endsWith(".json"));
188
+ } catch (error) {
189
+ if (error.code === "ENOENT") {
190
+ return { status: "ok", owners: [] };
191
+ }
192
+ return {
193
+ status: "uncertain",
194
+ reason: `worktree provisioning-owner directory is unreadable: ${error instanceof Error ? error.message : String(error)}`
195
+ };
196
+ }
197
+ if (entries.length > MAX_PROVISIONING_OWNERS) {
198
+ return {
199
+ status: "uncertain",
200
+ reason: `worktree provisioning-owner count exceeds the ${MAX_PROVISIONING_OWNERS}-marker safety bound`
201
+ };
202
+ }
203
+ const owners = [];
204
+ for (const entry of entries) {
205
+ const absolutePath = path.join(directoryPath, entry.name);
206
+ try {
207
+ const stat = fs.statSync(absolutePath);
208
+ if (stat.size > MAX_PROVISIONING_OWNER_BYTES) {
209
+ return {
210
+ status: "uncertain",
211
+ reason: `worktree provisioning owner "${entry.name}" exceeds the recovery size bound`
212
+ };
213
+ }
214
+ const raw = fs.readFileSync(absolutePath, "utf8");
215
+ if (Buffer.byteLength(raw, "utf8") > MAX_PROVISIONING_OWNER_BYTES) {
216
+ return {
217
+ status: "uncertain",
218
+ reason: `worktree provisioning owner "${entry.name}" changed beyond the recovery size bound`
219
+ };
220
+ }
221
+ const parsed = JSON.parse(raw);
222
+ if (!isOwner(parsed)) {
223
+ return {
224
+ status: "uncertain",
225
+ reason: `worktree provisioning owner "${entry.name}" is invalid`
226
+ };
227
+ }
228
+ owners.push(parsed);
229
+ } catch (error) {
230
+ return {
231
+ status: "uncertain",
232
+ reason: `worktree provisioning owner "${entry.name}" is unreadable or malformed: ${error instanceof Error ? error.message : String(error)}`
233
+ };
234
+ }
235
+ }
236
+ return { status: "ok", owners };
237
+ }
238
+
239
+ export { WORKTREE_PROVISIONING_OWNER_LEASE_MS, WORKTREE_LIFECYCLE_LOCK_FILE, recordWorktreeProvisioningOwner, removeWorktreeProvisioningOwner, scanWorktreeProvisioningOwnersForRecovery };
@@ -7,7 +7,7 @@ import {
7
7
  readLinkPointer,
8
8
  resolveKnowledgeStoreDir,
9
9
  resolveLinkDir
10
- } from "./index-79g6edht.js";
10
+ } from "./index-x3y6zhgj.js";
11
11
 
12
12
  // src/knowledge/curation-policy.ts
13
13
  import { appendFile, mkdir as mkdir2, readFile as readFile2 } from "fs/promises";