@enfyra/mcp-server 0.1.69 → 0.1.71
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/README.md +1 -1
- package/dist/lib/config-local-adapters.d.ts +18 -0
- package/dist/lib/config-local-adapters.js +271 -0
- package/dist/lib/config-local-adapters.js.map +1 -0
- package/dist/lib/config-local-contracts.d.ts +28 -0
- package/dist/lib/config-local-contracts.js +200 -0
- package/dist/lib/config-local-contracts.js.map +1 -0
- package/dist/lib/config-local-prompts.d.ts +10 -0
- package/dist/lib/config-local-prompts.js +185 -0
- package/dist/lib/config-local-prompts.js.map +1 -0
- package/dist/lib/config-local-types.d.ts +23 -0
- package/dist/lib/config-local-types.js +2 -0
- package/dist/lib/config-local-types.js.map +1 -0
- package/dist/lib/config-local.js +3 -649
- package/dist/lib/config-local.js.map +1 -1
- package/dist/lib/discovery-tools.d.ts +4 -0
- package/dist/lib/discovery-tools.js +546 -0
- package/dist/lib/discovery-tools.js.map +1 -0
- package/dist/lib/dynamic-repository-builder.d.ts +1 -1
- package/dist/lib/dynamic-script-context-contract.d.ts +100 -0
- package/dist/lib/dynamic-script-context-contract.js +163 -0
- package/dist/lib/dynamic-script-context-contract.js.map +1 -0
- package/dist/lib/enfyra-mcp-server.d.ts +3 -0
- package/dist/lib/enfyra-mcp-server.js +79 -0
- package/dist/lib/enfyra-mcp-server.js.map +1 -0
- package/dist/lib/enfyra-tool-logic.d.ts +7 -0
- package/dist/lib/enfyra-tool-logic.js +8 -0
- package/dist/lib/enfyra-tool-logic.js.map +1 -0
- package/dist/lib/enfyra-tool-types.d.ts +27 -0
- package/dist/lib/enfyra-tool-types.js +2 -0
- package/dist/lib/enfyra-tool-types.js.map +1 -0
- package/dist/lib/extension-api-builders.d.ts +17 -0
- package/dist/lib/extension-api-builders.js +235 -0
- package/dist/lib/extension-api-builders.js.map +1 -0
- package/dist/lib/extension-component-builders.d.ts +87 -0
- package/dist/lib/extension-component-builders.js +623 -0
- package/dist/lib/extension-component-builders.js.map +1 -0
- package/dist/lib/extension-contract-review.d.ts +26 -0
- package/dist/lib/extension-contract-review.js +187 -0
- package/dist/lib/extension-contract-review.js.map +1 -0
- package/dist/lib/extension-theme-contract.d.ts +63 -0
- package/dist/lib/extension-theme-contract.js +417 -0
- package/dist/lib/extension-theme-contract.js.map +1 -0
- package/dist/lib/identity-tools.d.ts +4 -0
- package/dist/lib/identity-tools.js +46 -0
- package/dist/lib/identity-tools.js.map +1 -0
- package/dist/lib/log-tools.d.ts +4 -0
- package/dist/lib/log-tools.js +65 -0
- package/dist/lib/log-tools.js.map +1 -0
- package/dist/lib/mcp-example-connect.d.ts +9 -0
- package/dist/lib/mcp-example-connect.js +442 -0
- package/dist/lib/mcp-example-connect.js.map +1 -0
- package/dist/lib/mcp-example-extensions.d.ts +9 -0
- package/dist/lib/mcp-example-extensions.js +729 -0
- package/dist/lib/mcp-example-extensions.js.map +1 -0
- package/dist/lib/mcp-example-files.d.ts +9 -0
- package/dist/lib/mcp-example-files.js +51 -0
- package/dist/lib/mcp-example-files.js.map +1 -0
- package/dist/lib/mcp-example-flows.d.ts +9 -0
- package/dist/lib/mcp-example-flows.js +76 -0
- package/dist/lib/mcp-example-flows.js.map +1 -0
- package/dist/lib/mcp-example-graphql.d.ts +9 -0
- package/dist/lib/mcp-example-graphql.js +57 -0
- package/dist/lib/mcp-example-graphql.js.map +1 -0
- package/dist/lib/mcp-example-handlers-hooks.d.ts +9 -0
- package/dist/lib/mcp-example-handlers-hooks.js +328 -0
- package/dist/lib/mcp-example-handlers-hooks.js.map +1 -0
- package/dist/lib/mcp-example-oauth-setup.d.ts +9 -0
- package/dist/lib/mcp-example-oauth-setup.js +41 -0
- package/dist/lib/mcp-example-oauth-setup.js.map +1 -0
- package/dist/lib/mcp-example-permissions-rls.d.ts +9 -0
- package/dist/lib/mcp-example-permissions-rls.js +210 -0
- package/dist/lib/mcp-example-permissions-rls.js.map +1 -0
- package/dist/lib/mcp-example-queries-deep.d.ts +9 -0
- package/dist/lib/mcp-example-queries-deep.js +220 -0
- package/dist/lib/mcp-example-queries-deep.js.map +1 -0
- package/dist/lib/mcp-example-schema-relations.d.ts +9 -0
- package/dist/lib/mcp-example-schema-relations.js +148 -0
- package/dist/lib/mcp-example-schema-relations.js.map +1 -0
- package/dist/lib/mcp-example-websocket.d.ts +9 -0
- package/dist/lib/mcp-example-websocket.js +103 -0
- package/dist/lib/mcp-example-websocket.js.map +1 -0
- package/dist/lib/mcp-examples.d.ts +5 -5
- package/dist/lib/mcp-examples.js +22 -2394
- package/dist/lib/mcp-examples.js.map +1 -1
- package/dist/lib/method-tools.d.ts +4 -0
- package/dist/lib/method-tools.js +217 -0
- package/dist/lib/method-tools.js.map +1 -0
- package/dist/lib/package-tools.d.ts +4 -0
- package/dist/lib/package-tools.js +98 -0
- package/dist/lib/package-tools.js.map +1 -0
- package/dist/lib/platform-data-operations.d.ts +24 -0
- package/dist/lib/platform-data-operations.js +71 -0
- package/dist/lib/platform-data-operations.js.map +1 -0
- package/dist/lib/platform-endpoint-workflow.d.ts +42 -0
- package/dist/lib/platform-endpoint-workflow.js +382 -0
- package/dist/lib/platform-endpoint-workflow.js.map +1 -0
- package/dist/lib/platform-extension-source.d.ts +487 -0
- package/dist/lib/platform-extension-source.js +524 -0
- package/dist/lib/platform-extension-source.js.map +1 -0
- package/dist/lib/platform-extension-tools.d.ts +1 -0
- package/dist/lib/platform-extension-tools.js +416 -0
- package/dist/lib/platform-extension-tools.js.map +1 -0
- package/dist/lib/platform-extension-ui.d.ts +4 -0
- package/dist/lib/platform-extension-ui.js +5 -0
- package/dist/lib/platform-extension-ui.js.map +1 -0
- package/dist/lib/platform-extension-workflow.d.ts +54 -0
- package/dist/lib/platform-extension-workflow.js +194 -0
- package/dist/lib/platform-extension-workflow.js.map +1 -0
- package/dist/lib/platform-flow-operations.d.ts +554 -0
- package/dist/lib/platform-flow-operations.js +317 -0
- package/dist/lib/platform-flow-operations.js.map +1 -0
- package/dist/lib/platform-flow-tools.d.ts +1 -0
- package/dist/lib/platform-flow-tools.js +248 -0
- package/dist/lib/platform-flow-tools.js.map +1 -0
- package/dist/lib/platform-operation-logic.d.ts +10 -0
- package/dist/lib/platform-operation-logic.js +11 -0
- package/dist/lib/platform-operation-logic.js.map +1 -0
- package/dist/lib/platform-operation-tools.d.ts +1 -324
- package/dist/lib/platform-operation-tools.js +13 -4620
- package/dist/lib/platform-operation-tools.js.map +1 -1
- package/dist/lib/platform-operation-types.d.ts +46 -0
- package/dist/lib/platform-operation-types.js +2 -0
- package/dist/lib/platform-operation-types.js.map +1 -0
- package/dist/lib/platform-policy-tools.d.ts +1 -0
- package/dist/lib/platform-policy-tools.js +248 -0
- package/dist/lib/platform-policy-tools.js.map +1 -0
- package/dist/lib/platform-resource-operations.d.ts +124 -0
- package/dist/lib/platform-resource-operations.js +109 -0
- package/dist/lib/platform-resource-operations.js.map +1 -0
- package/dist/lib/platform-resource-tools.d.ts +1 -0
- package/dist/lib/platform-resource-tools.js +70 -0
- package/dist/lib/platform-resource-tools.js.map +1 -0
- package/dist/lib/platform-route-operations.d.ts +222 -0
- package/dist/lib/platform-route-operations.js +290 -0
- package/dist/lib/platform-route-operations.js.map +1 -0
- package/dist/lib/platform-route-tools.d.ts +1 -0
- package/dist/lib/platform-route-tools.js +307 -0
- package/dist/lib/platform-route-tools.js.map +1 -0
- package/dist/lib/platform-shared-operations.d.ts +7 -0
- package/dist/lib/platform-shared-operations.js +4 -0
- package/dist/lib/platform-shared-operations.js.map +1 -0
- package/dist/lib/platform-websocket-tools.d.ts +1 -0
- package/dist/lib/platform-websocket-tools.js +70 -0
- package/dist/lib/platform-websocket-tools.js.map +1 -0
- package/dist/lib/record-tools.d.ts +4 -0
- package/dist/lib/record-tools.js +418 -0
- package/dist/lib/record-tools.js.map +1 -0
- package/dist/lib/required-knowledge.d.ts +1 -1
- package/dist/lib/required-knowledge.js +3 -2
- package/dist/lib/required-knowledge.js.map +1 -1
- package/dist/lib/route-access-tools.d.ts +4 -0
- package/dist/lib/route-access-tools.js +172 -0
- package/dist/lib/route-access-tools.js.map +1 -0
- package/dist/lib/route-definition-tools.d.ts +4 -0
- package/dist/lib/route-definition-tools.js +285 -0
- package/dist/lib/route-definition-tools.js.map +1 -0
- package/dist/lib/route-inspection-tools.d.ts +4 -0
- package/dist/lib/route-inspection-tools.js +319 -0
- package/dist/lib/route-inspection-tools.js.map +1 -0
- package/dist/lib/route-tools.d.ts +1 -0
- package/dist/lib/route-tools.js +9 -0
- package/dist/lib/route-tools.js.map +1 -0
- package/dist/lib/runtime-zone-registry.d.ts +27 -0
- package/dist/lib/runtime-zone-registry.js +81 -0
- package/dist/lib/runtime-zone-registry.js.map +1 -0
- package/dist/lib/runtime-zone-search.d.ts +303 -0
- package/dist/lib/runtime-zone-search.js +596 -0
- package/dist/lib/runtime-zone-search.js.map +1 -0
- package/dist/lib/runtime-zone-tools.d.ts +2 -307
- package/dist/lib/runtime-zone-tools.js +2 -674
- package/dist/lib/runtime-zone-tools.js.map +1 -1
- package/dist/lib/schema-column-tools.d.ts +3 -0
- package/dist/lib/schema-column-tools.js +80 -0
- package/dist/lib/schema-column-tools.js.map +1 -0
- package/dist/lib/schema-mutation-coordinator.d.ts +28 -0
- package/dist/lib/schema-mutation-coordinator.js +154 -0
- package/dist/lib/schema-mutation-coordinator.js.map +1 -0
- package/dist/lib/schema-relation-contracts.d.ts +39 -0
- package/dist/lib/schema-relation-contracts.js +160 -0
- package/dist/lib/schema-relation-contracts.js.map +1 -0
- package/dist/lib/schema-relation-tools.d.ts +3 -0
- package/dist/lib/schema-relation-tools.js +61 -0
- package/dist/lib/schema-relation-tools.js.map +1 -0
- package/dist/lib/schema-table-contracts.d.ts +28 -0
- package/dist/lib/schema-table-contracts.js +263 -0
- package/dist/lib/schema-table-contracts.js.map +1 -0
- package/dist/lib/schema-table-tools.d.ts +3 -0
- package/dist/lib/schema-table-tools.js +297 -0
- package/dist/lib/schema-table-tools.js.map +1 -0
- package/dist/lib/schema-tool-operations.d.ts +150 -0
- package/dist/lib/schema-tool-operations.js +468 -0
- package/dist/lib/schema-tool-operations.js.map +1 -0
- package/dist/lib/schema-tool-types.d.ts +38 -0
- package/dist/lib/schema-tool-types.js +2 -0
- package/dist/lib/schema-tool-types.js.map +1 -0
- package/dist/lib/schema-verification.d.ts +14 -0
- package/dist/lib/schema-verification.js +105 -0
- package/dist/lib/schema-verification.js.map +1 -0
- package/dist/lib/script-tools.d.ts +4 -0
- package/dist/lib/script-tools.js +127 -0
- package/dist/lib/script-tools.js.map +1 -0
- package/dist/lib/system-tools.d.ts +4 -0
- package/dist/lib/system-tools.js +41 -0
- package/dist/lib/system-tools.js.map +1 -0
- package/dist/lib/table-tool-logic.d.ts +5 -0
- package/dist/lib/table-tool-logic.js +6 -0
- package/dist/lib/table-tool-logic.js.map +1 -0
- package/dist/lib/table-tools.d.ts +1 -84
- package/dist/lib/table-tools.js +7 -1522
- package/dist/lib/table-tools.js.map +1 -1
- package/dist/lib/tool-catalog.d.ts +2 -1
- package/dist/lib/tool-catalog.js +23 -2
- package/dist/lib/tool-catalog.js.map +1 -1
- package/dist/lib/tool-metadata-operations.d.ts +27 -0
- package/dist/lib/tool-metadata-operations.js +93 -0
- package/dist/lib/tool-metadata-operations.js.map +1 -0
- package/dist/lib/tool-permission-profile.d.ts +37 -0
- package/dist/lib/tool-permission-profile.js +106 -0
- package/dist/lib/tool-permission-profile.js.map +1 -0
- package/dist/lib/tool-record-operations.d.ts +102 -0
- package/dist/lib/tool-record-operations.js +260 -0
- package/dist/lib/tool-record-operations.js.map +1 -0
- package/dist/lib/tool-route-inspection.d.ts +47 -0
- package/dist/lib/tool-route-inspection.js +168 -0
- package/dist/lib/tool-route-inspection.js.map +1 -0
- package/dist/lib/tool-routing.d.ts +3 -417
- package/dist/lib/tool-routing.js +3 -1038
- package/dist/lib/tool-routing.js.map +1 -1
- package/dist/lib/tool-runtime-config.d.ts +33 -0
- package/dist/lib/tool-runtime-config.js +237 -0
- package/dist/lib/tool-runtime-config.js.map +1 -0
- package/dist/lib/tool-script-operations.d.ts +34 -0
- package/dist/lib/tool-script-operations.js +153 -0
- package/dist/lib/tool-script-operations.js.map +1 -0
- package/dist/lib/workflow-definitions.d.ts +366 -0
- package/dist/lib/workflow-definitions.js +703 -0
- package/dist/lib/workflow-definitions.js.map +1 -0
- package/dist/lib/workflow-planner.d.ts +45 -0
- package/dist/lib/workflow-planner.js +338 -0
- package/dist/lib/workflow-planner.js.map +1 -0
- package/dist/lib/workflow-types.d.ts +39 -0
- package/dist/lib/workflow-types.js +2 -0
- package/dist/lib/workflow-types.js.map +1 -0
- package/dist/mcp-server-entry.d.ts +0 -3
- package/dist/mcp-server-entry.js +2 -3249
- package/dist/mcp-server-entry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { assertDynamicCodeKnowledgeAck, assertDynamicCodeKnowledgeAckIf, assertGlobalRulesAck, } from './required-knowledge.js';
|
|
2
|
+
import { createOrPatch, findRecord, normalizeFlowStepBody, } from './platform-data-operations.js';
|
|
3
|
+
import { naturalPartialReload, parseJsonArrayArg, parseJsonObjectArg, sha256Text, validateDynamicScript, } from './platform-extension-source.js';
|
|
4
|
+
import { getId, } from './platform-route-operations.js';
|
|
5
|
+
export async function ensureFlow(apiUrl, { name, triggerType = 'manual', triggerConfig, timeout, maxExecutions = 100, isEnabled = true, description, globalRulesAckKey, }) {
|
|
6
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
7
|
+
const existing = await findRecord(apiUrl, 'enfyra_flow', { name: { _eq: name } }, 'id,_id,name');
|
|
8
|
+
const operation = await createOrPatch(apiUrl, 'enfyra_flow', existing, {
|
|
9
|
+
name,
|
|
10
|
+
triggerType,
|
|
11
|
+
triggerConfig: parseJsonObjectArg('triggerConfig', triggerConfig, {}),
|
|
12
|
+
timeout,
|
|
13
|
+
maxExecutions,
|
|
14
|
+
isEnabled,
|
|
15
|
+
description,
|
|
16
|
+
});
|
|
17
|
+
const reload = naturalPartialReload('Flow metadata writes trigger the server partial reload contract; there is no dedicated flow reload endpoint.');
|
|
18
|
+
return { action: 'flow_ensured', flow: { id: operation.id, name }, operation, reload };
|
|
19
|
+
}
|
|
20
|
+
export async function ensureFlowStep(apiUrl, { flowName, flowId, key, type, order, config, sourceCode, scriptLanguage, timeout, isEnabled, globalRulesAckKey, knowledgeAckKey, }) {
|
|
21
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
22
|
+
if (!flowName && !flowId)
|
|
23
|
+
throw new Error('Provide flowName or flowId.');
|
|
24
|
+
if (flowName && flowId)
|
|
25
|
+
throw new Error('Provide flowName or flowId, not both.');
|
|
26
|
+
const flow = flowId
|
|
27
|
+
? await findRecord(apiUrl, 'enfyra_flow', { id: { _eq: flowId } }, 'id,_id,name')
|
|
28
|
+
: await findRecord(apiUrl, 'enfyra_flow', { name: { _eq: flowName } }, 'id,_id,name');
|
|
29
|
+
if (!flow)
|
|
30
|
+
throw new Error(`Flow not found: ${flowId || flowName}`);
|
|
31
|
+
const parsedConfig = parseJsonObjectArg('config', config, {});
|
|
32
|
+
assertDynamicCodeKnowledgeAckIf(Boolean(sourceCode && ['script', 'condition'].includes(type)), knowledgeAckKey);
|
|
33
|
+
const validation = sourceCode && ['script', 'condition'].includes(type)
|
|
34
|
+
? await validateDynamicScript(apiUrl, sourceCode, scriptLanguage)
|
|
35
|
+
: { validated: false, reason: 'no script validation required' };
|
|
36
|
+
const existing = await findRecord(apiUrl, 'enfyra_flow_step', {
|
|
37
|
+
flow: { id: { _eq: getId(flow) } },
|
|
38
|
+
key: { _eq: key },
|
|
39
|
+
}, 'id,_id,key,flow.id');
|
|
40
|
+
const operation = await createOrPatch(apiUrl, 'enfyra_flow_step', existing, normalizeFlowStepBody({
|
|
41
|
+
key,
|
|
42
|
+
type,
|
|
43
|
+
order,
|
|
44
|
+
config: parsedConfig,
|
|
45
|
+
sourceCode,
|
|
46
|
+
scriptLanguage,
|
|
47
|
+
timeout,
|
|
48
|
+
isEnabled,
|
|
49
|
+
}, getId(flow)));
|
|
50
|
+
const reload = naturalPartialReload('Flow step writes trigger the server partial reload contract; there is no dedicated flow reload endpoint.');
|
|
51
|
+
return { action: 'flow_step_ensured', flow: { id: getId(flow), name: flow.name }, step: { id: operation.id, key, type }, validation, operation, reload };
|
|
52
|
+
}
|
|
53
|
+
export const FLOW_STEP_TOOL_GUIDANCE = [
|
|
54
|
+
{
|
|
55
|
+
tool: 'ensure_query_flow_step',
|
|
56
|
+
type: 'query',
|
|
57
|
+
when: 'Read/list records from one table without custom branching or transformation.',
|
|
58
|
+
config: { table: 'table_name', filter: {}, fields: 'id,name', limit: 20, sort: '-createdAt' },
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
tool: 'ensure_create_flow_step',
|
|
62
|
+
type: 'create',
|
|
63
|
+
when: 'Create one record from static config only. Fixed step config is not template-transformed; use a script step when data comes from @FLOW_PAYLOAD, @FLOW_LAST, or @FLOW.',
|
|
64
|
+
config: { table: 'table_name', data: { field: 'value' } },
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
tool: 'ensure_update_flow_step',
|
|
68
|
+
type: 'update',
|
|
69
|
+
when: 'Update one statically known record. Use a script step when id or data comes from runtime flow values.',
|
|
70
|
+
config: { table: 'table_name', id: '<static-id>', data: { field: 'value' } },
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
tool: 'ensure_delete_flow_step',
|
|
74
|
+
type: 'delete',
|
|
75
|
+
when: 'Delete one statically known record. Use a script step when id comes from runtime flow values.',
|
|
76
|
+
config: { table: 'table_name', id: '<static-id>' },
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
tool: 'ensure_http_flow_step',
|
|
80
|
+
type: 'http',
|
|
81
|
+
when: 'Call an external HTTP API.',
|
|
82
|
+
config: { url: 'https://example.com/api', method: 'POST', headers: {}, body: {}, timeout: 10000 },
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
tool: 'ensure_condition_flow_step',
|
|
86
|
+
type: 'condition',
|
|
87
|
+
when: 'Branch into true/false child steps based on JavaScript truthiness.',
|
|
88
|
+
sourceCode: 'return Boolean(@FLOW_PAYLOAD.enabled)',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
tool: 'ensure_sleep_flow_step',
|
|
92
|
+
type: 'sleep',
|
|
93
|
+
when: 'Wait for a short bounded delay.',
|
|
94
|
+
config: { ms: 1000 },
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
tool: 'ensure_trigger_flow_step',
|
|
98
|
+
type: 'trigger_flow',
|
|
99
|
+
when: 'Trigger another flow as a child/orchestration step.',
|
|
100
|
+
config: { flowName: 'child-flow', payload: {} },
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
tool: 'ensure_log_flow_step',
|
|
104
|
+
type: 'log',
|
|
105
|
+
when: 'Record a small execution note for diagnostics.',
|
|
106
|
+
config: { message: 'Reached step_name' },
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
tool: 'ensure_script_flow_step',
|
|
110
|
+
type: 'script',
|
|
111
|
+
when: 'Use only when logic needs loops, multiple tables, crypto, package calls, non-trivial transforms, or runtime checks not covered by the atomic step tools.',
|
|
112
|
+
sourceCode: 'return { ok: true }',
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
export function chooseFlowStepTool(intent) {
|
|
116
|
+
const text = String(intent || '').toLowerCase();
|
|
117
|
+
const hasAny = (patterns) => patterns.some((pattern) => pattern.test(text));
|
|
118
|
+
if (hasAny([/\bif\b/, /\belse\b/, /\bbranch\b/, /\bcondition\b/, /\bwhen\b/, /\bcheck\b/, /nếu/, /điều kiện/]))
|
|
119
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'condition');
|
|
120
|
+
if (hasAny([/\bhttp\b/, /\bapi\b/, /\bwebhook\b/, /\bfetch\b/, /\brequest\b/, /\bpost\b/, /\bget\b/, /\bcall\b/, /gọi api/]))
|
|
121
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'http');
|
|
122
|
+
if (hasAny([/\bsleep\b/, /\bwait\b/, /\bdelay\b/, /\bpause\b/, /chờ/, /đợi/]))
|
|
123
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'sleep');
|
|
124
|
+
if (hasAny([/\btrigger\b/, /\bchild flow\b/, /\banother flow\b/, /\bsubflow\b/, /flow khác/]))
|
|
125
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'trigger_flow');
|
|
126
|
+
if (hasAny([/\bdelete\b/, /\bremove\b/, /\bdestroy\b/, /xóa/, /xoá/]))
|
|
127
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'delete');
|
|
128
|
+
if (hasAny([/\bupdate\b/, /\bpatch\b/, /\bset\b/, /\bmark\b/, /\bchange\b/, /cập nhật/, /đánh dấu/]))
|
|
129
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'update');
|
|
130
|
+
if (hasAny([/\bcreate\b/, /\binsert\b/, /\badd\b/, /\bstore\b/, /\bsave\b/, /tạo/, /thêm/, /lưu/]))
|
|
131
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'create');
|
|
132
|
+
if (hasAny([/\blog\b/, /\bdebug\b/, /\btrace\b/, /ghi log/]))
|
|
133
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'log');
|
|
134
|
+
if (hasAny([/\bquery\b/, /\bfind\b/, /\blist\b/, /\bread\b/, /\bload\b/, /\bcount\b/, /\bsearch\b/, /đọc/, /tìm/, /liệt kê/]))
|
|
135
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'query');
|
|
136
|
+
return FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === 'script');
|
|
137
|
+
}
|
|
138
|
+
const FIXED_FLOW_STEP_TYPES = new Set(['query', 'create', 'update', 'delete', 'http', 'sleep', 'trigger_flow', 'log']);
|
|
139
|
+
const FLOW_RUNTIME_MACRO_PATTERN = /@FLOW(?:_PAYLOAD|_LAST|_META)?\b/u;
|
|
140
|
+
function findFlowRuntimeMacro(value) {
|
|
141
|
+
if (typeof value === 'string')
|
|
142
|
+
return FLOW_RUNTIME_MACRO_PATTERN.exec(value)?.[0] || null;
|
|
143
|
+
if (Array.isArray(value)) {
|
|
144
|
+
for (const item of value) {
|
|
145
|
+
const match = findFlowRuntimeMacro(item);
|
|
146
|
+
if (match)
|
|
147
|
+
return match;
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
if (!value || typeof value !== 'object')
|
|
152
|
+
return null;
|
|
153
|
+
for (const item of Object.values(value)) {
|
|
154
|
+
const match = findFlowRuntimeMacro(item);
|
|
155
|
+
if (match)
|
|
156
|
+
return match;
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
export function assertFixedFlowStepConfigIsStatic(type, config, index = 0) {
|
|
161
|
+
if (!FIXED_FLOW_STEP_TYPES.has(String(type)))
|
|
162
|
+
return;
|
|
163
|
+
const macro = findFlowRuntimeMacro(config);
|
|
164
|
+
if (!macro)
|
|
165
|
+
return;
|
|
166
|
+
throw new Error(`steps[${index}] uses ${macro} inside a ${type} config, but ESV fixed flow step configs are static and are not template-transformed. Use a script step for runtime payload/previous-step values, keep one business operation in that script, and call @LOGS(message, details?) for captured logs.`);
|
|
167
|
+
}
|
|
168
|
+
export function planFlowSteps(steps) {
|
|
169
|
+
const items = Array.isArray(steps) ? steps : [];
|
|
170
|
+
return items.map((step, index) => {
|
|
171
|
+
const intent = typeof step === 'string' ? step : step?.intent;
|
|
172
|
+
const key = typeof step === 'object' && step?.key ? String(step.key) : `step_${index + 1}`;
|
|
173
|
+
const recommendation = chooseFlowStepTool(intent);
|
|
174
|
+
return {
|
|
175
|
+
order: index + 1,
|
|
176
|
+
key,
|
|
177
|
+
intent,
|
|
178
|
+
tool: recommendation.tool,
|
|
179
|
+
type: recommendation.type,
|
|
180
|
+
suggestedInput: {
|
|
181
|
+
key,
|
|
182
|
+
name: typeof step === 'object' && step?.name ? step.name : key.replace(/_/g, ' '),
|
|
183
|
+
order: index + 1,
|
|
184
|
+
...(recommendation.config ? { config: recommendation.config } : {}),
|
|
185
|
+
...(recommendation.sourceCode ? { sourceCode: recommendation.sourceCode } : {}),
|
|
186
|
+
...(recommendation.condition ? { condition: recommendation.condition } : {}),
|
|
187
|
+
},
|
|
188
|
+
reason: recommendation.when,
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function normalizeFlowWorkflowStep(step, index) {
|
|
193
|
+
const input = typeof step === 'string' ? { intent: step } : (step || {});
|
|
194
|
+
const intent = String(input.intent || input.name || input.key || `Step ${index + 1}`);
|
|
195
|
+
const recommended = chooseFlowStepTool(input.type || intent);
|
|
196
|
+
const type = String(input.type || recommended.type || 'script');
|
|
197
|
+
const guidance = FLOW_STEP_TOOL_GUIDANCE.find((item) => item.type === type);
|
|
198
|
+
if (!guidance) {
|
|
199
|
+
throw new Error(`steps[${index}].type must be one of ${FLOW_STEP_TOOL_GUIDANCE.map((item) => item.type).join(', ')}.`);
|
|
200
|
+
}
|
|
201
|
+
const key = String(input.key || intent)
|
|
202
|
+
.trim()
|
|
203
|
+
.toLowerCase()
|
|
204
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
205
|
+
.replace(/^_+|_+$/g, '')
|
|
206
|
+
.slice(0, 64) || `step_${index + 1}`;
|
|
207
|
+
const normalized = {
|
|
208
|
+
index,
|
|
209
|
+
key,
|
|
210
|
+
name: input.name || intent,
|
|
211
|
+
intent,
|
|
212
|
+
type,
|
|
213
|
+
order: input.order ?? index * 10,
|
|
214
|
+
config: input.config ?? guidance.config ?? {},
|
|
215
|
+
sourceCode: input.sourceCode ?? guidance.sourceCode,
|
|
216
|
+
scriptLanguage: input.scriptLanguage || 'javascript',
|
|
217
|
+
timeout: input.timeout,
|
|
218
|
+
isEnabled: input.isEnabled ?? true,
|
|
219
|
+
chosenByIntent: !input.type,
|
|
220
|
+
recommendedTool: guidance.tool,
|
|
221
|
+
};
|
|
222
|
+
assertFixedFlowStepConfigIsStatic(type, normalized.config, index);
|
|
223
|
+
return normalized;
|
|
224
|
+
}
|
|
225
|
+
export async function runFlowWorkflow(apiUrl, opts) {
|
|
226
|
+
const steps = parseJsonArrayArg('steps', opts.steps, []);
|
|
227
|
+
const plan = steps.map(normalizeFlowWorkflowStep);
|
|
228
|
+
const hasDynamicCode = plan.some((step) => ['script', 'condition'].includes(step.type) && step.sourceCode);
|
|
229
|
+
const triggerType = opts.triggerType || 'manual';
|
|
230
|
+
const flowInput = {
|
|
231
|
+
name: opts.name,
|
|
232
|
+
triggerType,
|
|
233
|
+
triggerConfig: triggerType === 'schedule' ? opts.triggerConfig : (opts.triggerConfig ?? {}),
|
|
234
|
+
timeout: opts.timeout,
|
|
235
|
+
maxExecutions: opts.maxExecutions,
|
|
236
|
+
isEnabled: opts.isEnabled,
|
|
237
|
+
description: opts.description,
|
|
238
|
+
globalRulesAckKey: opts.globalRulesAckKey,
|
|
239
|
+
};
|
|
240
|
+
if (!opts.apply) {
|
|
241
|
+
return {
|
|
242
|
+
action: 'flow_workflow_planned',
|
|
243
|
+
flow: {
|
|
244
|
+
name: opts.name,
|
|
245
|
+
triggerType,
|
|
246
|
+
},
|
|
247
|
+
stepCount: plan.length,
|
|
248
|
+
plan,
|
|
249
|
+
requiredAckParams: ['globalRulesAckKey', ...(hasDynamicCode ? ['knowledgeAckKey'] : [])],
|
|
250
|
+
nextSteps: [
|
|
251
|
+
'Review the plan. Prefer fixed step types only for static config; ESV does not interpolate @FLOW_PAYLOAD/@FLOW_LAST/@FLOW inside fixed-step config. Use one focused script step when runtime values are required.',
|
|
252
|
+
'Call flow_workflow again with apply=true and the required ack params to create/update the flow and steps sequentially.',
|
|
253
|
+
'Use test_flow_step for script, condition, or high-risk steps before triggering the flow.',
|
|
254
|
+
],
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (!opts.name)
|
|
258
|
+
throw new Error('name is required.');
|
|
259
|
+
assertGlobalRulesAck(opts.globalRulesAckKey);
|
|
260
|
+
if (hasDynamicCode)
|
|
261
|
+
assertDynamicCodeKnowledgeAck(opts.knowledgeAckKey);
|
|
262
|
+
const flowResult = await ensureFlow(apiUrl, flowInput);
|
|
263
|
+
const flowId = flowResult.flow.id;
|
|
264
|
+
const operations = [];
|
|
265
|
+
for (const step of plan) {
|
|
266
|
+
const result = await ensureFlowStep(apiUrl, {
|
|
267
|
+
flowName: undefined,
|
|
268
|
+
flowId,
|
|
269
|
+
key: step.key,
|
|
270
|
+
type: step.type,
|
|
271
|
+
order: step.order,
|
|
272
|
+
config: step.config,
|
|
273
|
+
sourceCode: step.sourceCode,
|
|
274
|
+
scriptLanguage: step.scriptLanguage,
|
|
275
|
+
timeout: step.timeout,
|
|
276
|
+
isEnabled: step.isEnabled,
|
|
277
|
+
globalRulesAckKey: opts.globalRulesAckKey,
|
|
278
|
+
knowledgeAckKey: opts.knowledgeAckKey,
|
|
279
|
+
});
|
|
280
|
+
operations.push({
|
|
281
|
+
index: step.index,
|
|
282
|
+
key: step.key,
|
|
283
|
+
type: step.type,
|
|
284
|
+
result,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return {
|
|
288
|
+
action: 'flow_workflow_applied',
|
|
289
|
+
flow: flowResult.flow,
|
|
290
|
+
flowResult: {
|
|
291
|
+
action: flowResult.action,
|
|
292
|
+
flow: flowResult.flow,
|
|
293
|
+
reload: flowResult.reload,
|
|
294
|
+
},
|
|
295
|
+
stepCount: plan.length,
|
|
296
|
+
plan: plan.map(({ sourceCode, ...step }) => ({
|
|
297
|
+
...step,
|
|
298
|
+
...(sourceCode ? { source: { length: sourceCode.length, sha256: sha256Text(sourceCode) } } : {}),
|
|
299
|
+
})),
|
|
300
|
+
operations: operations.map((operation) => ({
|
|
301
|
+
index: operation.index,
|
|
302
|
+
key: operation.key,
|
|
303
|
+
type: operation.type,
|
|
304
|
+
action: operation.result.action,
|
|
305
|
+
flow: operation.result.flow,
|
|
306
|
+
step: operation.result.step,
|
|
307
|
+
validation: operation.result.validation,
|
|
308
|
+
reload: operation.result.reload,
|
|
309
|
+
})),
|
|
310
|
+
sequential: true,
|
|
311
|
+
nextSteps: [
|
|
312
|
+
'Use test_flow_step for script, condition, or high-risk steps before triggering the flow.',
|
|
313
|
+
'Use trigger_flow only after saved behavior is verified.',
|
|
314
|
+
],
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=platform-flow-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-flow-operations.js","sourceRoot":"","sources":["../../src/lib/platform-flow-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerPlatformFlowTools(server: any, ENFYRA_API_URL: any): void;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { dynamicCodeKnowledgeAckParam, globalRulesAckParam, } from './required-knowledge.js';
|
|
3
|
+
import { FLOW_STEP_TOOL_GUIDANCE, chooseFlowStepTool, ensureFlow, ensureFlowStep, jsonText, planFlowSteps, runFlowWorkflow, } from './platform-operation-logic.js';
|
|
4
|
+
export function registerPlatformFlowTools(server, ENFYRA_API_URL) {
|
|
5
|
+
server.tool('flow_workflow', [
|
|
6
|
+
'Workflow front door for creating or updating an Enfyra flow and its steps in one guided path.',
|
|
7
|
+
'For a fully specified, non-destructive flow, use apply=true to create/update the flow and all steps sequentially in one call. Use apply=false only when step types or risk need review.',
|
|
8
|
+
'Prefer this over choosing individual ensure_*_flow_step tools in guided mode.',
|
|
9
|
+
'Fixed query/create/update/delete/http/sleep/trigger/log config is static in current ESV and does not interpolate @FLOW_PAYLOAD/@FLOW_LAST/@FLOW; use a focused script step for runtime values.',
|
|
10
|
+
].join(' '), {
|
|
11
|
+
name: z.string().describe('Flow name. Existing flow with this name is updated.'),
|
|
12
|
+
triggerType: z.enum(['manual', 'schedule']).optional().default('manual').describe('manual for API/admin/hook/child flow usage, schedule for cron/time-based flows.'),
|
|
13
|
+
triggerConfig: z.union([z.record(z.any()), z.string()]).optional().describe('Trigger config object or JSON string. Required for scheduled flows.'),
|
|
14
|
+
steps: z.array(z.union([
|
|
15
|
+
z.string(),
|
|
16
|
+
z.object({
|
|
17
|
+
key: z.string().optional().describe('Stable step key. Generated from intent when omitted.'),
|
|
18
|
+
name: z.string().optional().describe('Human label. Defaults from intent.'),
|
|
19
|
+
intent: z.string().optional().describe('Plain-language step intent. Used to choose a fixed step type when type is omitted.'),
|
|
20
|
+
type: z.enum(['query', 'create', 'update', 'delete', 'http', 'condition', 'sleep', 'trigger_flow', 'log', 'script']).optional().describe('Explicit step type. Omit to let the workflow choose from intent.'),
|
|
21
|
+
config: z.union([z.record(z.any()), z.string()]).optional().describe('Step config object or JSON string. Fixed-step config is static and cannot contain @FLOW_PAYLOAD/@FLOW_LAST/@FLOW. Use a focused script step for runtime values.'),
|
|
22
|
+
sourceCode: z.string().optional().describe('Only for script or condition steps. Use fixed step types when possible.'),
|
|
23
|
+
scriptLanguage: z.enum(['javascript', 'typescript']).optional().default('javascript'),
|
|
24
|
+
order: z.number().optional().describe('Step order. Defaults to index * 10.'),
|
|
25
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
26
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
27
|
+
}),
|
|
28
|
+
])).min(1).max(30).describe('Ordered step intents/definitions. Keep one business operation per step.'),
|
|
29
|
+
timeout: z.number().int().positive().optional().describe('Flow timeout in ms.'),
|
|
30
|
+
maxExecutions: z.number().int().positive().optional().default(100).describe('Execution history cap.'),
|
|
31
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable flow.'),
|
|
32
|
+
description: z.string().optional().describe('Admin note.'),
|
|
33
|
+
apply: z.boolean().optional().default(false).describe('false returns plan only; true applies flow and steps sequentially.'),
|
|
34
|
+
globalRulesAckKey: globalRulesAckParam(z).optional().describe('Required when apply=true. Use globalRulesAckKey from get_enfyra_required_knowledge.'),
|
|
35
|
+
knowledgeAckKey: dynamicCodeKnowledgeAckParam(z).optional().describe('Required when apply=true and any script/condition step has sourceCode.'),
|
|
36
|
+
}, async (input) => jsonText(await runFlowWorkflow(ENFYRA_API_URL, input)));
|
|
37
|
+
server.tool('ensure_manual_flow', 'Business operation: create or update a manually triggered Enfyra flow. Use this when the flow is run by API, admin action, another flow, or hook.', {
|
|
38
|
+
name: z.string().describe('Flow name. Existing flow with this name is updated.'),
|
|
39
|
+
timeout: z.number().int().positive().optional().describe('Flow timeout in ms.'),
|
|
40
|
+
maxExecutions: z.number().int().positive().optional().default(100).describe('Execution history cap.'),
|
|
41
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable flow.'),
|
|
42
|
+
description: z.string().optional().describe('Admin note.'),
|
|
43
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
44
|
+
}, async ({ name, timeout, maxExecutions, isEnabled, description, globalRulesAckKey }) => jsonText(await ensureFlow(ENFYRA_API_URL, {
|
|
45
|
+
name,
|
|
46
|
+
triggerType: 'manual',
|
|
47
|
+
triggerConfig: {},
|
|
48
|
+
timeout,
|
|
49
|
+
maxExecutions,
|
|
50
|
+
isEnabled,
|
|
51
|
+
description,
|
|
52
|
+
globalRulesAckKey,
|
|
53
|
+
})));
|
|
54
|
+
server.tool('ensure_scheduled_flow', 'Business operation: create or update a scheduled Enfyra flow. Use this only for cron/time-based flows.', {
|
|
55
|
+
name: z.string().describe('Flow name. Existing flow with this name is updated.'),
|
|
56
|
+
triggerConfig: z.string().describe('Schedule config JSON object.'),
|
|
57
|
+
timeout: z.number().int().positive().optional().describe('Flow timeout in ms.'),
|
|
58
|
+
maxExecutions: z.number().int().positive().optional().default(100).describe('Execution history cap.'),
|
|
59
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable flow.'),
|
|
60
|
+
description: z.string().optional().describe('Admin note.'),
|
|
61
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
62
|
+
}, async ({ name, triggerConfig, timeout, maxExecutions, isEnabled, description, globalRulesAckKey }) => jsonText(await ensureFlow(ENFYRA_API_URL, {
|
|
63
|
+
name,
|
|
64
|
+
triggerType: 'schedule',
|
|
65
|
+
triggerConfig,
|
|
66
|
+
timeout,
|
|
67
|
+
maxExecutions,
|
|
68
|
+
isEnabled,
|
|
69
|
+
description,
|
|
70
|
+
globalRulesAckKey,
|
|
71
|
+
})));
|
|
72
|
+
server.tool('choose_flow_step_tool', 'Dry-run helper: choose the most specific Enfyra flow step tool for one intended step before mutating flow metadata.', {
|
|
73
|
+
intent: z.string().describe('Plain-language description of what this one flow step should do.'),
|
|
74
|
+
}, async ({ intent }) => {
|
|
75
|
+
const recommendation = chooseFlowStepTool(intent);
|
|
76
|
+
return jsonText({
|
|
77
|
+
action: 'flow_step_tool_recommended',
|
|
78
|
+
intent,
|
|
79
|
+
recommendation,
|
|
80
|
+
availableStepTools: FLOW_STEP_TOOL_GUIDANCE,
|
|
81
|
+
nextSteps: [
|
|
82
|
+
`Call ${recommendation.tool} with a stable key and order.`,
|
|
83
|
+
'Use ensure_script_flow_step only when the atomic tools cannot express the behavior.',
|
|
84
|
+
'After saving script or condition steps, use test_flow_step before relying on the flow.',
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
server.tool('plan_flow_steps', 'Dry-run helper: choose the ordered Enfyra flow step tools for a whole flow plan before mutating flow metadata.', {
|
|
89
|
+
steps: z.array(z.union([
|
|
90
|
+
z.string(),
|
|
91
|
+
z.object({
|
|
92
|
+
key: z.string().optional().describe('Stable step key. Generated when omitted.'),
|
|
93
|
+
name: z.string().optional().describe('Human label. Defaults from key.'),
|
|
94
|
+
intent: z.string().describe('Plain-language description of this step.'),
|
|
95
|
+
}),
|
|
96
|
+
])).min(1).max(30).describe('Ordered step intents. Use this before ensure_*_flow_step calls when a flow has multiple steps.'),
|
|
97
|
+
}, async ({ steps }) => {
|
|
98
|
+
const plan = planFlowSteps(steps);
|
|
99
|
+
return jsonText({
|
|
100
|
+
action: 'flow_steps_planned',
|
|
101
|
+
stepCount: plan.length,
|
|
102
|
+
plan,
|
|
103
|
+
nextSteps: [
|
|
104
|
+
'Create or update the flow with ensure_manual_flow or ensure_scheduled_flow first.',
|
|
105
|
+
'Call each planned ensure_*_flow_step in order, adding flowName or flowId plus table/query/config details.',
|
|
106
|
+
'Use ensure_script_flow_step only for steps where the plan chose script because fixed step types are insufficient.',
|
|
107
|
+
'Use test_flow_step for script/condition/high-risk steps before triggering the full flow.',
|
|
108
|
+
],
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
server.tool('ensure_script_flow_step', 'Business operation: create or update one script flow step. Use this for JavaScript/TypeScript flow logic instead of choosing type=script manually.', {
|
|
112
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
113
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
114
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
115
|
+
sourceCode: z.string().describe('Script sourceCode.'),
|
|
116
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
117
|
+
config: z.string().optional().describe('Step config JSON object.'),
|
|
118
|
+
scriptLanguage: z.enum(['javascript', 'typescript']).optional().default('javascript').describe('Script language.'),
|
|
119
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
120
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
121
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
122
|
+
knowledgeAckKey: dynamicCodeKnowledgeAckParam(z),
|
|
123
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
124
|
+
...input,
|
|
125
|
+
type: 'script',
|
|
126
|
+
})));
|
|
127
|
+
server.tool('ensure_condition_flow_step', 'Business operation: create or update one condition flow step. Use this for dynamic conditional branching instead of choosing type=condition manually.', {
|
|
128
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
129
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
130
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
131
|
+
sourceCode: z.string().describe('Condition sourceCode.'),
|
|
132
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
133
|
+
config: z.string().optional().describe('Step config JSON object.'),
|
|
134
|
+
scriptLanguage: z.enum(['javascript', 'typescript']).optional().default('javascript').describe('Script language.'),
|
|
135
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
136
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
137
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
138
|
+
knowledgeAckKey: dynamicCodeKnowledgeAckParam(z),
|
|
139
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
140
|
+
...input,
|
|
141
|
+
type: 'condition',
|
|
142
|
+
})));
|
|
143
|
+
server.tool('ensure_query_flow_step', 'Business operation: create or update one query flow step. Use this for repository/query-style flow steps instead of choosing type=query manually.', {
|
|
144
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
145
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
146
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
147
|
+
config: z.string().describe('Step config JSON object.'),
|
|
148
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
149
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
150
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
151
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
152
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
153
|
+
...input,
|
|
154
|
+
type: 'query',
|
|
155
|
+
})));
|
|
156
|
+
server.tool('ensure_http_flow_step', 'Business operation: create or update one HTTP flow step. Use this for outbound HTTP calls instead of choosing type=http manually.', {
|
|
157
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
158
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
159
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
160
|
+
config: z.string().describe('Step config JSON object.'),
|
|
161
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
162
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
163
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
164
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
165
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
166
|
+
...input,
|
|
167
|
+
type: 'http',
|
|
168
|
+
})));
|
|
169
|
+
server.tool('ensure_create_flow_step', 'Business operation: create or update one create-record flow step. Use this for a single table insert instead of writing script code.', {
|
|
170
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
171
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
172
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
173
|
+
config: z.string().describe('Step config JSON object: { "table": "...", "data": { ... } }.'),
|
|
174
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
175
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
176
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
177
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
178
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
179
|
+
...input,
|
|
180
|
+
type: 'create',
|
|
181
|
+
})));
|
|
182
|
+
server.tool('ensure_update_flow_step', 'Business operation: create or update one update-record flow step. Use this for a single table update by id instead of writing script code.', {
|
|
183
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
184
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
185
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
186
|
+
config: z.string().describe('Step config JSON object: { "table": "...", "id": "...", "data": { ... } }.'),
|
|
187
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
188
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
189
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
190
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
191
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
192
|
+
...input,
|
|
193
|
+
type: 'update',
|
|
194
|
+
})));
|
|
195
|
+
server.tool('ensure_delete_flow_step', 'Business operation: create or update one delete-record flow step. Use this for a single table delete by id instead of writing script code.', {
|
|
196
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
197
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
198
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
199
|
+
config: z.string().describe('Step config JSON object: { "table": "...", "id": "..." }.'),
|
|
200
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
201
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
202
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
203
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
204
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
205
|
+
...input,
|
|
206
|
+
type: 'delete',
|
|
207
|
+
})));
|
|
208
|
+
server.tool('ensure_sleep_flow_step', 'Business operation: create or update one sleep/wait flow step. Use this for delays instead of choosing type=sleep manually.', {
|
|
209
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
210
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
211
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
212
|
+
config: z.string().describe('Step config JSON object.'),
|
|
213
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
214
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
215
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
216
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
217
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
218
|
+
...input,
|
|
219
|
+
type: 'sleep',
|
|
220
|
+
})));
|
|
221
|
+
server.tool('ensure_log_flow_step', 'Business operation: create or update one log flow step. Use this for lightweight execution diagnostics instead of script code.', {
|
|
222
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
223
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
224
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
225
|
+
config: z.string().describe('Step config JSON object: { "message": "..." }.'),
|
|
226
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
227
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
228
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
229
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
230
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
231
|
+
...input,
|
|
232
|
+
type: 'log',
|
|
233
|
+
})));
|
|
234
|
+
server.tool('ensure_trigger_flow_step', 'Business operation: create or update one child-flow trigger step. Use this for flow-to-flow orchestration instead of choosing type=trigger_flow manually.', {
|
|
235
|
+
flowName: z.string().optional().describe('Flow name. Use flowName or flowId.'),
|
|
236
|
+
flowId: z.union([z.string(), z.number()]).optional().describe('Flow id. Use flowName or flowId.'),
|
|
237
|
+
key: z.string().describe('Stable step key. Existing step with flow+key is updated.'),
|
|
238
|
+
config: z.string().describe('Step config JSON object.'),
|
|
239
|
+
order: z.number().optional().default(0).describe('Step order. Saved as enfyra_flow_step.stepOrder.'),
|
|
240
|
+
timeout: z.number().int().positive().optional().describe('Step timeout in ms.'),
|
|
241
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable step.'),
|
|
242
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
243
|
+
}, async (input) => jsonText(await ensureFlowStep(ENFYRA_API_URL, {
|
|
244
|
+
...input,
|
|
245
|
+
type: 'trigger_flow',
|
|
246
|
+
})));
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=platform-flow-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-flow-tools.js","sourceRoot":"","sources":["../../src/lib/platform-flow-tools.ts"],"names":[],"mappings":"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"}
|