@jskit-ai/agent-docs 0.1.202 → 0.1.205

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 (25) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +167 -4
  2. package/guide/agent/app-extras/assistant-voice.md +12 -6
  3. package/guide/agent/framework/application-operations.md +6 -5
  4. package/package.json +1 -1
  5. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  6. package/patterns/minimal-foundation/example/package.json +4 -4
  7. package/patterns/shell-foundation/example/package.json +5 -5
  8. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  9. package/reference/autogen/PATTERN_INDEX.md +35 -35
  10. package/reference/autogen/packages/assistant-core.md +9 -4
  11. package/reference/autogen/packages/assistant-runtime.md +3 -0
  12. package/skills/jskit/references/app-operations.md +6 -5
  13. package/skills/jskit/references/pattern-index.md +35 -35
  14. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
  15. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
  16. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  17. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  18. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  19. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
  20. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  21. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  22. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  23. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  24. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
  25. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
@@ -262,6 +262,23 @@ 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
+ The same inspection operation may return `{ status: "not-sent", messageId, error }`
266
+ when a settled native request has explicit durable no-admission proof. The client
267
+ marks only that exact uncertain message failed, preserving its payload, the draft
268
+ and other uncertain messages. Inspection never submits or accepts it. Missing
269
+ markers, attempted requests, incomplete cleanup and API-model requests remain
270
+ conservative. A retired native request cannot be retried against its successor
271
+ with the old ID; edit its words into a new authored message instead.
272
+
273
+ Incoming saved-state updates refresh the history already loaded with **Load older
274
+ messages**, using the same authorized page reader. The loaded messages remain
275
+ visible until that refresh succeeds; fresh history reflects removed or rewound
276
+ saved turns instead of reviving cached rows. Delivered updates received during
277
+ that read also update their matching loaded saved row. Live speech/message
278
+ overlays use the loaded saved row as their base, retaining its authored question
279
+ and progress without becoming saved history. Reconnection starts again with the
280
+ latest bounded page; **Load older messages** is available again where older history exists.
281
+
265
282
  Reconnection reads state and does not resend the request. After an initial
266
283
  subscription failure or timeout, **Reload** retries that exact subscription on
267
284
  the connected socket with fresh authorization; it does not resend a message.
@@ -1382,6 +1399,95 @@ existing records; it does not create a second runtime record or backfill history
1382
1399
  This is an advanced host integration, not required for ordinary file/custom
1383
1400
  transaction storage.
1384
1401
 
