@jskit-ai/agent-docs 0.1.199 → 0.1.200

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +116 -7
  2. package/guide/agent/app-extras/assistant-voice.md +51 -2
  3. package/package.json +1 -1
  4. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  5. package/patterns/minimal-foundation/example/package.json +4 -4
  6. package/patterns/shell-foundation/example/package.json +5 -5
  7. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  8. package/reference/autogen/PATTERN_INDEX.md +35 -35
  9. package/reference/autogen/packages/assistant-core.md +27 -1
  10. package/reference/autogen/packages/assistant-runtime.md +1 -1
  11. package/skills/jskit/references/pattern-index.md +35 -35
  12. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
  13. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
  14. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  15. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  16. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  17. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
  18. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  19. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  20. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  21. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  22. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
  23. 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. Before
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,8 +2077,13 @@ 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. Ordinary turns
2029
- preserve the instruction binding. Native compaction remains the engine's job.
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
@@ -2214,6 +2271,19 @@ This advanced host operation has no HTTP, socket or client counterpart and accep
2214
2271
  no caller-supplied engine, native descriptor or host override. Ordinary standalone
2215
2272
  applications keep using `open()` and their existing storage contract.
2216
2273
 
2274
+ Existing detached run/stream facades can call
2275
+ `runtime.runNativeDetachedConversation({ id, context, input, options })` on that
2276
+ same runtime. Authorization uses `runDetachedConversation`. Its configured host
2277
+ returns `{ sessionId: id, engine, native, input, context, options }`, with the
2278
+ admitted context separate from the original engine options. Optional submitted
2279
+ `options` go only to that host; they never select a native owner or override the
2280
+ host. The driver uses the existing native execution and cleanup owners without
2281
+ opening Main, creating a retained handle or writing canonical message history.
2282
+ The application retains profile approval, write leases and original event/result
2283
+ codecs. Codex/OpenCode facade profile events remain unawaited;
2284
+ Claude acquires its entry before the profile event and awaits that event before
2285
+ starting work. This operation has no browser, HTTP or socket counterpart.
2286
+
2217
2287
  The same advanced host can prepare native readiness before retaining a handle
2218
2288
  with `runtime.ensureNativeConversation({ id, context })`. Authorization uses
2219
2289
  operation `ensure`; only the configured host supplies the prepared
@@ -2436,7 +2506,9 @@ pauses/resumes an active goal only when still authorized, verifies the owned
2436
2506
  shell environment after reload and never retries the caller's operation.
2437
2507
  Changed instructions or an unknown installation update native configuration and
2438
2508
  add one explicit developer-context revision before new work. Acknowledged ordinary
2439
- turns and socket reconnects do not repeat it. Compaction rebuilds context with the
2509
+ active turns keep their installed instructions rather than interrupting for a
2510
+ source-only change. Idle admission rereads the source, and socket reconnects with
2511
+ unchanged acknowledged instructions do not repeat the revision. Compaction rebuilds context with the
2440
2512
  current configuration; restricted consumers retain their own execution environment.
2441
2513
  The same provider owner selects and replaces cached providers, constructs native
2442
2514
  connections, acquires the shared runtime and retries an unconfirmed observation
@@ -2539,6 +2611,19 @@ accounting and the engine's own compaction remain native behavior.
2539
2611
 
2540
2612
  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
2613
  from `@jskit-ai/assistant-core/server`, or the complete assistant runtime.
2614
+ `createAiConnectionClient` preserves immediate rejection for a provider error,
2615
+ cancellation or invalid tool call. It does not wait for transport EOF to report
2616
+ that failure. Later text, tool calls, completion frames or transport errors cannot
2617
+ replace the reported failure or become another yielded chunk. The original signal
2618
+ reason remains the cancellation error. This does not retry the request or execute
2619
+ later tool calls.
2620
+ The common API conversation enables `reportUnavailableToolCalls` only for its
2621
+ application catalogue. A well-formed object call rejected specifically as an
2622
+ unavailable tool reaches that existing catalogue, which records a no-effect
2623
+ refusal and supplies it to the same bounded model/tool loop. This grants no tool
2624
+ access. Provider-executed calls, malformed or non-object arguments and every
2625
+ other validation error remain rejected. Direct SDK clients retain strict
2626
+ validation by default.
2542
2627
  Ordinary native conversations use `createConversationRuntime` and the supplied
2543
2628
  server/client integration described above. The native facilities below support
2544
2629
  hosts that already own managed execution, credential homes, authorized native
@@ -2584,6 +2669,10 @@ completion and the interruption barrier for steering. Normalized owner events
2584
2669
  let the host persist admissions and publish application state; receiver
2585
2670
  completion alone does not prove process exit. `claudeNativeMessageId()`
2586
2671
  retains the same stable native message IDs used by the Vibe64 adapter.
2672
+ An exact native acknowledgement ends its ACK deadline before the admission
2673
+ writer runs; a slow write remains awaited, and a rejected write rejects admission.
2674
+ A missing acknowledgement remains uncertain. Native failure-result text stays
2675
+ in the turn's error rather than becoming an assistant answer.
2587
2676
  The turn owner preserves the production receiver's block lifecycle: deltas are
2588
2677
  temporary, block-stop removes them, and completed snapshots use their native
2589
2678
  UUIDs. It does not group distinct history snapshots into a synthetic reply.
@@ -2780,6 +2869,19 @@ Set transport limits appropriate to the host; the default payload limit is
2780
2869
  unbounded. A request abort retires the local request; interrupt a running native
2781
2870
  turn with `turn/interrupt` when cancellation must stop provider work.
2782
2871
 
2872
+ The original public import contracts remain available alongside these host and
2873
+ testing surfaces. `/server/codex-client` exports `CodexAppServerJsonRpcClient`
2874
+ and `socketPathFromCodexAppServerEndpoint`; `/server/codex-events` retains its
2875
+ original event classification, text and notification helpers; `/server/codex-turn`
2876
+ retains `createCodexAppServerDetachedTurnWatcher` and the original turn-status
2877
+ predicates. `/server/opencode-client` retains `createOpenCodeServerClient`,
2878
+ `readBoundedResponse`, `OPENCODE_RESPONSE_LIMIT_BYTES` and
2879
+ `openCodeAssistantMessageText`. These exports forward to the same native owners;
2880
+ using a low-level client does not supply application authorization, account
2881
+ isolation or native cancellation. `/client/conversation-submit` retains
2882
+ `createAssistantTextSubmission`, also exported by `/client/conversation`.
2883
+ The newer host exports remain available.
2884
+
2783
2885
  Managed Codex hosts use `createCodexAppServerRunOwner` from
2784
2886
  `/server/codex-turn`. It constructs the native notification queue from the
2785
2887
  supplied request-context and logging facilities and its own shutdown fence.
@@ -2856,6 +2958,13 @@ The provider-selection facet restores Helper ownership before model discovery or
2856
2958
  account description, retaining supplied-provider reuse, lifecycle gating and the
2857
2959
  original per-connection catalog cache. Authorized scope/account preparation,
2858
2960
  deadlines and result policy remain with the host.
2961
+ Provider lifecycle work retains its owner-local FIFO and shutdown task tracking.
2962
+ Its shared critical sections serialize only the same native runtime directory;
2963
+ a held catalogue in a different owner and runtime does not delay cached Stop or
2964
+ provider creation. Work in the same owner still follows its FIFO across runtime
2965
+ directories. Catalogue preparation remains tracked before its directory is known.
2966
+ Rejected work leaves both queues usable, and a settled runtime tail cannot remove
2967
+ newer queued work. Peer inventory, exit proof and recovery barriers are unchanged.
2859
2968
  Legacy detached host operations use that same owner's `acquireDetachedThread`,
2860
2969
  `detachedThreadId` and `dispatchDetachedTurn`. The ID projection accepts the
2861
2970
  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. `defaults.readAloud` initializes
235
- a new session; it is not a second preference store. Sound on applies to future
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.199",
3
+ "version": "0.1.200",
4
4
  "description": "Distributed JSKIT agent references, prompts, guides, and generated reference maps.",
