@nyte-ai/core 0.0.19 → 0.0.21

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 (112) hide show
  1. package/dist/chunks/{compose-54svedb8.js → compose-0m65m83c.js} +7 -7
  2. package/dist/chunks/{compose-hf6xkwdw.js → compose-12jnd50a.js} +6 -6
  3. package/dist/chunks/{compose-6m60v1pk.js → compose-1knxqqm1.js} +3 -3
  4. package/dist/chunks/{compose-m6nsbnkk.js → compose-1r0wr5dc.js} +5 -5
  5. package/dist/chunks/{compose-57j0pme0.js → compose-2rha31fc.js} +3 -3
  6. package/dist/chunks/{compose-qknd62yj.js → compose-4ppmas7g.js} +2 -2
  7. package/dist/chunks/{compose-jrqn6xhy.js → compose-753gc057.js} +5 -5
  8. package/dist/chunks/{compose-xaegezm3.js → compose-8mkfr84d.js} +17 -18
  9. package/dist/chunks/{compose-h3pch7ch.js → compose-8pp3vtv0.js} +2 -2
  10. package/dist/chunks/{compose-m1ecjzm2.js → compose-9hy3p236.js} +7 -7
  11. package/dist/chunks/{compose-seyhq3fb.js → compose-a8ddt55n.js} +6 -6
  12. package/dist/chunks/{compose-rd5e5nxg.js → compose-ad80nkkn.js} +1 -1
  13. package/dist/chunks/{compose-r1pxdxbw.js → compose-ae5t6v5b.js} +2 -2
  14. package/dist/chunks/{compose-q1rrtq3a.js → compose-b2bf1jvy.js} +120 -39
  15. package/dist/chunks/{compose-pnsvwd3m.js → compose-bbhk8vnr.js} +1 -1
  16. package/dist/chunks/{compose-eemt6sea.js → compose-byse0eqj.js} +3 -3
  17. package/dist/chunks/{compose-ks2rdteq.js → compose-bz70g01d.js} +2 -2
  18. package/dist/chunks/{compose-0827b2k4.js → compose-c9wxgbjp.js} +1 -1
  19. package/dist/chunks/{compose-z6hbq6y0.js → compose-cdj05t7x.js} +4 -4
  20. package/dist/chunks/{compose-tb5ywdfk.js → compose-d1m94kzq.js} +13 -8
  21. package/dist/chunks/{compose-c2rnebv0.js → compose-d95fwwvw.js} +1 -1
  22. package/dist/chunks/{compose-gxvetm0j.js → compose-e2fyz3xc.js} +3 -3
  23. package/dist/chunks/{compose-s5522cth.js → compose-e9f6nrwp.js} +12 -12
  24. package/dist/chunks/{compose-prchdrqk.js → compose-fnncnk81.js} +3 -3
  25. package/dist/chunks/{compose-bjx8s01m.js → compose-fqsqjbrf.js} +1 -1
  26. package/dist/chunks/{compose-v9yf9mrh.js → compose-gj2ypr7q.js} +2 -2
  27. package/dist/chunks/{compose-zch4zapc.js → compose-hfrjm4a1.js} +1 -1
  28. package/dist/chunks/{compose-w2ac7xjx.js → compose-hfsn6pnt.js} +1 -1
  29. package/dist/chunks/{compose-4770pb1s.js → compose-jd4bsnqh.js} +3 -3
  30. package/dist/chunks/{compose-31zqcfte.js → compose-jeemzja1.js} +2 -2
  31. package/dist/chunks/{compose-mamr4qwf.js → compose-jmmyw9hd.js} +2 -2
  32. package/dist/chunks/{compose-jhs91x01.js → compose-jwy1gba9.js} +1 -1
  33. package/dist/chunks/{compose-se7wwcq1.js → compose-m01wspwf.js} +1 -1
  34. package/dist/chunks/{compose-n93897b0.js → compose-m91ffwss.js} +1 -1
  35. package/dist/chunks/{compose-47f47sgy.js → compose-matk94se.js} +4 -4
  36. package/dist/chunks/{compose-hms4hf6p.js → compose-mcz93154.js} +63 -47
  37. package/dist/chunks/{compose-exfx5b4d.js → compose-mdwr0er9.js} +2 -2
  38. package/dist/chunks/{compose-y9c31w4e.js → compose-nkxwrphm.js} +30 -13
  39. package/dist/chunks/{compose-5cmp34zp.js → compose-pkprmn5b.js} +11 -11
  40. package/dist/chunks/{compose-5489evqa.js → compose-q2zxbg41.js} +29 -29
  41. package/dist/chunks/{compose-jehg40ce.js → compose-qxfq6dn9.js} +5 -5
  42. package/dist/chunks/{compose-azq5jxr2.js → compose-r8tz1xfj.js} +4 -4
  43. package/dist/chunks/{compose-ccrh32hd.js → compose-sprfv38c.js} +2 -2
  44. package/dist/chunks/{compose-pe0cgbv0.js → compose-t9fcqtby.js} +4 -4
  45. package/dist/chunks/{compose-g2a1f1yx.js → compose-tppkp915.js} +2 -2
  46. package/dist/chunks/{compose-gvrqkyn4.js → compose-w6zb11k1.js} +3 -3
  47. package/dist/chunks/{compose-1g03zpvn.js → compose-wvzzf8n2.js} +5 -5
  48. package/dist/chunks/compose-yfcb6w2h.js +58 -0
  49. package/dist/chunks/{compose-0rx7ygxq.js → compose-zaanjpb7.js} +1 -1
  50. package/dist/chunks/{compose-q1d09qpr.js → compose-zjj072km.js} +6 -6
  51. package/dist/src/agent/compaction.js +23 -23
  52. package/dist/src/agent/request.js +14 -14
  53. package/dist/src/agent/tool-runner.d.ts +2 -0
  54. package/dist/src/agent/tool-runner.js +18 -15
  55. package/dist/src/agent/transcript.js +20 -20
  56. package/dist/src/agent/turn.js +28 -27
  57. package/dist/src/api/connection.js +41 -40
  58. package/dist/src/api/head.js +27 -26
  59. package/dist/src/api/part.js +8 -8
  60. package/dist/src/api/server.js +30 -29
  61. package/dist/src/api/session.js +33 -32
  62. package/dist/src/builtins/delegation.js +2 -2
  63. package/dist/src/builtins/environment.js +1 -2
  64. package/dist/src/compose.js +50 -49
  65. package/dist/src/contract/parts.d.ts +4 -0
  66. package/dist/src/contract/parts.js +1 -1
  67. package/dist/src/contract/tools.d.ts +10 -1
  68. package/dist/src/contract/workspace.d.ts +2 -0
  69. package/dist/src/drive/execution.js +28 -27
  70. package/dist/src/engine/admission.js +10 -10
  71. package/dist/src/engine/batches.js +8 -8
  72. package/dist/src/engine/branch-summary.js +7 -7
  73. package/dist/src/engine/durable.js +6 -6
  74. package/dist/src/engine/fence.js +6 -6
  75. package/dist/src/engine/jobs.d.ts +1 -0
  76. package/dist/src/engine/jobs.js +15 -13
  77. package/dist/src/engine/move.js +9 -9
  78. package/dist/src/engine/part-definitions.js +2 -2
  79. package/dist/src/engine/principals.js +5 -5
  80. package/dist/src/engine/receipts.js +7 -7
  81. package/dist/src/engine/runs.js +11 -11
  82. package/dist/src/engine/start.js +22 -21
  83. package/dist/src/engine/waits.js +5 -5
  84. package/dist/src/env/browser.js +13 -13
  85. package/dist/src/env/environment.js +15 -15
  86. package/dist/src/env/mcp.js +17 -17
  87. package/dist/src/env/session-changes.d.ts +10 -0
  88. package/dist/src/env/session-changes.js +15 -0
  89. package/dist/src/env/trust.js +16 -16
  90. package/dist/src/env/workspaces.js +20 -19
  91. package/dist/src/env/worktrees.js +21 -20
  92. package/dist/src/extend/activation.js +21 -20
  93. package/dist/src/extend/hooks.js +8 -8
  94. package/dist/src/extend/models.js +13 -13
  95. package/dist/src/extend/plugin-api.js +5 -5
  96. package/dist/src/extend/plugin-runtime.js +27 -26
  97. package/dist/src/extend/registry.js +12 -12
  98. package/dist/src/extend/resources.js +17 -17
  99. package/dist/src/extend/settings.js +23 -22
  100. package/dist/src/extend/workspace-commands.js +28 -27
  101. package/dist/src/fold/commit.js +4 -4
  102. package/dist/src/fold/seen.js +5 -5
  103. package/dist/src/fold/view.js +6 -6
  104. package/dist/src/fold/watch.js +3 -3
  105. package/dist/src/harness.d.ts +1 -0
  106. package/dist/src/harness.js +51 -50
  107. package/dist/src/index.d.ts +1 -1
  108. package/dist/src/index.js +1 -1
  109. package/dist/src/server.js +49 -48
  110. package/dist/src/store/parts.js +2 -2
  111. package/dist/src/testing.js +52 -51
  112. package/package.json +3 -3
