@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
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  readWorkspace2
3
- } from "./compose-qknd62yj.js";
3
+ } from "./compose-4ppmas7g.js";
4
4
  import {
5
5
  scanWorkspaceResources2
6
- } from "./compose-mamr4qwf.js";
6
+ } from "./compose-jmmyw9hd.js";
7
7
  import {
8
8
  newChatPlugins2
9
- } from "./compose-6m60v1pk.js";
9
+ } from "./compose-1knxqqm1.js";
10
10
  import {
11
11
  createHookDispatch2
12
- } from "./compose-31zqcfte.js";
12
+ } from "./compose-jeemzja1.js";
13
13
  import {
14
14
  createRegistrySet2,
15
15
  skillInfos2,
16
16
  commandInfos2,
17
17
  invokeCommand2,
18
18
  completeCommand2
19
- } from "./compose-r1pxdxbw.js";
19
+ } from "./compose-ae5t6v5b.js";
20
20
  import {
21
21
  settingHandle2
22
- } from "./compose-jrqn6xhy.js";
22
+ } from "./compose-753gc057.js";
23
23
  import {
24
24
  activateApart2
25
- } from "./compose-m1ecjzm2.js";
25
+ } from "./compose-9hy3p236.js";
26
26
 
27
27
  // src/extend/workspace-commands.ts
28
28
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./compose-bj54tkph.js";
7
7
  import {
8
8
  compaction2
9
- } from "./compose-bjx8s01m.js";
9
+ } from "./compose-fqsqjbrf.js";
10
10
  import {
11
11
  decodeRunRecord2,
12
12
  decodePartRecord2
@@ -39,19 +39,19 @@ import {
39
39
  import {
40
40
  settling2,
41
41
  failedParts2
42
- } from "./compose-c2rnebv0.js";
42
+ } from "./compose-d95fwwvw.js";
43
43
  import {
44
44
  ZERO_USAGE2
45
45
  } from "./compose-84272xbk.js";
46
46
  import {
47
47
  commit2
48
- } from "./compose-pnsvwd3m.js";
48
+ } from "./compose-bbhk8vnr.js";
49
49
  import {
50
50
  withFold2
51
51
  } from "./compose-xhtgytrh.js";
52
52
  import {
53
53
  modelInfo2
54
- } from "./compose-exfx5b4d.js";
54
+ } from "./compose-mdwr0er9.js";
55
55
  import {
56
56
  extractUserText2
57
57
  } from "./compose-rxsqmcgq.js";
@@ -60,12 +60,12 @@ import {
60
60
  requestEvent2,
61
61
  rideRef2,
62
62
  complete2
63
- } from "./compose-ccrh32hd.js";
63
+ } from "./compose-sprfv38c.js";
64
64
  import {
65
65
  projectedCommit2,
66
66
  requestBody2,
67
67
  estimateTranscriptTokens2
68
- } from "./compose-4770pb1s.js";
68
+ } from "./compose-jd4bsnqh.js";
69
69
 
70
70
  // src/agent/compaction.ts
71
71
  import { asId, isJsonObject, SdkError } from "@nyte-ai/schema";
@@ -5,13 +5,13 @@ import {
5
5
  import {
6
6
  UnavailableError2,
7
7
  readWorkspace2
8
- } from "./compose-qknd62yj.js";
8
+ } from "./compose-4ppmas7g.js";
9
9
  import {
10
10
  projectTrust2
11
- } from "./compose-h3pch7ch.js";
11
+ } from "./compose-8pp3vtv0.js";
12
12
  import {
13
13
  settle2
14
- } from "./compose-tb5ywdfk.js";
14
+ } from "./compose-d1m94kzq.js";
15
15
 
16
16
  // src/extend/activation.ts
17
17
  var ACTIVE = { kind: "active" };
@@ -26,27 +26,27 @@ import {
26
26
  } from "./compose-vn7b7fdj.js";