5
5
  "type": "module",
6
6
  "files": [
@@ -5,7 +5,7 @@
5
5
  "private": true,
6
6
  "type": "module",
7
7
  "dependencies": {
8
- "@jskit-ai/kernel": "0.1.227",
8
+ "@jskit-ai/kernel": "0.1.228",
9
9
  "json-rest-schema": "^1.0.17"
10
10
  },
11
11
  "exports": {
@@ -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.227",
37
+ "@jskit-ai/kernel": "0.1.228",
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.225",
45
+ "@jskit-ai/http-runtime": "0.1.226",
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.224",
51
- "@jskit-ai/jskit-catalog": "0.1.252",
50
+ "@jskit-ai/config-eslint": "0.1.225",
51
+ "@jskit-ai/jskit-catalog": "0.1.253",
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.227",
37
+ "@jskit-ai/kernel": "0.1.228",
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.225",
45
+ "@jskit-ai/http-runtime": "0.1.226",
46
46
  "@mdi/js": "^7.4.47",
47
- "@jskit-ai/shell-web": "0.1.231",
47
+ "@jskit-ai/shell-web": "0.1.232",
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.224",
53
- "@jskit-ai/jskit-catalog": "0.1.252",
52
+ "@jskit-ai/config-eslint": "0.1.225",
53
+ "@jskit-ai/jskit-catalog": "0.1.253",
54
54
  "@playwright/test": "1.61.1",
55
55
  "@vitejs/plugin-vue": "^6.0.7",
56
56
  "eslint": "^10.8.0",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "description": "App-local runtime composition and lightweight glue.",
11
11
  "dependencies": {
12
- "@jskit-ai/kernel": "0.1.227"
12
+ "@jskit-ai/kernel": "0.1.228"
13
13
  },
14
14
  "jskit": {
15
15
  "kind": "runtime",
@@ -15,7 +15,7 @@ A concrete Fastify, Vue, and JSKIT application foundation for products that do n
15
15
 
16
16
  - Id: `app/minimal-foundation`
17
17
  - Keywords: `app`, `fastify`, `foundation`, `minimal`, `server`, `vite`, `vue`
18
- - Owner: `@jskit-ai/agent-docs@0.1.199`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.200`
19
19
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/app/minimal-foundation/PATTERN.md)
20
20
  - Examples: [example/](../../skills/jskit/references/patterns/app/minimal-foundation/example/)
21
21
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`
@@ -26,7 +26,7 @@ A concrete JSKIT web application foundation with responsive shell navigation, se
26
26
 
27
27
  - Id: `app/shell-foundation`
28
28
  - Keywords: `app`, `foundation`, `material`, `navigation`, `placements`, `shell`, `vite`, `vue`
29
- - Owner: `@jskit-ai/agent-docs@0.1.199`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.200`
30
30
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/app/shell-foundation/PATTERN.md)
31
31
  - Examples: [example/](../../skills/jskit/references/patterns/app/shell-foundation/example/)
32
32
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -37,7 +37,7 @@ Configure an assistant runtime for one application surface and expose its chat a
37
37
 
38
38
  - Id: `assistant/assistant-surface`
39
39
  - Keywords: `ai`, `assistant`, `chat`, `config`, `environment`, `page`, `placement`, `settings`, `surface`
40
- - Owner: `@jskit-ai/assistant-runtime@0.1.198`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.1.199`
41
41
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/assistant/assistant-surface/PATTERN.md)
42
42
  - Examples: [example/](../../skills/jskit/references/patterns/assistant/assistant-surface/example/)
43
43
  - Requires: `@jskit-ai/assistant-runtime`, `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`, `@jskit-ai/shell-web`
@@ -48,7 +48,7 @@ Compose JSKIT authentication routes, views, profile controls, and public surface
48
48
 
49
49
  - Id: `auth/auth-surface`
50
50
  - Keywords: `account`, `auth`, `login`, `logout`, `password`, `placement`, `profile`, `reset`, `surface`
51
- - Owner: `@jskit-ai/auth-web@0.1.227`
51
+ - Owner: `@jskit-ai/auth-web@0.1.228`
52
52
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/auth-surface/PATTERN.md)
53
53
  - Examples: [example/](../../skills/jskit/references/patterns/auth/auth-surface/example/)
54
54
  - Requires: `@jskit-ai/auth-core`, `@jskit-ai/auth-web`, `@jskit-ai/shell-web`
@@ -59,7 +59,7 @@ Add Supabase authentication through normal npm composition, explicit environment
59
59
 
60
60
  - Id: `auth/supabase-auth`
61
61
  - Keywords: `auth`, `authentication`, `oauth`, `sessions`, `supabase`
62
- - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.224`
62
+ - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.225`
63
63
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/supabase-auth/PATTERN.md)
64
64
  - Examples: [example/](../../skills/jskit/references/patterns/auth/supabase-auth/example/)
65
65
  - Requires: `@jskit-ai/auth-provider-supabase-core`
@@ -70,7 +70,7 @@ Resolve an administrator environment key or an individual user's grant, then use
70
70
 
71
71
  - Id: `connectors/ai-connections`
72
72
  - Keywords: `ai`, `api-key`, `big-pickle`, `cli`, `environment`, `free`, `models`, `ownership`, `zai`, `zen`
73
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
73
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
74
74
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/ai-connections/PATTERN.md)
75
75
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/ai-connections/example/)
76
76
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -81,7 +81,7 @@ Compose provider operations, authorization and encrypted file storage from a CLI
81
81
 
82
82
  - Id: `connectors/api-key-connection`
83
83
  - Keywords: `api-key`, `clay`, `cli`, `clickhouse`, `connectors`, `dbt`, `files`, `firecrawl`, `granola`, `integrations`, `metrics`, `prestashop`, `resend`, `semantic-layer`, `semrush`, `x-twitter`
84
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
84
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
85
85
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/api-key-connection/PATTERN.md)
86
86
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/api-key-connection/example/)
87
87
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -92,7 +92,7 @@ Compose token-based MCP discovery and explicitly authorized tool calls using the
92
92
 
93
93
  - Id: `connectors/assistant-mcp`
94
94
  - Keywords: `assistant`, `cli`, `connectors`, `files`, `integrations`, `mcp`, `n8n`, `sanity`
95
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
95
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
96
96
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/assistant-mcp/PATTERN.md)
97
97
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/assistant-mcp/example/)
98
98
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -103,7 +103,7 @@ Configure assistant OAuth clients, then compose existing state, encrypted file g
103
103
 
104
104
  - Id: `connectors/assistant-mcp-oauth`
105
105
  - Keywords: `amplitude`, `assistant`, `atlassian`, `canva`, `cli`, `client metadata`, `confidence`, `connectors`, `figma`, `files`, `granola`, `hex`, `mcp`, `miro`, `oauth`
106
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
106
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
107
107
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/assistant-mcp-oauth/PATTERN.md)
108
108
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/assistant-mcp-oauth/example/)
109
109
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -114,7 +114,7 @@ Compose signed AWS operations, file configuration and application authorization
114
114
 
115
115
  - Id: `connectors/aws-storage-queries`
116
116
  - Keywords: `athena`, `aws`, `cli`, `connectors`, `files`, `iam`, `queries`, `s3`, `storage`, `sts`
117
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
117
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
118
118
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/aws-storage-queries/PATTERN.md)
119
119
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/aws-storage-queries/example/)
120
120
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -125,7 +125,7 @@ Compose reusable connection libraries with portable configuration, application o
125
125
 
126
126
  - Id: `connectors/calendar-cli`
127
127
  - Keywords: `calendar`, `cli`, `connectors`, `google`, `integrations`, `oauth`, `permissions`
128
- - Owner: `@jskit-ai/connector-google-calendar@0.1.44`
128
+ - Owner: `@jskit-ai/connector-google-calendar@0.1.45`
129
129
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/calendar-cli/PATTERN.md)
130
130
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/calendar-cli/example/)
131
131
  - Requires: `@jskit-ai/connector-google-calendar`, `@jskit-ai/connectors-core`, `@jskit-ai/database-runtime-mysql`
