@jskit-ai/assistant-runtime 0.1.209 → 0.1.211
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jskit-ai/assistant-runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.211",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "node --test --test-concurrency=1"
|
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
"./server": "./src/server/index.js"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@jskit-ai/assistant-core": "0.1.
|
|
15
|
+
"@jskit-ai/assistant-core": "0.1.218",
|
|
16
16
|
"json-rest-schema": "^1.0.17"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@jskit-ai/http-runtime": "0.1.
|
|
20
|
-
"@jskit-ai/http-web": "0.1.
|
|
21
|
-
"@jskit-ai/kernel": "0.1.
|
|
22
|
-
"@jskit-ai/realtime": "0.1.
|
|
23
|
-
"@jskit-ai/shell-web": "0.1.
|
|
19
|
+
"@jskit-ai/http-runtime": "0.1.238",
|
|
20
|
+
"@jskit-ai/http-web": "0.1.85",
|
|
21
|
+
"@jskit-ai/kernel": "0.1.240",
|
|
22
|
+
"@jskit-ai/realtime": "0.1.237",
|
|
23
|
+
"@jskit-ai/shell-web": "0.1.244",
|
|
24
24
|
"@tanstack/vue-query": "^5.90.5",
|
|
25
25
|
"vue": "^3.5.13",
|
|
26
26
|
"vuetify": "^4.0.0",
|
|
27
|
-
"@jskit-ai/database-runtime": "0.1.
|
|
27
|
+
"@jskit-ai/database-runtime": "0.1.240"
|
|
28
28
|
},
|
|
29
29
|
"description": "Capability-based assistant runtime with per-surface chat, transcripts, settings, and action tools.",
|
|
30
30
|
"jskit": {
|
|
@@ -662,7 +662,7 @@ function createConversation(identity, { api, socket, actorKey, placement, reader
|
|
|
662
662
|
if (receipt.status === "accepted") delivery.accept(messageId);
|
|
663
663
|
else if (receipt.status === "not-sent" && receipt.messageId === messageId) delivery.rejectUnsent(messageId, receipt.error);
|
|
664
664
|
else if (receipt.status === "unknown" && message?.status === "uncertain") {
|
|
665
|
-
message.error = "Delivery is still unknown.
|
|
665
|
+
message.error = "Delivery is still unknown. Retry to check again.";
|
|
666
666
|
}
|
|
667
667
|
subscription?.reload();
|
|
668
668
|
return receipt;
|
|
@@ -51,7 +51,7 @@ test("inspecting a restored no-admission request releases Send while preserving
|
|
|
51
51
|
await f.command("mode", { mode: "uncertain" });
|
|
52
52
|
await f.input.fill("Original unadmitted words");
|
|
53
53
|
await f.input.press("Enter");
|
|
54
|
-
const check = f.primary.getByRole("button", { name: "
|
|
54
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
55
55
|
await expect(check).toBeVisible();
|
|
56
56
|
const [original] = await f.sent();
|
|
57
57
|
await f.input.fill("A separate newer draft");
|
|
@@ -222,7 +222,7 @@ test("a lost goal receipt uses the same inspection-only ledger and never starts
|
|
|
222
222
|
await expect(start).toBeEnabled();
|
|
223
223
|
await start.click();
|
|
224
224
|
await f.input.click();
|
|
225
|
-
const check = f.primary.getByRole("button", { name: "
|
|
225
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
226
226
|
await expect(check).toBeVisible();
|
|
227
227
|
await expect(f.primary.getByText("Finish the uncertain goal", { exact: true })).toHaveCount(1);
|
|
228
228
|
const requests = async () => (await f.state()).requests.filter(request => request.suffix === "/goal" && request.method === "POST");
|
|
@@ -391,7 +391,7 @@ test("explicit delivery inspection acknowledges uncertain attachments without cl
|
|
|
391
391
|
await f.command("mode", { mode: "uncertain" });
|
|
392
392
|
await f.input.fill("Inspect this file.");
|
|
393
393
|
await f.input.press("Enter");
|
|
394
|
-
const check = f.primary.getByRole("button", { name: "
|
|
394
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
395
395
|
await expect(check).toBeVisible();
|
|
396
396
|
assert.deepEqual((await attachments()).acknowledged, []);
|
|
397
397
|
await files.setInputFiles({ name: "newer.txt", mimeType: "text/plain", buffer: Buffer.from("Keep this newer file") });
|
|
@@ -622,7 +622,7 @@ test("canonical receipts settle a held response and uncertain delivery stays ins
|
|
|
622
622
|
await f.command("mode", { mode: "uncertain" });
|
|
623
623
|
await f.input.fill("Keep this exact uncertain request");
|
|
624
624
|
await f.input.press("Enter");
|
|
625
|
-
const check = f.primary.getByRole("button", { name: "
|
|
625
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
626
626
|
await expect(check).toBeVisible();
|
|
627
627
|
await expect(f.primary.getByText("Keep this exact uncertain request", { exact: true })).toHaveCount(1);
|
|
628
628
|
await expect(f.primary.getByRole("button", { name: /^(Retry|Edit|Cancel)$/u })).toHaveCount(0);
|
|
@@ -719,7 +719,7 @@ for (const status of ["uncertain", "pending", "accepted", "failed", "unrecognise
|
|
|
719
719
|
assert.equal((await f.sent()).length, 1, "restoration never dispatches a saved request");
|
|
720
720
|
assert.equal(await f.page.evaluate(() => window.savedBinding.runtime.value.canSubmit.value), !unconfirmed);
|
|
721
721
|
if (unconfirmed) {
|
|
722
|
-
const check = f.primary.getByRole("button", { name: "
|
|
722
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
723
723
|
try { await expect(check).toBeEnabled(); }
|
|
724
724
|
catch (failure) {
|
|
725
725
|
t.diagnostic(JSON.stringify(await f.page.evaluate(() => {
|
|
@@ -752,7 +752,7 @@ for (const status of ["uncertain", "pending", "accepted", "failed", "unrecognise
|
|
|
752
752
|
await expect(check).toHaveCount(0);
|
|
753
753
|
assert.equal((await f.sent()).length, 1, "only the actual canonical receipt settles the original identity");
|
|
754
754
|
} else {
|
|
755
|
-
await expect(f.primary.getByRole("button", { name: "
|
|
755
|
+
await expect(f.primary.getByRole("button", { name: "Retry delivery check", exact: true })).toHaveCount(0);
|
|
756
756
|
await expect(f.primary.getByRole("button", { name: "Retry", exact: true })).toHaveCount(status === "failed" ? 1 : 0);
|
|
757
757
|
}
|
|
758
758
|
});
|
|
@@ -781,7 +781,7 @@ test(`an explicit pre-admission rejection retains original retry identity and th
|
|
|
781
781
|
assert.equal((await f.sent()).length, 1, "a definite rejection never silently resubmits steering as new work");
|
|
782
782
|
assert.equal(await f.page.evaluate(id => window.conversationFixture.current().delivery.find(id).status, rejected.input.messageId), "failed");
|
|
783
783
|
assert.equal(await f.page.evaluate(() => window.conversationFixture.current().canSubmit.value), true);
|
|
784
|
-
await expect(f.primary.getByRole("button", { name: "
|
|
784
|
+
await expect(f.primary.getByRole("button", { name: "Retry delivery check", exact: true })).toHaveCount(0);
|
|
785
785
|
if (code === "conversation_not_steerable") {
|
|
786
786
|
assert.equal(rejected.input.steer, true);
|
|
787
787
|
}
|
|
@@ -926,7 +926,7 @@ test("authored application data stays captured across retry, a lost receipt and
|
|
|
926
926
|
await f.input.fill("Keep the newer typed draft");
|
|
927
927
|
await f.command("mode", { mode: "uncertain" });
|
|
928
928
|
await f.primary.getByRole("button", { name: "Retry", exact: true }).click();
|
|
929
|
-
const check = f.primary.getByRole("button", { name: "
|
|
929
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
930
930
|
await expect(check).toBeVisible();
|
|
931
931
|
assert.deepEqual((await f.sent())[1].input, original.input);
|
|
932
932
|
assert.deepEqual(await f.page.evaluate(() => window.conversationFixture.current().delivery.state.messages[0].payload.request.data), originalData);
|
|
@@ -1068,7 +1068,7 @@ test("canonical questions retry their exact formatted reply and uncertain delive
|
|
|
1068
1068
|
await f.input.fill("A separate newer thought.");
|
|
1069
1069
|
await f.command("mode", { mode: "uncertain" });
|
|
1070
1070
|
await f.primary.getByRole("button", { name: "Retry", exact: true }).click();
|
|
1071
|
-
const check = f.primary.getByRole("button", { name: "
|
|
1071
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
1072
1072
|
await expect(check).toBeVisible();
|
|
1073
1073
|
const requests = await f.sent();
|
|
1074
1074
|
assert.equal(requests.length, 2);
|
|
@@ -1314,7 +1314,7 @@ test("accepted draft identity survives voice retention and lost receipts without
|
|
|
1314
1314
|
await expect(f.input).toHaveValue("Keep the typed capture.");
|
|
1315
1315
|
await f.command("mode", { mode: "uncertain" });
|
|
1316
1316
|
await f.input.press("Enter");
|
|
1317
|
-
const check = f.primary.getByRole("button", { name: "
|
|
1317
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
1318
1318
|
await expect(check).toBeVisible();
|
|
1319
1319
|
assert.deepEqual((await f.sent())[2].input, typed.input);
|
|
1320
1320
|
await expect(f.input).toHaveValue("Keep the typed capture.");
|
|
@@ -1416,7 +1416,7 @@ test("a voice preview cannot acknowledge sending or uncertain delivery and dedup
|
|
|
1416
1416
|
await f.command("mode", { mode: "uncertain" });
|
|
1417
1417
|
await f.input.fill("Keep this uncertain request.");
|
|
1418
1418
|
await f.input.press("Enter");
|
|
1419
|
-
const check = f.primary.getByRole("button", { name: "
|
|
1419
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
1420
1420
|
await expect(check).toBeVisible();
|
|
1421
1421
|
const second = (await f.sent())[1].input.messageId;
|
|
1422
1422
|
await preview(second, "An uncertain preview is not an acknowledgement.");
|
|
@@ -1452,7 +1452,7 @@ test("an interim reply stays on its exact turn without acknowledging delivery an
|
|
|
1452
1452
|
await f.command("mode", { mode: "uncertain" });
|
|
1453
1453
|
await f.input.fill("Check the project before answering.");
|
|
1454
1454
|
await f.input.press("Enter");
|
|
1455
|
-
const check = f.primary.getByRole("button", { name: "
|
|
1455
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
1456
1456
|
await expect(check).toBeVisible();
|
|
1457
1457
|
const [{ input: { messageId } }] = await f.sent();
|
|
1458
1458
|
const reply = { id: "native-ack", outputId: "native-ack-output", turnId: messageId,
|
|
@@ -2499,7 +2499,7 @@ test("an exact host pre-admission receipt preserves one manual retry and actor a
|
|
|
2499
2499
|
await expect(f.primary.getByText("Failed: The host refused this message before native admission.", { exact: true })).toBeVisible();
|
|
2500
2500
|
const [original] = await f.sent();
|
|
2501
2501
|
assert.equal(await f.page.evaluate(id => window.conversationFixture.current().delivery.find(id).status, original.input.messageId), "failed");
|
|
2502
|
-
await expect(f.primary.getByRole("button", { name: "
|
|
2502
|
+
await expect(f.primary.getByRole("button", { name: "Retry delivery check", exact: true })).toHaveCount(0);
|
|
2503
2503
|
await f.input.fill("Keep my newer draft");
|
|
2504
2504
|
await f.page.evaluate(() => window.conversationFixture.data({ originId: "newer-tab", choice: "newer" }));
|
|
2505
2505
|
assert.equal((await f.sent()).length, 1, "a rejection never retries automatically");
|
|
@@ -2534,7 +2534,7 @@ for (const kind of ["mismatched-id", "malformed-status", "missing-marker", "post
|
|
|
2534
2534
|
});
|
|
2535
2535
|
await f.input.fill("Do not resubmit unknown work");
|
|
2536
2536
|
await f.input.press("Enter");
|
|
2537
|
-
const check = f.primary.getByRole("button", { name: "
|
|
2537
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
2538
2538
|
await expect(check).toBeVisible();
|
|
2539
2539
|
const [original] = await f.sent();
|
|
2540
2540
|
await check.click();
|
|
@@ -2665,7 +2665,7 @@ test("application admission keeps unknown delivery inspection-only and rejects c
|
|
|
2665
2665
|
await f.command("mode", { mode: "uncertain" });
|
|
2666
2666
|
await f.input.fill("Do not repeat unknown work");
|
|
2667
2667
|
await f.input.press("Enter");
|
|
2668
|
-
const check = f.primary.getByRole("button", { name: "
|
|
2668
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
2669
2669
|
await expect(check).toBeVisible();
|
|
2670
2670
|
const [original] = await f.sent();
|
|
2671
2671
|
await f.input.fill("Keep my newer draft");
|
|
@@ -2901,13 +2901,15 @@ test("unknown delivery reports its current result and allows different idle inpu
|
|
|
2901
2901
|
await f.command("mode", { mode: "unadmitted" });
|
|
2902
2902
|
await f.input.fill("Original uncertain request");
|
|
2903
2903
|
await f.input.press("Enter");
|
|
2904
|
-
const check = f.primary.getByRole("button", { name: "
|
|
2904
|
+
const check = f.primary.getByRole("button", { name: "Retry delivery check", exact: true });
|
|
2905
2905
|
const send = f.primary.getByRole("button", { name: "Send message", exact: true });
|
|
2906
2906
|
await expect(check).toBeVisible();
|
|
2907
2907
|
const bubble = f.primary.locator(".assistant-transcript__message--user").filter({ hasText: "Original uncertain request" });
|
|
2908
|
-
await expect(bubble.
|
|
2909
|
-
await expect(bubble
|
|
2910
|
-
|
|
2908
|
+
await expect(bubble.getByRole("button", { name: "Retry delivery check", exact: true })).toHaveCount(1);
|
|
2909
|
+
await expect(bubble).not.toHaveClass(/assistant-transcript__message--unconfirmed/u);
|
|
2910
|
+
const recovery = bubble.locator(".assistant-transcript__optimistic-failure");
|
|
2911
|
+
assert.ok(await recovery.evaluate(el => parseFloat(getComputedStyle(el).fontSize) < 14));
|
|
2912
|
+
await expect(check).toHaveClass(/v-btn--variant-text/u);
|
|
2911
2913
|
await expect(f.primary.locator(".assistant-transcript__system")).toHaveCount(0);
|
|
2912
2914
|
await expect(bubble.getByText("Request failed with status 503.", { exact: true })).toBeVisible();
|
|
2913
2915
|
await f.input.fill("Original uncertain request");
|
|
@@ -2921,7 +2923,7 @@ test("unknown delivery reports its current result and allows different idle inpu
|
|
|
2921
2923
|
const screenshots = process.env.JSKIT_ASSISTANT_SCREENSHOTS;
|
|
2922
2924
|
for (const width of [390, 1280]) {
|
|
2923
2925
|
await f.page.setViewportSize({ width, height: 900 });
|
|
2924
|
-
await expect(bubble.getByRole("button", { name: "
|
|
2926
|
+
await expect(bubble.getByRole("button", { name: "Retry delivery check", exact: true })).toBeVisible();
|
|
2925
2927
|
assert.ok(await f.page.evaluate(() => document.documentElement.scrollWidth <= innerWidth));
|
|
2926
2928
|
if (screenshots) await f.page.screenshot({ path: `${screenshots}/delivery-attached-${width}.png` });
|
|
2927
2929
|
}
|