27
27
  import {
28
28
  commit2
29
- } from "./compose-pnsvwd3m.js";
29
+ } from "./compose-bbhk8vnr.js";
30
30
  import {
31
31
  withFold2
32
32
  } from "./compose-xhtgytrh.js";
33
33
  import {
34
34
  send2
35
- } from "./compose-pe0cgbv0.js";
35
+ } from "./compose-t9fcqtby.js";
36
36
  import {
37
37
  move2
38
- } from "./compose-47f47sgy.js";
38
+ } from "./compose-matk94se.js";
39
39
  import {
40
40
  watchStore2
41
41
  } from "./compose-zfjxkavf.js";
42
42
  import {
43
43
  configure2
44
- } from "./compose-jrqn6xhy.js";
44
+ } from "./compose-753gc057.js";
45
45
  import {
46
46
  watchHead2,
47
47
  viewHead2,
48
48
  historyHead2
49
- } from "./compose-w2ac7xjx.js";
49
+ } from "./compose-hfsn6pnt.js";
50
50
  import {
51
51
  extractUserText2
52
52
  } from "./compose-rxsqmcgq.js";
@@ -7,14 +7,14 @@ import {
7
7
  } from "./compose-vn7b7fdj.js";
8
8
  import {
9
9
  writeReceipt2
10
- } from "./compose-pnsvwd3m.js";
10
+ } from "./compose-bbhk8vnr.js";
11
11
  import {
12
12
  waitFor2
13
- } from "./compose-ks2rdteq.js";
13
+ } from "./compose-bz70g01d.js";
14
14
  import {
15
15
  settleReceipt2,
16
16
  typedReceipt2
17
- } from "./compose-prchdrqk.js";
17
+ } from "./compose-fnncnk81.js";
18
18
 
19
19
  // src/engine/batches.ts
20
20
  import { asId, SdkError } from "@nyte-ai/schema";
@@ -10,10 +10,10 @@ import {
10
10
  } from "./compose-vn7b7fdj.js";
11
11
  import {
12
12
  applyBatch2
13
- } from "./compose-57j0pme0.js";
13
+ } from "./compose-2rha31fc.js";
14
14
  import {
15
15
  wrapBrowser2
16
- } from "./compose-se7wwcq1.js";
16
+ } from "./compose-m01wspwf.js";
17
17
 
18
18
  // src/env/environment.ts
19
19
  import { SdkError } from "@nyte-ai/schema";
@@ -19,17 +19,17 @@ import {
19
19
  } from "./compose-bj54tkph.js";
20
20
  import {
21
21
  commit2
22
- } from "./compose-pnsvwd3m.js";
22
+ } from "./compose-bbhk8vnr.js";
23
23
  import {
24
24
  WORKSPACE_TRUST2
25
- } from "./compose-h3pch7ch.js";
25
+ } from "./compose-8pp3vtv0.js";
26
26
  import {
27
27
  SKILL_PATHS2,
28
28
  dropScans2
29
- } from "./compose-mamr4qwf.js";
29
+ } from "./compose-jmmyw9hd.js";
30
30
  import {
31
31
  trustChanged2
32
- } from "./compose-tb5ywdfk.js";
32
+ } from "./compose-d1m94kzq.js";
33
33
  import {
34
34
  settingInfos2,
35
35
  readSettingLayers2,
@@ -37,7 +37,7 @@ import {
37
37
  } from "./compose-qwbe95qs.js";
38
38
  import {
39
39
  publishCatalog2
40
- } from "./compose-r1pxdxbw.js";
40
+ } from "./compose-ae5t6v5b.js";
41
41
 
42
42
  // src/extend/settings.ts
43
43
  import { isJson, SdkError } from "@nyte-ai/schema";
@@ -5,6 +5,9 @@ import {
5
5
  decodeRunRecord2,
6
6
  decodeLease2
7
7
  } from "./compose-gxjc6vz9.js";
