@nyte-ai/core 0.0.18 → 0.0.19

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 (175) hide show
  1. package/README.md +1 -1
  2. package/THIRD-PARTY-NOTICES.md +66 -0
  3. package/dist/chunks/{compose-q1b0tppc.js → compose-0827b2k4.js} +4 -4
  4. package/dist/chunks/{compose-j3tkz0tb.js → compose-1g03zpvn.js} +6 -6
  5. package/dist/chunks/{compose-2g3enfv5.js → compose-31zqcfte.js} +4 -4
  6. package/dist/chunks/{compose-4b1zf3p0.js → compose-4770pb1s.js} +62 -46
  7. package/dist/chunks/{compose-madtxnp1.js → compose-47f47sgy.js} +7 -7
  8. package/dist/chunks/{compose-1z7q169s.js → compose-5489evqa.js} +67 -39
  9. package/dist/chunks/{compose-yk3y0jap.js → compose-54svedb8.js} +7 -7
  10. package/dist/chunks/{compose-9tqm6g18.js → compose-57j0pme0.js} +4 -4
  11. package/dist/chunks/{compose-k8aghhv2.js → compose-5cmp34zp.js} +16 -16
  12. package/dist/chunks/compose-5rg7askh.js +52 -0
  13. package/dist/chunks/{compose-mryw0674.js → compose-5z835ej2.js} +6 -1
  14. package/dist/chunks/{compose-7k6nsmtq.js → compose-6gt28900.js} +11 -14
  15. package/dist/chunks/{compose-q1n2dgrs.js → compose-6m60v1pk.js} +4 -4
  16. package/dist/chunks/{compose-2eg8w67t.js → compose-6r5ymwyr.js} +15 -4
  17. package/dist/chunks/{compose-q1ts0v6k.js → compose-767bb340.js} +1 -1
  18. package/dist/chunks/{compose-pgeemk2b.js → compose-a7k9h27z.js} +6 -5
  19. package/dist/chunks/{compose-wgphshsn.js → compose-azq5jxr2.js} +7 -7
  20. package/dist/chunks/compose-bd8c5n7k.js +32 -0
  21. package/dist/chunks/{compose-drdej9yt.js → compose-c2rnebv0.js} +3 -3
  22. package/dist/chunks/compose-c4238qkb.js +105 -0
  23. package/dist/chunks/{compose-djq2bt61.js → compose-ccrh32hd.js} +6 -6
  24. package/dist/chunks/{compose-kb22bkpt.js → compose-cqpjcx2t.js} +12 -1
  25. package/dist/chunks/{compose-dbx6ftbm.js → compose-csh5vv2t.js} +42 -4
  26. package/dist/chunks/{compose-jc22rsz4.js → compose-dbsn3bsy.js} +2 -2
  27. package/dist/chunks/{compose-rehp8epe.js → compose-eemt6sea.js} +7 -7
  28. package/dist/chunks/{compose-r7dx7rpz.js → compose-exfx5b4d.js} +72 -15
  29. package/dist/chunks/{compose-p3q14yt1.js → compose-g2a1f1yx.js} +5 -5
  30. package/dist/chunks/compose-gvm49f4b.js +155 -0
  31. package/dist/chunks/{compose-9m19b27b.js → compose-gvrqkyn4.js} +7 -7
  32. package/dist/chunks/{compose-1jz2j92f.js → compose-gxjc6vz9.js} +30 -2
  33. package/dist/chunks/{compose-s2aew2c9.js → compose-gxvetm0j.js} +5 -5
  34. package/dist/chunks/{compose-cq1zx4gp.js → compose-h14pmqv3.js} +1 -1
  35. package/dist/chunks/{compose-5w5bbakh.js → compose-h3pch7ch.js} +5 -5
  36. package/dist/chunks/{compose-r12cnkpc.js → compose-hf6xkwdw.js} +10 -10
  37. package/dist/chunks/{compose-aa73dbe8.js → compose-hms4hf6p.js} +92 -49
  38. package/dist/chunks/{compose-jjchxce6.js → compose-j42p9wfs.js} +1 -1
  39. package/dist/chunks/{compose-vmhv4e00.js → compose-jehg40ce.js} +13 -12
  40. package/dist/chunks/{compose-5tkyrzr0.js → compose-jhs91x01.js} +4 -4
  41. package/dist/chunks/{compose-xd0kdp3t.js → compose-jrqn6xhy.js} +8 -8
  42. package/dist/chunks/{compose-ef936rsa.js → compose-ks2rdteq.js} +27 -11
  43. package/dist/chunks/{compose-k35b75k9.js → compose-kwkna3cg.js} +2 -4
  44. package/dist/chunks/{compose-gaps3heh.js → compose-m1ecjzm2.js} +8 -8
  45. package/dist/chunks/{compose-xtkavyrw.js → compose-m6nsbnkk.js} +17 -9
  46. package/dist/chunks/{compose-y478gv6x.js → compose-mamr4qwf.js} +4 -4
  47. package/dist/chunks/{compose-j12n448k.js → compose-nj4nj5n9.js} +36 -3
  48. package/dist/chunks/{compose-cdy4q5mv.js → compose-pe0cgbv0.js} +17 -16
  49. package/dist/chunks/{compose-xpfr4wt3.js → compose-pnsvwd3m.js} +7 -4
  50. package/dist/chunks/{compose-52afaf3v.js → compose-prchdrqk.js} +7 -7
  51. package/dist/chunks/{compose-7pc3p5ex.js → compose-q1d09qpr.js} +8 -8
  52. package/dist/chunks/{compose-amr0k1m1.js → compose-q1rrtq3a.js} +2 -2
  53. package/dist/chunks/{compose-0bpspysf.js → compose-qknd62yj.js} +5 -5
  54. package/dist/chunks/{compose-b5xz0dj7.js → compose-qwbe95qs.js} +2 -2
  55. package/dist/chunks/{compose-064y3n82.js → compose-r1pxdxbw.js} +5 -5
  56. package/dist/chunks/{compose-7b8ajk7a.js → compose-rd5e5nxg.js} +8 -8
  57. package/dist/chunks/{compose-gg8b9b21.js → compose-s5522cth.js} +23 -18
  58. package/dist/chunks/{compose-t53j8yxv.js → compose-se7wwcq1.js} +1 -1
  59. package/dist/chunks/{compose-dc2ns6gd.js → compose-seyhq3fb.js} +10 -10
  60. package/dist/chunks/{compose-ffk8dnbh.js → compose-smsafpqe.js} +3 -3
  61. package/dist/chunks/{compose-eqr5qwp1.js → compose-tb5ywdfk.js} +56 -21
  62. package/dist/chunks/{compose-dckpgtks.js → compose-ts08bth2.js} +3 -3
  63. package/dist/chunks/{compose-1gd9vkye.js → compose-v9yf9mrh.js} +3 -3
  64. package/dist/chunks/{compose-n10w4nkk.js → compose-vn7b7fdj.js} +12 -3
  65. package/dist/chunks/{compose-kmzr06mw.js → compose-w2ac7xjx.js} +8 -5
  66. package/dist/chunks/{compose-rpq9n0nz.js → compose-xaegezm3.js} +84 -26
  67. package/dist/chunks/{compose-6vf6dkk2.js → compose-xhtgytrh.js} +2 -2
  68. package/dist/chunks/{compose-4tb2vn84.js → compose-y6xgbg2h.js} +1 -1
  69. package/dist/chunks/{compose-yn2et568.js → compose-y9c31w4e.js} +118 -9
  70. package/dist/chunks/{compose-h272znxk.js → compose-z6hbq6y0.js} +7 -7
  71. package/dist/chunks/{compose-d2s80zg2.js → compose-zch4zapc.js} +5 -5
  72. package/dist/src/agent/compaction.js +39 -37
  73. package/dist/src/agent/images.d.ts +7 -0
  74. package/dist/src/agent/images.js +8 -0
  75. package/dist/src/agent/request.js +28 -28
  76. package/dist/src/agent/tool-runner.d.ts +1 -7
  77. package/dist/src/agent/tool-runner.js +29 -28
  78. package/dist/src/agent/transcript.d.ts +0 -1
  79. package/dist/src/agent/transcript.js +35 -33
  80. package/dist/src/agent/turn.js +43 -41
  81. package/dist/src/api/connection.js +56 -53
  82. package/dist/src/api/head.js +39 -39
  83. package/dist/src/api/part.js +20 -20
  84. package/dist/src/api/server.js +45 -42
  85. package/dist/src/api/session.js +44 -44
  86. package/dist/src/builtins/environment.js +1 -1
  87. package/dist/src/compose.d.ts +6 -7
  88. package/dist/src/compose.js +68 -64
  89. package/dist/src/contract/fold.d.ts +1 -3
  90. package/dist/src/contract/host.d.ts +30 -1
  91. package/dist/src/contract/host.js +4 -2
  92. package/dist/src/contract/kernel.d.ts +6 -35
  93. package/dist/src/contract/records.d.ts +69 -3
  94. package/dist/src/contract/records.js +5 -1
  95. package/dist/src/contract/session.d.ts +2 -1
  96. package/dist/src/contract/workspace.d.ts +5 -3
  97. package/dist/src/drive/execution.js +43 -40
  98. package/dist/src/drive/interruptions.d.ts +7 -0
  99. package/dist/src/drive/interruptions.js +17 -0
  100. package/dist/src/engine/admission.js +22 -22
  101. package/dist/src/engine/batches.js +21 -21
  102. package/dist/src/engine/branch-summary.js +20 -20
  103. package/dist/src/engine/durable.d.ts +0 -2
  104. package/dist/src/engine/durable.js +19 -19
  105. package/dist/src/engine/fence.js +19 -19
  106. package/dist/src/engine/jobs.d.ts +1 -0
  107. package/dist/src/engine/jobs.js +27 -25
  108. package/dist/src/engine/move.js +22 -22
  109. package/dist/src/engine/presence.d.ts +39 -0
  110. package/dist/src/engine/presence.js +16 -0
  111. package/dist/src/engine/principals.js +16 -16
  112. package/dist/src/engine/receipts.js +20 -20
  113. package/dist/src/engine/runs.d.ts +1 -1
  114. package/dist/src/engine/runs.js +23 -23
  115. package/dist/src/engine/start.js +33 -33
  116. package/dist/src/engine/surface.d.ts +4 -0
  117. package/dist/src/engine/surface.js +13 -0
  118. package/dist/src/engine/waits.d.ts +5 -15
  119. package/dist/src/engine/waits.js +22 -18
  120. package/dist/src/env/browser.js +25 -25
  121. package/dist/src/env/environment.js +27 -27
  122. package/dist/src/env/mcp.js +29 -29
  123. package/dist/src/env/trust.js +28 -28
  124. package/dist/src/env/workspaces.js +31 -31
  125. package/dist/src/env/worktrees.js +32 -32
  126. package/dist/src/extend/activation.js +32 -32
  127. package/dist/src/extend/hooks.js +21 -21
  128. package/dist/src/extend/models.d.ts +2 -1
  129. package/dist/src/extend/models.js +30 -28
  130. package/dist/src/extend/plugin-api.js +17 -17
  131. package/dist/src/extend/plugin-runtime.js +38 -38
  132. package/dist/src/extend/registry.js +25 -25
  133. package/dist/src/extend/resources.js +29 -29
  134. package/dist/src/extend/setting-layers.js +4 -4
  135. package/dist/src/extend/settings.js +35 -35
  136. package/dist/src/extend/workspace-commands.js +39 -39
  137. package/dist/src/fold/calls.js +5 -5
  138. package/dist/src/fold/checkpoint.js +11 -11
  139. package/dist/src/fold/code.d.ts +1 -2
  140. package/dist/src/fold/code.js +1 -1
  141. package/dist/src/fold/commit.d.ts +0 -4
  142. package/dist/src/fold/commit.js +15 -15
  143. package/dist/src/fold/draft.js +4 -4
  144. package/dist/src/fold/fold.js +7 -7
  145. package/dist/src/fold/paths.js +5 -5
  146. package/dist/src/fold/project.d.ts +3 -1
  147. package/dist/src/fold/project.js +8 -6
  148. package/dist/src/fold/reads.js +5 -5
  149. package/dist/src/fold/seen.js +18 -18
  150. package/dist/src/fold/view.d.ts +1 -1
  151. package/dist/src/fold/view.js +19 -19
  152. package/dist/src/fold/watch.js +14 -14
  153. package/dist/src/harness.d.ts +2 -1
  154. package/dist/src/harness.js +71 -67
  155. package/dist/src/index.d.ts +2 -2
  156. package/dist/src/index.js +4 -2
  157. package/dist/src/server.js +66 -62
  158. package/dist/src/store/inspect.js +4 -4
  159. package/dist/src/store/log.d.ts +0 -2
  160. package/dist/src/store/log.js +2 -2
  161. package/dist/src/store/memory-store.js +5 -5
  162. package/dist/src/store/migrations.js +3 -3
  163. package/dist/src/store/model-state.d.ts +6 -1
  164. package/dist/src/store/model-state.js +14 -4
  165. package/dist/src/store/parts.js +4 -4
  166. package/dist/src/store/refs.d.ts +6 -5
  167. package/dist/src/store/refs.js +11 -1
  168. package/dist/src/store/session-index.js +2 -2
  169. package/dist/src/store/session.d.ts +3 -1
  170. package/dist/src/store/session.js +5 -3
  171. package/dist/src/store.d.ts +1 -1
  172. package/dist/src/store.js +11 -7
  173. package/dist/src/testing.d.ts +2 -0
  174. package/dist/src/testing.js +77 -65
  175. package/package.json +4 -4