1402
+ The original canonical transcript also retains optional user-message `data`
1403
+ when the admitting application supplies it. Codex keeps that same data with the
1404
+ authored pending request and publishes it with its actual native receipt,
1405
+ including receipt recovery after restart. Recovery never obtains data from a
1406
+ newer request or recreates absent historical associations. The application owns
1407
+ validation and authorization of these facts; data does not supply tool authority,
1408
+ actor identity or a delivery receipt. Unconfigured messages retain their existing
1409
+ record shape.
1410
+
1411
+ A server-owned bound conversation can opt into common application-tool setup
1412
+ with `applicationTools: { storage, prepareContext }`, alongside the runtime's
1413
+ existing `actions`/`toolPolicy` or `toolCatalog`. `storage` must be the original
1414
+ native owner's transcript adapter, implementing `read(scope, callback)` and
1415
+ `write(scope, callback)` with its original transaction and lock. The runtime
1416
+ uses the bound conversation ID as scope. Every receipt write reads the accepted
1417
+ turn and verifies its authored message ID before updating only
1418
+ `metadata.applicationTools`; native output, status, identity and checkpoints
1419
+ remain with the original owner. Failed result writes use the existing
1420
+ `retrySave()` facility without repeating inference or the application effect.
1421
+
1422
+ `prepareContext(context, admission)` is an asynchronous or synchronous
1423
+ server-owned mapper that must freshly check the exact bound write authority and
1424
+ return the action execution context. The frozen `admission` contains
1425
+ `conversationId`, canonical `turnId`, authored `messageId`, `nativeTurnId` when
1426
+ reported by the native owner, and `origin`. These facts come from accepted
1427
+ admission, never tool arguments or message `data`. The mapper runs before a
1428
+ receipt replay or reservation and again after reservation before executing the
1429
+ effect. A call keeps its originating context and admission across steering;
1430
+ saved-result retry verifies that same original turn/message. Hosts retain their
1431
+ own exact resource/version fences and action policy. Bound conversations without
1432
+ this explicit facility keep their existing common-runtime behavior.
1433
+ The frozen admission also exposes `nativeThreadId`, captured from the native
1434
+ owner's pre-dispatch identity when that request is accepted. It is not taken
1435
+ from authored input or application data. Check both `nativeThreadId` and
1436
+ `nativeTurnId` against the current native owner when an application effect
1437
+ requires that exact native conversation. Earlier admitted tool calls keep their
1438
+ original identities when later messages steer the conversation.
1439
+ The same server-only admission exposes `assertCurrent()`. A host that requires
1440
+ the latest admitted message calls it after its final awaited authority or native
1441
+ read and immediately before its effect. It throws after steering retires that
1442
+ request, after completion, or on cancellation. It does not replace the host's
1443
+ actor/resource checks or native thread check, and it is not serialized. Hosts
1444
+ choose this check explicitly; the generic runtime still preserves originating
1445
+ contexts for already invoked actions and saved-result recovery.
1446
+
1447
+ For an opted-in bound Codex conversation, the common driver installs the same
1448
+ application-tool schemas and executor used by its standalone path. The original
1449
+ message preparation passes them to `ensureCodexAppServerThread()` before native
1450
+ start or resume. Its existing `identity` must supply
1451
+ `readToolSchemaIdentity(workdir)` and persist the supplied `toolSchemaIdentity`
1452
+ in `identity.write()` with the original native thread identity. The bound
1453
+ conversation's `identity.readToolSchemaIdentity()` must read that same saved
1454
+ value. A retained schema mismatch fails explicitly; it does not replace the
1455
+ thread or replay its history. A host that prepares the native thread before Send
1456
+ must supply the same `applicationTools.schemas` at that original readiness step.
1457
+
1458
+ The account-shared provider registers each exact thread with
1459
+ `registerThreadRequestHandler(threadId, handler)`. Its returned `isCurrent()` and
1460
+ `release()` are scoped to that registration; a retired release cannot remove a
1461
+ replacement. The common driver retains the original admitted-turn notification
1462
+ gate and originating message's executor across steering. Foreign, stale and
1463
+ retired calls are refused without interrupting a current turn or peer. An owned
1464
+ executor or observation failure uses the original thread's interrupt and drain.
1465
+ Helper authentication refresh and isolated Helper request refusal retain their
1466
+ original precedence.
1467
+
1468
+ The host still owns exact write authorization, readiness composition and native
1469
+ identity persistence. This shared prerequisite does not establish a particular
1470
+ application's integration, installed acceptance or real native acceptance.
1471
+ An opted-in bound OpenCode conversation uses the same original private tool
1472
+ bridge and native-use validator as standalone OpenCode. The supplied preparation
1473
+ receives `applicationTools` containing that bridge's configuration and exact
1474
+ schemas before native dispatch. Publish it through the existing private native
1475
+ session binding, and supply the same schemas at early host readiness. The native
1476
+ plugin definitions alone do not authorize a call. Each call must match the
1477
+ actual native session, assistant message, call ID, name and arguments, and the
1478
+ originating authored message's durable admission before the common executor.
1479
+ Reasoning-only recovery retains that originating message association. The bound
1480
+ branch preserves the host's original Send/steering, shared server and native
1481
+ monitor; it neither selects standalone lifecycle nor releases a peer's target.
1482
+ Foreign, retired or superseded-input native calls refuse without interrupting
1483
+ healthy work. An already invoked old effect failing after newer input admission
1484
+ does not abort that newer input. Owned executor failure stops its still-current
1485
+ native turn; Stop and disposal drain and close
1486
+ only its private bridge under the original owner. Unconfigured bound and scoped
1487
+ conversations retain their original behavior. These source tests do not establish
1488
+ an application's composition or installed/native acceptance. Bound Claude
1489
+ application-tool dispatch remains unavailable.
1490
+
1385
1491
  Such a server integration may open a handle with `representation: "native"` when
1386
1492
  its existing command contract requires the original result. The option belongs