@@ -9,20 +9,20 @@ import {
9
9
  } from "./compose-cqpjcx2t.js";
10
10
  import {
11
11
  publishSet2
12
- } from "./compose-rd5e5nxg.js";
12
+ } from "./compose-ad80nkkn.js";
13
13
  import {
14
14
  newRun2,
15
15
  begin2
16
- } from "./compose-jehg40ce.js";
16
+ } from "./compose-qxfq6dn9.js";
17
17
  import {
18
18
  createHostState2
19
19
  } from "./compose-xm52jghq.js";
20
20
  import {
21
21
  createHost2
22
- } from "./compose-q1d09qpr.js";
22
+ } from "./compose-zjj072km.js";
23
23
  import {
24
24
  createKernel2
25
- } from "./compose-5489evqa.js";
25
+ } from "./compose-q2zxbg41.js";
26
26
  import {
27
27
  memoryStore2
28
28
  } from "./compose-ts08bth2.js";
@@ -22,7 +22,7 @@ import {
22
22
  } from "./compose-vn7b7fdj.js";
23
23
  import {
24
24
  commit2
25
- } from "./compose-pnsvwd3m.js";
25
+ } from "./compose-bbhk8vnr.js";
26
26
  import {
27
27
  latest2,
28
28
  closable2,
@@ -31,22 +31,26 @@ import {
31
31
  import {
32
32
  createJobs2,
33
33
  jobHandle2
34
- } from "./compose-y9c31w4e.js";
34
+ } from "./compose-nkxwrphm.js";
35
35
  import {
36
36
  inspectWorkspaceAvailability2,
37
37
  readWorkspace2,
38
38
  workspaceRecords2
39
- } from "./compose-qknd62yj.js";
39
+ } from "./compose-4ppmas7g.js";
40
40
  import {
41
41
  readFolderTrust2,
42
42
  decideTrust2
43
- } from "./compose-h3pch7ch.js";
43
+ } from "./compose-8pp3vtv0.js";
44
44
  import {
45
45
  dropScans2
46
- } from "./compose-mamr4qwf.js";
46
+ } from "./compose-jmmyw9hd.js";
47
47
  import {
48
48
  mcpApi2
49
- } from "./compose-v9yf9mrh.js";
49
+ } from "./compose-gj2ypr7q.js";
50
+ import {
51
+ readAttributedPaths2,
52
+ ownedChanges2
53
+ } from "./compose-yfcb6w2h.js";
50
54
 
