@noodleseed/one 0.154.0 → 0.156.0

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 (154) hide show
  1. package/README.md +5 -1
  2. package/dist/assistant-embed-django-tests.d.ts +3 -0
  3. package/dist/assistant-embed-django-tests.d.ts.map +1 -0
  4. package/dist/assistant-embed-django-tests.js +140 -0
  5. package/dist/assistant-embed-django-tests.js.map +1 -0
  6. package/dist/assistant-embed-django.d.ts +4 -0
  7. package/dist/assistant-embed-django.d.ts.map +1 -0
  8. package/dist/assistant-embed-django.js +259 -0
  9. package/dist/assistant-embed-django.js.map +1 -0
  10. package/dist/assistant-embed-installation.d.ts +29 -0
  11. package/dist/assistant-embed-installation.d.ts.map +1 -0
  12. package/dist/assistant-embed-installation.js +124 -0
  13. package/dist/assistant-embed-installation.js.map +1 -0
  14. package/dist/assistant-embed-profile.d.ts +8 -0
  15. package/dist/assistant-embed-profile.d.ts.map +1 -0
  16. package/dist/assistant-embed-profile.js +150 -0
  17. package/dist/assistant-embed-profile.js.map +1 -0
  18. package/dist/assistant-embed-scaffold-template.d.ts +3 -2
  19. package/dist/assistant-embed-scaffold-template.d.ts.map +1 -1
  20. package/dist/assistant-embed-scaffold-template.js +39 -84
  21. package/dist/assistant-embed-scaffold-template.js.map +1 -1
  22. package/dist/assistant-embed-tests.d.ts +5 -0
  23. package/dist/assistant-embed-tests.d.ts.map +1 -0
  24. package/dist/assistant-embed-tests.js +106 -0
  25. package/dist/assistant-embed-tests.js.map +1 -0
  26. package/dist/assistant-embed-vue.d.ts +3 -0
  27. package/dist/assistant-embed-vue.d.ts.map +1 -0
  28. package/dist/assistant-embed-vue.js +77 -0
  29. package/dist/assistant-embed-vue.js.map +1 -0
  30. package/dist/commands/assistant-embed-ops.d.ts.map +1 -1
  31. package/dist/commands/assistant-embed-ops.js +112 -63
  32. package/dist/commands/assistant-embed-ops.js.map +1 -1
  33. package/dist/commands/author-loop.d.ts.map +1 -1
  34. package/dist/commands/author-loop.js +24 -28
  35. package/dist/commands/author-loop.js.map +1 -1
  36. package/dist/commands/deploy-first-flow.d.ts.map +1 -1
  37. package/dist/commands/deploy-first-flow.js +26 -15
  38. package/dist/commands/deploy-first-flow.js.map +1 -1
  39. package/dist/commands/deploy-preflight.d.ts +5 -0
  40. package/dist/commands/deploy-preflight.d.ts.map +1 -1
  41. package/dist/commands/deploy-preflight.js +44 -5
  42. package/dist/commands/deploy-preflight.js.map +1 -1
  43. package/dist/commands/local-readiness.d.ts +9 -1
  44. package/dist/commands/local-readiness.d.ts.map +1 -1
  45. package/dist/commands/local-readiness.js +74 -4
  46. package/dist/commands/local-readiness.js.map +1 -1
  47. package/dist/commands/project-setup.d.ts.map +1 -1
  48. package/dist/commands/project-setup.js +10 -15
  49. package/dist/commands/project-setup.js.map +1 -1
  50. package/dist/control-plane-request.d.ts +4 -0
  51. package/dist/control-plane-request.d.ts.map +1 -1
  52. package/dist/control-plane-request.js +40 -20
  53. package/dist/control-plane-request.js.map +1 -1
  54. package/dist/project-scaffold-model.d.ts +14 -0
  55. package/dist/project-scaffold-model.d.ts.map +1 -0
  56. package/dist/project-scaffold-model.js +36 -0
  57. package/dist/project-scaffold-model.js.map +1 -0
  58. package/dist/project-scaffold-templates.d.ts.map +1 -1
  59. package/dist/project-scaffold-templates.js +73 -39
  60. package/dist/project-scaffold-templates.js.map +1 -1
  61. package/dist/project-scaffold-test-template.d.ts +4 -0
  62. package/dist/project-scaffold-test-template.d.ts.map +1 -0
  63. package/dist/project-scaffold-test-template.js +89 -0
  64. package/dist/project-scaffold-test-template.js.map +1 -0
  65. package/dist/project.d.ts.map +1 -1
  66. package/dist/project.js +1 -2
  67. package/dist/project.js.map +1 -1
  68. package/dist/widget-focused-template.d.ts +1 -1
  69. package/dist/widget-focused-template.d.ts.map +1 -1
  70. package/dist/widget-focused-template.js +34 -12
  71. package/dist/widget-focused-template.js.map +1 -1
  72. package/dist/widget-scaffold-template.d.ts +1 -1
  73. package/dist/widget-scaffold-template.d.ts.map +1 -1
  74. package/dist/widget-scaffold-template.js +75 -43
  75. package/dist/widget-scaffold-template.js.map +1 -1
  76. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +18 -4
  77. package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.js +2 -2
  78. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +9 -12
  79. package/node_modules/@noodle-borg/agent-kit/dist/skill-connect-refs.js +2 -2
  80. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-operations-ref.js +1 -1
  81. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +34 -26
  82. package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js +2 -2
  83. package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.js +2 -1
  84. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  85. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-suggestions.js +5 -3
  86. package/node_modules/@noodle-borg/assistant-gateway/dist/continuity-bounds.d.ts +36 -0
  87. package/node_modules/@noodle-borg/assistant-gateway/dist/continuity-bounds.js +52 -0
  88. package/node_modules/@noodle-borg/assistant-gateway/dist/continuity-store.d.ts +115 -0
  89. package/node_modules/@noodle-borg/assistant-gateway/dist/continuity-store.js +51 -0
  90. package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-continuity-store.d.ts +26 -0
  91. package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-continuity-store.js +80 -0
  92. package/node_modules/@noodle-borg/assistant-gateway/dist/model-request.d.ts +1 -0
  93. package/node_modules/@noodle-borg/assistant-gateway/dist/model-request.js +2 -0
  94. package/node_modules/@noodle-borg/assistant-gateway/dist/model-response-values.js +11 -0
  95. package/node_modules/@noodle-borg/assistant-gateway/dist/model-responses.js +1 -10
  96. package/node_modules/@noodle-borg/assistant-gateway/dist/model-stream.js +1 -10
  97. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +3 -0
  98. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +3 -0
  99. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  100. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +41 -0
  101. package/node_modules/@noodle-borg/authoring/dist/assistant.js +4 -0
  102. package/node_modules/@noodle-borg/authoring/dist/recording.d.ts +1 -1
  103. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js +10 -4
  104. package/node_modules/@noodle-borg/compiler/dist/manifest/branding-schema.js +86 -0
  105. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +44 -25
  106. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +24 -76
  107. package/node_modules/@noodle-borg/compiler/package.json +0 -1
  108. package/node_modules/@noodle-borg/deploy-client/dist/deploy-payload-size.js +6 -2
  109. package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts +1 -1
  110. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +193 -96
  111. package/node_modules/@noodle-borg/service/package.json +1 -1
  112. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +3 -0
  113. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +3 -0
  114. package/node_modules/@noodleseed/assistant/README.md +21 -23
  115. package/node_modules/@noodleseed/assistant/package.json +1 -1
  116. package/package.json +5 -4
  117. package/dist/saas-scaffold-template.d.ts +0 -4
  118. package/dist/saas-scaffold-template.d.ts.map +0 -1
  119. package/dist/saas-scaffold-template.js +0 -56
  120. package/dist/saas-scaffold-template.js.map +0 -1
  121. package/node_modules/tailwindcss/LICENSE +0 -21
  122. package/node_modules/tailwindcss/README.md +0 -36
  123. package/node_modules/tailwindcss/dist/chunk-5JIJA4QV.mjs +0 -1
  124. package/node_modules/tailwindcss/dist/chunk-HMCCH6MG.mjs +0 -1
  125. package/node_modules/tailwindcss/dist/chunk-X4GG3EDV.mjs +0 -1
  126. package/node_modules/tailwindcss/dist/colors-C__qRT83.d.ts +0 -347
  127. package/node_modules/tailwindcss/dist/colors.d.mts +0 -347
  128. package/node_modules/tailwindcss/dist/colors.d.ts +0 -5
  129. package/node_modules/tailwindcss/dist/colors.js +0 -1
  130. package/node_modules/tailwindcss/dist/colors.mjs +0 -1
  131. package/node_modules/tailwindcss/dist/default-theme.d.mts +0 -1199
  132. package/node_modules/tailwindcss/dist/default-theme.d.ts +0 -1199
  133. package/node_modules/tailwindcss/dist/default-theme.js +0 -1
  134. package/node_modules/tailwindcss/dist/default-theme.mjs +0 -1
  135. package/node_modules/tailwindcss/dist/flatten-color-palette.d.mts +0 -6
  136. package/node_modules/tailwindcss/dist/flatten-color-palette.d.ts +0 -6
  137. package/node_modules/tailwindcss/dist/flatten-color-palette.js +0 -1
  138. package/node_modules/tailwindcss/dist/flatten-color-palette.mjs +0 -1
  139. package/node_modules/tailwindcss/dist/lib.d.mts +0 -379
  140. package/node_modules/tailwindcss/dist/lib.d.ts +0 -3
  141. package/node_modules/tailwindcss/dist/lib.js +0 -38
  142. package/node_modules/tailwindcss/dist/lib.mjs +0 -38
  143. package/node_modules/tailwindcss/dist/plugin.d.mts +0 -11
  144. package/node_modules/tailwindcss/dist/plugin.d.ts +0 -134
  145. package/node_modules/tailwindcss/dist/plugin.js +0 -1
  146. package/node_modules/tailwindcss/dist/plugin.mjs +0 -1
  147. package/node_modules/tailwindcss/dist/resolve-config-B4yBzhca.d.ts +0 -29
  148. package/node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.mts +0 -190
  149. package/node_modules/tailwindcss/dist/types-DWdTiksJ.d.mts +0 -128
  150. package/node_modules/tailwindcss/index.css +0 -944
  151. package/node_modules/tailwindcss/package.json +0 -89
  152. package/node_modules/tailwindcss/preflight.css +0 -393
  153. package/node_modules/tailwindcss/theme.css +0 -510
  154. package/node_modules/tailwindcss/utilities.css +0 -1
