@stndrds/schema 1.0.0-alpha.277 → 1.0.0-alpha.279
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/{all-D-E8v5yo.d.mts → all-Bk8cRKsu.d.mts} +20 -3
- package/dist/{all-D5SkjRst.d.ts → all-C_tC90ZM.d.ts} +20 -3
- package/dist/{attributes-lBLiOIY3.d.mts → attributes--M1ifW8_.d.mts} +1 -1
- package/dist/{attributes-_b3Db8vT.d.ts → attributes-D8eHv5Kf.d.ts} +1 -1
- package/dist/{chunk-XQEDMB6B.mjs → chunk-5PLJHYSL.mjs} +24 -4
- package/dist/{chunk-KKR6I3YV.js → chunk-DEHBEFGO.js} +3 -3
- package/dist/{chunk-VVYIFBFQ.mjs → chunk-PQEOIDXD.mjs} +1 -1
- package/dist/{chunk-F32XOFSP.js → chunk-QMAVKX3Y.js} +55 -34
- package/dist/{chunk-PSCSTHUB.mjs → chunk-QUZ3PN36.mjs} +11 -14
- package/dist/{chunk-K4UER3DU.mjs → chunk-V2WJFUZW.mjs} +14 -2
- package/dist/{chunk-RYAQOR7M.js → chunk-ZBWTAKZO.js} +14 -2
- package/dist/{chunk-FMLZHHWB.js → chunk-ZEPGMHCK.js} +14 -16
- package/dist/exceptions.d.mts +14 -4
- package/dist/exceptions.d.ts +14 -4
- package/dist/exceptions.js +39 -39
- package/dist/exceptions.mjs +1 -1
- package/dist/{helpers-C1VVEAOO.d.mts → helpers-BiABdSxK.d.mts} +3 -3
- package/dist/{helpers-vQ6kp8ET.d.ts → helpers-DyoPqiSz.d.ts} +3 -3
- package/dist/index-C3P5Dnwt.d.mts +790 -0
- package/dist/index-SpFpkWVC.d.ts +790 -0
- package/dist/index.d.mts +2228 -393
- package/dist/index.d.ts +2228 -393
- package/dist/index.js +565 -324
- package/dist/index.mjs +358 -138
- package/dist/{migrations-DcuJZ8qO.d.ts → migrations-B1kkIhIX.d.ts} +1 -1
- package/dist/{migrations-BXd2ZGfM.d.mts → migrations-BNlQVzDC.d.mts} +1 -1
- package/dist/{objects-A1ED9af-.d.ts → objects-DgFojgwH.d.ts} +19 -3
- package/dist/{objects-BCaBw2ef.d.mts → objects-DmMqHn3L.d.mts} +19 -3
- package/dist/{types-DNz3ITS-.d.mts → types-DHqXzkgW.d.mts} +1 -1
- package/dist/{types-DqLi1tx1.d.ts → types-DYYFto8d.d.ts} +1 -1
- package/dist/validation/all.d.mts +7 -7
- package/dist/validation/all.d.ts +7 -7
- package/dist/validation/all.js +29 -29
- package/dist/validation/all.mjs +4 -4
- package/dist/validation/complex/currency.d.mts +2 -2
- package/dist/validation/complex/currency.d.ts +2 -2
- package/dist/validation/complex/location.d.mts +2 -2
- package/dist/validation/complex/location.d.ts +2 -2
- package/dist/validation/complex/phone.d.mts +2 -2
- package/dist/validation/complex/phone.d.ts +2 -2
- package/dist/validation/complex/relation.d.mts +2 -2
- package/dist/validation/complex/relation.d.ts +2 -2
- package/dist/validation/complex/richtext.d.mts +2 -2
- package/dist/validation/complex/richtext.d.ts +2 -2
- package/dist/validation/complex/select.d.mts +2 -2
- package/dist/validation/complex/select.d.ts +2 -2
- package/dist/validation/complex/user.d.mts +2 -2
- package/dist/validation/complex/user.d.ts +2 -2
- package/dist/validation/computed/formula.d.mts +2 -2
- package/dist/validation/computed/formula.d.ts +2 -2
- package/dist/validation/computed/rollup.d.mts +2 -2
- package/dist/validation/computed/rollup.d.ts +2 -2
- package/dist/validation/config/index.d.mts +4 -4
- package/dist/validation/config/index.d.ts +4 -4
- package/dist/validation/config/index.js +11 -11
- package/dist/validation/config/index.mjs +2 -2
- package/dist/validation/core/index.d.mts +3 -3
- package/dist/validation/core/index.d.ts +3 -3
- package/dist/validation/object/index.d.mts +5 -5
- package/dist/validation/object/index.d.ts +5 -5
- package/dist/validation/object/index.js +14 -14
- package/dist/validation/object/index.mjs +2 -2
- package/dist/validation/primitives/checkbox.d.mts +2 -2
- package/dist/validation/primitives/checkbox.d.ts +2 -2
- package/dist/validation/primitives/date.d.mts +2 -2
- package/dist/validation/primitives/date.d.ts +2 -2
- package/dist/validation/primitives/number.d.mts +2 -2
- package/dist/validation/primitives/number.d.ts +2 -2
- package/dist/validation/primitives/text.d.mts +2 -2
- package/dist/validation/primitives/text.d.ts +2 -2
- package/package.json +2 -2
- package/dist/index-AJeEKoy6.d.ts +0 -2203
- package/dist/index-ApHE8c1J.d.mts +0 -2203
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { generateId } from './chunk-QY6QFRRV.mjs';
|
|
2
2
|
export { asTenantId, asUserId, deepEqual, generateId, indexBy } from './chunk-QY6QFRRV.mjs';
|
|
3
|
-
import { SYSTEM_FILTER_ATTRIBUTE_TYPES, RESERVED_OBJECT_NAMES, listViewConfigSchema, detailViewConfigSchema, RESERVED_ATTRIBUTE_NAMES, isAttributeSortable, getAttributeCapabilities, resolveIsWithinBounds, normalizeForEdgeRpc, getOperatorPolarity, extractCurrencyFilterValue } from './chunk-
|
|
4
|
-
export { ATTRIBUTE_FILTER_OPERATORS, LIST_VIEW_TAB_VISIBILITIES, NO_VALUE_OPERATORS, OPERATORS_BY_TYPE, REMOVED_OPERATOR_REPLACEMENTS, RESERVED_ATTRIBUTE_NAMES, RESERVED_OBJECT_NAMES, RESOURCE_VISIBILITIES, SYNONYM_ALIASES, SYSTEM_ATTRIBUTES, SYSTEM_ATTRIBUTE_I18N_KEYS, SYSTEM_FIELD_NAMES, SYSTEM_FILTER_ATTRIBUTE_TYPES, canonicalizeFilterValue, collectQualifiedRuleIssues, currentActor, detailTabSchema, detailViewConfigSchema, extractCurrencyFilterValue, extractFilterValue, getAttributeCapabilities, getAttributeFilterOperators, getOperatorPolarity, getRollupFilterOperators, getSystemAttributeI18nKey, getSystemAttributeList, inverseSourceSchema, isAttributeFilterable, isAttributeGroupable, isAttributeKanbanGroupable, isAttributeSearchable, isDynamicValue, isManagedSystemAttribute, isNoValueOperator, isRelativeDateValue, isSetMembershipOperator, listViewConfigSchema, listViewTabSchema, normalizeFilterRule, normalizeForEdgeRpc, normalizeOperator, now, parseViewConfig, relationSourceSchema, resolveEffectiveFilterType, resolveIsWithinBounds, resolveUtcDayBounds, tableSourceSchema, toMultiValueOperator, toUtcDayString, today, validateQualifiedRule, viewConfigByTypeSchema, viewTypeSchema } from './chunk-
|
|
5
|
-
import { iconNameSchema, parseAttributeConfigForCreate, parseComputedFormula } from './chunk-
|
|
6
|
-
export { ComputedFormulaParseError, SCHEMA_LIMITS, colorIdSchema, iconNameSchema, multiselectOptionWriteSchema, parseAttributeConfig, parseAttributeConfigForCreate, parseAttributeConfigForUpdate, parseComputedFormula, selectOptionWriteSchema, statusGroupSchema, statusOptionWriteSchema } from './chunk-
|
|
7
|
-
import { createObjectValidator, createAttributeValidator, isNullishOrEmptyString } from './chunk-
|
|
8
|
-
export { createFormAttributeValidator, isNullishOrEmptyString, rejectUnknownAttributesOrThrow, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow } from './chunk-
|
|
3
|
+
import { SYSTEM_FILTER_ATTRIBUTE_TYPES, RESERVED_OBJECT_NAMES, listViewConfigSchema, detailViewConfigSchema, RESERVED_ATTRIBUTE_NAMES, isAttributeSortable, getAttributeCapabilities, resolveIsWithinBounds, normalizeForEdgeRpc, getOperatorPolarity, extractCurrencyFilterValue } from './chunk-5PLJHYSL.mjs';
|
|
4
|
+
export { ATTRIBUTE_FILTER_OPERATORS, LIST_VIEW_TAB_VISIBILITIES, NO_VALUE_OPERATORS, OPERATORS_BY_TYPE, REMOVED_OPERATOR_REPLACEMENTS, RESERVED_ATTRIBUTE_NAMES, RESERVED_OBJECT_NAMES, RESOURCE_VISIBILITIES, SYNONYM_ALIASES, SYSTEM_ATTRIBUTES, SYSTEM_ATTRIBUTE_I18N_KEYS, SYSTEM_FIELD_NAMES, SYSTEM_FILTER_ATTRIBUTE_TYPES, canonicalizeFilterValue, collectQualifiedRuleIssues, currentActor, detailTabSchema, detailViewConfigSchema, extractCurrencyFilterValue, extractFilterValue, getAttributeCapabilities, getAttributeFilterOperators, getOperatorPolarity, getRollupFilterOperators, getSystemAttributeI18nKey, getSystemAttributeList, inverseSourceSchema, isAttributeFilterable, isAttributeGroupable, isAttributeKanbanGroupable, isAttributeSearchable, isDynamicValue, isManagedSystemAttribute, isNoValueOperator, isRelativeDateValue, isSetMembershipOperator, listViewConfigSchema, listViewTabSchema, normalizeFilterRule, normalizeForEdgeRpc, normalizeOperator, now, parseResourceVisibility, parseViewConfig, relationSourceSchema, resolveEffectiveFilterType, resolveIsWithinBounds, resolveUtcDayBounds, tableSourceSchema, toMultiValueOperator, toUtcDayString, today, validateQualifiedRule, viewConfigByTypeSchema, viewTypeSchema } from './chunk-5PLJHYSL.mjs';
|
|
5
|
+
import { iconNameSchema, parseAttributeConfigForCreate, parseComputedFormula } from './chunk-PQEOIDXD.mjs';
|
|
6
|
+
export { ComputedFormulaParseError, SCHEMA_LIMITS, colorIdSchema, iconNameSchema, multiselectOptionWriteSchema, parseAttributeConfig, parseAttributeConfigForCreate, parseAttributeConfigForUpdate, parseComputedFormula, selectOptionWriteSchema, statusGroupSchema, statusOptionWriteSchema } from './chunk-PQEOIDXD.mjs';
|
|
7
|
+
import { createObjectValidator, createAttributeValidator, isNullishOrEmptyString } from './chunk-QUZ3PN36.mjs';
|
|
8
|
+
export { createFormAttributeValidator, isNullishOrEmptyString, isValuePresent, rejectUnknownAttributesOrThrow, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow } from './chunk-QUZ3PN36.mjs';
|
|
9
9
|
import './chunk-QVLQPW3O.mjs';
|
|
10
10
|
import './chunk-ZDQ5AP26.mjs';
|
|
11
11
|
import './chunk-LV3FEUKU.mjs';
|
|
@@ -15,8 +15,8 @@ export { createCheckboxValidator } from './chunk-OSSGN43B.mjs';
|
|
|
15
15
|
export { createDateValidator } from './chunk-Q44QKLN4.mjs';
|
|
16
16
|
export { createNumberValidator } from './chunk-UANQJ2GH.mjs';
|
|
17
17
|
export { TEXT_FORMAT_PATTERNS, createTextValidator, resolveTextPattern } from './chunk-O73ROMWQ.mjs';
|
|
18
|
-
import { SchemaError, SchemaErrorCode, ValidationError,
|
|
19
|
-
export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SchemaPlanNotFoundError, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from './chunk-
|
|
18
|
+
import { SchemaError, SchemaErrorCode, ValidationError, DuplicateError, NotFoundError } from './chunk-V2WJFUZW.mjs';
|
|
19
|
+
export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SchemaPlanNotFoundError, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from './chunk-V2WJFUZW.mjs';
|
|
20
20
|
import './chunk-AYVHMVKQ.mjs';
|
|
21
21
|
import './chunk-YUFTHPOE.mjs';
|
|
22
22
|
import { formatPhoneForDisplay, normalizeCountrylessPhoneNumber, normalizePhoneNumber } from './chunk-R5LAJCBU.mjs';
|
|
@@ -136,6 +136,44 @@ var AUDIT_ACTIONS = [
|
|
|
136
136
|
];
|
|
137
137
|
|
|
138
138
|
// src/types/agent.ts
|
|
139
|
+
function isTerminalState(state) {
|
|
140
|
+
return state.phase === "terminal";
|
|
141
|
+
}
|
|
142
|
+
function sessionStateToLegacyStatus(state) {
|
|
143
|
+
switch (state.phase) {
|
|
144
|
+
case "running":
|
|
145
|
+
return "active";
|
|
146
|
+
case "queued":
|
|
147
|
+
return "idle";
|
|
148
|
+
case "parked":
|
|
149
|
+
if (state.parkedOn === void 0) {
|
|
150
|
+
throw new SchemaError("parked state without parkedOn", SchemaErrorCode.INVARIANT_VIOLATION);
|
|
151
|
+
}
|
|
152
|
+
return state.parkedOn === "agents" ? "waiting_agents" : "waiting_human";
|
|
153
|
+
case "terminal":
|
|
154
|
+
if (state.outcome === void 0) {
|
|
155
|
+
throw new SchemaError(
|
|
156
|
+
"terminal state without outcome",
|
|
157
|
+
SchemaErrorCode.INVARIANT_VIOLATION
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
return state.outcome;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function legacyStatusToSessionState(status2) {
|
|
164
|
+
switch (status2) {
|
|
165
|
+
case "active":
|
|
166
|
+
return { phase: "running" };
|
|
167
|
+
case "idle":
|
|
168
|
+
return { phase: "queued" };
|
|
169
|
+
case "waiting_human":
|
|
170
|
+
return { phase: "parked", parkedOn: "human", humanRequestIds: [] };
|
|
171
|
+
case "waiting_agents":
|
|
172
|
+
return { phase: "parked", parkedOn: "agents" };
|
|
173
|
+
default:
|
|
174
|
+
return { phase: "terminal", outcome: status2 };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
139
177
|
var SESSION_TERMINAL_STATUSES = [
|
|
140
178
|
"completed",
|
|
141
179
|
"failed",
|
|
@@ -151,7 +189,7 @@ var DEFAULT_APPROVAL_POLICY = Object.freeze({
|
|
|
151
189
|
destructive: "ask",
|
|
152
190
|
outward: "ask"
|
|
153
191
|
});
|
|
154
|
-
var TODO_PLAN_STATUSES = ["active", "completed", "
|
|
192
|
+
var TODO_PLAN_STATUSES = ["active", "completed", "abandoned"];
|
|
155
193
|
function agentDisplayName(agent2) {
|
|
156
194
|
return agent2.label?.trim() || agent2.name;
|
|
157
195
|
}
|
|
@@ -161,6 +199,60 @@ var MAX_TODO_ID_CHARS = 80;
|
|
|
161
199
|
var MAX_TODO_DESCRIPTION_CHARS = 500;
|
|
162
200
|
var MAX_TODO_RESULT_CHARS = 2e3;
|
|
163
201
|
|
|
202
|
+
// src/types/agent-ui-data.ts
|
|
203
|
+
var NATIVE_AGENT_UI_PART_IDS_METADATA_KEY = "__stndrdsNativeUiPartIds";
|
|
204
|
+
var NATIVE_AGENT_UI_PART_IDS_METADATA_SCHEMA_VERSION = 1;
|
|
205
|
+
var INVALID_NATIVE_PART_IDS = "Native agent UI part IDs metadata is invalid";
|
|
206
|
+
function invalidNativePartIds() {
|
|
207
|
+
throw new ValidationError(INVALID_NATIVE_PART_IDS, []);
|
|
208
|
+
}
|
|
209
|
+
function isPlainRecord(value) {
|
|
210
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
211
|
+
const prototype = Object.getPrototypeOf(value);
|
|
212
|
+
return prototype === Object.prototype || prototype === null;
|
|
213
|
+
}
|
|
214
|
+
function nativeAgentUIPartIdMetadataKey(part, partIndex) {
|
|
215
|
+
if (part.type === "text" || part.type === "reasoning") return `${part.type}:${partIndex}`;
|
|
216
|
+
if (part.type === "tool") return `tool:${part.toolCallId}`;
|
|
217
|
+
return void 0;
|
|
218
|
+
}
|
|
219
|
+
function parseNativeAgentUIPartIdsMetadata(message) {
|
|
220
|
+
const stored = message.metadata?.[NATIVE_AGENT_UI_PART_IDS_METADATA_KEY];
|
|
221
|
+
if (!isPlainRecord(stored)) invalidNativePartIds();
|
|
222
|
+
if (Object.keys(stored).length !== 2 || stored.schemaVersion !== NATIVE_AGENT_UI_PART_IDS_METADATA_SCHEMA_VERSION || !isPlainRecord(stored.partIds)) {
|
|
223
|
+
invalidNativePartIds();
|
|
224
|
+
}
|
|
225
|
+
const expected = /* @__PURE__ */ new Map();
|
|
226
|
+
for (const [index, part] of message.parts.entries()) {
|
|
227
|
+
const key = nativeAgentUIPartIdMetadataKey(part, index);
|
|
228
|
+
if (!key || expected.has(key)) {
|
|
229
|
+
if (key) invalidNativePartIds();
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
expected.set(key, part);
|
|
233
|
+
}
|
|
234
|
+
const entries = Object.entries(stored.partIds);
|
|
235
|
+
if (entries.length !== expected.size) invalidNativePartIds();
|
|
236
|
+
const nativeIdTypes = /* @__PURE__ */ new Map();
|
|
237
|
+
const parsed = {};
|
|
238
|
+
for (const [key, value] of entries) {
|
|
239
|
+
const part = expected.get(key);
|
|
240
|
+
if (!(part && typeof value === "string" && value.length > 0)) {
|
|
241
|
+
invalidNativePartIds();
|
|
242
|
+
}
|
|
243
|
+
const existingType = nativeIdTypes.get(value);
|
|
244
|
+
if (existingType && (part.type === "tool" || existingType !== part.type)) {
|
|
245
|
+
invalidNativePartIds();
|
|
246
|
+
}
|
|
247
|
+
if (part.type === "tool" && value !== part.toolCallId) {
|
|
248
|
+
invalidNativePartIds();
|
|
249
|
+
}
|
|
250
|
+
nativeIdTypes.set(value, part.type);
|
|
251
|
+
parsed[key] = value;
|
|
252
|
+
}
|
|
253
|
+
return parsed;
|
|
254
|
+
}
|
|
255
|
+
|
|
164
256
|
// src/types/document-layout.ts
|
|
165
257
|
var MAX_PRESET_DEPTH = 5;
|
|
166
258
|
|
|
@@ -197,6 +289,10 @@ function isFormSlotFieldRef(f) {
|
|
|
197
289
|
function isFormFreeFieldRef(f) {
|
|
198
290
|
return f.type === "free";
|
|
199
291
|
}
|
|
292
|
+
function resolveFieldRequired(input) {
|
|
293
|
+
if (input.fieldRequired !== void 0) return input.fieldRequired;
|
|
294
|
+
return input.slotMode === "create" && input.attributeRequired === true;
|
|
295
|
+
}
|
|
200
296
|
function getSlotFieldTargets(field) {
|
|
201
297
|
return field.additionalSlotIds?.length ? [field.slotId, ...field.additionalSlotIds] : [field.slotId];
|
|
202
298
|
}
|
|
@@ -262,6 +358,7 @@ function hasOptions(attr) {
|
|
|
262
358
|
|
|
263
359
|
// src/types/user-profiles.ts
|
|
264
360
|
var USER_STATUSES = ["active", "suspended"];
|
|
361
|
+
var USER_WORK_POSTURES = ["plan", "manual", "auto"];
|
|
265
362
|
|
|
266
363
|
// src/types/schema-state.ts
|
|
267
364
|
function viewStateKey(view) {
|
|
@@ -283,6 +380,20 @@ function isRelationGroup(group2) {
|
|
|
283
380
|
}
|
|
284
381
|
|
|
285
382
|
// src/types/pagination.ts
|
|
383
|
+
var COUNT_MODES = ["none", "estimated", "exact"];
|
|
384
|
+
function parseCountMode(value) {
|
|
385
|
+
if (typeof value === "string" && COUNT_MODES.includes(value)) {
|
|
386
|
+
return value;
|
|
387
|
+
}
|
|
388
|
+
throw new ValidationError(
|
|
389
|
+
// biome-ignore lint/style/useTemplate: see the comment above.
|
|
390
|
+
"countMode must be one of: " + COUNT_MODES.join(", ") + " (received: " + String(value) + ")",
|
|
391
|
+
[]
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
function parseOptionalCountMode(value) {
|
|
395
|
+
return value === void 0 ? void 0 : parseCountMode(value);
|
|
396
|
+
}
|
|
286
397
|
var ESTIMATED_COUNT_CAP = 1e4;
|
|
287
398
|
|
|
288
399
|
// src/lib/object-helpers.ts
|
|
@@ -666,9 +777,9 @@ function renderLabelExpression(template, values, fallback = DEFAULT_LABEL_FALLBA
|
|
|
666
777
|
const alternatives = orParts.filter(Boolean);
|
|
667
778
|
let value = "";
|
|
668
779
|
for (const alt of alternatives) {
|
|
669
|
-
const
|
|
670
|
-
if (
|
|
671
|
-
value =
|
|
780
|
+
const text2 = toText(getValue(values, alt));
|
|
781
|
+
if (text2 !== "") {
|
|
782
|
+
value = text2;
|
|
672
783
|
break;
|
|
673
784
|
}
|
|
674
785
|
}
|
|
@@ -678,20 +789,28 @@ function renderLabelExpression(template, values, fallback = DEFAULT_LABEL_FALLBA
|
|
|
678
789
|
const { name: pipeName, args } = parsePipeExpression(pipeExpr);
|
|
679
790
|
const simpleFn = simplePipes[pipeName];
|
|
680
791
|
if (simpleFn) {
|
|
681
|
-
if (value
|
|
682
|
-
value = simpleFn(
|
|
792
|
+
if (value !== "") {
|
|
793
|
+
value = simpleFn(value);
|
|
683
794
|
}
|
|
684
795
|
} else {
|
|
685
796
|
const argFn = pipesWithArgs[pipeName];
|
|
686
797
|
if (argFn) {
|
|
687
|
-
value = argFn(
|
|
798
|
+
value = argFn(value, ...args);
|
|
688
799
|
}
|
|
689
800
|
}
|
|
690
801
|
}
|
|
691
|
-
return
|
|
802
|
+
return value;
|
|
692
803
|
}).trim();
|
|
693
804
|
return result || fallback;
|
|
694
805
|
}
|
|
806
|
+
function toText(value) {
|
|
807
|
+
if (value == null) return "";
|
|
808
|
+
if (typeof value === "function") return "";
|
|
809
|
+
if (typeof value !== "object") return String(value);
|
|
810
|
+
if (Array.isArray(value)) return value.map(toText).filter(Boolean).join(",");
|
|
811
|
+
const ownToString = value.toString;
|
|
812
|
+
return typeof ownToString === "function" && ownToString !== Object.prototype.toString ? String(value) : "";
|
|
813
|
+
}
|
|
695
814
|
function isLabelExpression(value) {
|
|
696
815
|
return /\{\{\s*\S+.*\}\}/.test(value);
|
|
697
816
|
}
|
|
@@ -753,11 +872,26 @@ function extractValueRefs(value) {
|
|
|
753
872
|
|
|
754
873
|
// src/lib/user-display.ts
|
|
755
874
|
function getUserDisplayName(user2) {
|
|
756
|
-
|
|
757
|
-
|
|
875
|
+
const named = [user2.firstName, user2.lastName].map((part) => part?.trim()).filter(Boolean).join(" ");
|
|
876
|
+
if (named !== "") {
|
|
877
|
+
return named;
|
|
758
878
|
}
|
|
759
879
|
return user2.email?.split("@")[0] ?? "";
|
|
760
880
|
}
|
|
881
|
+
var INITIAL_CHARACTER = /\p{L}|\p{N}/u;
|
|
882
|
+
function deriveInitials(label, fallback) {
|
|
883
|
+
const trimmed = label?.trim() ?? "";
|
|
884
|
+
if (trimmed === "") {
|
|
885
|
+
return fallback;
|
|
886
|
+
}
|
|
887
|
+
const words = trimmed.split(/\s+/);
|
|
888
|
+
const parts = words.length === 1 ? trimmed.split("@")[0].split(/[._-]/) : words;
|
|
889
|
+
const initials = parts.map((part) => {
|
|
890
|
+
const initial = part.match(INITIAL_CHARACTER)?.[0];
|
|
891
|
+
return initial === void 0 ? "" : [...initial.toUpperCase()][0] ?? "";
|
|
892
|
+
}).filter(Boolean).slice(0, 2).join("");
|
|
893
|
+
return initials === "" ? fallback : initials;
|
|
894
|
+
}
|
|
761
895
|
|
|
762
896
|
// src/lib/record-creator.ts
|
|
763
897
|
var RECORD_CREATOR_ROOT_ACTOR_METADATA_KEY = "__creatorRootActorId";
|
|
@@ -766,6 +900,20 @@ function getRecordCreatorPrincipalId(record) {
|
|
|
766
900
|
return typeof creatorRootActorId === "string" && creatorRootActorId.length > 0 ? creatorRootActorId : record.createdBy;
|
|
767
901
|
}
|
|
768
902
|
|
|
903
|
+
// src/lib/action-grant.ts
|
|
904
|
+
function includesAction(actions, action) {
|
|
905
|
+
return actions?.includes("*") === true || actions?.includes(action) === true;
|
|
906
|
+
}
|
|
907
|
+
function buildPermissionFlags(actions) {
|
|
908
|
+
return {
|
|
909
|
+
canRead: includesAction(actions, "read"),
|
|
910
|
+
canCreate: includesAction(actions, "create"),
|
|
911
|
+
canUpdate: includesAction(actions, "update"),
|
|
912
|
+
canDelete: includesAction(actions, "delete"),
|
|
913
|
+
canManage: includesAction(actions, "manage")
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
|
|
769
917
|
// src/constants/attribute-columns.ts
|
|
770
918
|
var DB_COLUMN_FIELDS = /* @__PURE__ */ new Set([
|
|
771
919
|
"id",
|
|
@@ -2584,27 +2732,55 @@ var ObjectBuilder = class {
|
|
|
2584
2732
|
* into the TRecord generic, enabling full inference.
|
|
2585
2733
|
*
|
|
2586
2734
|
* @param attr - Attribute definition or builder (auto-builds if builder)
|
|
2735
|
+
* @throws DuplicateError if the name is already declared on this object
|
|
2587
2736
|
*/
|
|
2588
2737
|
attribute(attr) {
|
|
2589
|
-
|
|
2590
|
-
this.obj.attributes = [];
|
|
2591
|
-
}
|
|
2592
|
-
const finalAttr = "build" in attr && typeof attr.build === "function" ? attr.build() : attr;
|
|
2593
|
-
this.obj.attributes.push(finalAttr);
|
|
2738
|
+
this.pushAttributes([attr]);
|
|
2594
2739
|
return this;
|
|
2595
2740
|
}
|
|
2596
2741
|
/**
|
|
2597
2742
|
* Add multiple attributes at once
|
|
2598
2743
|
* Note: For full type inference, prefer chaining .attribute() calls
|
|
2744
|
+
*
|
|
2745
|
+
* @throws DuplicateError if a name is declared twice, inside this batch or
|
|
2746
|
+
* against an attribute already declared on this object
|
|
2599
2747
|
*/
|
|
2600
2748
|
attributes(attrs) {
|
|
2601
|
-
|
|
2602
|
-
this.obj.attributes = [];
|
|
2603
|
-
}
|
|
2604
|
-
const finalAttrs = attrs.map((attr) => "build" in attr ? attr.build() : attr);
|
|
2605
|
-
this.obj.attributes.push(...finalAttrs);
|
|
2749
|
+
this.pushAttributes(attrs);
|
|
2606
2750
|
return this;
|
|
2607
2751
|
}
|
|
2752
|
+
/**
|
|
2753
|
+
* Build any builders, reject duplicate names, then commit — the single push
|
|
2754
|
+
* path behind `attribute()` and `attributes()`, so both entry points share
|
|
2755
|
+
* one builder detection and one uniqueness guarantee.
|
|
2756
|
+
*
|
|
2757
|
+
* The check runs on the resulting array (already committed + incoming), so one
|
|
2758
|
+
* call catches both a collision inside a single `.attributes([...])` batch and
|
|
2759
|
+
* one spanning several calls.
|
|
2760
|
+
*
|
|
2761
|
+
* Names are compared with raw `===`. Postgres stores `attributes.name` as
|
|
2762
|
+
* plain `text` under a deterministic collation, so `x` and `X` are two
|
|
2763
|
+
* distinct attributes there; folding case here would reject a pair the
|
|
2764
|
+
* database accepts.
|
|
2765
|
+
*
|
|
2766
|
+
* @throws DuplicateError with `SchemaErrorCode.DUPLICATE_ATTRIBUTE`
|
|
2767
|
+
* @internal
|
|
2768
|
+
*/
|
|
2769
|
+
pushAttributes(attrs) {
|
|
2770
|
+
const finalAttrs = attrs.map(
|
|
2771
|
+
(attr) => "build" in attr && typeof attr.build === "function" ? attr.build() : attr
|
|
2772
|
+
);
|
|
2773
|
+
assertUniqueBy(
|
|
2774
|
+
[...this.obj.attributes, ...finalAttrs],
|
|
2775
|
+
(attribute) => attribute.name,
|
|
2776
|
+
(name) => new DuplicateError(
|
|
2777
|
+
"attribute",
|
|
2778
|
+
name,
|
|
2779
|
+
`Object "${this.obj.name}": duplicate attribute name "${name}"`
|
|
2780
|
+
)
|
|
2781
|
+
);
|
|
2782
|
+
this.obj.attributes.push(...finalAttrs);
|
|
2783
|
+
}
|
|
2608
2784
|
/**
|
|
2609
2785
|
* Set metadata. Merges with any previously set metadata (preserves keys
|
|
2610
2786
|
* written by other builder methods like `.order()`).
|
|
@@ -3160,13 +3336,13 @@ var ActivityTabConfig = class {
|
|
|
3160
3336
|
return this.view.build();
|
|
3161
3337
|
}
|
|
3162
3338
|
};
|
|
3163
|
-
var
|
|
3339
|
+
var AddressMatchedTabConfig = class {
|
|
3164
3340
|
/** @internal */
|
|
3165
|
-
constructor(view, base) {
|
|
3341
|
+
constructor(view, base, type) {
|
|
3166
3342
|
this.view = view;
|
|
3167
|
-
this.tabData = { ...base, type
|
|
3343
|
+
this.tabData = { ...base, type, emailAttributeIds: [] };
|
|
3168
3344
|
}
|
|
3169
|
-
/** Set the text attributes whose values are matched against
|
|
3345
|
+
/** Set the text attributes whose values are matched against participants. */
|
|
3170
3346
|
emailAttributes(...attributeIds) {
|
|
3171
3347
|
this.tabData.emailAttributeIds = attributeIds;
|
|
3172
3348
|
return this;
|
|
@@ -3193,6 +3369,18 @@ var EmailsTabConfig = class {
|
|
|
3193
3369
|
return this.view.build();
|
|
3194
3370
|
}
|
|
3195
3371
|
};
|
|
3372
|
+
var EmailsTabConfig = class extends AddressMatchedTabConfig {
|
|
3373
|
+
/** @internal */
|
|
3374
|
+
constructor(view, base) {
|
|
3375
|
+
super(view, base, "emails");
|
|
3376
|
+
}
|
|
3377
|
+
};
|
|
3378
|
+
var MeetingsTabConfig = class extends AddressMatchedTabConfig {
|
|
3379
|
+
/** @internal */
|
|
3380
|
+
constructor(view, base) {
|
|
3381
|
+
super(view, base, "meetings");
|
|
3382
|
+
}
|
|
3383
|
+
};
|
|
3196
3384
|
var DocumentsTabConfig = class {
|
|
3197
3385
|
/** @internal */
|
|
3198
3386
|
constructor(view, base) {
|
|
@@ -3362,6 +3550,13 @@ var TabBuilder = class {
|
|
|
3362
3550
|
emails() {
|
|
3363
3551
|
return new EmailsTabConfig(this.view, this.base);
|
|
3364
3552
|
}
|
|
3553
|
+
/**
|
|
3554
|
+
* Create a meetings tab (query-time association via email-bearing attributes)
|
|
3555
|
+
* @example .meetings().emailAttributes("email", "backup_email")
|
|
3556
|
+
*/
|
|
3557
|
+
meetings() {
|
|
3558
|
+
return new MeetingsTabConfig(this.view, this.base);
|
|
3559
|
+
}
|
|
3365
3560
|
/**
|
|
3366
3561
|
* Create a forms tab to launch and track form instances linked to this record
|
|
3367
3562
|
* @example .tab("forms", "Forms").forms()
|
|
@@ -4534,19 +4729,36 @@ var SKILL_OBJECT = object({ name: "skill", label: "Skill" }).sealed().icon("spar
|
|
|
4534
4729
|
)
|
|
4535
4730
|
).attribute(richtext({ name: "content", label: "Content" }).defaultValue(SKILL_CONTENT_TEMPLATE)).build();
|
|
4536
4731
|
var SKILL_VIEW = detailView("skill-detail", "Skill").for("skill").default().sidePanel({ attributes: ["name", "description"] }).tab("content", "Content").richtext("content").titleAttribute("name").done().tab("files", "Files").documents().done().build();
|
|
4537
|
-
var SKILL_LIST_VIEW = listView("skill-list", "Skills").for("skill").default().tab("workspace", "Skills").default().icon("table").visibility("workspace").table().columns("name", "description").sort("name", "asc").tab("mine", "
|
|
4538
|
-
var MEMORY_OBJECT = object({ name: "memory", label: "Memory" }).sealed().icon("database").order(Number.MAX_SAFE_INTEGER).pluralLabel("Memories").labelExpression("{{ name }}").embeddingExpression("{{ name }}\n{{ description }}\n{{ content }}").attribute(text({ name: "name", label: "Name" }).maxLength(MEMORY_NAME_MAX_LENGTH).required()).attribute(
|
|
4732
|
+
var SKILL_LIST_VIEW = listView("skill-list", "Skills").for("skill").default().tab("workspace", "Skills").default().icon("table").visibility("workspace").table().columns("name", "description").sort("name", "asc").tab("mine", "My skills").icon("lock").visibility("private").table().columns("name", "description").sort("name", "asc").build();
|
|
4733
|
+
var MEMORY_OBJECT = object({ name: "memory", label: "Memory" }).sealed().icon("database").order(Number.MAX_SAFE_INTEGER).pluralLabel("Memories").labelExpression("{{ name }}").embeddingExpression("{{ name }}\n{{ description }}\n{{ content }}").migration(2, (migration) => migration.changeType("content", "text", "richtext")).attribute(text({ name: "name", label: "Name" }).maxLength(MEMORY_NAME_MAX_LENGTH).required()).attribute(
|
|
4539
4734
|
text({ name: "description", label: "Description" }).multiline().maxLength(MEMORY_DESCRIPTION_MAX_LENGTH).required()
|
|
4540
|
-
).attribute(
|
|
4735
|
+
).attribute(richtext({ name: "content", label: "Content" })).attribute(
|
|
4541
4736
|
select({ name: "kind", label: "Kind" }).options([
|
|
4542
4737
|
{ value: "fact", label: "Fact" },
|
|
4543
4738
|
{ value: "preference", label: "Preference" },
|
|
4544
4739
|
{ value: "feedback", label: "Feedback" },
|
|
4545
4740
|
{ value: "reference", label: "Reference" }
|
|
4546
4741
|
])
|
|
4547
|
-
).attribute(relation({ name: "subjects", label: "Subjects" }).toAny().many()).attribute(relation({ name: "links", label: "Links" }).to("memory").many()).
|
|
4548
|
-
|
|
4549
|
-
|
|
4742
|
+
).attribute(relation({ name: "subjects", label: "Subjects" }).toAny().many()).attribute(relation({ name: "links", label: "Links" }).to("memory").many()).attribute(
|
|
4743
|
+
select({ name: "source", label: "Source" }).options([
|
|
4744
|
+
{ value: "explicit", label: "Saved by an agent" },
|
|
4745
|
+
{ value: "extracted", label: "Extracted from a session" },
|
|
4746
|
+
{ value: "corroborated", label: "Corroborated across users" }
|
|
4747
|
+
])
|
|
4748
|
+
).attribute(date({ name: "validFrom", label: "Valid from" }).includeTime()).attribute(date({ name: "invalidAt", label: "Invalid at" }).includeTime()).attribute(relation({ name: "supersededBy", label: "Superseded by" }).to("memory")).build();
|
|
4749
|
+
var MEMORY_VIEW = detailView("memory-detail", "Memory").for("memory").default().sidePanel({
|
|
4750
|
+
attributes: [
|
|
4751
|
+
"description",
|
|
4752
|
+
"kind",
|
|
4753
|
+
"source",
|
|
4754
|
+
"validFrom",
|
|
4755
|
+
"invalidAt",
|
|
4756
|
+
"supersededBy",
|
|
4757
|
+
"subjects",
|
|
4758
|
+
"links"
|
|
4759
|
+
]
|
|
4760
|
+
}).tab("content", "Content").richtext("content").titleAttribute("name").build();
|
|
4761
|
+
var MEMORY_LIST_VIEW = listView("memory-list", "Memories").for("memory").default().tab("workspace", "Memories").default().icon("table").visibility("workspace").table().columns("name", "kind", "description", "createdAt").sort("name", "asc").tab("mine", "My memories").icon("lock").visibility("private").table().columns("name", "kind", "description", "createdAt").sort("name", "asc").build();
|
|
4550
4762
|
|
|
4551
4763
|
// src/views/registry.ts
|
|
4552
4764
|
function cloneViewDefinition(view) {
|
|
@@ -4955,6 +5167,65 @@ var FormRegistry = class {
|
|
|
4955
5167
|
};
|
|
4956
5168
|
var formRegistry = new FormRegistry();
|
|
4957
5169
|
|
|
5170
|
+
// src/realtime/agent-ui-message-batch.ts
|
|
5171
|
+
var AGENT_UI_BATCH_MAX_BYTES = 204800;
|
|
5172
|
+
var AGENT_UI_BATCH_MAX_ITEMS = 256;
|
|
5173
|
+
function isRecord(value) {
|
|
5174
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5175
|
+
}
|
|
5176
|
+
function hasExactKeys(value, allowed) {
|
|
5177
|
+
const keys = Object.keys(value);
|
|
5178
|
+
return keys.length === allowed.length && keys.every((key) => allowed.includes(key));
|
|
5179
|
+
}
|
|
5180
|
+
function isPositiveInteger(value) {
|
|
5181
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0;
|
|
5182
|
+
}
|
|
5183
|
+
function isNonNegativeInteger(value) {
|
|
5184
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
5185
|
+
}
|
|
5186
|
+
function isContentRange(value) {
|
|
5187
|
+
if (!(isRecord(value) && hasExactKeys(value, ["kind", "startOffset", "endOffset"]))) {
|
|
5188
|
+
return false;
|
|
5189
|
+
}
|
|
5190
|
+
return (value.kind === "text" || value.kind === "reasoning") && isNonNegativeInteger(value.startOffset) && isNonNegativeInteger(value.endOffset) && value.endOffset >= value.startOffset;
|
|
5191
|
+
}
|
|
5192
|
+
function isBatchItem(value) {
|
|
5193
|
+
if (!isRecord(value)) return false;
|
|
5194
|
+
const expectedKeys = value.content === void 0 ? ["sequence", "chunk"] : ["sequence", "content", "chunk"];
|
|
5195
|
+
return hasExactKeys(value, expectedKeys) && isPositiveInteger(value.sequence) && value.chunk !== void 0 && (value.content === void 0 || isContentRange(value.content));
|
|
5196
|
+
}
|
|
5197
|
+
function encodedSize(value) {
|
|
5198
|
+
try {
|
|
5199
|
+
return new TextEncoder().encode(JSON.stringify(value)).byteLength;
|
|
5200
|
+
} catch {
|
|
5201
|
+
return void 0;
|
|
5202
|
+
}
|
|
5203
|
+
}
|
|
5204
|
+
function isAgentUIMessageBatch(value) {
|
|
5205
|
+
if (!(isRecord(value) && hasExactKeys(value, [
|
|
5206
|
+
"schemaVersion",
|
|
5207
|
+
"batchId",
|
|
5208
|
+
"tenantId",
|
|
5209
|
+
"sessionId",
|
|
5210
|
+
"streamId",
|
|
5211
|
+
"sequenceStart",
|
|
5212
|
+
"sequenceEnd",
|
|
5213
|
+
"items"
|
|
5214
|
+
])) || value.schemaVersion !== 1 || typeof value.batchId !== "string" || value.batchId.trim() === "" || typeof value.tenantId !== "string" || value.tenantId.trim() === "" || typeof value.sessionId !== "string" || value.sessionId.trim() === "" || typeof value.streamId !== "string" || value.streamId.trim() === "" || !isPositiveInteger(value.sequenceStart) || !isPositiveInteger(value.sequenceEnd) || !Array.isArray(value.items) || value.items.length === 0 || value.items.length > AGENT_UI_BATCH_MAX_ITEMS || !value.items.every(isBatchItem)) {
|
|
5215
|
+
return false;
|
|
5216
|
+
}
|
|
5217
|
+
let previous = 0;
|
|
5218
|
+
for (const item of value.items) {
|
|
5219
|
+
if (item.sequence <= previous) return false;
|
|
5220
|
+
previous = item.sequence;
|
|
5221
|
+
}
|
|
5222
|
+
if (value.items[0]?.sequence !== value.sequenceStart || value.items.at(-1)?.sequence !== value.sequenceEnd) {
|
|
5223
|
+
return false;
|
|
5224
|
+
}
|
|
5225
|
+
const size = encodedSize(value);
|
|
5226
|
+
return size !== void 0 && size <= AGENT_UI_BATCH_MAX_BYTES;
|
|
5227
|
+
}
|
|
5228
|
+
|
|
4958
5229
|
// src/realtime/channels.ts
|
|
4959
5230
|
function liveChannelKey(channel) {
|
|
4960
5231
|
switch (channel.kind) {
|
|
@@ -5020,47 +5291,6 @@ function parseLiveChannelKey(key) {
|
|
|
5020
5291
|
return null;
|
|
5021
5292
|
}
|
|
5022
5293
|
|
|
5023
|
-
// src/realtime/cursors.ts
|
|
5024
|
-
var LIVE_STREAM_START_CURSOR = "0-0";
|
|
5025
|
-
var LIVE_STREAM_CURSOR_PATTERN = /^(0|[1-9]\d*)-(0|[1-9]\d*)$/;
|
|
5026
|
-
function parseLiveStreamCursor(cursor) {
|
|
5027
|
-
if (!LIVE_STREAM_CURSOR_PATTERN.test(cursor)) {
|
|
5028
|
-
return null;
|
|
5029
|
-
}
|
|
5030
|
-
const [milliseconds = "0", sequence = "0"] = cursor.split("-");
|
|
5031
|
-
return [BigInt(milliseconds), BigInt(sequence)];
|
|
5032
|
-
}
|
|
5033
|
-
function isLiveStreamCursor(value) {
|
|
5034
|
-
return typeof value === "string" && parseLiveStreamCursor(value) !== null;
|
|
5035
|
-
}
|
|
5036
|
-
function assertLiveStreamCursor(cursor, label = "cursor") {
|
|
5037
|
-
if (cursor === null) {
|
|
5038
|
-
return;
|
|
5039
|
-
}
|
|
5040
|
-
if (!isLiveStreamCursor(cursor)) {
|
|
5041
|
-
throw new Error(`Invalid live stream cursor for ${label}: ${cursor}`);
|
|
5042
|
-
}
|
|
5043
|
-
}
|
|
5044
|
-
function compareLiveStreamCursors(left, right) {
|
|
5045
|
-
const leftCursor = parseLiveStreamCursor(left);
|
|
5046
|
-
if (!leftCursor) {
|
|
5047
|
-
throw new Error(`Invalid live stream cursor for left: ${left}`);
|
|
5048
|
-
}
|
|
5049
|
-
const rightCursor = parseLiveStreamCursor(right);
|
|
5050
|
-
if (!rightCursor) {
|
|
5051
|
-
throw new Error(`Invalid live stream cursor for right: ${right}`);
|
|
5052
|
-
}
|
|
5053
|
-
const [leftMilliseconds, leftSequence] = leftCursor;
|
|
5054
|
-
const [rightMilliseconds, rightSequence] = rightCursor;
|
|
5055
|
-
if (leftMilliseconds !== rightMilliseconds) {
|
|
5056
|
-
return leftMilliseconds < rightMilliseconds ? -1 : 1;
|
|
5057
|
-
}
|
|
5058
|
-
if (leftSequence !== rightSequence) {
|
|
5059
|
-
return leftSequence < rightSequence ? -1 : 1;
|
|
5060
|
-
}
|
|
5061
|
-
return 0;
|
|
5062
|
-
}
|
|
5063
|
-
|
|
5064
5294
|
// src/realtime/events.ts
|
|
5065
5295
|
var BROWSER_PREVIEW_STATUSES = ["live", "paused", "ended", "disconnected"];
|
|
5066
5296
|
var LIVE_EVENT_TYPE_REGISTRY = {
|
|
@@ -5145,13 +5375,13 @@ function isLiveEventType(value) {
|
|
|
5145
5375
|
return typeof value === "string" && LIVE_EVENT_TYPES.includes(value);
|
|
5146
5376
|
}
|
|
5147
5377
|
function isLiveEventPayload(payload) {
|
|
5148
|
-
if (!(
|
|
5378
|
+
if (!(isRecord2(payload) && isLiveEventType(payload.type))) {
|
|
5149
5379
|
return false;
|
|
5150
5380
|
}
|
|
5151
5381
|
return isLiveEventPayloadForType(payload.type, payload);
|
|
5152
5382
|
}
|
|
5153
5383
|
function isLiveEventPayloadForType(type, payload) {
|
|
5154
|
-
if (!
|
|
5384
|
+
if (!isRecord2(payload)) {
|
|
5155
5385
|
return false;
|
|
5156
5386
|
}
|
|
5157
5387
|
switch (type) {
|
|
@@ -5185,7 +5415,7 @@ function isLiveEventPayloadForType(type, payload) {
|
|
|
5185
5415
|
return false;
|
|
5186
5416
|
}
|
|
5187
5417
|
}
|
|
5188
|
-
function
|
|
5418
|
+
function isRecord2(value) {
|
|
5189
5419
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5190
5420
|
}
|
|
5191
5421
|
function isString(value) {
|
|
@@ -5247,13 +5477,13 @@ function isNotificationWorkState(value) {
|
|
|
5247
5477
|
return isOneOf(value, NOTIFICATION_WORK_STATES);
|
|
5248
5478
|
}
|
|
5249
5479
|
function isNotificationSubject(value) {
|
|
5250
|
-
return
|
|
5480
|
+
return isRecord2(value) && hasString(value, "type") && hasString(value, "id");
|
|
5251
5481
|
}
|
|
5252
5482
|
function isRecordFieldPatch(value) {
|
|
5253
|
-
return
|
|
5483
|
+
return isRecord2(value) && hasString(value, "fieldKey") && Object.hasOwn(value, "value") && hasVersion(value, "version");
|
|
5254
5484
|
}
|
|
5255
5485
|
function isRecordPatchPayload(payload) {
|
|
5256
|
-
return payload.type === "record.patch" && hasString(payload, "objectId") && hasString(payload, "recordId") && hasVersion(payload, "recordVersion") && hasOptional(payload, "label", isString) && hasOptional(payload, "metadata",
|
|
5486
|
+
return payload.type === "record.patch" && hasString(payload, "objectId") && hasString(payload, "recordId") && hasVersion(payload, "recordVersion") && hasOptional(payload, "label", isString) && hasOptional(payload, "metadata", isRecord2) && Array.isArray(payload.fieldPatches) && payload.fieldPatches.every(isRecordFieldPatch) && hasString(payload, "updatedAt");
|
|
5257
5487
|
}
|
|
5258
5488
|
function isRecordDeletedPayload(payload) {
|
|
5259
5489
|
return payload.type === "record.deleted" && hasString(payload, "objectId") && hasString(payload, "recordId") && hasVersion(payload, "recordVersion") && hasString(payload, "deletedAt");
|
|
@@ -5262,7 +5492,7 @@ function isRecordRemovedPayload(payload) {
|
|
|
5262
5492
|
return payload.type === "record.removed" && hasOnlyKeys(payload, RECORD_REMOVED_PAYLOAD_KEYS) && hasString(payload, "objectId") && hasString(payload, "recordId") && hasVersion(payload, "recordVersion");
|
|
5263
5493
|
}
|
|
5264
5494
|
function isRecordLiveSnapshot(value) {
|
|
5265
|
-
return
|
|
5495
|
+
return isRecord2(value) && hasOnlyKeys(value, RECORD_LIVE_SNAPSHOT_KEYS) && hasString(value, "id") && hasString(value, "objectId") && isOneOf(value.visibility, ["workspace", "private"]) && isNullableString(value.ownedBy) && (value.visibility === "workspace" && value.ownedBy === null || value.visibility === "private" && isNonEmptyString(value.ownedBy)) && hasString(value, "label") && isRecord2(value.values) && hasOptional(value, "metadata", isRecord2) && hasIsoDateString(value, "createdAt") && hasIsoDateString(value, "updatedAt") && hasOptional(value, "createdBy", isString) && hasOptional(value, "lastUpdatedBy", isString) && hasVersion(value, "schemaVersion");
|
|
5266
5496
|
}
|
|
5267
5497
|
function isRecordCreatedPayload(payload) {
|
|
5268
5498
|
return payload.type === "record.created" && hasOnlyKeys(payload, RECORD_CREATED_PAYLOAD_KEYS) && hasString(payload, "objectId") && hasString(payload, "recordId") && hasVersion(payload, "recordVersion") && isRecordLiveSnapshot(payload.record) && payload.record.id === payload.recordId && payload.record.objectId === payload.objectId;
|
|
@@ -5271,19 +5501,19 @@ function isViewProjectionStalePayload(payload) {
|
|
|
5271
5501
|
return payload.type === "view.projection.stale" && hasString(payload, "viewId") && isOneOf(payload.reason, VIEW_PROJECTION_STALE_REASONS);
|
|
5272
5502
|
}
|
|
5273
5503
|
function isAgentSessionPatchPayload(payload) {
|
|
5274
|
-
return payload.type === "agent.session.patch" && hasString(payload, "sessionId") &&
|
|
5504
|
+
return payload.type === "agent.session.patch" && hasString(payload, "sessionId") && isRecord2(payload.patch) && hasVersion(payload, "version") && hasString(payload, "updatedAt");
|
|
5275
5505
|
}
|
|
5276
5506
|
function isAgentUnreadPatchPayload(payload) {
|
|
5277
|
-
return payload.type === "agent.unread.patch" && hasString(payload, "targetActorId") && hasString(payload, "sessionId") && hasVersion(payload, "unreadCount") && hasVersion(payload, "version") && hasString(payload, "updatedAt") && (!Object.hasOwn(payload, "session") ||
|
|
5507
|
+
return payload.type === "agent.unread.patch" && hasString(payload, "targetActorId") && hasString(payload, "sessionId") && hasVersion(payload, "unreadCount") && hasVersion(payload, "version") && hasString(payload, "updatedAt") && (!Object.hasOwn(payload, "session") || isRecord2(payload.session) && payload.session.id === payload.sessionId);
|
|
5278
5508
|
}
|
|
5279
5509
|
function isLiveNotification(value) {
|
|
5280
|
-
return
|
|
5510
|
+
return isRecord2(value) && hasString(value, "id") && hasString(value, "tenantId") && hasOptional(value, "senderActorId", isString) && hasOptional(value, "rootActorId", isString) && hasOptional(value, "triggeredByActorId", isString) && isNotificationKind(value.kind) && hasString(value, "type") && hasOptional(value, "subject", isNotificationSubject) && hasString(value, "title") && hasOptional(value, "summary", isString) && isRecord2(value.payload) && isNotificationPriority(value.priority) && isNotificationSensitivity(value.sensitivity) && hasOptional(value, "threadKey", isString) && hasOptional(value, "idempotencyKey", isString) && hasOptional(value, "expiresAt", isIsoDateString) && hasIsoDateString(value, "createdAt") && hasIsoDateString(value, "updatedAt");
|
|
5281
5511
|
}
|
|
5282
5512
|
function isLiveNotificationRecipient(value) {
|
|
5283
|
-
return
|
|
5513
|
+
return isRecord2(value) && hasString(value, "id") && hasString(value, "tenantId") && hasString(value, "notificationId") && hasString(value, "recipientActorId") && isNotificationInboxState(value.inboxState) && isNotificationWorkState(value.workState) && hasOptional(value, "lockedAt", isIsoDateString) && hasOptional(value, "lockedByActorId", isString) && hasOptional(value, "readAt", isIsoDateString) && hasOptional(value, "archivedAt", isIsoDateString) && hasOptional(value, "snoozedUntil", isIsoDateString) && hasOptional(value, "completedAt", isIsoDateString) && hasOptional(value, "dismissedAt", isIsoDateString) && hasIsoDateString(value, "createdAt") && hasIsoDateString(value, "updatedAt");
|
|
5284
5514
|
}
|
|
5285
5515
|
function isNotificationRecipientPatch(value) {
|
|
5286
|
-
if (!
|
|
5516
|
+
if (!isRecord2(value)) {
|
|
5287
5517
|
return false;
|
|
5288
5518
|
}
|
|
5289
5519
|
return Object.keys(value).every(
|
|
@@ -5307,14 +5537,14 @@ function isConversationRenamedPayload(payload) {
|
|
|
5307
5537
|
}
|
|
5308
5538
|
function isBrowserPreviewUpdatedPayload(payload) {
|
|
5309
5539
|
const preview = payload.preview;
|
|
5310
|
-
return payload.type === "browser.preview.updated" && hasOnlyKeys(payload, BROWSER_PREVIEW_UPDATED_PAYLOAD_KEYS) &&
|
|
5540
|
+
return payload.type === "browser.preview.updated" && hasOnlyKeys(payload, BROWSER_PREVIEW_UPDATED_PAYLOAD_KEYS) && isRecord2(preview) && hasOnlyKeys(preview, BROWSER_PREVIEW_DESCRIPTOR_KEYS) && hasNonEmptyString(preview, "previewId") && hasNonEmptyString(preview, "rootSessionId") && hasNonEmptyString(preview, "agentSessionId") && hasNonEmptyString(preview, "browserSession") && isOneOf(preview.status, BROWSER_PREVIEW_STATUSES) && hasVersion(preview, "sequence") && hasIsoDateString(preview, "updatedAt") && preview.previewId === `browser:${preview.agentSessionId}:${preview.browserSession}`;
|
|
5311
5541
|
}
|
|
5312
5542
|
function isChannelRevokedPayload(payload) {
|
|
5313
5543
|
return payload.type === "channel.revoked" && hasString(payload, "channel") && isOneOf(payload.reason, CHANNEL_REVOKED_REASONS);
|
|
5314
5544
|
}
|
|
5315
5545
|
|
|
5316
5546
|
// src/realtime/protocol.ts
|
|
5317
|
-
function
|
|
5547
|
+
function isRecord3(value) {
|
|
5318
5548
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5319
5549
|
}
|
|
5320
5550
|
function payloadChannel(payload) {
|
|
@@ -5322,46 +5552,11 @@ function payloadChannel(payload) {
|
|
|
5322
5552
|
return typeof channel === "string" && parseLiveChannelKey(channel) ? channel : null;
|
|
5323
5553
|
}
|
|
5324
5554
|
function getLiveProtocolPayloadChannel(payload) {
|
|
5325
|
-
return
|
|
5555
|
+
return isRecord3(payload) ? payloadChannel(payload) : null;
|
|
5326
5556
|
}
|
|
5327
5557
|
function isLiveEventEnvelope(payload) {
|
|
5328
|
-
if (!
|
|
5329
|
-
return typeof payload.id === "string" &&
|
|
5330
|
-
}
|
|
5331
|
-
function parseLiveSubscribePayload(payload) {
|
|
5332
|
-
if (!isRecord2(payload)) return null;
|
|
5333
|
-
const channel = payloadChannel(payload);
|
|
5334
|
-
if (!channel) return null;
|
|
5335
|
-
const { cursor } = payload;
|
|
5336
|
-
if (cursor !== void 0 && cursor !== null) {
|
|
5337
|
-
if (typeof cursor !== "string" || !isLiveStreamCursor(cursor)) {
|
|
5338
|
-
return null;
|
|
5339
|
-
}
|
|
5340
|
-
}
|
|
5341
|
-
return { channel, cursor: cursor ?? null };
|
|
5342
|
-
}
|
|
5343
|
-
function parseLiveUnsubscribePayload(payload) {
|
|
5344
|
-
if (payload === void 0 || payload === null) return {};
|
|
5345
|
-
if (!isRecord2(payload)) return null;
|
|
5346
|
-
if (!Object.hasOwn(payload, "channel")) {
|
|
5347
|
-
return {};
|
|
5348
|
-
}
|
|
5349
|
-
const channel = payloadChannel(payload);
|
|
5350
|
-
return channel ? { channel } : null;
|
|
5351
|
-
}
|
|
5352
|
-
function isLiveReplayCompletePayload(payload) {
|
|
5353
|
-
if (!isRecord2(payload)) return false;
|
|
5354
|
-
const channel = payloadChannel(payload);
|
|
5355
|
-
if (!channel) return false;
|
|
5356
|
-
return payload.cursor === null || typeof payload.cursor === "string" && isLiveStreamCursor(payload.cursor);
|
|
5357
|
-
}
|
|
5358
|
-
function isLiveGapPayload(payload) {
|
|
5359
|
-
if (!isRecord2(payload)) return false;
|
|
5360
|
-
return payloadChannel(payload) !== null;
|
|
5361
|
-
}
|
|
5362
|
-
function isLiveErrorPayload(payload) {
|
|
5363
|
-
if (!isRecord2(payload)) return false;
|
|
5364
|
-
return payloadChannel(payload) !== null;
|
|
5558
|
+
if (!isRecord3(payload)) return false;
|
|
5559
|
+
return typeof payload.id === "string" && payload.id.length > 0 && typeof payload.channel === "string" && typeof payload.type === "string" && typeof payload.tenantId === "string" && payload.tenantId.length > 0 && typeof payload.occurredAt === "string" && isRecord3(payload.payload);
|
|
5365
5560
|
}
|
|
5366
5561
|
|
|
5367
5562
|
// src/computed/functions.ts
|
|
@@ -6147,14 +6342,14 @@ function resolvePathPart(value, part) {
|
|
|
6147
6342
|
if (Array.isArray(value)) {
|
|
6148
6343
|
return value.map((item) => resolvePathPart(item, part));
|
|
6149
6344
|
}
|
|
6150
|
-
if (!
|
|
6345
|
+
if (!isPlainRecord2(value)) {
|
|
6151
6346
|
return null;
|
|
6152
6347
|
}
|
|
6153
6348
|
if (Object.hasOwn(value, part)) {
|
|
6154
6349
|
return value[part] ?? null;
|
|
6155
6350
|
}
|
|
6156
6351
|
const nestedValues = value.values;
|
|
6157
|
-
if (
|
|
6352
|
+
if (isPlainRecord2(nestedValues) && Object.hasOwn(nestedValues, part)) {
|
|
6158
6353
|
return nestedValues[part] ?? null;
|
|
6159
6354
|
}
|
|
6160
6355
|
return null;
|
|
@@ -6337,14 +6532,23 @@ function toFiniteNumber(value) {
|
|
|
6337
6532
|
const parsed = Number(value);
|
|
6338
6533
|
return Number.isFinite(parsed) ? parsed : null;
|
|
6339
6534
|
}
|
|
6535
|
+
if (isCurrencyValue(value)) {
|
|
6536
|
+
return Number.isFinite(value.value) ? value.value : null;
|
|
6537
|
+
}
|
|
6340
6538
|
return null;
|
|
6341
6539
|
}
|
|
6540
|
+
function isCurrencyValue(value) {
|
|
6541
|
+
return typeof value === "object" && value !== null && typeof value.value === "number" && typeof value.code === "string";
|
|
6542
|
+
}
|
|
6342
6543
|
function toDate(value) {
|
|
6343
6544
|
if (value instanceof Date) {
|
|
6344
6545
|
return Number.isNaN(value.getTime()) ? null : value;
|
|
6345
6546
|
}
|
|
6346
6547
|
if (typeof value !== "string") {
|
|
6347
|
-
|
|
6548
|
+
const start = dateValueStart(value);
|
|
6549
|
+
if (start === null) return null;
|
|
6550
|
+
const ranged = new Date(start);
|
|
6551
|
+
return Number.isNaN(ranged.getTime()) ? null : ranged;
|
|
6348
6552
|
}
|
|
6349
6553
|
const date2 = new Date(value);
|
|
6350
6554
|
return Number.isNaN(date2.getTime()) ? null : date2;
|
|
@@ -6359,7 +6563,7 @@ function uniqueKey(value) {
|
|
|
6359
6563
|
}
|
|
6360
6564
|
return `${typeof value}:${JSON.stringify(value)}`;
|
|
6361
6565
|
}
|
|
6362
|
-
function
|
|
6566
|
+
function isPlainRecord2(value) {
|
|
6363
6567
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6364
6568
|
}
|
|
6365
6569
|
function formatComputedResult(value, returnType, decimals) {
|
|
@@ -6800,7 +7004,8 @@ function normalizeOperatorComparands(type, operator, storedValue, ruleValue) {
|
|
|
6800
7004
|
if (type === "phone") return normalizePhoneComparands(storedValue, ruleValue);
|
|
6801
7005
|
return [normalizeComparableValue(type, storedValue), normalizeComparableValue(type, ruleValue)];
|
|
6802
7006
|
}
|
|
6803
|
-
function normalizeUtcCalendarDay(
|
|
7007
|
+
function normalizeUtcCalendarDay(raw) {
|
|
7008
|
+
const value = isDateRangeValue(raw) ? dateValueStart(raw) : raw;
|
|
6804
7009
|
if (value instanceof Date)
|
|
6805
7010
|
return Number.isNaN(value.getTime()) ? null : value.toISOString().slice(0, 10);
|
|
6806
7011
|
if (typeof value !== "string" || value === "") return null;
|
|
@@ -6823,6 +7028,7 @@ function normalizePhoneComparands(stored, rule) {
|
|
|
6823
7028
|
function normalizeComparableValue(type, value) {
|
|
6824
7029
|
if (type === "currency") return extractCurrencyFilterValue(value);
|
|
6825
7030
|
if (type === "date") {
|
|
7031
|
+
if (isDateRangeValue(value)) return dateValueStart(value);
|
|
6826
7032
|
if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();
|
|
6827
7033
|
return value;
|
|
6828
7034
|
}
|
|
@@ -6891,6 +7097,20 @@ function resolveAttributeDefaultValue(attribute, ctx) {
|
|
|
6891
7097
|
return attribute.includeTime ? ctx.now.toISOString() : dateInTimezone(ctx.now, ctx.timezone);
|
|
6892
7098
|
}
|
|
6893
7099
|
|
|
7100
|
+
// src/utils/agent-title.ts
|
|
7101
|
+
var AGENT_FALLBACK_TITLE_MAX_LENGTH = 60;
|
|
7102
|
+
var STORAGE_PLACEHOLDER_TITLE = /^Session \d+$/;
|
|
7103
|
+
function buildAgentFallbackTitle(message) {
|
|
7104
|
+
const normalized = message.replace(/\s+/g, " ").trim().replace(/[.!?]+$/, "");
|
|
7105
|
+
if (!normalized) return "New conversation";
|
|
7106
|
+
return normalized.length > AGENT_FALLBACK_TITLE_MAX_LENGTH ? `${normalized.slice(0, AGENT_FALLBACK_TITLE_MAX_LENGTH - 1).trimEnd()}...` : normalized;
|
|
7107
|
+
}
|
|
7108
|
+
function conversationDisplayTitle(input) {
|
|
7109
|
+
const generated = input.generated?.trim();
|
|
7110
|
+
if (generated && !STORAGE_PLACEHOLDER_TITLE.test(generated)) return generated;
|
|
7111
|
+
return input.firstUserText ? buildAgentFallbackTitle(input.firstUserText) : input.emptyLabel;
|
|
7112
|
+
}
|
|
7113
|
+
|
|
6894
7114
|
// src/utils/view-sync-payload.ts
|
|
6895
7115
|
function viewSyncPayload(view) {
|
|
6896
7116
|
return {
|
|
@@ -7073,7 +7293,7 @@ var destructiveSchema = z.object({
|
|
|
7073
7293
|
)
|
|
7074
7294
|
}).strict().default({ attributeRemovals: [], objectRemovals: [], renames: [] });
|
|
7075
7295
|
var planSummarySchema = z.string().min(1).describe(
|
|
7076
|
-
"
|
|
7296
|
+
"ONE sentence naming the intent of the change \u2014 what it is for, not what it contains. The human approving it has already watched every entry land in the preview window and can read every row of the plan itself, so a recap tells them nothing they do not have. A second sentence is warranted only when `destructive` is non-empty: say plainly what will be lost (e.g. 'deletes the \"ancienMontant\" column and its data on every devis'). Never restate the plan \u2014 explain intent."
|
|
7077
7297
|
);
|
|
7078
7298
|
var CANONICAL_CONFIG_DESCRIPTION = "The COMPLETE config this view should end up with \u2014 not a patch. Copy the baseline returned by get_default_view and edit it, preserving every tab and setting you are not changing: anything you omit is dropped. To change the columns shown, set `tabs[].columns` (an array of attribute names) \u2014 there is no top-level `columns` on either view type. For a detail view's side panel, set `sidePanel.attributes`. Every attribute name listed must already exist on the object, or be created earlier in this same plan. ONE EXCEPTION to omit-is-dropped: a tab with `type: \"custom\"` renders a component belonging to the application, which you cannot describe or recreate. Copy every such tab through from the baseline exactly as it came, `name`, `component` and `props` untouched \u2014 dropping one, inventing one, or altering any of those three is rejected rather than applied (`name` is the tab's address in links, not its wording). Its `label` and `icon` you may change.";
|
|
7079
7299
|
var BASELINE_TOKEN_DESCRIPTION = "Opaque token returned by get_default_view alongside the baseline you edited. REQUIRED when the object already exists \u2014 it proves you authored against the baseline that is still current. Must be OMITTED when this plan creates the object, which has no baseline yet.";
|
|
@@ -7317,4 +7537,4 @@ var persistedSchemaPlanSchema = z.preprocess(
|
|
|
7317
7537
|
structuralPersistedSchemaPlanSchema
|
|
7318
7538
|
);
|
|
7319
7539
|
|
|
7320
|
-
export { ALLOWED_PROPERTY_TYPES, ALL_ACTIONS, ALL_SYSTEM_RESOURCES, AUDIT_ACTIONS, AUDIT_RESOURCE_TYPES, ActivityTabConfig, AgentBuilder, BEHAVIOR_PROPERTIES, BROWSER_PREVIEW_STATUSES, BYTE_UNIT_LABELS, COMPUTED_FUNCTIONS, COMPUTED_FUNCTION_METADATA, COMPUTED_FUNCTION_NAMES, CONNECTOR_CALLBACK_PARAM, ComputedFormulaCompileError, CustomTabConfig, DB_COLUMN_FIELDS, DEFAULT_AGENT_EXECUTION_CONFIG, DEFAULT_APPROVAL_POLICY, DEFAULT_ROLES, DEFAULT_ROLE_DESCRIPTIONS, DEFAULT_ROLE_LABELS, DEFAULT_ROLE_PERMISSIONS, DOCUMENT_SYSTEM_ATTRIBUTES, DetailViewBuilder, DocumentsTabConfig, EMPTY_VALUE_PLACEHOLDER, ESTIMATED_COUNT_CAP, EmailsTabConfig, FORM_FORBIDDEN_ATTRIBUTE_TYPES, FlagRegistry, FlagService, FormBuilder, FormRegistry, FormRowBuilder, FormStepBuilder, GroupBuilder, IDENTITY_PROPERTIES, LIVE_EVENT_TYPES,
|
|
7540
|
+
export { AGENT_UI_BATCH_MAX_BYTES, AGENT_UI_BATCH_MAX_ITEMS, ALLOWED_PROPERTY_TYPES, ALL_ACTIONS, ALL_SYSTEM_RESOURCES, AUDIT_ACTIONS, AUDIT_RESOURCE_TYPES, ActivityTabConfig, AgentBuilder, BEHAVIOR_PROPERTIES, BROWSER_PREVIEW_STATUSES, BYTE_UNIT_LABELS, COMPUTED_FUNCTIONS, COMPUTED_FUNCTION_METADATA, COMPUTED_FUNCTION_NAMES, CONNECTOR_CALLBACK_PARAM, COUNT_MODES, ComputedFormulaCompileError, CustomTabConfig, DB_COLUMN_FIELDS, DEFAULT_AGENT_EXECUTION_CONFIG, DEFAULT_APPROVAL_POLICY, DEFAULT_LABEL_FALLBACK, DEFAULT_ROLES, DEFAULT_ROLE_DESCRIPTIONS, DEFAULT_ROLE_LABELS, DEFAULT_ROLE_PERMISSIONS, DOCUMENT_SYSTEM_ATTRIBUTES, DetailViewBuilder, DocumentsTabConfig, EMPTY_VALUE_PLACEHOLDER, ESTIMATED_COUNT_CAP, EmailsTabConfig, FORM_FORBIDDEN_ATTRIBUTE_TYPES, FlagRegistry, FlagService, FormBuilder, FormRegistry, FormRowBuilder, FormStepBuilder, GroupBuilder, IDENTITY_PROPERTIES, LIVE_EVENT_TYPES, ListViewBuilder, ListViewTabConfigBuilder, MAX_PRESET_DEPTH, MAX_TODOS, MAX_TODO_DESCRIPTION_CHARS, MAX_TODO_ID_CHARS, MAX_TODO_RESULT_CHARS, MEMORY_LIST_VIEW, MEMORY_OBJECT, MEMORY_VIEW, MeetingsTabConfig, NATIVE_AGENT_UI_PART_IDS_METADATA_KEY, NATIVE_AGENT_UI_PART_IDS_METADATA_SCHEMA_VERSION, NOTIFICATION_INBOX_STATES, NOTIFICATION_KINDS, NOTIFICATION_PRIORITIES, NOTIFICATION_SENSITIVITIES, NOTIFICATION_TYPES_V1, NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED, NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED, NOTIFICATION_TYPE_AGENT_SESSION_FAILED, NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT, NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN, NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED, NOTIFICATION_WORK_STATES, NoopGeocodingAdapter, OPERATOR_SPECS, ObjectBuilder, PRESENTATION_PROPERTIES, QUALIFIED_SEPARATOR, RECORD_CREATOR_ROOT_ACTOR_METADATA_KEY, RELATION_TARGET_ANY, RelationGroupBuilder, RichtextTabConfig, SCHEMA_PLAN_LIMITS, SESSION_TERMINAL_STATUSES, SKILL_LIST_VIEW, SKILL_OBJECT, SKILL_VIEW, STANDARD_SCHEMA_VENDOR, SYSTEM_RESOURCES, SYSTEM_RESOURCE_LABELS, TODAY_DEFAULT, TODO_PLAN_STATUSES, TODO_STATUSES, TabBuilder, TableTabConfig, USER_STATUSES, USER_WORK_POSTURES, accessLevelToActions, actionsToAccessLevel, agent, agentDisplayName, applyPipes, applyRelationProps, assertAcyclicComputedDependencies, booleanFlag, buildAgentFallbackTitle, buildPermissionFlags, buildPropertySchema, buildQualifiedAttribute, canonicalStringify, checkbox, compileComputedFormula, compileRollupAttribute, computeByteMagnitude, conversationDisplayTitle, createFlagRegistry, createFlagService, createStandardSchemaProps, currency, date, dateInTimezone, dateValueStart, deriveInitials, destructiveSchema, detailView, document, evaluateComputedAst, evaluateComputedFormula, evaluateComputedFormulaWithResult, evaluateFilterState, evaluateRecordFilterState, extractAttributeNames, extractValueRefs, flagRegistry, form, formRegistry, formatAttributeValue, formatByteSize, formatComputedResult, formatLocationValue, formula, generateDefaultDetailView, generateDefaultListView, getActiveTab, getErrorMessage, getLiveProtocolPayloadChannel, getRecordCreatorPrincipalId, getSlotFieldTargets, getUserDisplayName, group, hasDestructiveEntries, hasOptions, includesAction, inferInverseCardinality, inferRollupReturnType, isAgentUIMessageBatch, isAttributeSortable2 as isAttributeSortable, isBilateralRelation, isCheckboxEquality, isComputedFunctionName, isDateRangeValue, isDefaultRole, isDetailView, isDocumentAttribute, isEmptyObject, isFieldGroup, isFormDefinition, isFormFieldsRow, isFormFreeFieldRef, isFormHeadingRow, isFormSeparatorRow, isFormSlotFieldRef, isFormTextRow, isLabelExpression, isListView, isLiveEventEnvelope, isLiveEventPayload, isLiveEventPayloadForType, isLiveEventType, isNotEmpty, isPlainRecord2 as isPlainRecord, isRelationGroup, isStandardSchema, isTerminalSessionStatus, isTerminalState, isUniversalRelation, jsonFlag, legacyStatusToSessionState, listView, liveChannelKey, location, matchesAccepts, multiselect, nativeAgentUIPartIdMetadataKey, normalizeDateValue, number, numberFlag, object, parseCountMode, parseLiveChannelKey, parseNativeAgentUIPartIdsMetadata, parseOptionalCountMode, parseQualifiedAttribute, persistedDefaultViewTargetSchema, persistedSchemaPlanSchema, phone, plannedAttributeSchema, plannedInlineAttributeSchema, plannedObjectSchema, proposedDefaultViewTargetSchema, registry, relation, relationGroup, relationPropertyDefs, renderLabelExpression, resetViewToDefault, resolveAttributeDefaultValue, resolveFieldRequired, resolvePropertyDefinitions, richtext, rollup, rollupToFormulaExpression, schemaPlanSchema, select, sessionStateToLegacyStatus, status, stringFlag, text, toUndefinedIfEmpty, user, validateAttributeName, validateLabelExpression, validateObjectName, validateViewName, viewRegistry, viewStateKey, viewSyncPayload };
|