8
+ import {
9
+ dev2
10
+ } from "./compose-n116fnmp.js";
8
11
  import {
9
12
  objectId2
10
13
  } from "./compose-q6c7wswc.js";
@@ -12,9 +15,6 @@ import {
12
15
  runRef2,
13
16
  leaseRef2
14
17
  } from "./compose-cqpjcx2t.js";
15
- import {
16
- dev2
17
- } from "./compose-n116fnmp.js";
18
18
  import {
19
19
  load2,
20
20
  readSession2,
@@ -27,7 +27,7 @@ import {
27
27
  } from "./compose-vn7b7fdj.js";
28
28
  import {
29
29
  commit2
30
- } from "./compose-pnsvwd3m.js";
30
+ } from "./compose-bbhk8vnr.js";
31
31
  import {
32
32
  holdLease2
33
33
  } from "./compose-vzvm76dn.js";
@@ -37,39 +37,39 @@ import {
37
37
  import {
38
38
  loadWaits2,
39
39
  earliestWake2
40
- } from "./compose-ks2rdteq.js";
40
+ } from "./compose-bz70g01d.js";
41
41
  import {
42
42
  LEASE_MS2
43
- } from "./compose-eemt6sea.js";
43
+ } from "./compose-byse0eqj.js";
44
44
  import {
45
45
  stopRequested2
46
- } from "./compose-gvrqkyn4.js";
46
+ } from "./compose-w6zb11k1.js";
47
47
  import {
48
48
  selectRunStart2,
49
49
  landing2
50
- } from "./compose-pe0cgbv0.js";
50
+ } from "./compose-t9fcqtby.js";
51
+ import {
52
+ reapJobs2
53
+ } from "./compose-nkxwrphm.js";
51
54
  import {
52
55
  newRun2,
53
56
  begin2,
54
57
  endRun2
55
- } from "./compose-jehg40ce.js";
58
+ } from "./compose-qxfq6dn9.js";
56
59
  import {
57
60
  executeCall2,
58
61
  owedCalls2,
59
62
  readToolInput2
60
- } from "./compose-hms4hf6p.js";
63
+ } from "./compose-mcz93154.js";
61
64
  import {
62
65
  recoverMoves2
63
- } from "./compose-47f47sgy.js";
64
- import {
65
- reapJobs2
66
- } from "./compose-y9c31w4e.js";
66
+ } from "./compose-matk94se.js";
67
67
  import {
68
68
  BEAT_MS2
69
69
  } from "./compose-gvm49f4b.js";
70
70
  import {
71
71
  recoverStarts2
72
- } from "./compose-seyhq3fb.js";
72
+ } from "./compose-a8ddt55n.js";
73
73
  import {
74
74
  crashLooping2,
75
75
  parkedFailure2,
@@ -360,10 +360,9 @@ function driveInProcess2(kernel, coverage) {
360
360
  clearTimeout(retry);
361
361
  retries.clear();
362
362
  const state = kernel.executionState;
363
- const aborted = state.closing;
364
- state.closing = new AbortController;
365
- aborted.abort();
363
+ state.closing.abort();
366
364
  await Promise.all(inflight.values());
365
+ state.closing = new AbortController;
367
366
  await covering.then((owned) => owned.close(), () => {
368
367
  return;
369
368
  });
@@ -13,10 +13,10 @@ import {
13
13
  } from "./compose-vn7b7fdj.js";
14
14
  import {
15
15
  commit2
16
- } from "./compose-pnsvwd3m.js";
16
+ } from "./compose-bbhk8vnr.js";
17
17
  import {
18
18
  workspaceRecords2
19
- } from "./compose-qknd62yj.js";
19
+ } from "./compose-4ppmas7g.js";
20
20
 
21
21
  // src/env/trust.ts
22
22
  import { Value } from "typebox/value";
@@ -7,7 +7,7 @@ import {
7
7
  } from "./compose-bj54tkph.js";