1387
1493
  to that handle and each invocation, not the cached conversation or saved state.
@@ -1421,6 +1527,37 @@ eight nesting levels, and 64 properties or enum values.
1421
1527
  The worst-case JSON response, including escaped string characters, must fit the
1422
1528
  driver's `limits.maxOutputCharacters` (64,000 by default).
1423
1529
 
1530
+ For a generic Codex conversation, server-owned `limits.codexFinalizingGraceMs`
1531
+ sets the existing owner's grace for missing final text after native completion.
1532
+ It must be a positive safe integer in milliseconds; the default is 10,000.
1533
+ The owner rereads the exact native turn during this interval and reports missing
1534
+ output at expiry without resending the request. A host-supplied `runOwner`
1535
+ retains its own policy. Advanced native owners can set the same duration through
1536
+ `createCodexAppServerRunOwner({ finalizingGraceMs })`; this is not a client field
1537
+ or a whole-request timeout.
1538
+ Server-owned `limits.codexFinalizingGraceAfterHistoryRead: true` starts that
1539
+ interval after the first exact native history read returns without a final.
1540
+ The default is false, preserving the completion-based clock. Advanced native
1541
+ owners use `finalizingGraceAfterHistoryRead` with `finalizingGraceMs` on the
1542
+ same run owner. Repeated reads keep the first deadline; a held expiry recovery
1543
+ is joined rather than starting another interval. The existing timer is cleared
1544
+ when the exact turn settles, stops or is superseded. Native completion timestamps
1545
+ and persisted metadata are unchanged. A supplied owner keeps its own policy.
1546
+
1547
+ Server-owned `limits.codexFailureDetailGraceMs` optionally retains failed or
1548
+ interrupted status notifications for a later exact provider error. It is a
1549
+ nonnegative safe integer in milliseconds; the default is 0 (immediate failure).
1550
+ Advanced owners use `failureDetailGraceMs` on the same run owner. The status task
1551
+ returns immediately so the existing notification queue can process a following
1552
+ nonretrying error; that error supplies its detail and settles without waiting.
1553
+ Repeated status preserves the first deadline. When a successful-final wait is
1554
+ already pending, failure detail uses that first deadline, including after a held
1555
+ history read. Already-failed initial history, user cancellation and control
1556
+ reconfiguration remain immediate. Exact turn, successor, Stop and cleanup fences
1557
+ remain in force; no message is resent. A host-supplied owner retains its own
1558
+ policy. This is a server coordination option, not a client field or recording
1559
+ limit.
1560
+
1424
1561
  Claude uses its native schema flag and restarts the owned process when the schema
1425
1562
  changes, retaining the conversation. Codex uses its native turn schema setting.
1426
1563
  OpenCode uses the existing schema instruction and removes a single JSON fence
@@ -1674,6 +1811,18 @@ a call; interrupted streams do not imply permission to execute or retry it.
1674
1811
  Output limits count raw provider text, including hidden blocks. Code indentation
1675
1812
  and blank lines remain intact in ordinary API answers.
1676
1813
 
1814
+ An application can additionally set server-owned `limits.maxFinalReplyCharacters`
1815
+ to a positive safe integer. This bounds completed, decoded assistant replies in
1816
+ JavaScript string characters, independently of raw transport and application-tool
1817
+ argument limits. An oversized reply fails the turn rather than truncating or
1818
+ saving it as an accepted answer; the accepted user request remains. Omit the
1819
+ option to retain the driver's existing output policy. The common runtime checks
1820
+ normalized completed messages; its generic Codex adapter also guards canonical
1821
+ assistant writes before native output enters application storage. Claude and
1822
+ OpenCode delivery recovery applies the bound to the joined decoded native reply
1823
+ while retaining the proven user admission and avoiding another inference. An advanced
1824
+ host supplying its own native runtime retains that runtime's writer policy.
1825
+
1677
1826
  The API driver uses the existing assistant tool-loop policy: up to sixteen tool
1678
1827
  rounds, then three recovery passes with tools disabled. Progress-only narration
1679
1828
  is retained as commentary rather than accepted as the final answer. An available
@@ -2088,7 +2237,15 @@ JSKIT owns the local history adapter used for model-provider changes. It keeps
2088
2237
  native history intact and translates only outgoing requests. For qualified