@@ -136,7 +136,7 @@ Compose the shared connector runtime for event delivery while leaving workflow c
136
136
 
137
137
  - Id: `connectors/event-delivery`
138
138
  - Keywords: `cli`, `connectors`, `events`, `files`, `inngest`, `integrations`, `workflows`
139
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
139
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
140
140
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/event-delivery/PATTERN.md)
141
141
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/event-delivery/example/)
142
142
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -147,7 +147,7 @@ Wire service-account grants, file storage, explicit message actions and public b
147
147
 
148
148
  - Id: `connectors/firebase-messaging`
149
149
  - Keywords: `cli`, `connectors`, `fcm`, `files`, `firebase`, `integrations`, `jwt`, `notifications`, `push`, `service-account`, `vapid`
150
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
150
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
151
151
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/firebase-messaging/PATTERN.md)
152
152
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/firebase-messaging/example/)
153
153
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -158,7 +158,7 @@ Compose reviewed Search campaigns with project-owned Google OAuth and portable s
158
158
 
159
159
  - Id: `connectors/google-ads-search`
160
160
  - Keywords: `ads`, `campaigns`, `cli`, `connectors`, `conversion`, `google`, `search`
161
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
161
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
162
162
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/google-ads-search/PATTERN.md)
163
163
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/google-ads-search/example/)
164
164
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -169,7 +169,7 @@ Compose provider consent, verification and encrypted file persistence from an ap
169
169
 
170
170
  - Id: `connectors/oauth-connection`
171
171
  - Keywords: `accounting`, `assistant permissions`, `books`, `cli`, `client credentials`, `connectors`, `consent`, `crm`, `databricks`, `developer token`, `fabric`, `files`, `gaql`, `google ads`, `graphql`, `integrations`, `linkedin`, `microsoft`, `oauth`, `powerpoint`, `salesforce`, `service principal`, `shopify`, `soql`, `staffing`, `tiktok`, `twitch`, `wave`, `word`, `wordpress`, `workday`, `xero`, `zoho`
172
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
172
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
173
173
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md)
174
174
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/oauth-connection/example/)
175
175
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -180,7 +180,7 @@ Compose a sequential catalogue batch and preserve partial success for applicatio
180
180
 
181
181
  - Id: `connectors/paddle-catalogue`
182
182
  - Keywords: `batch`, `paddle`, `payments`, `prices`, `products`
183
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
183
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
184
184
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/paddle-catalogue/PATTERN.md)
185
185
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/paddle-catalogue/example/)
186
186
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -191,7 +191,7 @@ Resolve a publishable image key deliberately and use the shared URL library in a
191
191
 
192
192
  - Id: `connectors/public-image`
193
193
  - Keywords: `cli`, `connectors`, `files`, `images`, `integrations`, `logo-dev`, `public-key`
194
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
194
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
195
195
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/public-image/PATTERN.md)
196
196
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/public-image/example/)
197
197
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -202,7 +202,7 @@ Compose file configuration, Redshift Data API operations and application query o
202
202
 
203
203
  - Id: `connectors/redshift-queries`
204
204
  - Keywords: `aws`, `cli`, `connectors`, `files`, `iam`, `provisioned`, `redshift`, `serverless`, `sql`, `warehouse`
205
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
205
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
206
206
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md)
207
207
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/redshift-queries/example/)
208
208
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -213,7 +213,7 @@ Use the shared scanner runtime from a CLI or a host worker with portable configu
213
213
 
214
214
  - Id: `connectors/source-scanning`
215
215
  - Keywords: `cancellation`, `cli`, `connectors`, `integrations`, `scanning`, `security`, `source`, `wiz`, `worker`
216
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
216
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
217
217
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/connectors/source-scanning/PATTERN.md)
218
218
  - Examples: [example/](../../skills/jskit/references/patterns/connectors/source-scanning/example/)
219
219
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -224,7 +224,7 @@ Add a protected administration surface, settings shell, and semantic navigation
224
224
 
225
225
  - Id: `console/console-surface`
226
226
  - Keywords: `admin`, `console`, `navigation`, `owner`, `placement`, `settings`, `surface`
227
- - Owner: `@jskit-ai/console-web@0.1.195`
227
+ - Owner: `@jskit-ai/console-web@0.1.196`
228
228
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/console/console-surface/PATTERN.md)
229
229
  - Examples: [example/](../../skills/jskit/references/patterns/console/console-surface/example/)
230
230
  - Requires: `@jskit-ai/console-core`, `@jskit-ai/console-web`, `@jskit-ai/shell-web`
@@ -235,7 +235,7 @@ Build a routed CRUD user interface as thin application pages over JSKIT's shared
235
235
 
236
236
  - Id: `crud/crud-screen-set`
237
237
  - Keywords: `actions`, `add`, `crud`, `delete`, `edit`, `filters`, `list`, `material`, `routes`, `view`, `vue`
238
- - Owner: `@jskit-ai/http-web@0.1.72`
238
+ - Owner: `@jskit-ai/http-web@0.1.73`
239
239
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md)
240
240
  - Examples: [example/](../../skills/jskit/references/patterns/crud/crud-screen-set/example/)
241
241
  - Requires: `@jskit-ai/http-web`, `@jskit-ai/resource-crud-core`
@@ -246,7 +246,7 @@ Build a complete application-owned CRUD server package from a migration, resourc
246
246
 
247
247
  - Id: `crud/json-api-resource-package`
248
248
  - Keywords: `actions`, `crud`, `database`, `json-api`, `migration`, `permissions`, `provider`, `repository`, `routes`, `service`
249
- - Owner: `@jskit-ai/crud-core@0.1.238`
249
+ - Owner: `@jskit-ai/crud-core@0.1.239`
250
250
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/json-api-resource-package/PATTERN.md)
251
251
  - Examples: [example/](../../skills/jskit/references/patterns/crud/json-api-resource-package/example/)
252
252
  - Requires: `@jskit-ai/crud-core`, `@jskit-ai/resource-crud-core`
@@ -257,7 +257,7 @@ Define an authenticated application resource whose records belong to the current
257
257
 
258
258
  - Id: `crud/resource-contract`
259
259
  - Keywords: `authenticated`, `crud`, `database`, `owner-scoped`, `resource`, `user`
260
- - Owner: `@jskit-ai/resource-crud-core@0.1.169`
260
+ - Owner: `@jskit-ai/resource-crud-core@0.1.170`
261
261
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/resource-contract/PATTERN.md)
262
262
  - Examples: [example/](../../skills/jskit/references/patterns/crud/resource-contract/example/)
263
263
  - Requires: `@jskit-ai/resource-crud-core`
@@ -268,7 +268,7 @@ Configure a JSKIT application for MySQL with a fixed driver, ordinary environmen
268
268
 
269
269
  - Id: `database/mysql-application`
270
270
  - Keywords: `database`, `knex`, `mariadb`, `migrations`, `mysql`, `mysql2`
271
- - Owner: `@jskit-ai/database-runtime-mysql@0.1.225`
271
+ - Owner: `@jskit-ai/database-runtime-mysql@0.1.226`
272
272
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/database/mysql-application/PATTERN.md)
273
273
  - Examples: [example/](../../skills/jskit/references/patterns/database/mysql-application/example/)
274
274
  - Requires: `@jskit-ai/database-runtime-mysql`
@@ -279,7 +279,7 @@ Configure a JSKIT application for PostgreSQL with a fixed driver, ordinary envir
279
279
 
280
280
  - Id: `database/postgres-application`
281
281
  - Keywords: `database`, `knex`, `migrations`, `pg`, `postgres`, `postgresql`
282
- - Owner: `@jskit-ai/database-runtime-postgres@0.1.224`
282
+ - Owner: `@jskit-ai/database-runtime-postgres@0.1.225`
283
283
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/database/postgres-application/PATTERN.md)
284
284
  - Examples: [example/](../../skills/jskit/references/patterns/database/postgres-application/example/)
285
285
  - Requires: `@jskit-ai/database-runtime-postgres`
