@jskit-ai/agent-docs 0.1.242 → 0.1.244

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 (128) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +4 -2
  2. package/guide/agent/app-extras/assistant.md +3 -1
  3. package/guide/agent/app-extras/realtime.md +12 -3
  4. package/guide/agent/app-setup/database-layer.md +1 -1
  5. package/guide/agent/app-setup/existing-application-migration.md +0 -7
  6. package/guide/agent/framework/application-operations.md +1 -1
  7. package/guide/agent/framework/crud-operations.md +9 -9
  8. package/guide/agent/index.md +2 -0
  9. package/package.json +2 -3
  10. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  11. package/patterns/feature-package/example/booking-engine/src/server/actions.js +0 -2
  12. package/patterns/feature-package/example/variations/AvailabilityEngineProvider.js +1 -1
  13. package/patterns/feature-package/example/variations/InvoiceRollupProvider.js +1 -1
  14. package/patterns/minimal-foundation/example/AGENTS.md +19 -0
  15. package/patterns/minimal-foundation/example/package.json +3 -3
  16. package/patterns/minimal-foundation/example/server/lib/runtimeEnv.js +3 -11
  17. package/patterns/minimal-foundation/example/src/main.js +0 -2
  18. package/patterns/shell-foundation/PATTERN.md +11 -20
  19. package/patterns/shell-foundation/example/AGENTS.md +19 -0
  20. package/patterns/shell-foundation/example/package.json +4 -4
  21. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  22. package/patterns/shell-foundation/example/server/lib/runtimeEnv.js +3 -11
  23. package/patterns/shell-foundation/example/src/components/ShellLayout.vue +1 -0
  24. package/patterns/shell-foundation/example/src/main.js +0 -2
  25. package/patterns/shell-foundation/example/src/pages/home/settings.vue +2 -2
  26. package/reference/autogen/KERNEL_MAP.md +16 -147
  27. package/reference/autogen/PATTERN_INDEX.md +37 -37
  28. package/reference/autogen/packages/agent-docs.md +1 -9
  29. package/reference/autogen/packages/assistant-core.md +102 -68
  30. package/reference/autogen/packages/assistant-runtime.md +29 -15
  31. package/reference/autogen/packages/assistant-voice-sherpa.md +2 -1
  32. package/reference/autogen/packages/assistant-voice.md +8 -11
  33. package/reference/autogen/packages/auth-core.md +1 -1
  34. package/reference/autogen/packages/auth-provider-local-core.md +1 -1
  35. package/reference/autogen/packages/auth-provider-local-db-core.md +1 -1
  36. package/reference/autogen/packages/auth-provider-oidc-core.md +1 -1
  37. package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
  38. package/reference/autogen/packages/auth-web.md +1 -2
  39. package/reference/autogen/packages/connector-google-calendar.md +6 -2
  40. package/reference/autogen/packages/connectors-catalog.md +26 -7
  41. package/reference/autogen/packages/connectors-core.md +14 -3
  42. package/reference/autogen/packages/connectors-web.md +6 -1
  43. package/reference/autogen/packages/console-core.md +1 -1
  44. package/reference/autogen/packages/console-web.md +1 -1
  45. package/reference/autogen/packages/crud-core.md +1 -1
  46. package/reference/autogen/packages/database-runtime-mysql.md +1 -1
  47. package/reference/autogen/packages/database-runtime-postgres.md +1 -1
  48. package/reference/autogen/packages/database-runtime.md +2 -86
  49. package/reference/autogen/packages/http-runtime.md +6 -92
  50. package/reference/autogen/packages/http-web.md +29 -49
  51. package/reference/autogen/packages/json-rest-api-core.md +1 -1
  52. package/reference/autogen/packages/kernel.md +108 -405
  53. package/reference/autogen/packages/mobile-capacitor.md +11 -1
  54. package/reference/autogen/packages/oidc-issuer-core.md +1 -1
  55. package/reference/autogen/packages/payments-core.md +12 -4
  56. package/reference/autogen/packages/payments-web.md +1 -1
  57. package/reference/autogen/packages/realtime.md +7 -5
  58. package/reference/autogen/packages/resource-core.md +1 -4
  59. package/reference/autogen/packages/resource-crud-core.md +4 -3
  60. package/reference/autogen/packages/rewarded-core.md +1 -1
  61. package/reference/autogen/packages/rewarded-web.md +1 -1
  62. package/reference/autogen/packages/shell-web.md +114 -49
  63. package/reference/autogen/packages/storage-runtime.md +1 -1
  64. package/reference/autogen/packages/uploads-image-web.md +1 -1
  65. package/reference/autogen/packages/uploads-runtime.md +1 -1
  66. package/reference/autogen/packages/users-core.md +1 -1
  67. package/reference/autogen/packages/users-web.md +1 -2
  68. package/reference/autogen/packages/workspaces-core.md +3 -1
  69. package/reference/autogen/packages/workspaces-web.md +1 -1
  70. package/reference/autogen/tooling/config-eslint.md +1 -1
  71. package/reference/autogen/tooling/jskit-catalog.md +8 -9
  72. package/reference/autogen/tooling/jskit-release.md +3 -4
  73. package/reference/autogen/tooling/testUtils.md +1 -28
  74. package/skills/jskit/SKILL.md +8 -6
  75. package/skills/jskit/references/app-operations.md +1 -1
  76. package/skills/jskit/references/crud-form-actions.md +62 -0
  77. package/skills/jskit/references/crud-operations.md +9 -9
  78. package/skills/jskit/references/existing-application-migration.md +0 -7
  79. package/{patterns → skills/jskit/references/heuristics}/INDEX.md +24 -38
  80. package/{patterns → skills/jskit/references/heuristics}/child-cruds.md +2 -0
  81. package/{patterns → skills/jskit/references/heuristics}/client-requests.md +2 -0
  82. package/{patterns → skills/jskit/references/heuristics}/crud-authoring.md +2 -0
  83. package/{patterns → skills/jskit/references/heuristics}/crud-links.md +2 -0
  84. package/{patterns → skills/jskit/references/heuristics}/crud-repository-mapping.md +3 -1
  85. package/{patterns → skills/jskit/references/heuristics}/filters.md +3 -1
  86. package/{patterns → skills/jskit/references/heuristics}/live-actions.md +2 -0
  87. package/{patterns → skills/jskit/references/heuristics}/page-redirects.md +2 -0
  88. package/{patterns → skills/jskit/references/heuristics}/page-scaffolding.md +5 -3
  89. package/{patterns → skills/jskit/references/heuristics}/placements.md +2 -0
  90. package/{patterns → skills/jskit/references/heuristics}/row-policies.md +2 -0
  91. package/{patterns → skills/jskit/references/heuristics}/server-search.md +2 -0
  92. package/{patterns → skills/jskit/references/heuristics}/surfaces.md +5 -3
  93. package/{patterns → skills/jskit/references/heuristics}/ui-contract.md +3 -1
  94. package/{patterns → skills/jskit/references/heuristics}/ui-testing.md +2 -0
  95. package/skills/jskit/references/pattern-index.md +37 -37
  96. package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +19 -0
  97. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +3 -3
  98. package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/runtimeEnv.js +3 -11
  99. package/skills/jskit/references/patterns/app/minimal-foundation/example/src/main.js +0 -2
  100. package/skills/jskit/references/patterns/app/shell-foundation/PATTERN.md +11 -20
  101. package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +19 -0
  102. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +4 -4
  103. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  104. package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/runtimeEnv.js +3 -11
  105. package/skills/jskit/references/patterns/app/shell-foundation/example/src/components/ShellLayout.vue +1 -0
  106. package/skills/jskit/references/patterns/app/shell-foundation/example/src/main.js +0 -2
  107. package/skills/jskit/references/patterns/app/shell-foundation/example/src/pages/home/settings.vue +2 -2
  108. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
  109. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  110. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  111. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  112. package/skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md +27 -610
  113. package/skills/jskit/references/patterns/connectors/paddle-catalogue/example/create-products.js +2 -1
  114. package/skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md +1 -1
  115. package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +11 -1
  116. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
  117. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  118. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  119. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  120. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  121. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/actions.js +0 -2
  122. package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineProvider.js +1 -1
  123. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupProvider.js +1 -1
  124. package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/index.vue +15 -5
  125. package/skills/jskit/references/patterns/shell/application-shell/example/tests/e2e/adaptive-shell.spec.ts +1 -1
  126. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
  127. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
  128. package/templates/app/AGENTS.md +0 -38
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/assistant-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `.vitepress/cache/`, `.vitepress/dist/`
11
+ - Excludes: `.build/`, `.git/`, `.jscpd/`, `.jskit/`, `coverage/`, `dist/`, `docs/`, `node_modules/`, `test/`, `tests/`, `__tests__/`, `.vitepress/cache/`, `.vitepress/dist/`, `skills/jskit/references/patterns/`, `*.test.*`, `*.spec.*`, `*.vitest.*`
12
12
 
