@work-shape/catalyst-asset-schemas 0.8.0-rc.4 → 0.8.0-rc.5
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.d.ts +1512 -24
- package/dist/index.js +929 -122
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/asset-types.ts
|
|
2
|
+
var ASSET_ACCESS_VERBS = ["read", "write", "delete", "publish"];
|
|
2
3
|
var localeCodes = ["en", "de"];
|
|
3
4
|
var REASONING_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
|
|
4
5
|
var SKILL_STARTERS_MAX = 2;
|
|
@@ -12,6 +13,7 @@ var SKILL_RESOURCE_MEDIA_TYPES = [
|
|
|
12
13
|
"application/json",
|
|
13
14
|
"application/yaml"
|
|
14
15
|
];
|
|
16
|
+
var APP_AUDIENCES = ["self", "workspace", "instance"];
|
|
15
17
|
|
|
16
18
|
// src/contract-values.ts
|
|
17
19
|
var AUTH_SCOPE_WILDCARD = "*";
|
|
@@ -83,16 +85,23 @@ var ACTIONS = [
|
|
|
83
85
|
"data_store.delete",
|
|
84
86
|
"data_store.insert",
|
|
85
87
|
"data_store.execute",
|
|
88
|
+
"data_store.records",
|
|
86
89
|
"knowledge_base.read",
|
|
87
90
|
"knowledge_base.write",
|
|
88
91
|
"knowledge_base.publish",
|
|
89
92
|
"knowledge_base.delete",
|
|
90
93
|
"knowledge_base.use",
|
|
94
|
+
// Sending e-mail as one sender of the instance (`mail.send`). The `admin` role holds it on
|
|
95
|
+
// the sender `system`; a member only by a grant.
|
|
96
|
+
"mail_sender.use",
|
|
91
97
|
"guardrail.read",
|
|
92
98
|
"guardrail.write",
|
|
93
99
|
"guardrail.publish",
|
|
94
100
|
"guardrail.delete",
|
|
95
101
|
"operations.approve",
|
|
102
|
+
// Reading the written feedback on agent messages and marking it handled (LU-4): on the
|
|
103
|
+
// instance, or on one workspace for the agents it owns. No bundle carries it.
|
|
104
|
+
"feedback.review",
|
|
96
105
|
"users.manage",
|
|
97
106
|
"usage.view",
|
|
98
107
|
"audit.view",
|
|
@@ -101,11 +110,11 @@ var ACTIONS = [
|
|
|
101
110
|
// Their keys stay with `api_access.manage`.
|
|
102
111
|
"service_principals.manage",
|
|
103
112
|
"agent_models.manage",
|
|
104
|
-
"assets.release"
|
|
113
|
+
"assets.release",
|
|
114
|
+
// The two bundles of a workspace: one row each, expanded by the evaluator (`bundleCarries`).
|
|
115
|
+
"builder",
|
|
116
|
+
"publisher"
|
|
105
117
|
];
|
|
106
|
-
var NAMESPACE_PREFIX_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*-$/u;
|
|
107
|
-
var NAMESPACE_PREFIX_MIN_LENGTH = 2;
|
|
108
|
-
var NAMESPACE_PREFIX_MAX_LENGTH = 32;
|
|
109
118
|
var APP_ERROR_STATUS_CODES = {
|
|
110
119
|
BAD_REQUEST: 400,
|
|
111
120
|
UNAUTHENTICATED: 401,
|
|
@@ -152,13 +161,31 @@ var CONNECTION_HEALTH_STATES = [
|
|
|
152
161
|
"secret_unreadable"
|
|
153
162
|
];
|
|
154
163
|
var GRANT_HOLDER_KINDS = ["user", "service_principal", "role", "group"];
|
|
155
|
-
var GRANT_SCOPE_KINDS = ["instance", "workspace", "
|
|
164
|
+
var GRANT_SCOPE_KINDS = ["instance", "workspace", "asset"];
|
|
165
|
+
var ROLE_GRANT_SCOPE_KINDS = [
|
|
166
|
+
"instance",
|
|
167
|
+
"workspace",
|
|
168
|
+
"asset"
|
|
169
|
+
];
|
|
170
|
+
var ROLE_PENDING_CHANGES = ["added", "removed"];
|
|
171
|
+
var ROLE_PENDING_DECISIONS = ["apply", "dismiss"];
|
|
156
172
|
var GRANT_EFFECTS = ["allow", "deny"];
|
|
157
173
|
var ACCESS_SOURCES = ["role", "legacy_ref", "grant", "membership"];
|
|
158
174
|
var POLICY_VALUES = ["allow", "confirm", "approval", "deny"];
|
|
159
175
|
var AUTH_PRINCIPAL_KINDS = ["user", "service"];
|
|
160
176
|
var ADMINISTERED_USER_STATUSES = ["active", "disabled", "deleting"];
|
|
161
177
|
var SERVICE_PRINCIPAL_STATUSES = ["active", "disabled"];
|
|
178
|
+
var WORKFLOW_RIGHT_NEEDED_FOR = ["publish", "run"];
|
|
179
|
+
var WORKFLOW_RIGHTS_REVISIONS = ["draft", "published"];
|
|
180
|
+
var WORKFLOW_RUN_ACCOUNT_STATUSES = [...SERVICE_PRINCIPAL_STATUSES, "unknown"];
|
|
181
|
+
var WORKFLOW_RIGHT_REFUSALS = [
|
|
182
|
+
"not_grantable",
|
|
183
|
+
"not_administrator",
|
|
184
|
+
"not_held",
|
|
185
|
+
"account_unavailable",
|
|
186
|
+
"asset_unavailable",
|
|
187
|
+
"not_visible"
|
|
188
|
+
];
|
|
162
189
|
var SERVICE_PRINCIPAL_PERMISSIONS = [
|
|
163
190
|
"config_assets.read",
|
|
164
191
|
"config_assets.release"
|
|
@@ -453,10 +480,11 @@ var DATA_STORE_STATUSES = ["provisioning", "ready", "retired"];
|
|
|
453
480
|
var DATA_STORE_MIGRATION_OUTCOMES = ["none", "pending", "applied", "failed"];
|
|
454
481
|
var KNOWLEDGE_BASE_STATUSES = ["unchecked", "preparing", "ok", "needs_attention"];
|
|
455
482
|
var KNOWLEDGE_DOCUMENT_STATES = ["pending", "indexed", "failed"];
|
|
483
|
+
var KNOWLEDGE_FILE_MAX_BYTES = 25 * 1024 * 1024;
|
|
456
484
|
var KNOWLEDGE_DOCUMENT_FAILURE_CODES = [
|
|
457
485
|
// The extractor does not read the file's format.
|
|
458
486
|
"knowledge_file_format_unsupported",
|
|
459
|
-
// The file is over a limit of the extraction: size
|
|
487
|
+
// The file is over a limit of the extraction: its size or the size of its text.
|
|
460
488
|
"knowledge_file_over_limit",
|
|
461
489
|
// The file is corrupt, encrypted, or not the format it claims.
|
|
462
490
|
"knowledge_file_unreadable",
|
|
@@ -471,7 +499,14 @@ var KNOWLEDGE_DOCUMENT_FAILURE_CODES = [
|
|
|
471
499
|
// No text to search, such as a scanned PDF without a text layer.
|
|
472
500
|
"knowledge_text_empty",
|
|
473
501
|
// Indexing failed on every attempt.
|
|
474
|
-
"knowledge_index_failed"
|
|
502
|
+
"knowledge_index_failed",
|
|
503
|
+
// A PDF or DOCX with more pages than `knowledge.maxPagesPerDocument`, counted before its text
|
|
504
|
+
// is read.
|
|
505
|
+
"knowledge_file_too_many_pages",
|
|
506
|
+
// A built-in or Workflow processor returned output outside its contract.
|
|
507
|
+
"knowledge_processor_output_invalid",
|
|
508
|
+
// Conversion exceeded its page-aware deadline.
|
|
509
|
+
"knowledge_conversion_timeout"
|
|
475
510
|
];
|
|
476
511
|
var KNOWLEDGE_DOCUMENT_WAIT_CODES = [
|
|
477
512
|
// A usage limit of the instance or the workspace refuses the embedding calls. Indexing goes
|
|
@@ -486,7 +521,9 @@ var KNOWLEDGE_SOURCE_FAILURE_CODES = [
|
|
|
486
521
|
// A fetch failed on every attempt.
|
|
487
522
|
"knowledge_fetch_failed",
|
|
488
523
|
// The Knowledge Base holds its document limit; the listing stopped discovering there.
|
|
489
|
-
"knowledge_source_limit_reached"
|
|
524
|
+
"knowledge_source_limit_reached",
|
|
525
|
+
"knowledge_item_invalid",
|
|
526
|
+
"knowledge_fetch_not_allowed"
|
|
490
527
|
];
|
|
491
528
|
var KNOWLEDGE_SOURCE_ITEM_FAILURE_CODES = [
|
|
492
529
|
...KNOWLEDGE_SOURCE_FAILURE_CODES,
|
|
@@ -500,7 +537,7 @@ var KNOWLEDGE_SOURCE_ITEM_STATES = [
|
|
|
500
537
|
"withdrawn"
|
|
501
538
|
];
|
|
502
539
|
var KNOWLEDGE_SYNC_MODES = ["initial", "changes", "full"];
|
|
503
|
-
var KNOWLEDGE_SYNC_RUN_STATES = ["running", "done", "failed"];
|
|
540
|
+
var KNOWLEDGE_SYNC_RUN_STATES = ["running", "done", "failed", "superseded"];
|
|
504
541
|
var KNOWLEDGE_SYNC_COUNTS = [
|
|
505
542
|
"discovered",
|
|
506
543
|
"added",
|
|
@@ -518,6 +555,7 @@ var DATABASE_RELATION_TYPES = [
|
|
|
518
555
|
"foreign_table"
|
|
519
556
|
];
|
|
520
557
|
var WORKFLOW_RUN_STATUSES = [
|
|
558
|
+
"continued",
|
|
521
559
|
"queued",
|
|
522
560
|
"running",
|
|
523
561
|
"waiting",
|
|
@@ -544,6 +582,14 @@ var WORKFLOW_RESERVED_STEP_TYPES = [
|
|
|
544
582
|
];
|
|
545
583
|
var WORKFLOW_TRIGGER_KINDS = ["manual", "schedule", "parent"];
|
|
546
584
|
var NOTIFY_CHANNELS = ["inbox", "mail"];
|
|
585
|
+
var WORKFLOW_STEP_SOURCE_KINDS = [
|
|
586
|
+
"connection",
|
|
587
|
+
"data_store",
|
|
588
|
+
"knowledge_base",
|
|
589
|
+
"workflow",
|
|
590
|
+
"mail_sender",
|
|
591
|
+
"other"
|
|
592
|
+
];
|
|
547
593
|
var PRINCIPAL_HOLDER_KINDS = [
|
|
548
594
|
"user",
|
|
549
595
|
"service_principal"
|
|
@@ -642,12 +688,19 @@ var WORKFLOW_STEP_RUN_STATUSES = [
|
|
|
642
688
|
"cancelled"
|
|
643
689
|
];
|
|
644
690
|
var WORKFLOW_ENDED_STATUSES = [
|
|
691
|
+
"continued",
|
|
645
692
|
"done",
|
|
646
693
|
"failed",
|
|
647
694
|
"cancelled",
|
|
648
695
|
"limit_reached"
|
|
649
696
|
];
|
|
650
697
|
var MANAGED_FILE_STATUSES = ["available", "released", "deleted"];
|
|
698
|
+
var WORKFLOW_KINDS = ["process", "data"];
|
|
699
|
+
var WORKFLOW_DATASET_DOWNLOAD_FORMATS = ["jsonl", "csv"];
|
|
700
|
+
var WORKSPACE_USE_ASSET_KINDS = ["knowledge_base", "connection"];
|
|
701
|
+
var PUBLISHED_DATA_CONSUMER_KINDS = ["app", "workflow", "knowledge_base"];
|
|
702
|
+
var SCHEDULED_START_STATES = ["active", "paused"];
|
|
703
|
+
var AGENT_PREVIEW_SOURCES = ["draft", "live"];
|
|
651
704
|
|
|
652
705
|
// src/schemas.ts
|
|
653
706
|
import { z } from "zod";
|
|
@@ -807,12 +860,12 @@ var skillConfigObjectSchema = z.object({
|
|
|
807
860
|
icon: z.string().min(1).optional()
|
|
808
861
|
});
|
|
809
862
|
var skillConfigSchema = skillConfigObjectSchema.superRefine((skill, context) => {
|
|
810
|
-
for (const
|
|
811
|
-
if (skill.frontmatter && Object.hasOwn(skill.frontmatter,
|
|
863
|
+
for (const key2 of SKILL_FRONTMATTER_FIELDS) {
|
|
864
|
+
if (skill.frontmatter && Object.hasOwn(skill.frontmatter, key2)) {
|
|
812
865
|
context.addIssue({
|
|
813
866
|
code: "custom",
|
|
814
|
-
path: ["frontmatter",
|
|
815
|
-
message: `Skill frontmatter cannot hold '${
|
|
867
|
+
path: ["frontmatter", key2],
|
|
868
|
+
message: `Skill frontmatter cannot hold '${key2}': it is a field of the skill itself`
|
|
816
869
|
});
|
|
817
870
|
}
|
|
818
871
|
}
|
|
@@ -845,7 +898,7 @@ var welcomeSubtitleSchema = z.union([
|
|
|
845
898
|
message: "At least one localized value is required"
|
|
846
899
|
})
|
|
847
900
|
]);
|
|
848
|
-
var agentNameSchema = z.string().min(1).refine((
|
|
901
|
+
var agentNameSchema = z.string().min(1).refine((name2) => name2 !== "." && name2 !== "..", {
|
|
849
902
|
message: "Agent name must not be '.' or '..'"
|
|
850
903
|
});
|
|
851
904
|
var agentConfigSchema = z.object({
|
|
@@ -899,8 +952,8 @@ import yaml from "js-yaml";
|
|
|
899
952
|
// src/yaml-data.ts
|
|
900
953
|
import { JSON_SCHEMA, YAMLException, load } from "js-yaml";
|
|
901
954
|
var YAML_DATA_MAX_VALUES = 1e5;
|
|
902
|
-
function isStorableText(
|
|
903
|
-
return !
|
|
955
|
+
function isStorableText(text2) {
|
|
956
|
+
return !text2.includes("\0") && !/\p{Surrogate}/u.test(text2);
|
|
904
957
|
}
|
|
905
958
|
function checkStorableTexts(value, maxValues) {
|
|
906
959
|
const pending = [value];
|
|
@@ -912,15 +965,15 @@ function checkStorableTexts(value, maxValues) {
|
|
|
912
965
|
} else if (Array.isArray(next)) {
|
|
913
966
|
for (const entry of next) pending.push(entry);
|
|
914
967
|
} else if (typeof next === "object" && next !== null) {
|
|
915
|
-
for (const [
|
|
916
|
-
if (!isStorableText(
|
|
968
|
+
for (const [key2, entry] of Object.entries(next)) {
|
|
969
|
+
if (!isStorableText(key2)) return "unstorable";
|
|
917
970
|
pending.push(entry);
|
|
918
971
|
}
|
|
919
972
|
}
|
|
920
973
|
}
|
|
921
974
|
return "storable";
|
|
922
975
|
}
|
|
923
|
-
function readYamlData(
|
|
976
|
+
function readYamlData(text2, file, options = {}) {
|
|
924
977
|
const fail = (code, message, line, column) => ({
|
|
925
978
|
ok: false,
|
|
926
979
|
issue: {
|
|
@@ -932,7 +985,7 @@ function readYamlData(text, file, options = {}) {
|
|
|
932
985
|
});
|
|
933
986
|
let value;
|
|
934
987
|
try {
|
|
935
|
-
value = load(
|
|
988
|
+
value = load(text2, { schema: JSON_SCHEMA, filename: file });
|
|
936
989
|
} catch (error) {
|
|
937
990
|
if (error instanceof YAMLException) {
|
|
938
991
|
const markLine = error.mark?.line;
|
|
@@ -969,8 +1022,8 @@ var YamlDataError = class extends Error {
|
|
|
969
1022
|
this.issue = issue;
|
|
970
1023
|
}
|
|
971
1024
|
};
|
|
972
|
-
function loadYamlData(
|
|
973
|
-
const read = readYamlData(
|
|
1025
|
+
function loadYamlData(text2, file) {
|
|
1026
|
+
const read = readYamlData(text2, file);
|
|
974
1027
|
if (!read.ok) throw new YamlDataError(read.issue);
|
|
975
1028
|
return read.value;
|
|
976
1029
|
}
|
|
@@ -1007,7 +1060,7 @@ function parseSkillMarkdown(contents, skillFile, skillPath) {
|
|
|
1007
1060
|
}
|
|
1008
1061
|
const content = (match[2] ?? "").trim();
|
|
1009
1062
|
const { name: named, title, description, summary, starters, ...others } = frontmatter.data;
|
|
1010
|
-
const
|
|
1063
|
+
const name2 = named ?? deriveSkillName(skillPath);
|
|
1011
1064
|
const json = JSON.stringify(others);
|
|
1012
1065
|
if (json.length > SKILL_FRONTMATTER_MAX_BYTES) {
|
|
1013
1066
|
throw new SkillMarkdownError(
|
|
@@ -1018,8 +1071,8 @@ function parseSkillMarkdown(contents, skillFile, skillPath) {
|
|
|
1018
1071
|
}
|
|
1019
1072
|
const kept = JSON.parse(json);
|
|
1020
1073
|
return {
|
|
1021
|
-
name,
|
|
1022
|
-
title: title ?? deriveSkillTitle(
|
|
1074
|
+
name: name2,
|
|
1075
|
+
title: title ?? deriveSkillTitle(name2, content),
|
|
1023
1076
|
description,
|
|
1024
1077
|
...summary === void 0 ? {} : { summary },
|
|
1025
1078
|
...starters === void 0 ? {} : { starters },
|
|
@@ -1027,8 +1080,8 @@ function parseSkillMarkdown(contents, skillFile, skillPath) {
|
|
|
1027
1080
|
...Object.keys(others).length > 0 ? { frontmatter: kept } : {}
|
|
1028
1081
|
};
|
|
1029
1082
|
}
|
|
1030
|
-
function loadFrontmatter(
|
|
1031
|
-
const read = readYamlData(
|
|
1083
|
+
function loadFrontmatter(text2, skillFile) {
|
|
1084
|
+
const read = readYamlData(text2, skillFile, { refuseAliases: true });
|
|
1032
1085
|
if (read.ok) return read.value;
|
|
1033
1086
|
const { issue } = read;
|
|
1034
1087
|
if (issue.code === "yaml_alias") {
|
|
@@ -1055,7 +1108,7 @@ function loadFrontmatter(text, skillFile) {
|
|
|
1055
1108
|
{ issues: [{ message: issue.message, path: [], line, column }] }
|
|
1056
1109
|
);
|
|
1057
1110
|
}
|
|
1058
|
-
function deriveSkillTitle(
|
|
1111
|
+
function deriveSkillTitle(name2, content) {
|
|
1059
1112
|
let fence;
|
|
1060
1113
|
for (const line of content.split(/\r?\n/u)) {
|
|
1061
1114
|
const marker = /^\s{0,3}(`{3,}|~{3,})/u.exec(line)?.[1];
|
|
@@ -1066,8 +1119,8 @@ function deriveSkillTitle(name, content) {
|
|
|
1066
1119
|
const heading = fence === void 0 ? /^ {0,3}#{1,6}\s+(.+?)(?:\s+#+)?\s*$/u.exec(line) : null;
|
|
1067
1120
|
if (heading?.[1]) return heading[1];
|
|
1068
1121
|
}
|
|
1069
|
-
const words =
|
|
1070
|
-
return words === "" ?
|
|
1122
|
+
const words = name2.replace(/[-_]+/gu, " ").trim();
|
|
1123
|
+
return words === "" ? name2 : words.charAt(0).toUpperCase() + words.slice(1);
|
|
1071
1124
|
}
|
|
1072
1125
|
function formatSkillMarkdown(skill) {
|
|
1073
1126
|
const content = skill.content.trim();
|
|
@@ -1113,11 +1166,234 @@ function withoutExtension(filename) {
|
|
|
1113
1166
|
return dot > 0 ? filename.slice(0, dot) : filename;
|
|
1114
1167
|
}
|
|
1115
1168
|
|
|
1116
|
-
// src/knowledge-
|
|
1169
|
+
// src/knowledge-write.ts
|
|
1170
|
+
import { z as z3 } from "zod";
|
|
1171
|
+
|
|
1172
|
+
// src/operation-batch.ts
|
|
1117
1173
|
import { z as z2 } from "zod";
|
|
1118
|
-
var
|
|
1119
|
-
|
|
1120
|
-
|
|
1174
|
+
var workflowDatasetReferenceSchema = z2.strictObject({
|
|
1175
|
+
$dataset: z2.string().min(1),
|
|
1176
|
+
rowCount: z2.number().int().min(0),
|
|
1177
|
+
// A view keeps the parent byte count as an upper bound.
|
|
1178
|
+
bytes: z2.number().int().min(0),
|
|
1179
|
+
/** Absolute offset in the parent; rowCount bounds the view. No rows are copied. */
|
|
1180
|
+
offset: z2.number().int().nonnegative().optional()
|
|
1181
|
+
});
|
|
1182
|
+
var operationBatchFailureSchema = z2.strictObject({
|
|
1183
|
+
item: z2.json(),
|
|
1184
|
+
code: z2.string().min(1),
|
|
1185
|
+
message: z2.string().min(1)
|
|
1186
|
+
});
|
|
1187
|
+
var operationBatchResultSchema = z2.strictObject({
|
|
1188
|
+
done: z2.number().int().min(0),
|
|
1189
|
+
failed: z2.number().int().min(0),
|
|
1190
|
+
failures: workflowDatasetReferenceSchema
|
|
1191
|
+
});
|
|
1192
|
+
|
|
1193
|
+
// src/knowledge-write.ts
|
|
1194
|
+
var id = z3.string().min(1).max(200);
|
|
1195
|
+
var count = z3.number().int().min(0);
|
|
1196
|
+
var hash = z3.string().regex(/^[a-f0-9]{64}$/u);
|
|
1197
|
+
var text = z3.string().max(KNOWLEDGE_FILE_MAX_BYTES).refine((value) => new TextEncoder().encode(value).byteLength <= KNOWLEDGE_FILE_MAX_BYTES, {
|
|
1198
|
+
message: `Document text exceeds ${KNOWLEDGE_FILE_MAX_BYTES} bytes`
|
|
1199
|
+
});
|
|
1200
|
+
var knowledgeIngestFetchSchema = z3.strictObject({
|
|
1201
|
+
connection: id,
|
|
1202
|
+
operation: id,
|
|
1203
|
+
input: z3.record(z3.string(), z3.json())
|
|
1204
|
+
});
|
|
1205
|
+
var ingestItemIdentity = z3.strictObject({
|
|
1206
|
+
itemId: id,
|
|
1207
|
+
version: id,
|
|
1208
|
+
name: z3.string().min(1).max(1e3),
|
|
1209
|
+
path: z3.string().startsWith("/").max(4e3).optional(),
|
|
1210
|
+
originLink: z3.url({ protocol: /^https?$/u }).max(4e3).optional(),
|
|
1211
|
+
metadata: z3.record(z3.string(), z3.json()).optional(),
|
|
1212
|
+
text: z3.never().optional(),
|
|
1213
|
+
fileId: z3.never().optional(),
|
|
1214
|
+
fetch: z3.never().optional()
|
|
1215
|
+
});
|
|
1216
|
+
var knowledgeIngestItemSchema = z3.union(
|
|
1217
|
+
[
|
|
1218
|
+
ingestItemIdentity.extend({ text }),
|
|
1219
|
+
ingestItemIdentity.extend({ fileId: id }),
|
|
1220
|
+
ingestItemIdentity.extend({ fetch: knowledgeIngestFetchSchema })
|
|
1221
|
+
],
|
|
1222
|
+
{ error: "knowledge_item_invalid: Supply exactly one of text, fileId or fetch" }
|
|
1223
|
+
).superRefine((item, context) => {
|
|
1224
|
+
if (item.fetch !== void 0)
|
|
1225
|
+
context.addIssue({
|
|
1226
|
+
code: "custom",
|
|
1227
|
+
path: ["fetch"],
|
|
1228
|
+
message: "not_supported_yet: fetch arrives with CONN-DL; supply text or fileId"
|
|
1229
|
+
});
|
|
1230
|
+
});
|
|
1231
|
+
var knowledgeIngestInputSchema = z3.union([
|
|
1232
|
+
z3.strictObject({ items: z3.array(knowledgeIngestItemSchema), complete: z3.boolean().optional() }),
|
|
1233
|
+
z3.strictObject({ dataset: workflowDatasetReferenceSchema, complete: z3.boolean().optional() })
|
|
1234
|
+
]);
|
|
1235
|
+
var knowledgeIngestOutputSchema = operationBatchResultSchema.extend({
|
|
1236
|
+
accepted: count,
|
|
1237
|
+
withdrawn: count
|
|
1238
|
+
});
|
|
1239
|
+
var knowledgeWithdrawInputSchema = z3.strictObject({ itemIds: z3.array(id).min(1) });
|
|
1240
|
+
var knowledgeWithdrawOutputSchema = z3.strictObject({ withdrawn: count });
|
|
1241
|
+
var knowledgePendingInputSchema = z3.strictObject({
|
|
1242
|
+
type: id.optional(),
|
|
1243
|
+
since: z3.iso.datetime({ offset: true }).optional(),
|
|
1244
|
+
limit: z3.number().int().positive()
|
|
1245
|
+
});
|
|
1246
|
+
var knowledgePendingRowSchema = z3.strictObject({
|
|
1247
|
+
id,
|
|
1248
|
+
type: id,
|
|
1249
|
+
contentHash: hash,
|
|
1250
|
+
pages: workflowDatasetReferenceSchema
|
|
1251
|
+
});
|
|
1252
|
+
var knowledgePendingOutputSchema = z3.strictObject({
|
|
1253
|
+
documents: workflowDatasetReferenceSchema
|
|
1254
|
+
});
|
|
1255
|
+
var pageNumber = z3.number().int().positive();
|
|
1256
|
+
var range = z3.strictObject({ pageFrom: pageNumber, pageTo: pageNumber });
|
|
1257
|
+
var processorMetadataSchema = z3.strictObject({
|
|
1258
|
+
documents: z3.array(range).min(1),
|
|
1259
|
+
sections: z3.array(range.extend({ title: z3.string().min(1) })).optional(),
|
|
1260
|
+
fields: z3.record(z3.string(), z3.json())
|
|
1261
|
+
});
|
|
1262
|
+
var knowledgeProcessorOutputSchema = processorMetadataSchema.extend({
|
|
1263
|
+
// Count stays unbounded here: PROC-1/PROC-W must enforce the instance's
|
|
1264
|
+
// knowledge.maxPagesPerDocument at runtime (KB-ISO-3a), not a new contract cap.
|
|
1265
|
+
pages: z3.array(z3.strictObject({ page: pageNumber, text })).min(1)
|
|
1266
|
+
}).superRefine((output, context) => {
|
|
1267
|
+
const pages = new Set(output.pages.map((page) => page.page));
|
|
1268
|
+
if (output.pages.some(
|
|
1269
|
+
(page, index) => index > 0 && page.page <= (output.pages[index - 1]?.page ?? 0)
|
|
1270
|
+
)) {
|
|
1271
|
+
context.addIssue({
|
|
1272
|
+
code: "custom",
|
|
1273
|
+
path: ["pages"],
|
|
1274
|
+
message: "knowledge_processor_output_invalid: Pages must be ascending and unique"
|
|
1275
|
+
});
|
|
1276
|
+
}
|
|
1277
|
+
const bytes = output.pages.reduce(
|
|
1278
|
+
(size, page) => size + new TextEncoder().encode(page.text).byteLength,
|
|
1279
|
+
0
|
|
1280
|
+
);
|
|
1281
|
+
if (bytes > KNOWLEDGE_FILE_MAX_BYTES)
|
|
1282
|
+
context.addIssue({
|
|
1283
|
+
code: "custom",
|
|
1284
|
+
path: ["pages"],
|
|
1285
|
+
message: "knowledge_processor_output_invalid: Document text exceeds the per-document limit"
|
|
1286
|
+
});
|
|
1287
|
+
for (const field of ["documents", "sections"]) {
|
|
1288
|
+
output[field]?.forEach((entry, index) => {
|
|
1289
|
+
if (entry.pageFrom > entry.pageTo || !pages.has(entry.pageFrom) || !pages.has(entry.pageTo)) {
|
|
1290
|
+
context.addIssue({
|
|
1291
|
+
code: "custom",
|
|
1292
|
+
path: [field, index],
|
|
1293
|
+
message: "knowledge_processor_output_invalid: Page range must be ordered and inside the document"
|
|
1294
|
+
});
|
|
1295
|
+
}
|
|
1296
|
+
});
|
|
1297
|
+
}
|
|
1298
|
+
});
|
|
1299
|
+
var knowledgePutProcessedInputSchema = z3.strictObject({
|
|
1300
|
+
items: z3.union([
|
|
1301
|
+
z3.array(
|
|
1302
|
+
z3.strictObject({
|
|
1303
|
+
documentId: id,
|
|
1304
|
+
contentHash: hash,
|
|
1305
|
+
workflowRevision: id,
|
|
1306
|
+
// Mirror pending: page text lives outside step values and item dataset rows.
|
|
1307
|
+
// PROC-W resolves the pages and validates the full processor output above.
|
|
1308
|
+
output: processorMetadataSchema.extend({ pages: workflowDatasetReferenceSchema })
|
|
1309
|
+
})
|
|
1310
|
+
),
|
|
1311
|
+
workflowDatasetReferenceSchema
|
|
1312
|
+
])
|
|
1313
|
+
});
|
|
1314
|
+
var knowledgeFieldValueSchema = z3.json();
|
|
1315
|
+
var knowledgeExtractFieldsInputSchema = z3.strictObject({
|
|
1316
|
+
documentId: id,
|
|
1317
|
+
schema: z3.record(z3.string(), knowledgeFieldValueSchema)
|
|
1318
|
+
});
|
|
1319
|
+
var knowledgeExtractFieldsOutputSchema = z3.strictObject({
|
|
1320
|
+
droppedFields: z3.number().int().nonnegative().optional(),
|
|
1321
|
+
failedFields: z3.number().int().nonnegative().optional(),
|
|
1322
|
+
path: z3.string(),
|
|
1323
|
+
date: z3.iso.date().nullable(),
|
|
1324
|
+
type: id,
|
|
1325
|
+
fields: z3.record(
|
|
1326
|
+
z3.string(),
|
|
1327
|
+
z3.strictObject({ value: knowledgeFieldValueSchema, page: pageNumber, quote: z3.string().min(1) })
|
|
1328
|
+
)
|
|
1329
|
+
});
|
|
1330
|
+
var knowledgeWorkflowSourceSchema = z3.strictObject({
|
|
1331
|
+
id: z3.string().startsWith("workflow:"),
|
|
1332
|
+
kind: z3.literal("workflow"),
|
|
1333
|
+
workflowId: z3.string().regex(/^[a-z][a-z0-9_-]{0,62}$/u)
|
|
1334
|
+
}).refine((source) => source.id === `workflow:${source.workflowId}`, {
|
|
1335
|
+
path: ["id"],
|
|
1336
|
+
message: "A Workflow source id is workflow:<workflowId>"
|
|
1337
|
+
});
|
|
1338
|
+
var knowledgeWriteContracts = {
|
|
1339
|
+
ingest: {
|
|
1340
|
+
description: "Ingest items or a dataset into the calling data Workflow's source; complete promises a full pass, withdrawn only after the run succeeds.",
|
|
1341
|
+
inputSchema: knowledgeIngestInputSchema,
|
|
1342
|
+
outputSchema: knowledgeIngestOutputSchema,
|
|
1343
|
+
effect: "changing",
|
|
1344
|
+
right: "knowledge_base.write",
|
|
1345
|
+
keyLevel: "write",
|
|
1346
|
+
completion: "async",
|
|
1347
|
+
batch: true
|
|
1348
|
+
},
|
|
1349
|
+
withdraw: {
|
|
1350
|
+
description: "Withdraw item ids from the calling Workflow's source; removed from search immediately.",
|
|
1351
|
+
inputSchema: knowledgeWithdrawInputSchema,
|
|
1352
|
+
outputSchema: knowledgeWithdrawOutputSchema,
|
|
1353
|
+
effect: "changing",
|
|
1354
|
+
right: "knowledge_base.write",
|
|
1355
|
+
keyLevel: "write"
|
|
1356
|
+
},
|
|
1357
|
+
pending: {
|
|
1358
|
+
description: "Pull pending documents by type and time as a dataset; page text is another dataset reference.",
|
|
1359
|
+
inputSchema: knowledgePendingInputSchema,
|
|
1360
|
+
outputSchema: knowledgePendingOutputSchema,
|
|
1361
|
+
rowSchema: knowledgePendingRowSchema,
|
|
1362
|
+
effect: "reading",
|
|
1363
|
+
right: "knowledge_base.read",
|
|
1364
|
+
keyLevel: "read",
|
|
1365
|
+
dataset: true
|
|
1366
|
+
},
|
|
1367
|
+
put_processed: {
|
|
1368
|
+
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.",
|
|
1369
|
+
inputSchema: knowledgePutProcessedInputSchema,
|
|
1370
|
+
outputSchema: operationBatchResultSchema,
|
|
1371
|
+
effect: "changing",
|
|
1372
|
+
right: "knowledge_base.write",
|
|
1373
|
+
keyLevel: "write",
|
|
1374
|
+
batch: true
|
|
1375
|
+
},
|
|
1376
|
+
extract_fields: {
|
|
1377
|
+
description: "Extract fields by schema through the approved model binding within the Knowledge Base budget; each value carries page and quote evidence.",
|
|
1378
|
+
inputSchema: knowledgeExtractFieldsInputSchema,
|
|
1379
|
+
outputSchema: knowledgeExtractFieldsOutputSchema,
|
|
1380
|
+
effect: "reading",
|
|
1381
|
+
right: "knowledge_base.read",
|
|
1382
|
+
keyLevel: "read"
|
|
1383
|
+
}
|
|
1384
|
+
};
|
|
1385
|
+
var knowledgeRecordsRefusalSchema = z3.never({
|
|
1386
|
+
error: "'records' belongs in store.yaml. A data Workflow proposes fields into the Data Store's records mechanism."
|
|
1387
|
+
}).optional();
|
|
1388
|
+
|
|
1389
|
+
// src/knowledge-sources.ts
|
|
1390
|
+
import { z as z4 } from "zod";
|
|
1391
|
+
var sourceIdSchema = z4.union([
|
|
1392
|
+
z4.string().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u).max(63),
|
|
1393
|
+
knowledgeWorkflowSourceSchema.shape.id.regex(/^workflow:[a-z][a-z0-9_-]{0,62}$/u)
|
|
1394
|
+
]);
|
|
1395
|
+
var countSchema = z4.number().int().min(0);
|
|
1396
|
+
var countsSchema = z4.strictObject({
|
|
1121
1397
|
discovered: countSchema,
|
|
1122
1398
|
added: countSchema,
|
|
1123
1399
|
changed: countSchema,
|
|
@@ -1126,28 +1402,25 @@ var countsSchema = z2.strictObject({
|
|
|
1126
1402
|
failed: countSchema,
|
|
1127
1403
|
skipped: countSchema
|
|
1128
1404
|
});
|
|
1129
|
-
var knowledgeSyncInputSchema =
|
|
1405
|
+
var knowledgeSyncInputSchema = z4.strictObject({
|
|
1130
1406
|
/** The `id` of the source in the definition. */
|
|
1131
1407
|
source: sourceIdSchema,
|
|
1132
1408
|
/** `changes` unless `full`. The initial import is started by publish, not by this call. */
|
|
1133
|
-
mode:
|
|
1134
|
-
// Keep SRC-0's accepted values frozen while explaining the deferred mode.
|
|
1135
|
-
error: (issue) => issue.input === "changes" ? "not_supported_yet: Change-feed sync is not supported yet; request mode full." : void 0
|
|
1136
|
-
}).optional()
|
|
1409
|
+
mode: z4.enum(["changes", "full"]).optional()
|
|
1137
1410
|
});
|
|
1138
|
-
var knowledgeSyncResultSchema =
|
|
1139
|
-
syncRunId:
|
|
1140
|
-
source:
|
|
1141
|
-
mode:
|
|
1411
|
+
var knowledgeSyncResultSchema = z4.strictObject({
|
|
1412
|
+
syncRunId: z4.string(),
|
|
1413
|
+
source: z4.string(),
|
|
1414
|
+
mode: z4.enum(KNOWLEDGE_SYNC_MODES),
|
|
1142
1415
|
/** Why a run is of another mode than asked, such as a cursor the source refused. */
|
|
1143
|
-
reason:
|
|
1144
|
-
state:
|
|
1416
|
+
reason: z4.enum(["cursor_expired"]).optional(),
|
|
1417
|
+
state: z4.enum(KNOWLEDGE_SYNC_RUN_STATES),
|
|
1145
1418
|
counts: countsSchema,
|
|
1146
|
-
bytesFetched:
|
|
1419
|
+
bytesFetched: z4.number().int().min(0),
|
|
1147
1420
|
/** Why the whole sync failed, for a run in state `failed`. */
|
|
1148
|
-
failureCode:
|
|
1149
|
-
startedAt:
|
|
1150
|
-
endedAt:
|
|
1421
|
+
failureCode: z4.enum(KNOWLEDGE_SOURCE_FAILURE_CODES).optional(),
|
|
1422
|
+
startedAt: z4.string(),
|
|
1423
|
+
endedAt: z4.string().optional()
|
|
1151
1424
|
});
|
|
1152
1425
|
var KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES = [
|
|
1153
1426
|
"discovered",
|
|
@@ -1156,100 +1429,524 @@ var KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES = [
|
|
|
1156
1429
|
"failed",
|
|
1157
1430
|
"withdrawn"
|
|
1158
1431
|
];
|
|
1159
|
-
var itemFailureCodeSchema =
|
|
1160
|
-
|
|
1161
|
-
|
|
1432
|
+
var itemFailureCodeSchema = z4.union([
|
|
1433
|
+
z4.enum(KNOWLEDGE_SOURCE_ITEM_FAILURE_CODES),
|
|
1434
|
+
z4.enum(KNOWLEDGE_DOCUMENT_FAILURE_CODES)
|
|
1162
1435
|
]);
|
|
1163
|
-
var
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1436
|
+
var sourceStatusSchema = z4.strictObject({
|
|
1437
|
+
id: z4.string(),
|
|
1438
|
+
/** The name of the Connection it reads through. */
|
|
1439
|
+
connection: z4.string(),
|
|
1440
|
+
kind: z4.literal("connector").optional(),
|
|
1441
|
+
/** Items by the state the page shows. */
|
|
1442
|
+
items: z4.strictObject({
|
|
1443
|
+
discovered: countSchema,
|
|
1444
|
+
fetched: countSchema,
|
|
1445
|
+
indexed: countSchema,
|
|
1446
|
+
failed: countSchema,
|
|
1447
|
+
withdrawn: countSchema
|
|
1448
|
+
}),
|
|
1449
|
+
/** Failed items per code. */
|
|
1450
|
+
failures: z4.array(z4.strictObject({ code: itemFailureCodeSchema, count: countSchema })),
|
|
1451
|
+
/** The sync that runs now, with its rate in items per minute and its estimated end. */
|
|
1452
|
+
running: z4.strictObject({
|
|
1453
|
+
syncRunId: z4.string(),
|
|
1454
|
+
mode: z4.enum(KNOWLEDGE_SYNC_MODES),
|
|
1455
|
+
startedAt: z4.string(),
|
|
1456
|
+
itemsPerMinute: z4.number().min(0).optional(),
|
|
1457
|
+
estimatedEndAt: z4.string().optional()
|
|
1458
|
+
}).optional(),
|
|
1459
|
+
/** The last sync that ended. */
|
|
1460
|
+
last: knowledgeSyncResultSchema.optional(),
|
|
1461
|
+
/** "Letzte Änderung verarbeitet". */
|
|
1462
|
+
lastChangeAt: z4.string().optional(),
|
|
1463
|
+
/** "Älteste offene Änderung". */
|
|
1464
|
+
oldestOpenChangeAt: z4.string().optional()
|
|
1465
|
+
});
|
|
1466
|
+
var knowledgeSourcesOutputSchema = z4.strictObject({
|
|
1467
|
+
sources: z4.array(
|
|
1468
|
+
z4.union([
|
|
1469
|
+
sourceStatusSchema,
|
|
1470
|
+
knowledgeWorkflowSourceSchema.safeExtend(
|
|
1471
|
+
sourceStatusSchema.omit({ id: true, connection: true, kind: true }).shape
|
|
1472
|
+
)
|
|
1473
|
+
])
|
|
1194
1474
|
)
|
|
1195
1475
|
});
|
|
1196
|
-
var knowledgeSourceItemsInputSchema =
|
|
1476
|
+
var knowledgeSourceItemsInputSchema = z4.strictObject({
|
|
1197
1477
|
source: sourceIdSchema,
|
|
1198
|
-
state:
|
|
1478
|
+
state: z4.enum(KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES).optional(),
|
|
1199
1479
|
failureCode: itemFailureCodeSchema.optional(),
|
|
1200
1480
|
/** Items per page: 50 by default, at most 200. */
|
|
1201
|
-
limit:
|
|
1202
|
-
cursor:
|
|
1481
|
+
limit: z4.coerce.number().int().min(1).max(200).optional(),
|
|
1482
|
+
cursor: z4.string().min(1).max(1e3).optional()
|
|
1203
1483
|
});
|
|
1204
|
-
var knowledgeSourceItemsOutputSchema =
|
|
1484
|
+
var knowledgeSourceItemsOutputSchema = z4.strictObject({
|
|
1205
1485
|
/** Newest change first. */
|
|
1206
|
-
items:
|
|
1207
|
-
|
|
1486
|
+
items: z4.array(
|
|
1487
|
+
z4.strictObject({
|
|
1208
1488
|
/** The row in `source_items`: what `retry` and `locate` name. */
|
|
1209
|
-
id:
|
|
1489
|
+
id: z4.string(),
|
|
1210
1490
|
/** The id of the item at the source. */
|
|
1211
|
-
itemId:
|
|
1212
|
-
name:
|
|
1213
|
-
path:
|
|
1214
|
-
state:
|
|
1491
|
+
itemId: z4.string(),
|
|
1492
|
+
name: z4.string(),
|
|
1493
|
+
path: z4.string(),
|
|
1494
|
+
state: z4.enum(KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES),
|
|
1215
1495
|
failureCode: itemFailureCodeSchema.optional(),
|
|
1216
|
-
documentId:
|
|
1217
|
-
originLink:
|
|
1218
|
-
changedAt:
|
|
1496
|
+
documentId: z4.string().optional(),
|
|
1497
|
+
originLink: z4.string().optional(),
|
|
1498
|
+
changedAt: z4.string()
|
|
1219
1499
|
})
|
|
1220
1500
|
),
|
|
1221
|
-
nextCursor:
|
|
1501
|
+
nextCursor: z4.string().optional()
|
|
1222
1502
|
});
|
|
1223
1503
|
var RETRY_MAX = 100;
|
|
1224
|
-
var knowledgeRetryInputSchema =
|
|
1225
|
-
|
|
1226
|
-
|
|
1504
|
+
var knowledgeRetryInputSchema = z4.union([
|
|
1505
|
+
z4.strictObject({ documentIds: z4.array(z4.string().min(1).max(200)).min(1).max(RETRY_MAX) }),
|
|
1506
|
+
z4.strictObject({
|
|
1227
1507
|
source: sourceIdSchema,
|
|
1228
|
-
sourceItemIds:
|
|
1508
|
+
sourceItemIds: z4.array(z4.string().min(1).max(200)).min(1).max(RETRY_MAX)
|
|
1229
1509
|
}),
|
|
1230
|
-
|
|
1231
|
-
|
|
1510
|
+
z4.strictObject({ source: sourceIdSchema, failureCode: itemFailureCodeSchema }),
|
|
1511
|
+
z4.strictObject({ source: sourceIdSchema, all: z4.literal(true) })
|
|
1232
1512
|
]);
|
|
1233
|
-
var knowledgeRetryOutputSchema =
|
|
1513
|
+
var knowledgeRetryOutputSchema = z4.strictObject({
|
|
1234
1514
|
/** For a retry by document ids: each named document, with its state after the retry. */
|
|
1235
|
-
documents:
|
|
1515
|
+
documents: z4.array(z4.strictObject({ id: z4.string(), state: z4.enum(KNOWLEDGE_DOCUMENT_STATES) })).optional(),
|
|
1236
1516
|
/** How many contents or items were queued again. */
|
|
1237
|
-
queued:
|
|
1517
|
+
queued: z4.number().int()
|
|
1238
1518
|
});
|
|
1239
|
-
var knowledgeLocateInputSchema =
|
|
1519
|
+
var knowledgeLocateInputSchema = z4.strictObject({
|
|
1240
1520
|
/** The row in `source_items`. */
|
|
1241
|
-
sourceItemId:
|
|
1521
|
+
sourceItemId: z4.string().min(1).max(200)
|
|
1242
1522
|
});
|
|
1243
|
-
var knowledgeLocateOutputSchema =
|
|
1244
|
-
sourceItemId:
|
|
1245
|
-
source:
|
|
1246
|
-
itemId:
|
|
1247
|
-
state:
|
|
1248
|
-
discoveredAt:
|
|
1249
|
-
fetchedAt:
|
|
1250
|
-
withdrawnAt:
|
|
1251
|
-
purgedAt:
|
|
1523
|
+
var knowledgeLocateOutputSchema = z4.strictObject({
|
|
1524
|
+
sourceItemId: z4.string(),
|
|
1525
|
+
source: z4.string(),
|
|
1526
|
+
itemId: z4.string(),
|
|
1527
|
+
state: z4.enum(KNOWLEDGE_SOURCE_ITEM_SHOWN_STATES),
|
|
1528
|
+
discoveredAt: z4.string(),
|
|
1529
|
+
fetchedAt: z4.string().optional(),
|
|
1530
|
+
withdrawnAt: z4.string().optional(),
|
|
1531
|
+
purgedAt: z4.string().optional()
|
|
1252
1532
|
});
|
|
1533
|
+
|
|
1534
|
+
// src/workflow-datasets.ts
|
|
1535
|
+
var WORKFLOW_DATASET_STATES = ["writing", "complete", "deleted"];
|
|
1536
|
+
|
|
1537
|
+
// src/operation-paging.ts
|
|
1538
|
+
import { z as z5 } from "zod";
|
|
1539
|
+
var operationPagingSchema = z5.discriminatedUnion("by", [
|
|
1540
|
+
z5.strictObject({
|
|
1541
|
+
by: z5.enum(["page", "offset"]),
|
|
1542
|
+
param: z5.string().min(1),
|
|
1543
|
+
sizeParam: z5.string().min(1),
|
|
1544
|
+
size: z5.number().int().min(1),
|
|
1545
|
+
start: z5.number().int().min(0).optional()
|
|
1546
|
+
}),
|
|
1547
|
+
z5.strictObject({
|
|
1548
|
+
by: z5.enum(["cursor", "next_link"]),
|
|
1549
|
+
param: z5.string().min(1),
|
|
1550
|
+
cursor: z5.string().min(1)
|
|
1551
|
+
})
|
|
1552
|
+
]);
|
|
1553
|
+
|
|
1554
|
+
// src/workflow-data-flows.ts
|
|
1555
|
+
import { z as z6 } from "zod";
|
|
1556
|
+
var workflowDataFlowsSchema = z6.object({
|
|
1557
|
+
fills: z6.array(z6.object({ id: z6.string(), name: z6.string(), title: z6.string() })),
|
|
1558
|
+
processes: z6.array(z6.object({ id: z6.string(), name: z6.string(), title: z6.string() })),
|
|
1559
|
+
hidden: z6.object({ fills: z6.number().int().min(0), processes: z6.number().int().min(0) }),
|
|
1560
|
+
truncated: z6.boolean()
|
|
1561
|
+
});
|
|
1562
|
+
|
|
1563
|
+
// src/data-store-records.ts
|
|
1564
|
+
import { z as z7 } from "zod";
|
|
1565
|
+
var RECORDS_PROPOSE_MAX_ITEMS_PER_CALL = 1e3;
|
|
1566
|
+
var RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM = 1e3;
|
|
1567
|
+
var RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE = 1e4;
|
|
1568
|
+
var name = z7.string().min(1);
|
|
1569
|
+
var id2 = z7.string().min(1).max(200);
|
|
1570
|
+
var key = z7.union([z7.string().min(1), z7.number(), z7.boolean()]);
|
|
1571
|
+
var dataStoreRecordsRuleSchema = z7.strictObject({
|
|
1572
|
+
table: name,
|
|
1573
|
+
key: z7.union([
|
|
1574
|
+
z7.strictObject({ column: name, fromPath: z7.string().startsWith("/").min(1) }),
|
|
1575
|
+
z7.strictObject({ column: name, fromField: name })
|
|
1576
|
+
]),
|
|
1577
|
+
precedence: z7.array(name).default([]),
|
|
1578
|
+
review: z7.strictObject({ always: z7.array(name).default([]) }).default({ always: [] }),
|
|
1579
|
+
retainWithoutSource: z7.boolean().default(false)
|
|
1580
|
+
}).superRefine((rule, context) => {
|
|
1581
|
+
if ("fromPath" in rule.key) {
|
|
1582
|
+
const placeholders = rule.key.fromPath.match(/\{[^{}]*\}/gu);
|
|
1583
|
+
if (placeholders?.length !== 1 || placeholders[0] !== `{${rule.key.column}}`) {
|
|
1584
|
+
context.addIssue({
|
|
1585
|
+
code: "custom",
|
|
1586
|
+
path: ["key", "fromPath"],
|
|
1587
|
+
message: "fromPath must contain exactly one placeholder naming the key column"
|
|
1588
|
+
});
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
});
|
|
1592
|
+
var recordEvidenceResultSchema = z7.discriminatedUnion("status", [
|
|
1593
|
+
z7.strictObject({ status: z7.literal("passed") }),
|
|
1594
|
+
z7.strictObject({
|
|
1595
|
+
status: z7.literal("failed"),
|
|
1596
|
+
reason: z7.enum(["page_not_found", "quote_not_found", "value_not_parsed"])
|
|
1597
|
+
})
|
|
1598
|
+
]);
|
|
1599
|
+
var RECORD_FIELD_STATES = ["extracted", "confirmed", "corrected", "conflict"];
|
|
1600
|
+
var RECORD_FIELD_FAILURE_CODES = ["record_field_unknown"];
|
|
1601
|
+
var fieldSchema = knowledgeExtractFieldsOutputSchema.shape.fields.valueType.extend({ name });
|
|
1602
|
+
var dataStoreRecordProposalItemSchema = z7.strictObject({
|
|
1603
|
+
// Document ids are scoped by their Knowledge Base. Both ids travel with every citation.
|
|
1604
|
+
knowledgeBaseId: id2,
|
|
1605
|
+
documentId: id2,
|
|
1606
|
+
kind: name,
|
|
1607
|
+
documentDate: z7.iso.date().nullable(),
|
|
1608
|
+
path: z7.string().startsWith("/").optional(),
|
|
1609
|
+
fields: z7.array(fieldSchema).min(1).max(
|
|
1610
|
+
RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM,
|
|
1611
|
+
"At most 1000 fields per item (RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM); split larger proposals into batches"
|
|
1612
|
+
)
|
|
1613
|
+
});
|
|
1614
|
+
var dataStoreRecordsProposeInputSchema = z7.strictObject({
|
|
1615
|
+
table: name,
|
|
1616
|
+
items: z7.array(dataStoreRecordProposalItemSchema).max(
|
|
1617
|
+
RECORDS_PROPOSE_MAX_ITEMS_PER_CALL,
|
|
1618
|
+
"At most 1000 items per call (RECORDS_PROPOSE_MAX_ITEMS_PER_CALL); send another batch"
|
|
1619
|
+
)
|
|
1620
|
+
});
|
|
1621
|
+
var decisionSchema = z7.strictObject({
|
|
1622
|
+
table: name,
|
|
1623
|
+
key,
|
|
1624
|
+
field: name,
|
|
1625
|
+
documentId: id2.optional(),
|
|
1626
|
+
knowledgeBaseId: id2.optional()
|
|
1627
|
+
});
|
|
1628
|
+
var dataStoreRecordsDecideInputSchema = z7.discriminatedUnion("action", [
|
|
1629
|
+
decisionSchema.extend({ action: z7.literal("confirm") }),
|
|
1630
|
+
decisionSchema.extend({ action: z7.literal("correct"), value: z7.json() }),
|
|
1631
|
+
decisionSchema.extend({ action: z7.literal("assign"), documentId: id2, knowledgeBaseId: id2 })
|
|
1632
|
+
]).refine(
|
|
1633
|
+
(decision) => decision.documentId === void 0 === (decision.knowledgeBaseId === void 0),
|
|
1634
|
+
{
|
|
1635
|
+
path: ["documentId"],
|
|
1636
|
+
message: "A citation needs both knowledgeBaseId and documentId"
|
|
1637
|
+
}
|
|
1638
|
+
);
|
|
1639
|
+
var dataStoreRecordsDecideOutputSchema = z7.strictObject({ decided: z7.literal(true) });
|
|
1640
|
+
var dataStoreRecordsFlaggedInputSchema = z7.strictObject({
|
|
1641
|
+
table: name.optional(),
|
|
1642
|
+
cursor: z7.string().min(1).optional(),
|
|
1643
|
+
limit: z7.number().int().positive().max(
|
|
1644
|
+
RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE,
|
|
1645
|
+
"At most 10000 items per page (RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE); follow nextCursor"
|
|
1646
|
+
)
|
|
1647
|
+
});
|
|
1648
|
+
var dataStoreRecordFieldSchema = fieldSchema.extend({
|
|
1649
|
+
table: name,
|
|
1650
|
+
// Unresolved keys go to review, without writing a customer row.
|
|
1651
|
+
key: key.nullable(),
|
|
1652
|
+
knowledgeBaseId: id2,
|
|
1653
|
+
documentId: id2,
|
|
1654
|
+
kind: name,
|
|
1655
|
+
documentDate: z7.iso.date().nullable(),
|
|
1656
|
+
extractedAt: z7.iso.datetime({ offset: true }),
|
|
1657
|
+
evidence: recordEvidenceResultSchema,
|
|
1658
|
+
state: z7.enum(RECORD_FIELD_STATES),
|
|
1659
|
+
decidedBy: id2.nullable(),
|
|
1660
|
+
decidedAt: z7.iso.datetime({ offset: true }).nullable()
|
|
1661
|
+
});
|
|
1662
|
+
var dataStoreRecordsFlaggedOutputSchema = z7.strictObject({
|
|
1663
|
+
// A citation is shown only after checking access to its Knowledge Base, even for a
|
|
1664
|
+
// holder of data_store.records. Values/quotes never enter jobs, runs or audit metadata.
|
|
1665
|
+
items: z7.array(
|
|
1666
|
+
dataStoreRecordFieldSchema.extend({
|
|
1667
|
+
reason: z7.enum(["conflict", "not_evidenced", "confirmation_required", "key_unresolved"])
|
|
1668
|
+
})
|
|
1669
|
+
).max(RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE),
|
|
1670
|
+
nextCursor: z7.string().optional()
|
|
1671
|
+
});
|
|
1672
|
+
var scalarSchemas = {
|
|
1673
|
+
text: z7.string(),
|
|
1674
|
+
integer: z7.number().int(),
|
|
1675
|
+
number: z7.number(),
|
|
1676
|
+
boolean: z7.boolean(),
|
|
1677
|
+
date: z7.iso.date(),
|
|
1678
|
+
timestamp: z7.iso.datetime({ offset: true })
|
|
1679
|
+
};
|
|
1680
|
+
function compatible(column, value) {
|
|
1681
|
+
if (column.generated || column.type === "other") return false;
|
|
1682
|
+
if (value === null) return column.nullable;
|
|
1683
|
+
for (const [type, schema] of Object.entries(scalarSchemas)) {
|
|
1684
|
+
if (column.type === type) return schema.safeParse(value).success;
|
|
1685
|
+
if (column.type === `${type}[]`) return z7.array(schema.nullable()).safeParse(value).success;
|
|
1686
|
+
}
|
|
1687
|
+
return false;
|
|
1688
|
+
}
|
|
1689
|
+
function proposalItemSchemaFor(columns) {
|
|
1690
|
+
const byName = new Map(columns.map((column) => [column.name, column]));
|
|
1691
|
+
return dataStoreRecordProposalItemSchema.superRefine((item, context) => {
|
|
1692
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1693
|
+
item.fields.forEach((field, index) => {
|
|
1694
|
+
const column = byName.get(field.name);
|
|
1695
|
+
if (!column || !compatible(column, field.value) || seen.has(field.name)) {
|
|
1696
|
+
context.addIssue({
|
|
1697
|
+
code: "custom",
|
|
1698
|
+
path: ["fields", index],
|
|
1699
|
+
message: `record_field_unknown: Field '${field.name}' has no writable column of a compatible type, or occurs twice`
|
|
1700
|
+
});
|
|
1701
|
+
}
|
|
1702
|
+
seen.add(field.name);
|
|
1703
|
+
});
|
|
1704
|
+
});
|
|
1705
|
+
}
|
|
1706
|
+
var dataStoreRecordsContracts = {
|
|
1707
|
+
propose: {
|
|
1708
|
+
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.",
|
|
1709
|
+
inputSchema: dataStoreRecordsProposeInputSchema,
|
|
1710
|
+
outputSchema: operationBatchResultSchema,
|
|
1711
|
+
itemSchemaFor: proposalItemSchemaFor,
|
|
1712
|
+
effect: "changing",
|
|
1713
|
+
right: "data_store.records",
|
|
1714
|
+
keyLevel: "write",
|
|
1715
|
+
batch: true
|
|
1716
|
+
},
|
|
1717
|
+
decide: {
|
|
1718
|
+
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.",
|
|
1719
|
+
inputSchema: dataStoreRecordsDecideInputSchema,
|
|
1720
|
+
outputSchema: dataStoreRecordsDecideOutputSchema,
|
|
1721
|
+
effect: "changing",
|
|
1722
|
+
right: "data_store.records",
|
|
1723
|
+
keyLevel: "write"
|
|
1724
|
+
},
|
|
1725
|
+
flagged: {
|
|
1726
|
+
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.",
|
|
1727
|
+
inputSchema: dataStoreRecordsFlaggedInputSchema,
|
|
1728
|
+
outputSchema: dataStoreRecordsFlaggedOutputSchema,
|
|
1729
|
+
effect: "reading",
|
|
1730
|
+
right: "data_store.records",
|
|
1731
|
+
keyLevel: "read"
|
|
1732
|
+
}
|
|
1733
|
+
};
|
|
1734
|
+
|
|
1735
|
+
// src/usage-limits.ts
|
|
1736
|
+
var MODEL_USAGE_LIMIT_PERIODS = ["day", "month"];
|
|
1737
|
+
var MODEL_USAGE_LIMIT_METRICS = ["modelCallCount", "tokens", "costMicros"];
|
|
1738
|
+
var MODEL_USAGE_LIMIT_SCOPES = ["instance", "user", "system"];
|
|
1739
|
+
|
|
1740
|
+
// src/workflow-text.ts
|
|
1741
|
+
var WORKFLOW_TEXT_FORMAT_MARKDOWN = "markdown";
|
|
1742
|
+
var WORKFLOW_TEXT_MAX_PARTS = 100;
|
|
1743
|
+
var WORKFLOW_MARKDOWN_MAX_ROWS = 100;
|
|
1744
|
+
var WORKFLOW_MARKDOWN_MAX_COLUMNS = 8;
|
|
1745
|
+
|
|
1746
|
+
// src/mail-send.ts
|
|
1747
|
+
import { z as z8 } from "zod";
|
|
1748
|
+
var MAIL_SEND_OPERATION = "mail.send";
|
|
1749
|
+
var MAIL_SENDER_RESOURCE_KIND = "mail_sender";
|
|
1750
|
+
var MAIL_SENDER_USE_ACTION = "mail_sender.use";
|
|
1751
|
+
var MAIL_SENDER_SYSTEM = "system";
|
|
1752
|
+
var MAIL_SENDER_CONNECTION_PREFIX = "connection.";
|
|
1753
|
+
var MAIL_SENDER_SYSTEM_ICON = "system-mail";
|
|
1754
|
+
var MAIL_WORKFLOW_MESSAGE_TEMPLATE = "workflow-message";
|
|
1755
|
+
var MAIL_SEND_MAX_ADDRESSES = 50;
|
|
1756
|
+
var MAIL_SUBJECT_MAX_LENGTH = 200;
|
|
1757
|
+
var MAIL_BODY_MAX_BYTES = 64 * 1024;
|
|
1758
|
+
var MAIL_SENDER_NAME_MAX_LENGTH = 80;
|
|
1759
|
+
var MAIL_ADDRESS_MAX_LENGTH = 254;
|
|
1760
|
+
var MAIL_OUTBOUND_DEFAULT_LIMITS = {
|
|
1761
|
+
perWorkflowPerHour: 200,
|
|
1762
|
+
perInstancePerDay: 1e3
|
|
1763
|
+
};
|
|
1764
|
+
var MAIL_OUTBOUND_FOOTER_MAX_LENGTH = 2e3;
|
|
1765
|
+
var MAIL_AUDIT_MAX_DOMAINS = 10;
|
|
1766
|
+
var MAIL_ATTACHMENTS_MAX_FILES = 10;
|
|
1767
|
+
var MAIL_ATTACHMENTS_MAX_BYTES = 10 * 1024 * 1024;
|
|
1768
|
+
var MAIL_SEND_ERROR_CODES = {
|
|
1769
|
+
recipientNotAllowed: "recipient_not_allowed",
|
|
1770
|
+
noRecipient: "no_recipient",
|
|
1771
|
+
mailRejected: "mail_rejected",
|
|
1772
|
+
workspaceNotAllowed: "workspace_not_allowed"
|
|
1773
|
+
};
|
|
1774
|
+
var MAIL_SEND_REFUSAL_REASONS = [
|
|
1775
|
+
MAIL_SEND_ERROR_CODES.recipientNotAllowed,
|
|
1776
|
+
MAIL_SEND_ERROR_CODES.noRecipient,
|
|
1777
|
+
MAIL_SEND_ERROR_CODES.mailRejected,
|
|
1778
|
+
MAIL_SEND_ERROR_CODES.workspaceNotAllowed
|
|
1779
|
+
];
|
|
1780
|
+
var mailSendRefusalDetailsSchema = z8.discriminatedUnion("reason", [
|
|
1781
|
+
z8.strictObject({
|
|
1782
|
+
reason: z8.literal(MAIL_SEND_ERROR_CODES.recipientNotAllowed),
|
|
1783
|
+
domain: z8.string().min(1).max(MAIL_ADDRESS_MAX_LENGTH)
|
|
1784
|
+
}),
|
|
1785
|
+
z8.strictObject({ reason: z8.literal(MAIL_SEND_ERROR_CODES.noRecipient) }),
|
|
1786
|
+
z8.strictObject({ reason: z8.literal(MAIL_SEND_ERROR_CODES.workspaceNotAllowed) }),
|
|
1787
|
+
z8.strictObject({
|
|
1788
|
+
reason: z8.literal(MAIL_SEND_ERROR_CODES.mailRejected),
|
|
1789
|
+
providerCode: z8.string().min(1).max(100).optional()
|
|
1790
|
+
})
|
|
1791
|
+
]);
|
|
1792
|
+
var MAIL_RECIPIENT_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u;
|
|
1793
|
+
var principalId = z8.string().regex(MAIL_RECIPIENT_ID_PATTERN);
|
|
1794
|
+
var ONE_LINE_PATTERN = /^[^\u0000-\u001f\u007f\u2028\u2029]*$/u;
|
|
1795
|
+
var mailAddressSchema = z8.email().max(MAIL_ADDRESS_MAX_LENGTH);
|
|
1796
|
+
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;
|
|
1797
|
+
var MAIL_RECIPIENT_DOMAINS_ANY = "*";
|
|
1798
|
+
var mailRecipientDomainSchema = z8.string().max(MAIL_ADDRESS_MAX_LENGTH).refine(
|
|
1799
|
+
(domain) => domain === MAIL_RECIPIENT_DOMAINS_ANY || MAIL_RECIPIENT_DOMAIN_PATTERN.test(domain),
|
|
1800
|
+
{ message: "A recipient domain is lowercase, such as kanzlei.de or *.kanzlei.de, or * alone" }
|
|
1801
|
+
);
|
|
1802
|
+
var mailSenderIdSchema = z8.union([
|
|
1803
|
+
z8.literal(MAIL_SENDER_SYSTEM),
|
|
1804
|
+
z8.templateLiteral([MAIL_SENDER_CONNECTION_PREFIX, z8.string().regex(CONNECTION_NAME_PATTERN)])
|
|
1805
|
+
]).superRefine((sender, context) => {
|
|
1806
|
+
if (sender !== MAIL_SENDER_SYSTEM)
|
|
1807
|
+
context.addIssue({
|
|
1808
|
+
code: "custom",
|
|
1809
|
+
message: "not_supported_yet: a Connection sender arrives with MAIL-M365S; send as system"
|
|
1810
|
+
});
|
|
1811
|
+
});
|
|
1812
|
+
var mailRecipientSchema = z8.union([
|
|
1813
|
+
z8.strictObject({ address: mailAddressSchema }),
|
|
1814
|
+
z8.strictObject({ user: principalId }),
|
|
1815
|
+
z8.strictObject({ workspace: principalId })
|
|
1816
|
+
]);
|
|
1817
|
+
var recipientEntries = z8.array(
|
|
1818
|
+
z8.union([mailAddressSchema, mailRecipientSchema, z8.looseObject({ email: mailAddressSchema })])
|
|
1819
|
+
).max(MAIL_SEND_MAX_ADDRESSES);
|
|
1820
|
+
var mailRecipientListSchema = z8.union([mailAddressSchema, recipientEntries.min(1)]);
|
|
1821
|
+
var mailCopyRecipientListSchema = z8.union([mailAddressSchema, recipientEntries]);
|
|
1822
|
+
var mailReplyToSchema = z8.union([
|
|
1823
|
+
mailAddressSchema,
|
|
1824
|
+
z8.strictObject({ address: mailAddressSchema }),
|
|
1825
|
+
z8.strictObject({ user: principalId })
|
|
1826
|
+
]);
|
|
1827
|
+
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" });
|
|
1828
|
+
var mailBodySchema = z8.string().max(MAIL_BODY_MAX_BYTES).refine((body) => new TextEncoder().encode(body).byteLength <= MAIL_BODY_MAX_BYTES, {
|
|
1829
|
+
message: `input_invalid: the body exceeds ${MAIL_BODY_MAX_BYTES} bytes`
|
|
1830
|
+
}).meta({ format: WORKFLOW_TEXT_FORMAT_MARKDOWN });
|
|
1831
|
+
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("@"), {
|
|
1832
|
+
message: "input_invalid: a sender name holds no @"
|
|
1833
|
+
});
|
|
1834
|
+
var mailSendInputSchema = z8.strictObject({
|
|
1835
|
+
sender: mailSenderIdSchema.default(MAIL_SENDER_SYSTEM),
|
|
1836
|
+
to: mailRecipientListSchema,
|
|
1837
|
+
cc: mailCopyRecipientListSchema.optional(),
|
|
1838
|
+
bcc: mailCopyRecipientListSchema.optional(),
|
|
1839
|
+
subject: mailSubjectSchema,
|
|
1840
|
+
body: mailBodySchema,
|
|
1841
|
+
senderName: mailSenderNameSchema.optional(),
|
|
1842
|
+
replyTo: mailReplyToSchema.optional(),
|
|
1843
|
+
/** The language of the frame around the body; the instance's default unless set. */
|
|
1844
|
+
locale: z8.enum(localeCodes).optional()
|
|
1845
|
+
});
|
|
1846
|
+
var count2 = z8.number().int().min(0);
|
|
1847
|
+
var recipientCounts = z8.strictObject({ to: count2, cc: count2, bcc: count2 });
|
|
1848
|
+
var mailSendOutputSchema = z8.strictObject({
|
|
1849
|
+
sentAt: z8.iso.datetime({ offset: true }),
|
|
1850
|
+
messageId: z8.string().min(1).max(256).optional(),
|
|
1851
|
+
recipients: recipientCounts,
|
|
1852
|
+
skipped: count2,
|
|
1853
|
+
test: z8.literal(true).optional()
|
|
1854
|
+
});
|
|
1855
|
+
var mailPreviewRecipientSchema = z8.strictObject({
|
|
1856
|
+
kind: z8.enum(["person", "address"]),
|
|
1857
|
+
label: z8.string().min(1).max(MAIL_ADDRESS_MAX_LENGTH)
|
|
1858
|
+
});
|
|
1859
|
+
var mailSendPreviewSchema = z8.strictObject({
|
|
1860
|
+
from: z8.strictObject({ name: z8.string().min(1), address: mailAddressSchema }),
|
|
1861
|
+
replyTo: mailAddressSchema.optional(),
|
|
1862
|
+
to: z8.array(mailPreviewRecipientSchema),
|
|
1863
|
+
cc: z8.array(mailPreviewRecipientSchema),
|
|
1864
|
+
bcc: z8.array(mailPreviewRecipientSchema),
|
|
1865
|
+
skipped: count2,
|
|
1866
|
+
subject: z8.string(),
|
|
1867
|
+
html: z8.string(),
|
|
1868
|
+
text: z8.string()
|
|
1869
|
+
});
|
|
1870
|
+
var mailSendSimulatedOutputSchema = z8.strictObject({
|
|
1871
|
+
simulated: z8.literal(true),
|
|
1872
|
+
preview: mailSendPreviewSchema
|
|
1873
|
+
});
|
|
1874
|
+
var workflowMessageMailParamsSchema = z8.strictObject({
|
|
1875
|
+
subject: mailSubjectSchema,
|
|
1876
|
+
markdown: mailBodySchema,
|
|
1877
|
+
sentBy: z8.discriminatedUnion("kind", [
|
|
1878
|
+
z8.strictObject({ kind: z8.literal("workflow"), workflowName: z8.string().min(1).max(200) }),
|
|
1879
|
+
z8.strictObject({ kind: z8.literal("agent"), onBehalfOf: z8.string().min(1).max(200) })
|
|
1880
|
+
]),
|
|
1881
|
+
test: z8.strictObject({
|
|
1882
|
+
intendedRecipients: z8.strictObject({
|
|
1883
|
+
to: z8.array(mailPreviewRecipientSchema),
|
|
1884
|
+
cc: z8.array(mailPreviewRecipientSchema),
|
|
1885
|
+
bcc: z8.array(mailPreviewRecipientSchema)
|
|
1886
|
+
})
|
|
1887
|
+
}).optional()
|
|
1888
|
+
});
|
|
1889
|
+
var workflowMailSenderFactSchema = z8.strictObject({
|
|
1890
|
+
sender: z8.string().min(1),
|
|
1891
|
+
title: z8.string().min(1),
|
|
1892
|
+
icon: z8.string().min(1),
|
|
1893
|
+
address: mailAddressSchema,
|
|
1894
|
+
recipientDomains: z8.array(mailRecipientDomainSchema)
|
|
1895
|
+
});
|
|
1896
|
+
var mailSendContract = {
|
|
1897
|
+
name: MAIL_SEND_OPERATION,
|
|
1898
|
+
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.",
|
|
1899
|
+
inputSchema: mailSendInputSchema,
|
|
1900
|
+
outputSchema: mailSendOutputSchema,
|
|
1901
|
+
simulatedOutputSchema: mailSendSimulatedOutputSchema,
|
|
1902
|
+
effect: "changing",
|
|
1903
|
+
changeClass: "outward",
|
|
1904
|
+
right: MAIL_SENDER_USE_ACTION,
|
|
1905
|
+
resourceKind: MAIL_SENDER_RESOURCE_KIND,
|
|
1906
|
+
events: { after: "mail.sent", refused: "mail.refused" },
|
|
1907
|
+
errorCodes: MAIL_SEND_ERROR_CODES
|
|
1908
|
+
};
|
|
1909
|
+
|
|
1910
|
+
// src/data-scope.ts
|
|
1911
|
+
import { z as z9 } from "zod";
|
|
1912
|
+
var dataScopeNameSchema = z9.string().regex(/^[a-z][a-z0-9_]{0,62}$/u);
|
|
1913
|
+
var dataScopesSchema = z9.record(
|
|
1914
|
+
dataScopeNameSchema,
|
|
1915
|
+
z9.strictObject({
|
|
1916
|
+
label: z9.string().trim().min(1).max(120),
|
|
1917
|
+
valueType: z9.literal("text")
|
|
1918
|
+
})
|
|
1919
|
+
).refine(
|
|
1920
|
+
(dimensions) => Object.keys(dimensions).length <= 1,
|
|
1921
|
+
"One data scope dimension is supported"
|
|
1922
|
+
);
|
|
1923
|
+
var scopeAssignmentInputSchema = z9.strictObject({
|
|
1924
|
+
dimension: dataScopeNameSchema,
|
|
1925
|
+
holderKind: z9.enum(["user", "group", "service_principal"]),
|
|
1926
|
+
holderId: z9.string().min(1).max(200).refine((value) => !value.includes("\0"), "NUL is not allowed"),
|
|
1927
|
+
effect: z9.enum(GRANT_EFFECTS),
|
|
1928
|
+
values: z9.union([
|
|
1929
|
+
z9.literal("all"),
|
|
1930
|
+
z9.array(
|
|
1931
|
+
z9.string().min(1).max(200).refine((value) => !value.includes("\0"), "NUL is not allowed")
|
|
1932
|
+
).max(1e4)
|
|
1933
|
+
])
|
|
1934
|
+
});
|
|
1935
|
+
var identifier = z9.string().regex(/^[a-z_][a-z0-9_]{0,62}$/u);
|
|
1936
|
+
var scopedTablesSchema = z9.record(
|
|
1937
|
+
identifier,
|
|
1938
|
+
z9.strictObject({
|
|
1939
|
+
scope: z9.record(dataScopeNameSchema, identifier).refine((scope) => Object.keys(scope).length === 1, "A scoped table names one dimension")
|
|
1940
|
+
})
|
|
1941
|
+
);
|
|
1942
|
+
|
|
1943
|
+
// src/feedback-values.ts
|
|
1944
|
+
var FEEDBACK_TEXT_MAX_LENGTH = 4e3;
|
|
1945
|
+
var FEEDBACK_SUMMARY_MAX_LENGTH = 1e3;
|
|
1946
|
+
var FEEDBACK_CATEGORY_MAX_LENGTH = 60;
|
|
1947
|
+
var FEEDBACK_NOTE_MAX_LENGTH = 2e3;
|
|
1948
|
+
var FEEDBACK_SUBJECT_KINDS = ["message"];
|
|
1949
|
+
var FEEDBACK_STATES = ["new", "handled"];
|
|
1253
1950
|
export {
|
|
1254
1951
|
ACCESS_SOURCES,
|
|
1255
1952
|
ACTIONS,
|
|
@@ -1257,6 +1954,7 @@ export {
|
|
|
1257
1954
|
ADMINISTERED_USER_STATUSES,
|
|
1258
1955
|
AGENT_AVAILABILITY_MODES,
|
|
1259
1956
|
AGENT_EDITABLE_FIELDS,
|
|
1957
|
+
AGENT_PREVIEW_SOURCES,
|
|
1260
1958
|
AGENT_RUN_FAILURE_CATEGORIES,
|
|
1261
1959
|
AGENT_RUN_STATUSES,
|
|
1262
1960
|
AGENT_STARTERS_MAX,
|
|
@@ -1266,12 +1964,14 @@ export {
|
|
|
1266
1964
|
APPROVAL_EXECUTIONS,
|
|
1267
1965
|
APPROVAL_REQUEST_STATUSES,
|
|
1268
1966
|
APP_ACTION_CALL_STATUSES,
|
|
1967
|
+
APP_AUDIENCES,
|
|
1269
1968
|
APP_ERROR_CODES,
|
|
1270
1969
|
APP_ERROR_STATUS_CODES,
|
|
1271
1970
|
APP_MODES,
|
|
1272
1971
|
ARTIFACT_PREVIEW_IMAGE_FORMATS,
|
|
1273
1972
|
ARTIFACT_PREVIEW_IMAGE_MIME_TYPES,
|
|
1274
1973
|
ARTIFACT_PREVIEW_STATUSES,
|
|
1974
|
+
ASSET_ACCESS_VERBS,
|
|
1275
1975
|
ASSET_LIFECYCLES,
|
|
1276
1976
|
ASSET_NAME_REFUSAL_REASONS,
|
|
1277
1977
|
ASSET_OWNER_KINDS,
|
|
@@ -1318,6 +2018,12 @@ export {
|
|
|
1318
2018
|
ENDED_AGENT_RUN_STATUSES,
|
|
1319
2019
|
ENDED_APPROVAL_EXECUTIONS,
|
|
1320
2020
|
FAILED_JOB_STATUSES,
|
|
2021
|
+
FEEDBACK_CATEGORY_MAX_LENGTH,
|
|
2022
|
+
FEEDBACK_NOTE_MAX_LENGTH,
|
|
2023
|
+
FEEDBACK_STATES,
|
|
2024
|
+
FEEDBACK_SUBJECT_KINDS,
|
|
2025
|
+
FEEDBACK_SUMMARY_MAX_LENGTH,
|
|
2026
|
+
FEEDBACK_TEXT_MAX_LENGTH,
|
|
1321
2027
|
FIRST_PARTY_AUTH_SCOPES,
|
|
1322
2028
|
FOLLOW_UP_MODES,
|
|
1323
2029
|
FOLLOW_UP_STATUSES,
|
|
@@ -1337,6 +2043,7 @@ export {
|
|
|
1337
2043
|
KNOWLEDGE_DOCUMENT_FAILURE_CODES,
|
|
1338
2044
|
KNOWLEDGE_DOCUMENT_STATES,
|
|
1339
2045
|
KNOWLEDGE_DOCUMENT_WAIT_CODES,
|
|
2046
|
+
KNOWLEDGE_FILE_MAX_BYTES,
|
|
1340
2047
|
KNOWLEDGE_SEARCH_SIGNALS,
|
|
1341
2048
|
KNOWLEDGE_SOURCE_FAILURE_CODES,
|
|
1342
2049
|
KNOWLEDGE_SOURCE_ITEM_FAILURE_CODES,
|
|
@@ -1347,15 +2054,37 @@ export {
|
|
|
1347
2054
|
KNOWLEDGE_SYNC_RUN_STATES,
|
|
1348
2055
|
LISTED_DATA_STORE_STATUSES,
|
|
1349
2056
|
LIVE_JOB_STATUSES,
|
|
2057
|
+
MAIL_ADDRESS_MAX_LENGTH,
|
|
2058
|
+
MAIL_ATTACHMENTS_MAX_BYTES,
|
|
2059
|
+
MAIL_ATTACHMENTS_MAX_FILES,
|
|
2060
|
+
MAIL_AUDIT_MAX_DOMAINS,
|
|
2061
|
+
MAIL_BODY_MAX_BYTES,
|
|
2062
|
+
MAIL_OUTBOUND_DEFAULT_LIMITS,
|
|
2063
|
+
MAIL_OUTBOUND_FOOTER_MAX_LENGTH,
|
|
2064
|
+
MAIL_RECIPIENT_DOMAINS_ANY,
|
|
2065
|
+
MAIL_RECIPIENT_DOMAIN_PATTERN,
|
|
2066
|
+
MAIL_RECIPIENT_ID_PATTERN,
|
|
2067
|
+
MAIL_SENDER_CONNECTION_PREFIX,
|
|
2068
|
+
MAIL_SENDER_NAME_MAX_LENGTH,
|
|
2069
|
+
MAIL_SENDER_RESOURCE_KIND,
|
|
2070
|
+
MAIL_SENDER_SYSTEM,
|
|
2071
|
+
MAIL_SENDER_SYSTEM_ICON,
|
|
2072
|
+
MAIL_SENDER_USE_ACTION,
|
|
2073
|
+
MAIL_SEND_ERROR_CODES,
|
|
2074
|
+
MAIL_SEND_MAX_ADDRESSES,
|
|
2075
|
+
MAIL_SEND_OPERATION,
|
|
2076
|
+
MAIL_SEND_REFUSAL_REASONS,
|
|
2077
|
+
MAIL_SUBJECT_MAX_LENGTH,
|
|
2078
|
+
MAIL_WORKFLOW_MESSAGE_TEMPLATE,
|
|
1350
2079
|
MANAGED_FILE_STATUSES,
|
|
1351
2080
|
MESSAGE_FINISH_STATUSES,
|
|
1352
2081
|
MODEL_PROVIDER_AUTH_MODES,
|
|
1353
2082
|
MODEL_USAGE_EVENT_STATUSES,
|
|
2083
|
+
MODEL_USAGE_LIMIT_METRICS,
|
|
2084
|
+
MODEL_USAGE_LIMIT_PERIODS,
|
|
2085
|
+
MODEL_USAGE_LIMIT_SCOPES,
|
|
1354
2086
|
MODEL_USAGE_SOURCES,
|
|
1355
2087
|
MODEL_USAGE_TIERS,
|
|
1356
|
-
NAMESPACE_PREFIX_MAX_LENGTH,
|
|
1357
|
-
NAMESPACE_PREFIX_MIN_LENGTH,
|
|
1358
|
-
NAMESPACE_PREFIX_PATTERN,
|
|
1359
2088
|
NOTIFY_CHANNELS,
|
|
1360
2089
|
OPENAI_COMPATIBLE_APIS,
|
|
1361
2090
|
OPERATIONS_AUDIENCES,
|
|
@@ -1372,8 +2101,18 @@ export {
|
|
|
1372
2101
|
PROVIDER_CHECK_ERROR_CLASSES,
|
|
1373
2102
|
PROVIDER_PORTS,
|
|
1374
2103
|
PROVIDER_REGIONS,
|
|
2104
|
+
PUBLISHED_DATA_CONSUMER_KINDS,
|
|
1375
2105
|
READING_POLICY_VALUES,
|
|
1376
2106
|
REASONING_EFFORTS,
|
|
2107
|
+
RECORDS_FLAGGED_MAX_ITEMS_PER_PAGE,
|
|
2108
|
+
RECORDS_PROPOSE_MAX_FIELDS_PER_ITEM,
|
|
2109
|
+
RECORDS_PROPOSE_MAX_ITEMS_PER_CALL,
|
|
2110
|
+
RECORD_FIELD_FAILURE_CODES,
|
|
2111
|
+
RECORD_FIELD_STATES,
|
|
2112
|
+
ROLE_GRANT_SCOPE_KINDS,
|
|
2113
|
+
ROLE_PENDING_CHANGES,
|
|
2114
|
+
ROLE_PENDING_DECISIONS,
|
|
2115
|
+
SCHEDULED_START_STATES,
|
|
1377
2116
|
SERVICE_PRINCIPAL_PERMISSIONS,
|
|
1378
2117
|
SERVICE_PRINCIPAL_STATUSES,
|
|
1379
2118
|
SKILL_CHANGE_TYPES,
|
|
@@ -1404,14 +2143,26 @@ export {
|
|
|
1404
2143
|
USER_STATUSES,
|
|
1405
2144
|
WAITING_OPERATION_RUN_STATUSES,
|
|
1406
2145
|
WEB_SOURCE_PROVIDERS,
|
|
2146
|
+
WORKFLOW_DATASET_DOWNLOAD_FORMATS,
|
|
2147
|
+
WORKFLOW_DATASET_STATES,
|
|
1407
2148
|
WORKFLOW_ENDED_STATUSES,
|
|
2149
|
+
WORKFLOW_KINDS,
|
|
2150
|
+
WORKFLOW_MARKDOWN_MAX_COLUMNS,
|
|
2151
|
+
WORKFLOW_MARKDOWN_MAX_ROWS,
|
|
1408
2152
|
WORKFLOW_NAME_PATTERN,
|
|
1409
2153
|
WORKFLOW_NAME_RULE,
|
|
1410
2154
|
WORKFLOW_RESERVED_STEP_TYPES,
|
|
2155
|
+
WORKFLOW_RIGHTS_REVISIONS,
|
|
2156
|
+
WORKFLOW_RIGHT_NEEDED_FOR,
|
|
2157
|
+
WORKFLOW_RIGHT_REFUSALS,
|
|
2158
|
+
WORKFLOW_RUN_ACCOUNT_STATUSES,
|
|
1411
2159
|
WORKFLOW_RUN_MODES,
|
|
1412
2160
|
WORKFLOW_RUN_STATUSES,
|
|
1413
2161
|
WORKFLOW_STEP_RUN_STATUSES,
|
|
2162
|
+
WORKFLOW_STEP_SOURCE_KINDS,
|
|
1414
2163
|
WORKFLOW_STEP_TYPES,
|
|
2164
|
+
WORKFLOW_TEXT_FORMAT_MARKDOWN,
|
|
2165
|
+
WORKFLOW_TEXT_MAX_PARTS,
|
|
1415
2166
|
WORKFLOW_TRIGGER_KINDS,
|
|
1416
2167
|
WORKSPACE_ACCENT_COLORS,
|
|
1417
2168
|
WORKSPACE_ACCESS_STATES,
|
|
@@ -1419,16 +2170,41 @@ export {
|
|
|
1419
2170
|
WORKSPACE_FILE_KINDS,
|
|
1420
2171
|
WORKSPACE_MEMBERSHIP_ROLES,
|
|
1421
2172
|
WORKSPACE_SECTIONS,
|
|
2173
|
+
WORKSPACE_USE_ASSET_KINDS,
|
|
1422
2174
|
WORKSPACE_VISIBILITIES,
|
|
1423
2175
|
YAML_DATA_MAX_VALUES,
|
|
1424
2176
|
YamlDataError,
|
|
1425
2177
|
agentConfigSchema,
|
|
1426
2178
|
checkStorableTexts,
|
|
2179
|
+
dataScopeNameSchema,
|
|
2180
|
+
dataScopesSchema,
|
|
2181
|
+
dataStoreRecordFieldSchema,
|
|
2182
|
+
dataStoreRecordProposalItemSchema,
|
|
2183
|
+
dataStoreRecordsContracts,
|
|
2184
|
+
dataStoreRecordsDecideInputSchema,
|
|
2185
|
+
dataStoreRecordsDecideOutputSchema,
|
|
2186
|
+
dataStoreRecordsFlaggedInputSchema,
|
|
2187
|
+
dataStoreRecordsFlaggedOutputSchema,
|
|
2188
|
+
dataStoreRecordsProposeInputSchema,
|
|
2189
|
+
dataStoreRecordsRuleSchema,
|
|
1427
2190
|
deriveSkillTitle,
|
|
1428
2191
|
formatSkillMarkdown,
|
|
1429
2192
|
isStorableText,
|
|
2193
|
+
knowledgeExtractFieldsInputSchema,
|
|
2194
|
+
knowledgeExtractFieldsOutputSchema,
|
|
2195
|
+
knowledgeFieldValueSchema,
|
|
2196
|
+
knowledgeIngestFetchSchema,
|
|
2197
|
+
knowledgeIngestInputSchema,
|
|
2198
|
+
knowledgeIngestItemSchema,
|
|
2199
|
+
knowledgeIngestOutputSchema,
|
|
1430
2200
|
knowledgeLocateInputSchema,
|
|
1431
2201
|
knowledgeLocateOutputSchema,
|
|
2202
|
+
knowledgePendingInputSchema,
|
|
2203
|
+
knowledgePendingOutputSchema,
|
|
2204
|
+
knowledgePendingRowSchema,
|
|
2205
|
+
knowledgeProcessorOutputSchema,
|
|
2206
|
+
knowledgePutProcessedInputSchema,
|
|
2207
|
+
knowledgeRecordsRefusalSchema,
|
|
1432
2208
|
knowledgeRetryInputSchema,
|
|
1433
2209
|
knowledgeRetryOutputSchema,
|
|
1434
2210
|
knowledgeSourceItemsInputSchema,
|
|
@@ -1436,11 +2212,38 @@ export {
|
|
|
1436
2212
|
knowledgeSourcesOutputSchema,
|
|
1437
2213
|
knowledgeSyncInputSchema,
|
|
1438
2214
|
knowledgeSyncResultSchema,
|
|
2215
|
+
knowledgeWithdrawInputSchema,
|
|
2216
|
+
knowledgeWithdrawOutputSchema,
|
|
2217
|
+
knowledgeWorkflowSourceSchema,
|
|
2218
|
+
knowledgeWriteContracts,
|
|
1439
2219
|
loadYamlData,
|
|
1440
2220
|
localeCodes,
|
|
1441
2221
|
localizedStringSchema,
|
|
2222
|
+
mailAddressSchema,
|
|
2223
|
+
mailBodySchema,
|
|
2224
|
+
mailCopyRecipientListSchema,
|
|
2225
|
+
mailPreviewRecipientSchema,
|
|
2226
|
+
mailRecipientDomainSchema,
|
|
2227
|
+
mailRecipientListSchema,
|
|
2228
|
+
mailRecipientSchema,
|
|
2229
|
+
mailReplyToSchema,
|
|
2230
|
+
mailSendContract,
|
|
2231
|
+
mailSendInputSchema,
|
|
2232
|
+
mailSendOutputSchema,
|
|
2233
|
+
mailSendPreviewSchema,
|
|
2234
|
+
mailSendRefusalDetailsSchema,
|
|
2235
|
+
mailSendSimulatedOutputSchema,
|
|
2236
|
+
mailSenderIdSchema,
|
|
2237
|
+
mailSenderNameSchema,
|
|
2238
|
+
mailSubjectSchema,
|
|
2239
|
+
operationBatchFailureSchema,
|
|
2240
|
+
operationBatchResultSchema,
|
|
2241
|
+
operationPagingSchema,
|
|
1442
2242
|
parseSkillMarkdown,
|
|
1443
2243
|
readYamlData,
|
|
2244
|
+
recordEvidenceResultSchema,
|
|
2245
|
+
scopeAssignmentInputSchema,
|
|
2246
|
+
scopedTablesSchema,
|
|
1444
2247
|
skillConfigSchema,
|
|
1445
2248
|
skillFileEntrySchema,
|
|
1446
2249
|
skillFileFrontmatterSchema,
|
|
@@ -1451,6 +2254,10 @@ export {
|
|
|
1451
2254
|
skillResourcePathSchema,
|
|
1452
2255
|
skillStarterSchema,
|
|
1453
2256
|
workflowConfigSchema,
|
|
2257
|
+
workflowDataFlowsSchema,
|
|
2258
|
+
workflowDatasetReferenceSchema,
|
|
2259
|
+
workflowMailSenderFactSchema,
|
|
2260
|
+
workflowMessageMailParamsSchema,
|
|
1454
2261
|
yamlValueIssue,
|
|
1455
2262
|
yamlValueIssueSentence
|
|
1456
2263
|
};
|