@@ -290,7 +290,7 @@ Wrap a JSKIT web application in a Capacitor Android shell using native Capacitor
290
290
 
291
291
  - Id: `mobile/android-application`
292
292
  - Keywords: `android`, `capacitor`, `device`, `mobile`, `native`, `shell`, `webview`
293
- - Owner: `@jskit-ai/mobile-capacitor@0.1.162`
293
+ - Owner: `@jskit-ai/mobile-capacitor@0.1.163`
294
294
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/mobile/android-application/PATTERN.md)
295
295
  - Examples: [example/](../../skills/jskit/references/patterns/mobile/android-application/example/)
296
296
  - Requires: `@capacitor/android`, `@capacitor/app`, `@capacitor/cli`, `@jskit-ai/mobile-capacitor`
@@ -301,7 +301,7 @@ Add JSKIT realtime events with an optional Redis backplane and an explicit shell
301
301
 
302
302
  - Id: `realtime/realtime-application`
303
303
  - Keywords: `realtime`, `redis`, `socket.io`, `sockets`, `status`, `websocket`
304
- - Owner: `@jskit-ai/realtime@0.1.224`
304
+ - Owner: `@jskit-ai/realtime@0.1.225`
305
305
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/realtime/realtime-application/PATTERN.md)
306
306
  - Examples: [example/](../../skills/jskit/references/patterns/realtime/realtime-application/example/)
307
307
  - Requires: `@jskit-ai/realtime`, `@jskit-ai/shell-web`
@@ -312,7 +312,7 @@ Compose application-owned Google Publisher Tag delivery with the generic rewarde
312
312
 
313
313
  - Id: `rewards/google-rewarded`
314
314
  - Keywords: `ads`, `google`, `publisher tag`, `rewarded`, `unlock`
315
- - Owner: `@jskit-ai/rewarded-web@0.1.163`
315
+ - Owner: `@jskit-ai/rewarded-web@0.1.164`
316
316
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/rewards/google-rewarded/PATTERN.md)
317
317
  - Examples: [example/](../../skills/jskit/references/patterns/rewards/google-rewarded/example/)
318
318
  - Requires: `@jskit-ai/rewarded-web`
@@ -323,7 +323,7 @@ Define a server feature through explicit capabilities and first-class actions, a
323
323
 
324
324
  - Id: `server/feature-package`
325
325
  - Keywords: `actions`, `feature`, `json-rest`, `knex`, `orchestration`, `package`, `provider`, `repository`, `routes`, `server`
326
- - Owner: `@jskit-ai/agent-docs@0.1.199`
326
+ - Owner: `@jskit-ai/agent-docs@0.1.200`
327
327
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/server/feature-package/PATTERN.md)
328
328
  - Examples: [example/](../../skills/jskit/references/patterns/server/feature-package/example/)
329
329
  - Requires: `@jskit-ai/kernel`
@@ -334,7 +334,7 @@ Compose the JSKIT responsive shell, semantic placements, settings navigation, an
334
334
 
335
335
  - Id: `shell/application-shell`
336
336
  - Keywords: `adaptive`, `app`, `layout`, `navigation`, `placement`, `responsive`, `settings`, `shell`
337
- - Owner: `@jskit-ai/shell-web@0.1.231`
337
+ - Owner: `@jskit-ai/shell-web@0.1.232`
338
338
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/shell/application-shell/PATTERN.md)
339
339
  - Examples: [example/](../../skills/jskit/references/patterns/shell/application-shell/example/)
340
340
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -345,7 +345,7 @@ Add product routes and shell extensions through file routing, semantic placement
345
345
 
346
346
  - Id: `ui/page-and-placement`
347
347
  - Keywords: `component`, `navigation`, `outlet`, `page`, `placement`, `routes`, `section`, `shell`, `subpages`, `vue`
348
- - Owner: `@jskit-ai/shell-web@0.1.231`
348
+ - Owner: `@jskit-ai/shell-web@0.1.232`
349
349
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/ui/page-and-placement/PATTERN.md)
350
350
  - Examples: [example/](../../skills/jskit/references/patterns/ui/page-and-placement/example/)
351
351
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -356,7 +356,7 @@ Compose an account settings route and profile, preference, and notification sect
356
356
 
357
357
  - Id: `users/account-settings`
358
358
  - Keywords: `account`, `notifications`, `preferences`, `profile`, `settings`, `user`, `vue`
359
- - Owner: `@jskit-ai/users-web@0.1.245`
359
+ - Owner: `@jskit-ai/users-web@0.1.246`
360
360
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/users/account-settings/PATTERN.md)
361
361
  - Examples: [example/](../../skills/jskit/references/patterns/users/account-settings/example/)
362
362
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/users-core`, `@jskit-ai/users-web`
@@ -367,7 +367,7 @@ Expose user administration and workspace-scoped member operations through app-ow
367
367
 
368
368
  - Id: `users/user-administration-server`
369
369
  - Keywords: `account`, `admin`, `member`, `repository`, `resource`, `routes`, `service`, `user`, `workspace`
370
- - Owner: `@jskit-ai/users-core@0.1.240`
370
+ - Owner: `@jskit-ai/users-core@0.1.241`
371
371
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/users/user-administration-server/PATTERN.md)
372
372
  - Examples: [example/](../../skills/jskit/references/patterns/users/user-administration-server/example/)
373
373
  - Requires: `@jskit-ai/crud-core`, `@jskit-ai/users-core`
@@ -378,7 +378,7 @@ Configure roles, workspace access policy, invitations, and app-owned invitation
378
378
 
379
379
  - Id: `workspaces/workspace-server`
380
380
  - Keywords: `access`, `invite`, `membership`, `multitenancy`, `policy`, `role`, `tenancy`, `workspace`
381
- - Owner: `@jskit-ai/workspaces-core@0.1.205`
381
+ - Owner: `@jskit-ai/workspaces-core@0.1.206`
382
382
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md)
383
383
  - Examples: [example/](../../skills/jskit/references/patterns/workspaces/workspace-server/example/)
384
384
  - Requires: `@jskit-ai/users-core`, `@jskit-ai/workspaces-core`
@@ -389,7 +389,7 @@ Compose workspace selection, invitation, member administration, settings, and re
389
389
 
390
390
  - Id: `workspaces/workspace-surfaces`
391
391
  - Keywords: `admin`, `invite`, `member`, `navigation`, `settings`, `surface`, `switcher`, `workspace`
392
- - Owner: `@jskit-ai/workspaces-web@0.1.206`
392
+ - Owner: `@jskit-ai/workspaces-web@0.1.207`
393
393
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md)
394
394
  - Examples: [example/](../../skills/jskit/references/patterns/workspaces/workspace-surfaces/example/)
395
395
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/workspaces-core`, `@jskit-ai/workspaces-web`
@@ -148,6 +148,7 @@ Local functions
148
148
  - `clearLiveBottomScroll()`
149
149
  - `updateLatestFollowFromScroll(event = {})`
150
150
  - `visibleHistoryAnchor(element)`
151
+ - `restoreRetainedReaderScroll()`
151
152
  - `requestLoadMore()`
152
153
  - `clearLoadMoreScrollSnapshot()`
153
154
  - `completeLoadMoreRequest(version, changed)`
@@ -632,6 +633,7 @@ Exports
632
633
  - `createCodexAppServerProviderOwner({ runtimeRoot = "", assertOpen: assertApplicationOpen = () => {}, onRecoveryEvent = () => {}, debugLog = () => {}, debugError = error => error, providerFactory = null, prepareNativeHost = () => ({}), runtimeBusyCode = "codex_app_server_runtime_busy", exitUnverifiedCode = "codex_runtime_exit_unverified", requiredStopCode = "codex_runtime_exit_unverified", runtimeCloseError = "Codex app-server runtime close failed." } = {})`
633
634
  Local functions
634
635
  - `normalizeText(value)`
636
+ - `withRuntimeLifecycle(runtimeKey, operation)`
635
637
  - `directoryExists(filePath = "")`
636
638
 
637
639
  ### `src/server/conversation/codexProviderSelection.js`
