@jskit-ai/agent-docs 0.1.199 → 0.1.201
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/guide/agent/app-extras/assistant-conversation.md +124 -7
- package/guide/agent/app-extras/assistant-voice.md +51 -2
- package/package.json +1 -1
- package/patterns/feature-package/example/booking-engine/package.json +1 -1
- package/patterns/minimal-foundation/example/package.json +4 -4
- package/patterns/shell-foundation/example/package.json +5 -5
- package/patterns/shell-foundation/example/packages/main/package.json +1 -1
- package/reference/autogen/PATTERN_INDEX.md +35 -35
- package/reference/autogen/packages/assistant-core.md +27 -1
- package/reference/autogen/packages/assistant-runtime.md +1 -1
- package/skills/jskit/references/pattern-index.md +35 -35
- package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
- package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
- package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
- package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
- package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
- package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
- package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
|
@@ -249,7 +249,7 @@ The composable exposes the same `runtime` and `error` refs; it is unnecessary fo
|
|
|
249
249
|
an application that only adds standard component slots.
|
|
250
250
|
|
|
251
251
|
The composable's `presentation` option accepts a value, ref or getter. Supply transcript
|
|
252
|
-
fields `assistantLabel`, `systemLabel`, `welcomeMessage`, `variant`, `visible`,
|
|
252
|
+
fields `assistantLabel`, `systemLabel`, `welcomeMessage`, `variant`, `visible`, `retainWhenHidden`,
|
|
253
253
|
`userMessageFormat` and `progressPreviewLimit`, and composer fields `ariaLabel`,
|
|
254
254
|
`submitAriaLabel`, `submitLabel`, `placeholder` and `rows`. `layout: "compact"`
|
|
255
255
|
keeps the existing compact composer. These change presentation through the
|
|
@@ -262,7 +262,9 @@ state for an exact actor, endpoint, surface, workspace and conversation. Release
|
|
|
262
262
|
a retained handle with `release()`. Final view/reader release detaches browser
|
|
263
263
|
observers; it does not stop server work. A lost receipt remains uncertain with
|
|
264
264
|
**Check delivery** until inspection or canonical history proves acceptance.
|
|
265
|
-
Reconnection reads state and does not resend the request.
|
|
265
|
+
Reconnection reads state and does not resend the request. After an initial
|
|
266
|
+
subscription failure or timeout, **Reload** retries that exact subscription on
|
|
267
|
+
the connected socket with fresh authorization; it does not resend a message.
|
|
266
268
|
|
|
267
269
|
Applications that create nonvisual tasks after setup can capture
|
|
268
270
|
`useAssistantConversationFactory(commonOptions)` once during setup, then call
|
|
@@ -556,7 +558,7 @@ composer is present, and `stop` when `canStop` can become true.
|
|
|
556
558
|
| `setDraft(text)` | Update the application draft synchronously. |
|
|
557
559
|
| `submit({ configuration, attachments })` | Send or steer through the app's normal admission, attachment and delivery path. Use the delivery controller below for pending messages and failures; retain accepted-draft clearing and application admission. The element checks `canSend` before calling. |
|
|
558
560
|
| `stop()` | Request cancellation through the backend owner. Report pending state, errors, and what actually stopped; the element checks stop availability. |
|
|
559
|
-
| `loadMore({ complete })` | Prepend older turns, then call `complete({ changed })` after updating reactive state. Call it on failures too; this releases the scroll anchor. |
|
|
561
|
+
| `loadMore({ complete })` | Prepend older turns, then call `complete({ changed })` synchronously after updating reactive state, before yielding to rendering. Call it on failures too; this releases the scroll anchor. Pending reader movement stays tracked if new replies change the transcript height before completion. |
|
|
560
562
|
| `reload()` | Refresh authoritative history. |
|
|
561
563
|
| `resend(id)`, `cancel(id)`, `edit(id)` | Optional overrides of the shared delivery actions. Keep the stable message identity when retrying. |
|
|
562
564
|
| `openLink({ event, href, text })` | Optionally handle app-owned links and call `event.preventDefault()`. Otherwise a validated ordinary link keeps normal browser behavior. |
|
|
@@ -564,12 +566,49 @@ composer is present, and `stop` when `canStop` can become true.
|
|
|
564
566
|
|
|
565
567
|
`scrollKey` changes when conversation ownership changes, resetting scroll and
|
|
566
568
|
expansion state. `followLatestKey` requests following the newest message.
|
|
569
|
+
`retainWhenHidden: true` keeps the original transcript scroll node while `visible`
|
|
570
|
+
is false and suspends hidden scroll work. It captures a reader's visible turn
|
|
571
|
+
before hiding and restores that turn's offset after reopening layout settles;
|
|
572
|
+
readers following the latest message still follow new replies. An older-history
|
|
573
|
+
load completed while hidden restores its original anchor after reopening. First
|
|
574
|
+
open and a changed `scrollKey` still position the conversation at its latest
|
|
575
|
+
message. Retained transcripts lay out their message rows without offscreen height
|
|
576
|
+
estimates so later materialization cannot move the restored anchor; this opt-in
|
|
577
|
+
uses more layout work for long histories. The default is false and retains the
|
|
578
|
+
existing remove-and-follow behavior and offscreen layout optimization.
|
|
567
579
|
Scrolling upward within 160 CSS pixels of the transcript's top requests older
|
|
568
580
|
history through `loadMore`, including touch, wheel and keyboard scrolling.
|
|
569
581
|
Only one request runs at a time, and prepending preserves the reading position.
|
|
570
582
|
Initial positioning and conversation selection do not fetch older pages.
|
|
571
583
|
`loadMoreError` pauses automatic loading; the older-messages button remains
|
|
572
584
|
available for an explicit retry. Clear the error when retrying succeeds.
|
|
585
|
+
A transcript `error` appears in a compact, content-sized warning above the loaded
|
|
586
|
+
messages. It does not replace history, remount the message body, clear a draft or
|
|
587
|
+
reset an older-history reader. A failure to receive updates does not establish
|
|
588
|
+
that the assistant stopped. While updates are unavailable, the supplied binding
|
|
589
|
+
hides its stale working hint without disabling the existing Stop action; a fresh
|
|
590
|
+
update restores the hint. `errorReloadable: true` offers **Reload chat** only
|
|
591
|
+
inside that warning when the permanent `reloadable` control is off; it emits the
|
|
592
|
+
same `reload` action and respects `reloading`. Enable it only when the current
|
|
593
|
+
actor may recover that conversation. The supplied runtime binding derives this
|
|
594
|
+
from its existing access-denial state; a 401/403 still clears private history and
|
|
595
|
+
drafts and offers no error-only Reload. Restore access or sign in through the
|
|
596
|
+
application before reopening. A subscription transport failure says **Chat
|
|
597
|
+
updates could not reconnect. Reload chat to try again.** and retains its original
|
|
598
|
+
error as `cause`; provider errors keep their own wording.
|
|
599
|
+
|
|
600
|
+
When `runtime.logger` is supplied, subscriptions emit structured
|
|
601
|
+
`assistant.conversation.subscription` records containing `stage`, `previousStage`,
|
|
602
|
+
`durationMs`, `elapsedMs`, and the server-generated `subscriptionEpoch`. The
|
|
603
|
+
conversation identity is included only after opening and authorization succeed;
|
|
604
|
+
raw client subscription IDs and rejected conversation inputs are not logged. Stages cover
|
|
605
|
+
authentication, action admission, conversation opening, observer attachment,
|
|
606
|
+
snapshot reading and acknowledgement. The acknowledgement stage includes
|
|
607
|
+
`snapshotTurns` and `snapshotLimit` when available, without message content.
|
|
608
|
+
`acknowledgement-sent` records server dispatch, not client receipt. Diagnose the
|
|
609
|
+
measured slow stage before changing the existing ten-second acknowledgement
|
|
610
|
+
deadline.
|
|
611
|
+
|
|
573
612
|
`reloadable`, `reloading`, `welcomeMessage`, and `variant: "main" | "task"`
|
|
574
613
|
control the corresponding transcript presentation. `userMessageFormat` is
|
|
575
614
|
`"formatted"` by default; `"plain"` preserves literal user-authored text.
|
|
@@ -1407,7 +1446,12 @@ await conversation.select({
|
|
|
1407
1446
|
```
|
|
1408
1447
|
|
|
1409
1448
|
Selecting a native engine used earlier restores its latest retained binding.
|
|
1410
|
-
Changing a model on the current engine retains that native conversation.
|
|
1449
|
+
Changing a model on the current engine retains that native conversation. OpenCode
|
|
1450
|
+
retains it only within the same `integrationId`: selecting a different integration
|
|
1451
|
+
reserves a fresh native binding while preserving the application conversation and
|
|
1452
|
+
history. Returning to OpenCode restores only a binding for that integration; an
|
|
1453
|
+
unselected account change still fails its identity guard. Selection never submits
|
|
1454
|
+
a prompt or replays a retained failed or uncertain request. Before
|
|
1411
1455
|
the next request, JSKIT supplies missed messages, corrections and removed message
|
|
1412
1456
|
identities as quoted history. Unchanged messages are not injected again. All
|
|
1413
1457
|
corrections are included, even outside the recent-history window; if they exceed
|
|
@@ -1415,6 +1459,14 @@ corrections are included, even outside the recent-history window; if they exceed
|
|
|
1415
1459
|
with a briefing. Nothing is silently dropped. The application remains responsible
|
|
1416
1460
|
for authorizing edits to its transcript.
|
|
1417
1461
|
|
|
1462
|
+
An application whose established selection policy creates a fresh native
|
|
1463
|
+
conversation can pass `retireNative: true` to `select()`. This uses the same
|
|
1464
|
+
selection transaction and allocates a new binding even for a compatible model
|
|
1465
|
+
or effort change; it does not restore an earlier retained binding. Written
|
|
1466
|
+
history and predecessor receipts remain, and the next request receives the
|
|
1467
|
+
retained discussion through the existing history handoff. The operation does
|
|
1468
|
+
not submit a prompt. Omit this option for the native reuse policy above.
|
|
1469
|
+
|
|
1418
1470
|
Selection requires idle work and confirmed process cleanup. An uncertain receipt
|
|
1419
1471
|
may remain with another selected engine, but the same message ID cannot be sent
|
|
1420
1472
|
there again. Return to its original engine and use `inspectDelivery()` to resolve
|
|
@@ -2025,14 +2077,27 @@ driver uses this backend. Ordinary applications use the common conversation API
|
|
|
2025
2077
|
with its supplied execution and credential defaults.
|
|
2026
2078
|
|
|
2027
2079
|
Changed instructions use the existing thread-control restoration and verification
|
|
2028
|
-
before sending new work; they do not replace the shared process.
|
|
2029
|
-
|
|
2080
|
+
before sending new work; they do not replace the shared process. A healthy active
|
|
2081
|
+
turn retains its installed instruction snapshot even if the source changes or is
|
|
2082
|
+
temporarily unavailable. The next idle admission rereads the latest instructions;
|
|
2083
|
+
if native work starts during that refresh, instruction-only recovery defers
|
|
2084
|
+
without explicitly interrupting it.
|
|
2085
|
+
Real account, environment, socket and provider recovery still runs normally.
|
|
2086
|
+
Native compaction remains the engine's job.
|
|
2030
2087
|
JSKIT owns the local history adapter used for model-provider changes. It keeps
|
|
2031
2088
|
native history intact and translates only outgoing requests. For qualified
|
|
2032
2089
|
DeepSeek and GLM models, an OpenAI encrypted compaction is supplemented with the
|
|
2033
2090
|
exact readable records from its saved native boundary. Recovery is bounded and
|
|
2034
2091
|
fails explicitly for unsupported or ambiguous history, including native Undo or
|
|
2035
2092
|
fork records. It never silently truncates, retries inference or rewrites a rollout.
|
|
2093
|
+
For outgoing OpenAI history, a nonempty historical function-call name outside
|
|
2094
|
+
`^[a-zA-Z0-9_-]+$` is quoted as assistant context with its exact call identity,
|
|
2095
|
+
name and arguments. Its paired result stays in its original position as labeled
|
|
2096
|
+
untrusted history, preserving supported text and images. Valid calls and unmatched
|
|
2097
|
+
results stay unchanged; ambiguous identities or unsupported paired content fail
|
|
2098
|
+
before the provider request. This does not rename tools, replay them or change the
|
|
2099
|
+
selected model. Native previous-model compaction and its fallback remain Codex's
|
|
2100
|
+
responsibility; this translation alone does not prove live compaction succeeds.
|
|
2036
2101
|
|
|
2037
2102
|
For a supported external provider, supply the existing `connections` resolver and
|
|
2038
2103
|
select `{ systemPrompt, integrationId, effort }`. For example, an integration
|
|
@@ -2214,6 +2279,19 @@ This advanced host operation has no HTTP, socket or client counterpart and accep
|
|
|
2214
2279
|
no caller-supplied engine, native descriptor or host override. Ordinary standalone
|
|
2215
2280
|
applications keep using `open()` and their existing storage contract.
|
|
2216
2281
|
|
|
2282
|
+
Existing detached run/stream facades can call
|
|
2283
|
+
`runtime.runNativeDetachedConversation({ id, context, input, options })` on that
|
|
2284
|
+
same runtime. Authorization uses `runDetachedConversation`. Its configured host
|
|
2285
|
+
returns `{ sessionId: id, engine, native, input, context, options }`, with the
|
|
2286
|
+
admitted context separate from the original engine options. Optional submitted
|
|
2287
|
+
`options` go only to that host; they never select a native owner or override the
|
|
2288
|
+
host. The driver uses the existing native execution and cleanup owners without
|
|
2289
|
+
opening Main, creating a retained handle or writing canonical message history.
|
|
2290
|
+
The application retains profile approval, write leases and original event/result
|
|
2291
|
+
codecs. Codex/OpenCode facade profile events remain unawaited;
|
|
2292
|
+
Claude acquires its entry before the profile event and awaits that event before
|
|
2293
|
+
starting work. This operation has no browser, HTTP or socket counterpart.
|
|
2294
|
+
|
|
2217
2295
|
The same advanced host can prepare native readiness before retaining a handle
|
|
2218
2296
|
with `runtime.ensureNativeConversation({ id, context })`. Authorization uses
|
|
2219
2297
|
operation `ensure`; only the configured host supplies the prepared
|
|
@@ -2436,7 +2514,9 @@ pauses/resumes an active goal only when still authorized, verifies the owned
|
|
|
2436
2514
|
shell environment after reload and never retries the caller's operation.
|
|
2437
2515
|
Changed instructions or an unknown installation update native configuration and
|
|
2438
2516
|
add one explicit developer-context revision before new work. Acknowledged ordinary
|
|
2439
|
-
turns
|
|
2517
|
+
active turns keep their installed instructions rather than interrupting for a
|
|
2518
|
+
source-only change. Idle admission rereads the source, and socket reconnects with
|
|
2519
|
+
unchanged acknowledged instructions do not repeat the revision. Compaction rebuilds context with the
|
|
2440
2520
|
current configuration; restricted consumers retain their own execution environment.
|
|
2441
2521
|
The same provider owner selects and replaces cached providers, constructs native
|
|
2442
2522
|
connections, acquires the shared runtime and retries an unconfirmed observation
|
|
@@ -2539,6 +2619,19 @@ accounting and the engine's own compaction remain native behavior.
|
|
|
2539
2619
|
|
|
2540
2620
|
API-model apps can use `createAiConnectionClient` with an authorized AI integration resolver (see [Assistant](./assistant.md)), or `createAiClient` for existing environment-based configurations, and the tool-catalog helpers
|
|
2541
2621
|
from `@jskit-ai/assistant-core/server`, or the complete assistant runtime.
|
|
2622
|
+
`createAiConnectionClient` preserves immediate rejection for a provider error,
|
|
2623
|
+
cancellation or invalid tool call. It does not wait for transport EOF to report
|
|
2624
|
+
that failure. Later text, tool calls, completion frames or transport errors cannot
|
|
2625
|
+
replace the reported failure or become another yielded chunk. The original signal
|
|
2626
|
+
reason remains the cancellation error. This does not retry the request or execute
|
|
2627
|
+
later tool calls.
|
|
2628
|
+
The common API conversation enables `reportUnavailableToolCalls` only for its
|
|
2629
|
+
application catalogue. A well-formed object call rejected specifically as an
|
|
2630
|
+
unavailable tool reaches that existing catalogue, which records a no-effect
|
|
2631
|
+
refusal and supplies it to the same bounded model/tool loop. This grants no tool
|
|
2632
|
+
access. Provider-executed calls, malformed or non-object arguments and every
|
|
2633
|
+
other validation error remain rejected. Direct SDK clients retain strict
|
|
2634
|
+
validation by default.
|
|
2542
2635
|
Ordinary native conversations use `createConversationRuntime` and the supplied
|
|
2543
2636
|
server/client integration described above. The native facilities below support
|
|
2544
2637
|
hosts that already own managed execution, credential homes, authorized native
|
|
@@ -2584,6 +2677,10 @@ completion and the interruption barrier for steering. Normalized owner events
|
|
|
2584
2677
|
let the host persist admissions and publish application state; receiver
|
|
2585
2678
|
completion alone does not prove process exit. `claudeNativeMessageId()`
|
|
2586
2679
|
retains the same stable native message IDs used by the Vibe64 adapter.
|
|
2680
|
+
An exact native acknowledgement ends its ACK deadline before the admission
|
|
2681
|
+
writer runs; a slow write remains awaited, and a rejected write rejects admission.
|
|
2682
|
+
A missing acknowledgement remains uncertain. Native failure-result text stays
|
|
2683
|
+
in the turn's error rather than becoming an assistant answer.
|
|
2587
2684
|
The turn owner preserves the production receiver's block lifecycle: deltas are
|
|
2588
2685
|
temporary, block-stop removes them, and completed snapshots use their native
|
|
2589
2686
|
UUIDs. It does not group distinct history snapshots into a synthetic reply.
|
|
@@ -2780,6 +2877,19 @@ Set transport limits appropriate to the host; the default payload limit is
|
|
|
2780
2877
|
unbounded. A request abort retires the local request; interrupt a running native
|
|
2781
2878
|
turn with `turn/interrupt` when cancellation must stop provider work.
|
|
2782
2879
|
|
|
2880
|
+
The original public import contracts remain available alongside these host and
|
|
2881
|
+
testing surfaces. `/server/codex-client` exports `CodexAppServerJsonRpcClient`
|
|
2882
|
+
and `socketPathFromCodexAppServerEndpoint`; `/server/codex-events` retains its
|
|
2883
|
+
original event classification, text and notification helpers; `/server/codex-turn`
|
|
2884
|
+
retains `createCodexAppServerDetachedTurnWatcher` and the original turn-status
|
|
2885
|
+
predicates. `/server/opencode-client` retains `createOpenCodeServerClient`,
|
|
2886
|
+
`readBoundedResponse`, `OPENCODE_RESPONSE_LIMIT_BYTES` and
|
|
2887
|
+
`openCodeAssistantMessageText`. These exports forward to the same native owners;
|
|
2888
|
+
using a low-level client does not supply application authorization, account
|
|
2889
|
+
isolation or native cancellation. `/client/conversation-submit` retains
|
|
2890
|
+
`createAssistantTextSubmission`, also exported by `/client/conversation`.
|
|
2891
|
+
The newer host exports remain available.
|
|
2892
|
+
|
|
2783
2893
|
Managed Codex hosts use `createCodexAppServerRunOwner` from
|
|
2784
2894
|
`/server/codex-turn`. It constructs the native notification queue from the
|
|
2785
2895
|
supplied request-context and logging facilities and its own shutdown fence.
|
|
@@ -2856,6 +2966,13 @@ The provider-selection facet restores Helper ownership before model discovery or
|
|
|
2856
2966
|
account description, retaining supplied-provider reuse, lifecycle gating and the
|
|
2857
2967
|
original per-connection catalog cache. Authorized scope/account preparation,
|
|
2858
2968
|
deadlines and result policy remain with the host.
|
|
2969
|
+
Provider lifecycle work retains its owner-local FIFO and shutdown task tracking.
|
|
2970
|
+
Its shared critical sections serialize only the same native runtime directory;
|
|
2971
|
+
a held catalogue in a different owner and runtime does not delay cached Stop or
|
|
2972
|
+
provider creation. Work in the same owner still follows its FIFO across runtime
|
|
2973
|
+
directories. Catalogue preparation remains tracked before its directory is known.
|
|
2974
|
+
Rejected work leaves both queues usable, and a settled runtime tail cannot remove
|
|
2975
|
+
newer queued work. Peer inventory, exit proof and recovery barriers are unchanged.
|
|
2859
2976
|
Legacy detached host operations use that same owner's `acquireDetachedThread`,
|
|
2860
2977
|
`detachedThreadId` and `dispatchDetachedTurn`. The ID projection accepts the
|
|
2861
2978
|
original native response shapes and requested-thread fallback after either
|
|
@@ -231,8 +231,13 @@ target interrupts it.
|
|
|
231
231
|
The speaker button changes the requested preference. Its optional
|
|
232
232
|
`binding.onReadAloudChange(value)` callback runs only for that explicit change,
|
|
233
233
|
never for preference hydration, microphone actions or navigation. The application
|
|
234
|
-
owns storing it for the correct authenticated user.
|
|
235
|
-
|
|
234
|
+
owns storing it for the correct authenticated user. A live optional
|
|
235
|
+
`binding.readAloudChangePending: true` fences the next explicit preference change
|
|
236
|
+
before the local toggle. The session exposes that computed flag; controls disable
|
|
237
|
+
only the speaker choice (or an explicit `speakerDisabled` prop), leaving
|
|
238
|
+
**Enable sound**, microphone capture and typing available. `defaults.readAloud` initializes
|
|
239
|
+
a new session and hydrates a live boolean preference without emitting the callback;
|
|
240
|
+
it is not a second preference store. Sound on applies to future
|
|
236
241
|
outputs and does not replay history. If browser playback is blocked, the speaker
|
|
237
242
|
choice stays on and **Enable sound** retries unlocking it. Microphone permission
|
|
238
243
|
and capture continue independently, including while sound unlock is pending.
|
|
@@ -440,3 +445,47 @@ input; once that earlier admission settles, the existing capture owner finalizes
|
|
|
440
445
|
and sends the retained utterance exactly once. Resuming before admission settles
|
|
441
446
|
keeps that recording open. Cancellation retires the requested finish; genuinely
|
|
442
447
|
unknown delivery remains unresolved until the person uses existing recovery.
|
|
448
|
+
|
|
449
|
+
### Optional activity narration
|
|
450
|
+
|
|
451
|
+
A host can supply a live `binding.narration` object with `turns`, `loading`,
|
|
452
|
+
`working`, `eligible`, `vocalizeThinking`, `vocalizeInterimTurns` and
|
|
453
|
+
`thinkingSounds`. Without it, the existing canonical-answer behavior is unchanged.
|
|
454
|
+
The host owns these preferences and eligibility; JSKIT does not persist them or
|
|
455
|
+
change the shared default for read aloud.
|
|
456
|
+
|
|
457
|
+
The retained narration tracker observes thinking/commentary once, retires old or
|
|
458
|
+
disabled content, and settles an unchanged trailing phrase after 700ms while work
|
|
459
|
+
continues. The tracker retains the full activity history, so later short deltas can continue
|
|
460
|
+
beyond 4000 cumulative characters. The original splitter caps each newly observed
|
|
461
|
+
delta at 4000 characters before producing activity chunks of at most 300
|
|
462
|
+
characters; a larger single burst can lose its remaining tail. With thinking sounds
|
|
463
|
+
selected, an idle working conversation may say “Hmm...” after 20 seconds; it does
|
|
464
|
+
not overlap existing audio.
|
|
465
|
+
|
|
466
|
+
Optional activity joins the original speech queue. Canonical answers take priority
|
|
467
|
+
and keep their existing output IDs and playback callbacks. Activity and thinking
|
|
468
|
+
sounds have no canonical output identity and emit no `onPlayback` receipt; they
|
|
469
|
+
cannot satisfy lesson audio completion. Optional speech yields to microphone
|
|
470
|
+
startup, capture and transcription. Canonical answers retain full duplex playback.
|
|
471
|
+
Hiding the avatar is presentation only and does not disable either facility.
|
|
472
|
+
|
|
473
|
+
Stop speaking, speaker-off hydration, target retirement, loading, hidden pages and
|
|
474
|
+
close retire the applicable optional speech and timers. Returning or enabling a
|
|
475
|
+
flag does not replay old activity. An explicit new request or speaker choice can
|
|
476
|
+
lift the existing Stop-speaking silence policy; preference hydration never writes
|
|
477
|
+
back through `onReadAloudChange`.
|
|
478
|
+
|
|
479
|
+
For a binding that opts into narration, hiding the browser tab consumes newly
|
|
480
|
+
observed canonical outputs without speaking or replaying them on return. A
|
|
481
|
+
streamed output first finalized while hidden is interrupted with its existing
|
|
482
|
+
output ID, never reported as completed. Completed answers already queued while
|
|
483
|
+
visible may finish playing when no capture is active.
|
|
484
|
+
|
|
485
|
+
Hiding that tab cancels microphone startup and unfinished capture. These current
|
|
486
|
+
words are discarded under the original Main capture policy; an earlier pending,
|
|
487
|
+
admitted or unresolved delivery retains its text, ID and destination. Returning
|
|
488
|
+
does not restart capture; use Talk explicitly. This document-hidden boundary is
|
|
489
|
+
independent of avatar collapse or chat minimization, which preserve the session
|
|
490
|
+
and ordinary full duplex. Bindings without narration retain their existing tab
|
|
491
|
+
behavior; page suspension still uses the original transport recovery.
|
package/package.json
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@local/main": "0.1.0",
|
|
36
36
|
"@fastify/static": "^10.1.3",
|
|
37
|
-
"@jskit-ai/kernel": "0.1.
|
|
37
|
+
"@jskit-ai/kernel": "0.1.229",
|
|
38
38
|
"@tanstack/vue-query": "^5.101.0",
|
|
39
39
|
"fastify": "^5.8.5",
|
|
40
40
|
"json-rest-schema": "^1.0.17",
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
"vue": "^3.5.43",
|
|
43
43
|
"vue-router": "^5.3.1",
|
|
44
44
|
"vuetify": "^4.1.2",
|
|
45
|
-
"@jskit-ai/http-runtime": "0.1.
|
|
45
|
+
"@jskit-ai/http-runtime": "0.1.227",
|
|
46
46
|
"@fastify/fast-json-stringify-compiler": "^5.1.0",
|
|
47
47
|
"@vue/devtools-api": "^8.2.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@jskit-ai/config-eslint": "0.1.
|
|
51
|
-
"@jskit-ai/jskit-catalog": "0.1.
|
|
50
|
+
"@jskit-ai/config-eslint": "0.1.226",
|
|
51
|
+
"@jskit-ai/jskit-catalog": "0.1.254",
|
|
52
52
|
"@playwright/test": "1.61.1",
|
|
53
53
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
54
54
|
"eslint": "^10.8.0",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@local/main": "0.1.0",
|
|
36
36
|
"@fastify/static": "^10.1.3",
|
|
37
|
-
"@jskit-ai/kernel": "0.1.
|
|
37
|
+
"@jskit-ai/kernel": "0.1.229",
|
|
38
38
|
"@tanstack/vue-query": "^5.101.0",
|
|
39
39
|
"fastify": "^5.8.5",
|
|
40
40
|
"json-rest-schema": "^1.0.17",
|
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
"vue": "^3.5.43",
|
|
43
43
|
"vue-router": "^5.3.1",
|
|
44
44
|
"vuetify": "^4.1.2",
|
|
45
|
-
"@jskit-ai/http-runtime": "0.1.
|
|
45
|
+
"@jskit-ai/http-runtime": "0.1.227",
|
|
46
46
|
"@mdi/js": "^7.4.47",
|
|
47
|
-
"@jskit-ai/shell-web": "0.1.
|
|
47
|
+
"@jskit-ai/shell-web": "0.1.233",
|
|
48
48
|
"@fastify/fast-json-stringify-compiler": "^5.1.0",
|
|
49
49
|
"@vue/devtools-api": "^8.2.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@jskit-ai/config-eslint": "0.1.
|
|
53
|
-
"@jskit-ai/jskit-catalog": "0.1.
|
|
52
|
+
"@jskit-ai/config-eslint": "0.1.226",
|
|
53
|
+
"@jskit-ai/jskit-catalog": "0.1.254",
|
|
54
54
|
"@playwright/test": "1.61.1",
|
|
55
55
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
56
56
|
"eslint": "^10.8.0",
|