2089
2238
  DeepSeek and GLM models, an OpenAI encrypted compaction is supplemented with the
2090
2239
  exact readable records from its saved native boundary. Recovery is bounded and
2091
- fails explicitly for unsupported or ambiguous history, including native Undo or
2240
+ excludes only exact user-message copies retained by that same native boundary
2241
+ and still present before it in the outgoing request, counting each occurrence.
2242
+ Unmatched messages, tool results and images retain their original archive order.
2243
+ The byte bound is not a destination-model token estimate. An explicit DeepSeek
2244
+ HTTP 400 context-limit rejection with its established numeric error format is
2245
+ forwarded as `context_length_exceeded` for native recovery; other errors retain
2246
+ their original body and status. This classification does not retry inference or
2247
+ guarantee that restored foreign history fits the model's token budget.
2248
+ Recovery fails explicitly for unsupported or ambiguous history, including native Undo or
2092
2249
  fork records. It never silently truncates, retries inference or rewrites a rollout.
2093
2250
  For outgoing OpenAI history, a nonempty historical function-call name outside
2094
2251
  `^[a-zA-Z0-9_-]+$` is quoted as assistant context with its exact call identity,
@@ -3009,7 +3166,7 @@ retains its original collections; dependent operations receive those same owner
3009
3166
  instances. The shared prompt-delivery marker remains in the coordinator because
3010
3167
  both recovery and message admission use it. No second observer, provider,
3011
3168
  transcript or dispatch implementation is introduced. Existing host imports remain
3012
- unchanged. Progress length, finalization grace, snapshot-recovery bounds and
3169
+ unchanged. Progress length, snapshot-recovery bounds and
3013
3170
  native outcome names remain private native defaults, rather than host tuning
3014
3171
  options.
3015
3172
  `codexContextUsageFromNotification` from the existing `/server/codex-events`
@@ -3188,8 +3345,10 @@ driver uses that same sender, native admission gate, monitor and Stop owner. Its
3188
3345
  connection, local execution, tool, attachment and structured-output facilities
3189
3346
  adapt to that owner. Tool effects await the exact authored delivery receipt;
3190
3347
  rejected steering preserves the previous active request. `/server/opencode-process` exports
3191
- `createOpenCodeServerProcess`
3192
- for advanced managed integration. The common driver's internal configuration
3348
+ `createOpenCodeServerProcess` and the existing `openCodeConversationAgent`
3349
+ selector for advanced managed integration. The selector returns the matching
3350
+ original native agent identity for explicit native-tool and application-tool
3351
+ capabilities; it does not change a saved model or launch inference. The common driver's internal configuration
3193
3352
  uses that same server startup, authentication, version, observation and cleanup
3194
3353
  implementation. `openCodeProcessEnvironment(baseEnv, { cacheRoot, dbPath,
3195
3354
  inlineConfig, outputTokenMax, password })` assembles native flags, cache,
@@ -3310,6 +3469,10 @@ The owner's history projection supplies ordered reasoning facts (`messageId`,
3310
3469
  with separate message-level `complete` and `flush` options. Native part selection
3311
3470
  and end-marker decoding stay inside JSKIT. The host keeps saved-message identity,
3312
3471
  headline policy, first-write timestamp formatting and publication.
3472
+ An explicitly supplied `outputId(nativeId, role)` projection forwards that actual
3473
+ native identity mapping to the same stream and persisted-message writers.
3474
+ Omitting it preserves their original payloads; this carries no completion or
3475
+ application policy and rewrites no retained history.
3313
3476
  Final-response inputs are read after admission and the Active write. Observer
3314
3477
  closure precedes notices and the final write. The existing `onRetired` resource
3315
3478
  continuation starts only after identity-safe monitor removal; its original
@@ -252,12 +252,17 @@ Bindings may supply `defaults.mode` (`push-to-talk` or `hands-free`),
252
252
  `startHeldRecording()` require review; the modal's push-to-talk gesture uses
253
253
  `reviewBeforeSend`. The Talk/Pause microphone icon and speaker toggle show their states. The
254
254
  Voice settings cog loads the service's installed voices without recording.