8
8
  import {
9
9
  RESERVED_PART_KINDS2
10
- } from "./compose-0rx7ygxq.js";
10
+ } from "./compose-zaanjpb7.js";
11
11
  import {
12
12
  dev2
13
13
  } from "./compose-n116fnmp.js";
@@ -20,27 +20,27 @@ import {
20
20
  } from "./compose-ry29956g.js";
21
21
  import {
22
22
  scanResources2
23
- } from "./compose-mamr4qwf.js";
23
+ } from "./compose-jmmyw9hd.js";
24
24
  import {
25
25
  activateSession2
26
- } from "./compose-6m60v1pk.js";
26
+ } from "./compose-1knxqqm1.js";
27
27
  import {
28
28
  corePluginApi2,
29
29
  build2
30
- } from "./compose-0827b2k4.js";
30
+ } from "./compose-c9wxgbjp.js";
31
31
  import {
32
32
  createHookDispatch2,
33
33
  namesCoreHook2
34
- } from "./compose-31zqcfte.js";
34
+ } from "./compose-jeemzja1.js";
35
35
  import {
36
36
  createRegistrySet2,
37
37
  publishCatalog2,
38
38
  bumpGeneration2
39
- } from "./compose-r1pxdxbw.js";
39
+ } from "./compose-ae5t6v5b.js";
40
40
  import {
41
41
  settingHandle2,
42
42
  publishSettings2
43
- } from "./compose-jrqn6xhy.js";
43
+ } from "./compose-753gc057.js";
44
44
 
45
45
  // src/extend/plugin-runtime.ts
46
46
  import { SdkError } from "@nyte-ai/schema";
@@ -20,25 +20,25 @@ import {
20
20
  } from "./compose-vn7b7fdj.js";
21
21
  import {
22
22
  releaseParts2
23
- } from "./compose-c2rnebv0.js";
23
+ } from "./compose-d95fwwvw.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
  listSessionWaits2
32
- } from "./compose-ks2rdteq.js";
32
+ } from "./compose-bz70g01d.js";
33
33
  import {
34
34
  readmitDeciding2
35
- } from "./compose-pe0cgbv0.js";
35
+ } from "./compose-t9fcqtby.js";
36
36
  import {
37
37
  dropScans2
38
- } from "./compose-mamr4qwf.js";
38
+ } from "./compose-jmmyw9hd.js";
39
39
  import {
40
40
  releaseWorktree2
41
- } from "./compose-gxvetm0j.js";
41
+ } from "./compose-e2fyz3xc.js";
42
42
 
43
43
  // src/engine/start.ts
44
44
  import { SdkError } from "@nyte-ai/schema";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./compose-vn7b7fdj.js";
16
16
  import {
17
17
  settleAnswersFrom2
18
- } from "./compose-c2rnebv0.js";
18
+ } from "./compose-d95fwwvw.js";
19
19
  import {
20
20
  collectSessionEvents2
21
21
  } from "./compose-kwkna3cg.js";
@@ -9,13 +9,13 @@ import {
9
9
  } from "./compose-bj54tkph.js";
10
10
  import {
11
11
  sendNow2
12
- } from "./compose-pe0cgbv0.js";
12
+ } from "./compose-t9fcqtby.js";
13
13
  import {
14
14
  callable2
15
15
  } from "./compose-ry29956g.js";
16
16
  import {
17
17
  stepPluginApi2
18
- } from "./compose-0827b2k4.js";
18
+ } from "./compose-c9wxgbjp.js";
19
19
  import {
20
20
  settingInfos2
21
21
  } from "./compose-qwbe95qs.js";