13
13
  ## Sections
14
14
 
@@ -148,6 +148,8 @@ Local functions
148
148
  - `clearLiveBottomScroll()`
149
149
  - `updateLatestFollowFromScroll(event = {})`
150
150
  - `visibleHistoryAnchor(element)`
151
+ - `restoreAnchoredScroll(element, snapshot)`
152
+ - `waitForTwoFrames()`
151
153
  - `restoreRetainedReaderScroll()`
152
154
  - `requestLoadMore()`
153
155
  - `clearLoadMoreScrollSnapshot()`
@@ -196,6 +198,7 @@ Local functions
196
198
  ### `src/client/conversation/messageDelivery.js`
197
199
  Exports
198
200
  - `createAssistantMessageDelivery({ deliver: defaultDeliver } = {})`
201
+ - `draftWithRestoredMessage(text = "", draft = "")`
199
202
  - `unmatchedOptimisticMessages(turns = [], optimisticMessages = [], { receiptsOnly = false } = {})`
200
203
  - `retainAssistantConversation`
201
204
  Local functions
@@ -279,8 +282,6 @@ Exports
279
282
  - `conversationAgentRunRecord(record, normalizedRunId, { normalizeState = normalizeRunState, isActive = runStateIsActive } = {})`
280
283
  - `conversationAgentRunEvent(previous, normalizedRunId, { event = {}, patch = {} } = {}, { now = () => new Date(), normalizeState = normalizeRunState, isTerminal = runStateIsTerminal } = {})`
281
284
  - `prepareCopiedConversationAgentRun(run, { at })`
282
- - `createCodexConversationRunStore({ storage, scope, segmentId, isCurrent, clock = () => new Date() } = {})`
283
- - `createCodexConversationStore({ storage, scope, segmentId, isCurrent, transcript, streams } = {})`
284
285
  Local functions
285
286
  - `normalizeRunState(state)`
286
287
  - `runStateIsActive(state)`
@@ -293,6 +294,14 @@ Exports
293
294
  Local functions
294
295
  - `invalid(message)`
295
296
 
297
+ ### `src/server/conversation/boundedToolLoop.js`
298
+ Exports
299
+ - `runBoundedAssistantToolLoop({ prompt, signal, policy, complete, outputSchema, limitError, invalidResponseError = new Error("The assistant returned an invalid response."), failureError = new Error("The assistant could not complete this request."), toolCatalog, toolContext, completedEnvelope = false, settle })`
300
+ - `readAssistantResponseEnvelope(text)`
301
+ - `readPartialAssistantReply(text)`
302
+ Local functions
303
+ - `boundedResponseSchema(outputSchema, descriptors)`
304
+
296
305
  ### `src/server/conversation/claudeClient.js`
297
306
  Exports
298
307
  - `CLAUDE_JSON_MAX_FRAME_BYTES`
@@ -313,6 +322,8 @@ Exports
313
322
  - `archivedClaudeProjectDirectory(workdir)`
314
323
  - `matchingClaudeProjectDirectories(names, directory)`
315
324
  Local functions
325
+ - `claudeProjectDirectoryName(canonical)`
326
+ - `claudeUserText(content)`
316
327
  - `retainedClaudeFrame(frame)`
317
328
  - `claudeHistoryFrames(file)`
318
329
  - `readClaudeHistoryFrames(file)`
@@ -347,19 +358,26 @@ Exports
347
358
  - `runClaudeRenewalTurn(conversation, { clientMessageId, prompt, outputSchema, expectedThreadId, forbiddenThreadId, requireFreshHistory = false, timeoutMs = 180_000 }, { createError = failure, unreadableCode = "assistant_claude_turn_unreadable", failedCode = "assistant_claude_turn_failed", acceptedField = "inputAccepted" } = {})`
348
359
  - `createClaudeConversationGoals({ conversationId, readHistory, readState, interrupt, send, readRetainedGoal, saveRetainedGoal })`
349
360
  - `createClaudeConversationOwner({ configRoot, store, preparation, process, onEvent, createError = failure, disconnectedMessage = "Claude was interrupted when the application disconnected." })`
350
- - `createClaudeConversationTurn({ conversationId, onEvent = async () => {}, process, entry } = {})`
361
+ - `createClaudeConversationTurn({ conversationId, onEvent = async () => {}, process, entry, bound = false } = {})`
351
362
  Local functions