@@ -1,7 +1,10 @@
1
+ import {
2
+ CORE_CONTEXT2
3
+ } from "./compose-5z835ej2.js";
1
4
  import {
2
5
  decodeSessionRecord2,
3
6
  decodeSeenRecord2
4
- } from "./compose-1jz2j92f.js";
7
+ } from "./compose-gxjc6vz9.js";
5
8
  import {
6
9
  objectId2
7
10
  } from "./compose-q6c7wswc.js";
@@ -10,7 +13,7 @@ import {
10
13
  headRef2,
11
14
  seenRef2,
12
15
  workspaceRef2
13
- } from "./compose-kb22bkpt.js";
16
+ } from "./compose-cqpjcx2t.js";
14
17
  import {
15
18
  MAIN2,
16
19
  STALE2,
@@ -24,7 +27,7 @@ import {
24
27
  attempt2,
25
28
  coversRecord2,
26
29
  sessionEvent2
27
- } from "./compose-n10w4nkk.js";
30
+ } from "./compose-vn7b7fdj.js";
28
31
  import {
29
32
  traced2,
30
33
  followTrace2,
@@ -32,10 +35,10 @@ import {
32
35
  } from "./compose-sd0stm97.js";
33
36
  import {
34
37
  commit2
35
- } from "./compose-xpfr4wt3.js";
38
+ } from "./compose-pnsvwd3m.js";
36
39
  import {
37
40
  stopRun2
38
- } from "./compose-9m19b27b.js";
41
+ } from "./compose-gvrqkyn4.js";
39
42
  import {
40
43
  refusalError2,
41
44
  staticContributions2
@@ -44,17 +47,17 @@ import {
44
47
  receiptHandle2,
45
48
  sendReceipt2,
46
49
  withdraw2
47
- } from "./compose-52afaf3v.js";
50
+ } from "./compose-prchdrqk.js";
48
51
  import {
49
52
  sendNow2,
50
53
  admitDeciding2
51
- } from "./compose-cdy4q5mv.js";
54
+ } from "./compose-pe0cgbv0.js";
52
55
  import {
53
56
  recordAcquisition2
54
- } from "./compose-rehp8epe.js";
57
+ } from "./compose-eemt6sea.js";
55
58
  import {
56
59
  runHandle2
57
- } from "./compose-vmhv4e00.js";
60
+ } from "./compose-jehg40ce.js";
58
61
  import {
59
62
  latest2,
60
63
  closable2,
@@ -63,29 +66,29 @@ import {
63
66
  import {
64
67
  isolateWorkspace2,
65
68
  releaseWorktree2
66
- } from "./compose-s2aew2c9.js";
69
+ } from "./compose-gxvetm0j.js";
67
70
  import {
68
71
  releaseStart2,
69
72
  stopStart2,
70
73
  discardSession2
71
- } from "./compose-dc2ns6gd.js";
74
+ } from "./compose-seyhq3fb.js";
72
75
  import {
73
76
  runCommand2,
74
77
  completeSessionCommand2
75
- } from "./compose-064y3n82.js";
78
+ } from "./compose-r1pxdxbw.js";
76
79
  import {
77
80
  configure2
78
- } from "./compose-xd0kdp3t.js";
81
+ } from "./compose-jrqn6xhy.js";
79
82
  import {
80
83
  headHandle2,
81
84
  createHead2,
82
85
  mergeHead2,
83
86
  removeHead2
84
- } from "./compose-xtkavyrw.js";
87
+ } from "./compose-m6nsbnkk.js";
85
88
  import {
86
89
  createPart2,
87
90
  partHandle2
88
- } from "./compose-wgphshsn.js";
91
+ } from "./compose-azq5jxr2.js";
89
92
 
