@jskit-ai/agent-docs 0.1.168 → 0.1.170

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 (24) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +69 -3
  2. package/guide/agent/app-extras/assistant.md +36 -5
  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 +21 -1
  10. package/reference/autogen/packages/assistant-runtime.md +10 -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/auth-surface/PATTERN.md +6 -0
  16. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  17. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  18. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
  19. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  20. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  21. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  22. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  23. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
  24. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
@@ -50,17 +50,17 @@ const adapter = reactive({
50
50
  Use reactive values or replace the adapter when state changes. Ordinary nested
51
51
  objects containing refs must be wrapped in `reactive()` so their fields unwrap.
52
52
  Only `conversation` is required; omit `composer` for a transcript-only view.
53
- Missing optional actions are ignored. Supply `setDraft` and `submit` when a
53
+ Missing optional actions are ignored. Supply `setDraft` and either `delivery` or a custom `submit` when a
54
54
  composer is present, and `stop` when `canStop` can become true.
55
55
 
56
56
  | Action | Arguments and responsibility |
57
57
  | --- | --- |
58
58
  | `setDraft(text)` | Update the application draft synchronously. |
59
- | `submit({ configuration, attachments })` | Send or steer through the app's normal admission, attachment and delivery path. Own pending state, accepted-draft clearing and visible failures. The element checks `canSend` before calling. |
59
+ | `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. |
60
60
  | `stop()` | Request cancellation through the backend owner. Report pending state, errors, and what actually stopped; the element checks stop availability. |
61
61
  | `loadMore({ complete })` | Prepend older turns, then call `complete({ changed })` after updating reactive state. Call it on failures too; this releases the scroll anchor. |
62
62
  | `reload()` | Refresh authoritative history. |
63
- | `resend(id)`, `cancel(id)`, `edit(id)` | Handle a failed optimistic turn using its stable `optimistic.id`. Retry according to server delivery evidence. |
63
+ | `resend(id)`, `cancel(id)`, `edit(id)` | Optional overrides of the shared delivery actions. Keep the stable message identity when retrying. |
64
64
  | `openLink({ event, href, text })` | Optionally handle app-owned links and call `event.preventDefault()`. Otherwise a validated ordinary link keeps normal browser behavior. |
65
65
  | `updateConfiguration(value)` | Accept an edited draft configuration; the server remains authoritative. |
66
66
 
@@ -76,6 +76,72 @@ available for an explicit retry. Clear the error when retrying succeeds.
76
76
  control the corresponding transcript presentation. `userMessageFormat` is
77
77
  `"formatted"` by default; `"plain"` preserves literal user-authored text.
78
78
 
79
+ ### Message delivery
80
+
81
+ Use `createAssistantMessageDelivery` from `/client/conversation` (or the
82
+ Vue-component-free `/client/conversation-delivery` entry) once per conversation.
83
+ Pass it as `adapter.delivery`. The element then handles submission, merges pending messages into the
84
+ transcript, shows sending status, reconciles saved receipts, and supplies
85
+ Resend, Cancel and Edit without application-specific delivery handlers.
86
+
87
+ ```js
88
+ const delivery = createAssistantMessageDelivery({
89
+ async deliver({ messageId, message, ...payload }) {
90
+ const result = await app.sendMessage({ messageId, message, ...payload });
91
+ turns.value = result.turns;
92
+ return result;
93
+ }
94
+ });
95
+ const adapter = reactive({
96
+ delivery,
97
+ conversation: { turns, visible: true, scrollKey: conversationId },
98
+ composer: { draft, canSend, canStop },
99
+ actions: {
100
+ setDraft: value => { draft.value = value; },
101
+ stop
102
+ }
103
+ });
104
+ ```
105
+
106
+ Without a custom `actions.submit`, the element captures the draft, configuration
107
+ and attached files, clears the submitted draft immediately, and calls
108
+ `delivery.send`. Success clears only the accepted attachment IDs. A newer draft
109
+ and newer files stay intact; a failure remains beside its message. Set
110
+ `composer.payload` to an object for additional captured request fields, such as
111
+ an integration ID. `composer.attachmentMessage` optionally replaces the default
112
+ "Please review the attached files." text for attachment-only sends. Supplying
113
+ `actions.submit` overrides this whole path for application-specific admission
114
+ or generated prompts; it still uses the same delivery controller.
115
+
116
+ `send(payload, options?)` inserts the message synchronously, before invoking
117
+ `deliver`. Payloads must be JSON-compatible and are copied at submission. They
118
+ require `message`; optional `displayMessage` and
119
+ `displayAttachments` control the visible bubble. Additional fields travel to
120
+ `deliver` unchanged. Include settings and attachment IDs in the payload so a
121
+ retry retains the original request even if the composer settings later change. Each send creates a stable `messageId`, or
122
+ the application may supply one in options. `false`, `{ ok: false, error }`, or
123
+ a thrown error retain a failed entry. Exceptions are rethrown after recording
124
+ the visible failure. Success retains the pending bubble until authoritative
125
+ history contains its `user.messageId`, so it cannot flicker away before history
126
+ arrives. Older histories without IDs can match by text and timestamp.
127
+
128
+ Resend keeps the same payload and message ID; the backend must deduplicate that
129
+ ID. Edit moves failed text into the composer while preserving a newer draft;
130
+ Cancel removes only the failed local entry. Neither action stops native work.
131
+ Resend leaves the current draft untouched. Attachment bytes and removal on
132
+ acceptance remain with the application's attachment owner.
133
+
134
+ `state.sending`, `state.messages`, `turns(savedTurns)`, `reconcile(savedTurns)`,
135
+ `find(id)`, `remove(id)`, `resend(id)`, `edit(id, draft)` and `cancel(id)` are
136
+ available for custom composers and application admission policies. `edit`
137
+ returns the merged draft or `null` when unavailable. An application may override
138
+ `adapter.actions.resend/cancel/edit`; those actions take precedence.
139
+ `send` also accepts per-call `deliver` and `isCurrent` for retained application
140
+ owners. Call `reset()` when that controller's conversation retires; late results
141
+ cannot change a replacement conversation. Rendering alone does not retire state.
142
+ Transport promises should settle on admission, not after the full AI answer;
143
+ streaming and provider execution remain separately observable application work.
144
+
79
145
  ### Turns and messages
80
146
 
81
147
  ```js
@@ -316,6 +316,30 @@ warm remount.
316
316
  Restored tool calls without matching results, and live calls still pending when
317
317
  a stream ends, are shown as interrupted rather than remaining pending forever.
318
318
 
319
+ ### Duplicate submissions and recovery
320
+
321
+ Apply the package migrations before running the updated server. The runtime owns
322
+ `assistant_turn_requests`, including its unique actor, surface/workspace and
323
+ message-ID key. The database arbitrates concurrent requests across server
324
+ processes before provider or tool execution. A reused ID with a different request
325
+ returns a conflict. An identical retry replays the recorded answer or failure
326
+ without calling the provider or tools again, including after a process restart.
327
+
328
+ The acceptance receipt is stored before execution; completion is stored before
329
+ sending the final stream event. If a request is still running, or its process
330
+ stopped without recording completion, retry returns `assistant_request_unconfirmed`
331
+ and directs the user to conversation history. The runtime never takes over such
332
+ a request automatically: a tool may already have changed application data.
333
+ This protects against duplicate execution; it cannot guarantee completion after
334
+ a process crash. The browser does not automatically resubmit ambiguous work.
335
+
336
+ Request records contain the submitted text/history and the replay response.
337
+ They survive conversation removal so an old request cannot become executable
338
+ again, and are deleted when their actor is deleted. Application retention or
339
+ privacy jobs must account for this table and must not remove active request
340
+ identities. Custom transports using only `assistant-core` still own equivalent
341
+ server-side protection; the UI controller alone cannot prevent duplicate work.
342
+
319
343
  ## Shared conversation UI
320
344
 
321
345
  `AssistantSurfaceClientElement` connects `useAssistantRuntime` to
@@ -332,11 +356,18 @@ Restored entries retain their database IDs; equal text is not a duplicate ID.
332
356
  Tool activity shows the existing tool name and status, never raw arguments or
333
357
  results. No provider reasoning is invented.
334
358
 
335
- Typing stays available during streaming and history restoration; Send waits for
336
- the active operation. The runtime clears an accepted draft synchronously, so
337
- later typing survives response completion and cancellation. A failure before an
338
- answer restores the request as a draft if the user has not already typed a new
339
- one. Enter sends, Shift/Alt+Enter inserts a newline, and Ctrl/Cmd+Enter sends.
359
+ Typing stays available during delivery, streaming and history restoration; Send
360
+ waits for the active operation. The shared delivery controller displays a submitted
361
+ message immediately and clears that draft synchronously. Before the server accepts
362
+ it, the UI shows sending status. A delivery failure offers Resend, Edit and Cancel
363
+ beside the message. Resend retains the original message ID, text, selected
364
+ integration, history and attachment IDs; newer typing and newly attached files
365
+ remain untouched. Edit moves failed text into the composer and preserves newer
366
+ text. Cancel removes only that local failed entry.
367
+
368
+ After acceptance, the runtime displays provider progress and streamed answers.
369
+ An execution failure before an answer restores the request as a draft only if the
370
+ user has not already typed a new one. Enter sends, Shift/Alt+Enter inserts a newline, and Ctrl/Cmd+Enter sends.
340
371
  IME composition never submits. Only the shared composer handles these keys.
341
372
 
342
373
  Stop aborts the browser's response request. The pending cancellation ends when
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.168",
3
+ "version": "0.1.170",
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.196",
8
+ "@jskit-ai/kernel": "0.1.198",
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.196",
37
+ "@jskit-ai/kernel": "0.1.198",
38
38
  "@tanstack/vue-query": "^5.101.0",
39
39
  "fastify": "^5.8.5",
40
40
  "json-rest-schema": "^1.0.17",
@@ -42,12 +42,12 @@
42
42
  "vue": "^3.5.38",
43
43
  "vue-router": "^5.1.0",
44
44
  "vuetify": "^4.1.2",
45
- "@jskit-ai/http-runtime": "0.1.194",
45
+ "@jskit-ai/http-runtime": "0.1.196",
46
46
  "@fastify/fast-json-stringify-compiler": "^5.1.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@jskit-ai/config-eslint": "0.1.193",
50
- "@jskit-ai/jskit-catalog": "0.1.221",
49
+ "@jskit-ai/config-eslint": "0.1.195",
50
+ "@jskit-ai/jskit-catalog": "0.1.223",
51
51
  "@playwright/test": "1.61.1",
52
52
  "@vitejs/plugin-vue": "^6.0.7",
53
53
  "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.196",
37
+ "@jskit-ai/kernel": "0.1.198",
38
38
  "@tanstack/vue-query": "^5.101.0",
39
39
  "fastify": "^5.8.5",
40
40
  "json-rest-schema": "^1.0.17",
@@ -42,14 +42,14 @@
42
42
  "vue": "^3.5.38",
43
43
  "vue-router": "^5.1.0",
44
44
  "vuetify": "^4.1.2",
45
- "@jskit-ai/http-runtime": "0.1.194",
45
+ "@jskit-ai/http-runtime": "0.1.196",
46
46
  "@mdi/js": "^7.4.47",
47
- "@jskit-ai/shell-web": "0.1.200",
47
+ "@jskit-ai/shell-web": "0.1.202",
48
48
  "@fastify/fast-json-stringify-compiler": "^5.1.0"
49
49
  },
50
50
  "devDependencies": {
51
- "@jskit-ai/config-eslint": "0.1.193",
52
- "@jskit-ai/jskit-catalog": "0.1.221",
51
+ "@jskit-ai/config-eslint": "0.1.195",
52
+ "@jskit-ai/jskit-catalog": "0.1.223",
53
53
  "@playwright/test": "1.61.1",
54
54
  "@vitejs/plugin-vue": "^6.0.7",
55
55
  "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.196"
12
+ "@jskit-ai/kernel": "0.1.198"
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.168`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.170`
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.168`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.170`
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.167`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.1.169`
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.196`
51
+ - Owner: `@jskit-ai/auth-web@0.1.198`
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.193`
62
+ - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.195`
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.13`
73
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
84
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
95
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
106
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
117
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
128
+ - Owner: `@jskit-ai/connector-google-calendar@0.1.15`
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.13`
139
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
150
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
161
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
172
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
183
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
194
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
205
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
216
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.164`
227
+ - Owner: `@jskit-ai/console-web@0.1.166`
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.41`
238
+ - Owner: `@jskit-ai/http-web@0.1.43`
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.207`
249
+ - Owner: `@jskit-ai/crud-core@0.1.209`
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.138`
260
+ - Owner: `@jskit-ai/resource-crud-core@0.1.140`
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.194`
271
+ - Owner: `@jskit-ai/database-runtime-mysql@0.1.196`
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.193`
282
+ - Owner: `@jskit-ai/database-runtime-postgres@0.1.195`
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.131`
293
+ - Owner: `@jskit-ai/mobile-capacitor@0.1.133`
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.193`
304
+ - Owner: `@jskit-ai/realtime@0.1.195`
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.132`
315
+ - Owner: `@jskit-ai/rewarded-web@0.1.134`
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.168`
326
+ - Owner: `@jskit-ai/agent-docs@0.1.170`
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.200`
337
+ - Owner: `@jskit-ai/shell-web@0.1.202`
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.200`
348
+ - Owner: `@jskit-ai/shell-web@0.1.202`
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.214`
359
+ - Owner: `@jskit-ai/users-web@0.1.216`
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.209`
370
+ - Owner: `@jskit-ai/users-core@0.1.211`
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.174`
381
+ - Owner: `@jskit-ai/workspaces-core@0.1.176`
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.175`
392
+ - Owner: `@jskit-ai/workspaces-web@0.1.177`
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`
@@ -59,11 +59,15 @@ Exports
59
59
  Exports
60
60
  - None
61
61
  Local functions
62
+ - `resend(id)`
63
+ - `cancel(id)`
64
+ - `edit(id)`
62
65
  - `attachmentEvent(method, event)`
63
66
  - `attachSelectedFiles(event)`
64
67
  - `applyModel()`
65
68
  - `selectSuggestion(value)`
66
69
  - `dismissSuggestions()`
70
+ - `clearAcceptedAttachments(response, payload, attachments)`
67
71
  - `submit()`
68
72
  - `stop()`
69
73
  - `updateConfiguration(value)`
@@ -159,6 +163,7 @@ Exports
159
163
  - `AssistantMessageAttachments`
160
164
  - `AssistantAttachmentPreview`
161
165
  - `AssistantQuestionInputs`
166
+ - `createAssistantMessageDelivery`
162
167
 
163
168
  ### `src/client/conversation/LongTextInlineParts.vue`
164
169
  Exports
@@ -176,6 +181,14 @@ Local functions
176
181
  - `headingTag(level)`
177
182
  - `tableCellClass(block = {}, columnIndex = 0)`
178
183
 
184
+ ### `src/client/conversation/messageDelivery.js`
185
+ Exports
186
+ - `createAssistantMessageDelivery({ deliver: defaultDeliver } = {})`
187
+ - `unmatchedOptimisticMessages(turns = [], optimisticMessages = [])`
188
+ Local functions
189
+ - `messageText(value)`
190
+ - `turnMatchesOptimisticMessage(turn = {}, optimistic = {})`
191
+
179
192
  ### `src/client/conversation/submitText.js`
180
193
  Exports
181
194
  - `createAssistantTextSubmission({ getState, setDraft, submit, afterDraftChange = async () => {} })`
@@ -672,7 +685,8 @@ Exports
672
685
  Local functions
673
686
  - `requestJson(url, options)`
674
687
  - `reload()`
675
- - `submit({ configuration: selectedConfiguration, attachments: selectedFiles })`
688
+ - `deliver(payload)`
689
+ - `readStream(response, controller, admission)`
676
690
  - `stop()`
677
691
 
678
692
  ### `examples/conversation/attachments.js`
@@ -717,6 +731,12 @@ Exports
717
731
  Local functions
718
732
  - `finishUploads()`
719
733
 
734
+ ### `fixtures/responsive-assistant/DeliveryFixture.vue`
735
+ Exports
736
+ - None
737
+ Local functions
738
+ - `accept()`
739
+
720
740
  ### `fixtures/responsive-assistant/main.js`
721
741
  Exports
722
742
  - None
@@ -26,6 +26,7 @@ Local functions
26
26
  Exports
27
27
  - None
28
28
  Local functions
29
+ - `submitMessage({ attachments = [], retryMessageId = "" })`
29
30
  - `conversationSubtitle(entry)`
30
31
  - `selectConversation(entry)`
31
32
  - `startNewConversation()`
@@ -159,13 +160,17 @@ Exports
159
160
  - `toIso(value)`
160
161
  - `resolveInsertedId(insertResult)`
161
162
 
163
+ ### `src/server/repositories/turnRequestsRepository.js`
164
+ Exports
165
+ - `createRepository(knex)`
166
+
162
167
  ### `src/server/services/assistantConfigService.js`
163
168
  Exports
164
169
  - `createService({ assistantConfigRepository, consoleService = null, appConfig = {}, resolveAppConfig = null, workspaceScopeSupport = null } = {})`
165
170
 
166
171
  ### `src/server/services/chatService.js`
167
172
  Exports
168
- - `createChatService({ aiClientFactory, attachments, transcriptService, serviceToolCatalog, assistantConfigService, appConfig = {}, resolveAppConfig = null, workspaceScopeSupport = null } = {})`
173
+ - `createChatService({ aiClientFactory, turnRequests, attachments, transcriptService, serviceToolCatalog, assistantConfigService, appConfig = {}, resolveAppConfig = null, workspaceScopeSupport = null } = {})`
169
174
  Local functions
170
175
  - `normalizeConversationId(value)`
171
176
  - `normalizeHistory(history = [])`
@@ -265,6 +270,10 @@ Exports
265
270
  Exports
266
271
  - None
267
272
 
273
+ ### `migrations/assistant_turn_requests.cjs`
274
+ Exports
275
+ - None
276
+
268
277
  ### patterns
269
278
 
270
279
  ### `patterns/assistant-surface/example/config/public.js`
@@ -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.168`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.170`
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.168`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.170`
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.167`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.1.169`
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.196`
51
+ - Owner: `@jskit-ai/auth-web@0.1.198`
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.193`
62
+ - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.195`
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.13`
73
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
84
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
95
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
106
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
117
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
128
+ - Owner: `@jskit-ai/connector-google-calendar@0.1.15`
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.13`
139
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
150
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
161
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
172
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
183
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
194
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
205
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.13`
216
+ - Owner: `@jskit-ai/connectors-catalog@0.1.15`
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.164`
227
+ - Owner: `@jskit-ai/console-web@0.1.166`
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.41`
238
+ - Owner: `@jskit-ai/http-web@0.1.43`
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.207`
249
+ - Owner: `@jskit-ai/crud-core@0.1.209`
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.138`
260
+ - Owner: `@jskit-ai/resource-crud-core@0.1.140`
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.194`
271
+ - Owner: `@jskit-ai/database-runtime-mysql@0.1.196`
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.193`
282
+ - Owner: `@jskit-ai/database-runtime-postgres@0.1.195`
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.131`
293
+ - Owner: `@jskit-ai/mobile-capacitor@0.1.133`
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.193`
304
+ - Owner: `@jskit-ai/realtime@0.1.195`
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.132`
315
+ - Owner: `@jskit-ai/rewarded-web@0.1.134`
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.168`
326
+ - Owner: `@jskit-ai/agent-docs@0.1.170`
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.200`
337
+ - Owner: `@jskit-ai/shell-web@0.1.202`
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.200`
348
+ - Owner: `@jskit-ai/shell-web@0.1.202`
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.214`
359
+ - Owner: `@jskit-ai/users-web@0.1.216`
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.209`
370
+ - Owner: `@jskit-ai/users-core@0.1.211`
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.174`
381
+ - Owner: `@jskit-ai/workspaces-core@0.1.176`
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.175`
392
+ - Owner: `@jskit-ai/workspaces-web@0.1.177`
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.196",
37
+ "@jskit-ai/kernel": "0.1.198",
38
38
  "@tanstack/vue-query": "^5.101.0",
39
39
  "fastify": "^5.8.5",
40
40
  "json-rest-schema": "^1.0.17",
@@ -42,12 +42,12 @@
42
42
  "vue": "^3.5.38",
43
43
  "vue-router": "^5.1.0",
44
44
  "vuetify": "^4.1.2",
45
- "@jskit-ai/http-runtime": "0.1.194",
45
+ "@jskit-ai/http-runtime": "0.1.196",
46
46
  "@fastify/fast-json-stringify-compiler": "^5.1.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@jskit-ai/config-eslint": "0.1.193",
50
- "@jskit-ai/jskit-catalog": "0.1.221",
49
+ "@jskit-ai/config-eslint": "0.1.195",
50
+ "@jskit-ai/jskit-catalog": "0.1.223",
51
51
  "@playwright/test": "1.61.1",
52
52
  "@vitejs/plugin-vue": "^6.0.7",
53
53
  "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.196",
37
+ "@jskit-ai/kernel": "0.1.198",
38
38
  "@tanstack/vue-query": "^5.101.0",
39
39
  "fastify": "^5.8.5",
40
40
  "json-rest-schema": "^1.0.17",
@@ -42,14 +42,14 @@
42
42
  "vue": "^3.5.38",
43
43
  "vue-router": "^5.1.0",
44
44
  "vuetify": "^4.1.2",
45
- "@jskit-ai/http-runtime": "0.1.194",
45
+ "@jskit-ai/http-runtime": "0.1.196",
46
46
  "@mdi/js": "^7.4.47",
47
- "@jskit-ai/shell-web": "0.1.200",
47
+ "@jskit-ai/shell-web": "0.1.202",
48
48
  "@fastify/fast-json-stringify-compiler": "^5.1.0"
49
49
  },
50
50
  "devDependencies": {
51
- "@jskit-ai/config-eslint": "0.1.193",
52
- "@jskit-ai/jskit-catalog": "0.1.221",
51
+ "@jskit-ai/config-eslint": "0.1.195",
52
+ "@jskit-ai/jskit-catalog": "0.1.223",
53
53
  "@playwright/test": "1.61.1",
54
54
  "@vitejs/plugin-vue": "^6.0.7",
55
55
  "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.196"
12
+ "@jskit-ai/kernel": "0.1.198"
13
13
  },
14
14
  "jskit": {
15
15
  "kind": "runtime",
@@ -60,6 +60,10 @@ a user as a side effect.
60
60
  - Public auth routes do not require an existing session.
61
61
  - Protected routes use the framework auth policy rather than page-local checks.
62
62
  - Login, sign-out, and reset views use the public auth components/composables.
63
+ - A custom login view must preserve the default view's initial session check:
64
+ already authenticated people return to the validated requested destination.
65
+ Process incoming login callbacks before that redirect, and keep signed-out
66
+ people on the login form. This also covers managed preview identity changes.
63
67
  - Profile placements are conditional on the current authenticated state.
64
68
  - Transient mutation failures use the application toast; initial load failures
65
69
  remain in the affected surface.
@@ -81,6 +85,8 @@ placements, and post-auth destinations while retaining the runtime contracts.
81
85
 
82
86
  Exercise failed and successful login, sign-out, reset, protected navigation,
83
87
  keyboard interaction, warm-cache return navigation, and browser refresh.
88
+ Open the login route with an existing authenticated session and confirm it
89
+ returns to the requested screen; repeat signed out and confirm the form remains.
84
90
 
85
91
  ## Avoid
86
92
 
@@ -2,6 +2,6 @@
2
2
  "private": true,
3
3
  "type": "module",
4
4
  "dependencies": {
5
- "@jskit-ai/auth-provider-supabase-core": "0.1.193"
5
+ "@jskit-ai/auth-provider-supabase-core": "0.1.195"
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.13",
11
- "@jskit-ai/connector-google-calendar": "0.1.13",
12
- "@jskit-ai/database-runtime": "0.1.196",
13
- "@jskit-ai/database-runtime-mysql": "0.1.194",
10
+ "@jskit-ai/connectors-core": "0.1.15",
11
+ "@jskit-ai/connector-google-calendar": "0.1.15",
12
+ "@jskit-ai/database-runtime": "0.1.198",
13
+ "@jskit-ai/database-runtime-mysql": "0.1.196",
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.207",
12
- "@jskit-ai/resource-crud-core": "0.1.138"
11
+ "@jskit-ai/crud-core": "0.1.209",
12
+ "@jskit-ai/resource-crud-core": "0.1.140"
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.194"
11
+ "@jskit-ai/database-runtime-mysql": "0.1.196"
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.193"
11
+ "@jskit-ai/database-runtime-postgres": "0.1.195"
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.193",
6
- "@jskit-ai/shell-web": "0.1.200"
5
+ "@jskit-ai/realtime": "0.1.195",
6
+ "@jskit-ai/shell-web": "0.1.202"
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.196",
8
+ "@jskit-ai/kernel": "0.1.198",
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.207",
13
- "@jskit-ai/resource-crud-core": "0.1.138"
12
+ "@jskit-ai/crud-core": "0.1.209",
13
+ "@jskit-ai/resource-crud-core": "0.1.140"
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.207",
13
- "@jskit-ai/resource-crud-core": "0.1.138",
14
- "@jskit-ai/workspaces-core": "0.1.174"
12
+ "@jskit-ai/crud-core": "0.1.209",
13
+ "@jskit-ai/resource-crud-core": "0.1.140",
14
+ "@jskit-ai/workspaces-core": "0.1.176"
15
15
  },
16
16
  "jskit": {
17
17
  "kind": "runtime",