255
- Pause finalizes the current utterance before muting, including buffered audio,
256
- and applies the recording's review preference. If an earlier request is pending,
257
- Pause finishes the newer recording after that request settles. Resume keeps an
258
- unfinished recording open or starts a fresh recording after it ends. Talk and
255
+ Pause stops new microphone input immediately, preserves buffered audio for the
256
+ original final flush, and applies the recording's review preference. If an earlier
257
+ request is pending, Pause finishes the newer recording after that request settles.
258
+ Resume retains the unfinished recording and its audio tail, or starts a fresh
259
+ recording after it ends. Talk and
259
260
  hold remain available during pending delivery, while transcribing and committing
260
261
  retain their original guards.
262
+ The transport exposes genuine `transcript.stale` acknowledgements through
263
+ `utteranceStale`, retaining the rejected turn ID and revision. The controller
264
+ clears only the matching commit so a waiting Pause can finish the same recording.
265
+ An obsolete acknowledgement neither releases a newer commit nor supplies final words.
261
266
  The review panel stays hidden during automatic admission; failed admission keeps
262
267
  the words and message identity available for review and retry.
263
268
  The retained-adapter view scrolls the shared full history while its composer and
@@ -452,8 +457,9 @@ its extracted settings menu.
452
457
 
453
458
  When Pause occurs while an earlier message is awaiting admission, the original
454
459
  recording retains its words, ID and captured destination. Pause immediately mutes
455
- input; once that earlier admission settles, the existing capture owner finalizes
456
- and sends the retained utterance exactly once. Resuming before admission settles
460
+ input without discarding the already captured tail; once that earlier admission
461
+ settles, the existing capture owner finalizes and sends the retained utterance
462
+ exactly once. Resuming before admission settles
457
463
  keeps that recording open. Cancellation retires the requested finish; genuinely
458
464
  unknown delivery remains unresolved until the person uses existing recovery.
459
465
 
@@ -45,15 +45,16 @@ receipts, generator provenance, completion ledgers, or hidden operation state.
45
45
 
46
46
  ## Install and compose capabilities
47
47
 
48
- Plan capabilities using the catalogue and package-owned patterns: required
49
- packages, configuration, resources and APIs. Install one planned dependency
50
- closure of explicitly selected top-level packages in a single npm invocation:
48
+ Install selected capabilities together at the exact versions in the matching
49
+ pattern example manifests:
51
50
 
52
51
  ```bash
53
- npm install --save-exact @jskit-ai/<selected-package>@latest [...]
52
+ npm install --save-exact @jskit-ai/<selected-package>@<pattern-version> [...]
54
53
  ```
55
54
 
56
- Review the resulting `package.json` and lockfile as ordinary source changes.
55
+ Use installed patterns for existing apps; [upgrade the graph](/guide/app-setup/upgrading-jskit)
56
+ before using newer patterns. Never mix individual `@latest` packages with older
57
+ runtime pins. Review manifest and lockfile changes.
57
58
  The installed package graph supplies runtime providers, migrations, patterns,
58
59
  and public APIs directly; no JSKIT synchronization or mutation command follows
59
60
  the npm installation.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.202",
3
+ "version": "0.1.205",
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.230",
8
+ "@jskit-ai/kernel": "0.1.233",
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.230",
37
+ "@jskit-ai/kernel": "0.1.233",
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.228",
45
+ "@jskit-ai/http-runtime": "0.1.231",
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.227",
51
- "@jskit-ai/jskit-catalog": "0.1.255",
50
+ "@jskit-ai/config-eslint": "0.1.230",
51
+ "@jskit-ai/jskit-catalog": "0.1.258",
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.230",
37
+ "@jskit-ai/kernel": "0.1.233",
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.228",
45
+ "@jskit-ai/http-runtime": "0.1.231",
46
46
  "@mdi/js": "^7.4.47",
47
- "@jskit-ai/shell-web": "0.1.234",
47
+ "@jskit-ai/shell-web": "0.1.237",
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.227",
53
- "@jskit-ai/jskit-catalog": "0.1.255",
52
+ "@jskit-ai/config-eslint": "0.1.230",
53
+ "@jskit-ai/jskit-catalog": "0.1.258",
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.230"
12
+ "@jskit-ai/kernel": "0.1.233"
13
13
  },
14
14
  "jskit": {
15
15
  "kind": "runtime",