90
93
  // src/api/session.ts
91
94
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -301,11 +304,11 @@ async function start(kernel, context, input) {
301
304
  const trace = (origin === null ? null : followedTrace2(origin.session)) ?? receipt;
302
305
  followTrace2(id, trace);
303
306
  return traced2("host.admit", trace, { session: id }, async () => {
304
- await attempt2(`Starting ${id}`, async () => {
307
+ const chosen = await attempt2(`Starting ${id}`, async () => {
305
308
  if (await readSession2(kernel.store, id) !== null) {
306
309
  const started = (await readReceipt2(kernel.store, id, receipt))?.record;
307
310
  if (started?.kind === "send" && started.digest === digest)
308
- return id;
311
+ return null;
309
312
  throw new SdkError("invalid", `Session ${id} already exists.`);
310
313
  }
311
314
  const parent = input.parent === undefined ? null : await requireSession2(kernel.store, input.parent);
@@ -356,9 +359,11 @@ async function start(kernel, context, input) {
356
359
  principal: context.principal
357
360
  })
358
361
  ]);
359
- return outcome.kind === "set" ? id : STALE2;
362
+ return outcome.kind === "set" ? selected : STALE2;
360
363
  });
361
364
  await releaseStart2(kernel, context, id);
365
+ if (chosen !== null && context !== CORE_CONTEXT2 && origin === null && context.authority.has("owner"))
366
+ await kernel.rememberChoice(chosen, "model");
362
367
  return id;
363
368
  });