352
363
  - `failure(message, code = "assistant_claude_turn_failed")`
353
- - `text(value)`
354
364
  - `now()`
355
365
  - `hasPendingClaudeStartup(entry)`
356
366
 
367
+ ### `src/server/conversation/codexAuthPreflight.js`
368
+ Exports
369
+ - `assertCodexAuthPreflightReady(options = {}, { reason = "codex-auth-preflight", execution, credentials } = {})`
370
+ Local functions
371
+ - `tailAppend(text = "", chunk = "", maxBytes = CODEX_AUTH_PREFLIGHT_OUTPUT_TAIL_BYTES)`
372
+ - `codexAuthPreflightArgs()`
373
+ - `runCodexAuthPreflight({ codexCommand = "codex", env = process.env, executionRoot = "", runtimeDir = "", terminalEnv = {}, timeoutMs = CODEX_AUTH_PREFLIGHT_TIMEOUT_MS, toolHomeSource = "", workdir = "" } = {}, execution)`
374
+
357
375
  ### `src/server/conversation/codexClient.js`
358
376
  Exports
359
377
  - `CodexAppServerJsonRpcClient`
360
378
  - `socketPathFromCodexAppServerEndpoint(endpoint = "")`
361
379
  Local functions
362
- - `normalizePositiveInteger(value, fallback)`
380
+ - `messageTooLargeError()`
363
381
  - `codexAppServerRequestAbortedError(method = "")`
364
382
  - `addSocketListener(socket, eventName, handler)`
365
383
  - `socketMessageText(event, maxBytes = Number.POSITIVE_INFINITY)`
@@ -384,7 +402,9 @@ Exports
384
402
  - `codexConfiguredModelCatalog(includeModel, model, reasoningEffort)`
385
403
  - `codexProviderModelCatalog({ models })`
386
404
  - `codexProviderConfiguration(provider, apiKey)`
405
+ - `codexProviderCatalogPath(codexHome)`
387
406
  - `codexProviderFileConfiguration(provider, key, codexHome)`
407
+ - `copyCodexProviderHome(sourceHome, targetHome)`
388
408
  - `verifyCodexProviderKey(provider, apiKey, fetchImpl = fetch)`
389
409
  - `createCodexAccountReader({ errorPrefix = "", identityNamespace = "codex-account-v1", secretNamespace = "codex-auth-secret-v1" } = {})`
390
410
  - `codexAuthOutputRequiresReconnect(output = "")`
@@ -393,10 +413,16 @@ Local functions
393
413
  - `isPlainRecord(value)`
394
414
  - `deepFreezeCodexAppServerHelperConfig(value)`
395
415
  - `codexAppServerIsolationPolicyError(message = "", details = {})`
416
+ - `codexProviderCatalogSetting(codexHome)`
396
417
 
397
418
  ### `src/server/conversation/codexConversations.js`
398
419
  Exports
399
- - `createCodexConversationCommands({ checkpoint, codexAppServerConversationMessageId, codexAppServerStreamMessage, conversationPreparation, ensureCodexAppServerProviderForActiveTurn, errorPrefix, helperLifecycle, helperOwnershipError, interruptFailedCode, namespace, providerSessions, steerFailedCode })`
420
+ - `createCodexConversationCommands({ checkpoint, codexAppServerConversationMessageId, codexAppServerStreamMessage, conversationPreparation, ensureCodexAppServerProviderForActiveTurn, errorPrefix, helperLifecycle, helperOwnershipError, interruptFailedCode, namespace, providerSessions, sessionConnection, ensureSessionProvider, steerFailedCode, turnOutcomes })`
421
+
422
+ ### `src/server/conversation/codexConversationStore.js`
423
+ Exports
424
+ - `createCodexConversationRunStore({ storage, scope, segmentId, isCurrent, clock = () => new Date() } = {})`
425
+ - `createCodexConversationStore({ storage, scope, segmentId, isCurrent, transcript, streams } = {})`
400
426
 
401
427
  ### `src/server/conversation/codexDetachedTurn.js`
402
428
  Exports
@@ -423,6 +449,7 @@ Exports
423
449
  - `inspectCodexAppServerRenewalThread(thread = null, { clientMessageId = "", turnId: expectedTurnId = "", requireFresh = false } = {})`
424
450
  - `codexAppServerProviderTurnText(thread = null, turnId = "")`
425
451
  - `codexAppServerProviderTurnError(turn = {})`
452
+ - `codexAppServerAgentMessageText(payload = {})`
426
453
  - `codexAppServerAssistantItemText(item = {})`
427
454
  - `codexAppServerContentText(value = null)`
428
455
  - `codexAppServerContextRefreshReason(notification = {})`
@@ -459,14 +486,11 @@ Exports
459
486
 
460
487
  ### `src/server/conversation/codexHelperExecution.js`
461
488
  Exports
462
- - `errorMessage(value, fallback = "Codex could not be prepared.")`
463
489
  - `createCodexHelperOwnershipError({ applicationName = "Application", errorPrefix = "" } = {})`
464
490
  - `readCodexAppServerAccountIdentity(provider, codexAppServerHelperOwnershipError)`
465
491
  - `assertCodexAppServerHelperAccountIdentity(provider, expectedSignature = "", codexAppServerHelperOwnershipError)`
466
492
  - `sendPreparedCodexAppServerHelperTurn(provider, prepared, helperIsolation)`
467
493
  - `prepareDetachedCodexHelperThread(owner, scope, preparation, { applicationName = "Application" } = {})`
468
- Local functions
469
- - `normalizeText(value)`
470
494
 
471
495
  ### `src/server/conversation/codexHelperThreadLedger.js`
472
496
  Exports
@@ -476,15 +500,11 @@ Exports
476
500
 
477
501
  ### `src/server/conversation/codexHelperThreadRecovery.js`
478
502
  Exports
479
- - `normalizeText(value)`
480
- - `directoryExists(filePath = "")`
481
503
  - `createCodexHelperThreadRecovery(lifecycle, { providerOwner, applicationName, errorPrefix })`
482
504
 
483
505
  ### `src/server/conversation/codexHelperThreads.js`
484
506
  Exports
485
507
  - `createCodexHelperThreadLifecycle({ providerOwner, ledgerOwner, applicationName = "Application", errorPrefix = "" } = {})`
486
- Local functions
487
- - `isRecord(value)`
488
508
 
489
509
  ### `src/server/conversation/codexHistoryAdapter.js`
490
510
  Exports