51
55
  // src/env/workspaces.ts
52
56
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -268,7 +272,7 @@ function workspaceHandle2(kernel, context, id, client = null) {
268
272
  async changes(source) {
269
273
  const found = await snapshots();
270
274
  const range = await changeRange(kernel.store, id, source, found);
271
- return found.diff(range.from, range.to);
275
+ return source.kind === "session" ? ownedChanges2(kernel.store, found, source.session, range.to) : found.diff(range.from, range.to);
272
276
  },
273
277
  patches(source, paths, options) {
274
278
  return streamWorkspacePatches(kernel, { workspace: id, source, paths, options, snapshots });
@@ -331,7 +335,8 @@ async function* streamWorkspacePatches(kernel, input) {
331
335
  caches.delete(oldest);
332
336
  }
333
337
  const held = previous === current ? null : previous ?? null;
334
- const paths = [...new Set(input.paths)];
338
+ const attributed = source.kind === "session" ? await readAttributedPaths2(kernel.store, source.session) : null;
339
+ const paths = [...new Set(input.paths)].filter((path) => attributed === null || attributed.has(path));
335
340
  const unread = paths.filter((path) => !current.slots.has(path));
336
341
  const limit = limiter(PATCH_READS);
337
342
  const mine = new Map;
@@ -3,7 +3,7 @@ import {
3
3
  } from "./compose-bj54tkph.js";
4
4
  import {
5
5
  tool2
6
- } from "./compose-bjx8s01m.js";
6
+ } from "./compose-fqsqjbrf.js";
7
7
  import {
8
8
  decodePartRecord2
9
9
  } from "./compose-gxjc6vz9.js";
@@ -14,16 +14,16 @@ import {
14
14
  } from "./compose-vn7b7fdj.js";
15
15
  import {
16
16
  commit2
17
- } from "./compose-pnsvwd3m.js";
17
+ } from "./compose-bbhk8vnr.js";
18
18
  import {
19
19
  readWorkspace2,
20
20
  workspaceRecords2
21
- } from "./compose-qknd62yj.js";
21
+ } from "./compose-4ppmas7g.js";
22
22
  import {
23
23
  sessionsOn2,
24
24
  byIdentity2,
25
25
  changed2
26
- } from "./compose-tb5ywdfk.js";
26
+ } from "./compose-d1m94kzq.js";
27
27
 
