@work-shape/catalyst-asset-schemas 0.0.0-stage → 0.8.0-rc.10

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.
package/dist/index.js ADDED
@@ -0,0 +1,2540 @@
1
+ // src/asset-types.ts
2
+ var ASSET_ACCESS_VERBS = ["read", "write", "delete", "publish"];
3
+ var localeCodes = ["en", "de"];
4
+ var REASONING_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
5
+ var SKILL_STARTERS_MAX = 2;
6
+ var AGENT_STARTERS_MAX = 4;
7
+ var SKILL_STARTER_LINE_MAX_LENGTH = 60;
8
+ var SKILL_SUMMARY_MAX_LENGTH = 120;
9
+ var SKILL_ORIGINS = ["instance", "release"];
10
+ var SKILL_RESOURCE_MEDIA_TYPES = [
11
+ "text/markdown",
12
+ "text/plain",
13
+ "application/json",
14
+ "application/yaml"
15
+ ];
16
+ var APP_AUDIENCES = ["self", "workspace", "instance"];
17
+
18
+ // src/contract-values/agent.ts
19
+ var AGENT_ACTIONS = [
20
+ "agent.read",
21
+ "agent.write",
22
+ "agent.publish",
23
+ // Decides a held publish of an agent a workspace owns (WS-PUB-1b).
24
+ "agent.approve",
25
+ "agent.delete",
26
+ // Converse with the agent where it is available (AGENT-USE-1).
27
+ "agent.use"
28
+ ];
29
+
30
+ // src/contract-values/skill.ts
31
+ var SKILL_ACTIONS = [
32
+ "skill.read",
33
+ "skill.write",
34
+ "skill.delete",
35
+ "skill.approve"
36
+ ];
37
+
38
+ // src/contract-values/connection.ts
39
+ var CONNECTION_ACTIONS = [
40
+ "connection.read",
41
+ "connection.use",
42
+ "connection.write",
43
+ "connection.delete",
44
+ "connection.approve"
45
+ ];
46
+
47
+ // src/contract-values/app.ts
48
+ var APP_ACTIONS = [
49
+ "app.read",
50
+ "app.write",
51
+ "app.publish",
52
+ "app.approve",
53
+ "app.delete",
54
+ "app.use"
55
+ ];
56
+
57
+ // src/contract-values/workflow.ts
58
+ var WORKFLOW_ACTIONS = [
59
+ "workflow.read",
60
+ "workflow.write",
61
+ "workflow.publish",
62
+ "workflow.approve",
63
+ "workflow.delete",
64
+ "workflow.use",
65
+ "workflow.read_run_data"
66
+ ];
67
+
68
+ // src/contract-values/data-store.ts
69
+ var DATA_STORE_ACTIONS = [
70
+ "data_store.read",
71
+ "data_store.write",
72
+ "data_store.publish",
73
+ "data_store.delete",
74
+ "data_store.insert",
75
+ "data_store.execute",
76
+ "data_store.records"
77
+ ];
78
+
79
+ // src/contract-values/knowledge-base.ts
80
+ var KNOWLEDGE_BASE_ACTIONS = [
81
+ "knowledge_base.read",
82
+ "knowledge_base.write",
83
+ "knowledge_base.ingest",
84
+ "knowledge_base.publish",
85
+ "knowledge_base.delete",
86
+ "knowledge_base.use"
87
+ ];
88
+
89
+ // src/contract-values/mail-sender.ts
90
+ var MAIL_SENDER_ACTIONS = [
91
+ // Sending e-mail as one sender of the instance (`mail.send`). The `admin` role holds it on
92
+ // the sender `system`; a member only by a grant.
93
+ "mail_sender.use"
94
+ ];
95
+
96
+ // src/contract-values/guardrail.ts
97
+ var GUARDRAIL_ACTIONS = [
98
+ "guardrail.read",
99
+ "guardrail.write",
100
+ "guardrail.publish",
101
+ "guardrail.delete"
102
+ ];
103
+
104
+ // src/contract-values/operations.ts
105
+ var OPERATIONS_ACTIONS = ["operations.approve"];
106
+
107
+ // src/contract-values/feedback.ts
108
+ var FEEDBACK_ACTIONS = [
109
+ // Reading the written feedback on agent messages and marking it handled (LU-4): on the
110
+ // instance, or on one workspace for the agents it owns. No bundle carries it.
111
+ "feedback.review"
112
+ ];
113
+
114
+ // src/contract-values/administration.ts
115
+ var ADMINISTRATION_ACTIONS = [
116
+ "users.manage",
117
+ // Deleting a person's account and their data, beside `users.manage` (RIGHTS-1e, D5). Its
118
+ // default sits with `superadmin` alone.
119
+ "users.delete",
120
+ "usage.view",
121
+ // Setting the spend limits of the instance, of shared workspaces and of users (LU-2).
122
+ // Instance admins hold it; workspace owners do not.
123
+ "limits.manage",
124
+ // Usage by named person beyond one's own (LU-3, limits spec 3.4): the Users view of the
125
+ // instance, and an owner's figures per member of a workspace. A separate right because the
126
+ // works council has a say on it (BetrVG section 87(1) no. 6).
127
+ "usage.view_users",
128
+ "audit.view",
129
+ // Seeing how the instance runs: its background jobs, its Operation Runs, its modules and what
130
+ // it runs on, the Settings group "System" (RIGHTS-1e; UX audit ruling 2). Its default sits
131
+ // with `superadmin` alone, so a customer's admin keeps the audit log and not these pages.
132
+ "system.view",
133
+ // Running a background job again that failed or died (RIGHTS-1e; UX audit ruling 2). Its
134
+ // default sits with `superadmin` alone.
135
+ "jobs.retry",
136
+ "api_access.manage",
137
+ // Creating service principals, giving and taking their rights, enabling and disabling them.
138
+ // Their keys stay with `api_access.manage`.
139
+ "service_principals.manage",
140
+ "agent_models.manage",
141
+ // Editing and resetting the built-in roles `user` and `admin`, and deciding their pending
142
+ // actions (Felix, 2026-10-21). Its default sits with `superadmin` alone.
143
+ "roles.edit_built_in",
144
+ "assets.release"
145
+ ];
146
+
147
+ // src/contract-values/workspace.ts
148
+ var WORKSPACE_ACTIONS = [
149
+ // The two bundles of a workspace: one row each, expanded by the evaluator (`bundleCarries`).
150
+ "builder",
151
+ "publisher"
152
+ ];
153
+
154
+ // src/contract-values.ts
155
+ var AUTH_SCOPE_WILDCARD = "*";
156
+ var CHAT_SESSION_AUTH_SCOPES = [
157
+ "me:read",
158
+ "me:delete",
159
+ "config:read",
160
+ "conversation:read",
161
+ "conversation:write",
162
+ "run:start",
163
+ "run:observe",
164
+ "run:cancel",
165
+ "run:command"
166
+ ];
167
+ var FIRST_PARTY_AUTH_SCOPES = [
168
+ AUTH_SCOPE_WILDCARD,
169
+ ...CHAT_SESSION_AUTH_SCOPES,
170
+ "collaboration_workspace:read",
171
+ "collaboration_workspace:manage",
172
+ "me:write",
173
+ "governance:read",
174
+ "governance:write",
175
+ "user_admin:read",
176
+ "user_admin:write",
177
+ "api_access:read",
178
+ "api_access:write",
179
+ "config_assets:read",
180
+ "config_assets:write",
181
+ // Moving the published pointer of an asset. A credential that writes drafts with
182
+ // `config_assets:write` publishes none of them without this one.
183
+ "config_assets:publish",
184
+ "config_assets:release",
185
+ // The rows of a Data Store: reading them, and adding or loading them. The definition of a
186
+ // store and its migrations stay under `config_assets:*`. A scope caps what a key may be
187
+ // used for; whether its holder may do it is decided by the grants.
188
+ "data_store_rows:read",
189
+ "data_store_rows:write"
190
+ ];
191
+ var ACTIONS = [
192
+ ...AGENT_ACTIONS,
193
+ ...SKILL_ACTIONS,
194
+ ...CONNECTION_ACTIONS,
195
+ ...APP_ACTIONS,
196
+ ...WORKFLOW_ACTIONS,
197
+ ...DATA_STORE_ACTIONS,
198
+ ...KNOWLEDGE_BASE_ACTIONS,
199
+ ...MAIL_SENDER_ACTIONS,
200
+ ...GUARDRAIL_ACTIONS,
201
+ ...OPERATIONS_ACTIONS,
202
+ ...FEEDBACK_ACTIONS,
203
+ ...ADMINISTRATION_ACTIONS,
204
+ ...WORKSPACE_ACTIONS
205
+ ];
206
+ var APP_ERROR_STATUS_CODES = {
207
+ BAD_REQUEST: 400,
208
+ UNAUTHENTICATED: 401,
209
+ FORBIDDEN: 403,
210
+ NOT_FOUND: 404,
211
+ CONFLICT: 409,
212
+ REVISION_CONFLICT: 412,
213
+ PRECONDITION_REQUIRED: 428,
214
+ TIMEOUT: 504,
215
+ VALIDATION_FAILED: 422,
216
+ RATE_LIMITED: 429,
217
+ POLICY_DENIED: 403,
218
+ GUARDRAIL_BLOCKED: 403,
219
+ DECLINED: 403,
220
+ IDEMPOTENCY_KEY_REUSED: 409,
221
+ OPERATION_IN_PROGRESS: 409,
222
+ OPERATION_EXPIRED: 409,
223
+ OUTPUT_NOT_RETAINED: 409,
224
+ INTERNAL: 500
225
+ };
226
+ var IDEMPOTENCY_KEY_MAX_LENGTH = 255;
227
+ var PROVIDER_PORTS = ["models", "mail", "objectStorage", "sandbox", "secrets"];
228
+ var PROVIDER_REGIONS = ["eu", "global"];
229
+ var PROVIDER_CHECK_ERROR_CLASSES = [
230
+ "unreachable",
231
+ "timeout",
232
+ "access_denied",
233
+ "not_found",
234
+ // The bucket an object store is configured with does not exist. The check creates none.
235
+ "bucket_missing",
236
+ "rejected",
237
+ "failed"
238
+ ];
239
+ var CONNECTION_NAME_PATTERN = /^[a-z][a-z0-9]*([_-][a-z0-9]+)*$/u;
240
+ var CONNECTION_NAME_MAX_LENGTH = 64;
241
+ var GUARDRAIL_NAME_PATTERN = /^[a-z][a-z0-9]*([_-][a-z0-9]+)*$/u;
242
+ var GUARDRAIL_NAME_MAX_LENGTH = 64;
243
+ var CONNECTION_EXPOSURES = ["agent", "bridge", "workflow", "outside"];
244
+ var CONNECTION_HEALTH_STATES = [
245
+ "unknown",
246
+ "ok",
247
+ "failed",
248
+ "needs_configuration",
249
+ "secret_unreadable"
250
+ ];
251
+ var GRANT_HOLDER_KINDS = ["user", "service_principal", "role", "group"];
252
+ var GRANT_SCOPE_KINDS = ["instance", "workspace", "asset"];
253
+ var ROLE_GRANT_SCOPE_KINDS = [
254
+ "instance",
255
+ "workspace",
256
+ "asset"
257
+ ];
258
+ var ROLE_PENDING_CHANGES = ["added", "removed"];
259
+ var ROLE_PENDING_DECISIONS = ["apply", "dismiss"];
260
+ var GRANT_EFFECTS = ["allow", "deny"];
261
+ var ACCESS_SOURCES = ["role", "legacy_ref", "grant", "membership"];
262
+ var POLICY_VALUES = ["allow", "confirm", "approval", "deny"];
263
+ var AUTH_PRINCIPAL_KINDS = ["user", "service"];
264
+ var ADMINISTERED_USER_STATUSES = ["active", "disabled", "deleting"];
265
+ var SERVICE_PRINCIPAL_STATUSES = ["active", "disabled"];
266
+ var WORKFLOW_RIGHT_NEEDED_FOR = ["publish", "run"];
267
+ var WORKFLOW_RIGHTS_REVISIONS = ["draft", "published"];
268
+ var WORKFLOW_RUN_ACCOUNT_STATUSES = [...SERVICE_PRINCIPAL_STATUSES, "unknown"];
269
+ var WORKFLOW_RIGHT_REFUSALS = [
270
+ "not_grantable",
271
+ "not_administrator",
272
+ "not_held",
273
+ "account_unavailable",
274
+ "asset_unavailable",
275
+ "not_visible"
276
+ ];
277
+ var SERVICE_PRINCIPAL_PERMISSIONS = [
278
+ "config_assets.read",
279
+ "config_assets.release"
280
+ ];
281
+ var API_CREDENTIAL_SCOPES = [
282
+ "config_assets:read",
283
+ "config_assets:release"
284
+ ];
285
+ var APP_ERROR_CODES = [
286
+ "BAD_REQUEST",
287
+ "UNAUTHENTICATED",
288
+ "FORBIDDEN",
289
+ "NOT_FOUND",
290
+ "CONFLICT",
291
+ "REVISION_CONFLICT",
292
+ "PRECONDITION_REQUIRED",
293
+ "TIMEOUT",
294
+ "VALIDATION_FAILED",
295
+ "RATE_LIMITED",
296
+ "POLICY_DENIED",
297
+ "GUARDRAIL_BLOCKED",
298
+ "DECLINED",
299
+ "IDEMPOTENCY_KEY_REUSED",
300
+ "OPERATION_IN_PROGRESS",
301
+ "OPERATION_EXPIRED",
302
+ "OUTPUT_NOT_RETAINED",
303
+ "INTERNAL"
304
+ ];
305
+ var OPERATION_EFFECTS = ["reading", "changing"];
306
+ var CATALOGUE_PARTS = ["tools", "source"];
307
+ var CATALOGUE_CATEGORIES = ["mail", "files", "accounting", "databases", "other"];
308
+ var OPERATION_TARGETS = ["live", "test", "dry_run"];
309
+ var OPERATION_RUN_STATUSES = [
310
+ "running",
311
+ "pending_confirmation",
312
+ "pending_approval",
313
+ "done",
314
+ "failed",
315
+ "denied",
316
+ "expired"
317
+ ];
318
+ var OPERATION_ORIGIN_KINDS = [
319
+ "agent",
320
+ "user",
321
+ "cli",
322
+ "mcp",
323
+ "app",
324
+ "workflow",
325
+ "schedule"
326
+ ];
327
+ var OPERATION_RUN_DECISION_MODES = [
328
+ "direct",
329
+ "confirmed",
330
+ "approved",
331
+ "declined"
332
+ ];
333
+ var OPERATION_RUN_DECISION_REASONS = [
334
+ "inherited_approval_not_applied",
335
+ "workflow_publish",
336
+ "approved_by_caller"
337
+ ];
338
+ var OPERATION_DENIAL_REASONS = [
339
+ "no_grant",
340
+ "denied",
341
+ "unknown_action",
342
+ "holder_inactive",
343
+ "holder_not_administrable",
344
+ "user_only",
345
+ "outside_key_scope"
346
+ ];
347
+ var APPROVAL_REQUEST_STATUSES = [
348
+ "pending",
349
+ "approved",
350
+ "rejected",
351
+ "changes_requested",
352
+ "superseded",
353
+ "withdrawn",
354
+ "reverted"
355
+ ];
356
+ var APPROVAL_CHECK_STATUSES = ["passed", "warned", "blocked"];
357
+ var APPROVAL_EXECUTIONS = [
358
+ "queued",
359
+ "done",
360
+ "failed",
361
+ "interrupted",
362
+ "refused",
363
+ "expired",
364
+ // A confirmation in the Inbox whose Allow left the call waiting for an approver: it ended
365
+ // here, and the call waits as the approval request `approvalRequestId` of `applyResult`.
366
+ "held"
367
+ ];
368
+ var SKILL_CHANGE_TYPES = ["replace", "add", "new_resource"];
369
+ var GUARDRAIL_OUTCOMES = ["allow", "warn", "require_approval", "block"];
370
+ var APP_MODES = ["published", "draft"];
371
+ var ASSET_NAME_REFUSAL_REASONS = ["name_invalid", "name_taken"];
372
+ var ASSET_SYNC_CHANGE_TYPES = ["put", "delete"];
373
+ var ASSET_LIFECYCLES = ["active", "draft_published"];
374
+ var ASSET_REPRESENTATIONS = ["config", "files"];
375
+ var CONFIG_ASSET_KINDS = ["agent", "skill"];
376
+ var CONFIG_ASSET_CHANGE_OPERATIONS = ["create", "update", "delete", "revert"];
377
+ var AGENT_AVAILABILITY_MODES = ["all", "selected"];
378
+ var AGENT_USE_SETTINGS = ["everyone", "granted"];
379
+ var AGENT_EDITABLE_FIELDS = [
380
+ "displayName",
381
+ "description",
382
+ "welcomeMessage",
383
+ "welcomeSubtitle",
384
+ "instructions",
385
+ "modelBindingId",
386
+ "reasoningEffort",
387
+ "maxSteps",
388
+ "toolNames",
389
+ "skillNames",
390
+ "knowledgeBases",
391
+ "initialPrompts"
392
+ ];
393
+ var ASSET_REPO_BUNDLE_KINDS = ["full", "incremental"];
394
+ var WORKSPACE_FILE_KINDS = ["page", "upload", "generated_file"];
395
+ var WORKSPACE_VISIBILITIES = ["discoverable", "private"];
396
+ var WORKSPACE_MEMBERSHIP_ROLES = ["owner", "admin", "member"];
397
+ var WORKSPACE_ACCENT_COLORS = [
398
+ "garnet",
399
+ "ruby",
400
+ "mahogany",
401
+ "copper",
402
+ "amber",
403
+ "olive",
404
+ "jade",
405
+ "emerald",
406
+ "teal",
407
+ "turquoise",
408
+ "azure",
409
+ "sapphire",
410
+ "indigo",
411
+ "violet",
412
+ "magenta",
413
+ "rose",
414
+ "stone",
415
+ "slate"
416
+ ];
417
+ var COLLABORATION_WORKSPACE_KINDS = ["personal", "shared"];
418
+ var WORKSPACE_ACCESS_STATES = ["member", "request_pending", "can_request"];
419
+ var DELETION_STATES = ["deleting", "deleted"];
420
+ var WORKSPACE_SECTIONS = ["agents", "apps"];
421
+ var MODEL_USAGE_TIERS = [
422
+ "very_low",
423
+ "low",
424
+ "moderate",
425
+ "elevated",
426
+ "high",
427
+ "very_high"
428
+ ];
429
+ var THEME_MODE_PREFERENCES = ["light", "dark", "system"];
430
+ var TOOL_GROUPS = [
431
+ "documents",
432
+ "web",
433
+ "files",
434
+ "results",
435
+ "skills",
436
+ "platform",
437
+ "instance"
438
+ ];
439
+ var INFRASTRUCTURE_SECRET_STATES = ["set", "missing"];
440
+ var INFRASTRUCTURE_WITHHELD_FIELDS = ["endpointHost", "bucket"];
441
+ var OPENAI_COMPATIBLE_APIS = ["chat_completions", "responses"];
442
+ var MODEL_PROVIDER_AUTH_MODES = ["bearer", "api-key"];
443
+ var CONVERSATION_VISIBILITIES = ["workspace", "private"];
444
+ var CONVERSATION_KINDS = ["chat", "run_thread"];
445
+ var WEB_SOURCE_PROVIDERS = [
446
+ "openai-native",
447
+ "serper",
448
+ "tavily",
449
+ "firecrawl",
450
+ "browserbase",
451
+ "direct"
452
+ ];
453
+ var CHAT_MESSAGE_ROLES = ["user", "assistant", "system", "tool"];
454
+ var CONVERSATION_ATTACHMENT_STATUSES = [
455
+ "queued",
456
+ "preprocessing",
457
+ "ready",
458
+ "failed",
459
+ "unsupported",
460
+ "deleted"
461
+ ];
462
+ var ATTACHMENT_CREATE_OUTCOMES = ["created", "already_available"];
463
+ var STRUCTURED_DATA_REVIEW_REASONS = ["uncertain", "conflicting"];
464
+ var FOLLOW_UP_MODES = ["queue", "steer"];
465
+ var FOLLOW_UP_STATUSES = ["pending", "dispatched", "consumed", "cancelled"];
466
+ var AGENT_RUN_STATUSES = [
467
+ "queued",
468
+ "running",
469
+ "waiting_for_decision",
470
+ "waiting_for_subagents",
471
+ "cancelling",
472
+ "completed",
473
+ "cancelled",
474
+ "failed"
475
+ ];
476
+ var AGENT_RUN_FAILURE_CATEGORIES = [
477
+ "app_error",
478
+ "internal_error",
479
+ "runtime_interrupted",
480
+ "abort_error",
481
+ "unknown_error"
482
+ ];
483
+ var TOOL_INPUT_PARSE_ERROR_CODES = ["invalid_json", "invalid_text"];
484
+ var WAITING_OPERATION_RUN_STATUSES = [
485
+ "pending_confirmation",
486
+ "pending_approval"
487
+ ];
488
+ var OPERATION_CONFIRMATION_DECISIONS = ["confirm", "decline"];
489
+ var PERSON_POLICY_SETTINGS = ["always_allow", "ask", "never"];
490
+ var OPERATION_CHANGE_CLASSES = ["reversible", "irreversible", "outward"];
491
+ var TOOL_DECISION_MODES = ["confirm", "approval"];
492
+ var TOOL_DECISION_OUTCOMES = ["confirmed", "declined", "expired", "cancelled"];
493
+ var TOOL_CALL_STATES = [
494
+ "input_available",
495
+ "waiting_for_decision",
496
+ "output_available",
497
+ "output_error"
498
+ ];
499
+ var SUPPORTED_IMAGE_MIME_TYPES = [
500
+ "image/png",
501
+ "image/jpeg",
502
+ "image/webp",
503
+ "image/gif"
504
+ ];
505
+ var ARTIFACT_PREVIEW_IMAGE_FORMATS = ["png", "webp", "jpeg"];
506
+ var ARTIFACT_PREVIEW_STATUSES = ["ready", "pending", "failed", "unsupported"];
507
+ var WORKSPACE_COMMAND_STATUSES = [
508
+ "queued",
509
+ "running",
510
+ "cancelling",
511
+ "completed",
512
+ "failed",
513
+ "cancelled"
514
+ ];
515
+ var TOOL_DISPLAY_MODES = ["inline", "side_panel", "fullscreen"];
516
+ var JOB_STATUSES = [
517
+ "queued",
518
+ "running",
519
+ "succeeded",
520
+ "failed",
521
+ "dead",
522
+ "cancelled"
523
+ ];
524
+ var AUDIT_ACTOR_KINDS = ["user", "assistant", "service", "system"];
525
+ var AUDIT_TIERS = ["governance", "workflow", "runtime", "telemetry"];
526
+ var AUDIT_OUTCOMES = ["success", "failed", "denied", "warning"];
527
+ var MODEL_USAGE_EVENT_STATUSES = ["pending", "settled", "failed", "abandoned"];
528
+ var MODEL_USAGE_SOURCES = ["provider_reported", "not_reported", "estimated"];
529
+ var USAGE_COST_STATUSES = ["settled", "incomplete", "unpriced"];
530
+ var CONNECTION_OPERATION_STATUSES = [
531
+ "ready",
532
+ /** Accepted, a discovering type, and no discovery has pinned it yet. */
533
+ "awaiting_discovery",
534
+ /** The catalog's fingerprint differs from the accepted one. */
535
+ "needs_review",
536
+ /** Accepted, and the last discovery did not list it or listed a schema nothing can check. */
537
+ "unknown",
538
+ "disabled"
539
+ ];
540
+ var CONNECTION_SECRET_STATES = ["set", "not_set", "unreadable"];
541
+ var CONNECTOR_TEST_STATUSES = [
542
+ "ready",
543
+ "unauthorized",
544
+ "network_denied",
545
+ "unavailable",
546
+ /** The server asks for an OAuth sign-in, or the Connection signs in and nobody has. */
547
+ "oauth_required"
548
+ ];
549
+ var CONNECTION_CREDENTIAL_MODES = ["shared", "user"];
550
+ var CONNECTION_BINDING_STATES = ["connected", "needs_reconnect", "revoked"];
551
+ var CONNECTION_PROPOSAL_STATES = ["ready", "needs_setup"];
552
+ var CONNECTION_PROPOSAL_BINDING_STATES = [
553
+ "connected",
554
+ "needs_reconnect",
555
+ "not_connected"
556
+ ];
557
+ var CONNECTION_SIGN_IN_NEEDS = ["not_connected", "needs_reconnect"];
558
+ var CONNECTION_OAUTH_REGISTRATIONS = ["dcr", "preregistered", "managed"];
559
+ var CONNECTION_PROVIDER_REVOCATIONS = ["confirmed", "failed", "not_offered"];
560
+ var CONNECTION_ORIGINS = ["release", "runtime"];
561
+ var CONNECTION_NETWORKS = ["public", "private"];
562
+ var DATA_STORE_SCALAR_TYPES = [
563
+ "text",
564
+ "integer",
565
+ "number",
566
+ "boolean",
567
+ "date",
568
+ "timestamp"
569
+ ];
570
+ var DATA_STORE_LOAD_CONFLICT_MODES = ["fail", "skip", "update"];
571
+ var DATA_STORE_INSERT_CONFLICT_MODES = [
572
+ "fail",
573
+ "skip"
574
+ ];
575
+ var DATA_STORE_CONDITIONS = [
576
+ "server_databases_open",
577
+ "sessions_open",
578
+ "temp_files_unbounded"
579
+ ];
580
+ var DATA_STORE_STATUSES = ["provisioning", "ready", "retired"];
581
+ var DATA_STORE_MIGRATION_OUTCOMES = ["none", "pending", "applied", "failed"];
582
+ var KNOWLEDGE_BASE_STATUSES = ["unchecked", "preparing", "ok", "needs_attention"];
583
+ var KNOWLEDGE_EMBEDDING_STATES = [
584
+ "current",
585
+ "reindex_needed",
586
+ "reindex_available",
587
+ "reindexing",
588
+ "none"
589
+ ];
590
+ var KNOWLEDGE_DOCUMENT_STATES = ["pending", "indexed", "failed"];
591
+ var KNOWLEDGE_FILE_MAX_BYTES = 25 * 1024 * 1024;
592
+ var KNOWLEDGE_DOCUMENT_FAILURE_CODES = [
593
+ // The extractor does not read the file's format.
594
+ "knowledge_file_format_unsupported",
595
+ // The file is over a limit of the extraction: its size or the size of its text.
596
+ "knowledge_file_over_limit",
597
+ // The file is corrupt, encrypted, or not the format it claims.
598
+ "knowledge_file_unreadable",
599
+ // The copy the Knowledge Base owns, or its bytes, are gone.
600
+ "knowledge_file_missing",
601
+ // Extraction failed on every attempt.
602
+ "knowledge_extraction_failed",
603
+ // A PDF or DOCX on an instance without document processing.
604
+ "knowledge_file_format_unavailable",
605
+ // A text file whose bytes are not text.
606
+ "knowledge_text_unreadable",
607
+ // No text to search, such as a scanned PDF without a text layer.
608
+ "knowledge_text_empty",
609
+ // Indexing failed on every attempt.
610
+ "knowledge_index_failed",
611
+ // A PDF or DOCX with more pages than `knowledge.maxPagesPerDocument`, counted before its text
612
+ // is read.
613
+ "knowledge_file_too_many_pages",
614
+ // A built-in or Workflow processor returned output outside its contract.
615
+ "knowledge_processor_output_invalid",
616
+ // Conversion exceeded its page-aware deadline.
617
+ "knowledge_conversion_timeout"
618
+ ];
619
+ var KNOWLEDGE_DOCUMENT_WAIT_CODES = [
620
+ // A usage limit of the instance or the workspace refuses the embedding calls. Indexing goes
621
+ // on when the limit resets or is raised.
622
+ "knowledge_usage_limit_reached"
623
+ ];
624
+ var KNOWLEDGE_SOURCE_FAILURE_CODES = [
625
+ // The source did not answer.
626
+ "knowledge_source_unreachable",
627
+ // The credential or the account's access was refused for the whole source.
628
+ "knowledge_source_refused",
629
+ // A fetch failed on every attempt.
630
+ "knowledge_fetch_failed",
631
+ // The Knowledge Base holds its document limit; the listing stopped discovering there.
632
+ "knowledge_source_limit_reached",
633
+ "knowledge_item_invalid",
634
+ "knowledge_fetch_not_allowed",
635
+ // The Workflow run that called `ingest` ended before the pass did; what it wrote stays.
636
+ "knowledge_ingest_cancelled",
637
+ // A person removed the item by hand: no pass puts it back until a publisher lifts the hold.
638
+ "knowledge_item_removed"
639
+ ];
640
+ var KNOWLEDGE_SOURCE_ITEM_FAILURE_CODES = [
641
+ ...KNOWLEDGE_SOURCE_FAILURE_CODES,
642
+ "knowledge_file_over_limit",
643
+ "knowledge_file_format_unsupported"
644
+ ];
645
+ var KNOWLEDGE_SOURCE_ITEM_STATES = [
646
+ "discovered",
647
+ "fetched",
648
+ "failed",
649
+ "withdrawn"
650
+ ];
651
+ var KNOWLEDGE_SYNC_MODES = ["initial", "changes", "full", "ingest"];
652
+ var KNOWLEDGE_SYNC_RUN_STATES = ["running", "done", "failed", "superseded"];
653
+ var KNOWLEDGE_SYNC_COUNTS = [
654
+ "discovered",
655
+ "added",
656
+ "changed",
657
+ "moved",
658
+ "withdrawn",
659
+ "failed",
660
+ "skipped"
661
+ ];
662
+ var KNOWLEDGE_SEARCH_SIGNALS = ["semantic", "keyword", "title"];
663
+ var DATABASE_RELATION_TYPES = [
664
+ "table",
665
+ "view",
666
+ "materialized_view",
667
+ "foreign_table"
668
+ ];
669
+ var WORKFLOW_RUN_STATUSES = [
670
+ "continued",
671
+ "queued",
672
+ "running",
673
+ "waiting",
674
+ "done",
675
+ "failed",
676
+ "cancelled",
677
+ "limit_reached"
678
+ ];
679
+ var WORKFLOW_STEP_TYPES = [
680
+ "trigger",
681
+ "operation",
682
+ "loop",
683
+ "code",
684
+ "output",
685
+ "agent",
686
+ "notify",
687
+ /** Starts another Workflow as a child run and waits for it. */
688
+ "workflow"
689
+ ];
690
+ var WORKFLOW_EXECUTED_STEP_TYPES = [...WORKFLOW_STEP_TYPES];
691
+ var WORKFLOW_RESERVED_STEP_TYPES = [
692
+ /** Reserved in the contract: drawn, and run by no engine yet. */
693
+ "condition",
694
+ "parallel"
695
+ ];
696
+ var WORKFLOW_TRIGGER_KINDS = ["manual", "schedule", "parent"];
697
+ var NOTIFY_CHANNELS = ["inbox", "mail"];
698
+ var WORKFLOW_STEP_SOURCE_KINDS = [
699
+ "connection",
700
+ "data_store",
701
+ "knowledge_base",
702
+ "workflow",
703
+ "mail_sender",
704
+ "other"
705
+ ];
706
+ var OPERATION_SOURCE_KINDS = [
707
+ "connection",
708
+ "data_store",
709
+ "knowledge_base",
710
+ "workflow",
711
+ "other"
712
+ ];
713
+ var PRINCIPAL_HOLDER_KINDS = [
714
+ "user",
715
+ "service_principal"
716
+ ];
717
+ var ASSET_OWNER_KINDS = [
718
+ "instance",
719
+ "workspace"
720
+ ];
721
+ var READING_POLICY_VALUES = ["allow", "deny"];
722
+ var CONNECTION_OPERATION_POLICIES = [
723
+ "deny",
724
+ "approval"
725
+ ];
726
+ var WORKFLOW_RUN_MODES = ["live", "test"];
727
+ var WORKFLOW_TEST_REVISIONS = ["draft", "published"];
728
+ var APP_ACTION_CALL_STATUSES = [
729
+ "done",
730
+ "pending_approval"
731
+ ];
732
+ var OPERATIONS_AUDIENCES = [
733
+ "workflow",
734
+ "app"
735
+ ];
736
+ var DECIDED_APPROVAL_REQUEST_STATUSES = [
737
+ "approved",
738
+ "rejected",
739
+ "changes_requested",
740
+ "superseded",
741
+ "withdrawn",
742
+ "reverted"
743
+ ];
744
+ var ENDED_APPROVAL_EXECUTIONS = [
745
+ "done",
746
+ "failed",
747
+ "interrupted",
748
+ "refused",
749
+ "expired",
750
+ "held"
751
+ ];
752
+ var GUARDRAIL_HIT_OUTCOMES = [
753
+ "warn",
754
+ "require_approval",
755
+ "block"
756
+ ];
757
+ var APPROVAL_CHECK_FAILURE_OUTCOMES = [
758
+ "warn",
759
+ "block"
760
+ ];
761
+ var THEME_MODES = ["light", "dark"];
762
+ var USER_STATUSES = [
763
+ "active",
764
+ "disabled"
765
+ ];
766
+ var MESSAGE_FINISH_STATUSES = [
767
+ "completed",
768
+ "cancelled"
769
+ ];
770
+ var ENDED_AGENT_RUN_STATUSES = [
771
+ "completed",
772
+ "cancelled",
773
+ "failed"
774
+ ];
775
+ var ACTIVE_AGENT_RUN_STATUSES = [
776
+ "queued",
777
+ "running",
778
+ "waiting_for_decision",
779
+ "waiting_for_subagents",
780
+ "cancelling"
781
+ ];
782
+ var ARTIFACT_PREVIEW_IMAGE_MIME_TYPES = [
783
+ "image/png",
784
+ "image/jpeg",
785
+ "image/webp"
786
+ ];
787
+ var LIVE_JOB_STATUSES = ["queued", "running"];
788
+ var FAILED_JOB_STATUSES = ["failed", "dead"];
789
+ var AUDIT_EVENT_STATUSES = [
790
+ "success",
791
+ "failed",
792
+ "denied"
793
+ ];
794
+ var LISTED_DATA_STORE_STATUSES = [
795
+ "provisioning",
796
+ "ready"
797
+ ];
798
+ var KNOWLEDGE_CHECK_STATUSES = [
799
+ "preparing",
800
+ "ok",
801
+ "needs_attention"
802
+ ];
803
+ var WORKFLOW_STEP_RUN_STATUSES = [
804
+ "queued",
805
+ "running",
806
+ "waiting",
807
+ "done",
808
+ "failed",
809
+ "cancelled"
810
+ ];
811
+ var WORKFLOW_ENDED_STATUSES = [
812
+ "continued",
813
+ "done",
814
+ "failed",
815
+ "cancelled",
816
+ "limit_reached"
817
+ ];
818
+ var MANAGED_FILE_STATUSES = ["available", "released", "deleted"];
819
+ var WORKFLOW_KINDS = ["process", "data"];
820
+ var WORKFLOW_DATASET_DOWNLOAD_FORMATS = ["jsonl", "csv"];
821
+ var WORKSPACE_USE_ASSET_KINDS = ["knowledge_base", "connection"];
822
+ var PUBLISHED_DATA_CONSUMER_KINDS = ["app", "workflow", "knowledge_base"];
823
+ var SCHEDULED_START_STATES = ["active", "paused"];
824
+ var AGENT_PREVIEW_SOURCES = ["draft", "live"];
825
+
826
+ // src/schemas.ts
827
+ import { z } from "zod";
828
+
829
+ // src/yaml-bounds.ts
830
+ function yamlValueIssue(value, maxDepth = Number.POSITIVE_INFINITY) {
831
+ const seen = /* @__PURE__ */ new Set();
832
+ const open = [{ value, depth: 0 }];
833
+ let deepest = 0;
834
+ for (let next = open.pop(); next !== void 0; next = open.pop()) {
835
+ if (typeof next.value !== "object" || next.value === null) continue;
836
+ if (seen.has(next.value)) return "alias";
837
+ seen.add(next.value);
838
+ deepest = Math.max(deepest, next.depth + 1);
839
+ for (const child of Array.isArray(next.value) ? next.value : Object.values(next.value)) {
840
+ open.push({ value: child, depth: next.depth + 1 });
841
+ }
842
+ }
843
+ return deepest > maxDepth ? "depth" : void 0;
844
+ }
845
+ function yamlValueIssueSentence(issue, maxDepth) {
846
+ return issue === "alias" ? "it uses a YAML anchor with an alias or a merge key, which is not read: write the value out where it is used" : `it nests deeper than ${maxDepth ?? "its reader takes"} levels`;
847
+ }
848
+
849
+ // src/schemas.ts
850
+ var providerRegionSchema = z.string().trim().min(1).max(32);
851
+ var localizedStringMapSchema = z.object({
852
+ en: z.string().min(1).optional(),
853
+ de: z.string().min(1).optional()
854
+ }).strict().refine((value) => value.en !== void 0 || value.de !== void 0, {
855
+ message: "At least one localized value is required"
856
+ });
857
+ var localizedStringSchema = z.union([z.string().min(1), localizedStringMapSchema]);
858
+ var SKILL_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.-]*$/u;
859
+ var SKILL_NAME_RULE = "Skill name must start with a letter or a number and contain only letters, numbers, dots, underscores, or hyphens";
860
+ var SKILL_PORTABLE_NAME_MAX_CHARS = 64;
861
+ var SKILL_PORTABLE_DESCRIPTION_MAX_CHARS = 1024;
862
+ var SKILL_PORTABLE_NAME_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/u;
863
+ function skillPortabilityIssues(skill) {
864
+ const issues = [];
865
+ if (typeof skill.name === "string" && (!SKILL_PORTABLE_NAME_PATTERN.test(skill.name) || skill.name.length > SKILL_PORTABLE_NAME_MAX_CHARS)) {
866
+ issues.push({
867
+ code: "skill_name_not_portable",
868
+ message: `The name '${skill.name}' is outside the public skill convention: lowercase letters, digits and single hyphens, at most ${SKILL_PORTABLE_NAME_MAX_CHARS} characters. The skill works here and may not be taken as it is elsewhere.`
869
+ });
870
+ }
871
+ if (typeof skill.description === "string" && skill.description.length > SKILL_PORTABLE_DESCRIPTION_MAX_CHARS) {
872
+ issues.push({
873
+ code: "skill_description_not_portable",
874
+ message: `The description has ${skill.description.length} characters. The public skill convention takes at most ${SKILL_PORTABLE_DESCRIPTION_MAX_CHARS}.`
875
+ });
876
+ }
877
+ return issues;
878
+ }
879
+ var skillNameSchema = z.string().min(1).regex(SKILL_NAME_PATTERN, { message: SKILL_NAME_RULE });
880
+ var skillResourcePathSchema = z.string().min(1).superRefine((path, context) => {
881
+ const segments = path.split("/");
882
+ if (path.startsWith("/") || /^[A-Za-z]:/u.test(path) || path.includes("\\") || /[\u0000-\u001f\u007f]/u.test(path) || segments.some((segment) => segment === "" || segment === "." || segment === "..")) {
883
+ context.addIssue({
884
+ code: "custom",
885
+ message: "Skill resource path must be a normalized relative path"
886
+ });
887
+ }
888
+ if (path.toLowerCase() === "skill.md" || path.toLowerCase().endsWith("/skill.md")) {
889
+ context.addIssue({
890
+ code: "custom",
891
+ message: "SKILL.md is the skill root and cannot also be a resource"
892
+ });
893
+ }
894
+ });
895
+ function skillResourceMediaTypeForPath(path) {
896
+ const extension = path.slice(path.lastIndexOf(".")).toLowerCase();
897
+ switch (extension) {
898
+ case ".md":
899
+ return "text/markdown";
900
+ case ".txt":
901
+ return "text/plain";
902
+ case ".json":
903
+ return "application/json";
904
+ case ".yaml":
905
+ case ".yml":
906
+ return "application/yaml";
907
+ default:
908
+ return void 0;
909
+ }
910
+ }
911
+ var skillResourceConfigSchema = z.object({
912
+ path: skillResourcePathSchema,
913
+ mediaType: z.enum(SKILL_RESOURCE_MEDIA_TYPES),
914
+ content: z.string().refine((content) => !content.includes("\0"), {
915
+ message: "Skill resources must contain text, not binary data"
916
+ })
917
+ }).superRefine((resource, context) => {
918
+ const expectedMediaType = skillResourceMediaTypeForPath(resource.path);
919
+ if (!expectedMediaType) {
920
+ context.addIssue({
921
+ code: "custom",
922
+ path: ["path"],
923
+ message: "Unsupported skill resource extension"
924
+ });
925
+ } else if (resource.mediaType !== expectedMediaType) {
926
+ context.addIssue({
927
+ code: "custom",
928
+ path: ["mediaType"],
929
+ message: `Skill resource '${resource.path}' must use media type '${expectedMediaType}'`
930
+ });
931
+ }
932
+ });
933
+ var starterLineSchema = localizedStringSchema.refine(
934
+ (value) => (typeof value === "string" ? [value] : Object.values(value)).every(
935
+ (line) => line.length <= SKILL_STARTER_LINE_MAX_LENGTH && !/[\r\n]/u.test(line)
936
+ ),
937
+ { message: `Must be one line of at most ${SKILL_STARTER_LINE_MAX_LENGTH} characters` }
938
+ );
939
+ var skillStarterSchema = z.strictObject({
940
+ title: starterLineSchema,
941
+ hint: starterLineSchema.optional(),
942
+ prompt: localizedStringSchema,
943
+ tools: z.array(z.string().min(1)).optional()
944
+ });
945
+ var SKILL_FRONTMATTER_MAX_BYTES = 8192;
946
+ var SKILL_FRONTMATTER_MAX_DEPTH = 8;
947
+ var SKILL_FRONTMATTER_FIELDS = [
948
+ "name",
949
+ "title",
950
+ "description",
951
+ "summary",
952
+ "starters"
953
+ ];
954
+ var skillFileEntrySchema = z.object({
955
+ path: z.string().min(1),
956
+ sha256: z.string().regex(/^[0-9a-f]{64}$/u),
957
+ bytes: z.number().int().min(0),
958
+ mediaType: z.string().min(1)
959
+ });
960
+ var skillConfigObjectSchema = z.object({
961
+ name: skillNameSchema,
962
+ title: z.string().min(1),
963
+ description: z.string().min(1),
964
+ summary: z.string().min(1).max(SKILL_SUMMARY_MAX_LENGTH, {
965
+ message: `Skill summary must be at most ${SKILL_SUMMARY_MAX_LENGTH} characters`
966
+ }).refine((summary) => !/[\r\n]/u.test(summary), {
967
+ message: "Skill summary must be one line"
968
+ }).optional(),
969
+ starters: z.array(skillStarterSchema).max(SKILL_STARTERS_MAX, {
970
+ message: `A skill carries at most ${SKILL_STARTERS_MAX} starters`
971
+ }).optional(),
972
+ content: z.string().min(1),
973
+ resources: z.array(skillResourceConfigSchema).optional(),
974
+ files: z.array(skillFileEntrySchema).optional(),
975
+ frontmatter: z.record(z.string(), z.unknown()).optional().refine(
976
+ (frontmatter) => frontmatter === void 0 || yamlValueIssue(frontmatter, SKILL_FRONTMATTER_MAX_DEPTH) === void 0 && JSON.stringify(frontmatter).length <= SKILL_FRONTMATTER_MAX_BYTES,
977
+ {
978
+ message: `Skill frontmatter holds at most ${SKILL_FRONTMATTER_MAX_BYTES} characters as JSON, nested at most ${SKILL_FRONTMATTER_MAX_DEPTH} levels`
979
+ }
980
+ ),
981
+ origin: z.literal("release").optional(),
982
+ icon: z.string().min(1).optional()
983
+ });
984
+ var skillConfigSchema = skillConfigObjectSchema.superRefine((skill, context) => {
985
+ for (const key2 of SKILL_FRONTMATTER_FIELDS) {
986
+ if (skill.frontmatter && Object.hasOwn(skill.frontmatter, key2)) {
987
+ context.addIssue({
988
+ code: "custom",
989
+ path: ["frontmatter", key2],
990
+ message: `Skill frontmatter cannot hold '${key2}': it is a field of the skill itself`
991
+ });
992
+ }
993
+ }
994
+ const seen = /* @__PURE__ */ new Set();
995
+ for (const [index, resource] of (skill.resources ?? []).entries()) {
996
+ const pathKey = resource.path.toLowerCase();
997
+ if (seen.has(pathKey)) {
998
+ context.addIssue({
999
+ code: "custom",
1000
+ path: ["resources", index, "path"],
1001
+ message: `Duplicate skill resource path: ${resource.path}`
1002
+ });
1003
+ }
1004
+ seen.add(pathKey);
1005
+ }
1006
+ });
1007
+ var skillFileFrontmatterSchema = z.looseObject({
1008
+ name: skillNameSchema.optional(),
1009
+ title: z.string().min(1).optional(),
1010
+ description: z.string().min(1),
1011
+ summary: skillConfigObjectSchema.shape.summary,
1012
+ starters: skillConfigObjectSchema.shape.starters
1013
+ });
1014
+ var welcomeSubtitleSchema = z.union([
1015
+ z.string(),
1016
+ z.object({
1017
+ en: z.string().optional(),
1018
+ de: z.string().optional()
1019
+ }).strict().refine((value) => value.en !== void 0 || value.de !== void 0, {
1020
+ message: "At least one localized value is required"
1021
+ })
1022
+ ]);
1023
+ var agentNameSchema = z.string().min(1).refine((name2) => name2 !== "." && name2 !== "..", {
1024
+ message: "Agent name must not be '.' or '..'"
1025
+ });
1026
+ var agentConfigSchema = z.object({
1027
+ name: agentNameSchema,
1028
+ displayName: localizedStringSchema,
1029
+ description: localizedStringSchema.optional(),
1030
+ welcomeMessage: localizedStringSchema.optional(),
1031
+ welcomeSubtitle: welcomeSubtitleSchema.optional(),
1032
+ instructions: z.string().min(1),
1033
+ modelProviderId: z.string().min(1).optional(),
1034
+ modelBindingId: z.string().min(1).optional(),
1035
+ reasoningEffort: z.enum(REASONING_EFFORTS).optional(),
1036
+ fastMode: z.boolean().optional(),
1037
+ userSelectableModelBindingIds: z.array(z.string().min(1)).optional(),
1038
+ modelReasoningEfforts: z.record(z.string().min(1), z.enum(REASONING_EFFORTS)).optional(),
1039
+ maxSteps: z.number().int().positive().optional(),
1040
+ toolNames: z.array(z.string().min(1)).default([]),
1041
+ /**
1042
+ * The agents this agent may start as subagents through `run_agent`, beside itself. Only an
1043
+ * agent whose `toolNames` lists `run_agent` starts any.
1044
+ */
1045
+ subagentNames: z.array(agentNameSchema).refine((names) => new Set(names).size === names.length, {
1046
+ message: "A subagent is listed once"
1047
+ }).optional(),
1048
+ skillNames: z.array(skillNameSchema).default([]),
1049
+ knowledgeBases: z.array(z.string().min(1)).refine((names) => new Set(names).size === names.length, {
1050
+ message: "A Knowledge Base is listed once"
1051
+ }).optional(),
1052
+ initialPrompts: z.array(
1053
+ z.object({
1054
+ title: localizedStringSchema,
1055
+ prompt: localizedStringSchema
1056
+ })
1057
+ ).default([]),
1058
+ /**
1059
+ * An agent that ships with the platform, such as Workshaper: the fields as the release
1060
+ * shipped them last. Only the release seed writes it, and every other write keeps it as
1061
+ * stored. A field the instance left as shipped takes what the next release ships; one it
1062
+ * changed stays the instance's.
1063
+ */
1064
+ shipped: z.record(z.string(), z.unknown()).optional()
1065
+ });
1066
+ var WORKFLOW_NAME_PATTERN = /^[a-z][a-z0-9_-]{0,62}$/u;
1067
+ var WORKFLOW_NAME_RULE = "A Workflow id starts with a lowercase letter and holds lowercase letters, digits, '_' and '-', at most 63 characters";
1068
+ var workflowConfigSchema = z.strictObject({
1069
+ name: z.string(),
1070
+ manifest: z.looseObject({
1071
+ id: z.string(),
1072
+ name: z.string().min(1),
1073
+ description: z.string().optional()
1074
+ }),
1075
+ files: z.array(z.strictObject({ path: z.string(), content: z.string() })).optional()
1076
+ });
1077
+
1078
+ // src/skill-markdown.ts
1079
+ import yaml from "js-yaml";
1080
+
1081
+ // src/yaml-data.ts
1082
+ import { JSON_SCHEMA, YAMLException, load } from "js-yaml";
1083
+ var YAML_DATA_MAX_VALUES = 1e5;
1084
+ function isStorableText(text2) {
1085
+ return !text2.includes("\0") && !/\p{Surrogate}/u.test(text2);
1086
+ }
1087
+ function checkStorableTexts(value, maxValues) {
1088
+ const pending = [value];
1089
+ for (let seen = 1; pending.length > 0; seen += 1) {
1090
+ if (seen > maxValues) return "too_large";
1091
+ const next = pending.pop();
1092
+ if (typeof next === "string") {
1093
+ if (!isStorableText(next)) return "unstorable";
1094
+ } else if (Array.isArray(next)) {
1095
+ for (const entry of next) pending.push(entry);
1096
+ } else if (typeof next === "object" && next !== null) {
1097
+ for (const [key2, entry] of Object.entries(next)) {
1098
+ if (!isStorableText(key2)) return "unstorable";
1099
+ pending.push(entry);
1100
+ }
1101
+ }
1102
+ }
1103
+ return "storable";
1104
+ }
1105
+ function readYamlData(text2, file, options = {}) {
1106
+ const fail = (code, message, line, column) => ({
1107
+ ok: false,
1108
+ issue: {
1109
+ code,
1110
+ message,
1111
+ ...line === void 0 ? {} : { line },
1112
+ ...column === void 0 ? {} : { column }
1113
+ }
1114
+ });
1115
+ let value;
1116
+ try {
1117
+ value = load(text2, { schema: JSON_SCHEMA, filename: file });
1118
+ } catch (error) {
1119
+ if (error instanceof YAMLException) {
1120
+ const markLine = error.mark?.line;
1121
+ const line = markLine === void 0 ? void 0 : markLine + 1;
1122
+ const markColumn = error.mark?.column;
1123
+ const column = markColumn === void 0 ? void 0 : markColumn + 1;
1124
+ return error.reason.startsWith("nesting exceeded") ? fail("yaml_too_deep", `'${file}' ${error.reason}.`, line) : fail("yaml_invalid", `'${file}' is not valid YAML: ${error.reason}.`, line, column);
1125
+ }
1126
+ throw error;
1127
+ }
1128
+ if (options.refuseAliases && yamlValueIssue(value) === "alias") {
1129
+ return fail("yaml_alias", `'${file}' is not read: ${yamlValueIssueSentence("alias")}.`);
1130
+ }
1131
+ const texts = checkStorableTexts(value, YAML_DATA_MAX_VALUES);
1132
+ if (texts === "too_large") {
1133
+ return fail(
1134
+ "yaml_too_large",
1135
+ `'${file}' holds more than ${YAML_DATA_MAX_VALUES} values once its aliases are followed (YAML_DATA_MAX_VALUES).`
1136
+ );
1137
+ }
1138
+ if (texts === "unstorable") {
1139
+ return fail(
1140
+ "text_invalid",
1141
+ `'${file}' holds a NUL character or half of a surrogate pair, which cannot be stored.`
1142
+ );
1143
+ }
1144
+ return { ok: true, value };
1145
+ }
1146
+ var YamlDataError = class extends Error {
1147
+ issue;
1148
+ constructor(issue) {
1149
+ super(issue.message);
1150
+ this.name = "YamlDataError";
1151
+ this.issue = issue;
1152
+ }
1153
+ };
1154
+ function loadYamlData(text2, file) {
1155
+ const read = readYamlData(text2, file);
1156
+ if (!read.ok) throw new YamlDataError(read.issue);
1157
+ return read.value;
1158
+ }
1159
+
1160
+ // src/skill-markdown.ts
1161
+ var SkillMarkdownError = class extends Error {
1162
+ details;
1163
+ reason;
1164
+ constructor(message, details, reason) {
1165
+ super(message);
1166
+ this.name = "SkillMarkdownError";
1167
+ this.details = details;
1168
+ this.reason = reason;
1169
+ }
1170
+ };
1171
+ function parseSkillMarkdown(contents, skillFile, skillPath) {
1172
+ const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/u.exec(contents);
1173
+ if (!match) {
1174
+ throw new SkillMarkdownError(`Skill file '${skillFile}' must start with YAML frontmatter`);
1175
+ }
1176
+ const frontmatterRaw = loadFrontmatter(match[1] ?? "", skillFile);
1177
+ if (yamlValueIssue(frontmatterRaw, SKILL_FRONTMATTER_MAX_DEPTH) === "depth") {
1178
+ throw new SkillMarkdownError(
1179
+ `Skill file '${skillFile}' frontmatter is not read: ${yamlValueIssueSentence("depth", SKILL_FRONTMATTER_MAX_DEPTH)}`,
1180
+ void 0,
1181
+ "skill_frontmatter_too_deep"
1182
+ );
1183
+ }
1184
+ const frontmatter = skillFileFrontmatterSchema.safeParse(frontmatterRaw);
1185
+ if (!frontmatter.success) {
1186
+ throw new SkillMarkdownError(`Skill file '${skillFile}' frontmatter is invalid`, {
1187
+ issues: frontmatter.error.issues
1188
+ });
1189
+ }
1190
+ const content = (match[2] ?? "").trim();
1191
+ const { name: named, title, description, summary, starters, ...others } = frontmatter.data;
1192
+ const name2 = named ?? deriveSkillName(skillPath);
1193
+ const json = JSON.stringify(others);
1194
+ if (json.length > SKILL_FRONTMATTER_MAX_BYTES) {
1195
+ throw new SkillMarkdownError(
1196
+ `Skill file '${skillFile}' holds ${json.length} characters of frontmatter beside the fields of the skill (${SKILL_FRONTMATTER_FIELDS.join(", ")}). It holds at most ${SKILL_FRONTMATTER_MAX_BYTES} (SKILL_FRONTMATTER_MAX_BYTES)`,
1197
+ void 0,
1198
+ "skill_frontmatter_too_large"
1199
+ );
1200
+ }
1201
+ const kept = JSON.parse(json);
1202
+ return {
1203
+ name: name2,
1204
+ title: title ?? deriveSkillTitle(name2, content),
1205
+ description,
1206
+ ...summary === void 0 ? {} : { summary },
1207
+ ...starters === void 0 ? {} : { starters },
1208
+ content,
1209
+ ...Object.keys(others).length > 0 ? { frontmatter: kept } : {}
1210
+ };
1211
+ }
1212
+ function loadFrontmatter(text2, skillFile) {
1213
+ const read = readYamlData(text2, skillFile, { refuseAliases: true });
1214
+ if (read.ok) return read.value;
1215
+ const { issue } = read;
1216
+ if (issue.code === "yaml_alias") {
1217
+ throw new SkillMarkdownError(
1218
+ `Skill file '${skillFile}' frontmatter is not read: ${yamlValueIssueSentence("alias")}`,
1219
+ void 0,
1220
+ "skill_frontmatter_alias"
1221
+ );
1222
+ }
1223
+ if (issue.code === "yaml_too_deep") {
1224
+ throw new SkillMarkdownError(
1225
+ `Skill file '${skillFile}' frontmatter is not read: ${yamlValueIssueSentence("depth", SKILL_FRONTMATTER_MAX_DEPTH)}`,
1226
+ void 0,
1227
+ "skill_frontmatter_too_deep"
1228
+ );
1229
+ }
1230
+ if (issue.code !== "yaml_invalid" || issue.line === void 0 || issue.column === void 0) {
1231
+ throw new SkillMarkdownError(`Skill file '${skillFile}' frontmatter: ${issue.message}`);
1232
+ }
1233
+ const line = issue.line + 1;
1234
+ const { column } = issue;
1235
+ throw new SkillMarkdownError(
1236
+ `Skill file '${skillFile}' frontmatter is not valid YAML at line ${line}, column ${column}: ${issue.message} A value that holds a colon and a space, as a description often does, is written in quotes: description: "Use this when: the user asks"`,
1237
+ { issues: [{ message: issue.message, path: [], line, column }] }
1238
+ );
1239
+ }
1240
+ function deriveSkillTitle(name2, content) {
1241
+ let fence;
1242
+ for (const line of content.split(/\r?\n/u)) {
1243
+ const marker = /^\s{0,3}(`{3,}|~{3,})/u.exec(line)?.[1];
1244
+ if (marker) {
1245
+ fence = fence === void 0 ? marker : marker.startsWith(fence) ? void 0 : fence;
1246
+ continue;
1247
+ }
1248
+ const heading = fence === void 0 ? /^ {0,3}#{1,6}\s+(.+?)(?:\s+#+)?\s*$/u.exec(line) : null;
1249
+ if (heading?.[1]) return heading[1];
1250
+ }
1251
+ const words = name2.replace(/[-_]+/gu, " ").trim();
1252
+ return words === "" ? name2 : words.charAt(0).toUpperCase() + words.slice(1);
1253
+ }
1254
+ function formatSkillMarkdown(skill) {
1255
+ const content = skill.content.trim();
1256
+ const frontmatter = yaml.dump(
1257
+ {
1258
+ name: skill.name,
1259
+ ...skill.title === deriveSkillTitle(skill.name, content) ? {} : { title: skill.title },
1260
+ description: skill.description,
1261
+ ...skill.summary === void 0 ? {} : { summary: skill.summary },
1262
+ ...skill.starters === void 0 ? {} : { starters: skill.starters },
1263
+ ...skill.frontmatter
1264
+ },
1265
+ { lineWidth: -1, noCompatMode: true, noRefs: true, sortKeys: false }
1266
+ );
1267
+ return `---
1268
+ ${frontmatter}---
1269
+
1270
+ ${content}
1271
+ `;
1272
+ }
1273
+ function deriveSkillName(skillPath) {
1274
+ const filename = lastSegment(skillPath);
1275
+ const sourceName = filename.toLowerCase() === "skill.md" ? lastSegment(parentPath(skillPath)) : withoutExtension(filename);
1276
+ return sourceName.trim().toLowerCase().replace(/[^a-z0-9]+/gu, "_").replace(/^_+|_+$/gu, "");
1277
+ }
1278
+ function withoutTrailingSeparators(path) {
1279
+ let end = path.length;
1280
+ while (end > 0 && path[end - 1] === "/") {
1281
+ end -= 1;
1282
+ }
1283
+ return path.slice(0, end);
1284
+ }
1285
+ function lastSegment(path) {
1286
+ const trimmed = withoutTrailingSeparators(path);
1287
+ return trimmed.slice(trimmed.lastIndexOf("/") + 1);
1288
+ }
1289
+ function parentPath(path) {
1290
+ const trimmed = withoutTrailingSeparators(path);
1291
+ return trimmed.slice(0, Math.max(trimmed.lastIndexOf("/"), 0));
1292
+ }
1293
+ function withoutExtension(filename) {
1294
+ const dot = filename.lastIndexOf(".");
1295
+ return dot > 0 ? filename.slice(0, dot) : filename;
1296
+ }
1297
+
1298
+ // src/knowledge-write.ts
1299
+ import { z as z3 } from "zod";
1300
+
1301
+ // src/operation-batch.ts
1302
+ import { z as z2 } from "zod";
1303
+ var workflowDatasetReferenceSchema = z2.strictObject({
1304
+ $dataset: z2.string().min(1),
1305
+ rowCount: z2.number().int().min(0),
1306
+ // A view keeps the parent byte count as an upper bound.
1307
+ bytes: z2.number().int().min(0),
1308
+ /** Absolute offset in the parent; rowCount bounds the view. No rows are copied. */
1309
+ offset: z2.number().int().nonnegative().optional()
1310
+ });
1311
+ var operationBatchFailureSchema = z2.strictObject({
1312
+ item: z2.json(),
1313
+ code: z2.string().min(1),
1314
+ message: z2.string().min(1)
1315
+ });
1316
+ var operationBatchResultSchema = z2.strictObject({
1317
+ done: z2.number().int().min(0),
1318
+ failed: z2.number().int().min(0),
1319
+ failures: workflowDatasetReferenceSchema
1320
+ });
1321
+
1322
+ // src/knowledge-write.ts
1323
+ var id = z3.string().min(1).max(200);
1324
+ var count = z3.number().int().min(0);
1325
+ var hash = z3.string().regex(/^[a-f0-9]{64}$/u);
1326
+ var text = z3.string().max(KNOWLEDGE_FILE_MAX_BYTES).refine((value) => new TextEncoder().encode(value).byteLength <= KNOWLEDGE_FILE_MAX_BYTES, {
1327
+ message: `Document text exceeds ${KNOWLEDGE_FILE_MAX_BYTES} bytes`
1328
+ });
1329
+ var knowledgeIngestFetchSchema = z3.strictObject({
1330
+ connection: id,
1331
+ operation: id,
1332
+ input: z3.record(z3.string(), z3.json())
1333
+ });
1334
+ var ingestItemIdentity = z3.strictObject({
1335
+ itemId: id,
1336
+ version: id,
1337
+ name: z3.string().min(1).max(1e3),
1338
+ path: z3.string().startsWith("/").max(4e3).optional(),
1339
+ originLink: z3.url({ protocol: /^https?$/u }).max(4e3).optional(),
1340
+ metadata: z3.record(z3.string(), z3.json()).optional(),
1341
+ text: z3.never().optional(),
1342
+ fileId: z3.never().optional(),
1343
+ fetch: z3.never().optional()
1344
+ });
1345
+ var knowledgeIngestItemSchema = z3.union(
1346
+ [
1347
+ ingestItemIdentity.extend({ text }),
1348
+ ingestItemIdentity.extend({ fileId: id }),
1349
+ ingestItemIdentity.extend({ fetch: knowledgeIngestFetchSchema })
1350
+ ],
1351
+ { error: "knowledge_item_invalid: Supply exactly one of text, fileId or fetch" }
1352
+ ).superRefine((item, context) => {
1353
+ if (item.fetch !== void 0)
1354
+ context.addIssue({
1355
+ code: "custom",
1356
+ path: ["fetch"],
1357
+ message: "not_supported_yet: fetch arrives with CONN-DL; supply text or fileId"
1358
+ });
1359
+ });
1360
+ var knowledgeIngestInputSchema = z3.union([
1361
+ z3.strictObject({ items: z3.array(knowledgeIngestItemSchema), complete: z3.boolean().optional() }),
1362
+ z3.strictObject({ dataset: workflowDatasetReferenceSchema, complete: z3.boolean().optional() })
1363
+ ]);
1364
+ var knowledgeIngestOutputSchema = operationBatchResultSchema.extend({
1365
+ accepted: count,
1366
+ withdrawn: count
1367
+ });
1368
+ var knowledgeWithdrawInputSchema = z3.strictObject({ itemIds: z3.array(id).min(1) });
1369
+ var knowledgeWithdrawOutputSchema = z3.strictObject({ withdrawn: count });
1370
+ var knowledgePendingInputSchema = z3.strictObject({
1371
+ type: id.optional(),
1372
+ since: z3.iso.datetime({ offset: true }).optional(),
1373
+ limit: z3.number().int().positive()
1374
+ });
1375
+ var knowledgePendingRowSchema = z3.strictObject({
1376
+ id,
1377
+ type: id,
1378
+ contentHash: hash,
1379
+ pages: workflowDatasetReferenceSchema
1380
+ });
1381
+ var knowledgePendingOutputSchema = z3.strictObject({
1382
+ documents: workflowDatasetReferenceSchema
1383
+ });
1384
+ var pageNumber = z3.number().int().positive();
1385
+ var range = z3.strictObject({ pageFrom: pageNumber, pageTo: pageNumber });
1386
+ var processorMetadataSchema = z3.strictObject({
1387
+ documents: z3.array(range).min(1),
1388
+ sections: z3.array(range.extend({ title: z3.string().min(1) })).optional(),
1389
+ fields: z3.record(z3.string(), z3.json())
1390
+ });
1391
+ var knowledgeProcessorOutputSchema = processorMetadataSchema.extend({
1392
+ // Count stays unbounded here: PROC-1/PROC-W must enforce the instance's
1393
+ // knowledge.maxPagesPerDocument at runtime (KB-ISO-3a), not a new contract cap.
1394
+ pages: z3.array(z3.strictObject({ page: pageNumber, text })).min(1)
1395
+ }).superRefine((output, context) => {
1396
+ const pages = new Set(output.pages.map((page) => page.page));
1397
+ if (output.pages.some(
1398
+ (page, index) => index > 0 && page.page <= (output.pages[index - 1]?.page ?? 0)
1399
+ )) {
1400
+ context.addIssue({
1401
+ code: "custom",
1402
+ path: ["pages"],
1403
+ message: "knowledge_processor_output_invalid: Pages must be ascending and unique"
1404
+ });
1405
+ }
1406
+ const bytes = output.pages.reduce(
1407
+ (size, page) => size + new TextEncoder().encode(page.text).byteLength,
1408
+ 0
1409
+ );
1410
+ if (bytes > KNOWLEDGE_FILE_MAX_BYTES)
1411
+ context.addIssue({
1412
+ code: "custom",
1413
+ path: ["pages"],
1414
+ message: "knowledge_processor_output_invalid: Document text exceeds the per-document limit"
1415
+ });
1416
+ for (const field of ["documents", "sections"]) {
1417
+ output[field]?.forEach((entry, index) => {
1418
+ if (entry.pageFrom > entry.pageTo || !pages.has(entry.pageFrom) || !pages.has(entry.pageTo)) {
1419
+ context.addIssue({
1420
+ code: "custom",
1421
+ path: [field, index],
1422
+ message: "knowledge_processor_output_invalid: Page range must be ordered and inside the document"
1423
+ });
1424
+ }
1425
+ });
1426
+ }
1427
+ });
1428
+ var knowledgePutProcessedInputSchema = z3.strictObject({
1429
+ items: z3.union([
1430
+ z3.array(
1431
+ z3.strictObject({
1432
+ documentId: id,
1433
+ contentHash: hash,
1434
+ workflowRevision: id,
1435
+ // Mirror pending: page text lives outside step values and item dataset rows.
1436
+ // PROC-W resolves the pages and validates the full processor output above.
1437
+ output: processorMetadataSchema.extend({ pages: workflowDatasetReferenceSchema })
1438
+ })
1439
+ ),
1440
+ workflowDatasetReferenceSchema
1441
+ ])
1442
+ });
1443
+ var knowledgeFieldValueSchema = z3.json();
1444
+ var knowledgeExtractFieldsInputSchema = z3.strictObject({
1445
+ documentId: id,
1446
+ schema: z3.record(z3.string(), knowledgeFieldValueSchema)
1447
+ });
1448
+ var knowledgeExtractFieldsOutputSchema = z3.strictObject({
1449
+ droppedFields: z3.number().int().nonnegative().optional(),
1450
+ failedFields: z3.number().int().nonnegative().optional(),
1451
+ path: z3.string(),
1452
+ date: z3.iso.date().nullable(),
1453
+ type: id,
1454
+ fields: z3.record(
1455
+ z3.string(),
1456
+ z3.strictObject({ value: knowledgeFieldValueSchema, page: pageNumber, quote: z3.string().min(1) })
1457
+ )
1458
+ });
1459
+ var knowledgeWorkflowSourceSchema = z3.strictObject({
1460
+ id: z3.string().startsWith("workflow:"),
1461
+ kind: z3.literal("workflow"),
1462
+ workflowId: z3.string().regex(/^[a-z][a-z0-9_-]{0,62}$/u)
1463
+ }).refine(
1464
+ (source) => source.id === `workflow:${source.workflowId}` || source.id.startsWith(`workflow:${source.workflowId}@`) && /^[1-9][0-9]{0,9}$/u.test(source.id.slice(`workflow:${source.workflowId}@`.length)),
1465
+ {
1466
+ path: ["id"],
1467
+ message: "A Workflow source id is workflow:<workflowId>@<the revision that created the Workflow>"
1468
+ }
1469
+ );
1470
+ var knowledgeWriteContracts = {
1471
+ ingest: {
1472
+ description: "Ingest items or a dataset into the calling data Workflow's source; complete promises a full pass, withdrawn only after the run succeeds.",
1473
+ inputSchema: knowledgeIngestInputSchema,
1474
+ outputSchema: knowledgeIngestOutputSchema,
1475
+ effect: "changing",
1476
+ right: "knowledge_base.ingest",
1477
+ keyLevel: "write",
1478
+ completion: "async",
1479
+ batch: true
1480
+ },
1481
+ withdraw: {
1482
+ description: "Withdraw item ids from the calling Workflow's source; removed from search immediately.",
1483
+ inputSchema: knowledgeWithdrawInputSchema,
1484
+ outputSchema: knowledgeWithdrawOutputSchema,
1485
+ effect: "changing",
1486
+ right: "knowledge_base.ingest",
1487
+ keyLevel: "write"
1488
+ },
1489
+ pending: {
1490
+ description: "Pull pending documents by type and time as a dataset; page text is another dataset reference.",
1491
+ inputSchema: knowledgePendingInputSchema,
1492
+ outputSchema: knowledgePendingOutputSchema,
1493
+ rowSchema: knowledgePendingRowSchema,
1494
+ effect: "reading",
1495
+ right: "knowledge_base.read",
1496
+ keyLevel: "read",
1497
+ dataset: true
1498
+ },
1499
+ put_processed: {
1500
+ description: "Write processor output by document, content hash and Workflow revision, with pages as a dataset reference like pending; the platform validates, chunks and indexes it, with per-item outcomes.",
1501
+ inputSchema: knowledgePutProcessedInputSchema,
1502
+ outputSchema: operationBatchResultSchema,
1503
+ effect: "changing",
1504
+ right: "knowledge_base.ingest",
1505
+ keyLevel: "write",
1506
+ batch: true
1507
+ },
1508
+ extract_fields: {
1509
+ description: "Extract fields by schema through the approved model binding within the Knowledge Base budget; each value carries page and quote evidence.",
1510
+ inputSchema: knowledgeExtractFieldsInputSchema,
1511
+ outputSchema: knowledgeExtractFieldsOutputSchema,
1512
+ effect: "reading",
1513
+ right: "knowledge_base.read",
1514
+ keyLevel: "read"
1515
+ }
1516
+ };
1517
+ var knowledgeRecordsRefusalSchema = z3.never({
1518
+ error: "'records' belongs in store.yaml. A data Workflow proposes fields into the Data Store's records mechanism."
1519
+ }).optional();
1520
+
1521
+ // src/knowledge-sources.ts
1522
+ import { z as z4 } from "zod";
1523
+ var sourceIdSchema = z4.union([
1524
+ z4.string().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u).max(63),
1525
+ // KBW-2c: a Workflow's source carries the revision that created the Workflow; one made
1526
+ // before that release carries none.
1527
+ knowledgeWorkflowSourceSchema.shape.id.regex(
1528
+ /^workflow:[a-z][a-z0-9_-]{0,62}(?:@[1-9][0-9]{0,9})?$/u
1529
+ )
1530
+ ]);
1531
+ var countSchema = z4.number().int().min(0);
1532
+ var countsSchema = z4.strictObject({
1533
+ discovered: countSchema,
1534
+ added: countSchema,
1535
+ changed: countSchema,
1536
+ moved: countSchema,
1537
+ withdrawn: countSchema,
1538
+ failed: countSchema,
1539
+ skipped: countSchema
1540
+ });
1541
+ var knowledgeSyncInputSchema = z4.strictObject({
1542
+ /** The `id` of the source in the definition. */
1543
+ source: sourceIdSchema,
1544
+ /** `changes` unless `full`. The initial import is started by publish, not by this call. */
1545
+ mode: z4.enum(["changes", "full"]).optional(),
1546
+ /**
1547
+ * Lets a first pass that waits for confirmation go on (KB-ISO-1b): a connector's first sync or
1548
+ * a Workflow's first `ingest` above 10,000 items. Needs `knowledge_base.publish`; audited with
1549
+ * the counts and the estimate.
1550
+ */
1551
+ confirm: z4.boolean().optional()
1552
+ });
1553
+ var knowledgeSyncResultSchema = z4.strictObject({
1554
+ syncRunId: z4.string(),
1555
+ source: z4.string(),
1556
+ mode: z4.enum(KNOWLEDGE_SYNC_MODES),
1557
+ /** Why a run is of another mode than asked, such as a cursor the source refused. */
1558
+ reason: z4.enum(["cursor_expired"]).optional(),
1559
+ state: z4.enum(KNOWLEDGE_SYNC_RUN_STATES),
1560
+ counts: countsSchema,
1561
+ bytesFetched: z4.number().int().min(0),
1562
+ /** Why the whole sync failed, for a run in state `failed`. */
1563
+ failureCode: z4.enum(KNOWLEDGE_SOURCE_FAILURE_CODES).optional(),
1564
+ startedAt: z4.string(),
1565
+ endedAt: z4.string().optional()
1566
+ });
1567
+ var KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES = [
1568
+ "discovered",
1569
+ "fetched",
1570
+ "indexed",
1571
+ "failed",
1572
+ "withdrawn"
1573
+ ];
1574
+ var itemFailureCodeSchema = z4.union([
1575
+ z4.enum(KNOWLEDGE_SOURCE_ITEM_FAILURE_CODES),
1576
+ z4.enum(KNOWLEDGE_DOCUMENT_FAILURE_CODES)
1577
+ ]);
1578
+ var rangeSchema = z4.strictObject({ min: z4.number().min(0), max: z4.number().min(0) });
1579
+ var knowledgeFirstPassConfirmationSchema = z4.strictObject({
1580
+ syncRunId: z4.string(),
1581
+ /** The items of the pass, listed or named, and their size in bytes. */
1582
+ items: countSchema,
1583
+ bytes: countSchema,
1584
+ /** How many it fetches and indexes before it waits. */
1585
+ stop: countSchema,
1586
+ /** Estimated from the listed sizes; absent where the Knowledge Base does not search by meaning. */
1587
+ tokens: rangeSchema.optional(),
1588
+ passages: rangeSchema.optional(),
1589
+ /** The embedding model it embeds with; absent where the Knowledge Base does not search by meaning. */
1590
+ model: z4.string().optional(),
1591
+ /** From the rate card; absent where nothing is embedded or the model has no price. */
1592
+ cost: rangeSchema.extend({ currency: z4.string() }).optional(),
1593
+ /**
1594
+ * Whether the store's size limit holds the high estimate of passages and vectors, and that
1595
+ * estimate; absent where nothing is embedded.
1596
+ */
1597
+ room: z4.boolean().optional(),
1598
+ storeBytes: countSchema,
1599
+ addedBytes: countSchema.optional(),
1600
+ limitBytes: countSchema.optional()
1601
+ });
1602
+ var sourceStatusSchema = z4.strictObject({
1603
+ id: z4.string(),
1604
+ /** The name of the Connection it reads through. */
1605
+ connection: z4.string(),
1606
+ kind: z4.literal("connector").optional(),
1607
+ /** Items by the state the page shows. */
1608
+ items: z4.strictObject({
1609
+ discovered: countSchema,
1610
+ fetched: countSchema,
1611
+ indexed: countSchema,
1612
+ failed: countSchema,
1613
+ withdrawn: countSchema
1614
+ }),
1615
+ /** Failed items per code. */
1616
+ failures: z4.array(z4.strictObject({ code: itemFailureCodeSchema, count: countSchema })),
1617
+ /** The sync that runs now, with its rate in items per minute and its estimated end. */
1618
+ running: z4.strictObject({
1619
+ syncRunId: z4.string(),
1620
+ mode: z4.enum(KNOWLEDGE_SYNC_MODES),
1621
+ startedAt: z4.string(),
1622
+ itemsPerMinute: z4.number().min(0).optional(),
1623
+ estimatedEndAt: z4.string().optional()
1624
+ }).optional(),
1625
+ /** The last sync that ended. */
1626
+ last: knowledgeSyncResultSchema.optional(),
1627
+ /** "Wartet auf Bestätigung": the running first pass stopped at 10,000 items. */
1628
+ confirmation: knowledgeFirstPassConfirmationSchema.optional(),
1629
+ /** "Letzte Änderung verarbeitet". */
1630
+ lastChangeAt: z4.string().optional(),
1631
+ /** "Älteste offene Änderung". */
1632
+ oldestOpenChangeAt: z4.string().optional()
1633
+ });
1634
+ var knowledgeSourcesOutputSchema = z4.strictObject({
1635
+ sources: z4.array(
1636
+ z4.union([
1637
+ sourceStatusSchema,
1638
+ knowledgeWorkflowSourceSchema.safeExtend(
1639
+ sourceStatusSchema.omit({ id: true, connection: true, kind: true }).shape
1640
+ )
1641
+ ])
1642
+ )
1643
+ });
1644
+ var knowledgeSourceItemsInputSchema = z4.strictObject({
1645
+ source: sourceIdSchema,
1646
+ state: z4.enum(KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES).optional(),
1647
+ failureCode: itemFailureCodeSchema.optional(),
1648
+ /** Items per page: 50 by default, at most 200. */
1649
+ limit: z4.coerce.number().int().min(1).max(200).optional(),
1650
+ cursor: z4.string().min(1).max(1e3).optional()
1651
+ });
1652
+ var knowledgeSourceItemsOutputSchema = z4.strictObject({
1653
+ /** Newest change first. */
1654
+ items: z4.array(
1655
+ z4.strictObject({
1656
+ /** The row in `source_items`: what `retry` and `locate` name. */
1657
+ id: z4.string(),
1658
+ /** The id of the item at the source. */
1659
+ itemId: z4.string(),
1660
+ name: z4.string(),
1661
+ path: z4.string(),
1662
+ state: z4.enum(KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES),
1663
+ failureCode: itemFailureCodeSchema.optional(),
1664
+ documentId: z4.string().optional(),
1665
+ originLink: z4.string().optional(),
1666
+ changedAt: z4.string()
1667
+ })
1668
+ ),
1669
+ nextCursor: z4.string().optional()
1670
+ });
1671
+ var RETRY_MAX = 100;
1672
+ var knowledgeRetryInputSchema = z4.union([
1673
+ z4.strictObject({ documentIds: z4.array(z4.string().min(1).max(200)).min(1).max(RETRY_MAX) }),
1674
+ z4.strictObject({
1675
+ source: sourceIdSchema,
1676
+ sourceItemIds: z4.array(z4.string().min(1).max(200)).min(1).max(RETRY_MAX)
1677
+ }),
1678
+ z4.strictObject({ source: sourceIdSchema, failureCode: itemFailureCodeSchema }),
1679
+ z4.strictObject({ source: sourceIdSchema, all: z4.literal(true) })
1680
+ ]);
1681
+ var knowledgeRetryOutputSchema = z4.strictObject({
1682
+ /** For a retry by document ids: each named document, with its state after the retry. */
1683
+ documents: z4.array(z4.strictObject({ id: z4.string(), state: z4.enum(KNOWLEDGE_DOCUMENT_STATES) })).optional(),
1684
+ /** How many contents or items were queued again. */
1685
+ queued: z4.number().int(),
1686
+ /**
1687
+ * For a Workflow-fed source: how many items removed by hand were allowed back. Its next pass
1688
+ * that names one takes it again (KBW-2b).
1689
+ */
1690
+ released: z4.number().int().optional()
1691
+ });
1692
+ var knowledgeLocateInputSchema = z4.strictObject({
1693
+ /** The row in `source_items`. */
1694
+ sourceItemId: z4.string().min(1).max(200)
1695
+ });
1696
+ var knowledgeLocateOutputSchema = z4.strictObject({
1697
+ sourceItemId: z4.string(),
1698
+ source: z4.string(),
1699
+ itemId: z4.string(),
1700
+ state: z4.enum(KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES),
1701
+ discoveredAt: z4.string(),
1702
+ fetchedAt: z4.string().optional(),
1703
+ withdrawnAt: z4.string().optional(),
1704
+ purgedAt: z4.string().optional(),
1705
+ /** A person removed it by hand; a pass leaves it out until a publisher lifts the hold. */
1706
+ removedAt: z4.string().optional()
1707
+ });
1708
+ var knowledgeWorkflowSourcesOutputSchema = z4.strictObject({
1709
+ knowledgeBases: z4.array(
1710
+ z4.strictObject({ name: z4.string(), title: z4.string(), documents: countSchema })
1711
+ ),
1712
+ hidden: z4.strictObject({ knowledgeBases: countSchema, documents: countSchema })
1713
+ });
1714
+
1715
+ // src/workflow-datasets.ts
1716
+ var WORKFLOW_DATASET_STATES = ["writing", "complete", "deleted"];
1717
+
1718
+ // src/operation-paging.ts
1719
+ import { z as z5 } from "zod";
1720
+ var operationPagingSchema = z5.discriminatedUnion("by", [
1721
+ z5.strictObject({
1722
+ by: z5.enum(["page", "offset"]),
1723
+ param: z5.string().min(1),
1724
+ sizeParam: z5.string().min(1),
1725
+ size: z5.number().int().min(1),
1726
+ start: z5.number().int().min(0).optional()
1727
+ }),
1728
+ z5.strictObject({
1729
+ by: z5.enum(["cursor", "next_link"]),
1730
+ param: z5.string().min(1),
1731
+ cursor: z5.string().min(1)
1732
+ })
1733
+ ]);
1734
+
1735
+ // src/workflow-data-flows.ts
1736
+ import { z as z6 } from "zod";
1737
+ var workflowDataFlowsSchema = z6.object({
1738
+ fills: z6.array(z6.object({ id: z6.string(), name: z6.string(), title: z6.string() })),
1739
+ processes: z6.array(z6.object({ id: z6.string(), name: z6.string(), title: z6.string() })),
1740
+ hidden: z6.object({ fills: z6.number().int().min(0), processes: z6.number().int().min(0) }),
1741
+ truncated: z6.boolean()
1742
+ });
1743
+
1744
+ // src/data-store-records.ts
1745
+ import { z as z7 } from "zod";
1746
+ var RECORDS_PROPOSE_MAX_ITEMS_PER_CALL = 1e3;
1747
+ var RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM = 1e3;
1748
+ var RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE = 1e4;
1749
+ var name = z7.string().min(1);
1750
+ var id2 = z7.string().min(1).max(200);
1751
+ var key = z7.union([z7.string().min(1), z7.number(), z7.boolean()]);
1752
+ var dataStoreRecordsRuleSchema = z7.strictObject({
1753
+ table: name,
1754
+ key: z7.union([
1755
+ z7.strictObject({ column: name, fromPath: z7.string().startsWith("/").min(1) }),
1756
+ z7.strictObject({ column: name, fromField: name })
1757
+ ]),
1758
+ precedence: z7.array(name).default([]),
1759
+ review: z7.strictObject({ always: z7.array(name).default([]) }).prefault({}),
1760
+ retainWithoutSource: z7.boolean().default(false)
1761
+ }).superRefine((rule, context) => {
1762
+ if ("fromPath" in rule.key) {
1763
+ const placeholders = rule.key.fromPath.match(/\{[^{}]*\}/gu);
1764
+ if (placeholders?.length !== 1 || placeholders[0] !== `{${rule.key.column}}`) {
1765
+ context.addIssue({
1766
+ code: "custom",
1767
+ path: ["key", "fromPath"],
1768
+ message: "fromPath must contain exactly one placeholder naming the key column"
1769
+ });
1770
+ }
1771
+ }
1772
+ });
1773
+ var recordEvidenceResultSchema = z7.discriminatedUnion("status", [
1774
+ z7.strictObject({ status: z7.literal("passed") }),
1775
+ z7.strictObject({
1776
+ status: z7.literal("failed"),
1777
+ reason: z7.enum(["page_not_found", "quote_not_found", "value_not_parsed"])
1778
+ })
1779
+ ]);
1780
+ var RECORD_FIELD_STATES = ["extracted", "confirmed", "corrected", "conflict"];
1781
+ var RECORD_FLAG_REASONS = [
1782
+ "conflict",
1783
+ "not_evidenced",
1784
+ "confirmation_required",
1785
+ "key_unresolved"
1786
+ ];
1787
+ var RECORD_FIELD_FAILURE_CODES = ["record_field_unknown"];
1788
+ var fieldSchema = knowledgeExtractFieldsOutputSchema.shape.fields.valueType.extend({ name });
1789
+ var dataStoreRecordProposalItemSchema = z7.strictObject({
1790
+ // Document ids are scoped by their Knowledge Base. Both ids travel with every citation.
1791
+ knowledgeBaseId: id2,
1792
+ documentId: id2,
1793
+ kind: name,
1794
+ documentDate: z7.iso.date().nullable(),
1795
+ path: z7.string().startsWith("/").optional(),
1796
+ fields: z7.array(fieldSchema).min(1).max(
1797
+ RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM,
1798
+ "At most 1000 fields per item (RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM); split larger proposals into batches"
1799
+ )
1800
+ });
1801
+ var dataStoreRecordsProposeInputSchema = z7.strictObject({
1802
+ table: name,
1803
+ items: z7.array(dataStoreRecordProposalItemSchema).max(
1804
+ RECORDS_PROPOSE_MAX_ITEMS_PER_CALL,
1805
+ "At most 1000 items per call (RECORDS_PROPOSE_MAX_ITEMS_PER_CALL); send another batch"
1806
+ )
1807
+ });
1808
+ var decisionSchema = z7.strictObject({
1809
+ table: name,
1810
+ key,
1811
+ field: name,
1812
+ documentId: id2.optional(),
1813
+ knowledgeBaseId: id2.optional()
1814
+ });
1815
+ var dataStoreRecordsDecideInputSchema = z7.discriminatedUnion("action", [
1816
+ decisionSchema.extend({ action: z7.literal("confirm") }),
1817
+ decisionSchema.extend({ action: z7.literal("correct"), value: knowledgeFieldValueSchema }),
1818
+ decisionSchema.extend({ action: z7.literal("assign"), documentId: id2, knowledgeBaseId: id2 })
1819
+ ]).refine(
1820
+ (decision) => decision.documentId === void 0 === (decision.knowledgeBaseId === void 0),
1821
+ {
1822
+ path: ["documentId"],
1823
+ message: "A citation needs both knowledgeBaseId and documentId"
1824
+ }
1825
+ );
1826
+ var dataStoreRecordsDecideOutputSchema = z7.strictObject({ decided: z7.literal(true) });
1827
+ var dataStoreRecordsFlaggedInputSchema = z7.strictObject({
1828
+ table: name.optional(),
1829
+ cursor: z7.string().min(1).optional(),
1830
+ limit: z7.number().int().positive().max(
1831
+ RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE,
1832
+ "At most 10000 items per page (RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE); follow nextCursor"
1833
+ )
1834
+ });
1835
+ var dataStoreRecordFieldSchema = fieldSchema.extend({
1836
+ // `value` is what the document reads; a person's correction stands beside it, held exactly
1837
+ // while the state is `corrected` (REC-KEEP).
1838
+ correctedValue: knowledgeFieldValueSchema.nullable(),
1839
+ table: name,
1840
+ // Unresolved keys go to review, without writing a customer row.
1841
+ key: key.nullable(),
1842
+ knowledgeBaseId: id2,
1843
+ documentId: id2,
1844
+ kind: name,
1845
+ documentDate: z7.iso.date().nullable(),
1846
+ extractedAt: z7.iso.datetime({ offset: true }),
1847
+ evidence: recordEvidenceResultSchema,
1848
+ state: z7.enum(RECORD_FIELD_STATES),
1849
+ decidedBy: id2.nullable(),
1850
+ decidedAt: z7.iso.datetime({ offset: true }).nullable()
1851
+ });
1852
+ var dataStoreRecordsFlaggedOutputSchema = z7.strictObject({
1853
+ // A citation is shown only after checking access to its Knowledge Base, even for a
1854
+ // holder of data_store.records. Values/quotes never enter jobs, runs or audit metadata.
1855
+ items: z7.array(
1856
+ dataStoreRecordFieldSchema.extend({
1857
+ reason: z7.enum(RECORD_FLAG_REASONS),
1858
+ // REC-2: the cited document as its chip opens it, by the Knowledge Base's name. Absent
1859
+ // where the document is no longer there to open.
1860
+ document: z7.strictObject({ knowledgeBase: name, fileName: name }).optional(),
1861
+ // REC-KEEP: the person who decided, by the name the instance shows for them, read when
1862
+ // the list is. Absent where the account is gone or its deletion was requested.
1863
+ decidedByName: z7.string().min(1).optional()
1864
+ })
1865
+ ).max(RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE),
1866
+ nextCursor: z7.string().optional()
1867
+ });
1868
+ var scalarSchemas = {
1869
+ text: z7.string(),
1870
+ integer: z7.number().int(),
1871
+ number: z7.number(),
1872
+ boolean: z7.boolean(),
1873
+ date: z7.iso.date(),
1874
+ timestamp: z7.iso.datetime({ offset: true })
1875
+ };
1876
+ function recordColumnTakes(column, value) {
1877
+ return compatible(column, value);
1878
+ }
1879
+ function compatible(column, value) {
1880
+ if (column.generated || column.type === "other") return false;
1881
+ if (value === null) return column.nullable;
1882
+ for (const [type, schema] of Object.entries(scalarSchemas)) {
1883
+ if (column.type === type) return schema.safeParse(value).success;
1884
+ if (column.type === `${type}[]`) return z7.array(schema.nullable()).safeParse(value).success;
1885
+ }
1886
+ return false;
1887
+ }
1888
+ function proposalItemSchemaFor(columns) {
1889
+ const byName = new Map(columns.map((column) => [column.name, column]));
1890
+ return dataStoreRecordProposalItemSchema.superRefine((item, context) => {
1891
+ const seen = /* @__PURE__ */ new Set();
1892
+ item.fields.forEach((field, index) => {
1893
+ const column = byName.get(field.name);
1894
+ if (!column || !compatible(column, field.value) || seen.has(field.name)) {
1895
+ context.addIssue({
1896
+ code: "custom",
1897
+ path: ["fields", index],
1898
+ message: `record_field_unknown: Field '${field.name}' has no writable column of a compatible type, or occurs twice`
1899
+ });
1900
+ }
1901
+ seen.add(field.name);
1902
+ });
1903
+ });
1904
+ }
1905
+ var dataStoreRecordsContracts = {
1906
+ propose: {
1907
+ description: "Propose extracted fields with Knowledge Base/document/page/quote evidence. Validate each whole item against the published table before writing; failures are per item. Send at most 1000 items per call and 1000 fields per item; split larger work into batches. Merge by evidence precedence, then document date; unresolved keys and evidence go to review.",
1908
+ inputSchema: dataStoreRecordsProposeInputSchema,
1909
+ outputSchema: operationBatchResultSchema,
1910
+ itemSchemaFor: proposalItemSchemaFor,
1911
+ effect: "changing",
1912
+ right: "data_store.records",
1913
+ keyLevel: "write",
1914
+ batch: true
1915
+ },
1916
+ decide: {
1917
+ description: "Confirm or correct a field against its evidence, or assign a document to an object key. Decisions are pinned; audit table/field/action/actor only, never the value.",
1918
+ inputSchema: dataStoreRecordsDecideInputSchema,
1919
+ outputSchema: dataStoreRecordsDecideOutputSchema,
1920
+ effect: "changing",
1921
+ right: "data_store.records",
1922
+ keyLevel: "write"
1923
+ },
1924
+ flagged: {
1925
+ description: "Page through fields needing review, up to 10000 per call; pass nextCursor as cursor for the next page. Check Knowledge Base access before showing any document citation; the store right alone does not grant access to source documents.",
1926
+ inputSchema: dataStoreRecordsFlaggedInputSchema,
1927
+ outputSchema: dataStoreRecordsFlaggedOutputSchema,
1928
+ effect: "reading",
1929
+ right: "data_store.records",
1930
+ keyLevel: "read"
1931
+ }
1932
+ };
1933
+
1934
+ // src/usage-limits.ts
1935
+ var MODEL_USAGE_LIMIT_PERIODS = ["day", "month"];
1936
+ var MODEL_USAGE_LIMIT_METRICS = ["modelCallCount", "tokens", "costMicros"];
1937
+ var MODEL_USAGE_LIMIT_SCOPES = ["instance", "user", "system", "workspace"];
1938
+ var USAGE_SPEND_LIMIT_LEVELS = [
1939
+ "instance",
1940
+ "workspace_default",
1941
+ "workspace",
1942
+ "user_default",
1943
+ "user"
1944
+ ];
1945
+ var PERSONAL_WORKSPACES_KEY = "personal";
1946
+ var USAGE_BREAKDOWN_DIMENSIONS = [
1947
+ "workspace",
1948
+ "agent",
1949
+ "app",
1950
+ "workflow",
1951
+ "model",
1952
+ "origin"
1953
+ ];
1954
+ var USAGE_ORIGINS = [
1955
+ "conversation",
1956
+ "app",
1957
+ "workflow",
1958
+ "knowledge_base",
1959
+ "system"
1960
+ ];
1961
+
1962
+ // src/workflow-text.ts
1963
+ var WORKFLOW_TEXT_FORMAT_MARKDOWN = "markdown";
1964
+ var WORKFLOW_TEXT_MAX_PARTS = 100;
1965
+ var WORKFLOW_MARKDOWN_MAX_ROWS = 100;
1966
+ var WORKFLOW_MARKDOWN_MAX_COLUMNS = 8;
1967
+
1968
+ // src/mail-send.ts
1969
+ import { z as z8 } from "zod";
1970
+ var MAIL_SEND_OPERATION = "mail.send";
1971
+ var MAIL_SENDER_RESOURCE_KIND = "mail_sender";
1972
+ var MAIL_SENDER_USE_ACTION = "mail_sender.use";
1973
+ var MAIL_SENDER_SYSTEM = "system";
1974
+ var MAIL_SENDER_CONNECTION_PREFIX = "connection.";
1975
+ var MAIL_SENDER_SYSTEM_ICON = "system-mail";
1976
+ var MAIL_WORKFLOW_MESSAGE_TEMPLATE = "workflow-message";
1977
+ var MAIL_SEND_MAX_ADDRESSES = 50;
1978
+ var MAIL_SUBJECT_MAX_LENGTH = 200;
1979
+ var MAIL_BODY_MAX_BYTES = 64 * 1024;
1980
+ var MAIL_SENDER_NAME_MAX_LENGTH = 80;
1981
+ var MAIL_ADDRESS_MAX_LENGTH = 254;
1982
+ var MAIL_OUTBOUND_DEFAULT_LIMITS = {
1983
+ perWorkflowPerHour: 200,
1984
+ perInstancePerDay: 1e3
1985
+ };
1986
+ var MAIL_OUTBOUND_FOOTER_MAX_LENGTH = 2e3;
1987
+ var MAIL_AUDIT_MAX_DOMAINS = 10;
1988
+ var MAIL_ATTACHMENTS_MAX_FILES = 10;
1989
+ var MAIL_ATTACHMENTS_MAX_BYTES = 10 * 1024 * 1024;
1990
+ var MAIL_SEND_ERROR_CODES = {
1991
+ recipientNotAllowed: "recipient_not_allowed",
1992
+ noRecipient: "no_recipient",
1993
+ mailRejected: "mail_rejected",
1994
+ workspaceNotAllowed: "workspace_not_allowed"
1995
+ };
1996
+ var MAIL_SEND_REFUSAL_REASONS = [
1997
+ MAIL_SEND_ERROR_CODES.recipientNotAllowed,
1998
+ MAIL_SEND_ERROR_CODES.noRecipient,
1999
+ MAIL_SEND_ERROR_CODES.mailRejected,
2000
+ MAIL_SEND_ERROR_CODES.workspaceNotAllowed
2001
+ ];
2002
+ var mailSendRefusalDetailsSchema = z8.discriminatedUnion("reason", [
2003
+ z8.strictObject({
2004
+ reason: z8.literal(MAIL_SEND_ERROR_CODES.recipientNotAllowed),
2005
+ domain: z8.string().min(1).max(MAIL_ADDRESS_MAX_LENGTH)
2006
+ }),
2007
+ z8.strictObject({ reason: z8.literal(MAIL_SEND_ERROR_CODES.noRecipient) }),
2008
+ z8.strictObject({ reason: z8.literal(MAIL_SEND_ERROR_CODES.workspaceNotAllowed) }),
2009
+ z8.strictObject({
2010
+ reason: z8.literal(MAIL_SEND_ERROR_CODES.mailRejected),
2011
+ providerCode: z8.string().min(1).max(100).optional()
2012
+ })
2013
+ ]);
2014
+ var MAIL_RECIPIENT_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u;
2015
+ var principalId = z8.string().regex(MAIL_RECIPIENT_ID_PATTERN);
2016
+ var ONE_LINE_PATTERN = /^[^\u0000-\u001f\u007f\u2028\u2029]*$/u;
2017
+ var mailAddressSchema = z8.email().max(MAIL_ADDRESS_MAX_LENGTH);
2018
+ var MAIL_RECIPIENT_DOMAIN_PATTERN = /^(\*\.)?(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+(?:[a-z]{2,63}|xn--[a-z0-9-]{1,59})$/u;
2019
+ var MAIL_RECIPIENT_DOMAINS_ANY = "*";
2020
+ var mailRecipientDomainSchema = z8.string().max(MAIL_ADDRESS_MAX_LENGTH).refine(
2021
+ (domain) => domain === MAIL_RECIPIENT_DOMAINS_ANY || MAIL_RECIPIENT_DOMAIN_PATTERN.test(domain),
2022
+ { message: "A recipient domain is lowercase, such as kanzlei.de or *.kanzlei.de, or * alone" }
2023
+ );
2024
+ var mailSenderIdSchema = z8.union([
2025
+ z8.literal(MAIL_SENDER_SYSTEM),
2026
+ z8.templateLiteral([MAIL_SENDER_CONNECTION_PREFIX, z8.string().regex(CONNECTION_NAME_PATTERN)])
2027
+ ]).superRefine((sender, context) => {
2028
+ if (sender !== MAIL_SENDER_SYSTEM)
2029
+ context.addIssue({
2030
+ code: "custom",
2031
+ message: "not_supported_yet: a Connection sender arrives with MAIL-M365S; send as system"
2032
+ });
2033
+ });
2034
+ var mailRecipientSchema = z8.union([
2035
+ z8.strictObject({ address: mailAddressSchema }),
2036
+ z8.strictObject({ user: principalId }),
2037
+ z8.strictObject({ workspace: principalId })
2038
+ ]);
2039
+ var recipientEntries = z8.array(
2040
+ z8.union([mailAddressSchema, mailRecipientSchema, z8.looseObject({ email: mailAddressSchema })])
2041
+ ).max(MAIL_SEND_MAX_ADDRESSES);
2042
+ var mailRecipientListSchema = z8.union([mailAddressSchema, recipientEntries.min(1)]);
2043
+ var mailCopyRecipientListSchema = z8.union([mailAddressSchema, recipientEntries]);
2044
+ var mailReplyToSchema = z8.union([
2045
+ mailAddressSchema,
2046
+ z8.strictObject({ address: mailAddressSchema }),
2047
+ z8.strictObject({ user: principalId })
2048
+ ]);
2049
+ var mailSubjectSchema = z8.string().min(1).max(MAIL_SUBJECT_MAX_LENGTH).regex(ONE_LINE_PATTERN, { message: "input_invalid: a subject is one line" }).refine((subject) => subject.trim().length > 0, { message: "input_invalid: a subject has text" });
2050
+ var mailBodySchema = z8.string().max(MAIL_BODY_MAX_BYTES).refine((body) => new TextEncoder().encode(body).byteLength <= MAIL_BODY_MAX_BYTES, {
2051
+ message: `input_invalid: the body exceeds ${MAIL_BODY_MAX_BYTES} bytes`
2052
+ }).meta({ format: WORKFLOW_TEXT_FORMAT_MARKDOWN });
2053
+ var mailSenderNameSchema = z8.string().min(1).max(MAIL_SENDER_NAME_MAX_LENGTH).regex(ONE_LINE_PATTERN, { message: "input_invalid: a sender name is one line" }).refine((name2) => !name2.includes("@"), {
2054
+ message: "input_invalid: a sender name holds no @"
2055
+ });
2056
+ var mailSendInputSchema = z8.strictObject({
2057
+ sender: mailSenderIdSchema.default(MAIL_SENDER_SYSTEM),
2058
+ to: mailRecipientListSchema,
2059
+ cc: mailCopyRecipientListSchema.optional(),
2060
+ bcc: mailCopyRecipientListSchema.optional(),
2061
+ subject: mailSubjectSchema,
2062
+ body: mailBodySchema,
2063
+ senderName: mailSenderNameSchema.optional(),
2064
+ replyTo: mailReplyToSchema.optional(),
2065
+ /** The language of the frame around the body; the instance's default unless set. */
2066
+ locale: z8.enum(localeCodes).optional()
2067
+ });
2068
+ var count2 = z8.number().int().min(0);
2069
+ var recipientCounts = z8.strictObject({ to: count2, cc: count2, bcc: count2 });
2070
+ var mailSendOutputSchema = z8.strictObject({
2071
+ sentAt: z8.iso.datetime({ offset: true }),
2072
+ messageId: z8.string().min(1).max(256).optional(),
2073
+ recipients: recipientCounts,
2074
+ skipped: count2,
2075
+ test: z8.literal(true).optional()
2076
+ });
2077
+ var mailPreviewRecipientSchema = z8.strictObject({
2078
+ kind: z8.enum(["person", "address"]),
2079
+ label: z8.string().min(1).max(MAIL_ADDRESS_MAX_LENGTH)
2080
+ });
2081
+ var mailSendPreviewSchema = z8.strictObject({
2082
+ from: z8.strictObject({ name: z8.string().min(1), address: mailAddressSchema }),
2083
+ replyTo: mailAddressSchema.optional(),
2084
+ to: z8.array(mailPreviewRecipientSchema),
2085
+ cc: z8.array(mailPreviewRecipientSchema),
2086
+ bcc: z8.array(mailPreviewRecipientSchema),
2087
+ skipped: count2,
2088
+ subject: z8.string(),
2089
+ html: z8.string(),
2090
+ text: z8.string()
2091
+ });
2092
+ var mailSendSimulatedOutputSchema = z8.strictObject({
2093
+ simulated: z8.literal(true),
2094
+ preview: mailSendPreviewSchema
2095
+ });
2096
+ var workflowMessageMailParamsSchema = z8.strictObject({
2097
+ subject: mailSubjectSchema,
2098
+ markdown: mailBodySchema,
2099
+ sentBy: z8.discriminatedUnion("kind", [
2100
+ z8.strictObject({ kind: z8.literal("workflow"), workflowName: z8.string().min(1).max(200) }),
2101
+ z8.strictObject({ kind: z8.literal("agent"), onBehalfOf: z8.string().min(1).max(200) })
2102
+ ]),
2103
+ test: z8.strictObject({
2104
+ intendedRecipients: z8.strictObject({
2105
+ to: z8.array(mailPreviewRecipientSchema),
2106
+ cc: z8.array(mailPreviewRecipientSchema),
2107
+ bcc: z8.array(mailPreviewRecipientSchema)
2108
+ })
2109
+ }).optional()
2110
+ });
2111
+ var workflowMailSenderFactSchema = z8.strictObject({
2112
+ sender: z8.string().min(1),
2113
+ title: z8.string().min(1),
2114
+ icon: z8.string().min(1),
2115
+ address: mailAddressSchema,
2116
+ recipientDomains: z8.array(mailRecipientDomainSchema)
2117
+ });
2118
+ var mailSendContract = {
2119
+ name: MAIL_SEND_OPERATION,
2120
+ description: "Send one e-mail as a sender of the instance (system unless set). Recipients are addresses, people of the instance and workspaces; an address outside the instance's recipient domains is refused. The body is Markdown in the instance's frame. A test run previews the mail and sends nothing.",
2121
+ inputSchema: mailSendInputSchema,
2122
+ outputSchema: mailSendOutputSchema,
2123
+ simulatedOutputSchema: mailSendSimulatedOutputSchema,
2124
+ effect: "changing",
2125
+ changeClass: "outward",
2126
+ right: MAIL_SENDER_USE_ACTION,
2127
+ resourceKind: MAIL_SENDER_RESOURCE_KIND,
2128
+ events: { after: "mail.sent", refused: "mail.refused" },
2129
+ errorCodes: MAIL_SEND_ERROR_CODES
2130
+ };
2131
+
2132
+ // src/data-scope.ts
2133
+ import { z as z9 } from "zod";
2134
+ var dataScopeNameSchema = z9.string().regex(/^[a-z][a-z0-9_]{0,62}$/u);
2135
+ var dataScopesSchema = z9.record(
2136
+ dataScopeNameSchema,
2137
+ z9.strictObject({
2138
+ label: z9.string().trim().min(1).max(120),
2139
+ valueType: z9.literal("text")
2140
+ })
2141
+ ).refine(
2142
+ (dimensions) => Object.keys(dimensions).length <= 1,
2143
+ "One data scope dimension is supported"
2144
+ );
2145
+ var scopeAssignmentInputSchema = z9.strictObject({
2146
+ dimension: dataScopeNameSchema,
2147
+ holderKind: z9.enum(["user", "group", "service_principal"]),
2148
+ holderId: z9.string().min(1).max(200).refine((value) => !value.includes("\0"), "NUL is not allowed"),
2149
+ effect: z9.enum(GRANT_EFFECTS),
2150
+ values: z9.union([
2151
+ z9.literal("all"),
2152
+ z9.array(
2153
+ z9.string().min(1).max(200).refine((value) => !value.includes("\0"), "NUL is not allowed")
2154
+ ).max(1e4)
2155
+ ])
2156
+ });
2157
+ var identifier = z9.string().regex(/^[a-z_][a-z0-9_]{0,62}$/u);
2158
+ var scopedTablesSchema = z9.record(
2159
+ identifier,
2160
+ z9.strictObject({
2161
+ scope: z9.record(dataScopeNameSchema, identifier).refine((scope) => Object.keys(scope).length === 1, "A scoped table names one dimension")
2162
+ })
2163
+ );
2164
+
2165
+ // src/feedback-values.ts
2166
+ var FEEDBACK_TEXT_MAX_LENGTH = 4e3;
2167
+ var FEEDBACK_SUMMARY_MAX_LENGTH = 1e3;
2168
+ var FEEDBACK_CATEGORY_MAX_LENGTH = 60;
2169
+ var FEEDBACK_NOTE_MAX_LENGTH = 2e3;
2170
+ var FEEDBACK_SUBJECT_KINDS = ["message"];
2171
+ var FEEDBACK_STATES = ["new", "handled"];
2172
+
2173
+ // src/callable-operations.ts
2174
+ import { z as z10 } from "zod";
2175
+ var operationSourceSchema = z10.object({
2176
+ kind: z10.enum(OPERATION_SOURCE_KINDS),
2177
+ title: z10.string().optional(),
2178
+ /** The Connection's `service`, for its icon. */
2179
+ service: z10.string().optional()
2180
+ });
2181
+ var jsonSchemaObject = z10.record(z10.string(), z10.unknown());
2182
+ var callableOperationSchema = z10.object({
2183
+ /** What a step writes under `operation`. */
2184
+ name: z10.string(),
2185
+ effect: z10.enum(OPERATION_EFFECTS),
2186
+ title: z10.string(),
2187
+ /** The operation's own description, where its source gives one. */
2188
+ description: z10.string().optional(),
2189
+ source: operationSourceSchema,
2190
+ /** False where a call cannot reach its source now, such as a Connection that is off. */
2191
+ available: z10.boolean(),
2192
+ inputSchema: jsonSchemaObject.optional(),
2193
+ outputSchema: jsonSchemaObject.optional()
2194
+ });
2195
+ var callableOperationsPageSchema = z10.object({
2196
+ operations: z10.array(callableOperationSchema),
2197
+ /** Passed back as `cursor`, with the same filters, until it is absent. */
2198
+ nextCursor: z10.string().optional(),
2199
+ /** A source left operations out: a missing name proves no absence. */
2200
+ truncated: z10.boolean()
2201
+ });
2202
+ export {
2203
+ ACCESS_SOURCES,
2204
+ ACTIONS,
2205
+ ACTIVE_AGENT_RUN_STATUSES,
2206
+ ADMINISTERED_USER_STATUSES,
2207
+ AGENT_AVAILABILITY_MODES,
2208
+ AGENT_EDITABLE_FIELDS,
2209
+ AGENT_PREVIEW_SOURCES,
2210
+ AGENT_RUN_FAILURE_CATEGORIES,
2211
+ AGENT_RUN_STATUSES,
2212
+ AGENT_STARTERS_MAX,
2213
+ AGENT_USE_SETTINGS,
2214
+ API_CREDENTIAL_SCOPES,
2215
+ APPROVAL_CHECK_FAILURE_OUTCOMES,
2216
+ APPROVAL_CHECK_STATUSES,
2217
+ APPROVAL_EXECUTIONS,
2218
+ APPROVAL_REQUEST_STATUSES,
2219
+ APP_ACTION_CALL_STATUSES,
2220
+ APP_AUDIENCES,
2221
+ APP_ERROR_CODES,
2222
+ APP_ERROR_STATUS_CODES,
2223
+ APP_MODES,
2224
+ ARTIFACT_PREVIEW_IMAGE_FORMATS,
2225
+ ARTIFACT_PREVIEW_IMAGE_MIME_TYPES,
2226
+ ARTIFACT_PREVIEW_STATUSES,
2227
+ ASSET_ACCESS_VERBS,
2228
+ ASSET_LIFECYCLES,
2229
+ ASSET_NAME_REFUSAL_REASONS,
2230
+ ASSET_OWNER_KINDS,
2231
+ ASSET_REPO_BUNDLE_KINDS,
2232
+ ASSET_REPRESENTATIONS,
2233
+ ASSET_SYNC_CHANGE_TYPES,
2234
+ ATTACHMENT_CREATE_OUTCOMES,
2235
+ AUDIT_ACTOR_KINDS,
2236
+ AUDIT_EVENT_STATUSES,
2237
+ AUDIT_OUTCOMES,
2238
+ AUDIT_TIERS,
2239
+ AUTH_PRINCIPAL_KINDS,
2240
+ AUTH_SCOPE_WILDCARD,
2241
+ CATALOGUE_CATEGORIES,
2242
+ CATALOGUE_PARTS,
2243
+ CHAT_MESSAGE_ROLES,
2244
+ CHAT_SESSION_AUTH_SCOPES,
2245
+ COLLABORATION_WORKSPACE_KINDS,
2246
+ CONFIG_ASSET_CHANGE_OPERATIONS,
2247
+ CONFIG_ASSET_KINDS,
2248
+ CONNECTION_BINDING_STATES,
2249
+ CONNECTION_CREDENTIAL_MODES,
2250
+ CONNECTION_EXPOSURES,
2251
+ CONNECTION_HEALTH_STATES,
2252
+ CONNECTION_NAME_MAX_LENGTH,
2253
+ CONNECTION_NAME_PATTERN,
2254
+ CONNECTION_NETWORKS,
2255
+ CONNECTION_OAUTH_REGISTRATIONS,
2256
+ CONNECTION_OPERATION_POLICIES,
2257
+ CONNECTION_OPERATION_STATUSES,
2258
+ CONNECTION_ORIGINS,
2259
+ CONNECTION_PROPOSAL_BINDING_STATES,
2260
+ CONNECTION_PROPOSAL_STATES,
2261
+ CONNECTION_PROVIDER_REVOCATIONS,
2262
+ CONNECTION_SECRET_STATES,
2263
+ CONNECTION_SIGN_IN_NEEDS,
2264
+ CONNECTOR_TEST_STATUSES,
2265
+ CONVERSATION_ATTACHMENT_STATUSES,
2266
+ CONVERSATION_KINDS,
2267
+ CONVERSATION_VISIBILITIES,
2268
+ DATABASE_RELATION_TYPES,
2269
+ DATA_STORE_CONDITIONS,
2270
+ DATA_STORE_INSERT_CONFLICT_MODES,
2271
+ DATA_STORE_LOAD_CONFLICT_MODES,
2272
+ DATA_STORE_MIGRATION_OUTCOMES,
2273
+ DATA_STORE_SCALAR_TYPES,
2274
+ DATA_STORE_STATUSES,
2275
+ DECIDED_APPROVAL_REQUEST_STATUSES,
2276
+ DELETION_STATES,
2277
+ ENDED_AGENT_RUN_STATUSES,
2278
+ ENDED_APPROVAL_EXECUTIONS,
2279
+ FAILED_JOB_STATUSES,
2280
+ FEEDBACK_CATEGORY_MAX_LENGTH,
2281
+ FEEDBACK_NOTE_MAX_LENGTH,
2282
+ FEEDBACK_STATES,
2283
+ FEEDBACK_SUBJECT_KINDS,
2284
+ FEEDBACK_SUMMARY_MAX_LENGTH,
2285
+ FEEDBACK_TEXT_MAX_LENGTH,
2286
+ FIRST_PARTY_AUTH_SCOPES,
2287
+ FOLLOW_UP_MODES,
2288
+ FOLLOW_UP_STATUSES,
2289
+ GRANT_EFFECTS,
2290
+ GRANT_HOLDER_KINDS,
2291
+ GRANT_SCOPE_KINDS,
2292
+ GUARDRAIL_HIT_OUTCOMES,
2293
+ GUARDRAIL_NAME_MAX_LENGTH,
2294
+ GUARDRAIL_NAME_PATTERN,
2295
+ GUARDRAIL_OUTCOMES,
2296
+ IDEMPOTENCY_KEY_MAX_LENGTH,
2297
+ INFRASTRUCTURE_SECRET_STATES,
2298
+ INFRASTRUCTURE_WITHHELD_FIELDS,
2299
+ JOB_STATUSES,
2300
+ KNOWLEDGE_BASE_STATUSES,
2301
+ KNOWLEDGE_CHECK_STATUSES,
2302
+ KNOWLEDGE_DOCUMENT_FAILURE_CODES,
2303
+ KNOWLEDGE_DOCUMENT_STATES,
2304
+ KNOWLEDGE_DOCUMENT_WAIT_CODES,
2305
+ KNOWLEDGE_EMBEDDING_STATES,
2306
+ KNOWLEDGE_FILE_MAX_BYTES,
2307
+ KNOWLEDGE_SEARCH_SIGNALS,
2308
+ KNOWLEDGE_SOURCE_FAILURE_CODES,
2309
+ KNOWLEDGE_SOURCE_ITEM_FAILURE_CODES,
2310
+ KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES,
2311
+ KNOWLEDGE_SOURCE_ITEM_STATES,
2312
+ KNOWLEDGE_SYNC_COUNTS,
2313
+ KNOWLEDGE_SYNC_MODES,
2314
+ KNOWLEDGE_SYNC_RUN_STATES,
2315
+ LISTED_DATA_STORE_STATUSES,
2316
+ LIVE_JOB_STATUSES,
2317
+ MAIL_ADDRESS_MAX_LENGTH,
2318
+ MAIL_ATTACHMENTS_MAX_BYTES,
2319
+ MAIL_ATTACHMENTS_MAX_FILES,
2320
+ MAIL_AUDIT_MAX_DOMAINS,
2321
+ MAIL_BODY_MAX_BYTES,
2322
+ MAIL_OUTBOUND_DEFAULT_LIMITS,
2323
+ MAIL_OUTBOUND_FOOTER_MAX_LENGTH,
2324
+ MAIL_RECIPIENT_DOMAINS_ANY,
2325
+ MAIL_RECIPIENT_DOMAIN_PATTERN,
2326
+ MAIL_RECIPIENT_ID_PATTERN,
2327
+ MAIL_SENDER_CONNECTION_PREFIX,
2328
+ MAIL_SENDER_NAME_MAX_LENGTH,
2329
+ MAIL_SENDER_RESOURCE_KIND,
2330
+ MAIL_SENDER_SYSTEM,
2331
+ MAIL_SENDER_SYSTEM_ICON,
2332
+ MAIL_SENDER_USE_ACTION,
2333
+ MAIL_SEND_ERROR_CODES,
2334
+ MAIL_SEND_MAX_ADDRESSES,
2335
+ MAIL_SEND_OPERATION,
2336
+ MAIL_SEND_REFUSAL_REASONS,
2337
+ MAIL_SUBJECT_MAX_LENGTH,
2338
+ MAIL_WORKFLOW_MESSAGE_TEMPLATE,
2339
+ MANAGED_FILE_STATUSES,
2340
+ MESSAGE_FINISH_STATUSES,
2341
+ MODEL_PROVIDER_AUTH_MODES,
2342
+ MODEL_USAGE_EVENT_STATUSES,
2343
+ MODEL_USAGE_LIMIT_METRICS,
2344
+ MODEL_USAGE_LIMIT_PERIODS,
2345
+ MODEL_USAGE_LIMIT_SCOPES,
2346
+ MODEL_USAGE_SOURCES,
2347
+ MODEL_USAGE_TIERS,
2348
+ NOTIFY_CHANNELS,
2349
+ OPENAI_COMPATIBLE_APIS,
2350
+ OPERATIONS_AUDIENCES,
2351
+ OPERATION_CHANGE_CLASSES,
2352
+ OPERATION_CONFIRMATION_DECISIONS,
2353
+ OPERATION_DENIAL_REASONS,
2354
+ OPERATION_EFFECTS,
2355
+ OPERATION_ORIGIN_KINDS,
2356
+ OPERATION_RUN_DECISION_MODES,
2357
+ OPERATION_RUN_DECISION_REASONS,
2358
+ OPERATION_RUN_STATUSES,
2359
+ OPERATION_SOURCE_KINDS,
2360
+ OPERATION_TARGETS,
2361
+ PERSONAL_WORKSPACES_KEY,
2362
+ PERSON_POLICY_SETTINGS,
2363
+ POLICY_VALUES,
2364
+ PRINCIPAL_HOLDER_KINDS,
2365
+ PROVIDER_CHECK_ERROR_CLASSES,
2366
+ PROVIDER_PORTS,
2367
+ PROVIDER_REGIONS,
2368
+ PUBLISHED_DATA_CONSUMER_KINDS,
2369
+ READING_POLICY_VALUES,
2370
+ REASONING_EFFORTS,
2371
+ RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE,
2372
+ RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM,
2373
+ RECORDS_PROPOSE_MAX_ITEMS_PER_CALL,
2374
+ RECORD_FIELD_FAILURE_CODES,
2375
+ RECORD_FIELD_STATES,
2376
+ RECORD_FLAG_REASONS,
2377
+ ROLE_GRANT_SCOPE_KINDS,
2378
+ ROLE_PENDING_CHANGES,
2379
+ ROLE_PENDING_DECISIONS,
2380
+ SCHEDULED_START_STATES,
2381
+ SERVICE_PRINCIPAL_PERMISSIONS,
2382
+ SERVICE_PRINCIPAL_STATUSES,
2383
+ SKILL_CHANGE_TYPES,
2384
+ SKILL_FRONTMATTER_FIELDS,
2385
+ SKILL_FRONTMATTER_MAX_BYTES,
2386
+ SKILL_FRONTMATTER_MAX_DEPTH,
2387
+ SKILL_NAME_PATTERN,
2388
+ SKILL_NAME_RULE,
2389
+ SKILL_ORIGINS,
2390
+ SKILL_PORTABLE_DESCRIPTION_MAX_CHARS,
2391
+ SKILL_PORTABLE_NAME_MAX_CHARS,
2392
+ SKILL_RESOURCE_MEDIA_TYPES,
2393
+ SKILL_STARTERS_MAX,
2394
+ SKILL_STARTER_LINE_MAX_LENGTH,
2395
+ SKILL_SUMMARY_MAX_LENGTH,
2396
+ STRUCTURED_DATA_REVIEW_REASONS,
2397
+ SUPPORTED_IMAGE_MIME_TYPES,
2398
+ SkillMarkdownError,
2399
+ THEME_MODES,
2400
+ THEME_MODE_PREFERENCES,
2401
+ TOOL_CALL_STATES,
2402
+ TOOL_DECISION_MODES,
2403
+ TOOL_DECISION_OUTCOMES,
2404
+ TOOL_DISPLAY_MODES,
2405
+ TOOL_GROUPS,
2406
+ TOOL_INPUT_PARSE_ERROR_CODES,
2407
+ USAGE_BREAKDOWN_DIMENSIONS,
2408
+ USAGE_COST_STATUSES,
2409
+ USAGE_ORIGINS,
2410
+ USAGE_SPEND_LIMIT_LEVELS,
2411
+ USER_STATUSES,
2412
+ WAITING_OPERATION_RUN_STATUSES,
2413
+ WEB_SOURCE_PROVIDERS,
2414
+ WORKFLOW_DATASET_DOWNLOAD_FORMATS,
2415
+ WORKFLOW_DATASET_STATES,
2416
+ WORKFLOW_ENDED_STATUSES,
2417
+ WORKFLOW_EXECUTED_STEP_TYPES,
2418
+ WORKFLOW_KINDS,
2419
+ WORKFLOW_MARKDOWN_MAX_COLUMNS,
2420
+ WORKFLOW_MARKDOWN_MAX_ROWS,
2421
+ WORKFLOW_NAME_PATTERN,
2422
+ WORKFLOW_NAME_RULE,
2423
+ WORKFLOW_RESERVED_STEP_TYPES,
2424
+ WORKFLOW_RIGHTS_REVISIONS,
2425
+ WORKFLOW_RIGHT_NEEDED_FOR,
2426
+ WORKFLOW_RIGHT_REFUSALS,
2427
+ WORKFLOW_RUN_ACCOUNT_STATUSES,
2428
+ WORKFLOW_RUN_MODES,
2429
+ WORKFLOW_RUN_STATUSES,
2430
+ WORKFLOW_STEP_RUN_STATUSES,
2431
+ WORKFLOW_STEP_SOURCE_KINDS,
2432
+ WORKFLOW_STEP_TYPES,
2433
+ WORKFLOW_TEST_REVISIONS,
2434
+ WORKFLOW_TEXT_FORMAT_MARKDOWN,
2435
+ WORKFLOW_TEXT_MAX_PARTS,
2436
+ WORKFLOW_TRIGGER_KINDS,
2437
+ WORKSPACE_ACCENT_COLORS,
2438
+ WORKSPACE_ACCESS_STATES,
2439
+ WORKSPACE_COMMAND_STATUSES,
2440
+ WORKSPACE_FILE_KINDS,
2441
+ WORKSPACE_MEMBERSHIP_ROLES,
2442
+ WORKSPACE_SECTIONS,
2443
+ WORKSPACE_USE_ASSET_KINDS,
2444
+ WORKSPACE_VISIBILITIES,
2445
+ YAML_DATA_MAX_VALUES,
2446
+ YamlDataError,
2447
+ agentConfigSchema,
2448
+ callableOperationSchema,
2449
+ callableOperationsPageSchema,
2450
+ checkStorableTexts,
2451
+ dataScopeNameSchema,
2452
+ dataScopesSchema,
2453
+ dataStoreRecordFieldSchema,
2454
+ dataStoreRecordProposalItemSchema,
2455
+ dataStoreRecordsContracts,
2456
+ dataStoreRecordsDecideInputSchema,
2457
+ dataStoreRecordsDecideOutputSchema,
2458
+ dataStoreRecordsFlaggedInputSchema,
2459
+ dataStoreRecordsFlaggedOutputSchema,
2460
+ dataStoreRecordsProposeInputSchema,
2461
+ dataStoreRecordsRuleSchema,
2462
+ deriveSkillTitle,
2463
+ formatSkillMarkdown,
2464
+ isStorableText,
2465
+ knowledgeExtractFieldsInputSchema,
2466
+ knowledgeExtractFieldsOutputSchema,
2467
+ knowledgeFieldValueSchema,
2468
+ knowledgeFirstPassConfirmationSchema,
2469
+ knowledgeIngestFetchSchema,
2470
+ knowledgeIngestInputSchema,
2471
+ knowledgeIngestItemSchema,
2472
+ knowledgeIngestOutputSchema,
2473
+ knowledgeLocateInputSchema,
2474
+ knowledgeLocateOutputSchema,
2475
+ knowledgePendingInputSchema,
2476
+ knowledgePendingOutputSchema,
2477
+ knowledgePendingRowSchema,
2478
+ knowledgeProcessorOutputSchema,
2479
+ knowledgePutProcessedInputSchema,
2480
+ knowledgeRecordsRefusalSchema,
2481
+ knowledgeRetryInputSchema,
2482
+ knowledgeRetryOutputSchema,
2483
+ knowledgeSourceItemsInputSchema,
2484
+ knowledgeSourceItemsOutputSchema,
2485
+ knowledgeSourcesOutputSchema,
2486
+ knowledgeSyncInputSchema,
2487
+ knowledgeSyncResultSchema,
2488
+ knowledgeWithdrawInputSchema,
2489
+ knowledgeWithdrawOutputSchema,
2490
+ knowledgeWorkflowSourceSchema,
2491
+ knowledgeWorkflowSourcesOutputSchema,
2492
+ knowledgeWriteContracts,
2493
+ loadYamlData,
2494
+ localeCodes,
2495
+ localizedStringSchema,
2496
+ mailAddressSchema,
2497
+ mailBodySchema,
2498
+ mailCopyRecipientListSchema,
2499
+ mailPreviewRecipientSchema,
2500
+ mailRecipientDomainSchema,
2501
+ mailRecipientListSchema,
2502
+ mailRecipientSchema,
2503
+ mailReplyToSchema,
2504
+ mailSendContract,
2505
+ mailSendInputSchema,
2506
+ mailSendOutputSchema,
2507
+ mailSendPreviewSchema,
2508
+ mailSendRefusalDetailsSchema,
2509
+ mailSendSimulatedOutputSchema,
2510
+ mailSenderIdSchema,
2511
+ mailSenderNameSchema,
2512
+ mailSubjectSchema,
2513
+ operationBatchFailureSchema,
2514
+ operationBatchResultSchema,
2515
+ operationPagingSchema,
2516
+ operationSourceSchema,
2517
+ parseSkillMarkdown,
2518
+ providerRegionSchema,
2519
+ readYamlData,
2520
+ recordColumnTakes,
2521
+ recordEvidenceResultSchema,
2522
+ scopeAssignmentInputSchema,
2523
+ scopedTablesSchema,
2524
+ skillConfigSchema,
2525
+ skillFileEntrySchema,
2526
+ skillFileFrontmatterSchema,
2527
+ skillNameSchema,
2528
+ skillPortabilityIssues,
2529
+ skillResourceConfigSchema,
2530
+ skillResourceMediaTypeForPath,
2531
+ skillResourcePathSchema,
2532
+ skillStarterSchema,
2533
+ workflowConfigSchema,
2534
+ workflowDataFlowsSchema,
2535
+ workflowDatasetReferenceSchema,
2536
+ workflowMailSenderFactSchema,
2537
+ workflowMessageMailParamsSchema,
2538
+ yamlValueIssue,
2539
+ yamlValueIssueSentence
2540
+ };