@nyte-ai/core 0.0.18 → 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.
- package/README.md +1 -1
- package/THIRD-PARTY-NOTICES.md +66 -0
- package/dist/chunks/{compose-yk3y0jap.js → compose-0m65m83c.js} +7 -7
- package/dist/chunks/{compose-r12cnkpc.js → compose-12jnd50a.js} +11 -11
- package/dist/chunks/{compose-q1n2dgrs.js → compose-1knxqqm1.js} +4 -4
- package/dist/chunks/{compose-xtkavyrw.js → compose-1r0wr5dc.js} +17 -9
- package/dist/chunks/{compose-9tqm6g18.js → compose-2rha31fc.js} +4 -4
- package/dist/chunks/{compose-0bpspysf.js → compose-4ppmas7g.js} +5 -5
- package/dist/chunks/compose-5rg7askh.js +52 -0
- package/dist/chunks/{compose-mryw0674.js → compose-5z835ej2.js} +6 -1
- package/dist/chunks/{compose-7k6nsmtq.js → compose-6gt28900.js} +11 -14
- package/dist/chunks/{compose-2eg8w67t.js → compose-6r5ymwyr.js} +15 -4
- package/dist/chunks/{compose-xd0kdp3t.js → compose-753gc057.js} +8 -8
- package/dist/chunks/{compose-q1ts0v6k.js → compose-767bb340.js} +1 -1
- package/dist/chunks/{compose-rpq9n0nz.js → compose-8mkfr84d.js} +89 -32
- package/dist/chunks/{compose-5w5bbakh.js → compose-8pp3vtv0.js} +5 -5
- package/dist/chunks/{compose-gaps3heh.js → compose-9hy3p236.js} +9 -9
- package/dist/chunks/{compose-pgeemk2b.js → compose-a7k9h27z.js} +6 -5
- package/dist/chunks/{compose-dc2ns6gd.js → compose-a8ddt55n.js} +10 -10
- package/dist/chunks/{compose-7b8ajk7a.js → compose-ad80nkkn.js} +8 -8
- package/dist/chunks/{compose-064y3n82.js → compose-ae5t6v5b.js} +5 -5
- package/dist/chunks/{compose-amr0k1m1.js → compose-b2bf1jvy.js} +122 -41
- package/dist/chunks/{compose-xpfr4wt3.js → compose-bbhk8vnr.js} +7 -4
- package/dist/chunks/compose-bd8c5n7k.js +32 -0
- package/dist/chunks/{compose-rehp8epe.js → compose-byse0eqj.js} +7 -7
- package/dist/chunks/{compose-ef936rsa.js → compose-bz70g01d.js} +27 -11
- package/dist/chunks/compose-c4238qkb.js +105 -0
- package/dist/chunks/{compose-q1b0tppc.js → compose-c9wxgbjp.js} +4 -4
- package/dist/chunks/{compose-h272znxk.js → compose-cdj05t7x.js} +7 -7
- package/dist/chunks/{compose-kb22bkpt.js → compose-cqpjcx2t.js} +12 -1
- package/dist/chunks/{compose-dbx6ftbm.js → compose-csh5vv2t.js} +42 -4
- package/dist/chunks/{compose-eqr5qwp1.js → compose-d1m94kzq.js} +62 -22
- package/dist/chunks/{compose-drdej9yt.js → compose-d95fwwvw.js} +4 -4
- package/dist/chunks/{compose-jc22rsz4.js → compose-dbsn3bsy.js} +2 -2
- package/dist/chunks/{compose-s2aew2c9.js → compose-e2fyz3xc.js} +5 -5
- package/dist/chunks/{compose-gg8b9b21.js → compose-e9f6nrwp.js} +23 -18
- package/dist/chunks/{compose-52afaf3v.js → compose-fnncnk81.js} +7 -7
- package/dist/chunks/{compose-bjx8s01m.js → compose-fqsqjbrf.js} +1 -1
- package/dist/chunks/{compose-1gd9vkye.js → compose-gj2ypr7q.js} +3 -3
- package/dist/chunks/compose-gvm49f4b.js +155 -0
- package/dist/chunks/{compose-1jz2j92f.js → compose-gxjc6vz9.js} +30 -2
- package/dist/chunks/{compose-cq1zx4gp.js → compose-h14pmqv3.js} +1 -1
- package/dist/chunks/{compose-d2s80zg2.js → compose-hfrjm4a1.js} +5 -5
- package/dist/chunks/{compose-kmzr06mw.js → compose-hfsn6pnt.js} +8 -5
- package/dist/chunks/{compose-jjchxce6.js → compose-j42p9wfs.js} +1 -1
- package/dist/chunks/{compose-4b1zf3p0.js → compose-jd4bsnqh.js} +63 -47
- package/dist/chunks/{compose-2g3enfv5.js → compose-jeemzja1.js} +4 -4
- package/dist/chunks/{compose-y478gv6x.js → compose-jmmyw9hd.js} +4 -4
- package/dist/chunks/{compose-5tkyrzr0.js → compose-jwy1gba9.js} +4 -4
- package/dist/chunks/{compose-k35b75k9.js → compose-kwkna3cg.js} +2 -4
- package/dist/chunks/{compose-t53j8yxv.js → compose-m01wspwf.js} +1 -1
- package/dist/chunks/{compose-n93897b0.js → compose-m91ffwss.js} +1 -1
- package/dist/chunks/{compose-madtxnp1.js → compose-matk94se.js} +7 -7
- package/dist/chunks/{compose-aa73dbe8.js → compose-mcz93154.js} +117 -58
- package/dist/chunks/{compose-r7dx7rpz.js → compose-mdwr0er9.js} +72 -15
- package/dist/chunks/{compose-j12n448k.js → compose-nj4nj5n9.js} +36 -3
- package/dist/chunks/{compose-yn2et568.js → compose-nkxwrphm.js} +141 -15
- package/dist/chunks/{compose-k8aghhv2.js → compose-pkprmn5b.js} +16 -16
- package/dist/chunks/{compose-1z7q169s.js → compose-q2zxbg41.js} +69 -41
- package/dist/chunks/{compose-b5xz0dj7.js → compose-qwbe95qs.js} +2 -2
- package/dist/chunks/{compose-vmhv4e00.js → compose-qxfq6dn9.js} +13 -12
- package/dist/chunks/{compose-wgphshsn.js → compose-r8tz1xfj.js} +8 -8
- package/dist/chunks/{compose-ffk8dnbh.js → compose-smsafpqe.js} +3 -3
- package/dist/chunks/{compose-djq2bt61.js → compose-sprfv38c.js} +6 -6
- package/dist/chunks/{compose-cdy4q5mv.js → compose-t9fcqtby.js} +17 -16
- package/dist/chunks/{compose-p3q14yt1.js → compose-tppkp915.js} +5 -5
- package/dist/chunks/{compose-dckpgtks.js → compose-ts08bth2.js} +3 -3
- package/dist/chunks/{compose-n10w4nkk.js → compose-vn7b7fdj.js} +12 -3
- package/dist/chunks/{compose-9m19b27b.js → compose-w6zb11k1.js} +7 -7
- package/dist/chunks/{compose-j3tkz0tb.js → compose-wvzzf8n2.js} +6 -6
- package/dist/chunks/{compose-6vf6dkk2.js → compose-xhtgytrh.js} +2 -2
- package/dist/chunks/{compose-4tb2vn84.js → compose-y6xgbg2h.js} +1 -1
- package/dist/chunks/compose-yfcb6w2h.js +58 -0
- package/dist/chunks/{compose-0rx7ygxq.js → compose-zaanjpb7.js} +1 -1
- package/dist/chunks/{compose-7pc3p5ex.js → compose-zjj072km.js} +8 -8
- package/dist/src/agent/compaction.js +41 -39
- package/dist/src/agent/images.d.ts +7 -0
- package/dist/src/agent/images.js +8 -0
- package/dist/src/agent/request.js +30 -30
- package/dist/src/agent/tool-runner.d.ts +3 -7
- package/dist/src/agent/tool-runner.js +34 -30
- package/dist/src/agent/transcript.d.ts +0 -1
- package/dist/src/agent/transcript.js +37 -35
- package/dist/src/agent/turn.js +46 -43
- package/dist/src/api/connection.js +60 -56
- package/dist/src/api/head.js +42 -41
- package/dist/src/api/part.js +22 -22
- package/dist/src/api/server.js +48 -44
- package/dist/src/api/session.js +48 -47
- package/dist/src/builtins/delegation.js +2 -2
- package/dist/src/builtins/environment.js +1 -2
- package/dist/src/compose.d.ts +6 -7
- package/dist/src/compose.js +72 -67
- package/dist/src/contract/fold.d.ts +1 -3
- package/dist/src/contract/host.d.ts +30 -1
- package/dist/src/contract/host.js +4 -2
- package/dist/src/contract/kernel.d.ts +6 -35
- package/dist/src/contract/parts.d.ts +4 -0
- package/dist/src/contract/parts.js +1 -1
- package/dist/src/contract/records.d.ts +69 -3
- package/dist/src/contract/records.js +5 -1
- package/dist/src/contract/session.d.ts +2 -1
- package/dist/src/contract/tools.d.ts +10 -1
- package/dist/src/contract/workspace.d.ts +7 -3
- package/dist/src/drive/execution.js +46 -42
- package/dist/src/drive/interruptions.d.ts +7 -0
- package/dist/src/drive/interruptions.js +17 -0
- package/dist/src/engine/admission.js +24 -24
- package/dist/src/engine/batches.js +22 -22
- package/dist/src/engine/branch-summary.js +21 -21
- package/dist/src/engine/durable.d.ts +0 -2
- package/dist/src/engine/durable.js +20 -20
- package/dist/src/engine/fence.js +20 -20
- package/dist/src/engine/jobs.d.ts +2 -0
- package/dist/src/engine/jobs.js +31 -27
- package/dist/src/engine/move.js +23 -23
- package/dist/src/engine/part-definitions.js +2 -2
- package/dist/src/engine/presence.d.ts +39 -0
- package/dist/src/engine/presence.js +16 -0
- package/dist/src/engine/principals.js +17 -17
- package/dist/src/engine/receipts.js +21 -21
- package/dist/src/engine/runs.d.ts +1 -1
- package/dist/src/engine/runs.js +25 -25
- package/dist/src/engine/start.js +36 -35
- package/dist/src/engine/surface.d.ts +4 -0
- package/dist/src/engine/surface.js +13 -0
- package/dist/src/engine/waits.d.ts +5 -15
- package/dist/src/engine/waits.js +23 -19
- package/dist/src/env/browser.js +27 -27
- package/dist/src/env/environment.js +29 -29
- package/dist/src/env/mcp.js +31 -31
- package/dist/src/env/session-changes.d.ts +10 -0
- package/dist/src/env/session-changes.js +15 -0
- package/dist/src/env/trust.js +30 -30
- package/dist/src/env/workspaces.js +34 -33
- package/dist/src/env/worktrees.js +35 -34
- package/dist/src/extend/activation.js +35 -34
- package/dist/src/extend/hooks.js +22 -22
- package/dist/src/extend/models.d.ts +2 -1
- package/dist/src/extend/models.js +32 -30
- package/dist/src/extend/plugin-api.js +18 -18
- package/dist/src/extend/plugin-runtime.js +42 -41
- package/dist/src/extend/registry.js +27 -27
- package/dist/src/extend/resources.js +31 -31
- package/dist/src/extend/setting-layers.js +4 -4
- package/dist/src/extend/settings.js +38 -37
- package/dist/src/extend/workspace-commands.js +43 -42
- package/dist/src/fold/calls.js +5 -5
- package/dist/src/fold/checkpoint.js +11 -11
- package/dist/src/fold/code.d.ts +1 -2
- package/dist/src/fold/code.js +1 -1
- package/dist/src/fold/commit.d.ts +0 -4
- package/dist/src/fold/commit.js +16 -16
- package/dist/src/fold/draft.js +4 -4
- package/dist/src/fold/fold.js +7 -7
- package/dist/src/fold/paths.js +5 -5
- package/dist/src/fold/project.d.ts +3 -1
- package/dist/src/fold/project.js +8 -6
- package/dist/src/fold/reads.js +5 -5
- package/dist/src/fold/seen.js +19 -19
- package/dist/src/fold/view.d.ts +1 -1
- package/dist/src/fold/view.js +20 -20
- package/dist/src/fold/watch.js +15 -15
- package/dist/src/harness.d.ts +3 -1
- package/dist/src/harness.js +75 -70
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.js +5 -3
- package/dist/src/server.js +70 -65
- package/dist/src/store/inspect.js +4 -4
- package/dist/src/store/log.d.ts +0 -2
- package/dist/src/store/log.js +2 -2
- package/dist/src/store/memory-store.js +5 -5
- package/dist/src/store/migrations.js +3 -3
- package/dist/src/store/model-state.d.ts +6 -1
- package/dist/src/store/model-state.js +14 -4
- package/dist/src/store/parts.js +5 -5
- package/dist/src/store/refs.d.ts +6 -5
- package/dist/src/store/refs.js +11 -1
- package/dist/src/store/session-index.js +2 -2
- package/dist/src/store/session.d.ts +3 -1
- package/dist/src/store/session.js +5 -3
- package/dist/src/store.d.ts +1 -1
- package/dist/src/store.js +11 -7
- package/dist/src/testing.d.ts +2 -0
- package/dist/src/testing.js +83 -70
- package/package.json +4 -4
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PARTICIPANT_AUTHORITY2
|
|
3
|
-
} from "./compose-
|
|
3
|
+
} from "./compose-5z835ej2.js";
|
|
4
4
|
import {
|
|
5
5
|
check2
|
|
6
6
|
} from "./compose-bj54tkph.js";
|
|
7
7
|
import {
|
|
8
8
|
definePart2,
|
|
9
9
|
tool2
|
|
10
|
-
} from "./compose-
|
|
10
|
+
} from "./compose-fqsqjbrf.js";
|
|
11
11
|
import {
|
|
12
12
|
decodeRunRecord2,
|
|
13
13
|
decodePartRecord2
|
|
14
|
-
} from "./compose-
|
|
15
|
-
import {
|
|
16
|
-
runRef2,
|
|
17
|
-
partRef2
|
|
18
|
-
} from "./compose-kb22bkpt.js";
|
|
14
|
+
} from "./compose-gxjc6vz9.js";
|
|
19
15
|
import {
|
|
20
16
|
dev2
|
|
21
17
|
} from "./compose-n116fnmp.js";
|
|
18
|
+
import {
|
|
19
|
+
runRef2,
|
|
20
|
+
partRef2
|
|
21
|
+
} from "./compose-cqpjcx2t.js";
|
|
22
22
|
import {
|
|
23
23
|
STALE2,
|
|
24
24
|
load2,
|
|
@@ -29,24 +29,36 @@ import {
|
|
|
29
29
|
attempt2,
|
|
30
30
|
readCall2,
|
|
31
31
|
readCalls2
|
|
32
|
-
} from "./compose-
|
|
32
|
+
} from "./compose-vn7b7fdj.js";
|
|
33
|
+
import {
|
|
34
|
+
readAttributedPaths2,
|
|
35
|
+
ownedChanges2,
|
|
36
|
+
anotherChatLive2
|
|
37
|
+
} from "./compose-yfcb6w2h.js";
|
|
33
38
|
import {
|
|
34
39
|
settling2
|
|
35
|
-
} from "./compose-
|
|
40
|
+
} from "./compose-d95fwwvw.js";
|
|
36
41
|
import {
|
|
37
42
|
commit2
|
|
38
|
-
} from "./compose-
|
|
43
|
+
} from "./compose-bbhk8vnr.js";
|
|
39
44
|
import {
|
|
40
45
|
signalsPark2,
|
|
41
46
|
parkStep2,
|
|
42
47
|
runStep2
|
|
43
|
-
} from "./compose-
|
|
48
|
+
} from "./compose-byse0eqj.js";
|
|
49
|
+
import {
|
|
50
|
+
startJob2
|
|
51
|
+
} from "./compose-nkxwrphm.js";
|
|
44
52
|
import {
|
|
45
53
|
publishPatch2
|
|
46
|
-
} from "./compose-
|
|
54
|
+
} from "./compose-qxfq6dn9.js";
|
|
55
|
+
import {
|
|
56
|
+
hiddenOwners2,
|
|
57
|
+
missingCapabilities2
|
|
58
|
+
} from "./compose-bd8c5n7k.js";
|
|
47
59
|
import {
|
|
48
60
|
toolSource2
|
|
49
|
-
} from "./compose-
|
|
61
|
+
} from "./compose-ae5t6v5b.js";
|
|
50
62
|
|
|
51
63
|
// src/agent/tool-runner.ts
|
|
52
64
|
import { Type } from "typebox";
|
|
@@ -90,9 +102,10 @@ function runningCalls(kernel) {
|
|
|
90
102
|
async function executeCall2(kernel, input) {
|
|
91
103
|
const { session, call } = input;
|
|
92
104
|
const controller = new AbortController;
|
|
105
|
+
const running = { stop: controller, move: new AbortController };
|
|
93
106
|
const live = runningCalls(kernel);
|
|
94
107
|
const controllers = live.get(call) ?? new Set;
|
|
95
|
-
controllers.add(
|
|
108
|
+
controllers.add(running);
|
|
96
109
|
live.set(call, controllers);
|
|
97
110
|
const steps = await Promise.all([
|
|
98
111
|
readCall2(kernel.store, session, call),
|
|
@@ -103,10 +116,11 @@ async function executeCall2(kernel, input) {
|
|
|
103
116
|
try {
|
|
104
117
|
return await perform(kernel, {
|
|
105
118
|
...input,
|
|
106
|
-
signal: AbortSignal.any([input.signal, controller.signal])
|
|
119
|
+
signal: AbortSignal.any([input.signal, controller.signal]),
|
|
120
|
+
released: running.move.signal
|
|
107
121
|
});
|
|
108
122
|
} finally {
|
|
109
|
-
controllers.delete(
|
|
123
|
+
controllers.delete(running);
|
|
110
124
|
if (controllers.size === 0 && live.get(call) === controllers)
|
|
111
125
|
live.delete(call);
|
|
112
126
|
}
|
|
@@ -150,13 +164,20 @@ function stoppableTool2(kernel) {
|
|
|
150
164
|
async stop(_input, context) {
|
|
151
165
|
const running = runningCalls(kernel).get(context.part.id);
|
|
152
166
|
if (running !== undefined && running.size > 0) {
|
|
153
|
-
for (const
|
|
154
|
-
|
|
167
|
+
for (const live of running)
|
|
168
|
+
live.stop.abort();
|
|
155
169
|
return;
|
|
156
170
|
}
|
|
157
171
|
for (const call of [context.part.id, `${HOOK}${context.part.id}`])
|
|
158
172
|
await kernel.waits.callStopped(context.session, asId(call));
|
|
159
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;
|
|
160
181
|
}
|
|
161
182
|
};
|
|
162
183
|
return definePart2({
|
|
@@ -175,6 +196,7 @@ async function perform(kernel, where) {
|
|
|
175
196
|
if (planned.kind === "parked")
|
|
176
197
|
return PARKED;
|
|
177
198
|
let concluded;
|
|
199
|
+
let before = null;
|
|
178
200
|
const snapshotted = planned.kind === "execute" && where.covered !== true && planned.definition.effects !== "none";
|
|
179
201
|
const step = await runStep2(kernel, {
|
|
180
202
|
session,
|
|
@@ -187,13 +209,17 @@ async function perform(kernel, where) {
|
|
|
187
209
|
opening: { updates: () => partOpening(kernel.store, where, planned), fenced: STOPPED },
|
|
188
210
|
part: asId(call),
|
|
189
211
|
signal,
|
|
190
|
-
body: planned.kind === "execute" ?
|
|
212
|
+
body: planned.kind === "execute" ? async (durable) => {
|
|
213
|
+
const executed = await execute(kernel, where, planned, durable, snapshotted);
|
|
214
|
+
before = executed.before;
|
|
215
|
+
return executed.outcome;
|
|
216
|
+
} : async () => planned.outcome,
|
|
191
217
|
async settle(ended) {
|
|
192
|
-
concluded ??= conclude(kernel, where, ended,
|
|
218
|
+
concluded ??= conclude(kernel, where, ended, before, planned.class);
|
|
193
219
|
const settled = await concluded;
|
|
194
220
|
return {
|
|
195
221
|
result: settled.outcome,
|
|
196
|
-
updates: await settlement(kernel.store, where, planned, settled)
|
|
222
|
+
updates: await settlement(kernel.store, where, planned, settled, before)
|
|
197
223
|
};
|
|
198
224
|
},
|
|
199
225
|
decode: (value) => outcomes.Check(value) ? outcomes.Decode(value) : null
|
|
@@ -206,14 +232,18 @@ async function perform(kernel, where) {
|
|
|
206
232
|
async function plan(kernel, where, intent) {
|
|
207
233
|
const { session, head, run, call, name } = where;
|
|
208
234
|
const custom = { kind: "custom", label: name };
|
|
209
|
-
const
|
|
210
|
-
|
|
235
|
+
const found = toolSource2(where.runtime).get(name);
|
|
236
|
+
const hidden = await hiddenOwners2(kernel, session, run);
|
|
237
|
+
const definition = found === undefined || hidden.has(found.owner) ? undefined : found.definition;
|
|
238
|
+
if (definition === undefined) {
|
|
239
|
+
const missing = found === undefined ? await missingCapabilities2(kernel, session, run) : [];
|
|
211
240
|
return {
|
|
212
241
|
kind: "settle",
|
|
213
|
-
outcome: failed(`No tool is named ${name}.`),
|
|
242
|
+
outcome: failed(missing.length === 0 ? `No tool is named ${name}.` : `${name} isn't available here: this chat uses ${missing.join(", ")}, which only Nyte.app has. Open Nyte.app to continue.`),
|
|
214
243
|
args: where.args,
|
|
215
244
|
class: custom
|
|
216
245
|
};
|
|
246
|
+
}
|
|
217
247
|
if (where.argumentsError !== undefined)
|
|
218
248
|
return {
|
|
219
249
|
kind: "settle",
|
|
@@ -314,20 +344,24 @@ async function partOpening(store, where, planned) {
|
|
|
314
344
|
}
|
|
315
345
|
async function execute(kernel, where, planned, durable, snapshotted) {
|
|
316
346
|
const { session, run, signal } = where;
|
|
347
|
+
let before = null;
|
|
317
348
|
try {
|
|
318
349
|
if (snapshotted)
|
|
319
|
-
await baseline(kernel, session, run);
|
|
320
|
-
const [env, found] = await Promise.all([
|
|
350
|
+
before = await durable.memo("nyte:snapshot", () => baseline(kernel, session, run));
|
|
351
|
+
const [env, found, hidden] = await Promise.all([
|
|
321
352
|
kernel.environments.attach(session),
|
|
322
|
-
requireSession2(kernel.store, session)
|
|
353
|
+
requireSession2(kernel.store, session),
|
|
354
|
+
hiddenOwners2(kernel, session, run)
|
|
323
355
|
]);
|
|
324
356
|
const invocation = createInvocation2(kernel, {
|
|
357
|
+
hidden,
|
|
325
358
|
session,
|
|
326
359
|
head: where.head,
|
|
327
360
|
run,
|
|
328
361
|
call: where.call,
|
|
329
362
|
context: where.context,
|
|
330
363
|
signal,
|
|
364
|
+
released: where.released,
|
|
331
365
|
workspace: found.record.workspace,
|
|
332
366
|
env,
|
|
333
367
|
durable,
|
|
@@ -335,11 +369,17 @@ async function execute(kernel, where, planned, durable, snapshotted) {
|
|
|
335
369
|
covered: where.covered === true || snapshotted
|
|
336
370
|
});
|
|
337
371
|
const result = await planned.definition.execute(planned.input, invocation);
|
|
338
|
-
return
|
|
372
|
+
return {
|
|
373
|
+
outcome: signal.aborted ? STOPPED : await validateToolResult(planned.definition, result),
|
|
374
|
+
before
|
|
375
|
+
};
|
|
339
376
|
} catch (error) {
|
|
340
377
|
if (signalsPark2(error))
|
|
341
378
|
throw error;
|
|
342
|
-
return
|
|
379
|
+
return {
|
|
380
|
+
outcome: signal.aborted ? STOPPED : failed(error instanceof Error ? error.message : String(error)),
|
|
381
|
+
before
|
|
382
|
+
};
|
|
343
383
|
}
|
|
344
384
|
}
|
|
345
385
|
async function validateToolResult(definition, result) {
|
|
@@ -361,15 +401,32 @@ async function validateToolResult(definition, result) {
|
|
|
361
401
|
parts
|
|
362
402
|
};
|
|
363
403
|
}
|
|
364
|
-
async function conclude(kernel, where, ended,
|
|
404
|
+
async function conclude(kernel, where, ended, before, toolClass) {
|
|
365
405
|
const { session, head, run } = where;
|
|
366
406
|
const outcome = await where.runtime.hooks.transform("after_tool", ended.kind === "done" ? ended.value : INTERRUPTED, { session, head, run, principal: where.context.principal });
|
|
367
|
-
const snapshots =
|
|
368
|
-
if (snapshots === null)
|
|
369
|
-
return { outcome,
|
|
370
|
-
const from = await diffBase(kernel.store, session, run) ?? await snapshots.before(run);
|
|
407
|
+
const snapshots = before !== null && ended.kind === "done" ? await kernel.environments.snapshots(session) : null;
|
|
408
|
+
if (snapshots === null || before === null)
|
|
409
|
+
return { outcome, files: null, thread: null, snapshot: null, path: null, unattributed: false };
|
|
371
410
|
const to = await snapshots.after(run);
|
|
372
|
-
const
|
|
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 };
|
|
419
|
+
}
|
|
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;
|
|
427
|
+
}
|
|
428
|
+
function fileChanges(set) {
|
|
429
|
+
return set.files.map((file) => {
|
|
373
430
|
const change = {
|
|
374
431
|
path: file.path,
|
|
375
432
|
status: file.status,
|
|
@@ -378,18 +435,8 @@ async function conclude(kernel, where, ended, snapshotted) {
|
|
|
378
435
|
};
|
|
379
436
|
return file.from === undefined ? change : { ...change, from: file.from };
|
|
380
437
|
});
|
|
381
|
-
return {
|
|
382
|
-
outcome,
|
|
383
|
-
changes: {
|
|
384
|
-
added: files.reduce((sum, file) => sum + file.added, 0),
|
|
385
|
-
removed: files.reduce((sum, file) => sum + file.removed, 0),
|
|
386
|
-
paths: files.map((file) => file.path)
|
|
387
|
-
},
|
|
388
|
-
files,
|
|
389
|
-
snapshot: to
|
|
390
|
-
};
|
|
391
438
|
}
|
|
392
|
-
async function settlement(store, where, planned, settled) {
|
|
439
|
+
async function settlement(store, where, planned, settled, before) {
|
|
393
440
|
const { session, head, run, call } = where;
|
|
394
441
|
const part = asId(call);
|
|
395
442
|
const name = partRef2(session, part);
|
|
@@ -399,6 +446,14 @@ async function settlement(store, where, planned, settled) {
|
|
|
399
446
|
]);
|
|
400
447
|
if (found === null)
|
|
401
448
|
return [];
|
|
449
|
+
const counted = before === null || settled.path !== null ? new Set : await readAttributedPaths2(store, session, before.seq, (event) => event.head === head && event.call !== call);
|
|
450
|
+
const files = settled.files?.filter((file) => !counted.has(file.path));
|
|
451
|
+
const changes = files === undefined ? null : {
|
|
452
|
+
added: files.reduce((sum, file) => sum + file.added, 0),
|
|
453
|
+
removed: files.reduce((sum, file) => sum + file.removed, 0),
|
|
454
|
+
paths: files.map((file) => file.path),
|
|
455
|
+
...settled.unattributed && { unattributed: true }
|
|
456
|
+
};
|
|
402
457
|
const at = Date.now();
|
|
403
458
|
const state = {
|
|
404
459
|
call,
|
|
@@ -407,7 +462,7 @@ async function settlement(store, where, planned, settled) {
|
|
|
407
462
|
class: planned.class,
|
|
408
463
|
phase: "settled",
|
|
409
464
|
outcome: settled.outcome,
|
|
410
|
-
changes
|
|
465
|
+
changes
|
|
411
466
|
};
|
|
412
467
|
const based = settled.snapshot === null ? [] : await nextBase(store, session, run, settled.snapshot);
|
|
413
468
|
const record = { ...found.record, state, version: found.record.version + 1 };
|
|
@@ -419,9 +474,9 @@ async function settlement(store, where, planned, settled) {
|
|
|
419
474
|
part,
|
|
420
475
|
change: "settled",
|
|
421
476
|
outcome: settled.outcome,
|
|
422
|
-
changes
|
|
477
|
+
changes
|
|
423
478
|
},
|
|
424
|
-
...settled.
|
|
479
|
+
...settled.thread === null ? [] : [{ head: null, kind: "changes", files: settled.thread }]
|
|
425
480
|
];
|
|
426
481
|
if (found.record.status.kind === "failed" || found.record.status.kind === "settled")
|
|
427
482
|
return [
|
|
@@ -448,12 +503,14 @@ async function settlement(store, where, planned, settled) {
|
|
|
448
503
|
return [...landed.updates, ...based];
|
|
449
504
|
}
|
|
450
505
|
async function baseline(kernel, session, run) {
|
|
451
|
-
if (await diffBase(kernel.store, session, run) !== null)
|
|
452
|
-
return;
|
|
453
506
|
const snapshots = await kernel.environments.snapshots(session);
|
|
454
507
|
if (snapshots === null)
|
|
455
|
-
return;
|
|
456
|
-
const
|
|
508
|
+
return null;
|
|
509
|
+
const seq = await kernel.store.refs.tail(session);
|
|
510
|
+
const [before, contended] = await Promise.all([
|
|
511
|
+
snapshots.after(run),
|
|
512
|
+
anotherChatLive2(kernel, session)
|
|
513
|
+
]);
|
|
457
514
|
await attempt2(`Recording run ${run}'s snapshot`, async () => {
|
|
458
515
|
const found = await load2(kernel.store, await kernel.store.refs.get(runRef2(session, run)), decodeRunRecord2);
|
|
459
516
|
if (found === null || found.record.snapshot !== null)
|
|
@@ -467,10 +524,7 @@ async function baseline(kernel, session, run) {
|
|
|
467
524
|
]);
|
|
468
525
|
return outcome.kind === "set" ? undefined : STALE2;
|
|
469
526
|
});
|
|
470
|
-
}
|
|
471
|
-
async function diffBase(store, session, run) {
|
|
472
|
-
const found = await load2(store, await store.refs.get(runRef2(session, run)), decodeRunRecord2);
|
|
473
|
-
return found?.record.lastSnapshot ?? found?.record.snapshot ?? null;
|
|
527
|
+
return { snapshot: before, seq, contended };
|
|
474
528
|
}
|
|
475
529
|
async function nextBase(store, session, run, to) {
|
|
476
530
|
const found = await load2(store, await store.refs.get(runRef2(session, run)), decodeRunRecord2);
|
|
@@ -536,6 +590,11 @@ function createInvocation2(kernel, input) {
|
|
|
536
590
|
progress: update
|
|
537
591
|
});
|
|
538
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
|
+
},
|
|
539
598
|
tools: {
|
|
540
599
|
async execute(name, args, options) {
|
|
541
600
|
const key = options?.key ?? `${calls}`;
|
|
@@ -554,7 +613,7 @@ function createInvocation2(kernel, input) {
|
|
|
554
613
|
});
|
|
555
614
|
return outcome.kind === "parked" ? parkStep2(durable) : outcome;
|
|
556
615
|
},
|
|
557
|
-
list: () => source.list()
|
|
616
|
+
list: () => source.list().filter((info) => input.hidden?.has(info.owner) !== true)
|
|
558
617
|
},
|
|
559
618
|
wait: (target) => durable.wait(target),
|
|
560
619
|
memo: (name, compute) => durable.memo(name, compute),
|
|
@@ -3,24 +3,29 @@ import {
|
|
|
3
3
|
} from "./compose-q6c7wswc.js";
|
|
4
4
|
import {
|
|
5
5
|
put2
|
|
6
|
-
} from "./compose-
|
|
6
|
+
} from "./compose-vn7b7fdj.js";
|
|
7
7
|
import {
|
|
8
8
|
convertJsonSchema2,
|
|
9
9
|
check2
|
|
10
10
|
} from "./compose-bj54tkph.js";
|
|
11
11
|
import {
|
|
12
12
|
commit2
|
|
13
|
-
} from "./compose-
|
|
13
|
+
} from "./compose-bbhk8vnr.js";
|
|
14
14
|
import {
|
|
15
15
|
MODEL_PREFERENCE2,
|
|
16
|
+
modelListingRef2,
|
|
17
|
+
readModelListings2,
|
|
18
|
+
thinkingPreferenceRef2,
|
|
19
|
+
readThinkingPreference2,
|
|
20
|
+
readThinkingPreferences2,
|
|
16
21
|
readModelSelection2
|
|
17
|
-
} from "./compose-
|
|
22
|
+
} from "./compose-csh5vv2t.js";
|
|
18
23
|
import {
|
|
19
24
|
closable2
|
|
20
25
|
} from "./compose-zfjxkavf.js";
|
|
21
26
|
import {
|
|
22
27
|
bumpGeneration2
|
|
23
|
-
} from "./compose-
|
|
28
|
+
} from "./compose-ae5t6v5b.js";
|
|
24
29
|
|
|
25
30
|
// src/extend/models.ts
|
|
26
31
|
import { SdkError } from "@nyte-ai/schema";
|
|
@@ -81,6 +86,14 @@ function createModelsApi2(kernel, models) {
|
|
|
81
86
|
bumpGeneration2(kernel);
|
|
82
87
|
return { kind: "set" };
|
|
83
88
|
},
|
|
89
|
+
async setListing(refs, listing) {
|
|
90
|
+
if (refs.some((ref) => models.getModel(ref.provider, ref.id) === undefined))
|
|
91
|
+
return { kind: "unknown-model" };
|
|
92
|
+
const target = listing === "shown" ? null : await put2(kernel.store, "kv", listing);
|
|
93
|
+
await commit2(kernel, refs.map((ref) => ({ name: modelListingRef2(ref), target })));
|
|
94
|
+
bumpGeneration2(kernel);
|
|
95
|
+
return { kind: "set" };
|
|
96
|
+
},
|
|
84
97
|
async verify(provider) {
|
|
85
98
|
let verification;
|
|
86
99
|
try {
|
|
@@ -109,8 +122,10 @@ function createModelsApi2(kernel, models) {
|
|
|
109
122
|
async function modelCatalog(kernel, models) {
|
|
110
123
|
const generation = kernel.host.current().catalog;
|
|
111
124
|
const policies = staticPolicies(kernel);
|
|
112
|
-
const [preferred, credentials] = await Promise.all([
|
|
125
|
+
const [preferred, remembered, listed, credentials] = await Promise.all([
|
|
113
126
|
readModelSelection2(kernel.store),
|
|
127
|
+
readThinkingPreferences2(kernel.store),
|
|
128
|
+
readModelListings2(kernel.store),
|
|
114
129
|
kernel.modelState.read(models)
|
|
115
130
|
]);
|
|
116
131
|
const providers = models.getProviders().map((provider) => {
|
|
@@ -119,13 +134,19 @@ async function modelCatalog(kernel, models) {
|
|
|
119
134
|
for (const model of catalog)
|
|
120
135
|
if (model.variant?.mode === "fast" && !fast.has(model.variant.base))
|
|
121
136
|
fast.set(model.variant.base, { provider: model.provider, id: model.id });
|
|
137
|
+
const base = catalog.filter((model) => model.variant === undefined);
|
|
138
|
+
const listings = Object.fromEntries(base.flatMap((model) => {
|
|
139
|
+
const listing = listed.get(formatModelKey(model));
|
|
140
|
+
return listing === undefined ? [] : [[model.id, listing]];
|
|
141
|
+
}));
|
|
122
142
|
return {
|
|
123
143
|
id: provider.id,
|
|
124
144
|
name: provider.name,
|
|
125
145
|
credential: credentials.get(provider.id) ?? "unknown",
|
|
126
146
|
methods: listLoginMethods(provider),
|
|
127
147
|
limits: readProviderLimits(models, provider.id),
|
|
128
|
-
|
|
148
|
+
listings,
|
|
149
|
+
models: base.map((model) => projectModel(model, fast.get(model.id) ?? null, policies.get(formatModelKey(model)), provider.capabilities, remembered.get(formatModelKey(model))))
|
|
129
150
|
};
|
|
130
151
|
});
|
|
131
152
|
const fallback = providers.find((provider) => models.getProvider(provider.id)?.explicitOnly !== true && (provider.credential === "configured" || provider.credential === "verified") && provider.models.length > 0)?.models[0]?.ref ?? null;
|
|
@@ -138,7 +159,7 @@ function modelInfo2(models, ref, runtime) {
|
|
|
138
159
|
return null;
|
|
139
160
|
const policy = runtime.registries.modelContext.list().findLast((entry) => formatModelKey(entry.model) === formatModelKey(ref));
|
|
140
161
|
const fast = catalog.find((entry) => entry.variant?.mode === "fast" && entry.variant.base === model.id);
|
|
141
|
-
return projectModel(model, fast === undefined ? null : { provider: fast.provider, id: fast.id }, policy, models.getProvider(model.provider)?.capabilities);
|
|
162
|
+
return projectModel(model, fast === undefined ? null : { provider: fast.provider, id: fast.id }, policy, models.getProvider(model.provider)?.capabilities, undefined);
|
|
142
163
|
}
|
|
143
164
|
function createLogin2(kernel, models, input) {
|
|
144
165
|
let pending = null;
|
|
@@ -264,13 +285,13 @@ async function defaultModel(kernel, models) {
|
|
|
264
285
|
return null;
|
|
265
286
|
}
|
|
266
287
|
var NYTE_LOOP = { steer: true };
|
|
267
|
-
function projectModel(model, fast, policy, capabilities) {
|
|
288
|
+
function projectModel(model, fast, policy, capabilities, remembered) {
|
|
268
289
|
return {
|
|
269
290
|
ref: { provider: model.provider, id: model.id },
|
|
270
291
|
name: model.name,
|
|
271
292
|
reasoning: model.reasoning,
|
|
272
293
|
thinking: acceptedThinkingLevels(model),
|
|
273
|
-
defaultThinking: defaultThinkingLevel(model),
|
|
294
|
+
defaultThinking: defaultThinkingLevel(model, remembered),
|
|
274
295
|
fast,
|
|
275
296
|
contextWindow: policy?.contextWindow ?? model.contextWindow,
|
|
276
297
|
compactAt: policy?.compactAt ?? Math.floor(model.contextWindow * 0.8),
|
|
@@ -416,7 +437,9 @@ async function resolvePatch(kernel, models, input) {
|
|
|
416
437
|
if (model === undefined)
|
|
417
438
|
return { kind: "unknown-model", model: ref };
|
|
418
439
|
const issues = [];
|
|
419
|
-
const
|
|
440
|
+
const previous = selected === null ? undefined : models.getModel(selected.model.provider, selected.model.id);
|
|
441
|
+
const kept = previous !== undefined && formatModelKey(baseRef(previous)) === formatModelKey(baseRef(model)) ? selected?.thinking : undefined;
|
|
442
|
+
const thinking = await selectThinkingLevel(kernel, model, patch.thinking, kept);
|
|
420
443
|
if (thinking === null)
|
|
421
444
|
issues.push(issue(["thinking"], `${ref.id} does not accept that level.`));
|
|
422
445
|
const settings = { ...selected?.settings, ...patch.settings };
|
|
@@ -442,19 +465,53 @@ async function resolvePatch(kernel, models, input) {
|
|
|
442
465
|
settingsVersion: input.version
|
|
443
466
|
};
|
|
444
467
|
}
|
|
445
|
-
function selectThinkingLevel(model, given, kept) {
|
|
468
|
+
async function selectThinkingLevel(kernel, model, given, kept) {
|
|
446
469
|
const accepted = acceptedThinkingLevels(model);
|
|
447
470
|
if (given !== undefined && given !== null)
|
|
448
471
|
return accepted.includes(given) ? given : null;
|
|
449
472
|
if (given === undefined && kept !== undefined)
|
|
450
473
|
return accepted.includes(kept) ? kept : clampThinkingLevel(model, kept);
|
|
451
|
-
return defaultThinkingLevel(model);
|
|
474
|
+
return defaultThinkingLevel(model, await readThinkingPreference2(kernel.store, baseRef(model)));
|
|
475
|
+
}
|
|
476
|
+
function baseRef(model) {
|
|
477
|
+
return { provider: model.provider, id: model.variant?.base ?? model.id };
|
|
452
478
|
}
|
|
453
479
|
function acceptedThinkingLevels(model) {
|
|
454
480
|
return ["off", ...getSupportedThinkingLevels(model).filter((level) => level !== "off")];
|
|
455
481
|
}
|
|
456
|
-
function defaultThinkingLevel(model) {
|
|
457
|
-
|
|
482
|
+
function defaultThinkingLevel(model, remembered) {
|
|
483
|
+
const accepted = acceptedThinkingLevels(model);
|
|
484
|
+
if (remembered !== undefined && accepted.includes(remembered))
|
|
485
|
+
return remembered;
|
|
486
|
+
return model.reasoning ? accepted.find((level) => level !== "off") ?? "off" : "off";
|
|
487
|
+
}
|
|
488
|
+
async function rememberChoice2(kernel, models, choice, scope) {
|
|
489
|
+
const model = models.getModel(choice.model.provider, choice.model.id);
|
|
490
|
+
if (model === undefined)
|
|
491
|
+
return;
|
|
492
|
+
const base = baseRef(model);
|
|
493
|
+
const preferred = scope === "model" ? await readModelSelection2(kernel.store) : null;
|
|
494
|
+
const updates = [
|
|
495
|
+
...scope === "model" && (preferred === null || formatModelKey(preferred) !== formatModelKey(choice.model)) ? [
|
|
496
|
+
{
|
|
497
|
+
name: MODEL_PREFERENCE2,
|
|
498
|
+
target: await put2(kernel.store, "kv", {
|
|
499
|
+
provider: choice.model.provider,
|
|
500
|
+
id: choice.model.id
|
|
501
|
+
})
|
|
502
|
+
}
|
|
503
|
+
] : [],
|
|
504
|
+
...await readThinkingPreference2(kernel.store, base) === choice.thinking ? [] : [
|
|
505
|
+
{
|
|
506
|
+
name: thinkingPreferenceRef2(base),
|
|
507
|
+
target: await put2(kernel.store, "kv", choice.thinking)
|
|
508
|
+
}
|
|
509
|
+
]
|
|
510
|
+
];
|
|
511
|
+
if (updates.length === 0)
|
|
512
|
+
return;
|
|
513
|
+
await commit2(kernel, updates);
|
|
514
|
+
bumpGeneration2(kernel);
|
|
458
515
|
}
|
|
459
516
|
function sessionScoped(settings) {
|
|
460
517
|
return settings.filter((definition) => definition.scope === "session");
|
|
@@ -466,4 +523,4 @@ function issue(path, message) {
|
|
|
466
523
|
return { severity: "error", path, message };
|
|
467
524
|
}
|
|
468
525
|
|
|
469
|
-
export { createModelsApi2, modelInfo2, createLogin2, withLimits2, createConfigurationResolver2, settingsVersion2 };
|
|
526
|
+
export { createModelsApi2, modelInfo2, createLogin2, withLimits2, createConfigurationResolver2, settingsVersion2, rememberChoice2 };
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
envelope2,
|
|
3
3
|
decodeRunRecord2,
|
|
4
4
|
decodeCallRecord2
|
|
5
|
-
} from "./compose-
|
|
5
|
+
} from "./compose-gxjc6vz9.js";
|
|
6
6
|
import {
|
|
7
7
|
objectId2
|
|
8
8
|
} from "./compose-q6c7wswc.js";
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
callRef2,
|
|
16
16
|
trustRef2,
|
|
17
17
|
trustTarget2
|
|
18
|
-
} from "./compose-
|
|
18
|
+
} from "./compose-cqpjcx2t.js";
|
|
19
19
|
import {
|
|
20
20
|
waitIndex2,
|
|
21
21
|
wokenIndex2
|
|
@@ -410,6 +410,36 @@ var workspaceTrustMoved = {
|
|
|
410
410
|
});
|
|
411
411
|
}
|
|
412
412
|
};
|
|
413
|
+
var sessionSnapshotDropped = {
|
|
414
|
+
kind: "schema",
|
|
415
|
+
name: "2026-10-18-session-snapshot-dropped",
|
|
416
|
+
sql: { sqlite: [], postgres: [] }
|
|
417
|
+
};
|
|
418
|
+
var changesAsWholeList = {
|
|
419
|
+
kind: "rewrite",
|
|
420
|
+
name: "2026-10-20-changes-as-whole-list",
|
|
421
|
+
rewriteLog(events) {
|
|
422
|
+
let listed = new Map;
|
|
423
|
+
return events.map((event) => {
|
|
424
|
+
if (!isJsonObject(event) || event.kind !== "changes")
|
|
425
|
+
return null;
|
|
426
|
+
const logged = event.files;
|
|
427
|
+
if (!Array.isArray(logged))
|
|
428
|
+
return null;
|
|
429
|
+
listed = new Map(listed);
|
|
430
|
+
for (const file of logged)
|
|
431
|
+
if (isJsonObject(file) && typeof file.path === "string")
|
|
432
|
+
listed.set(file.path, file);
|
|
433
|
+
const files = [...listed.values()];
|
|
434
|
+
return files.length === logged.length && files.every((file, index) => file === logged[index]) ? null : { ...event, files };
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
var foldCheckpointsCleared = {
|
|
439
|
+
kind: "schema",
|
|
440
|
+
name: "2026-10-20-fold-checkpoints-cleared",
|
|
441
|
+
sql: { sqlite: ["DELETE FROM fold_checkpoints"], postgres: [] }
|
|
442
|
+
};
|
|
413
443
|
var STORE_STEPS = [
|
|
414
444
|
baseline,
|
|
415
445
|
recordFields,
|
|
@@ -429,7 +459,10 @@ var STORE_STEPS = [
|
|
|
429
459
|
workspaceIsolation,
|
|
430
460
|
foldCheckpoints,
|
|
431
461
|
folderTrust,
|
|
432
|
-
workspaceTrustMoved
|
|
462
|
+
workspaceTrustMoved,
|
|
463
|
+
sessionSnapshotDropped,
|
|
464
|
+
changesAsWholeList,
|
|
465
|
+
foldCheckpointsCleared
|
|
433
466
|
];
|
|
434
467
|
var STORE_VERSION2 = STORE_STEPS.length;
|
|
435
468
|
function assertStoreVersion2(version) {
|