28
28
  // src/env/worktrees.ts
29
29
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -35,10 +35,10 @@ import {
35
35
  } from "./compose-sd0stm97.js";
36
36
  import {
37
37
  commit2
38
- } from "./compose-pnsvwd3m.js";
38
+ } from "./compose-bbhk8vnr.js";
39
39
  import {
40
40
  stopRun2
41
- } from "./compose-gvrqkyn4.js";
41
+ } from "./compose-w6zb11k1.js";
42
42
  import {
43
43
  refusalError2,
44
44
  staticContributions2
@@ -47,17 +47,17 @@ import {
47
47
  receiptHandle2,
48
48
  sendReceipt2,
49
49
  withdraw2
50
- } from "./compose-prchdrqk.js";
50
+ } from "./compose-fnncnk81.js";
51
51
  import {
52
52
  sendNow2,
53
53
  admitDeciding2
54
- } from "./compose-pe0cgbv0.js";
54
+ } from "./compose-t9fcqtby.js";
55
55
  import {
56
56
  recordAcquisition2
57
- } from "./compose-eemt6sea.js";
57
+ } from "./compose-byse0eqj.js";
58
58
  import {
59
59
  runHandle2
60
- } from "./compose-jehg40ce.js";
60
+ } from "./compose-qxfq6dn9.js";
61
61
  import {
62
62
  latest2,
63
63
  closable2,
@@ -66,29 +66,29 @@ import {
66
66
  import {
67
67
  isolateWorkspace2,
68
68
  releaseWorktree2
69
- } from "./compose-gxvetm0j.js";
69
+ } from "./compose-e2fyz3xc.js";
70
70
  import {
71
71
  releaseStart2,
72
72
  stopStart2,
73
73
  discardSession2
74
- } from "./compose-seyhq3fb.js";
74
+ } from "./compose-a8ddt55n.js";
75
75
  import {
76
76
  runCommand2,
77
77
  completeSessionCommand2
78
- } from "./compose-r1pxdxbw.js";
78
+ } from "./compose-ae5t6v5b.js";
79
79
  import {
80
80
  configure2
81
- } from "./compose-jrqn6xhy.js";
81
+ } from "./compose-753gc057.js";
82
82
  import {
83
83
  headHandle2,
84
84
  createHead2,
85
85
  mergeHead2,
86
86
  removeHead2
87
- } from "./compose-m6nsbnkk.js";
87
+ } from "./compose-1r0wr5dc.js";
88
88
  import {
89
89
  createPart2,
90
90
  partHandle2
91
- } from "./compose-azq5jxr2.js";
91
+ } from "./compose-r8tz1xfj.js";
92
92
 
93
93
  // src/api/session.ts
94
94
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -16,16 +16,16 @@ import {
16
16
  } from "./compose-vn7b7fdj.js";
17
17
  import {
18
18
  commit2
19
- } from "./compose-pnsvwd3m.js";
19
+ } from "./compose-bbhk8vnr.js";
20
20
  import {
21
21
  withFold2
22
22
  } from "./compose-xhtgytrh.js";
23
23
  import {
24
24
  waitFor2
25
- } from "./compose-ks2rdteq.js";
25
+ } from "./compose-bz70g01d.js";
26
26
  import {
27
27
  stopRun2
28
- } from "./compose-gvrqkyn4.js";
28
+ } from "./compose-w6zb11k1.js";
29
29
 
30
30
  // src/engine/receipts.ts