@@ -1137,6 +1139,21 @@ Exports
1137
1139
 
1138
1140
  ### `src/server/hosts/codexEvents.js`
1139
1141
  Exports
1142
+ - `classifyCodexAppServerEvent`
1143
+ - `codexAppServerAssistantItemText`
1144
+ - `codexAppServerContentText`
1145
+ - `codexAppServerErrorText`
1146
+ - `codexAppServerNotificationError`
1147
+ - `codexAppServerNotificationEventPayload`
1148
+ - `codexAppServerNotificationEventType`
1149
+ - `codexAppServerNotificationItem`
1150
+ - `codexAppServerNotificationParams`
1151
+ - `codexAppServerNotificationThreadId`
1152
+ - `codexAppServerNotificationTurnStatus`
1153
+ - `codexAppServerNotificationUsageLimitExceeded`
1154
+ - `codexAppServerOutputOwnerTurnId`
1155
+ - `codexAppServerStatusFromValue`
1156
+ - `codexAppServerUserMessageText`
1140
1157
  - `codexContextUsageFromNotification`
1141
1158
  - `codexAppServerContextRefreshReason`
1142
1159
  - `codexAppServerNotificationEvent`
@@ -1188,6 +1205,11 @@ Exports
1188
1205
 
1189
1206
  ### `src/server/hosts/codexTurn.js`
1190
1207
  Exports
1208
+ - `codexAppServerTurnStatusIsActive`
1209
+ - `codexAppServerTurnStatusIsComplete`
1210
+ - `codexAppServerTurnStatusIsProviderFailure`
1211
+ - `codexAppServerTurnStatusIsSuccessfulComplete`
1212
+ - `createCodexAppServerDetachedTurnWatcher`
1191
1213
  - `codexAppServerAgentRun`
1192
1214
  - `codexAppServerConversationTurnIsActive`
1193
1215
  - `codexAppServerFrozenTurnInterruptResponse`
@@ -1210,6 +1232,10 @@ Exports
1210
1232
 
1211
1233
  ### `src/server/hosts/openCodeClient.js`
1212
1234
  Exports
1235
+ - `OPENCODE_RESPONSE_LIMIT_BYTES`
1236
+ - `createOpenCodeServerClient`
1237
+ - `openCodeAssistantMessageText`
1238
+ - `readBoundedResponse`
1213
1239
  - `retireOpenCodeConversationHistory`
1214
1240
 
1215
1241
  ### `src/server/hosts/openCodeProcess.js`
@@ -1273,7 +1299,7 @@ Exports
1273
1299
 
1274
1300
  ### `src/server/lib/aiConnectionClient.js`
1275
1301
  Exports
1276
- - `createAiConnectionClient(connection, { fetch, timeoutMs = 120_000, maxOutputTokens, effort } = {})`
1302
+ - `createAiConnectionClient(connection, { fetch, timeoutMs = 120_000, maxOutputTokens, effort, reportUnavailableToolCalls = false } = {})`
1277
1303
  Local functions
1278
1304
  - `sdkMessages(messages)`
1279
1305
 
@@ -155,7 +155,7 @@ Exports
155
155
 
156
156
  ### `src/server/registerConversationSubscriptions.js`
157
157
  Exports
158
- - `registerConversationSubscriptions({ realtime, events, actions, config = {}, workspaceScopeSupport = null, subscribeActionId = actionIds.conversationSubscribe, requestPolicy = "authenticated" } = {})`
158
+ - `registerConversationSubscriptions({ realtime, events, actions, config = {}, logger = null, workspaceScopeSupport = null, subscribeActionId = actionIds.conversationSubscribe, requestPolicy = "authenticated" } = {})`
159
159
  Local functions
160
160
  - `requireSubscriptionId(input)`
161
161
  - `subscriptionError(error)`
@@ -15,7 +15,7 @@ A concrete Fastify, Vue, and JSKIT application foundation for products that do n
15
15
 
16
16
  - Id: `app/minimal-foundation`
17
17
  - Keywords: `app`, `fastify`, `foundation`, `minimal`, `server`, `vite`, `vue`
18
- - Owner: `@jskit-ai/agent-docs@0.1.199`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.200`
19
19
  - Read: [PATTERN.md](patterns/app/minimal-foundation/PATTERN.md)
20
20
  - Examples: [example/](patterns/app/minimal-foundation/example/)
21
21
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`
@@ -26,7 +26,7 @@ A concrete JSKIT web application foundation with responsive shell navigation, se
26
26
 
27
27
  - Id: `app/shell-foundation`
28
28
  - Keywords: `app`, `foundation`, `material`, `navigation`, `placements`, `shell`, `vite`, `vue`
29
- - Owner: `@jskit-ai/agent-docs@0.1.199`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.200`
30
30
  - Read: [PATTERN.md](patterns/app/shell-foundation/PATTERN.md)
31
31
  - Examples: [example/](patterns/app/shell-foundation/example/)
32
32
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -37,7 +37,7 @@ Configure an assistant runtime for one application surface and expose its chat a
37
37
 
38
38
  - Id: `assistant/assistant-surface`
39
39
  - Keywords: `ai`, `assistant`, `chat`, `config`, `environment`, `page`, `placement`, `settings`, `surface`
40
- - Owner: `@jskit-ai/assistant-runtime@0.1.198`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.1.199`
41
41
  - Read: [PATTERN.md](patterns/assistant/assistant-surface/PATTERN.md)
42
42
  - Examples: [example/](patterns/assistant/assistant-surface/example/)
43
43
  - Requires: `@jskit-ai/assistant-runtime`, `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`, `@jskit-ai/shell-web`
@@ -48,7 +48,7 @@ Compose JSKIT authentication routes, views, profile controls, and public surface
48
48
 
49
49
  - Id: `auth/auth-surface`
50
50
  - Keywords: `account`, `auth`, `login`, `logout`, `password`, `placement`, `profile`, `reset`, `surface`
51
- - Owner: `@jskit-ai/auth-web@0.1.227`
51
+ - Owner: `@jskit-ai/auth-web@0.1.228`
52
52
  - Read: [PATTERN.md](patterns/auth/auth-surface/PATTERN.md)
53
53
  - Examples: [example/](patterns/auth/auth-surface/example/)
54
54
  - Requires: `@jskit-ai/auth-core`, `@jskit-ai/auth-web`, `@jskit-ai/shell-web`
@@ -59,7 +59,7 @@ Add Supabase authentication through normal npm composition, explicit environment
59
59
 
60
60
  - Id: `auth/supabase-auth`
61
61
  - Keywords: `auth`, `authentication`, `oauth`, `sessions`, `supabase`
62
- - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.224`
62
+ - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.225`
63
63
  - Read: [PATTERN.md](patterns/auth/supabase-auth/PATTERN.md)
64
64
  - Examples: [example/](patterns/auth/supabase-auth/example/)
65
65
  - Requires: `@jskit-ai/auth-provider-supabase-core`
@@ -70,7 +70,7 @@ Resolve an administrator environment key or an individual user's grant, then use
70
70
 
71
71
  - Id: `connectors/ai-connections`
72
72
  - Keywords: `ai`, `api-key`, `big-pickle`, `cli`, `environment`, `free`, `models`, `ownership`, `zai`, `zen`
73
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
73
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
74
74
  - Read: [PATTERN.md](patterns/connectors/ai-connections/PATTERN.md)
75
75
  - Examples: [example/](patterns/connectors/ai-connections/example/)
76
76
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -81,7 +81,7 @@ Compose provider operations, authorization and encrypted file storage from a CLI
81
81
 
82
82
  - Id: `connectors/api-key-connection`
83
83
  - Keywords: `api-key`, `clay`, `cli`, `clickhouse`, `connectors`, `dbt`, `files`, `firecrawl`, `granola`, `integrations`, `metrics`, `prestashop`, `resend`, `semantic-layer`, `semrush`, `x-twitter`
84
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
84
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
85
85
  - Read: [PATTERN.md](patterns/connectors/api-key-connection/PATTERN.md)
86
86
  - Examples: [example/](patterns/connectors/api-key-connection/example/)