@@ -493,6 +513,9 @@ Exports
493
513
  - `prepareCodexHistory(params, client, { baseUrl, modelProviderId, ...options } = {})`
494
514
  - `readCodexHistoryRows`
495
515
  Local functions
516
+ - `unsupportedHistory(message)`
517
+ - `historicalToolOutput(item)`
518
+ - `historicalResultMessage(label, parts, closingTag)`
496
519
  - `compactionHistoryError(reason, statusCode = 422)`
497
520
  - `retainedUserRecord(item)`
498
521
  - `restoreCompactedHistory(body, { destination, historyPath, codexHome, signal, maxRequestBytes })`
@@ -506,6 +529,14 @@ Exports
506
529
  Exports
507
530
  - `createCodexAppServerMessageDelivery({ namespace, publish, messageMetadata, createStore, turnStateFromAgentRun, deliveryStateMetadataKey, output, journal, recovery })`
508
531
 
532
+ ### `src/server/conversation/codexModelCatalog.js`
533
+ Exports
534
+ - `codexAppServerModelCatalogError(message = "", errorPrefix = "")`
535
+ - `codexAppServerProviderConnectionGeneration(provider = null)`
536
+ - `createCodexAppServerModelCatalogCache({ cacheMs = 30_000, errorPrefix = "" } = {})`
537
+ Local functions
538
+ - `codexAppServerModelCatalogSnapshot(value = null, errorPrefix = "")`
539
+
509
540
  ### `src/server/conversation/codexNativeHistoryExport.js`
510
541
  Exports
511
542
  - `exportCodexNativeHistory(client, threadId, onRecord, { signal, maxPages = 20_000, maxBytes = 2 * 1024 ** 3, errorPrefix = "" } = {})`
@@ -550,17 +581,19 @@ Exports
550
581
  - `codexAppServerCommandBaseEnv({ env = process.env, terminalEnv = {} } = {})`
551
582
  - `codexAppServerCredentialHome(toolHomeSource = "", baseEnv = {})`
552
583
  - `codexAppServerTerminalEnvHash(terminalEnv = {})`
584
+ - `codexCommandHookDefinition(command)`
553
585
  - `createCodexAppServerRuntime({ execution, credentials, configuration = {} })`
554
586
  - `CODEX_APP_SERVER_METADATA_SCHEMA_VERSION`
555
587
  - `CODEX_APP_SERVER_TRANSPORT`
556
588
  - `CODEX_APP_SERVER_RUNTIME_DIR_NAME`
589
+ - `CODEX_APP_SERVER_DESKTOP_BUS_ENV_NAMES`
557
590
  - `CODEX_APP_SERVER_PROCESS_STATE`
591
+ - `CODEX_APP_SERVER_DEFAULT_ENVIRONMENT`
558
592
  Local functions
559
593
  - `ensurePrivateDirectory(dirPath = "")`
560
594
  - `codexAppServerLockDir(runtimeDir = "")`
561
595
  - `readLockOwner(lockDir = "")`
562
596
  - `lockIsStale(lockDir = "")`
563
- - `normalizePositiveInteger(value, fallback)`
564
597
  - `stableHash(value)`
565
598
  - `codexAppServerHelperCommandBaseEnv(env = process.env, codexHome = "")`
566
599
  - `codexAppServerLogPath(runtimeDir = "")`
@@ -576,6 +609,7 @@ Local functions
576
609
  - `codexHistoryAdapterUrlIsValid(baseUrl, token)`
577
610
  - `codexAppServerLivenessTimeoutMs(options = {})`
578
611
  - `codexAppServerProcessCommandHash({ codexArgs = [], codexCommand = "", executionMode = "", processCwd = "", runtimeDir = "" } = {})`
612
+ - `tomlInlineValue(value)`
579
613
 
580
614
  ### `src/server/conversation/codexProcessLeader.js`
581
615
  Exports
@@ -583,19 +617,15 @@ Exports
583
617
 
584
618
  ### `src/server/conversation/codexProvider.js`
585
619
  Exports
620
+ - `CODEX_APP_SERVER_THREAD_INVENTORY_MAX_COUNT`
621
+ - `CODEX_APP_SERVER_THREAD_INVENTORY_ID_MAX_LENGTH`
586
622
  - `CodexAppServerAgentProvider`
587
623
  - `CODEX_APP_SERVER_INVALID_REQUEST_CODE`
588
- - `assertCodexAuthPreflightReady(options = {}, { reason = "codex-auth-preflight", execution, credentials } = {})`
589
- - `createCodexAppServerModelCatalogCache({ cacheMs = 30_000, errorPrefix = "" } = {})`
590
- - `codexAppServerProviderConnectionGeneration(provider = null)`
591
624
  - `ensureCodexAppServerThread({ observeThread, provider, settings, projectHooks = false, identity, applicationTools, providerReady, workdir = "", onStage = () => {} } = {})`
592
625
  - `codexApplicationToolConfiguration(tools)`
593
626
  - `assertCodexApplicationToolSchemaIdentity(threadId, savedIdentity, toolSchemaIdentity)`
594
627
  - `sendCodexAppServerPrompt({ attachments = [], clientUserMessageId = "", outputSchema = null, provider, prompt = "", threadId = "", readOnly = false } = {}, authorized = {})`
595
- - `resumeExactCodexAppServerThread({ expectedThreadId = "", provider, settings, projectHooks = false, workdir = "", errorCode = "codex_renewal_thread_unreadable" } = {})`
596
- - `startFreshCodexAppServerThread({ provider, settings, projectHooks = false, identity, resumableThreadId = "", forbiddenThreadId = "", operationId = "", workdir = "", errorCode = "codex_renewal_fresh_thread_required", applicationName = "The application" } = {})`
597
- - `defineCodexRenewalThreadIds(value = [], { errorCode = "codex_renewal_fresh_thread_required" } = {})`
598
- - `codexRenewalThreadError(code, message, details = {}, { retryable = false } = {})`
628
+ - `codexAppServerDeliveredTurn(delivery = {})`
599
629
  - `codexAppServerEndpointForTarget(endpoint = "")`
600
630
  - `codexAppServerRequestIsInvalid(error = null, method = "")`
601
631
  - `codexAppServerThreadIsMissing(error = null, threadId = "")`
@@ -615,22 +645,11 @@ Exports
615
645
  - `codexAppServerOwnedRuntimeKey`
616
646
  - `codexAppServerRuntimeStopWasVerified`
617
647
  Local functions