31
31
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -44,7 +44,7 @@ var thinking2 = definePart2({
44
44
  var tool2 = definePart2({
45
45
  kind: "tool",
46
46
  state: ToolPartStateSchema,
47
- actions: { stop: { input: EMPTY_INPUT } },
47
+ actions: { stop: { input: EMPTY_INPUT }, background: { input: EMPTY_INPUT } },
48
48
  fallback: (state, { id }) => `${clip(state.name)} ${state.phase}${state.phase === "settled" ? ` ${state.outcome.kind}` : ""} [${id}]`
49
49
  });
50
50
  var compaction2 = definePart2({
@@ -6,10 +6,10 @@ import {
6
6
  } from "./compose-zfjxkavf.js";
7
7
  import {
8
8
  readWorkspace2
9
- } from "./compose-qknd62yj.js";
9
+ } from "./compose-4ppmas7g.js";
10
10
  import {
11
11
  projectTrust2
12
- } from "./compose-h3pch7ch.js";
12
+ } from "./compose-8pp3vtv0.js";
13
13
 
14
14
  // src/env/mcp.ts
15
15
  import { SdkError } from "@nyte-ai/schema";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./compose-vn7b7fdj.js";
20
20
  import {
21
21
  commit2
22
- } from "./compose-pnsvwd3m.js";
22
+ } from "./compose-bbhk8vnr.js";
23
23
  import {
24
24
  withFold2
25
25
  } from "./compose-xhtgytrh.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./compose-6r5ymwyr.js";
15
15
  import {
16
16
  seenWriter2
17
- } from "./compose-zch4zapc.js";
17
+ } from "./compose-hfrjm4a1.js";
18
18
 
19
19
  // src/fold/view.ts
20
20
  function watchHead2(kernel, input) {
@@ -10,7 +10,7 @@ import {
10
10
  tool2,
11
11
  compaction2,
12
12
  branchSummary2
13
- } from "./compose-bjx8s01m.js";
13
+ } from "./compose-fqsqjbrf.js";
14
14
  import {
15
15
  decodeRunRecord2
16
16
  } from "./compose-gxjc6vz9.js";
@@ -32,13 +32,13 @@ import {
32
32
  } from "./compose-c4238qkb.js";
33
33
  import {
34
34
  scanResources2
35
- } from "./compose-mamr4qwf.js";
35
+ } from "./compose-jmmyw9hd.js";
36
36
  import {
37
37
  hiddenOwners2
38
38
  } from "./compose-bd8c5n7k.js";
39
39
  import {
40
40
  toolSource2
41
- } from "./compose-r1pxdxbw.js";
41
+ } from "./compose-ae5t6v5b.js";
42
42
 
43
43
  // src/agent/transcript.ts
44
44
  import { isJsonObject } from "@nyte-ai/schema";
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  signalsPark2,
12
12
  runStep2
13
- } from "./compose-eemt6sea.js";
13
+ } from "./compose-byse0eqj.js";
14
14
  import {
15
15
  stepPluginApi2
16
- } from "./compose-0827b2k4.js";
16
+ } from "./compose-c9wxgbjp.js";
17
17
 
18
18
  // src/extend/hooks.ts
19
19
  import { compile, JsonType, SdkError, SubmissionType, withJson } from "@nyte-ai/schema";
@@ -11,11 +11,11 @@ import {
11
11
  import {
12
12
  classifyFileSupport2,
13
13
  readWorkspace2
14
- } from "./compose-qknd62yj.js";
14
+ } from "./compose-4ppmas7g.js";
15
15
  import {
16
16
  WORKSPACE_TRUST2,
17
17
  projectTrust2
18
- } from "./compose-h3pch7ch.js";
18
+ } from "./compose-8pp3vtv0.js";
19
19
 
20
20
  // src/extend/resources.ts
21
21
  import { SdkError, standard } from "@nyte-ai/schema";
@@ -11,7 +11,7 @@ import {
11
11
  } from "./compose-vn7b7fdj.js";
12
12
  import {
13
13
  commit2
14
- } from "./compose-pnsvwd3m.js";
14
+ } from "./compose-bbhk8vnr.js";
15
15
 
16
16
  // src/engine/principals.ts
17
17
  import { asId, OPERATIONS, SdkError } from "@nyte-ai/schema";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./compose-q6c7wswc.js";
4
4
  import {
5
5
  acquire2
6
- } from "./compose-y9c31w4e.js";
6
+ } from "./compose-nkxwrphm.js";
7
7
 
8
8
  // src/env/browser.ts