87
87
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -92,7 +92,7 @@ Compose token-based MCP discovery and explicitly authorized tool calls using the
92
92
 
93
93
  - Id: `connectors/assistant-mcp`
94
94
  - Keywords: `assistant`, `cli`, `connectors`, `files`, `integrations`, `mcp`, `n8n`, `sanity`
95
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
95
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
96
96
  - Read: [PATTERN.md](patterns/connectors/assistant-mcp/PATTERN.md)
97
97
  - Examples: [example/](patterns/connectors/assistant-mcp/example/)
98
98
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -103,7 +103,7 @@ Configure assistant OAuth clients, then compose existing state, encrypted file g
103
103
 
104
104
  - Id: `connectors/assistant-mcp-oauth`
105
105
  - Keywords: `amplitude`, `assistant`, `atlassian`, `canva`, `cli`, `client metadata`, `confidence`, `connectors`, `figma`, `files`, `granola`, `hex`, `mcp`, `miro`, `oauth`
106
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
106
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
107
107
  - Read: [PATTERN.md](patterns/connectors/assistant-mcp-oauth/PATTERN.md)
108
108
  - Examples: [example/](patterns/connectors/assistant-mcp-oauth/example/)
109
109
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -114,7 +114,7 @@ Compose signed AWS operations, file configuration and application authorization
114
114
 
115
115
  - Id: `connectors/aws-storage-queries`
116
116
  - Keywords: `athena`, `aws`, `cli`, `connectors`, `files`, `iam`, `queries`, `s3`, `storage`, `sts`
117
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
117
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
118
118
  - Read: [PATTERN.md](patterns/connectors/aws-storage-queries/PATTERN.md)
119
119
  - Examples: [example/](patterns/connectors/aws-storage-queries/example/)
120
120
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -125,7 +125,7 @@ Compose reusable connection libraries with portable configuration, application o
125
125
 
126
126
  - Id: `connectors/calendar-cli`
127
127
  - Keywords: `calendar`, `cli`, `connectors`, `google`, `integrations`, `oauth`, `permissions`
128
- - Owner: `@jskit-ai/connector-google-calendar@0.1.44`
128
+ - Owner: `@jskit-ai/connector-google-calendar@0.1.45`
129
129
  - Read: [PATTERN.md](patterns/connectors/calendar-cli/PATTERN.md)
130
130
  - Examples: [example/](patterns/connectors/calendar-cli/example/)
131
131
  - Requires: `@jskit-ai/connector-google-calendar`, `@jskit-ai/connectors-core`, `@jskit-ai/database-runtime-mysql`
@@ -136,7 +136,7 @@ Compose the shared connector runtime for event delivery while leaving workflow c
136
136
 
137
137
  - Id: `connectors/event-delivery`
138
138
  - Keywords: `cli`, `connectors`, `events`, `files`, `inngest`, `integrations`, `workflows`
139
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
139
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
140
140
  - Read: [PATTERN.md](patterns/connectors/event-delivery/PATTERN.md)
141
141
  - Examples: [example/](patterns/connectors/event-delivery/example/)
142
142
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -147,7 +147,7 @@ Wire service-account grants, file storage, explicit message actions and public b
147
147
 
148
148
  - Id: `connectors/firebase-messaging`
149
149
  - Keywords: `cli`, `connectors`, `fcm`, `files`, `firebase`, `integrations`, `jwt`, `notifications`, `push`, `service-account`, `vapid`
150
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
150
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
151
151
  - Read: [PATTERN.md](patterns/connectors/firebase-messaging/PATTERN.md)
152
152
  - Examples: [example/](patterns/connectors/firebase-messaging/example/)
153
153
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -158,7 +158,7 @@ Compose reviewed Search campaigns with project-owned Google OAuth and portable s
158
158
 
159
159
  - Id: `connectors/google-ads-search`
160
160
  - Keywords: `ads`, `campaigns`, `cli`, `connectors`, `conversion`, `google`, `search`
161
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
161
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
162
162
  - Read: [PATTERN.md](patterns/connectors/google-ads-search/PATTERN.md)
163
163
  - Examples: [example/](patterns/connectors/google-ads-search/example/)
164
164
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -169,7 +169,7 @@ Compose provider consent, verification and encrypted file persistence from an ap
169
169
 
170
170
  - Id: `connectors/oauth-connection`
171
171
  - Keywords: `accounting`, `assistant permissions`, `books`, `cli`, `client credentials`, `connectors`, `consent`, `crm`, `databricks`, `developer token`, `fabric`, `files`, `gaql`, `google ads`, `graphql`, `integrations`, `linkedin`, `microsoft`, `oauth`, `powerpoint`, `salesforce`, `service principal`, `shopify`, `soql`, `staffing`, `tiktok`, `twitch`, `wave`, `word`, `wordpress`, `workday`, `xero`, `zoho`
172
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
172
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
173
173
  - Read: [PATTERN.md](patterns/connectors/oauth-connection/PATTERN.md)
174
174
  - Examples: [example/](patterns/connectors/oauth-connection/example/)
175
175
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -180,7 +180,7 @@ Compose a sequential catalogue batch and preserve partial success for applicatio
180
180
 
181
181
  - Id: `connectors/paddle-catalogue`
182
182
  - Keywords: `batch`, `paddle`, `payments`, `prices`, `products`
183
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
183
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
184
184
  - Read: [PATTERN.md](patterns/connectors/paddle-catalogue/PATTERN.md)
185
185
  - Examples: [example/](patterns/connectors/paddle-catalogue/example/)
186
186
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -191,7 +191,7 @@ Resolve a publishable image key deliberately and use the shared URL library in a
191
191
 
192
192
  - Id: `connectors/public-image`
193
193
  - Keywords: `cli`, `connectors`, `files`, `images`, `integrations`, `logo-dev`, `public-key`
194
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
194
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
195
195
  - Read: [PATTERN.md](patterns/connectors/public-image/PATTERN.md)
196
196
  - Examples: [example/](patterns/connectors/public-image/example/)
197
197
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -202,7 +202,7 @@ Compose file configuration, Redshift Data API operations and application query o
202
202
 
203
203
  - Id: `connectors/redshift-queries`
204
204
  - Keywords: `aws`, `cli`, `connectors`, `files`, `iam`, `provisioned`, `redshift`, `serverless`, `sql`, `warehouse`
205
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
205
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
206
206
  - Read: [PATTERN.md](patterns/connectors/redshift-queries/PATTERN.md)
207
207
  - Examples: [example/](patterns/connectors/redshift-queries/example/)
208
208
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -213,7 +213,7 @@ Use the shared scanner runtime from a CLI or a host worker with portable configu
213
213
 
214
214
  - Id: `connectors/source-scanning`
215
215
  - Keywords: `cancellation`, `cli`, `connectors`, `integrations`, `scanning`, `security`, `source`, `wiz`, `worker`
216
- - Owner: `@jskit-ai/connectors-catalog@0.1.44`
216
+ - Owner: `@jskit-ai/connectors-catalog@0.1.45`
217
217
  - Read: [PATTERN.md](patterns/connectors/source-scanning/PATTERN.md)
218
218
  - Examples: [example/](patterns/connectors/source-scanning/example/)
219
219
  - Requires: `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`
@@ -224,7 +224,7 @@ Add a protected administration surface, settings shell, and semantic navigation
224
224
 
225
225
  - Id: `console/console-surface`
226
226
  - Keywords: `admin`, `console`, `navigation`, `owner`, `placement`, `settings`, `surface`
227
- - Owner: `@jskit-ai/console-web@0.1.195`
227
+ - Owner: `@jskit-ai/console-web@0.1.196`
228
228
  - Read: [PATTERN.md](patterns/console/console-surface/PATTERN.md)
229
229
  - Examples: [example/](patterns/console/console-surface/example/)
230
230
  - Requires: `@jskit-ai/console-core`, `@jskit-ai/console-web`, `@jskit-ai/shell-web`
@@ -235,7 +235,7 @@ Build a routed CRUD user interface as thin application pages over JSKIT's shared
235
235
 