618
- - `normalizePositiveInteger(value, fallback)`
619
- - `listCodexRenewalThreadIds(provider, workdir, errorCode)`
620
- - `assertCodexRenewalThreadSnapshot(threadSnapshot = null, { threadId = "", workdir = "", errorCode } = {})`
621
- - `codexRenewalThreadNeedsStatusRead(error = null, threadId = "")`
622
- - `readCodexRenewalSuccessorThreadSnapshot({ provider, threadId = "", workdir = "", errorCode } = {})`
623
- - `codexAppServerThreadResponseId(thread = null, fallback = "")`
624
- - `codexAppServerModelCatalogError(message = "", errorPrefix = "")`
625
- - `codexAppServerModelCatalogSnapshot(value = null, errorPrefix = "")`
626
648
  - `codexAppServerHelperLoginParams(auth = {}, errorPrefix = "")`
627
649
  - `codexAppServerHelperLoginResponseType(auth = {})`
628
650
  - `codexAppServerHelperAccountType(auth = {})`
629
651
  - `codexAppServerHelperRequestError(error = null, reason = "", errorPrefix = "")`
630
652
  - `normalizeCodexAppServerInfo(initializeResult = null)`
631
- - `tailAppend(text = "", chunk = "", maxBytes = CODEX_AUTH_PREFLIGHT_OUTPUT_TAIL_BYTES)`
632
- - `codexAuthPreflightArgs()`
633
- - `runCodexAuthPreflight({ codexCommand = "codex", env = process.env, executionRoot = "", runtimeDir = "", terminalEnv = {}, timeoutMs = CODEX_AUTH_PREFLIGHT_TIMEOUT_MS, toolHomeSource = "", workdir = "" } = {}, execution)`
634
653
  - `codexAppServerThreadRequestParams(params = {}, threadEnv = {})`
635
654
  - `codexControlProbeCommand(keys, marker)`
636
655
  - `codexAppServerThreadInventoryError(errorCode, label, detail)`
@@ -643,11 +662,10 @@ Local functions
643
662
  Exports
644
663
  - `codexAppServerOwnedRuntimeKey(providerKey = "", providerOptions = {})`
645
664
  - `codexAppServerRuntimeStopWasVerified(result = {})`
665
+ - `directoryExists(filePath = "")`
646
666
  - `createCodexAppServerProviderOwner({ runtimeRoot = "", assertOpen: assertApplicationOpen = () => {}, onRecoveryEvent = () => {}, debugLog = () => {}, debugError = error => error, providerFactory = null, prepareNativeHost = () => ({}), runtimeBusyCode = "codex_app_server_runtime_busy", exitUnverifiedCode = "codex_runtime_exit_unverified", requiredStopCode = "codex_runtime_exit_unverified", runtimeCloseError = "Codex app-server runtime close failed." } = {})`
647
667
  Local functions
648
- - `normalizeText(value)`
649
668
  - `withRuntimeLifecycle(runtimeKey, operation)`
650
- - `directoryExists(filePath = "")`
651
669
 
652
670
  ### `src/server/conversation/codexProviderSelection.js`
653
671
  Exports
@@ -661,6 +679,19 @@ Exports
661
679
  Exports
662
680
  - `createCodexRenewalCommands({ claimCodexAppServerTurnStart, codexAppServerNotificationQueue, completeCodexAppServerTurn, errorPrefix, markCodexAppServerTurnActive, markCodexAppServerTurnIdle, observer, selection, turnAlreadyRunningError, writeCodexAppServerUserMessageOwnership })`
663
681
 
682
+ ### `src/server/conversation/codexRenewalThreads.js`
683
+ Exports
684
+ - `defineCodexRenewalThreadIds(value = [], { errorCode = "codex_renewal_fresh_thread_required" } = {})`
685
+ - `codexRenewalThreadError(code, message, details = {}, { retryable = false } = {})`
686
+ - `resumeExactCodexAppServerThread({ expectedThreadId = "", provider, settings, projectHooks = false, workdir = "", errorCode = "codex_renewal_thread_unreadable" } = {})`
687
+ - `startFreshCodexAppServerThread({ provider, settings, projectHooks = false, identity, resumableThreadId = "", forbiddenThreadId = "", operationId = "", workdir = "", errorCode = "codex_renewal_fresh_thread_required", applicationName = "The application" } = {})`
688
+ Local functions
689
+ - `listCodexRenewalThreadIds(provider, workdir, errorCode)`
690
+ - `assertCodexRenewalThreadSnapshot(threadSnapshot = null, { threadId = "", workdir = "", errorCode } = {})`
691
+ - `codexRenewalThreadNeedsStatusRead(error = null, threadId = "")`
692
+ - `readCodexRenewalSuccessorThreadSnapshot({ provider, threadId = "", workdir = "", errorCode } = {})`
693
+ - `codexAppServerThreadResponseId(thread = null, fallback = "")`
694
+
664
695
  ### `src/server/conversation/codexResultSettlement.js`
665
696
  Exports
666
697
  - `createCodexResultSettlement({ journal, output, createRuntime, publish, debugLog, debugError, turnState })`
@@ -671,15 +702,15 @@ Exports
671
702
 
672
703
  ### `src/server/conversation/codexRuntimeLifecycle.js`
673
704
  Exports
674
- - `createCodexRuntimeLifecycle({ runOwner, providerSessions, helperLifecycle, captureContext, runInContext, debugLog, debugError, closingError = null })`
705
+ - `createCodexRuntimeLifecycle({ pendingWork, observer, checkManagedConnection, providerSessions, helperLifecycle, captureContext, runInContext, debugLog, debugError, closingError = null })`
675
706
 
676
707
  ### `src/server/conversation/codexSessionCleanup.js`
677
708
  Exports
678
- - `createCodexSessionCleanup({ namespace, runOwner, providerSessions, helperLifecycle, journal, conversations, debugLog, debugError })`
709
+ - `createCodexSessionCleanup({ namespace, runOwner, providerSessions, sessionClosures, helperLifecycle, journal, conversations, debugLog, debugError })`
679
710
 
680
711
  ### `src/server/conversation/codexSessionReconciliation.js`
681
712
  Exports
682
- - `createCodexSessionReconciliation({ runOwner, providerSessions, helperLifecycle, lifecycle, createRuntime, namespace, turnState, sessionIdRequiredError, debugLog, debugError })`
713
+ - `createCodexSessionReconciliation({ readiness, recoverSessionObservationLoss, providerSessions, helperLifecycle, lifecycle, createRuntime, namespace, turnState, sessionIdRequiredError, debugLog, debugError })`
683
714
 
684
715
  ### `src/server/conversation/codexThreadReadiness.js`
685
716
  Exports
@@ -758,8 +789,10 @@ Exports
758
789
  - `codexAppServerTurnCanReceiveProviderActivity(turn = {}, threadId = "", turnId = "")`
