@noodleseed/one 0.173.0 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/solutions-activity.js +1 -1
- package/dist/commands/solutions-activity.js.map +1 -1
- package/dist/commands/solutions-drafts.d.ts.map +1 -1
- package/dist/commands/solutions-drafts.js +36 -9
- package/dist/commands/solutions-drafts.js.map +1 -1
- package/dist/commands/solutions-native-lifecycle.d.ts +5 -0
- package/dist/commands/solutions-native-lifecycle.d.ts.map +1 -0
- package/dist/commands/solutions-native-lifecycle.js +77 -0
- package/dist/commands/solutions-native-lifecycle.js.map +1 -0
- package/dist/commands/solutions-ops-args.d.ts +42 -0
- package/dist/commands/solutions-ops-args.d.ts.map +1 -0
- package/dist/commands/solutions-ops-args.js +47 -0
- package/dist/commands/solutions-ops-args.js.map +1 -0
- package/dist/commands/solutions-ops.d.ts.map +1 -1
- package/dist/commands/solutions-ops.js +9 -46
- package/dist/commands/solutions-ops.js.map +1 -1
- package/dist/commands/solutions-workspace.d.ts +5 -0
- package/dist/commands/solutions-workspace.d.ts.map +1 -0
- package/dist/commands/solutions-workspace.js +157 -0
- package/dist/commands/solutions-workspace.js.map +1 -0
- package/dist/commands/whatsapp-output.d.ts.map +1 -1
- package/dist/commands/whatsapp-output.js +20 -4
- package/dist/commands/whatsapp-output.js.map +1 -1
- package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +16 -9
- package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +5 -2
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +9 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +9 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +13 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-coordinator.d.ts +5 -3
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-coordinator.js +5 -4
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-inbox.js +6 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-store.d.ts +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-types.d.ts +12 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-work.d.ts +7 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/channel-work.js +14 -4
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-capture.js +104 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-judgment.js +93 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-ledger.d.ts +105 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-ledger.js +183 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-model-call.js +38 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-parsers.d.ts +22 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-parsers.js +109 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-review.d.ts +21 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-review.js +44 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-spec.d.ts +18 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-spec.js +86 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-store.d.ts +11 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/collection-store.js +18 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/messaging-tool-dispatch.d.ts +20 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/messaging-tool-dispatch.js +38 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/model-runtime.js +3 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +5 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +5 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/authoring/dist/interaction.d.ts +49 -0
- package/node_modules/@noodle-borg/authoring/dist/interaction.js +25 -0
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -0
- package/node_modules/@noodle-borg/authoring/dist/server.js +4 -0
- package/node_modules/@noodle-borg/authoring/package.json +6 -1
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-channels.js +1 -1
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solution-drafts.js +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solution-native-lifecycle.js +43 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solution-records.js +154 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solution-workspace.js +95 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +4 -149
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +33 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +2 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +2 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js +5 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/compiler/dist/index.js +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/interaction-schema.d.ts +41 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/interaction-schema.js +62 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/interaction-validation.js +220 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +60 -4
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +7 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts +9 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.js +58 -10
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-atomic-state.d.ts +8 -0
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-atomic-state.js +136 -0
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-control-plane-store.d.ts +7 -0
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-control-plane-store.js +16 -24
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +4 -2
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +8 -6
- package/node_modules/@noodle-borg/control-plane/dist/mcp-subdomain-claims.d.ts +2 -1
- package/node_modules/@noodle-borg/control-plane/dist/mcp-subdomain-claims.js +13 -8
- package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +13 -4
- package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +23 -7
- package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +2 -1
- package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
- package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +5 -2
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +16 -4
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +3 -6
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/application-activity.js +85 -63
- package/node_modules/@noodle-borg/service/dist/application-drafts/contracts.js +9 -0
- package/node_modules/@noodle-borg/service/dist/application-drafts/paths.js +2 -2
- package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +1 -1
- package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +18 -4
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-business-pages.js +3 -5
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +8 -6
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-native-lifecycle.js +80 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +27 -31
- package/node_modules/@noodle-borg/service/dist/business-information/memory-native-retention.js +29 -0
- package/node_modules/@noodle-borg/service/dist/business-information/model.js +9 -2
- package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +3 -1
- package/node_modules/@noodle-borg/service/dist/business-information/native-record-lifecycle.d.ts +27 -0
- package/node_modules/@noodle-borg/service/dist/business-information/native-record-lifecycle.js +63 -0
- package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +9 -4
- package/node_modules/@noodle-borg/service/dist/business-information/staff-authority.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/business-information/staff-authority.js +60 -0
- package/node_modules/@noodle-borg/service/dist/business-information/workspace-permissions.js +18 -0
- package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +1 -0
- package/node_modules/@noodle-borg/service/dist/business-onboarding.js +16 -3
- package/node_modules/@noodle-borg/service/dist/business-workspaces/contracts.d.ts +110 -0
- package/node_modules/@noodle-borg/service/dist/business-workspaces/contracts.js +52 -0
- package/node_modules/@noodle-borg/service/dist/business-workspaces/paths.js +17 -0
- package/node_modules/@noodle-borg/service/dist/business-workspaces/permissions.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/business-workspaces/store.d.ts +102 -0
- package/node_modules/@noodle-borg/service/dist/channels/360dialog.js +70 -8
- package/node_modules/@noodle-borg/service/dist/channels/capability-report.js +73 -0
- package/node_modules/@noodle-borg/service/dist/channels/collection-turn.js +232 -0
- package/node_modules/@noodle-borg/service/dist/channels/composition.js +1 -0
- package/node_modules/@noodle-borg/service/dist/channels/messaging-eligibility.js +45 -0
- package/node_modules/@noodle-borg/service/dist/channels/reply-buttons.js +23 -0
- package/node_modules/@noodle-borg/service/dist/channels/runtime.js +127 -33
- package/node_modules/@noodle-borg/service/dist/native-record-connector.js +19 -4
- package/node_modules/@noodle-borg/service/dist/routes/application-drafts.js +44 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +4 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-authoring-dispatch.js +23 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-access.js +39 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +2 -2
- package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +10 -4
- package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +11 -6
- package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +3 -1
- package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +6 -2
- package/node_modules/@noodle-borg/service/dist/routes/business-information-pages.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +7 -2
- package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +2 -2
- package/node_modules/@noodle-borg/service/dist/routes/business-information-records.js +332 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +6 -3
- package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +9 -5
- package/node_modules/@noodle-borg/service/dist/routes/business-information.js +12 -356
- package/node_modules/@noodle-borg/service/dist/routes/business-native-lifecycle.js +46 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-workspaces.js +119 -0
- package/node_modules/@noodle-borg/service/dist/routes/service-probes.js +2 -1
- package/node_modules/@noodle-borg/service/dist/service.js +9 -2
- package/node_modules/@noodle-borg/service/dist/web-capabilities.js +3 -1
- package/node_modules/@noodle-borg/service/package.json +2 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/application-draft-validation.d.ts +59 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-draft-validation.js +38 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +144 -50
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +44 -4
- package/node_modules/@noodle-borg/wire-contracts/dist/business-workspaces.d.ts +258 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-workspaces.js +118 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +2 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +2 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/native-record-lifecycle.d.ts +81 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/native-record-lifecycle.js +39 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/whatsapp.d.ts +26 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/whatsapp.js +24 -1
- package/package.json +2 -2
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { SOLUTION_DRAFTS } from './catalog-data-solution-drafts.js';
|
|
3
3
|
import { AUTH_TOKEN, EXPECTED_REVISION, IDEMPOTENCY_KEY, INSTALLATION_ARGUMENT, JSON_FLAG, OPTIONAL_FLAG, PAGING_FLAGS, REQUIRED_ARGUMENT, SERVICE, SOLUTION_COMMON_FLAGS, } from './catalog-data-solution-flags.js';
|
|
4
4
|
import { SOLUTION_PAGE } from './catalog-data-solution-page.js';
|
|
5
|
+
import { COLLECTION_ARGUMENT, SOLUTION_RECORDS } from './catalog-data-solution-records.js';
|
|
6
|
+
import { SOLUTION_WORKSPACE } from './catalog-data-solution-workspace.js';
|
|
5
7
|
const APP = {
|
|
6
8
|
...OPTIONAL_FLAG,
|
|
7
9
|
name: 'app',
|
|
@@ -24,105 +26,6 @@ const RETENTION = {
|
|
|
24
26
|
summary: 'Managed-record retention in days.',
|
|
25
27
|
constraints: { choices: [7, 30, 90], default: 30 },
|
|
26
28
|
};
|
|
27
|
-
const COLLECTION_ARGUMENT = {
|
|
28
|
-
...REQUIRED_ARGUMENT,
|
|
29
|
-
name: 'collection',
|
|
30
|
-
summary: 'Managed collection key.',
|
|
31
|
-
};
|
|
32
|
-
const RECORD_ARGUMENT = {
|
|
33
|
-
...REQUIRED_ARGUMENT,
|
|
34
|
-
name: 'record',
|
|
35
|
-
summary: 'Managed record identifier.',
|
|
36
|
-
};
|
|
37
|
-
const RECORD_QUERY_FLAGS = [
|
|
38
|
-
{
|
|
39
|
-
...OPTIONAL_FLAG,
|
|
40
|
-
name: 'filters',
|
|
41
|
-
type: 'string',
|
|
42
|
-
value: '<json>',
|
|
43
|
-
summary: 'JSON array of up to eight field/value equality filters, combined with AND. Only declared fields.',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
...OPTIONAL_FLAG,
|
|
47
|
-
name: 'sort-field',
|
|
48
|
-
type: 'string',
|
|
49
|
-
value: '<field>',
|
|
50
|
-
summary: 'Declared native collection sort field.',
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
...OPTIONAL_FLAG,
|
|
54
|
-
name: 'sort-direction',
|
|
55
|
-
type: 'string',
|
|
56
|
-
value: '<asc|desc>',
|
|
57
|
-
summary: 'Sort direction; requires --sort-field.',
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
...OPTIONAL_FLAG,
|
|
61
|
-
name: 'created-at-from',
|
|
62
|
-
type: 'string',
|
|
63
|
-
value: '<timestamp>',
|
|
64
|
-
summary: 'Inclusive creation-time lower bound; narrows the 10,000-record payload-query scan.',
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
...OPTIONAL_FLAG,
|
|
68
|
-
name: 'created-at-to',
|
|
69
|
-
type: 'string',
|
|
70
|
-
value: '<timestamp>',
|
|
71
|
-
summary: 'Inclusive creation-time upper bound.',
|
|
72
|
-
},
|
|
73
|
-
];
|
|
74
|
-
const RECORD_FLAGS = [
|
|
75
|
-
...SOLUTION_COMMON_FLAGS,
|
|
76
|
-
{
|
|
77
|
-
...OPTIONAL_FLAG,
|
|
78
|
-
name: 'data',
|
|
79
|
-
type: 'string',
|
|
80
|
-
value: '<json>',
|
|
81
|
-
summary: 'Structured JSON record data.',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
...OPTIONAL_FLAG,
|
|
85
|
-
name: 'idempotency-key',
|
|
86
|
-
type: 'string',
|
|
87
|
-
value: '<key>',
|
|
88
|
-
summary: 'Retry-safe create key.',
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
...OPTIONAL_FLAG,
|
|
92
|
-
name: 'expected-revision',
|
|
93
|
-
type: 'integer',
|
|
94
|
-
value: '<revision>',
|
|
95
|
-
summary: 'Expected current record revision.',
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
...OPTIONAL_FLAG,
|
|
99
|
-
name: 'status',
|
|
100
|
-
type: 'string',
|
|
101
|
-
value: '<status>',
|
|
102
|
-
summary: 'Record status or list filter.',
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
...OPTIONAL_FLAG,
|
|
106
|
-
name: 'assignee',
|
|
107
|
-
type: 'string',
|
|
108
|
-
value: '<subject>',
|
|
109
|
-
summary: 'Assignee subject or list filter.',
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
...OPTIONAL_FLAG,
|
|
113
|
-
name: 'note',
|
|
114
|
-
type: 'string',
|
|
115
|
-
value: '<text>',
|
|
116
|
-
summary: 'Operator note text.',
|
|
117
|
-
},
|
|
118
|
-
...PAGING_FLAGS,
|
|
119
|
-
{
|
|
120
|
-
...OPTIONAL_FLAG,
|
|
121
|
-
name: 'include-deleted',
|
|
122
|
-
type: 'boolean',
|
|
123
|
-
summary: 'Include payload-free tombstones.',
|
|
124
|
-
},
|
|
125
|
-
];
|
|
126
29
|
export const CATALOG_SOLUTIONS = {
|
|
127
30
|
name: 'solutions',
|
|
128
31
|
section: 'resources',
|
|
@@ -133,6 +36,7 @@ export const CATALOG_SOLUTIONS = {
|
|
|
133
36
|
subcommands: [
|
|
134
37
|
SOLUTION_DRAFTS,
|
|
135
38
|
SOLUTION_PAGE,
|
|
39
|
+
SOLUTION_WORKSPACE,
|
|
136
40
|
{
|
|
137
41
|
name: 'installation-options',
|
|
138
42
|
summary: 'List organizations currently authorized to install solutions.',
|
|
@@ -628,56 +532,7 @@ export const CATALOG_SOLUTIONS = {
|
|
|
628
532
|
},
|
|
629
533
|
],
|
|
630
534
|
},
|
|
631
|
-
|
|
632
|
-
name: 'records',
|
|
633
|
-
summary: 'Operate one installed managed collection.',
|
|
634
|
-
arguments: [],
|
|
635
|
-
flags: [],
|
|
636
|
-
usage: 'solutions records <list|create|get|update|assign|status|note|activity|delete|migrate-schema|export> <installation> <collection> [record] [options]',
|
|
637
|
-
subcommands: [
|
|
638
|
-
...[
|
|
639
|
-
'list',
|
|
640
|
-
'create',
|
|
641
|
-
'get',
|
|
642
|
-
'update',
|
|
643
|
-
'assign',
|
|
644
|
-
'status',
|
|
645
|
-
'note',
|
|
646
|
-
'activity',
|
|
647
|
-
'delete',
|
|
648
|
-
'migrate-schema',
|
|
649
|
-
'export',
|
|
650
|
-
].map((name) => ({
|
|
651
|
-
name,
|
|
652
|
-
summary: name === 'activity'
|
|
653
|
-
? 'Read native record history newest first; default 50, maximum 100, with --cursor for older pages.'
|
|
654
|
-
: name === 'migrate-schema'
|
|
655
|
-
? 'Administrator-only conversion of an eligible legacy request record with revision protection.'
|
|
656
|
-
: `${name[0]?.toUpperCase()}${name.slice(1)} managed records.`,
|
|
657
|
-
arguments: [
|
|
658
|
-
INSTALLATION_ARGUMENT,
|
|
659
|
-
COLLECTION_ARGUMENT,
|
|
660
|
-
...(name === 'list' || name === 'create' || name === 'export' ? [] : [RECORD_ARGUMENT]),
|
|
661
|
-
],
|
|
662
|
-
flags: [
|
|
663
|
-
...RECORD_FLAGS,
|
|
664
|
-
...(name === 'list' ? RECORD_QUERY_FLAGS : []),
|
|
665
|
-
...(name === 'update'
|
|
666
|
-
? [
|
|
667
|
-
{
|
|
668
|
-
...OPTIONAL_FLAG,
|
|
669
|
-
name: 'unset',
|
|
670
|
-
type: 'string',
|
|
671
|
-
value: '<fields>',
|
|
672
|
-
summary: 'Comma-separated optional field keys to remove; cannot overlap --data. May be used without --data.',
|
|
673
|
-
},
|
|
674
|
-
]
|
|
675
|
-
: []),
|
|
676
|
-
],
|
|
677
|
-
jsonOutput: { mode: 'single' },
|
|
678
|
-
})),
|
|
679
|
-
],
|
|
680
|
-
},
|
|
535
|
+
SOLUTION_RECORDS,
|
|
681
536
|
{
|
|
682
537
|
name: 'sources',
|
|
683
538
|
summary: 'Inspect and control one external collection source.',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { artifactConfig } from './config.js';
|
|
2
2
|
import { ARTIFACT_SCHEMA_VERSION, } from './types.js';
|
|
3
|
-
export function assembleRuntimeArtifact({ manifest, options, runtimeBranding, runtimeShell, artifactAmbientContext, state, artifactTools, allResources, artifactPrompts, packagedAssets, requirements, declared, customerEndpoints, knowledge, managedCollections, variables, }) {
|
|
3
|
+
export function assembleRuntimeArtifact({ manifest, options, runtimeBranding, runtimeShell, artifactAmbientContext, state, artifactTools, allResources, artifactPrompts, packagedAssets, requirements, declared, customerEndpoints, knowledge, managedCollections, variables, toolInteractions, }) {
|
|
4
4
|
// 4. Assemble the artifact. `resources`/`prompts` and their capability lists are emitted only when
|
|
5
5
|
// present, keeping a tools-only artifact byte-identical to before this slice.
|
|
6
6
|
const capabilities = {
|
|
@@ -54,6 +54,7 @@ export function assembleRuntimeArtifact({ manifest, options, runtimeBranding, ru
|
|
|
54
54
|
...(state !== undefined ? { state } : {}),
|
|
55
55
|
},
|
|
56
56
|
tools: artifactTools,
|
|
57
|
+
...(toolInteractions === undefined ? {} : { toolInteractions }),
|
|
57
58
|
...(allResources.length > 0 ? { resources: allResources } : {}),
|
|
58
59
|
...(artifactPrompts.length > 0 ? { prompts: artifactPrompts } : {}),
|
|
59
60
|
...(packagedAssets.length > 0 ? { assets: packagedAssets.map(toArtifactAsset) } : {}),
|
|
@@ -5,6 +5,7 @@ import type { ArtifactVariableDeclaration } from '../business-variables.js';
|
|
|
5
5
|
import type { CustomerEndpointPolicy } from '../customer-endpoint.js';
|
|
6
6
|
import type { ManagedCollectionControls } from '../managed-collection-controls.js';
|
|
7
7
|
import type { CondNode, ExprNode } from '../manifest/expression.js';
|
|
8
|
+
import type { CollectControl } from '../manifest/interaction-schema.js';
|
|
8
9
|
import type { Manifest } from '../manifest/schema.js';
|
|
9
10
|
import type { OperationRef } from './operation-ref.js';
|
|
10
11
|
export type { OperationRef, ResolvedCredentialBinding, ResolvedOperationRef, UnresolvedOperationRef, } from './operation-ref.js';
|
|
@@ -92,6 +93,36 @@ export interface ArtifactMeta {
|
|
|
92
93
|
readonly ui?: WidgetUiMeta;
|
|
93
94
|
readonly [key: string]: unknown;
|
|
94
95
|
}
|
|
96
|
+
/** One field a platform renderer collects for a `collect` interaction (ADR 0240). */
|
|
97
|
+
export interface ArtifactCollectField {
|
|
98
|
+
readonly key: string;
|
|
99
|
+
readonly control: CollectControl;
|
|
100
|
+
/** Never enters the conversation model, transcript, logs or diagnostics. */
|
|
101
|
+
readonly private?: true;
|
|
102
|
+
/** May be left blank; the renderer submits the schema's empty value. */
|
|
103
|
+
readonly optional?: true;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Bounded interaction metadata an opener tool declares for one confirmed action (ADR 0240). Emitted
|
|
107
|
+
* under `RuntimeArtifact.toolInteractions` keyed by the opener, so the MCP-visible descriptor is
|
|
108
|
+
* unchanged; renderers exist only where the platform runs the conversation loop.
|
|
109
|
+
*/
|
|
110
|
+
export interface ArtifactCollectInteraction {
|
|
111
|
+
readonly kind: 'collect';
|
|
112
|
+
/** The confirmed action tool this collection prepares. */
|
|
113
|
+
readonly action: string;
|
|
114
|
+
readonly fields: readonly ArtifactCollectField[];
|
|
115
|
+
/** Action input property -> the opener output property that seeds it. */
|
|
116
|
+
readonly initialValues?: Readonly<Record<string, {
|
|
117
|
+
readonly fromOutput: string;
|
|
118
|
+
}>>;
|
|
119
|
+
readonly review: 'all';
|
|
120
|
+
readonly outcome: {
|
|
121
|
+
readonly success: string;
|
|
122
|
+
};
|
|
123
|
+
/** Developer-shortened confirmation expiry; profile defaults and the ceiling stay platform-owned. */
|
|
124
|
+
readonly confirmationExpirySeconds?: number;
|
|
125
|
+
}
|
|
95
126
|
export interface ArtifactToolAuthorization {
|
|
96
127
|
/** Public descriptor discovery does not grant execution permission. */
|
|
97
128
|
readonly discovery?: 'public';
|
|
@@ -407,6 +438,8 @@ export interface RuntimeArtifact {
|
|
|
407
438
|
readonly source: ArtifactSource;
|
|
408
439
|
readonly server: ArtifactServer;
|
|
409
440
|
readonly tools: readonly ArtifactTool[];
|
|
441
|
+
/** `collect` interactions keyed by opener tool name (ADR 0240); absent when none is declared. */
|
|
442
|
+
readonly toolInteractions?: Readonly<Record<string, ArtifactCollectInteraction>>;
|
|
410
443
|
readonly resources?: readonly ArtifactResource[];
|
|
411
444
|
readonly prompts?: readonly ArtifactPrompt[];
|
|
412
445
|
readonly assets?: readonly ArtifactPackagedAsset[];
|
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
*/
|
|
65
65
|
/** `0.21.0`: protected tools may opt into public descriptor discovery without execution permission. */
|
|
66
66
|
/** `0.22.0`: governed public-page extraction declarations and ordinary generated tools. */
|
|
67
|
-
|
|
67
|
+
/** `0.23.0`: bounded `collect` interaction metadata keyed by opener tool (ADR 0240); never MCP-visible. */
|
|
68
|
+
export declare const ARTIFACT_SCHEMA_VERSION = "0.23.0";
|
|
68
69
|
/** mimeType for an MCP Apps UI resource (SEP-1865). Widgets are served under this profile. */
|
|
69
70
|
export declare const MCP_APP_MIME_TYPE = "text/html;profile=mcp-app";
|
|
70
71
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
*/
|
|
65
65
|
/** `0.21.0`: protected tools may opt into public descriptor discovery without execution permission. */
|
|
66
66
|
/** `0.22.0`: governed public-page extraction declarations and ordinary generated tools. */
|
|
67
|
-
|
|
67
|
+
/** `0.23.0`: bounded `collect` interaction metadata keyed by opener tool (ADR 0240); never MCP-visible. */
|
|
68
|
+
export const ARTIFACT_SCHEMA_VERSION = '0.23.0';
|
|
68
69
|
/** mimeType for an MCP Apps UI resource (SEP-1865). Widgets are served under this profile. */
|
|
69
70
|
export const MCP_APP_MIME_TYPE = 'text/html;profile=mcp-app';
|
|
70
71
|
//# sourceMappingURL=version.js.map
|
|
@@ -15,6 +15,7 @@ import { parseAmbientContext } from './context-compile.js';
|
|
|
15
15
|
import { findExternalRef, parseFulfilment } from './fulfilment-structural.js';
|
|
16
16
|
import { compileManagedCollections } from './managed-collections.js';
|
|
17
17
|
import { cspOriginFaults } from './manifest/csp-origins.js';
|
|
18
|
+
import { compileToolInteractions } from './manifest/interaction-validation.js';
|
|
18
19
|
import { parseManifestDocument } from './manifest/parse-document.js';
|
|
19
20
|
import { manifestSchema } from './manifest/schema.js';
|
|
20
21
|
import { resolveSchemaUses } from './manifest/schema-refs.js';
|
|
@@ -416,11 +417,14 @@ export function compileManifest(raw, options = {}) {
|
|
|
416
417
|
toolUiMetaByName,
|
|
417
418
|
errors,
|
|
418
419
|
});
|
|
420
|
+
const toolInteractions = compileToolInteractions(manifest.tools, artifactTools, errors);
|
|
419
421
|
errors.push(...validateWebsiteProjection(manifest.server.assistant, {
|
|
420
422
|
tools: artifactTools,
|
|
421
423
|
resources: artifactResources,
|
|
422
424
|
prompts: artifactPrompts,
|
|
423
425
|
knowledge,
|
|
426
|
+
interactions: toolInteractions,
|
|
427
|
+
connectors: declared,
|
|
424
428
|
}));
|
|
425
429
|
if (errors.length > 0) {
|
|
426
430
|
return { ok: false, errors };
|
|
@@ -445,6 +449,7 @@ export function compileManifest(raw, options = {}) {
|
|
|
445
449
|
...(knowledge.length > 0 ? { knowledge } : {}),
|
|
446
450
|
...(managedCollections.length > 0 ? { managedCollections } : {}),
|
|
447
451
|
...(variables.length > 0 ? { variables } : {}),
|
|
452
|
+
...(toolInteractions === undefined ? {} : { toolInteractions }),
|
|
448
453
|
});
|
|
449
454
|
const warnings = [
|
|
450
455
|
...brandingWarnings(manifest.server.branding),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AppPackageArtifactV1 } from '@noodle-borg/app-package';
|
|
2
2
|
import type { RuntimeArtifact } from './artifact/types.js';
|
|
3
3
|
import type { PackagedAsset } from './assets.js';
|
|
4
|
-
export type CompileErrorCode = 'invalid_context_provider' | 'yaml_parse_error' | 'invalid_shape' | 'invalid_name' | 'duplicate_name' | 'reserved_name' | 'unsupported_manifest_version' | 'reserved_for_future_version' | 'invalid_operation_ref' | 'external_ref' | 'invalid_schema_ref' | 'unknown_schema_ref' | 'schema_ref_conflict' | 'invalid_expression' | 'expr_unknown_root' | 'expr_root_unavailable' | 'expr_operator_not_allowed' | 'expr_if_not_boolean' | 'unknown_step_ref' | 'forward_step_ref' | 'self_step_ref' | 'duplicate_step_id' | 'invalid_fulfilment' | 'invalid_elicitation_schema' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'arg_type_mismatch' | 'ambient_context_action' | 'duplicate_resource' | 'duplicate_prompt' | 'duplicate_resource_uri' | 'unsupported_uri_template' | 'duplicate_widget' | 'unknown_widget_tool' | 'unknown_widget_action_tool' | 'duplicate_widget_tool' | 'invalid_widget_binding' | 'invalid_widget_state_handle' | 'widget_html_too_large' | 'widget_html_total_too_large' | 'invalid_asset' | 'invalid_capability_requirement' | 'state_secret_field' | 'invalid_knowledge' | 'knowledge_unhashed' | 'invalid_managed_collection' | 'invalid_variable_declaration' | 'invalid_managed_collection_source' | 'unknown_connector_alias' | 'connector_not_in_catalog' | 'unknown_operation' | 'connector_binding_required' | 'ambiguous_nested_connector_binding' | 'invalid_connector_call_graph' | 'unsupported_credential_profile' | 'credential_scope_mismatch' | 'credential_audience_mismatch' | 'customer_endpoint_auth_required' | 'customer_endpoint_mapping_required' | 'customer_endpoint_unknown_mapping' | 'customer_endpoint_bridge_unsupported' | 'assistant_messaging_unsupported' | 'assistant_capability_unknown' | 'assistant_public_user_reference' | 'assistant_public_effect_unconfirmed' | 'customer_endpoint_action_unsupported' | 'customer_endpoint_surface_unsupported' | 'customer_endpoint_credential_source_unsupported' | 'customer_endpoint_policy_conflict' | 'customer_endpoint_routing_inconsistent' | 'unused_connector_alias' | 'arg_mismatch' | 'agent_guide_invalid' | 'agent_guide_duplicate_workflow' | 'agent_guide_duplicate_example' | 'agent_guide_example_workflow_missing' | 'agent_guide_capability_missing' | 'agent_guide_capability_kind' | 'app_package_sensitive_content';
|
|
4
|
+
export type CompileErrorCode = 'invalid_context_provider' | 'yaml_parse_error' | 'invalid_shape' | 'invalid_name' | 'duplicate_name' | 'reserved_name' | 'unsupported_manifest_version' | 'reserved_for_future_version' | 'invalid_operation_ref' | 'external_ref' | 'invalid_schema_ref' | 'unknown_schema_ref' | 'schema_ref_conflict' | 'invalid_expression' | 'expr_unknown_root' | 'expr_root_unavailable' | 'expr_operator_not_allowed' | 'expr_if_not_boolean' | 'unknown_step_ref' | 'forward_step_ref' | 'self_step_ref' | 'duplicate_step_id' | 'invalid_fulfilment' | 'invalid_elicitation_schema' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'arg_type_mismatch' | 'ambient_context_action' | 'duplicate_resource' | 'duplicate_prompt' | 'duplicate_resource_uri' | 'unsupported_uri_template' | 'duplicate_widget' | 'unknown_widget_tool' | 'unknown_widget_action_tool' | 'duplicate_widget_tool' | 'invalid_widget_binding' | 'invalid_widget_state_handle' | 'widget_html_too_large' | 'widget_html_total_too_large' | 'invalid_asset' | 'invalid_capability_requirement' | 'state_secret_field' | 'invalid_knowledge' | 'knowledge_unhashed' | 'invalid_managed_collection' | 'invalid_variable_declaration' | 'invalid_managed_collection_source' | 'unknown_connector_alias' | 'connector_not_in_catalog' | 'unknown_operation' | 'connector_binding_required' | 'ambiguous_nested_connector_binding' | 'invalid_connector_call_graph' | 'unsupported_credential_profile' | 'credential_scope_mismatch' | 'credential_audience_mismatch' | 'customer_endpoint_auth_required' | 'customer_endpoint_mapping_required' | 'customer_endpoint_unknown_mapping' | 'customer_endpoint_bridge_unsupported' | 'assistant_messaging_unsupported' | 'assistant_capability_unknown' | 'assistant_public_user_reference' | 'assistant_public_effect_unconfirmed' | 'interaction_action_invalid' | 'interaction_field_unknown' | 'interaction_field_control_mismatch' | 'interaction_field_missing' | 'interaction_initial_value_unknown' | 'interaction_consent_invalid' | 'interaction_expiry_invalid' | 'channel_dependency_missing' | 'channel_requirement_unsupported' | 'customer_endpoint_action_unsupported' | 'customer_endpoint_surface_unsupported' | 'customer_endpoint_credential_source_unsupported' | 'customer_endpoint_policy_conflict' | 'customer_endpoint_routing_inconsistent' | 'unused_connector_alias' | 'arg_mismatch' | 'agent_guide_invalid' | 'agent_guide_duplicate_workflow' | 'agent_guide_duplicate_example' | 'agent_guide_example_workflow_missing' | 'agent_guide_capability_missing' | 'agent_guide_capability_kind' | 'app_package_sensitive_content';
|
|
5
5
|
export interface CompileError {
|
|
6
6
|
readonly code: CompileErrorCode;
|
|
7
7
|
/** Dotted path to the offending location (e.g. `tools.1.name`); empty string for the document root. */
|
|
@@ -3,7 +3,7 @@ export { APP_PACKAGE_V1_VALIDATION_LIMITS, appPackageArtifactV1Schema, canonical
|
|
|
3
3
|
export { type ParsedUri, type ParseUriResult, parseUriTemplate, type TemplateUri, } from '@noodle-borg/uri-template';
|
|
4
4
|
export { compileAppPackage } from './app-package/compile.js';
|
|
5
5
|
export { isSafeReadTool, requiresToolConfirmation } from './artifact/consent.js';
|
|
6
|
-
export { ARTIFACT_SCHEMA_VERSION, type ArtifactConnectionSource, type ArtifactConnectorBinding, type ArtifactCustomerAuthRouting, type ArtifactFulfilment, type ArtifactManagedCollection, type ArtifactMeta, type ArtifactPackagedAsset, type ArtifactPrompt, type ArtifactPromptArgument, type ArtifactResource, type ArtifactServer, type ArtifactServerContext, type ArtifactState, type ArtifactStateHandle, type ArtifactStateHandleKind, type ArtifactStateHandleScope, type ArtifactStep, type ArtifactTool, type ArtifactToolAuthorization, type ExprMap, type JsonSchema, MCP_APP_MIME_TYPE, type OperationRef, type ResolvedCredentialBinding, type ResolvedOperationRef, type RuntimeArtifact, type UnresolvedOperationRef, type WidgetUiMeta, } from './artifact/types.js';
|
|
6
|
+
export { ARTIFACT_SCHEMA_VERSION, type ArtifactCollectField, type ArtifactCollectInteraction, type ArtifactConnectionSource, type ArtifactConnectorBinding, type ArtifactCustomerAuthRouting, type ArtifactFulfilment, type ArtifactManagedCollection, type ArtifactMeta, type ArtifactPackagedAsset, type ArtifactPrompt, type ArtifactPromptArgument, type ArtifactResource, type ArtifactServer, type ArtifactServerContext, type ArtifactState, type ArtifactStateHandle, type ArtifactStateHandleKind, type ArtifactStateHandleScope, type ArtifactStep, type ArtifactTool, type ArtifactToolAuthorization, type ExprMap, type JsonSchema, MCP_APP_MIME_TYPE, type OperationRef, type ResolvedCredentialBinding, type ResolvedOperationRef, type RuntimeArtifact, type UnresolvedOperationRef, type WidgetUiMeta, } from './artifact/types.js';
|
|
7
7
|
export { assetReference, type HostedAssetOptions, type HostedPackagedAsset, isPackagedAssetReference, type LocalAssetOptions, localAssetRoutePrefix, type PackagedAsset, type PackagedAssetReference, type PreparedPackagedAsset, prepareLocalAssets, } from './assets.js';
|
|
8
8
|
export { type ArtifactVariableDeclaration, compileVariableDeclarations, MAX_VARIABLE_DECLARATIONS, MAX_VARIABLE_SCHEMA_BYTES, MAX_VARIABLE_SCHEMA_DEPTH, MAX_VARIABLE_VALUE_BYTES, type VariableDeclarationManifest, validateVariableDeclaration, variableDeclarationManifestSchema, } from './business-variables.js';
|
|
9
9
|
export { InMemoryCatalog } from './catalog/in-memory.js';
|
|
@@ -21,7 +21,7 @@ export { type ArrayNode, type CoalesceNode, type CondNode, type ExprNode, type O
|
|
|
21
21
|
export { isValidName, parseOperationRef } from './manifest/naming.js';
|
|
22
22
|
export { type Manifest, manifestSchema } from './manifest/schema.js';
|
|
23
23
|
export { type ResolveSchemaResult, resolveSchemaUses, type SchemasMap, } from './manifest/schema-refs.js';
|
|
24
|
-
export { anonymousBehavior } from './manifest/website-projection.js';
|
|
24
|
+
export { anonymousBehavior, isNativeRecordsOperation } from './manifest/website-projection.js';
|
|
25
25
|
export { type SniffedImage, sniffImageBytes } from './mime-sniffing.js';
|
|
26
26
|
export { BUILTIN_RECORD_CATALOG_CONNECTOR, RECORD_CONNECTOR_ID, RECORD_CONNECTOR_VERSION, RECORD_OPERATION_SIGNATURES, } from './native-record-operations.js';
|
|
27
27
|
export { manifestJsonSchema } from './schema-export.js';
|
|
@@ -18,7 +18,7 @@ export { parseCondition, parseValue, } from './manifest/expression.js';
|
|
|
18
18
|
export { isValidName, parseOperationRef } from './manifest/naming.js';
|
|
19
19
|
export { manifestSchema } from './manifest/schema.js';
|
|
20
20
|
export { resolveSchemaUses, } from './manifest/schema-refs.js';
|
|
21
|
-
export { anonymousBehavior } from './manifest/website-projection.js';
|
|
21
|
+
export { anonymousBehavior, isNativeRecordsOperation } from './manifest/website-projection.js';
|
|
22
22
|
export { sniffImageBytes } from './mime-sniffing.js';
|
|
23
23
|
export { BUILTIN_RECORD_CATALOG_CONNECTOR, RECORD_CONNECTOR_ID, RECORD_CONNECTOR_VERSION, RECORD_OPERATION_SIGNATURES, } from './native-record-operations.js';
|
|
24
24
|
export { manifestJsonSchema } from './schema-export.js';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The `collect` interaction block (ADR 0240): bounded metadata on an opener tool describing which
|
|
4
|
+
* fields a platform renderer collects for one confirmed action, which are private, what is reviewed,
|
|
5
|
+
* and what to say on success. It carries meaning only: no layout, ordering script or screen language.
|
|
6
|
+
* Field, action and output references are checked against the declared tools by the compile pass
|
|
7
|
+
* (`interaction-validation.ts`), which also bounds `confirmationExpiry` so a bad value reports its own
|
|
8
|
+
* code instead of a shape error.
|
|
9
|
+
*/
|
|
10
|
+
export declare const COLLECT_CONTROLS: readonly ["text", "textarea", "email", "phone", "url", "select", "consent"];
|
|
11
|
+
export type CollectControl = (typeof COLLECT_CONTROLS)[number];
|
|
12
|
+
export declare const toolInteractionSchema: z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"collect">;
|
|
14
|
+
action: z.ZodString;
|
|
15
|
+
initialValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
16
|
+
fromOutput: z.ZodString;
|
|
17
|
+
}, z.core.$strict>>>;
|
|
18
|
+
fields: z.ZodArray<z.ZodObject<{
|
|
19
|
+
key: z.ZodString;
|
|
20
|
+
control: z.ZodEnum<{
|
|
21
|
+
email: "email";
|
|
22
|
+
text: "text";
|
|
23
|
+
textarea: "textarea";
|
|
24
|
+
phone: "phone";
|
|
25
|
+
url: "url";
|
|
26
|
+
select: "select";
|
|
27
|
+
consent: "consent";
|
|
28
|
+
}>;
|
|
29
|
+
private: z.ZodOptional<z.ZodLiteral<true>>;
|
|
30
|
+
optional: z.ZodOptional<z.ZodLiteral<true>>;
|
|
31
|
+
}, z.core.$strict>>;
|
|
32
|
+
review: z.ZodLiteral<"all">;
|
|
33
|
+
outcome: z.ZodObject<{
|
|
34
|
+
success: z.ZodString;
|
|
35
|
+
}, z.core.$strict>;
|
|
36
|
+
confirmationExpiry: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
seconds: z.ZodNumber;
|
|
38
|
+
}, z.core.$strict>>;
|
|
39
|
+
}, z.core.$strict>;
|
|
40
|
+
export type ToolInteractionManifest = z.infer<typeof toolInteractionSchema>;
|
|
41
|
+
//# sourceMappingURL=interaction-schema.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { NAME_PATTERN } from './naming.js';
|
|
3
|
+
/**
|
|
4
|
+
* The `collect` interaction block (ADR 0240): bounded metadata on an opener tool describing which
|
|
5
|
+
* fields a platform renderer collects for one confirmed action, which are private, what is reviewed,
|
|
6
|
+
* and what to say on success. It carries meaning only: no layout, ordering script or screen language.
|
|
7
|
+
* Field, action and output references are checked against the declared tools by the compile pass
|
|
8
|
+
* (`interaction-validation.ts`), which also bounds `confirmationExpiry` so a bad value reports its own
|
|
9
|
+
* code instead of a shape error.
|
|
10
|
+
*/
|
|
11
|
+
export const COLLECT_CONTROLS = [
|
|
12
|
+
'text',
|
|
13
|
+
'textarea',
|
|
14
|
+
'email',
|
|
15
|
+
'phone',
|
|
16
|
+
'url',
|
|
17
|
+
'select',
|
|
18
|
+
'consent',
|
|
19
|
+
];
|
|
20
|
+
const MAX_COLLECT_FIELDS = 32;
|
|
21
|
+
const MAX_PROPERTY_KEY_CHARS = 128;
|
|
22
|
+
const MAX_OUTCOME_CHARS = 280;
|
|
23
|
+
const propertyKeySchema = z.string().min(1).max(MAX_PROPERTY_KEY_CHARS);
|
|
24
|
+
const collectFieldSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
key: propertyKeySchema,
|
|
27
|
+
control: z.enum(COLLECT_CONTROLS),
|
|
28
|
+
/** Never enters the conversation model, transcript, logs or diagnostics. Opt-in per field. */
|
|
29
|
+
private: z.literal(true).optional(),
|
|
30
|
+
/** The person may leave it blank; the renderer submits the schema's empty value. */
|
|
31
|
+
optional: z.literal(true).optional(),
|
|
32
|
+
})
|
|
33
|
+
.strict();
|
|
34
|
+
export const toolInteractionSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
kind: z.literal('collect'),
|
|
37
|
+
/** The confirmed action tool this collection prepares, by name. */
|
|
38
|
+
action: z.string().regex(NAME_PATTERN),
|
|
39
|
+
/** Action input property -> the opener output property that seeds it. */
|
|
40
|
+
initialValues: z
|
|
41
|
+
.record(propertyKeySchema, z.object({ fromOutput: propertyKeySchema }).strict())
|
|
42
|
+
.optional(),
|
|
43
|
+
fields: z
|
|
44
|
+
.array(collectFieldSchema)
|
|
45
|
+
.min(1)
|
|
46
|
+
.max(MAX_COLLECT_FIELDS)
|
|
47
|
+
.superRefine((fields, ctx) => {
|
|
48
|
+
const seen = new Set();
|
|
49
|
+
for (const field of fields) {
|
|
50
|
+
if (seen.has(field.key)) {
|
|
51
|
+
ctx.addIssue({ code: 'custom', message: `duplicate field key "${field.key}"` });
|
|
52
|
+
}
|
|
53
|
+
seen.add(field.key);
|
|
54
|
+
}
|
|
55
|
+
}),
|
|
56
|
+
review: z.literal('all'),
|
|
57
|
+
outcome: z.object({ success: z.string().trim().min(1).max(MAX_OUTCOME_CHARS) }).strict(),
|
|
58
|
+
/** A developer may only shorten the profile default; the compile pass checks the bound. */
|
|
59
|
+
confirmationExpiry: z.object({ seconds: z.number() }).strict().optional(),
|
|
60
|
+
})
|
|
61
|
+
.strict();
|
|
62
|
+
//# sourceMappingURL=interaction-schema.js.map
|