@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.209",
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.216",
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.236",
20
- "@jskit-ai/http-web": "0.1.83",
21
- "@jskit-ai/kernel": "0.1.238",
22
- "@jskit-ai/realtime": "0.1.235",
23
- "@jskit-ai/shell-web": "0.1.242",
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.238"
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. You can send a different message when the conversation is ready. Check delivery before resending this one.";
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true })).toHaveCount(0);
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: "Check delivery", exact: true })).toHaveCount(0);
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true })).toHaveCount(0);
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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: "Check delivery", exact: true });
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.getByText("Delivery unconfirmed", { exact: true })).toBeVisible();
2909
- await expect(bubble.getByRole("button", { name: "Check delivery", exact: true })).toHaveCount(1);
2910
- await expect(bubble).toHaveClass(/assistant-transcript__message--unconfirmed/u);
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: "Check delivery", exact: true })).toBeVisible();
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
  }