759
790
  - `codexAppServerTurnCanAdoptSuccessor(turn = {}, threadId = "", turnId = "")`
760
791
  - `codexAppServerTurnKey(threadId = "", turnId = "")`
792
+ - `codexAppServerNativeOuterTurnId(threadId = "", turnId = "")`
761
793
  - `codexAppServerAgentRunPatch({ error = "", inputSource = "", outerTurnId = "", phase, runState = CODEX_APP_SERVER_RUN_STATE.COMPLETED, session = {}, status = "", threadId = "", turnId = "", updatedAt = "" } = {}, normalizeRunState = normalizeCodexAppServerRunState)`
762
794
  - `codexAppServerRunIdentityForPatch(session = {}, { threadId = "", turnId = "" } = {}, normalizeRunState = normalizeCodexAppServerRunState)`
795
+ - `codexAppServerRunPatchSettlesOtherActiveTurn(currentTurn = {}, patch = {})`
763
796
  - `codexAppServerRunPatchIsStaleAfterTerminalState(currentTurn = {}, patch = {}, normalizeRunState = normalizeCodexAppServerRunState)`
764
797
  - `codexAppServerSteerFailure(result = {}, steerFailedCode = "codex_turn_steer_failed")`
765
798
  - `codexAppServerMessageRequiresNewTurn({ reason = "provider_idle", threadId = "", turnId = "" } = {})`
@@ -819,7 +852,8 @@ Local functions
819
852
 
820
853
  ### `src/server/conversation/deliveryTiming.js`
821
854
  Exports
822
- - `createConversationDeliveryTiming({ engine, conversationId, messageId, report, clock = () => performance.now() })`
855
+ - `normalizeConversationDeliveryHostStages(hostStages = [])`
856
+ - `createConversationDeliveryTiming({ engine, conversationId, messageId, report, hostStages = [], clock = () => performance.now() })`
823
857
 
824
858
  ### `src/server/conversation/fileStorage.js`
825
859
  Exports
@@ -857,6 +891,7 @@ Exports
857
891
  - `nativeConversationStoragePolicy`
858
892
  - `createConversationProcessIdentity`
859
893
  - `validateConversationOutputSchema`
894
+ - `conversationAttachmentIds`
860
895
 
861
896
  ### `src/server/conversation/localExecution.js`
862
897
  Exports
@@ -882,8 +917,8 @@ Exports
882
917
 
883
918
  ### `src/server/conversation/normalize.js`
884
919
  Exports
885
- - `normalizeText(value)`
886
- - `isPlainObject(value)`
920
+ - `normalizeNullableText(value)`
921
+ - `jsonHash(value)`
887
922
 
888
923
  ### `src/server/conversation/openCodeClient.js`
889
924
  Exports
@@ -894,8 +929,7 @@ Exports
894
929
  - `createOpenCodeServerClient({ allowAttachmentDirectories = false, baseUrl = "", directory = "", fetchImpl = globalThis.fetch, password = "", username = "opencode" } = {})`
895
930
  - `readBoundedResponse(response, limitBytes = OPENCODE_RESPONSE_LIMIT_BYTES)`
896
931
  Local functions
897
- - `text(value = "")`
898
- - `record(value = null)`
932
+ - `record(value)`
899
933
  - `openCodeServerError(message, { body = null, code = "assistant_opencode_server_request_failed", method = "", path = "", status = 0 } = {})`
900
934
  - `parsedJson(value = "")`
901
935
  - `responseErrorMessage(payload = null, fallback = "OpenCode rejected the request.")`
@@ -944,7 +978,6 @@ Exports
944
978
  - `sameOpenCodeSelection`
945
979
  - `createOpenCodeConversationPlugin`
946
980
  Local functions
947
- - `text(value = "")`
948
981
  - `availableLoopbackPort()`
949
982
  - `waitForOpenCodeReady({ client, expectedVersion = OPENCODE_EXPECTED_VERSION, processHandle, timeoutMs = OPENCODE_READY_TIMEOUT_MS, signal } = {})`
950
983
  - `actionPermission(action)`
@@ -964,7 +997,6 @@ Exports
964
997
  - `ensureOpenCodeSession(target, { selection, model, workdir = target.workdir, identity = {}, signal, invalidIdentity = () => new Error("OpenCode did not return a native conversation ID.") })`
965
998
  - `createOpenCodeSharedRuntime({ onStop = () => {}, scope } = {})`
966
999
  Local functions
967
- - `text(value)`
968
1000
  - `openCodeTurnSnapshot(turn = null, threadId = "")`
969
1001
  - `openCodeCredentialFailure(value = "")`
970
1002
  - `openCodeProviderApiFailure(error = {})`
@@ -982,7 +1014,8 @@ Exports
982
1014
  - `openCodeMessageError(message = {})`
983
1015
  - `inspectOpenCodeMessageAdmission(client, conversationId, inputMessageId, { signal = AbortSignal.timeout(OPENCODE_INTERRUPT_TIMEOUT_MS), wait = false, readFailure = () => null } = {})`
984
1016
  - `steerOpenCodeTurn(client, conversationId, turn, input, { signal } = {})`
985
- - `dispatchOpenCodeTurn(client, conversationId, turn, input, options = {})`
1017
+ - `dispatchOpenCodeTurn(turn, input, options = {})`
1018
+ - `readOpenCodeMessagesUntil(client, conversationId, found, { signal } = {})`
986
1019
  - `openCodeMessageRows(value = null)`
987
1020
  - `openCodePersistentConversationMessages(rows, conversationMessageId)`
988
1021
  - `projectOpenCodeConversationMessages(messages, expectedId, { maximumOutput, outputSchema, previous, onMessage })`
@@ -995,10 +1028,10 @@ Exports
995
1028
  - `OPENCODE_INTERRUPT_TIMEOUT_MS`
996
1029
  - `OPENCODE_REFUSED_TOOL_ERROR`
997
1030
  Local functions
998
- - `text(value)`
999
- - `record(value = null)`
1031
+ - `record(value)`
1000
1032
  - `openCodeEventSummary(event = {})`
1001
1033
  - `consumeOpenCodeEvents(client, conversationId, { eventStartedAt = null, onEvent = null, onError = null, onReady = null, readError = openCodeMessageError, signal } = {})`
1034
+ - `hasMessage(id)`
1002
1035
  - `openCodeMessageResultForInput(value = null, inputMessageId = "", { readError = openCodeMessageError } = {})`
1003
1036
  - `latestOpenCodeMessageResult(value, readError)`
1004
1037
 
@@ -1020,7 +1053,6 @@ Exports
1020
1053
  Exports