364
369
  }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./compose-q6c7wswc.js";
4
4
  import {
5
5
  acquire2
6
- } from "./compose-yn2et568.js";
6
+ } from "./compose-y9c31w4e.js";
7
7
 
8
8
  // src/env/browser.ts
9
9
  import { asId, asSeq, SdkError } from "@nyte-ai/schema";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  CORE_CONTEXT2,
3
3
  PARTICIPANT_AUTHORITY2
4
- } from "./compose-mryw0674.js";
4
+ } from "./compose-5z835ej2.js";
5
5
  import {
6
6
  sessionRef2,
7
7
  inboxRef2
8
- } from "./compose-kb22bkpt.js";
8
+ } from "./compose-cqpjcx2t.js";
9
9
  import {
10
10
  dev2
11
11
  } from "./compose-n116fnmp.js";
@@ -17,28 +17,28 @@ import {
17
17
  readInbox2,
18
18
  attempt2,
19
19
  sessionEvent2
20
- } from "./compose-n10w4nkk.js";
20
+ } from "./compose-vn7b7fdj.js";
21
21
  import {
22
22
  releaseParts2
23
- } from "./compose-drdej9yt.js";
23
+ } from "./compose-c2rnebv0.js";
24
24
  import {
25
25
  commit2
26
- } from "./compose-xpfr4wt3.js";
26
+ } from "./compose-pnsvwd3m.js";
27
27
  import {
28
28
  withFold2
29
- } from "./compose-6vf6dkk2.js";
29
+ } from "./compose-xhtgytrh.js";
30
30
  import {
31
31
  listSessionWaits2
32
- } from "./compose-ef936rsa.js";
32
+ } from "./compose-ks2rdteq.js";
33
33
  import {
34
34
  readmitDeciding2
35
- } from "./compose-cdy4q5mv.js";
35
+ } from "./compose-pe0cgbv0.js";
36
36
  import {
37
37
  dropScans2
38
- } from "./compose-y478gv6x.js";
38
+ } from "./compose-mamr4qwf.js";
39
39
  import {
40
40
  releaseWorktree2
41
- } from "./compose-s2aew2c9.js";
41
+ } from "./compose-gxvetm0j.js";
42
42
 
