@cxtms/cx-schema 1.9.261 → 1.9.263
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 +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/quickSearchValidator.d.ts +13 -0
- package/dist/quickSearchValidator.d.ts.map +1 -0
- package/dist/quickSearchValidator.js +75 -0
- package/dist/quickSearchValidator.js.map +1 -0
- package/dist/validator.d.ts +7 -0
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +39 -0
- package/dist/validator.js.map +1 -1
- package/package.json +1 -1
- package/schemas/quick-search-kinds.json +27 -0
- package/schemas/schema.graphql +64 -0
- package/schemas/schemas.json +42 -2
- package/skills/cxtms-developer/SKILL.md +1 -0
- package/skills/cxtms-developer/ref-graphql-query.md +8 -0
- package/skills/cxtms-module-builder/SKILL.md +20 -2
- package/skills/cxtms-workflow-builder/ref-agent.md +44 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { ModuleValidator } from './validator';
|
|
5
5
|
export { WorkflowValidator } from './workflowValidator';
|
|
6
|
+
export { validateQuickSearch, QuickSearchKind, QuickSearchKinds } from './quickSearchValidator';
|
|
6
7
|
export { ValidationResult, ValidationError, ValidationWarning, ValidationSummary, ValidatorOptions, WorkflowValidatorOptions, YAMLModule, YAMLWorkflow, WorkflowErrorType } from './types';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* CX Schema Validator - Main entry point
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.WorkflowValidator = exports.ModuleValidator = void 0;
|
|
6
|
+
exports.validateQuickSearch = exports.WorkflowValidator = exports.ModuleValidator = void 0;
|
|
7
7
|
var validator_1 = require("./validator");
|
|
8
8
|
Object.defineProperty(exports, "ModuleValidator", { enumerable: true, get: function () { return validator_1.ModuleValidator; } });
|
|
9
9
|
var workflowValidator_1 = require("./workflowValidator");
|
|
10
10
|
Object.defineProperty(exports, "WorkflowValidator", { enumerable: true, get: function () { return workflowValidator_1.WorkflowValidator; } });
|
|
11
|
+
var quickSearchValidator_1 = require("./quickSearchValidator");
|
|
12
|
+
Object.defineProperty(exports, "validateQuickSearch", { enumerable: true, get: function () { return quickSearchValidator_1.validateQuickSearch; } });
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,+DAAgG;AAAvF,2HAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic rules for entity quickSearch blocks. Mirrors the backend's
|
|
3
|
+
* QuickSearchConfigValidator (tms-backend-api), except `filter`, which only
|
|
4
|
+
* the backend can check.
|
|
5
|
+
*/
|
|
6
|
+
export interface QuickSearchKind {
|
|
7
|
+
key: string;
|
|
8
|
+
matchFields: string[];
|
|
9
|
+
select: string[];
|
|
10
|
+
}
|
|
11
|
+
export type QuickSearchKinds = Record<string, QuickSearchKind>;
|
|
12
|
+
export declare function validateQuickSearch(entityName: string, entityKind: string | undefined | null, config: any, kinds: QuickSearchKinds): string[];
|
|
13
|
+
//# sourceMappingURL=quickSearchValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickSearchValidator.d.ts","sourceRoot":"","sources":["../src/quickSearchValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAQ/D,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACrC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,gBAAgB,GACtB,MAAM,EAAE,CAmDV"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Semantic rules for entity quickSearch blocks. Mirrors the backend's
|
|
4
|
+
* QuickSearchConfigValidator (tms-backend-api), except `filter`, which only
|
|
5
|
+
* the backend can check.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.validateQuickSearch = validateQuickSearch;
|
|
9
|
+
const CUSTOM_VALUES_PREFIX = 'customValues.';
|
|
10
|
+
// {{ path }} or {{helper path }}
|
|
11
|
+
const TEMPLATE_PATH = /\{\{\s*(?:[A-Za-z]+\s+)?([A-Za-z_][\w.]*)\s*\}\}/g;
|
|
12
|
+
// Component name, e.g. Orders/UpdateOrder
|
|
13
|
+
const DIALOG_COMPONENT = /^[A-Za-z0-9]+(\/[A-Za-z0-9]+)+$/;
|
|
14
|
+
function validateQuickSearch(entityName, entityKind, config, kinds) {
|
|
15
|
+
if (!config || config.enabled !== true)
|
|
16
|
+
return [];
|
|
17
|
+
const prefix = `Entity '${entityName}' quickSearch:`;
|
|
18
|
+
const kind = entityKind ? kinds[entityKind] : undefined;
|
|
19
|
+
if (!kind) {
|
|
20
|
+
return [`${prefix} entityKind must be one of ${Object.keys(kinds).join(', ')}.`];
|
|
21
|
+
}
|
|
22
|
+
const errors = [];
|
|
23
|
+
const match = Array.isArray(config.matchFields) ? config.matchFields : [];
|
|
24
|
+
const select = Array.isArray(config.select) ? config.select : [];
|
|
25
|
+
if (match.length === 0)
|
|
26
|
+
errors.push(`${prefix} matchFields must list at least one field.`);
|
|
27
|
+
for (const f of match) {
|
|
28
|
+
if (!kind.matchFields.includes(f)) {
|
|
29
|
+
errors.push(`${prefix} matchFields '${f}' is not searchable for ${entityKind}. Allowed: ${kind.matchFields.join(', ')}.`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (select.length === 0)
|
|
33
|
+
errors.push(`${prefix} select must list at least one path.`);
|
|
34
|
+
for (const p of select) {
|
|
35
|
+
if (!isSelectable(kind, p))
|
|
36
|
+
errors.push(`${prefix} select '${p}' is not available for ${entityKind}.`);
|
|
37
|
+
}
|
|
38
|
+
if (!config.display?.title || !String(config.display.title).trim())
|
|
39
|
+
errors.push(`${prefix} display.title is required.`);
|
|
40
|
+
if (!config.icon || !String(config.icon).trim())
|
|
41
|
+
errors.push(`${prefix} icon is required.`);
|
|
42
|
+
const open = config.open && typeof config.open === 'object' ? config.open : {};
|
|
43
|
+
const actions = ['navigate', 'dialog'].filter(a => a in open).length;
|
|
44
|
+
if (actions !== 1)
|
|
45
|
+
errors.push(`${prefix} open must define exactly one of navigate or dialog.`);
|
|
46
|
+
if ('dialog' in open && (typeof open.dialog !== 'string' || !DIALOG_COMPONENT.test(open.dialog))) {
|
|
47
|
+
errors.push(`${prefix} open.dialog must be a component name like 'Orders/UpdateOrder'.`);
|
|
48
|
+
}
|
|
49
|
+
if ('navigate' in open && typeof open.navigate !== 'string') {
|
|
50
|
+
errors.push(`${prefix} open.navigate must be a route path.`);
|
|
51
|
+
}
|
|
52
|
+
const allowed = new Set([...select, kind.key]);
|
|
53
|
+
const templates = [config.display?.title, config.display?.subtitle, config.display?.badge, open.navigate]
|
|
54
|
+
.filter((t) => typeof t === 'string');
|
|
55
|
+
const missing = new Set();
|
|
56
|
+
for (const t of templates) {
|
|
57
|
+
for (const m of t.matchAll(TEMPLATE_PATH)) {
|
|
58
|
+
if (!allowed.has(m[1]))
|
|
59
|
+
missing.add(m[1]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const p of missing)
|
|
63
|
+
errors.push(`${prefix} template path '${p}' must be listed in select.`);
|
|
64
|
+
return errors;
|
|
65
|
+
}
|
|
66
|
+
function isSelectable(kind, path) {
|
|
67
|
+
if (path === `${CUSTOM_VALUES_PREFIX}*`)
|
|
68
|
+
return false;
|
|
69
|
+
if (kind.select.includes(path))
|
|
70
|
+
return true;
|
|
71
|
+
return path.startsWith(CUSTOM_VALUES_PREFIX)
|
|
72
|
+
&& path.length > CUSTOM_VALUES_PREFIX.length
|
|
73
|
+
&& kind.select.includes(`${CUSTOM_VALUES_PREFIX}*`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=quickSearchValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickSearchValidator.js","sourceRoot":"","sources":["../src/quickSearchValidator.ts"],"names":[],"mappings":"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"}
|
package/dist/validator.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export declare class ModuleValidator {
|
|
|
7
7
|
private schemas;
|
|
8
8
|
private schemasDir;
|
|
9
9
|
private options;
|
|
10
|
+
private quickSearchKinds;
|
|
11
|
+
private quickSearchKindsError;
|
|
10
12
|
constructor(options?: ValidatorOptions);
|
|
11
13
|
/**
|
|
12
14
|
* Register all loaded schemas with Ajv
|
|
@@ -56,6 +58,11 @@ export declare class ModuleValidator {
|
|
|
56
58
|
* Validate entities array
|
|
57
59
|
*/
|
|
58
60
|
private validateEntities;
|
|
61
|
+
/**
|
|
62
|
+
* Validate an entity's quickSearch block: shape via schemas.json#/definitions/quickSearch,
|
|
63
|
+
* then the semantic rules the backend also enforces at module save.
|
|
64
|
+
*/
|
|
65
|
+
private validateQuickSearch;
|
|
59
66
|
/**
|
|
60
67
|
* Validate configurations array
|
|
61
68
|
*/
|
package/dist/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAGjB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAQjB,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,qBAAqB,CAAgB;gBAEjC,OAAO,GAAE,gBAAqB;IAsC1C;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgEjE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyE/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB"}
|
package/dist/validator.js
CHANGED
|
@@ -46,6 +46,7 @@ const fs = __importStar(require("fs"));
|
|
|
46
46
|
const path = __importStar(require("path"));
|
|
47
47
|
const yaml_1 = __importDefault(require("yaml"));
|
|
48
48
|
const schemaLoader_1 = require("./utils/schemaLoader");
|
|
49
|
+
const quickSearchValidator_1 = require("./quickSearchValidator");
|
|
49
50
|
class ModuleValidator {
|
|
50
51
|
constructor(options = {}) {
|
|
51
52
|
this.schemasDir = options.schemasPath || path.join(__dirname, '../schemas');
|
|
@@ -68,6 +69,17 @@ class ModuleValidator {
|
|
|
68
69
|
this.schemas = (0, schemaLoader_1.loadSchemas)(this.schemasDir);
|
|
69
70
|
// Register schemas with Ajv
|
|
70
71
|
this.registerSchemas();
|
|
72
|
+
const kindsPath = path.join(this.schemasDir, 'quick-search-kinds.json');
|
|
73
|
+
this.quickSearchKinds = null;
|
|
74
|
+
this.quickSearchKindsError = null;
|
|
75
|
+
if (fs.existsSync(kindsPath)) {
|
|
76
|
+
try {
|
|
77
|
+
this.quickSearchKinds = JSON.parse(fs.readFileSync(kindsPath, 'utf-8'));
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.quickSearchKindsError = `quick-search-kinds.json in ${this.schemasDir} is invalid (${error.message}). Reinstall @cxtms/cx-schema.`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
71
83
|
}
|
|
72
84
|
/**
|
|
73
85
|
* Register all loaded schemas with Ajv
|
|
@@ -363,8 +375,35 @@ class ModuleValidator {
|
|
|
363
375
|
message: 'Entity must have a name property'
|
|
364
376
|
});
|
|
365
377
|
}
|
|
378
|
+
if (entity.quickSearch !== undefined) {
|
|
379
|
+
this.validateQuickSearch(entity, `${entityPath}.quickSearch`, errors);
|
|
380
|
+
}
|
|
366
381
|
});
|
|
367
382
|
}
|
|
383
|
+
/**
|
|
384
|
+
* Validate an entity's quickSearch block: shape via schemas.json#/definitions/quickSearch,
|
|
385
|
+
* then the semantic rules the backend also enforces at module save.
|
|
386
|
+
*/
|
|
387
|
+
validateQuickSearch(entity, basePath, errors) {
|
|
388
|
+
const validate = this.ajv.getSchema('schemas.json#/definitions/quickSearch');
|
|
389
|
+
if (validate && !validate(entity.quickSearch)) {
|
|
390
|
+
this.addAjvErrors(validate.errors, basePath, errors);
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
if (!this.quickSearchKinds) {
|
|
394
|
+
const reason = this.quickSearchKindsError
|
|
395
|
+
?? `quick-search-kinds.json not found in ${this.schemasDir}. Reinstall @cxtms/cx-schema.`;
|
|
396
|
+
errors.push({
|
|
397
|
+
type: 'invalid_quick_search',
|
|
398
|
+
path: basePath,
|
|
399
|
+
message: `Cannot validate quickSearch: ${reason}`
|
|
400
|
+
});
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
for (const message of (0, quickSearchValidator_1.validateQuickSearch)(entity.name, entity.entityKind, entity.quickSearch, this.quickSearchKinds)) {
|
|
404
|
+
errors.push({ type: 'invalid_quick_search', path: basePath, message });
|
|
405
|
+
}
|
|
406
|
+
}
|
|
368
407
|
/**
|
|
369
408
|
* Validate configurations array
|
|
370
409
|
*/
|
package/dist/validator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AccountingTransaction": {
|
|
3
|
+
"key": "accountingTransactionId",
|
|
4
|
+
"matchFields": ["transactionNumber"],
|
|
5
|
+
"select": ["accountingTransactionStatus", "accountingTransactionType", "applyToContact.name", "created", "customValues.*", "dueDate", "transactionDate", "transactionNumber"]
|
|
6
|
+
},
|
|
7
|
+
"Commodity": {
|
|
8
|
+
"key": "commodityId",
|
|
9
|
+
"matchFields": ["description", "serialNumber", "trackingNumbers.trackingNumber"],
|
|
10
|
+
"select": ["billToContact.name", "commodityStatus.statusName", "created", "customValues.*", "description", "serialNumber"]
|
|
11
|
+
},
|
|
12
|
+
"Contact": {
|
|
13
|
+
"key": "contactId",
|
|
14
|
+
"matchFields": ["accountNumber", "name"],
|
|
15
|
+
"select": ["accountNumber", "contactStatus.statusName", "contactType", "created", "customValues.*", "name"]
|
|
16
|
+
},
|
|
17
|
+
"Job": {
|
|
18
|
+
"key": "jobId",
|
|
19
|
+
"matchFields": ["jobNumber"],
|
|
20
|
+
"select": ["created", "customValues.*", "customer.name", "description", "employee.name", "jobNumber", "jobStatus.jobStatusName"]
|
|
21
|
+
},
|
|
22
|
+
"Order": {
|
|
23
|
+
"key": "orderId",
|
|
24
|
+
"matchFields": ["orderNumber", "trackingNumber"],
|
|
25
|
+
"select": ["billToContact.name", "created", "customValues.*", "employeeContact.name", "orderNumber", "orderStatus.orderStatusName", "orderType", "salespersonContact.name", "trackingNumber"]
|
|
26
|
+
}
|
|
27
|
+
}
|
package/schemas/schema.graphql
CHANGED
|
@@ -10807,6 +10807,70 @@ scalar TimeSpanScalar
|
|
|
10807
10807
|
|
|
10808
10808
|
scalar UUID @specifiedBy(url: "https://tools.ietf.org/html/rfc4122")
|
|
10809
10809
|
|
|
10810
|
+
scalar Long
|
|
10811
|
+
|
|
10812
|
+
extend type Query {
|
|
10813
|
+
quickSearch(organizationId: Int!, query: String!, entityNames: [String!], take: Int! = 5): QuickSearchResult!
|
|
10814
|
+
quickSearchEntities(organizationId: Int!): [QuickSearchEntity!]!
|
|
10815
|
+
agentSessionAttachments(skip: Int, take: Int, organizationId: Int!, agentSessionId: UUID, contentKind: AttachmentContentKind): AgentSessionAttachmentsCollectionSegment @cost(weight: "10")
|
|
10816
|
+
}
|
|
10817
|
+
|
|
10818
|
+
type QuickSearchResult {
|
|
10819
|
+
groups: [QuickSearchGroup!]!
|
|
10820
|
+
}
|
|
10821
|
+
|
|
10822
|
+
type QuickSearchGroup {
|
|
10823
|
+
entityName: String!
|
|
10824
|
+
items: [QuickSearchItem!]!
|
|
10825
|
+
total: Int!
|
|
10826
|
+
hasMore: Boolean!
|
|
10827
|
+
partial: Boolean!
|
|
10828
|
+
}
|
|
10829
|
+
|
|
10830
|
+
type QuickSearchItem {
|
|
10831
|
+
key: String!
|
|
10832
|
+
matchRank: Int!
|
|
10833
|
+
data: MapOfObject
|
|
10834
|
+
}
|
|
10835
|
+
|
|
10836
|
+
type QuickSearchEntity {
|
|
10837
|
+
entityName: String!
|
|
10838
|
+
entityKind: String!
|
|
10839
|
+
groupLabel: MapOfObject
|
|
10840
|
+
icon: String!
|
|
10841
|
+
order: Int!
|
|
10842
|
+
display: MapOfObject
|
|
10843
|
+
open: MapOfObject
|
|
10844
|
+
}
|
|
10845
|
+
|
|
10846
|
+
type AgentSessionAttachmentGqlDto {
|
|
10847
|
+
attachmentId: Int!
|
|
10848
|
+
fileName: String!
|
|
10849
|
+
contentType: String
|
|
10850
|
+
size: Long
|
|
10851
|
+
origin: AgentSessionAttachmentOrigin!
|
|
10852
|
+
createdAt: DateTime!
|
|
10853
|
+
agentSessionId: UUID!
|
|
10854
|
+
sessionTitle: String
|
|
10855
|
+
workflowId: UUID!
|
|
10856
|
+
}
|
|
10857
|
+
|
|
10858
|
+
type AgentSessionAttachmentsCollectionSegment {
|
|
10859
|
+
pageInfo: CollectionSegmentInfo!
|
|
10860
|
+
items: [AgentSessionAttachmentGqlDto!]
|
|
10861
|
+
totalCount: Int! @cost(weight: "10")
|
|
10862
|
+
}
|
|
10863
|
+
|
|
10864
|
+
enum AttachmentContentKind {
|
|
10865
|
+
Image
|
|
10866
|
+
Document
|
|
10867
|
+
}
|
|
10868
|
+
|
|
10869
|
+
enum AgentSessionAttachmentOrigin {
|
|
10870
|
+
Uploaded
|
|
10871
|
+
Produced
|
|
10872
|
+
}
|
|
10873
|
+
|
|
10810
10874
|
extend type Query {
|
|
10811
10875
|
dispatchRouteStopStatus(
|
|
10812
10876
|
organizationId: Int!
|
package/schemas/schemas.json
CHANGED
|
@@ -541,7 +541,7 @@
|
|
|
541
541
|
"name": { "type": "string" },
|
|
542
542
|
"entityKind": {
|
|
543
543
|
"type": "string",
|
|
544
|
-
"enum": ["Order", "Contact", "OrderEntity", "AccountingTransaction", "Calendar", "CalendarEvent", "Other"]
|
|
544
|
+
"enum": ["Order", "Contact", "OrderEntity", "AccountingTransaction", "Calendar", "CalendarEvent", "CalendarAvailabilityBlock", "Other", "AuditChangeEntry", "Job", "Commodity"]
|
|
545
545
|
},
|
|
546
546
|
"extension": { "type": "boolean", "description": "Whether this entity extends an existing type" },
|
|
547
547
|
"displayName": { "$ref": "#/definitions/localized" },
|
|
@@ -549,11 +549,51 @@
|
|
|
549
549
|
"fields": {
|
|
550
550
|
"type": "array",
|
|
551
551
|
"items": { "$ref": "#/definitions/entityField" }
|
|
552
|
-
}
|
|
552
|
+
},
|
|
553
|
+
"quickSearch": { "$ref": "#/definitions/quickSearch" }
|
|
553
554
|
},
|
|
554
555
|
"required": ["name", "entityKind"]
|
|
555
556
|
},
|
|
556
557
|
|
|
558
|
+
"quickSearch": {
|
|
559
|
+
"type": "object",
|
|
560
|
+
"description": "Opts the entity into the global quick search (Ctrl+K). The backend validates the same rules at module save; see skills/cxtms-module-builder.",
|
|
561
|
+
"properties": {
|
|
562
|
+
"enabled": { "type": "boolean" },
|
|
563
|
+
"filter": { "type": "string", "description": "Lucene filter narrowing the kind's table to this entity, e.g. 'orderType: AirShipmentOrder'." },
|
|
564
|
+
"permission": { "type": "string", "description": "Permission required to see this group. Not enforced by the backend yet (HasPermission stub)." },
|
|
565
|
+
"matchFields": { "type": "array", "items": { "type": "string" }, "description": "Identifier fields matched exact > prefix > contains. Allowed values per entityKind: schemas/quick-search-kinds.json." },
|
|
566
|
+
"select": { "type": "array", "items": { "type": "string" }, "description": "Dotted paths fetched for display/open templates; customValues.<key> allowed." },
|
|
567
|
+
"groupLabel": { "$ref": "#/definitions/localized", "description": "Defaults to the entity displayName." },
|
|
568
|
+
"icon": { "type": "string", "description": "Tabler icon class as used by the web app, e.g. tabler-plane." },
|
|
569
|
+
"order": { "type": "integer", "description": "Tab/group position, ascending; default 100." },
|
|
570
|
+
"display": {
|
|
571
|
+
"type": "object",
|
|
572
|
+
"properties": {
|
|
573
|
+
"title": { "type": "string" },
|
|
574
|
+
"subtitle": { "type": "string" },
|
|
575
|
+
"badge": { "type": "string" }
|
|
576
|
+
},
|
|
577
|
+
"additionalProperties": false
|
|
578
|
+
},
|
|
579
|
+
"open": {
|
|
580
|
+
"type": "object",
|
|
581
|
+
"description": "Exactly one of navigate (route path template, unchanged) or dialog (component name opened in a dialog, e.g. Orders/UpdateOrder).",
|
|
582
|
+
"properties": {
|
|
583
|
+
"navigate": { "type": "string" },
|
|
584
|
+
"dialog": {
|
|
585
|
+
"type": "string",
|
|
586
|
+
"pattern": "^[A-Za-z0-9]+(/[A-Za-z0-9]+)+$",
|
|
587
|
+
"description": "Component name opened in a dialog, e.g. Orders/UpdateOrder. It receives the record key (e.g. orderId), organizationId and the title."
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
"additionalProperties": false
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
"required": ["enabled"],
|
|
594
|
+
"additionalProperties": false
|
|
595
|
+
},
|
|
596
|
+
|
|
557
597
|
"calendarEvent": {
|
|
558
598
|
"type": "object",
|
|
559
599
|
"description": "Calendar event object structure",
|
|
@@ -123,6 +123,7 @@ Used in module `entityKind` and Flow workflow `entity.name`:
|
|
|
123
123
|
| `OrderEntity` | OrderEntity (Shipper, Consignee, Carrier roles on an order) |
|
|
124
124
|
| `AccountingTransaction` | Invoice, Bill, CreditMemo |
|
|
125
125
|
| `Commodity` | Commodity |
|
|
126
|
+
| `Job` | Job |
|
|
126
127
|
| `Calendar` | CalendarEntity |
|
|
127
128
|
| `CalendarEvent` | CalendarEvent |
|
|
128
129
|
| `Other` | Any custom entity |
|
|
@@ -38,6 +38,14 @@ Order quick search (`orders.search` and `orderGroupBy.search`) matches order num
|
|
|
38
38
|
|
|
39
39
|
Order-move quick search (`orderMoves.search`) matches the move name plus its owning order's tracking number and JSON custom values (for example, a container number). Matching is case-insensitive and accepts partial text.
|
|
40
40
|
|
|
41
|
+
## Cross-entity quick search
|
|
42
|
+
|
|
43
|
+
`quickSearchEntities(organizationId)` returns the organization's searchable entity configuration: entity name/kind, localized group label, icon and ordering, display templates, and the route or dialog used to open a result. Load this configuration before rendering a search palette.
|
|
44
|
+
|
|
45
|
+
`quickSearch(organizationId, query, entityNames?, take: 5)` searches all configured entities or an optional subset. Results are grouped by `entityName`; each group includes `total`, `hasMore`, `partial`, and ranked items with a stable string `key` and `data` map. Apply the matching entity configuration's display and open templates to `data`.
|
|
46
|
+
|
|
47
|
+
`agentSessionAttachments(organizationId, agentSessionId?, contentKind?, skip?, take?)` lists attachments from agent sessions visible to the caller. Omit the session id for an all-visible-sessions library; filter `contentKind` by `Image` or `Document`. Each item identifies its attachment, source session/workflow, file metadata, and whether its `origin` is `Uploaded` or `Produced`.
|
|
48
|
+
|
|
41
49
|
## App Module Metadata Visibility
|
|
42
50
|
|
|
43
51
|
GraphQL metadata queries hide rows attached to soft-deleted app modules:
|
|
@@ -216,7 +216,7 @@ module:
|
|
|
216
216
|
|
|
217
217
|
entities:
|
|
218
218
|
- name: <EntityName>
|
|
219
|
-
entityKind: Order | Contact | OrderEntity | AccountingTransaction | Calendar | CalendarEvent | Other
|
|
219
|
+
entityKind: Order | Contact | OrderEntity | AccountingTransaction | Job | Commodity | Calendar | CalendarEvent | CalendarAvailabilityBlock | AuditChangeEntry | Other
|
|
220
220
|
extension: false # true if extending existing entity
|
|
221
221
|
displayName: { en-US: "..." }
|
|
222
222
|
fields:
|
|
@@ -234,6 +234,22 @@ entities:
|
|
|
234
234
|
filter: "contactType: Customer"
|
|
235
235
|
options: { baseName: "contactId" }
|
|
236
236
|
|
|
237
|
+
quickSearch: # Optional: show this entity in the global quick search (Ctrl+K)
|
|
238
|
+
enabled: true
|
|
239
|
+
filter: "orderType: AirShipmentOrder" # Lucene, same syntax as grid filters
|
|
240
|
+
permission: AirShipments/Read # Not enforced by the backend yet
|
|
241
|
+
matchFields: [orderNumber, trackingNumber] # Allowed per entityKind: .cx-schema/quick-search-kinds.json
|
|
242
|
+
select: [orderNumber, trackingNumber, billToContact.name, orderStatus.orderStatusName, customValues.hawb]
|
|
243
|
+
groupLabel: { en-US: "Air Shipments" } # Defaults to displayName
|
|
244
|
+
icon: tabler-plane
|
|
245
|
+
order: 20
|
|
246
|
+
display:
|
|
247
|
+
title: "{{ orderNumber }}" # Templates may use only select paths and the key (orderId)
|
|
248
|
+
subtitle: "{{ billToContact.name }} · {{ trackingNumber }}"
|
|
249
|
+
badge: "{{ orderStatus.orderStatusName }}"
|
|
250
|
+
open:
|
|
251
|
+
navigate: "consolidatedShipments/AirShipmentOrder/{{ orderId }}" # or dialog: Module/Component (opened in a dialog with the record key)
|
|
252
|
+
|
|
237
253
|
permissions:
|
|
238
254
|
- name: "ModuleName/Read" # PascalCase with slashes
|
|
239
255
|
displayName: { en-US: "..." }
|
|
@@ -267,6 +283,8 @@ components:
|
|
|
267
283
|
# ... component tree
|
|
268
284
|
```
|
|
269
285
|
|
|
286
|
+
**Quick search (`quickSearch`).** Supported `entityKind` values: `Order`, `Contact`, `AccountingTransaction`, `Job`, `Commodity`. `matchFields` must come from that kind's list in `.cx-schema/quick-search-kinds.json` (copied into your project at install; also available at `node_modules/@cxtms/cx-schema/schemas/quick-search-kinds.json`) — identifier columns only; `customValues` cannot be matched. `select` from the same file, plus any `customValues.<key>`. `display.title`, `icon` and exactly one of `open.navigate` / `open.dialog` are required. `npx cxtms` checks all of this; the backend additionally rejects an invalid `filter` when the module is saved. To change how a core entity opens (or hide it with `enabled: false`), redeclare the entity in your app module with its own full `quickSearch` block — the most recently saved block wins.
|
|
287
|
+
|
|
270
288
|
## Action Types
|
|
271
289
|
|
|
272
290
|
Actions are used in event handlers (onClick, onSubmit, etc.) as arrays:
|
|
@@ -555,7 +573,7 @@ npx cxtms app release -m "Add warehouse locations module" --org 42
|
|
|
555
573
|
- Permission names: PascalCase with slashes (e.g., `WarehouseLocations/Read`, `System/Contacts/Update`)
|
|
556
574
|
4. **Template expressions** use `{{ expression }}` syntax (double curly braces); prefer built-in functions (`isEqual`, `any`, `isNullOrEmpty`, `format`, …) over `eval`, and write non-trivial `eval` expressions as multiline block scalars (`>-`) — see Template expressions
|
|
557
575
|
5. **Include filePath** property pointing to the YAML file location
|
|
558
|
-
6. **Set proper entityKind** when defining entities (Order, Contact, OrderEntity, AccountingTransaction, Calendar, CalendarEvent, Other)
|
|
576
|
+
6. **Set proper entityKind** when defining entities (Order, Contact, OrderEntity, AccountingTransaction, Job, Commodity, Calendar, CalendarEvent, CalendarAvailabilityBlock, AuditChangeEntry, Other); it is required for `quickSearch`
|
|
559
577
|
7. **DataGrid options** requires ALL properties: query, rootEntityName, entityKeys, navigationType, enableDynamicGrid, enableViews, enableSearch, enablePagination, enableColumns, enableFilter, defaultView, onRowClick
|
|
560
578
|
8. **Form component** requires `validationSchema` in props
|
|
561
579
|
9. **Adaptive (mobile/tablet/desktop) design by default** — every form and layout must work on phones (`xs`), tablets (`sm`/`md`), and desktops (`lg+`):
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
- Tool approval (`tools[].mode`) and the chat's Ask/Auto approval mode
|
|
13
13
|
- Built-in data tools (`tools[].builtin`): `data.query`, `data.schema`, `data.type`
|
|
14
14
|
- History compression
|
|
15
|
+
- Files in chat: what the model receives, and the model config's `supportsFiles` flag
|
|
15
16
|
- Session ownership and live events
|
|
16
17
|
- Triggers: synchronous execution and lock behavior for trigger-bound agents
|
|
17
18
|
- The `ai.default` organization config shape
|
|
@@ -212,6 +213,41 @@ Each chat turn adds to a growing conversation history, bounded by the model's co
|
|
|
212
213
|
- On the client side, the internal Responses route announces a compression with a `response.tms.history_compressed` stream event; the transcript (GraphQL) always shows the `summary` message and a `usage` entry with `kind: "summary"`, on both routes.
|
|
213
214
|
- If an agent frequently needs long conversations against a small model, either raise `model.contextWindow` to match the model actually in use (see the property table above) or keep `agent.instructions` terse so more of the window is available for turns.
|
|
214
215
|
|
|
216
|
+
## Files in Chat
|
|
217
|
+
|
|
218
|
+
People can attach files to a chat message in the AI Assistant: up to 5 per message, 25 MB each, of these types:
|
|
219
|
+
|
|
220
|
+
| Kind | Types | What the model receives |
|
|
221
|
+
|---|---|---|
|
|
222
|
+
| Documents | PDF | The file itself: inline bytes up to 4 MB, above that a presigned URL (PDF URLs only for the `anthropic` provider — other providers refuse a PDF over 4 MB) |
|
|
223
|
+
| Images | PNG, JPG/JPEG | The image: inline bytes up to 4 MB, above that a presigned URL |
|
|
224
|
+
| Text | TXT, CSV, JSON, MD | The text, decoded as UTF-8 and cut at 200,000 characters with a truncation note |
|
|
225
|
+
|
|
226
|
+
Nothing in `agent:` YAML opts in or out — every chat agent accepts files, and there is no YAML schema change. What
|
|
227
|
+
the agent sees:
|
|
228
|
+
|
|
229
|
+
- Each file arrives in the user's turn after a label such as `[Attached file: bol.pdf (PDF, 1.2 MB)]`, so the model
|
|
230
|
+
can refer to it by name. Text content is fenced as data, not instructions — like a tool result — so a file that
|
|
231
|
+
says "ignore your instructions" is just text in a file.
|
|
232
|
+
- Files stay in the conversation: every later turn can still read them (they are re-sent on each model call, within a
|
|
233
|
+
16 MB inline budget per call; older files beyond it go by URL or as a note asking the user to attach them again).
|
|
234
|
+
When history is compressed, the summary names the files but their content leaves the history.
|
|
235
|
+
- A file that can't be read when a turn runs reaches the model as `[File <name> could not be read.]` instead of
|
|
236
|
+
failing the turn.
|
|
237
|
+
- Every chat upload becomes an Attachment linked to the session (parent type `AgentSession`, category
|
|
238
|
+
`AgentSession`), visible only to people who can see the chat, and listed in the AI Assistant's Library. Task
|
|
239
|
+
sessions (workflow runs) never receive files.
|
|
240
|
+
|
|
241
|
+
**Which models read PDFs and images** is decided by the model config's `supportsFiles` flag (see
|
|
242
|
+
[The `ai.default` Organization Config](#the-aidefault-organization-config)). When it is `false`, the chat refuses PDFs
|
|
243
|
+
and images when they are attached — before the message is sent — and text files still work. `GET .../ai/models`
|
|
244
|
+
reports it per agent as `supports_files`, which the chat uses to validate a file before uploading it.
|
|
245
|
+
|
|
246
|
+
Write `agent.instructions` for chat agents that will receive documents to say what to do with them (e.g. "When the
|
|
247
|
+
user attaches a bill of lading, read the shipper, consignee and pallet count from it"), and to answer only from
|
|
248
|
+
what the file shows. Full request shapes and error messages are in `docs/agent-api.md` §4 "Attaching files" in
|
|
249
|
+
`tms-backend-api`.
|
|
250
|
+
|
|
215
251
|
## Session Ownership and Live Events
|
|
216
252
|
|
|
217
253
|
Every agent session (task or chat) has an owner scope — `User`, `Division`, or `Organization` — that governs who may see it, continue it, decide its approvals, and watch it live. A chat session defaults to `User` (its starter); a task session defaults to `Organization` (it has no starter). Ownership can be changed afterward (e.g. shared with a division) via a GraphQL mutation, and every session change publishes a live event.
|
|
@@ -237,10 +273,16 @@ For a trigger-bound agent, either:
|
|
|
237
273
|
"model": "claude-sonnet-4-5",
|
|
238
274
|
"apiKey": "...",
|
|
239
275
|
"endpoint": "https://api.anthropic.com",
|
|
240
|
-
"contextWindow": 200000
|
|
276
|
+
"contextWindow": 200000,
|
|
277
|
+
"supportsFiles": true
|
|
241
278
|
}
|
|
242
279
|
```
|
|
243
280
|
|
|
281
|
+
`supportsFiles` (optional) says whether the model reads PDFs and images attached in chat (see
|
|
282
|
+
[Files in chat](#files-in-chat)). When it is absent, it defaults to `true` for the `anthropic` and `openai`
|
|
283
|
+
providers and to `false` for any other provider. Set it to `false` for a model without vision or PDF support, and
|
|
284
|
+
to `true` for a file-capable model behind another provider. Text attachments work either way.
|
|
285
|
+
|
|
244
286
|
Set up this config once per organization (or per named config for `model.fromConfig` overrides); every Agent workflow that doesn't override `model.name`/`model.temperature` shares it. The config's own `contextWindow` (if set) is the fallback used when the agent's YAML doesn't declare `model.contextWindow` — but only while the agent doesn't also override `model.name`; overriding the model name without also setting `agent.model.contextWindow` falls straight through to the runtime default of 256,000 tokens, since the config's window describes the config's model, not the override.
|
|
245
287
|
|
|
246
288
|
## Tool Name Derivation (Workflow Name → Tool Name)
|
|
@@ -257,6 +299,7 @@ When a workflow is exposed as a tool (via another agent's `tools[].workflow`, or
|
|
|
257
299
|
- **Use `mode: always` for actions a person must confirm every time.** `approval` tools run unattended once a user switches the chat to Auto; `always` tools never do.
|
|
258
300
|
- **Give chat agents `agent.ui`.** A `shortDescription`, an `icon`, a `color` and a few `prompts` make the agent recognizable in the AI Assistant's agent menu and empty state.
|
|
259
301
|
- **Set `model.contextWindow` whenever you set `model.name`.** Otherwise a smaller model than the org default silently gets the 256K default window, and history compression won't kick in until it's already over budget (or a larger model gets compressed too eagerly). See the `model.contextWindow` row above.
|
|
302
|
+
- **Set `supportsFiles` on the model config to match the model.** A model that can't read PDFs or images should say so (`"supportsFiles": false`), so the chat refuses those files up front instead of the provider failing the turn. See [Files in chat](#files-in-chat).
|
|
260
303
|
- **Design `agent.result`/`agent.instructions` around whichever session type(s) the agent is actually used in.** A chat-only agent doesn't need `agent.result` (it has no `set_result` tool); a task-only agent should tell the model explicitly to call `set_result` exactly once (the scaffolded template's instructions already do this).
|
|
261
304
|
- **Keep trigger-bound agents fast**, or move them off the triggering request entirely (see [Triggers](#triggers)) — a slow agent session holds the entity's workflow lock for its whole duration.
|
|
262
305
|
|