@@ -4,10 +4,6 @@ import {
4
4
  import {
5
5
  lineDiff2
6
6
  } from "./compose-j50h13pg.js";
7
- import {
8
- followedTrace2,
9
- traceparent2
10
- } from "./compose-sd0stm97.js";
11
7
 
12
8
  // src/builtins/environment.ts
13
9
  import { PatchEntrySchema, standard, writePatch } from "@nyte-ai/schema";
@@ -17,6 +13,7 @@ var READ_CHARS = 50 * 1024;
17
13
  var LIST_LIMIT = 500;
18
14
  var SHELL_BYTES = 32 * 1024;
19
15
  var PROGRESS_BYTES = 4 * 1024;
16
+ var FIRST_OUTPUT_MS = 1000;
20
17
  var MIME_TYPES = new Map([
21
18
  ["png", "image/png"],
22
19
  ["jpg", "image/jpeg"],
@@ -49,7 +46,16 @@ var listParameters = standard(Type.Object({
49
46
  }));
50
47
  var bashParameters = standard(Type.Object({
51
48
  command: Type.String({ description: "The shell command to run." }),
52
- description: Type.Optional(Type.String({ description: "What the command does, in a few words, for the user." }))
49
+ description: Type.Optional(Type.String({ description: "What the command does, in a few words, for the user." })),
50
+ background: Type.Optional(Type.Boolean({
51
+ description: "Start the command and return a job id with its first output instead of waiting for it to exit. Use for servers, watchers, and other long-lived commands, without a trailing &. The command keeps running across turns, and you are told when it exits; read its output or stop it with the job tool. Do not use it to speed up ordinary commands."
52
+ }))
53
+ }));
54
+ var jobParameters = standard(Type.Object({
55
+ id: Type.String({ description: "The job id a background bash call returned." }),
56
+ action: Type.Enum(["output", "stop"], {
57
+ description: "output reads the job's state and latest output; stop ends it."
58
+ })
53
59
  }));
54
60
  var read = {
55
61
  name: "read",
@@ -177,44 +183,119 @@ var bash = {
177
183
  class: (args) => args.description === undefined ? { kind: "shell", command: args.command } : { kind: "shell", command: args.command, description: args.description },
178
184
  replay: "never",
179
185
  async execute(args, invocation) {
180
- const { env } = invocation;
181
- const trace = followedTrace2(invocation.session.id);
182
- const job = await env.exec(args.command, {
183
- cwd: env.cwd,
184
- signal: invocation.signal,
185
- env: trace === null ? undefined : { TRACEPARENT: traceparent2(trace) }
186
+ const { foreground, signal } = invocation;
187
+ const running = await foreground.start({
188
+ command: args.command,
189
+ title: args.description ?? args.command
186
190
  });
187
- const chunks = [];
188
- let kept = 0;
189
- let dropped = 0;
190
- let code = null;
191
- for await (const frame of job.output()) {
192
- if (frame.kind === "exit") {
193
- code = frame.code;
194
- break;
195
- }
196
- if (frame.kind === "gap")
197
- continue;
198
- chunks.push(frame.data);
199
- kept += frame.data.byteLength;
200
- while (kept - (chunks[0]?.byteLength ?? 0) >= SHELL_BYTES && chunks.length > 1) {
201
- const first = chunks.shift();
202
- kept -= first?.byteLength ?? 0;
203
- dropped += first?.byteLength ?? 0;
191
+ const stop = () => void running.stop().catch(() => {
192
+ return;
193
+ });
194
+ signal.addEventListener("abort", stop, { once: true });
195
+ if (signal.aborted)
196
+ stop();
197
+ const shell = createShellOutput((tail) => invocation.progress({ text: tail }));
198
+ const frames = running.output()[Symbol.asyncIterator]();
199
+ try {
200
+ const exited = await shell.read(frames, args.background === true ? AbortSignal.any([foreground.released, AbortSignal.timeout(FIRST_OUTPUT_MS)]) : foreground.released);
201
+ if (!exited && (foreground.released.aborted || foreground.release())) {
202
+ await frames.return?.();
203
+ return text(shell.render(`[running in the background as job ${running.id}: you are told when it exits; the job tool reads its output or stops it]`));
204
204
  }
205
- invocation.progress({ text: decodeOutputTail(chunks, PROGRESS_BYTES) });
205
+ if (!exited)
206
+ await shell.read(frames, new AbortController().signal);
207
+ const end = await running.settled();
208
+ const exit = end.kind === "exited" ? end.code ?? shell.code() : shell.code();
209
+ return text(shell.render(end.kind === "lost" ? "[the process was lost]" : `[exit code ${exit ?? "none"}${end.reason === "exited" ? "" : `, ${end.reason}`}]`));
210
+ } catch (error) {
211
+ stop();
212
+ throw error;
213
+ } finally {
214
+ signal.removeEventListener("abort", stop);
206
215
  }
207
- const end = await job.settled();
208
- const exit = end.kind === "exited" ? end.code ?? code : code;
209
- const joined = joinBytes(chunks);
210
- const cut = Math.max(0, joined.byteLength - SHELL_BYTES);
211
- const output = new TextDecoder().decode(joined.subarray(cut)).trimEnd();
212
- const truncated = dropped + cut > 0 ? [`[truncated: the first ${dropped + cut} bytes of output are not shown]`] : [];
213
- const status = end.kind === "lost" ? "[the process was lost]" : `[exit code ${exit ?? "none"}${end.reason === "exited" ? "" : `, ${end.reason}`}]`;
214
- return text([...truncated, ...output === "" ? [] : [output], status].join(`
215
- `));
216
216
  }
217
217
  };
218
+ var job = {
219
+ name: "job",
220
+ description: "Read the state and latest output of a job a background bash call started, or stop it.",
221
+ parameters: jobParameters,
222
+ class: (args) => ({
223
+ kind: "custom",
224
+ label: args.action === "stop" ? `Stopping job ${args.id}` : `Reading job ${args.id}`
225
+ }),
226
+ effects: "none",
227
+ replay: "safe",
228
+ async execute(args, invocation) {
229
+ const { jobs } = invocation.workspace;
230
+ const find = async () => (await jobs.list()).find((view) => view.id === args.id && view.session === invocation.session.id);
231
+ const found = await find();
232
+ if (found === undefined)
233
+ return text(`This chat has no job ${args.id}.`);
234
+ if (args.action === "stop")
235
+ await invocation.workspace.job(found.id).stop();
236
+ const view = args.action === "stop" ? await find() ?? found : found;
237
+ const tail = view.tail.trimEnd();
238
+ const state = describeJobState(view.state);
239
+ return text(tail === "" ? `Job ${view.id} ${state}.` : `Job ${view.id} ${state}:
240
+ ${tail}`);
241
+ }
242
+ };
243
+ function describeJobState(state) {
244
+ if (state.kind === "running")
245
+ return "is running";
246
+ if (state.kind === "lost")
247
+ return "was lost with the host";
248
+ return state.reason === "exited" ? `exited with code ${state.code ?? "none"}` : `ended (${state.reason}) with code ${state.code ?? "none"}`;
249
+ }
250
+ function createShellOutput(progress) {
251
+ const chunks = [];
252
+ let kept = 0;
253
+ let dropped = 0;
254
+ let code = null;
255
+ let pending = null;
256
+ return {
257
+ async read(frames, until) {
258
+ const detached = new Promise((resolve) => {
259
+ if (until.aborted)
260
+ resolve(null);
261
+ until.addEventListener("abort", () => resolve(null), { once: true });
262
+ });
263
+ for (;; ) {
264
+ pending ??= frames.next();
265
+ const next = await Promise.race([pending, detached]);
266
+ if (next === null)
267
+ return false;
268
+ pending = null;
269
+ if (next.done === true)
270
+ return true;
271
+ const frame = next.value;
272
+ if (frame.kind === "exit") {
273
+ code = frame.code;
274
+ return true;
275
+ }
276
+ if (frame.kind === "gap")
277
+ continue;
278
+ chunks.push(frame.data);
279
+ kept += frame.data.byteLength;
280
+ while (kept - (chunks[0]?.byteLength ?? 0) >= SHELL_BYTES && chunks.length > 1) {
281
+ const first = chunks.shift();
282
+ kept -= first?.byteLength ?? 0;
283
+ dropped += first?.byteLength ?? 0;
284
+ }
285
+ progress(decodeOutputTail(chunks, PROGRESS_BYTES));
286
+ }
287
+ },
288
+ code: () => code,
289
+ render(status) {
290
+ const joined = joinBytes(chunks);
291
+ const cut = Math.max(0, joined.byteLength - SHELL_BYTES);
292
+ const output = new TextDecoder().decode(joined.subarray(cut)).trimEnd();
293
+ const truncated = dropped + cut > 0 ? [`[truncated: the first ${dropped + cut} bytes of output are not shown]`] : [];
294
+ return [...truncated, ...output === "" ? [] : [output], status].join(`
295
+ `);
296
+ }
297
+ };
298
+ }
218
299
  function joinBytes(chunks) {
219
300
  const joined = new Uint8Array(chunks.reduce((size, chunk) => size + chunk.byteLength, 0));
220
301
  let offset = 0;
@@ -241,7 +322,7 @@ function decodeOutputTail(chunks, limit) {
241
322
  }
242
323
  var environmentPlugin2 = {
243
324
  id: "environment",
244
- contribute: { tools: [read, write, edit, list, bash] },
325
+ contribute: { tools: [read, write, edit, list, bash, job] },
245
326
  activate(api) {
246
327
  const cwd = tryReadCwd(() => api.env);
247
328
  if (cwd !== null)
@@ -13,7 +13,7 @@ import {
13
13
  } from "./compose-vn7b7fdj.js";
14
14
  import {
15
15
  publishSet2
16
- } from "./compose-rd5e5nxg.js";
16
+ } from "./compose-ad80nkkn.js";
17
17
 
18
18
  // src/fold/commit.ts
19
19
  import { SdkError } from "@nyte-ai/schema";
@@ -14,14 +14,14 @@ import {
14
14
  } from "./compose-vn7b7fdj.js";
15
15
  import {
16
16
  storedAnswer2
17
- } from "./compose-c2rnebv0.js";
17
+ } from "./compose-d95fwwvw.js";
18
18
  import {
19
19
  waitIndex2,
20
20
  wokenIndex2
21
21
  } from "./compose-0wq555bd.js";
22
22
  import {
23
23
  changeCall2
24
- } from "./compose-pnsvwd3m.js";
24
+ } from "./compose-bbhk8vnr.js";
25
25
  import {
26
26
  holdLease2
27
27
  } from "./compose-vzvm76dn.js";
@@ -30,7 +30,7 @@ import {
30
30
  readParkedWait2,
31
31
  waitingOn2,
32
32
  lapsed2
33
- } from "./compose-ks2rdteq.js";
33
+ } from "./compose-bz70g01d.js";
34
34
 
35
35
  // src/engine/durable.ts
36
36
  import { isJson, isJsonObject, SdkError } from "@nyte-ai/schema";
@@ -20,7 +20,7 @@ import {
20
20
  } from "./compose-vn7b7fdj.js";
21
21
  import {
22
22
  storedAnswer2
23
- } from "./compose-c2rnebv0.js";
23
+ } from "./compose-d95fwwvw.js";
24
24
  import {
25
25
  WAITS2,
26
26
  TIME2,
@@ -35,7 +35,7 @@ import {
35
35
  import {
36
36
  commit2,
37
37
  changeCall2
38
- } from "./compose-pnsvwd3m.js";
38
+ } from "./compose-bbhk8vnr.js";
39
39
  import {
40
40
  readRunEnd2
41
41
  } from "./compose-xhtgytrh.js";
@@ -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/extend/plugin-api.ts
17
17
  import { isJsonObject, SdkError } from "@nyte-ai/schema";