43
43
  // src/engine/start.ts
44
44
  import { SdkError } from "@nyte-ai/schema";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  decodeCommitRecord2
3
- } from "./compose-1jz2j92f.js";
3
+ } from "./compose-gxjc6vz9.js";
4
4
  import {
5
5
  sessionRef2
6
- } from "./compose-kb22bkpt.js";
6
+ } from "./compose-cqpjcx2t.js";
7
7
  import {
8
8
  toCommitObjectId2,
9
9
  readCommit2
10
- } from "./compose-n10w4nkk.js";
10
+ } from "./compose-vn7b7fdj.js";
11
11
 
12
12
  // src/store/inspect.ts
13
13
  import { asId, isJsonObject } from "@nyte-ai/schema";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  decodeRunRecord2
3
- } from "./compose-1jz2j92f.js";
3
+ } from "./compose-gxjc6vz9.js";
4
4
  import {
5
5
  objectId2
6
6
  } from "./compose-q6c7wswc.js";
@@ -8,44 +8,45 @@ import {
8
8
  runRef2,
9
9
  endedRunRef2,
10
10
  workspaceRef2
11
- } from "./compose-kb22bkpt.js";
11
+ } from "./compose-cqpjcx2t.js";
12
12
  import {
13
13
  MAIN2,
14
14
  STALE2,
15
15
  load2,
16
16
  readSession2,
17
17
  liveRuns2,
18
+ threadStart2,
18
19
  put2,
19
20
  attempt2,
20
21
  listSessionRecords2
21
- } from "./compose-n10w4nkk.js";
22
+ } from "./compose-vn7b7fdj.js";
23
+ import {
24
+ commit2
25
+ } from "./compose-pnsvwd3m.js";
22
26
  import {
23
27
  latest2,
24
28
  closable2,
25
29
  coalesce2
26
30
  } from "./compose-zfjxkavf.js";