9
9
  import { asId, asSeq, SdkError } from "@nyte-ai/schema";
@@ -2,7 +2,7 @@ import {
2
2
  isPart2,
3
3
  text2,
4
4
  tool2
5
- } from "./compose-bjx8s01m.js";
5
+ } from "./compose-fqsqjbrf.js";
6
6
  import {
7
7
  extractUserText2
8
8
  } from "./compose-rxsqmcgq.js";
@@ -23,25 +23,25 @@ import {
23
23
  } from "./compose-vn7b7fdj.js";
24
24
  import {
25
25
  commit2
26
- } from "./compose-pnsvwd3m.js";
26
+ } from "./compose-bbhk8vnr.js";
27
27
  import {
28
28
  withFold2
29
29
  } from "./compose-xhtgytrh.js";
30
30
  import {
31
31
  fence2,
32
32
  finishFence2
33
- } from "./compose-gvrqkyn4.js";
33
+ } from "./compose-w6zb11k1.js";
34
34
  import {
35
35
  holdSummary2,
36
36
  summaryHeld2,
37
37
  summarizedMove2
38
- } from "./compose-g2a1f1yx.js";
38
+ } from "./compose-tppkp915.js";
39
39
  import {
40
40
  settleReceipt2,
41
41
  reserve2,
42
42
  known2,
43
43
  typedReceipt2
44
- } from "./compose-prchdrqk.js";
44
+ } from "./compose-fnncnk81.js";
45
45
 
46
46
  // src/engine/move.ts
47
47
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -7,51 +7,58 @@ import {
7
7
  import {
8
8
  definePart2,
9
9
  tool2
10
- } from "./compose-bjx8s01m.js";
10
+ } from "./compose-fqsqjbrf.js";
11
11
  import {
12
12
  decodeRunRecord2,
13
13
  decodePartRecord2
14
14
  } from "./compose-gxjc6vz9.js";
15
+ import {
16
+ dev2
17
+ } from "./compose-n116fnmp.js";
15
18
  import {
16
19
  runRef2,
17
20
  partRef2
18
21
  } from "./compose-cqpjcx2t.js";
19
- import {
20
- dev2
21
- } from "./compose-n116fnmp.js";
22
22
  import {
23
23
  STALE2,
24
24
  load2,
25
25
  requireSession2,
26
26
  readTip2,
27
- threadStart2,
28
27
  readRefExpectation2,
29
28
  put2,
30
29
  attempt2,
31
30
  readCall2,
32
31
  readCalls2
33
32
  } from "./compose-vn7b7fdj.js";
33
+ import {
34
+ readAttributedPaths2,
35
+ ownedChanges2,
36
+ anotherChatLive2
37
+ } from "./compose-yfcb6w2h.js";
34
38
  import {
35
39
  settling2
36
- } from "./compose-c2rnebv0.js";
40
+ } from "./compose-d95fwwvw.js";
37
41
  import {
38
42
  commit2
39
- } from "./compose-pnsvwd3m.js";
43
+ } from "./compose-bbhk8vnr.js";
40
44
  import {
41
45
  signalsPark2,
42
46
  parkStep2,
43
47
  runStep2
44
- } from "./compose-eemt6sea.js";
48
+ } from "./compose-byse0eqj.js";
49
+ import {
50
+ startJob2
51
+ } from "./compose-nkxwrphm.js";
45
52
  import {
46
53
  publishPatch2
47
- } from "./compose-jehg40ce.js";
54
+ } from "./compose-qxfq6dn9.js";
48
55
  import {
49
56
  hiddenOwners2,
50
57
  missingCapabilities2
51
58
  } from "./compose-bd8c5n7k.js";
52
59
  import {
53
60
  toolSource2
54
- } from "./compose-r1pxdxbw.js";
61
+ } from "./compose-ae5t6v5b.js";
55
62
 
56
63
  // src/agent/tool-runner.ts
57
64
  import { Type } from "typebox";