1021
1054
  - `createClaudeConversationDriver({ connections, host = {}, limits = {} } = {})`
1022
1055
  Local functions
1023
- - `hash(value)`
1024
1056
  - `nativeInput(input)`
1025
1057
  - `claudeGoalValue(goal, conversationId)`
1026
1058
 
@@ -1032,7 +1064,6 @@ Exports
1032
1064
  Exports
1033
1065
  - `createCodexConversationDriver({ connections, host = {}, limits = {} } = {})`
1034
1066
  Local functions
1035
- - `hash(value)`
1036
1067
  - `goalValue(goal)`
1037
1068
  - `nativeInput(input)`
1038
1069
 
@@ -1044,13 +1075,15 @@ Exports
1044
1075
  Exports
1045
1076
  - `createOpenCodeConversationDriver({ connections, host = {}, limits = {} } = {})`
1046
1077
  Local functions
1047
- - `hash(value)`
1048
1078
  - `nativeMessageId(id)`
1049
1079
  - `executeOpenCodeApplicationTool({ active, turn, target, sessionId, assertCurrent }, input, signal)`
1050
1080
 
1051
1081
  ### `src/server/conversation/providers/scoped.js`
1052
1082
  Exports
1053
1083
  - `runScopedConversationTurn({ operations, scope = {}, input = {}, context: options = {}, executionProfile: profileSnapshot } = {})`
1084
+ - `scopedConversationInput(conversationId)`
1085
+ - `unsupportedScopedConversation()`
1086
+ - `createScopedConversationHandle({ conversationId, sendNative, readNative, waitNative, cancel, deleteConversation, disposeOpening })`
1054
1087
  - `projectStoredPersistentConversation(options)`
1055
1088
  - `readPersistentConversation(options)`
1056
1089
  - `startPersistentConversationTurn(options)`
@@ -1059,6 +1092,7 @@ Exports
1059
1092
  - `inspectPersistentConversationDelivery(options)`
1060
1093
  - `stopPersistentConversation({ sessionId, record, context, operations, records, projection })`
1061
1094
  - `deletePersistentConversation({ sessionId, record, context, operations, records, projection })`
1095
+ - `SCOPED_CONVERSATION_CAPABILITIES`
1062
1096
  Local functions
1063
1097
  - `requireSuccess(result)`
1064
1098
  - `qualifyTranscript(turns, record, response, receipts)`
@@ -1068,18 +1102,19 @@ Local functions
1068
1102
 
1069
1103
  ### `src/server/conversation/runtime.js`
1070
1104
  Exports
1071
- - `createConversationRuntime({ engine: defaultEngine = "api", defaultIntegrationId, storage, authorize, connections, apiClientFactory, apiHistory, actions, toolPolicy, toolCatalog, attachments, fetch, host: defaultHost, onDeliveryTiming, persistCommentary = true, completedEnvelope = false, limits = {} } = {})`
1105
+ - `createConversationRuntime({ engine: defaultEngine = "api", defaultIntegrationId, storage, authorize, connections, apiClientFactory, apiHistory, actions, toolPolicy, toolCatalog, attachments, fetch, host: defaultHost, onDeliveryTiming, hostDeliveryStages, persistCommentary = true, completedEnvelope = false, limits = {} } = {})`
1072
1106
  Local functions
1073
1107
  - `failure(message, code, statusCode = 409)`
1074
1108
  - `submittedMessage(turn)`
1075
1109
  - `retainedSegments(state)`
1076
- - `nativeIdentity(segment)`
1077
1110
  - `pendingSuccessor(state)`
1078
1111
  - `sameRequest(left, right)`
1079
1112
 
1080
1113
  ### `src/server/conversation/runtimeStateUpgrade.js`
1081
1114
  Exports
1082
1115
  - `hasUnfinishedConversationRewind(runtime)`
1116
+ - `conversationNativeIdentity(segment)`
1117
+ - `conversationNativeBinding(engine, id)`
1083
1118
  - `createConversationRuntimeReplacement({ request, engine, configuration, reason, segmentId, continuity, seen, destination })`
1084
1119
  - `releaseConversationRuntimeBinding(state, pending, request, engine)`
1085
1120
  - `finishConversationRuntimeReplacement(state, { engine, selection, retireNative, pending, value })`
@@ -1090,9 +1125,10 @@ Local functions
1090
1125
  - `object(value)`
1091
1126
  - `invalid(message)`
1092
1127
  - `validateSegment(segment)`
1093
- - `nativeIdentity(segment)`
1128
+ - `nativeIdentityField(engine)`
1094
1129
  - `inspectRequest(request, segment, version, warnings)`
1095
1130
  - `retireCodexBinding(runtime, retirement)`
1131
+ - `validateConversationRuntimeState(runtime, warnings)`
1096
1132
 
1097
1133
  ### `src/server/conversation/storage.js`
1098
1134
  Exports
@@ -1168,6 +1204,7 @@ Exports
1168
1204
  - `codexAuthOutputRequiresReconnect`
1169
1205
  - `codexProviderConfiguration`
1170
1206
  - `codexProviderFileConfiguration`
1207
+ - `codexProviderCatalogPath`
1171
1208
  - `verifyCodexProviderKey`
1172
1209
  - `codexProviderModelCatalog`
1173
1210
  - `codexCatalogRows`
@@ -1225,25 +1262,25 @@ Exports
1225
1262
  Exports
1226
1263
  - `CODEX_APP_SERVER_INVALID_REQUEST_CODE`
1227
1264
  - `CodexAppServerAgentProvider`
1228
- - `assertCodexAuthPreflightReady`
1229
1265
  - `codexAppServerEndpointForTarget`
1230
1266
  - `codexAppServerRequestIsInvalid`
1231
1267
  - `codexAppServerRuntimeStopWasVerified`
1232
1268
  - `codexCliResumeCommand`
1233
- - `codexRenewalThreadError`
1234
1269
  - `codexTextInput`
1235
1270
  - `codexTurnInput`
1236
1271
  - `createCodexAppServerProviderOwner`
1237
- - `defineCodexRenewalThreadIds`
1238
1272
  - `deleteCodexAppServerHelperThread`
1239
1273
  - `deleteCodexAppServerThread`
1240
1274
  - `ensureCodexAppServerThread`
1241
1275
  - `inspectCodexAppServerMessageAdmission`
1242
1276
  - `retireCodexConversationHistory`
1243
1277
  - `readCodexNativeGoal`
1244
- - `resumeExactCodexAppServerThread`
1245
1278
  - `sendCodexAppServerPrompt`
1246
1279
  - `shellQuote`