27
- import {
28
- commit2
29
- } from "./compose-xpfr4wt3.js";
30
31
  import {
31
32
  createJobs2,
32
33
  jobHandle2
33
- } from "./compose-yn2et568.js";
34
+ } from "./compose-y9c31w4e.js";
34
35
  import {
35
36
  inspectWorkspaceAvailability2,
36
37
  readWorkspace2,
37
38
  workspaceRecords2
38
- } from "./compose-0bpspysf.js";
39
+ } from "./compose-qknd62yj.js";
39
40
  import {
40
41
  readFolderTrust2,
41
42
  decideTrust2
42
- } from "./compose-5w5bbakh.js";
43
+ } from "./compose-h3pch7ch.js";
43
44
  import {
44
45
  dropScans2
45
- } from "./compose-y478gv6x.js";
46
+ } from "./compose-mamr4qwf.js";
46
47
  import {
47
48
  mcpApi2
48
- } from "./compose-1gd9vkye.js";
49
+ } from "./compose-v9yf9mrh.js";
49
50
 
50
51
  // src/env/workspaces.ts
51
52
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -264,13 +265,13 @@ function workspaceHandle2(kernel, context, id, client = null) {
264
265
  },
265
266
  jobs: createJobs2(kernel, context, id),
266
267
  job: (job) => jobHandle2(kernel, job),