@@ -95,9 +102,10 @@ function runningCalls(kernel) {
95
102
  async function executeCall2(kernel, input) {
96
103
  const { session, call } = input;
97
104
  const controller = new AbortController;
105
+ const running = { stop: controller, move: new AbortController };
98
106
  const live = runningCalls(kernel);
99
107
  const controllers = live.get(call) ?? new Set;
100
- controllers.add(controller);
108
+ controllers.add(running);
101
109
  live.set(call, controllers);
102
110
  const steps = await Promise.all([
103
111
  readCall2(kernel.store, session, call),
@@ -108,10 +116,11 @@ async function executeCall2(kernel, input) {
108
116
  try {
109
117
  return await perform(kernel, {
110
118
  ...input,
111
- signal: AbortSignal.any([input.signal, controller.signal])
119
+ signal: AbortSignal.any([input.signal, controller.signal]),
120
+ released: running.move.signal
112
121
  });
113
122
  } finally {
114
- controllers.delete(controller);
123
+ controllers.delete(running);
115
124
  if (controllers.size === 0 && live.get(call) === controllers)
116
125
  live.delete(call);
117
126
  }
@@ -155,13 +164,20 @@ function stoppableTool2(kernel) {
155
164
  async stop(_input, context) {
156
165
  const running = runningCalls(kernel).get(context.part.id);
157
166
  if (running !== undefined && running.size > 0) {
158
- for (const controller of running)
159
- controller.abort();
167
+ for (const live of running)
168
+ live.stop.abort();
160
169
  return;
161
170
  }
162
171
  for (const call of [context.part.id, `${HOOK}${context.part.id}`])
163
172
  await kernel.waits.callStopped(context.session, asId(call));
164
173
  return;
174
+ },
175
+ background(_input, context) {
176
+ if (!kernel.jobs.release(context.session, asId(context.part.id)))
177
+ return;
178
+ for (const live of runningCalls(kernel).get(context.part.id) ?? [])
179
+ live.move.abort();
180
+ return;
165
181
  }
166
182
  };
167
183
  return definePart2({
@@ -199,7 +215,7 @@ async function perform(kernel, where) {
199
215
  return executed.outcome;
200
216
  } : async () => planned.outcome,
201
217
  async settle(ended) {
202
- concluded ??= conclude(kernel, where, ended, before);
218
+ concluded ??= conclude(kernel, where, ended, before, planned.class);
203
219
  const settled = await concluded;
204
220
  return {
205
221
  result: settled.outcome,
@@ -345,6 +361,7 @@ async function execute(kernel, where, planned, durable, snapshotted) {
345
361
  call: where.call,
346
362
  context: where.context,
347
363
  signal,
364
+ released: where.released,
348
365
  workspace: found.record.workspace,
349
366
  env,
350
367
  durable,
@@ -384,39 +401,29 @@ async function validateToolResult(definition, result) {
384
401
  parts
385
402
  };
386
403
  }
387
- async function conclude(kernel, where, ended, before) {
404
+ async function conclude(kernel, where, ended, before, toolClass) {
388
405
  const { session, head, run } = where;
389
406
  const outcome = await where.runtime.hooks.transform("after_tool", ended.kind === "done" ? ended.value : INTERRUPTED, { session, head, run, principal: where.context.principal });
390
407
  const snapshots = before !== null && ended.kind === "done" ? await kernel.environments.snapshots(session) : null;
391
408
  if (snapshots === null || before === null)
392
- return { outcome, files: null, thread: null, snapshot: null };
393
- const from = before.snapshot;
409
+ return { outcome, files: null, thread: null, snapshot: null, path: null, unattributed: false };
394
410
  const to = await snapshots.after(run);
395
- const files = fileChanges(await snapshots.diff(from, to));
396
- const thread = files.length === 0 ? null : fileChanges(await snapshots.diff(await threadStart2(kernel.store, session) ?? from, to));
397
- return {
398
- outcome,
399
- files,
400
- thread,
401
- snapshot: to
402
- };
411
+ const [changed, path] = await Promise.all([
412
+ snapshots.diff(before.snapshot, to).then(fileChanges),
413
+ editedPath(kernel, session, toolClass)
414
+ ]);
415
+ const unattributed = path === null && changed.length > 0 && (before.contended || await anotherChatLive2(kernel, session));
416
+ const files = unattributed ? [] : changed.filter((file) => path === null || file.path === path || file.from === path);
417
+ const thread = files.length === 0 && !unattributed ? null : fileChanges(await ownedChanges2(kernel.store, snapshots, session, to, files.map((file) => file.path)));
418
+ return { outcome, files, thread, snapshot: to, path, unattributed };
403
419
  }
404
- async function readCountedPaths(store, where, after) {
405
- const through = await store.refs.tail(where.session);
406
- const paths = new Set;
407
- let cursor = after;
408
- while (cursor < through) {
409
- const events = await store.refs.log(where.session, cursor, 256);
410
- for (const event of events)
411
- if (event.seq <= through && event.kind === "call" && event.change === "settled" && event.head === where.head && event.call !== where.call)
412
- for (const path of event.changes?.paths ?? [])
413
- paths.add(path);
414
- const last = events.at(-1);
415
- if (last === undefined)
416
- break;
417
- cursor = last.seq;
418
- }
419
- return paths;
420
+ async function editedPath(kernel, session, toolClass) {
421
+ if (toolClass.kind !== "edit")
422
+ return null;
423
+ if (!/^(?:[\\/]|[A-Za-z]:)/.test(toolClass.path))
424
+ return toolClass.path.replace(/^\.\//, "");
425
+ const root = (await kernel.environments.attach(session)).cwd.replace(/[\\/]+$/, "");
426
+ return toolClass.path.startsWith(`${root}/`) || toolClass.path.startsWith(`${root}\\`) ? toolClass.path.slice(root.length + 1).replaceAll("\\", "/") : null;
420
427
  }
421
428
  function fileChanges(set) {
422
429
  return set.files.map((file) => {
@@ -439,12 +446,13 @@ async function settlement(store, where, planned, settled, before) {
439
446
  ]);
440
447
  if (found === null)
441
448
  return [];
442
- const counted = before === null ? new Set : await readCountedPaths(store, where, before.seq);
449
+ const counted = before === null || settled.path !== null ? new Set : await readAttributedPaths2(store, session, before.seq, (event) => event.head === head && event.call !== call);
443
450
  const files = settled.files?.filter((file) => !counted.has(file.path));
444
451
  const changes = files === undefined ? null : {
445
452
  added: files.reduce((sum, file) => sum + file.added, 0),
446
453
  removed: files.reduce((sum, file) => sum + file.removed, 0),
447
- paths: files.map((file) => file.path)
454
+ paths: files.map((file) => file.path),
455
+ ...settled.unattributed && { unattributed: true }
448
456
  };
449
457
  const at = Date.now();
450
458
  const state = {
@@ -499,7 +507,10 @@ async function baseline(kernel, session, run) {
499
507
  if (snapshots === null)
500
508
  return null;
501
509
  const seq = await kernel.store.refs.tail(session);
502
- const before = await snapshots.after(run);
510
+ const [before, contended] = await Promise.all([
511
+ snapshots.after(run),
512
+ anotherChatLive2(kernel, session)
513
+ ]);
503
514
  await attempt2(`Recording run ${run}'s snapshot`, async () => {
504
515
  const found = await load2(kernel.store, await kernel.store.refs.get(runRef2(session, run)), decodeRunRecord2);
505
516
  if (found === null || found.record.snapshot !== null)
@@ -513,7 +524,7 @@ async function baseline(kernel, session, run) {
513
524
  ]);
514
525
  return outcome.kind === "set" ? undefined : STALE2;
515
526
  });
516
- return { snapshot: before, seq };
527
+ return { snapshot: before, seq, contended };
517
528
  }
518
529
  async function nextBase(store, session, run, to) {
519
530
  const found = await load2(store, await store.refs.get(runRef2(session, run)), decodeRunRecord2);
@@ -579,6 +590,11 @@ function createInvocation2(kernel, input) {
579
590
  progress: update
580
591
  });
581
592
  },
593
+ foreground: {
594
+ start: (job) => startJob2(kernel, context.origin, input.workspace, { ...job, session }, true),
595
+ release: () => kernel.jobs.release(session, call),
596
+ released: input.released ?? new AbortController().signal
597
+ },
582
598
  tools: {
583
599
  async execute(name, args, options) {
584
600
  const key = options?.key ?? `${calls}`;
@@ -10,7 +10,7 @@ import {
10
10
  } from "./compose-bj54tkph.js";
11
11
  import {
12
12
  commit2
13
- } from "./compose-pnsvwd3m.js";
13
+ } from "./compose-bbhk8vnr.js";
14
14
  import {
15
15
  MODEL_PREFERENCE2,
16
16
  modelListingRef2,
@@ -25,7 +25,7 @@ import {
25
25
  } from "./compose-zfjxkavf.js";
26
26
  import {
27
27
  bumpGeneration2
28
- } from "./compose-r1pxdxbw.js";
28
+ } from "./compose-ae5t6v5b.js";
29
29
 
30
30
  // src/extend/models.ts
31
31
  import { SdkError } from "@nyte-ai/schema";