1280
+ - `assertCodexAuthPreflightReady`
1281
+ - `codexRenewalThreadError`
1282
+ - `defineCodexRenewalThreadIds`
1283
+ - `resumeExactCodexAppServerThread`
1247
1284
  - `startFreshCodexAppServerThread`
1248
1285
  - `readCodexHistoryRows`
1249
1286
 
@@ -1364,9 +1401,6 @@ Local functions
1364
1401
  ### `src/server/lib/assistantToolLoop.js`
1365
1402
  Exports
1366
1403
  - `runAssistantToolLoop({ messages, input, toolSet, toToolSchema, complete, executeToolCalls, finish, preserveWhitespace = false })`
1367
- - `runBoundedAssistantToolLoop({ prompt, signal, policy, complete, outputSchema, limitError, invalidResponseError = new Error("The assistant returned an invalid response."), failureError = new Error("The assistant could not complete this request."), toolCatalog, toolContext, completedEnvelope = false, settle })`
1368
- - `readAssistantResponseEnvelope(text)`
1369
- - `readPartialAssistantReply(text)`
1370
1404
  Local functions
1371
1405
  - `requiresCurrentTime(value = "")`
1372
1406
  - `resolvePreflightTools(toolDescriptors = [], input = "")`
@@ -1375,7 +1409,6 @@ Local functions
1375
1409
  - `toSafeToolResultText(value)`
1376
1410
  - `buildToolOutcomeFallbackAnswer({ toolFailures = [], toolSuccesses = [] } = {})`
1377
1411
  - `buildAssistantToolCallMessage(toolCalls = [])`
1378
- - `boundedResponseSchema(outputSchema, descriptors)`
1379
1412
 
1380
1413
  ### `src/server/lib/ndjson.js`
1381
1414
  Exports
@@ -1448,7 +1481,6 @@ Local functions
1448
1481
  - `resolveUniqueToolName(baseName, used)`
1449
1482
  - `parseToolPayload(argumentsText)`
1450
1483
  - `normalizeNonNegativeInteger(value, fallback)`
1451
- - `normalizePositiveInteger(value, fallback)`
1452
1484
  - `serializedByteLength(value)`
1453
1485
  - `createToolError(status, code, message)`
1454
1486
  - `ensureSerializedSize(value, maxBytes, { code = "assistant_tool_result_too_large", label = "Tool result" } = {})`
@@ -1488,6 +1520,7 @@ Exports
1488
1520
  - `MAX_INPUT_CHARS`
1489
1521
  - `MAX_HISTORY_MESSAGES`
1490
1522
  - `MAX_MESSAGE_PAGE_SIZE`
1523
+ - `attachmentIdsField`
1491
1524
  - `assistantResource`
1492
1525
  - `assistantConversationOutputValidator`
1493
1526
 
@@ -1523,6 +1556,8 @@ Exports
1523
1556
  - `attachmentSizeLabel(size)`
1524
1557
  - `conversationAttachmentManifest(attachments = [])`
1525
1558
  - `prepareConversationAttachmentMessage(input, attachments, displayAttachments)`
1559
+ - `ASSISTANT_ATTACHMENT_MAX_ITEMS`
1560
+ - `ASSISTANT_ATTACHMENT_ID_MAX_LENGTH`
1526
1561
 
1527
1562
  ### `src/shared/conversation/index.js`
1528
1563
  Exports
@@ -1533,6 +1568,7 @@ Exports
1533
1568
  - `parseLongTextInlineParts(value = "")`
1534
1569
  - `parseLongTextReviewBlocks(value, options = {})`
1535
1570
  Local functions
1571
+ - `indentWidth(leading = "")`
1536
1572
  - `expandCompactPipeTableLines(lines = [])`
1537
1573
  - `parsePipeTableAt(lines = [], startIndex = 0)`
1538
1574
  - `parsePipeTableRow(value = "")`
@@ -1565,6 +1601,7 @@ Local functions
1565
1601
  - `numberedQuestionChoice(line = "")`
1566
1602
  - `trailingAnswerChoiceBlock(lines = [], startIndex = 0)`
1567
1603
  - `questionForMarkerMatch(match = [], index = 0)`
1604
+ - `rawMarkdownLines(rawLines = [], start = 0, end = rawLines.length)`
1568
1605
  - `parseLineNumberedQuestionPrompt(value = "")`
1569
1606
  - `parseInlineNumberedQuestionPrompt(value = "")`
1570
1607
 
@@ -1577,8 +1614,6 @@ Exports
1577
1614
  - `normalizeConversationLogPage(payload = {})`
1578
1615
  - `mergeConversationLogPages(pages = [])`
1579
1616
  - `conversationLogReadQuery({ beforeTurnId = "", limit = CONVERSATION_LOG_PAGE_LIMIT } = {})`
1580
- Local functions
1581
- - `isRecord(value)`
1582
1617
 
1583
1618
  ### `src/shared/conversation/patches.js`
1584
1619
  Exports
@@ -1586,7 +1621,6 @@ Exports
1586
1621
  - `normalizeConversationTurn(turn = {}, index = 0, options = {})`
1587
1622
  - `applyConversationLogPatch(payload = {}, patch = null, options = {})`
1588
1623
  Local functions
1589
- - `isRecord(value)`
1590
1624
  - `chronologicalConversationActivity(messages = [])`
1591
1625
 
1592
1626
  ### `src/shared/conversation/questions.js`
@@ -1607,8 +1641,6 @@ Local functions
1607
1641
  ### `src/shared/conversation/streaming.js`
1608
1642
  Exports
1609
1643
  - `mergeConversationStream(turns = [], snapshot = {})`
1610
- Local functions
1611
- - `messagesForTurn(turn)`
1612
1644
 
1613
1645
  ### `src/shared/conversation/thinkingText.js`
1614
1646
  Exports
@@ -1616,6 +1648,7 @@ Exports
1616
1648
 
1617
1649
  ### `src/shared/conversation/turns.js`
1618
1650
  Exports
1651
+ - `conversationTurnMessages(turn)`
1619
1652
  - `conversationTurnsFromMessages(messages = [])`
1620
1653
 
1621
1654
  ### `src/shared/index.js`
@@ -1641,6 +1674,7 @@ Exports
1641
1674
  - `MAX_INPUT_CHARS`
1642
1675
  - `MAX_HISTORY_MESSAGES`
1643
1676
  - `MAX_MESSAGE_PAGE_SIZE`
1677
+ - `attachmentIdsField`
1644
1678
  - `assistantResource`
1645
1679
  - `assistantConversationOutputValidator`
1646
1680
  - `MAX_SYSTEM_PROMPT_CHARS`