267
- async changes(run) {
268
+ async changes(source) {
268
269
  const found = await snapshots();
269
- const range = await runSnapshots(kernel.store, id, run);
270
- return found.diff(range?.from ?? await found.before(run), range?.to ?? await found.after(run));
270
+ const range = await changeRange(kernel.store, id, source, found);
271
+ return found.diff(range.from, range.to);
271
272
  },
272
- patches(run, paths, options) {
273
- return streamWorkspacePatches(kernel, { workspace: id, run, paths, options, snapshots });
273
+ patches(source, paths, options) {
274
+ return streamWorkspacePatches(kernel, { workspace: id, source, paths, options, snapshots });
274
275
  },
275
276
  files: async () => (await capabilities()).files,
276
277
  git: async () => (await capabilities()).git,
@@ -314,14 +315,12 @@ function settle2(kernel, session, workspace, activation) {
314
315
  changed2(kernel, workspace);
315
316
  }
316
317
  async function* streamWorkspacePatches(kernel, input) {
317
- const { run, options } = input;
318
+ const { source, options } = input;
318
319
  const snapshots = await input.snapshots();
319
- const range = await runSnapshots(kernel.store, input.workspace, run);
320
- const from = range?.from ?? await snapshots.before(run);
321
- const to = range?.to ?? await snapshots.after(run);
320
+ const { from, to } = await changeRange(kernel.store, input.workspace, source, snapshots);
322
321
  let statuses = null;
323
322
  const caches = kernel.workspaceState.patches;
324
- const key = JSON.stringify([input.workspace, run, options?.ignoreWhitespace === true]);
323
+ const key = JSON.stringify([input.workspace, source, options?.ignoreWhitespace === true]);
325
324
  const previous = caches.get(key);
326
325
  const current = previous?.revision === to ? previous : { revision: to, slots: new Map };
327
326
  caches.delete(key);
@@ -424,6 +423,42 @@ function limiter(size) {
424
423
  queue.push(run);
425
424
  });
426
425
  }
426
+ async function changeRange(store, workspace, source, snapshots) {
427
+ switch (source.kind) {
428
+ case "run": {
429
+ const range = await runSnapshots(store, workspace, source.run);
430
+ return {
431
+ from: range?.from ?? await snapshots.before(source.run),
432
+ to: range?.to ?? await snapshots.after(source.run)
433
+ };
434
+ }
435
+ case "session":
436
+ return sessionSnapshots(store, source.session, snapshots);
437
+ default: {
438
+ const _exhaustive = source;
439
+ return _exhaustive;
440
+ }
441
+ }
442
+ }
443
+ async function sessionSnapshots(store, session, snapshots) {
444
+ const [found, from] = await Promise.all([
445
+ readSession2(store, session),
446
+ threadStart2(store, session)
447
+ ]);
448
+ if (found === null || from === null)
449
+ throw new SdkError("unavailable", `No run of session ${session} has snapshotted its workspace.`);
450
+ const [live] = await liveRuns2(store, session);
451
+ if (live !== undefined)
452
+ return { from, to: await snapshots.after(live.record.view.id) };
453
+ const [last] = found.record.heads.flatMap((head) => head.lastRun === null ? [] : [head.lastRun]).toSorted((left, right) => right.endedAt - left.endedAt);
454
+ if (last === undefined)
455
+ return { from, to: from };
456
+ const ended = await load2(store, await store.refs.get(endedRunRef2(session, last.id)), decodeRunRecord2);
457
+ return {
458
+ from,
459
+ to: ended?.record.lastSnapshot ?? ended?.record.snapshot ?? await snapshots.after(last.id)
460
+ };
461
+ }
427
462
  async function runSnapshots(store, workspace, run) {
428
463
  for (const session of await sessionsOn2(store, workspace)) {
429
464
  const live = await load2(store, await store.refs.get(runRef2(session, run)), decodeRunRecord2);
@@ -4,18 +4,18 @@ import {
4
4
  } from "./compose-q6c7wswc.js";
5
5
  import {
6
6
  parseSessionRef2
7
- } from "./compose-kb22bkpt.js";
7
+ } from "./compose-cqpjcx2t.js";
8
8
  import {
9
9
  admits2,
10
10
  fenceNames2,
11
11
  collectSessionEvents2,
12
12
  loggedEvent2,
13
13
  decodeObject2
14
- } from "./compose-k35b75k9.js";
14
+ } from "./compose-kwkna3cg.js";
15
15
  import {
16
16
  sessionIndexRef2,
17
17
  projectSessionIndex2
18
- } from "./compose-4tb2vn84.js";
18
+ } from "./compose-y6xgbg2h.js";
19
19
 
20
20
  // src/store/memory-store.ts
21
21
  import { asId, asSeq } from "@nyte-ai/schema";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  requireSession2
3
- } from "./compose-n10w4nkk.js";
3
+ } from "./compose-vn7b7fdj.js";
4
4
  import {
5
5
  forwarded2
6
6
  } from "./compose-zfjxkavf.js";
7
7
  import {
8
8
  readWorkspace2
9
- } from "./compose-0bpspysf.js";
9
+ } from "./compose-qknd62yj.js";
10
10
  import {
11
11
  projectTrust2
12
- } from "./compose-5w5bbakh.js";
12
+ } from "./compose-h3pch7ch.js";
13
13
 
14
14
  // src/env/mcp.ts
15
15
  import { SdkError } from "@nyte-ai/schema";
@@ -7,7 +7,7 @@ import {
7
7
  decodeReceiptRecord2,
8
8
  decodeCallRecord2,
9
9
  decodeKvValue2
10
- } from "./compose-1jz2j92f.js";
10
+ } from "./compose-gxjc6vz9.js";
11
11
  import {
12
12
  dev2
13
13
  } from "./compose-n116fnmp.js";