236
236
  - Id: `crud/crud-screen-set`
237
237
  - Keywords: `actions`, `add`, `crud`, `delete`, `edit`, `filters`, `list`, `material`, `routes`, `view`, `vue`
238
- - Owner: `@jskit-ai/http-web@0.1.72`
238
+ - Owner: `@jskit-ai/http-web@0.1.73`
239
239
  - Read: [PATTERN.md](patterns/crud/crud-screen-set/PATTERN.md)
240
240
  - Examples: [example/](patterns/crud/crud-screen-set/example/)
241
241
  - Requires: `@jskit-ai/http-web`, `@jskit-ai/resource-crud-core`
@@ -246,7 +246,7 @@ Build a complete application-owned CRUD server package from a migration, resourc
246
246
 
247
247
  - Id: `crud/json-api-resource-package`
248
248
  - Keywords: `actions`, `crud`, `database`, `json-api`, `migration`, `permissions`, `provider`, `repository`, `routes`, `service`
249
- - Owner: `@jskit-ai/crud-core@0.1.238`
249
+ - Owner: `@jskit-ai/crud-core@0.1.239`
250
250
  - Read: [PATTERN.md](patterns/crud/json-api-resource-package/PATTERN.md)
251
251
  - Examples: [example/](patterns/crud/json-api-resource-package/example/)
252
252
  - Requires: `@jskit-ai/crud-core`, `@jskit-ai/resource-crud-core`
@@ -257,7 +257,7 @@ Define an authenticated application resource whose records belong to the current
257
257
 
258
258
  - Id: `crud/resource-contract`
259
259
  - Keywords: `authenticated`, `crud`, `database`, `owner-scoped`, `resource`, `user`
260
- - Owner: `@jskit-ai/resource-crud-core@0.1.169`
260
+ - Owner: `@jskit-ai/resource-crud-core@0.1.170`
261
261
  - Read: [PATTERN.md](patterns/crud/resource-contract/PATTERN.md)
262
262
  - Examples: [example/](patterns/crud/resource-contract/example/)
263
263
  - Requires: `@jskit-ai/resource-crud-core`
@@ -268,7 +268,7 @@ Configure a JSKIT application for MySQL with a fixed driver, ordinary environmen
268
268
 
269
269
  - Id: `database/mysql-application`
270
270
  - Keywords: `database`, `knex`, `mariadb`, `migrations`, `mysql`, `mysql2`
271
- - Owner: `@jskit-ai/database-runtime-mysql@0.1.225`
271
+ - Owner: `@jskit-ai/database-runtime-mysql@0.1.226`
272
272
  - Read: [PATTERN.md](patterns/database/mysql-application/PATTERN.md)
273
273
  - Examples: [example/](patterns/database/mysql-application/example/)
274
274
  - Requires: `@jskit-ai/database-runtime-mysql`
@@ -279,7 +279,7 @@ Configure a JSKIT application for PostgreSQL with a fixed driver, ordinary envir
279
279
 
280
280
  - Id: `database/postgres-application`
281
281
  - Keywords: `database`, `knex`, `migrations`, `pg`, `postgres`, `postgresql`
282
- - Owner: `@jskit-ai/database-runtime-postgres@0.1.224`
282
+ - Owner: `@jskit-ai/database-runtime-postgres@0.1.225`
283
283
  - Read: [PATTERN.md](patterns/database/postgres-application/PATTERN.md)
284
284
  - Examples: [example/](patterns/database/postgres-application/example/)
285
285
  - Requires: `@jskit-ai/database-runtime-postgres`
@@ -290,7 +290,7 @@ Wrap a JSKIT web application in a Capacitor Android shell using native Capacitor
290
290
 
291
291
  - Id: `mobile/android-application`
292
292
  - Keywords: `android`, `capacitor`, `device`, `mobile`, `native`, `shell`, `webview`
293
- - Owner: `@jskit-ai/mobile-capacitor@0.1.162`
293
+ - Owner: `@jskit-ai/mobile-capacitor@0.1.163`
294
294
  - Read: [PATTERN.md](patterns/mobile/android-application/PATTERN.md)
295
295
  - Examples: [example/](patterns/mobile/android-application/example/)
296
296
  - Requires: `@capacitor/android`, `@capacitor/app`, `@capacitor/cli`, `@jskit-ai/mobile-capacitor`
@@ -301,7 +301,7 @@ Add JSKIT realtime events with an optional Redis backplane and an explicit shell
301
301
 
302
302
  - Id: `realtime/realtime-application`
303
303
  - Keywords: `realtime`, `redis`, `socket.io`, `sockets`, `status`, `websocket`
304
- - Owner: `@jskit-ai/realtime@0.1.224`
304
+ - Owner: `@jskit-ai/realtime@0.1.225`
305
305
  - Read: [PATTERN.md](patterns/realtime/realtime-application/PATTERN.md)
306
306
  - Examples: [example/](patterns/realtime/realtime-application/example/)
307
307
  - Requires: `@jskit-ai/realtime`, `@jskit-ai/shell-web`
@@ -312,7 +312,7 @@ Compose application-owned Google Publisher Tag delivery with the generic rewarde
312
312
 
313
313
  - Id: `rewards/google-rewarded`
314
314
  - Keywords: `ads`, `google`, `publisher tag`, `rewarded`, `unlock`
315
- - Owner: `@jskit-ai/rewarded-web@0.1.163`
315
+ - Owner: `@jskit-ai/rewarded-web@0.1.164`
316
316
  - Read: [PATTERN.md](patterns/rewards/google-rewarded/PATTERN.md)
317
317
  - Examples: [example/](patterns/rewards/google-rewarded/example/)
318
318
  - Requires: `@jskit-ai/rewarded-web`
@@ -323,7 +323,7 @@ Define a server feature through explicit capabilities and first-class actions, a
323
323
 
324
324
  - Id: `server/feature-package`
325
325
  - Keywords: `actions`, `feature`, `json-rest`, `knex`, `orchestration`, `package`, `provider`, `repository`, `routes`, `server`
326
- - Owner: `@jskit-ai/agent-docs@0.1.199`
326
+ - Owner: `@jskit-ai/agent-docs@0.1.200`
327
327
  - Read: [PATTERN.md](patterns/server/feature-package/PATTERN.md)
328
328
  - Examples: [example/](patterns/server/feature-package/example/)
329
329
  - Requires: `@jskit-ai/kernel`
@@ -334,7 +334,7 @@ Compose the JSKIT responsive shell, semantic placements, settings navigation, an
334
334
 
335
335
  - Id: `shell/application-shell`
336
336
  - Keywords: `adaptive`, `app`, `layout`, `navigation`, `placement`, `responsive`, `settings`, `shell`
337
- - Owner: `@jskit-ai/shell-web@0.1.231`
337
+ - Owner: `@jskit-ai/shell-web@0.1.232`
338
338
  - Read: [PATTERN.md](patterns/shell/application-shell/PATTERN.md)
339
339
  - Examples: [example/](patterns/shell/application-shell/example/)
340
340
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -345,7 +345,7 @@ Add product routes and shell extensions through file routing, semantic placement
345
345
 
346
346
  - Id: `ui/page-and-placement`
347
347
  - Keywords: `component`, `navigation`, `outlet`, `page`, `placement`, `routes`, `section`, `shell`, `subpages`, `vue`
348
- - Owner: `@jskit-ai/shell-web@0.1.231`
348
+ - Owner: `@jskit-ai/shell-web@0.1.232`
349
349
  - Read: [PATTERN.md](patterns/ui/page-and-placement/PATTERN.md)
350
350
  - Examples: [example/](patterns/ui/page-and-placement/example/)
351
351
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -356,7 +356,7 @@ Compose an account settings route and profile, preference, and notification sect
356
356
 
357
357
  - Id: `users/account-settings`
358
358
  - Keywords: `account`, `notifications`, `preferences`, `profile`, `settings`, `user`, `vue`
359
- - Owner: `@jskit-ai/users-web@0.1.245`
359
+ - Owner: `@jskit-ai/users-web@0.1.246`
360
360
  - Read: [PATTERN.md](patterns/users/account-settings/PATTERN.md)