@@ -0,0 +1,80 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { continuityDigest, continuityHandle, continuityHashesEqual, continuityMaxRestores, continuityWindowMs, sameContinuityContext, } from './continuity-store.js';
3
+ /** The in-memory half of the pair. Both run the shared parity suite; neither is the only proof. */
4
+ export class InMemoryAssistantContinuityStore {
5
+ #rows = new Map();
6
+ async issue(input) {
7
+ return this.#write({ ...input, restoreCount: 0 });
8
+ }
9
+ async claim(input) {
10
+ const hash = continuityDigest(input.handle);
11
+ const found = [...this.#rows.values()].find((row) => continuityHashesEqual(row.handleHash, hash));
12
+ if (!found || found.claimedAt !== undefined)
13
+ return { ok: false, reason: 'unknown' };
14
+ // Context before expiry: a handle replayed from somewhere it was never issued should read as the
15
+ // exfiltration signal it is, whether or not the value happened to be stale by then.
16
+ if (!sameContinuityContext(found.context, input.context)) {
17
+ return { ok: false, reason: 'context_mismatch' };
18
+ }
19
+ if (Date.parse(found.expiresAt) <= input.now.getTime())
20
+ return { ok: false, reason: 'expired' };
21
+ const restoreCount = found.restoreCount + 1;
22
+ const claimed = {
23
+ ...found,
24
+ restoreCount,
25
+ claimedAt: input.now.toISOString(),
26
+ };
27
+ this.#rows.set(found.id, claimed);
28
+ if (restoreCount >= found.maxRestores)
29
+ return { ok: true, record: claimed };
30
+ const rotated = this.#write({
31
+ sessionId: found.sessionId,
32
+ tenant: found.tenant,
33
+ context: found.context,
34
+ // Re-derive from the record so a rotation can never widen what the first issue clamped.
35
+ windowMs: Date.parse(found.expiresAt) - Date.parse(found.createdAt),
36
+ maxRestores: found.maxRestores,
37
+ restoreCount,
38
+ now: input.now,
39
+ });
40
+ return rotated === undefined
41
+ ? { ok: true, record: claimed }
42
+ : { ok: true, record: claimed, handle: rotated.handle };
43
+ }
44
+ async sweepExpired(input) {
45
+ let removed = 0;
46
+ for (const [id, row] of this.#rows) {
47
+ if (row.claimedAt !== undefined || Date.parse(row.expiresAt) <= input.now.getTime()) {
48
+ this.#rows.delete(id);
49
+ removed++;
50
+ }
51
+ }
52
+ return removed;
53
+ }
54
+ #write(input) {
55
+ const windowMs = continuityWindowMs(input.windowMs);
56
+ const maxRestores = continuityMaxRestores(input.maxRestores);
57
+ if (windowMs === 0 || maxRestores === 0)
58
+ return undefined;
59
+ // Supersede rather than accumulate: one live handle per session.
60
+ for (const [id, row] of this.#rows) {
61
+ if (row.sessionId === input.sessionId && row.claimedAt === undefined)
62
+ this.#rows.delete(id);
63
+ }
64
+ const handle = continuityHandle();
65
+ const record = {
66
+ id: `cont_${randomUUID().replaceAll('-', '')}`,
67
+ sessionId: input.sessionId,
68
+ tenant: input.tenant,
69
+ context: input.context,
70
+ handleHash: continuityDigest(handle),
71
+ restoreCount: input.restoreCount,
72
+ maxRestores,
73
+ createdAt: input.now.toISOString(),
74
+ expiresAt: new Date(input.now.getTime() + windowMs).toISOString(),
75
+ };
76
+ this.#rows.set(record.id, record);
77
+ return { record, handle };
78
+ }
79
+ }
80
+ //# sourceMappingURL=in-memory-continuity-store.js.map
@@ -94,6 +94,7 @@ export declare function requestModelCompletion(input: {
94
94
  readonly messages: readonly AssistantModelMessage[];
95
95
  readonly tools: readonly AssistantModelTool[];
96
96
  readonly toolChoice?: 'auto' | 'none' | 'required';
97
+ readonly jsonOutput?: boolean;
97
98
  readonly fetcher: (url: string, init: RequestInit) => Promise<Response>;
98
99
  readonly onContent?: (delta: string) => void;
99
100
  readonly maxResponseBytes?: number;
@@ -17,6 +17,7 @@ export async function requestModelCompletion(input) {
17
17
  store: false,
18
18
  input: responsesInput(input.messages),
19
19
  tools: responsesTools(input.tools),
20
+ ...(input.jsonOutput ? { text: { format: { type: 'json_object' } } } : {}),
20
21
  ...(input.toolChoice === undefined ? {} : { tool_choice: input.toolChoice }),
21
22
  ...(completionLimit === undefined ? {} : { max_output_tokens: completionLimit }),
22
23
  }
@@ -26,6 +27,7 @@ export async function requestModelCompletion(input) {
26
27
  stream: true,
27
28
  messages: input.messages,
28
29
  tools: input.tools,
30
+ ...(input.jsonOutput ? { response_format: { type: 'json_object' } } : {}),
29
31
  ...(input.toolChoice === undefined ? {} : { tool_choice: input.toolChoice }),
30
32
  ...(completionLimit === undefined ? {} : { max_completion_tokens: completionLimit }),
31
33
  });
@@ -0,0 +1,11 @@
1
+ export function nonNegativeInteger(value) {
2
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
3
+ }
4
+ export async function readBoundedText(response, maxBytes) {
5
+ const text = await response.text();
6
+ if (new TextEncoder().encode(text).byteLength > maxBytes) {
7
+ throw new Error('model response too large');
8
+ }
9
+ return text;
10
+ }
11
+ //# sourceMappingURL=model-response-values.js.map
@@ -1,3 +1,4 @@
1
+ import { nonNegativeInteger, readBoundedText } from './model-response-values.js';
1
2
  export function responsesInput(messages) {
2
3
  return messages.flatMap((message) => {
3
4
  if (message.role === 'tool') {
@@ -150,14 +151,4 @@ function parseRecord(value) {
150
151
  }
151
152
  return value;
152
153
  }
153
- function nonNegativeInteger(value) {
154
- return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
155
- }
156
- async function readBoundedText(response, maxBytes) {
157
- const text = await response.text();
158
- if (new TextEncoder().encode(text).byteLength > maxBytes) {
159
- throw new Error('model response too large');
160
- }
161
- return text;
162
- }
163
154
  //# sourceMappingURL=model-responses.js.map
@@ -1,3 +1,4 @@
1
+ import { nonNegativeInteger, readBoundedText } from './model-response-values.js';
1
2
  export async function readModelCompletion(response, onContent, maxBytes = 1 << 20) {
2
3
  const contentType = response.headers.get('content-type') ?? '';
3
4
  if (!contentType.includes('text/event-stream')) {
@@ -111,14 +112,4 @@ function normalizeUsageValue(usage) {
111
112
  ...(reasoningTokens === undefined ? {} : { reasoningTokens }),
112
113
  };
113
114
  }
114
- function nonNegativeInteger(value) {
115
- return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
116
- }
117
- async function readBoundedText(response, maxBytes) {
118
- const text = await response.text();
119
- if (new TextEncoder().encode(text).byteLength > maxBytes) {
120
- throw new Error('model response too large');
121
- }
122
- return text;
123
- }
124
115
  //# sourceMappingURL=model-stream.js.map
@@ -17,12 +17,15 @@ export * from './assistant-store.js';
17
17
  export * from './assistant-transcript.js';
18
18
  export * from './assistant-transcript-events.js';
19
19
  export * from './assistant-view-availability.js';
20
+ export * from './continuity-bounds.js';
21
+ export * from './continuity-store.js';
20
22
  export * from './elevation.js';
21
23
  export * from './elevation-store.js';
22
24
  export * from './embed-operator-view.js';
23
25
  export * from './embed-script.js';
24
26
  export * from './embed-store.js';
25
27
  export * from './in-memory-assistant-appearance-store.js';
28
+ export * from './in-memory-continuity-store.js';
26
29
  export * from './in-memory-elevation-store.js';
27
30
  export * from './in-memory-embed-store.js';
28
31
  export * from './managed-spend.js';
@@ -17,12 +17,15 @@ export * from './assistant-store.js';
17
17
  export * from './assistant-transcript.js';
18
18
  export * from './assistant-transcript-events.js';
19
19
  export * from './assistant-view-availability.js';
20
+ export * from './continuity-bounds.js';
21
+ export * from './continuity-store.js';
20
22
  export * from './elevation.js';
21
23
  export * from './elevation-store.js';
22
24
  export * from './embed-operator-view.js';
23
25
  export * from './embed-script.js';
24
26
  export * from './embed-store.js';
25
27
  export * from './in-memory-assistant-appearance-store.js';
28
+ export * from './in-memory-continuity-store.js';
26
29
  export * from './in-memory-elevation-store.js';
27
30
  export * from './in-memory-embed-store.js';
28
31
  export * from './managed-spend.js';
@@ -42,7 +42,7 @@
42
42
  "@noodle-borg/module-audit": "0.0.0",
43
43
  "@noodle-borg/protocol": "0.0.0",
44
44
  "@noodle-borg/runtime": "0.0.0",
45
- "@noodleseed/assistant": "1.33.0",
45
+ "@noodleseed/assistant": "1.34.0",
46
46
  "zod": "^4.4.3"
47
47
  },
48
48
  "devDependencies": {
@@ -173,6 +173,31 @@ export interface AuthenticatedWebsiteAccess {
173
173
  readonly enabled?: boolean;
174
174
  };
175
175
  }
176
+ /**
177
+ * Anonymous cross-page display continuity for one public surface (ADR 0223, clauses 11-16).
178
+ *
179
+ * Off unless asked for. Anonymous conversation text is your content on your page, so whether it
180
+ * survives a navigation is your call rather than a default the platform imposes.
181
+ *
182
+ * What a visitor gets is the text they have already read, re-rendered on the next page, on a fresh
183
+ * session. What it never grants is the old session itself: no tool authority, no share of a spent
184
+ * turn budget, and no pending confirmation carried across — a capability that survives a navigation
185
+ * is exactly what this design refuses to create.
186
+ */
187
+ export interface AssistantContinuityDeclaration {
188
+ readonly enabled?: boolean;
189
+ /**
190
+ * How long a handle stays valid after the turn that issued it, measured from when the visitor last
191
+ * spoke. Defaults to 300; 600 is the structural ceiling, and 0 disables continuity outright. An
192
+ * operator may lower what you declare here and can never raise it.
193
+ */
194
+ readonly windowSeconds?: number;
195
+ /**
196
+ * How many times one conversation may be restored before continuity ends and the next page starts
197
+ * fresh. Defaults to 3, ceiling 10, and 0 disables continuity outright.
198
+ */
199
+ readonly maxRestores?: number;
200
+ }
176
201
  export interface PublicWebsiteAccess {
177
202
  readonly mode: 'public' | 'mixed';
178
203
  readonly origins: readonly string[];
@@ -182,6 +207,8 @@ export interface PublicWebsiteAccess {
182
207
  readonly webmcp?: {
183
208
  readonly enabled?: boolean;
184
209
  };
210
+ /** @see PublicWebsiteInput.continuity */
211
+ readonly continuity?: AssistantContinuityDeclaration;
185
212
  }
186
213
  export type AssistantAccess = AuthenticatedWebsiteAccess | PublicWebsiteAccess;
187
214
  export interface AuthenticatedWebsiteInput {
@@ -226,6 +253,14 @@ export interface PublicWebsiteInput {
226
253
  readonly webmcp?: {
227
254
  readonly enabled?: boolean;
228
255
  };
256
+ /**
257
+ * Let an anonymous visitor keep the conversation they can see when they navigate to another page
258
+ * of this site. Omitted means off, and no existing embed changes behavior.
259
+ *
260
+ * Declared only here, never on an authenticated surface: that direction reattaches through a
261
+ * backend-verified sign-in instead, so a declaration there would configure nothing.
262
+ */
263
+ readonly continuity?: AssistantContinuityDeclaration;
229
264
  }
230
265
  export declare function authenticatedWebsite(input: AuthenticatedWebsiteInput): AuthenticatedWebsiteAccess;
231
266
  export declare function publicWebsite(input: PublicWebsiteInput): PublicWebsiteAccess;
@@ -255,6 +290,12 @@ export interface AssistantSurfaceConfig {
255
290
  readonly webmcp?: {
256
291
  readonly enabled?: boolean;
257
292
  };
293
+ /**
294
+ * Present only on a public or mixed surface; an authenticated one never carries it.
295
+ *
296
+ * @see PublicWebsiteInput.continuity
297
+ */
298
+ readonly continuity?: AssistantContinuityDeclaration;
258
299
  }
259
300
  export interface EmbeddedAssistantConfig extends AssistantUiOptions {
260
301
  readonly model: AssistantModel;
@@ -16,6 +16,7 @@ export function publicWebsite(input) {
16
16
  capabilities: [...input.capabilities],
17
17
  ...(input.instructions === undefined ? {} : { instructions: input.instructions }),
18
18
  ...(input.webmcp === undefined ? {} : { webmcp: { ...input.webmcp } }),
19
+ ...(input.continuity === undefined ? {} : { continuity: { ...input.continuity } }),
19
20
  };
20
21
  }
21
22
  function serializeOrigins(origins, path) {
@@ -59,6 +60,9 @@ export function embeddedAssistant(input) {
59
60
  ? { sessionClaims: structuredClone(surface.sessionClaims) }
60
61
  : {}),
61
62
  ...(surface.webmcp === undefined ? {} : { webmcp: { ...surface.webmcp } }),
63
+ ...(surface.mode !== 'authenticated' && surface.continuity !== undefined
64
+ ? { continuity: { ...surface.continuity } }
65
+ : {}),
62
66
  })),
63
67
  allowedOrigins: surfaces.flatMap((surface) => [...surface.origins]),
64
68
  ...structuredClone(ui),
@@ -2,7 +2,7 @@ import type { ConnectorRef } from './connectors.js';
2
2
  import type { AmbientContextOptions } from './context.js';
3
3
  import type { ResourceContext, ToolOptions } from './server.js';
4
4
  export type SymbolicScope = Ref & Record<string, Ref>;
5
- export type ConnectorClient = Record<string, (args?: Readonly<Record<string, unknown>>) => Ref>;
5
+ export type ConnectorClient = Record<string, (args?: Readonly<Record<string, unknown>>) => SymbolicScope>;
6
6
  type RecordedStep = {
7
7
  readonly id: string;
8
8
  readonly use: string;
@@ -383,15 +383,15 @@ export const ASSISTANT_COMMAND = {
383
383
  subcommand({
384
384
  ...SUBCOMMAND_FIELDS,
385
385
  name: 'embed',
386
- summary: 'Scaffold the embedding web app: session route, client-only mount, env example, and coding-agent instructions.',
386
+ summary: 'Install the selected website integration with explicit application-owned seams and verification guidance.',
387
387
  flags: [
388
388
  flag({
389
389
  ...FLAG_FIELDS,
390
390
  name: 'framework',
391
391
  type: 'string',
392
392
  value: '<framework>',
393
- summary: 'Embedding scaffold framework.',
394
- constraints: { choices: ['nextjs'], default: 'nextjs' },
393
+ summary: 'Embedding profile: nextjs or authenticated django-vue.',
394
+ constraints: { choices: ['nextjs', 'django-vue'], default: 'nextjs' },
395
395
  }),
396
396
  flag({
397
397
  ...FLAG_FIELDS,
@@ -407,6 +407,12 @@ export const ASSISTANT_COMMAND = {
407
407
  type: 'boolean',
408
408
  summary: 'Overwrite user-modified scaffold files.',
409
409
  }),
410
+ flag({
411
+ ...FLAG_FIELDS,
412
+ name: 'dry-run',
413
+ type: 'boolean',
414
+ summary: 'Preview generated files, hashes, conflicts, and next steps without writing files.',
415
+ }),
410
416
  flag({
411
417
  ...FLAG_FIELDS,
412
418
  name: 'no-agents',
@@ -432,7 +438,7 @@ export const ASSISTANT_COMMAND = {
432
438
  name: 'surface',
433
439
  type: 'string',
434
440
  value: '<mode>',
435
- summary: 'Surface mode this host serves; public drops backend credentials and public/mixed also check script-src.',
441
+ summary: 'Surface to install or check; public omits backend exchange, mixed adds the existing-login handoff.',
436
442
  constraints: { choices: ['authenticated', 'public', 'mixed'], default: 'authenticated' },
437
443
  }),
438
444
  flag({
@@ -0,0 +1,86 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Shared manifest primitives: colors, https URLs, managed variable expressions, assistant origins,
4
+ * packaged asset references, and the server brand kit.
5
+ *
6
+ * Extracted verbatim from `schema.ts` so that file stays inside its size budget as the assistant
7
+ * surface grows. These are leaf validators with no dependency on tools, prompts, widgets, or the
8
+ * assistant block, which is what makes the split one-directional and free of an import cycle.
9
+ */
10
+ const hexColorSchema = z.string().regex(/^#[0-9A-Fa-f]{6}$/, 'must be a 6-digit hex color');
11
+ export const httpsUrlSchema = z.url().regex(/^https:\/\//, 'must use https');
12
+ const managedVariableExpressionPattern = /^\$\{env\.[A-Za-z0-9_]+\}$/;
13
+ export const managedVariableExpressionSchema = z
14
+ .string()
15
+ .regex(managedVariableExpressionPattern, 'must be an exact managed variable expression');
16
+ // HTTP is allowed only for loopback development origins (mirrors the host-pattern loopback
17
+ // exception used for connector/CSP origins); production embedding origins stay https-only.
18
+ const assistantOriginOrVariablePattern = /^(?:\$\{env\.[A-Za-z0-9_]+\}|https:\/\/[^/?#@\\]+|http:\/\/(?:localhost|127\.0\.0\.1|\[::1\])(?::\d+)?)$/;
19
+ function isCanonicalAssistantOrigin(value) {
20
+ try {
21
+ return new URL(value).origin === value;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ export const assistantOriginOrVariableSchema = z
28
+ .string()
29
+ .regex(assistantOriginOrVariablePattern, 'must be a canonical bare origin using https (http is allowed only for localhost/127.0.0.1/[::1] loopback development origins)')
30
+ .refine((value) => managedVariableExpressionPattern.test(value) || isCanonicalAssistantOrigin(value), 'must be a canonical bare origin');
31
+ const packagedAssetSchema = z
32
+ .object({
33
+ kind: z.literal('asset'),
34
+ sourcePath: z.string().min(1),
35
+ logicalId: z.string().min(1),
36
+ })
37
+ .strict();
38
+ const brandAssetSchema = z
39
+ .object({
40
+ uri: z.union([httpsUrlSchema, packagedAssetSchema]),
41
+ darkUri: z.union([httpsUrlSchema, packagedAssetSchema]).optional(),
42
+ alt: z.string().trim().min(1),
43
+ })
44
+ .strict();
45
+ const brandThemeTokensSchema = z
46
+ .object({
47
+ surface: hexColorSchema.optional(),
48
+ surfaceRaised: hexColorSchema.optional(),
49
+ surfaceMuted: hexColorSchema.optional(),
50
+ text: hexColorSchema.optional(),
51
+ textMuted: hexColorSchema.optional(),
52
+ accent: hexColorSchema.optional(),
53
+ accentText: hexColorSchema.optional(),
54
+ link: hexColorSchema.optional(),
55
+ border: hexColorSchema.optional(),
56
+ borderStrong: hexColorSchema.optional(),
57
+ focus: hexColorSchema.optional(),
58
+ success: hexColorSchema.optional(),
59
+ warning: hexColorSchema.optional(),
60
+ danger: hexColorSchema.optional(),
61
+ code: hexColorSchema.optional(),
62
+ })
63
+ .strict();
64
+ export const serverBrandingSchema = z
65
+ .object({
66
+ name: z.string().trim().min(1).optional(),
67
+ accent: hexColorSchema.optional(),
68
+ surface: hexColorSchema.optional(),
69
+ surfaceDark: hexColorSchema.optional(),
70
+ logo: brandAssetSchema.optional(),
71
+ mark: brandAssetSchema.optional(),
72
+ avatar: brandAssetSchema.optional(),
73
+ theme: z
74
+ .object({
75
+ light: brandThemeTokensSchema.optional(),
76
+ dark: brandThemeTokensSchema.optional(),
77
+ })
78
+ .strict()
79
+ .optional(),
80
+ radius: z.enum(['none', 'sm', 'md', 'lg']).optional(),
81
+ density: z.enum(['compact', 'comfortable']).optional(),
82
+ typography: z.enum(['system', 'serif', 'mono']).optional(),
83
+ colorScheme: z.enum(['auto', 'light', 'dark']).optional(),
84
+ })
85
+ .strict();
86
+ //# sourceMappingURL=branding-schema.js.map
@@ -1,5 +1,4 @@
1
1
  import { z } from 'zod';
2
- import type { PackagedAssetReference } from '../assets.js';
3
2
  type ToolAuthorizationManifest = {
4
3
  readonly requiredScopes?: readonly string[] | undefined;
5
4
  readonly allowedRoles?: readonly string[] | undefined;
@@ -381,6 +380,11 @@ export declare const manifestV1Schema: z.ZodObject<{
381
380
  webmcp: z.ZodOptional<z.ZodObject<{
382
381
  enabled: z.ZodOptional<z.ZodBoolean>;
383
382
  }, z.core.$strict>>;
383
+ continuity: z.ZodOptional<z.ZodObject<{
384
+ enabled: z.ZodOptional<z.ZodBoolean>;
385
+ windowSeconds: z.ZodOptional<z.ZodNumber>;
386
+ maxRestores: z.ZodOptional<z.ZodNumber>;
387
+ }, z.core.$strict>>;
384
388
  }, z.core.$strict>>>;
385
389
  sessionClaims: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
386
390
  exposeToModel: z.ZodOptional<z.ZodBoolean>;
@@ -395,18 +399,18 @@ export declare const manifestV1Schema: z.ZodObject<{
395
399
  surface: z.ZodOptional<z.ZodString>;
396
400
  surfaceDark: z.ZodOptional<z.ZodString>;
397
401
  logo: z.ZodOptional<z.ZodObject<{
398
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
399
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
402
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
403
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
400
404
  alt: z.ZodString;
401
405
  }, z.core.$strict>>;
402
406
  mark: z.ZodOptional<z.ZodObject<{
403
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
404
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
407
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
408
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
405
409
  alt: z.ZodString;
406
410
  }, z.core.$strict>>;
407
411
  avatar: z.ZodOptional<z.ZodObject<{
408
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
409
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
412
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
413
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
410
414
  alt: z.ZodString;
411
415
  }, z.core.$strict>>;
412
416
  theme: z.ZodOptional<z.ZodObject<{
@@ -864,6 +868,11 @@ export declare const manifestV2Schema: z.ZodObject<{
864
868
  webmcp: z.ZodOptional<z.ZodObject<{
865
869
  enabled: z.ZodOptional<z.ZodBoolean>;
866
870
  }, z.core.$strict>>;
871
+ continuity: z.ZodOptional<z.ZodObject<{
872
+ enabled: z.ZodOptional<z.ZodBoolean>;
873
+ windowSeconds: z.ZodOptional<z.ZodNumber>;
874
+ maxRestores: z.ZodOptional<z.ZodNumber>;
875
+ }, z.core.$strict>>;
867
876
  }, z.core.$strict>>>;
868
877
  sessionClaims: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
869
878
  exposeToModel: z.ZodOptional<z.ZodBoolean>;
@@ -878,18 +887,18 @@ export declare const manifestV2Schema: z.ZodObject<{
878
887
  surface: z.ZodOptional<z.ZodString>;
879
888
  surfaceDark: z.ZodOptional<z.ZodString>;
880
889
  logo: z.ZodOptional<z.ZodObject<{
881
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
882
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
890
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
891
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
883
892
  alt: z.ZodString;
884
893
  }, z.core.$strict>>;
885
894
  mark: z.ZodOptional<z.ZodObject<{
886
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
887
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
895
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
896
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
888
897
  alt: z.ZodString;
889
898
  }, z.core.$strict>>;
890
899
  avatar: z.ZodOptional<z.ZodObject<{
891
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
892
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
900
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
901
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
893
902
  alt: z.ZodString;
894
903
  }, z.core.$strict>>;
895
904
  theme: z.ZodOptional<z.ZodObject<{
@@ -1557,6 +1566,11 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1557
1566
  webmcp: z.ZodOptional<z.ZodObject<{
1558
1567
  enabled: z.ZodOptional<z.ZodBoolean>;
1559
1568
  }, z.core.$strict>>;
1569
+ continuity: z.ZodOptional<z.ZodObject<{
1570
+ enabled: z.ZodOptional<z.ZodBoolean>;
1571
+ windowSeconds: z.ZodOptional<z.ZodNumber>;
1572
+ maxRestores: z.ZodOptional<z.ZodNumber>;
1573
+ }, z.core.$strict>>;
1560
1574
  }, z.core.$strict>>>;
1561
1575
  sessionClaims: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1562
1576
  exposeToModel: z.ZodOptional<z.ZodBoolean>;
@@ -1571,18 +1585,18 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1571
1585
  surface: z.ZodOptional<z.ZodString>;
1572
1586
  surfaceDark: z.ZodOptional<z.ZodString>;
1573
1587
  logo: z.ZodOptional<z.ZodObject<{
1574
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
1575
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
1588
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
1589
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
1576
1590
  alt: z.ZodString;
1577
1591
  }, z.core.$strict>>;
1578
1592
  mark: z.ZodOptional<z.ZodObject<{
1579
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
1580
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
1593
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
1594
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
1581
1595
  alt: z.ZodString;
1582
1596
  }, z.core.$strict>>;
1583
1597
  avatar: z.ZodOptional<z.ZodObject<{
1584
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
1585
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
1598
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
1599
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
1586
1600
  alt: z.ZodString;
1587
1601
  }, z.core.$strict>>;
1588
1602
  theme: z.ZodOptional<z.ZodObject<{
@@ -2039,6 +2053,11 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
2039
2053
  webmcp: z.ZodOptional<z.ZodObject<{
2040
2054
  enabled: z.ZodOptional<z.ZodBoolean>;
2041
2055
  }, z.core.$strict>>;
2056
+ continuity: z.ZodOptional<z.ZodObject<{
2057
+ enabled: z.ZodOptional<z.ZodBoolean>;
2058
+ windowSeconds: z.ZodOptional<z.ZodNumber>;
2059
+ maxRestores: z.ZodOptional<z.ZodNumber>;
2060
+ }, z.core.$strict>>;
2042
2061
  }, z.core.$strict>>>;
2043
2062
  sessionClaims: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
2044
2063
  exposeToModel: z.ZodOptional<z.ZodBoolean>;
@@ -2053,18 +2072,18 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
2053
2072
  surface: z.ZodOptional<z.ZodString>;
2054
2073
  surfaceDark: z.ZodOptional<z.ZodString>;
2055
2074
  logo: z.ZodOptional<z.ZodObject<{
2056
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
2057
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
2075
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
2076
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
2058
2077
  alt: z.ZodString;
2059
2078
  }, z.core.$strict>>;
2060
2079
  mark: z.ZodOptional<z.ZodObject<{
2061
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
2062
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
2080
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
2081
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
2063
2082
  alt: z.ZodString;
2064
2083
  }, z.core.$strict>>;
2065
2084
  avatar: z.ZodOptional<z.ZodObject<{
2066
- uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>;
2067
- darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<PackagedAssetReference, unknown, z.core.$ZodTypeInternals<PackagedAssetReference, unknown>>]>>;
2085
+ uri: z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>;
2086
+ darkUri: z.ZodOptional<z.ZodUnion<readonly [z.ZodURL, z.ZodType<import("../assets.js").PackagedAssetReference, unknown, z.core.$ZodTypeInternals<import("../assets.js").PackagedAssetReference, unknown>>]>>;
2068
2087
  alt: z.ZodString;
2069
2088
  }, z.core.$strict>>;
2070
2089
  theme: z.ZodOptional<z.ZodObject<{