@@ -17,7 +17,7 @@ import {
17
17
  inboxRef2,
18
18
  receiptRef2,
19
19
  callRef2
20
- } from "./compose-kb22bkpt.js";
20
+ } from "./compose-cqpjcx2t.js";
21
21
 
22
22
  // src/store/session.ts
23
23
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -72,6 +72,15 @@ async function liveRuns2(store, session) {
72
72
  const runs = await Promise.all(refs.map((ref) => load2(store, ref, decodeRunRecord2)));
73
73
  return runs.flatMap((run) => run === null ? [] : [run]);
74
74
  }
75
+ async function threadStart2(store, session) {
76
+ const refs = await Promise.all([
77
+ store.refs.list(`${sessionRef2(session)}/runs/`),
78
+ store.refs.list(`${sessionRef2(session)}/ended/`)
79
+ ]);
80
+ const runs = await Promise.all(refs.flat().map((ref) => load2(store, ref, decodeRunRecord2)));
81
+ const [first] = runs.flatMap((run) => run === null || run.record.snapshot === null ? [] : [run.record]).toSorted((left, right) => left.view.startedAt - right.view.startedAt);
82
+ return first?.snapshot ?? null;
83
+ }
75
84
  async function liveRun3(store, session, head) {
76
85
  return (await liveRuns2(store, session)).find((run) => run.record.view.head === head) ?? null;
77
86
  }
@@ -253,4 +262,4 @@ async function readKv2(store, name) {
253
262
  return ref === null || ref.target === null ? undefined : decodeKvValue2(await store.objects.get(ref.target));
254
263
  }
255
264
 
256
- export { MAIN2, EMPTY_REVISION2, START2, STALE2, load2, readSession2, requireSession2, readReceipt2, readTip2, readInbox2, inboxWithout2, liveRuns2, liveRun3, readRefExpectation2, sameRevision2, staleHead2, put2, attempt2, walkCommitPath2, readPositionCommit2, createPosition2, toCommitObjectId2, readCommit2, readCall2, readCalls2, covers2, listSessionRecords2, coveredSessions2, coveredHere2, coversRecord2, sessionEvent2, guard2, readKv2 };
265
+ export { MAIN2, EMPTY_REVISION2, START2, STALE2, load2, readSession2, requireSession2, readReceipt2, readTip2, readInbox2, inboxWithout2, liveRuns2, threadStart2, liveRun3, readRefExpectation2, sameRevision2, staleHead2, put2, attempt2, walkCommitPath2, readPositionCommit2, createPosition2, toCommitObjectId2, readCommit2, readCall2, readCalls2, covers2, listSessionRecords2, coveredSessions2, coveredHere2, coversRecord2, sessionEvent2, guard2, readKv2 };
@@ -9,11 +9,12 @@ import {
9
9
  } from "./compose-zfjxkavf.js";
10
10
  import {
11
11
  project2,
12
- readSeenCommit2
13
- } from "./compose-2eg8w67t.js";
12
+ readSeenCommit2,
13
+ findLeadingPrompt2
14
+ } from "./compose-6r5ymwyr.js";
14
15
  import {
15
16
  seenWriter2
16
- } from "./compose-d2s80zg2.js";
17
+ } from "./compose-zch4zapc.js";
17
18
 
18
19
  // src/fold/view.ts
19
20
  function watchHead2(kernel, input) {
@@ -78,13 +79,15 @@ async function historyHead2(kernel, input) {
78
79
  const messages = folded?.messages ?? [];
79
80
  const end = messages.findIndex((message) => message.id === input.before);
80
81
  if (folded === undefined || path === undefined || end < 0 || input.limit <= 0)
81
- return { messages: [], turns: [] };
82
- const page = messages.slice(Math.max(0, end - input.limit), end);
82
+ return { messages: [], leadingPrompt: null, turns: [] };
83
+ const start = Math.max(0, end - input.limit);
84
+ const page = messages.slice(start, end);
83
85
  const positions = [
84
86
  ...new Set(page.flatMap((message) => path.turnAt.get(message.turn) ?? []))
85
87
  ].toSorted((left, right) => left - right);
86
88
  return {
87
89
  messages: page,
90
+ leadingPrompt: findLeadingPrompt2(path, start),
88
91
  turns: positions.flatMap((position) => folded.turns[position] ?? [])
89
92
  };
90
93
  } finally {