361
361
  - Examples: [example/](patterns/users/account-settings/example/)
362
362
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/users-core`, `@jskit-ai/users-web`
@@ -367,7 +367,7 @@ Expose user administration and workspace-scoped member operations through app-ow
367
367
 
368
368
  - Id: `users/user-administration-server`
369
369
  - Keywords: `account`, `admin`, `member`, `repository`, `resource`, `routes`, `service`, `user`, `workspace`
370
- - Owner: `@jskit-ai/users-core@0.1.240`
370
+ - Owner: `@jskit-ai/users-core@0.1.241`
371
371
  - Read: [PATTERN.md](patterns/users/user-administration-server/PATTERN.md)
372
372
  - Examples: [example/](patterns/users/user-administration-server/example/)
373
373
  - Requires: `@jskit-ai/crud-core`, `@jskit-ai/users-core`
@@ -378,7 +378,7 @@ Configure roles, workspace access policy, invitations, and app-owned invitation
378
378
 
379
379
  - Id: `workspaces/workspace-server`
380
380
  - Keywords: `access`, `invite`, `membership`, `multitenancy`, `policy`, `role`, `tenancy`, `workspace`
381
- - Owner: `@jskit-ai/workspaces-core@0.1.205`
381
+ - Owner: `@jskit-ai/workspaces-core@0.1.206`
382
382
  - Read: [PATTERN.md](patterns/workspaces/workspace-server/PATTERN.md)
383
383
  - Examples: [example/](patterns/workspaces/workspace-server/example/)
384
384
  - Requires: `@jskit-ai/users-core`, `@jskit-ai/workspaces-core`
@@ -389,7 +389,7 @@ Compose workspace selection, invitation, member administration, settings, and re
389
389
 
390
390
  - Id: `workspaces/workspace-surfaces`
391
391
  - Keywords: `admin`, `invite`, `member`, `navigation`, `settings`, `surface`, `switcher`, `workspace`
392
- - Owner: `@jskit-ai/workspaces-web@0.1.206`
392
+ - Owner: `@jskit-ai/workspaces-web@0.1.207`
393
393
  - Read: [PATTERN.md](patterns/workspaces/workspace-surfaces/PATTERN.md)
394
394
  - Examples: [example/](patterns/workspaces/workspace-surfaces/example/)
395
395
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/workspaces-core`, `@jskit-ai/workspaces-web`
@@ -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.227",
37
+ "@jskit-ai/kernel": "0.1.228",
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.225",
45
+ "@jskit-ai/http-runtime": "0.1.226",
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.224",
51
- "@jskit-ai/jskit-catalog": "0.1.252",
50
+ "@jskit-ai/config-eslint": "0.1.225",
51
+ "@jskit-ai/jskit-catalog": "0.1.253",
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.227",
37
+ "@jskit-ai/kernel": "0.1.228",
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.225",
45
+ "@jskit-ai/http-runtime": "0.1.226",
46
46
  "@mdi/js": "^7.4.47",
47
- "@jskit-ai/shell-web": "0.1.231",
47
+ "@jskit-ai/shell-web": "0.1.232",
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.224",
53
- "@jskit-ai/jskit-catalog": "0.1.252",
52
+ "@jskit-ai/config-eslint": "0.1.225",
53
+ "@jskit-ai/jskit-catalog": "0.1.253",
54
54
  "@playwright/test": "1.61.1",
55
55
  "@vitejs/plugin-vue": "^6.0.7",
56
56
  "eslint": "^10.8.0",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "description": "App-local runtime composition and lightweight glue.",
11
11
  "dependencies": {
12
- "@jskit-ai/kernel": "0.1.227"
12
+ "@jskit-ai/kernel": "0.1.228"
13
13
  },
14
14
  "jskit": {
15
15
  "kind": "runtime",
@@ -2,6 +2,6 @@
2
2
  "private": true,
3
3
  "type": "module",
4
4
  "dependencies": {
5
- "@jskit-ai/auth-provider-supabase-core": "0.1.224"
5
+ "@jskit-ai/auth-provider-supabase-core": "0.1.225"
6
6
  }
7
7
  }
@@ -7,10 +7,10 @@
7
7
  "db:migrate:status": "knex --knexfile ./knexfile.js migrate:list"
8
8
  },
9
9
  "dependencies": {
10
- "@jskit-ai/connectors-core": "0.1.44",
11
- "@jskit-ai/connector-google-calendar": "0.1.44",
12
- "@jskit-ai/database-runtime": "0.1.227",
13
- "@jskit-ai/database-runtime-mysql": "0.1.225",
10
+ "@jskit-ai/connectors-core": "0.1.45",
11
+ "@jskit-ai/connector-google-calendar": "0.1.45",
12
+ "@jskit-ai/database-runtime": "0.1.228",
13
+ "@jskit-ai/database-runtime-mysql": "0.1.226",
14
14
  "knex": "^3.1.0"
15
15
  }
16
16
  }
@@ -8,8 +8,8 @@
8
8
  "./shared": "./src/shared/index.js"
9
9
  },
10
10
  "dependencies": {
11
- "@jskit-ai/crud-core": "0.1.238",
12
- "@jskit-ai/resource-crud-core": "0.1.169"
11
+ "@jskit-ai/crud-core": "0.1.239",
12
+ "@jskit-ai/resource-crud-core": "0.1.170"
13
13
  },
14
14
  "jskit": {
15
15
  "kind": "runtime",
@@ -8,6 +8,6 @@
8
8
  "db:migrate:status": "knex --knexfile ./knexfile.js migrate:list"
9
9
  },
10
10
  "dependencies": {
11
- "@jskit-ai/database-runtime-mysql": "0.1.225"
11
+ "@jskit-ai/database-runtime-mysql": "0.1.226"
12
12
  }
13
13
  }
@@ -8,6 +8,6 @@
8
8
  "db:migrate:status": "knex --knexfile ./knexfile.js migrate:list"
9
9
  },
10
10
  "dependencies": {
11
- "@jskit-ai/database-runtime-postgres": "0.1.224"
11
+ "@jskit-ai/database-runtime-postgres": "0.1.225"
12
12
  }
13
13
  }
@@ -2,7 +2,7 @@
2
2
  "private": true,
3
3
  "type": "module",
4
4
  "dependencies": {
5
- "@jskit-ai/realtime": "0.1.224",
6
- "@jskit-ai/shell-web": "0.1.231"
5
+ "@jskit-ai/realtime": "0.1.225",
6
+ "@jskit-ai/shell-web": "0.1.232"
7
7
  }
8
8
  }
@@ -5,7 +5,7 @@
5
5
  "private": true,
6
6
  "type": "module",
7
7
  "dependencies": {
8
- "@jskit-ai/kernel": "0.1.227",
8
+ "@jskit-ai/kernel": "0.1.228",
9
9
  "json-rest-schema": "^1.0.17"
10
10
  },
11
11
  "exports": {
@@ -9,8 +9,8 @@
9
9
  "./shared": "./src/shared/index.js"
10
10
  },
11
11
  "dependencies": {
12
- "@jskit-ai/crud-core": "0.1.238",
13
- "@jskit-ai/resource-crud-core": "0.1.169"
12
+ "@jskit-ai/crud-core": "0.1.239",
13
+ "@jskit-ai/resource-crud-core": "0.1.170"
14
14
  },
15
15
  "jskit": {
16
16
  "kind": "runtime",
@@ -9,9 +9,9 @@
9
9
  "./shared": "./src/shared/index.js"
10
10
  },
11
11
  "dependencies": {
12
- "@jskit-ai/crud-core": "0.1.238",
13
- "@jskit-ai/resource-crud-core": "0.1.169",
14
- "@jskit-ai/workspaces-core": "0.1.205"
12
+ "@jskit-ai/crud-core": "0.1.239",
13
+ "@jskit-ai/resource-crud-core": "0.1.170",
14
+ "@jskit-ai/workspaces-core": "0.1.206"
15
15
  },
16
16
  "jskit": {
17
17
  "kind": "runtime",