@datatechsolutions/ui 2.11.92 → 2.11.93

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.
Files changed (70) hide show
  1. package/README.md +39 -58
  2. package/dist/astrlabe/contracts.d.mts +14 -3
  3. package/dist/astrlabe/contracts.d.ts +14 -3
  4. package/dist/astrlabe/index.d.mts +9 -3
  5. package/dist/astrlabe/index.d.ts +9 -3
  6. package/dist/astrlabe/index.js +118 -114
  7. package/dist/astrlabe/index.mjs +4 -4
  8. package/dist/astrlabe/utils.d.mts +1 -1
  9. package/dist/astrlabe/utils.d.ts +1 -1
  10. package/dist/astrlabe/utils.js +9 -9
  11. package/dist/astrlabe/utils.mjs +2 -2
  12. package/dist/astrlabe/workflow-canvas.d.mts +1 -1
  13. package/dist/astrlabe/workflow-canvas.d.ts +1 -1
  14. package/dist/astrlabe/workflow-canvas.js +3 -3
  15. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  16. package/dist/{chunk-FUVJHNNI.js → chunk-3Z366CVM.js} +29 -29
  17. package/dist/{chunk-FUVJHNNI.js.map → chunk-3Z366CVM.js.map} +1 -1
  18. package/dist/{chunk-WNCPAWLC.mjs → chunk-5W7L7BT7.mjs} +13 -2
  19. package/dist/chunk-5W7L7BT7.mjs.map +1 -0
  20. package/dist/{chunk-C7BI5LQ6.js → chunk-C3H4FM4A.js} +13 -2
  21. package/dist/chunk-C3H4FM4A.js.map +1 -0
  22. package/dist/{chunk-SFVSDGNF.js → chunk-FZTOP6EE.js} +113 -55
  23. package/dist/chunk-FZTOP6EE.js.map +1 -0
  24. package/dist/{chunk-WI663467.mjs → chunk-GMZ3PTNK.mjs} +5 -5
  25. package/dist/{chunk-WI663467.mjs.map → chunk-GMZ3PTNK.mjs.map} +1 -1
  26. package/dist/{chunk-3PKG4KFY.mjs → chunk-HUGHELRM.mjs} +64 -7
  27. package/dist/chunk-HUGHELRM.mjs.map +1 -0
  28. package/dist/{chunk-5UU3RQRB.js → chunk-NJS2YC3J.js} +15 -2
  29. package/dist/chunk-NJS2YC3J.js.map +1 -0
  30. package/dist/{chunk-XXYDLYIT.js → chunk-NYQAEPC7.js} +138 -12
  31. package/dist/chunk-NYQAEPC7.js.map +1 -0
  32. package/dist/{chunk-RELMVNNR.mjs → chunk-OLXOBT42.mjs} +3 -3
  33. package/dist/{chunk-RELMVNNR.mjs.map → chunk-OLXOBT42.mjs.map} +1 -1
  34. package/dist/{chunk-MZAS6TG4.mjs → chunk-RXFAQFE7.mjs} +3 -3
  35. package/dist/{chunk-MZAS6TG4.mjs.map → chunk-RXFAQFE7.mjs.map} +1 -1
  36. package/dist/{chunk-DADFESAQ.js → chunk-SMKN4ZVB.js} +4 -4
  37. package/dist/{chunk-DADFESAQ.js.map → chunk-SMKN4ZVB.js.map} +1 -1
  38. package/dist/{chunk-TBPWMPZU.js → chunk-ST3GH5OM.js} +4 -4
  39. package/dist/{chunk-TBPWMPZU.js.map → chunk-ST3GH5OM.js.map} +1 -1
  40. package/dist/{chunk-3SUFSAP6.mjs → chunk-TEQYIK2B.mjs} +125 -7
  41. package/dist/chunk-TEQYIK2B.mjs.map +1 -0
  42. package/dist/{chunk-53SRKVKQ.mjs → chunk-U7XM3N7F.mjs} +15 -2
  43. package/dist/chunk-U7XM3N7F.mjs.map +1 -0
  44. package/dist/{index-AioB90qq.d.mts → index-CoB18TbG.d.ts} +9 -2
  45. package/dist/{index-D5ai0cGZ.d.ts → index-VI9gyJXl.d.mts} +9 -2
  46. package/dist/platform/agents-workspace.js +6 -6
  47. package/dist/platform/agents-workspace.mjs +5 -5
  48. package/dist/platform/index.d.mts +1 -1
  49. package/dist/platform/index.d.ts +1 -1
  50. package/dist/platform/index.js +17 -17
  51. package/dist/platform/index.mjs +8 -8
  52. package/dist/platform/pages/index.d.mts +3 -3
  53. package/dist/platform/pages/index.d.ts +3 -3
  54. package/dist/platform/pages/index.js +12 -12
  55. package/dist/platform/pages/index.mjs +6 -6
  56. package/dist/platform/workflow-api-client.d.mts +2 -2
  57. package/dist/platform/workflow-api-client.d.ts +2 -2
  58. package/dist/platform/workflow-canvas-shell.js +4 -4
  59. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  60. package/dist/{workflow-api-client-zVtc8FIl.d.ts → workflow-api-client-DVLhcpUj.d.ts} +1 -1
  61. package/dist/{workflow-api-client-wLoap-tt.d.mts → workflow-api-client-DpBxHTHr.d.mts} +1 -1
  62. package/package.json +1 -1
  63. package/dist/chunk-3PKG4KFY.mjs.map +0 -1
  64. package/dist/chunk-3SUFSAP6.mjs.map +0 -1
  65. package/dist/chunk-53SRKVKQ.mjs.map +0 -1
  66. package/dist/chunk-5UU3RQRB.js.map +0 -1
  67. package/dist/chunk-C7BI5LQ6.js.map +0 -1
  68. package/dist/chunk-SFVSDGNF.js.map +0 -1
  69. package/dist/chunk-WNCPAWLC.mjs.map +0 -1
  70. package/dist/chunk-XXYDLYIT.js.map +0 -1
@@ -28,6 +28,7 @@ var EN_MESSAGES = {
28
28
  "node.providerIdentityRequired": "must set `connectionId`, `modelId`, or inline `provider` + `model`",
29
29
  "node.inputOrInstructionsRequired": "is required (or `instructions`)",
30
30
  "node.invalidExtractionMode": "must be one of: text | table | structured",
31
+ "node.s3WriteSourceOrBodyRequired": "Either Source URL or Body must be provided",
31
32
  "node.unknownType": "unknown node type `{nodeType}`"
32
33
  };
33
34
  var PT_BR_MESSAGES = {
@@ -58,6 +59,7 @@ var PT_BR_MESSAGES = {
58
59
  "node.providerIdentityRequired": "deve definir `connectionId`, `modelId` ou `provider` + `model` inline",
59
60
  "node.inputOrInstructionsRequired": "\xE9 obrigat\xF3rio (ou `instructions`)",
60
61
  "node.invalidExtractionMode": "deve ser um de: text | table | structured",
62
+ "node.s3WriteSourceOrBodyRequired": "Forne\xE7a Source URL ou Body",
61
63
  "node.unknownType": "tipo de n\xF3 desconhecido `{nodeType}`"
62
64
  };
63
65
  var MESSAGE_CATALOG = {
@@ -318,6 +320,17 @@ function validateNodeConfig(node, options = {}) {
318
320
  }
319
321
  break;
320
322
  }
323
+ case "s3_write": {
324
+ if (!hasNonEmptyString(config, "key")) {
325
+ pushNodeIssue(issues, node, locale, "node.required", "key");
326
+ }
327
+ const hasSource = hasNonEmptyString(config, "sourceUrl");
328
+ const hasBody = hasNonEmptyString(config, "body");
329
+ if (!hasSource && !hasBody) {
330
+ pushNodeIssue(issues, node, locale, "node.s3WriteSourceOrBodyRequired", "sourceUrl");
331
+ }
332
+ break;
333
+ }
321
334
  case "rule":
322
335
  break;
323
336
  case "agent":
@@ -538,5 +551,5 @@ function detectCycle(agentNodes, edges, nodeMap, locale) {
538
551
  }
539
552
 
540
553
  export { topologicalSortAgents, validateGraphNodeConfigs, validateNodeConfig, validateWorkflowGraph };
541
- //# sourceMappingURL=chunk-53SRKVKQ.mjs.map
542
- //# sourceMappingURL=chunk-53SRKVKQ.mjs.map
554
+ //# sourceMappingURL=chunk-U7XM3N7F.mjs.map
555
+ //# sourceMappingURL=chunk-U7XM3N7F.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/astrlabe/utils/workflow-validator.ts"],"names":[],"mappings":"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","file":"chunk-U7XM3N7F.mjs","sourcesContent":["/**\n * Workflow Validator\n * =================\n * Localizes validation output inside the UI package while keeping issue codes\n * stable enough for future contract tests against the backend validator.\n */\n\nimport type { WorkflowEdge, WorkflowGraph, WorkflowNode } from '../contracts'\n\ntype JsonRecord = Record<string, unknown>\n\ntype SupportedLocale = 'en' | 'pt-BR' | 'es' | 'fr' | 'de' | 'it'\n\ntype ValidationMessageKey =\n | 'graph.noAgents'\n | 'graph.missingSource'\n | 'graph.missingTarget'\n | 'graph.orphanNode'\n | 'graph.toolToNonAgent'\n | 'graph.ruleNoAgent'\n | 'graph.cycleDetected'\n | 'graph.multipleStartNodes'\n | 'graph.multipleEndNodes'\n | 'graph.startHasIncoming'\n | 'graph.endHasOutgoing'\n | 'graph.iterationNoOutgoing'\n | 'node.required'\n | 'node.requiredWhenLanguageSet'\n | 'node.codeShapeRequired'\n | 'node.mustBeArray'\n | 'node.mustBeReferenceArray'\n | 'node.mustBeNonEmptyReferenceArray'\n | 'node.assignmentNeedsSourceOrValue'\n | 'node.invalidAggregationMode'\n | 'node.invalidListOperation'\n | 'node.invalidLogicalOperator'\n | 'node.mustBeNumber'\n | 'node.invalidHttpMethod'\n | 'node.providerIdentityRequired'\n | 'node.inputOrInstructionsRequired'\n | 'node.invalidExtractionMode'\n | 'node.s3WriteSourceOrBodyRequired'\n | 'node.unknownType'\n\ntype ValidationParams = Record<string, string | number | undefined>\n\ntype ValidationMessageCatalog = Record<ValidationMessageKey, string>\n\nconst EN_MESSAGES: ValidationMessageCatalog = {\n 'graph.noAgents': 'At least one agent node is required',\n 'graph.missingSource': 'Edge \"{edgeId}\" references non-existent source node \"{source}\"',\n 'graph.missingTarget': 'Edge \"{edgeId}\" references non-existent target node \"{target}\"',\n 'graph.orphanNode': 'Node \"{label}\" ({nodeType}) is not connected to any other node',\n 'graph.toolToNonAgent': 'Tool \"{label}\" can only connect to agent nodes, not {targetType} nodes',\n 'graph.ruleNoAgent': 'Rule \"{label}\" must have an incoming connection from an agent',\n 'graph.cycleDetected': 'Agent nodes form a cycle; workflows must be a DAG',\n 'graph.multipleStartNodes': 'Only one Start node is allowed',\n 'graph.multipleEndNodes': 'Only one End node is allowed',\n 'graph.startHasIncoming': 'Start node cannot have incoming connections',\n 'graph.endHasOutgoing': 'End node cannot have outgoing connections',\n 'graph.iterationNoOutgoing': 'Iteration node must have at least one outgoing connection',\n 'node.required': 'is required',\n 'node.requiredWhenLanguageSet': 'is required when language is set',\n 'node.codeShapeRequired': 'either {language, code} (UI) or {operation, ...} (engine) must be set',\n 'node.mustBeArray': 'must be an array',\n 'node.mustBeReferenceArray': 'must be an array of reference strings',\n 'node.mustBeNonEmptyReferenceArray': 'must be a non-empty array of reference strings',\n 'node.assignmentNeedsSourceOrValue': 'must set either `source` or `value`',\n 'node.invalidAggregationMode': 'must be one of: array | object | concatenate',\n 'node.invalidListOperation': 'must be one of: filter | map | sort | limit | deduplicate | flatten | count | sum | avg',\n 'node.invalidLogicalOperator': 'must be `and` or `or`',\n 'node.mustBeNumber': 'must be a number',\n 'node.invalidHttpMethod': 'must be one of: GET | POST | PUT | PATCH | DELETE',\n 'node.providerIdentityRequired': 'must set `connectionId`, `modelId`, or inline `provider` + `model`',\n 'node.inputOrInstructionsRequired': 'is required (or `instructions`)',\n 'node.invalidExtractionMode': 'must be one of: text | table | structured',\n 'node.s3WriteSourceOrBodyRequired': 'Either Source URL or Body must be provided',\n 'node.unknownType': 'unknown node type `{nodeType}`',\n}\n\nconst PT_BR_MESSAGES: ValidationMessageCatalog = {\n 'graph.noAgents': 'Pelo menos um nó de agente é necessário',\n 'graph.missingSource': 'A aresta \"{edgeId}\" referencia um nó de origem inexistente \"{source}\"',\n 'graph.missingTarget': 'A aresta \"{edgeId}\" referencia um nó de destino inexistente \"{target}\"',\n 'graph.orphanNode': 'O nó \"{label}\" ({nodeType}) não está conectado a nenhum outro nó',\n 'graph.toolToNonAgent': 'A ferramenta \"{label}\" só pode se conectar a nós de agente, não a nós {targetType}',\n 'graph.ruleNoAgent': 'A regra \"{label}\" deve ter uma conexão de entrada vinda de um agente',\n 'graph.cycleDetected': 'Os nós de agente formam um ciclo; workflows devem ser um DAG',\n 'graph.multipleStartNodes': 'Apenas um nó Start é permitido',\n 'graph.multipleEndNodes': 'Apenas um nó End é permitido',\n 'graph.startHasIncoming': 'O nó Start não pode ter conexões de entrada',\n 'graph.endHasOutgoing': 'O nó End não pode ter conexões de saída',\n 'graph.iterationNoOutgoing': 'O nó Iteration deve ter pelo menos uma conexão de saída',\n 'node.required': 'é obrigatório',\n 'node.requiredWhenLanguageSet': 'é obrigatório quando language está definido',\n 'node.codeShapeRequired': 'é necessário definir {language, code} (UI) ou {operation, ...} (engine)',\n 'node.mustBeArray': 'deve ser um array',\n 'node.mustBeReferenceArray': 'deve ser um array de strings de referência',\n 'node.mustBeNonEmptyReferenceArray': 'deve ser um array não vazio de strings de referência',\n 'node.assignmentNeedsSourceOrValue': 'deve definir `source` ou `value`',\n 'node.invalidAggregationMode': 'deve ser um de: array | object | concatenate',\n 'node.invalidListOperation': 'deve ser um de: filter | map | sort | limit | deduplicate | flatten | count | sum | avg',\n 'node.invalidLogicalOperator': 'deve ser `and` ou `or`',\n 'node.mustBeNumber': 'deve ser um número',\n 'node.invalidHttpMethod': 'deve ser um de: GET | POST | PUT | PATCH | DELETE',\n 'node.providerIdentityRequired': 'deve definir `connectionId`, `modelId` ou `provider` + `model` inline',\n 'node.inputOrInstructionsRequired': 'é obrigatório (ou `instructions`)',\n 'node.invalidExtractionMode': 'deve ser um de: text | table | structured',\n 'node.s3WriteSourceOrBodyRequired': 'Forneça Source URL ou Body',\n 'node.unknownType': 'tipo de nó desconhecido `{nodeType}`',\n}\n\nconst MESSAGE_CATALOG: Record<SupportedLocale, ValidationMessageCatalog> = {\n en: EN_MESSAGES,\n 'pt-BR': PT_BR_MESSAGES,\n es: EN_MESSAGES,\n fr: EN_MESSAGES,\n de: EN_MESSAGES,\n it: EN_MESSAGES,\n}\n\nexport type ValidationLocale = SupportedLocale | string\n\nexport type ValidationIssueCode =\n | 'graph.noAgents'\n | 'graph.missingSource'\n | 'graph.missingTarget'\n | 'graph.orphanNode'\n | 'graph.toolToNonAgent'\n | 'graph.ruleNoAgent'\n | 'graph.cycleDetected'\n | 'graph.multipleStartNodes'\n | 'graph.multipleEndNodes'\n | 'graph.startHasIncoming'\n | 'graph.endHasOutgoing'\n | 'graph.iterationNoOutgoing'\n | 'node.required'\n | 'node.requiredWhenLanguageSet'\n | 'node.codeShapeRequired'\n | 'node.mustBeArray'\n | 'node.mustBeReferenceArray'\n | 'node.mustBeNonEmptyReferenceArray'\n | 'node.assignmentNeedsSourceOrValue'\n | 'node.invalidAggregationMode'\n | 'node.invalidListOperation'\n | 'node.invalidLogicalOperator'\n | 'node.mustBeNumber'\n | 'node.invalidHttpMethod'\n | 'node.providerIdentityRequired'\n | 'node.inputOrInstructionsRequired'\n | 'node.invalidExtractionMode'\n | 'node.s3WriteSourceOrBodyRequired'\n | 'node.unknownType'\n\nexport type ValidationIssue = {\n code: ValidationIssueCode\n message: string\n params?: ValidationParams\n}\n\nexport type NodeValidationIssue = ValidationIssue & {\n nodeId: string\n nodeType: string\n field?: string\n}\n\nexport type ValidationResult = {\n valid: boolean\n errors: string[]\n issues: ValidationIssue[]\n nodeIssues: NodeValidationIssue[]\n}\n\nexport type ValidationOptions = {\n locale?: ValidationLocale\n}\n\nfunction normalizeLocale(locale?: ValidationLocale): SupportedLocale {\n if (!locale) {\n return 'en'\n }\n\n if (locale in MESSAGE_CATALOG) {\n return locale as SupportedLocale\n }\n\n const lowercase = locale.toLowerCase()\n if (lowercase.startsWith('pt')) {\n return 'pt-BR'\n }\n\n if (lowercase.startsWith('es')) {\n return 'es'\n }\n\n if (lowercase.startsWith('fr')) {\n return 'fr'\n }\n\n if (lowercase.startsWith('de')) {\n return 'de'\n }\n\n if (lowercase.startsWith('it')) {\n return 'it'\n }\n\n return 'en'\n}\n\nfunction template(messageKey: ValidationMessageKey, params?: ValidationParams, locale?: ValidationLocale): string {\n const catalog = MESSAGE_CATALOG[normalizeLocale(locale)] ?? EN_MESSAGES\n const message = catalog[messageKey] ?? EN_MESSAGES[messageKey]\n return message.replace(/\\{([^}]+)\\}/g, (_, key: string) => String(params?.[key] ?? ''))\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction getConfig(node: WorkflowNode): JsonRecord {\n return isRecord(node.data.config) ? node.data.config : {}\n}\n\nfunction getString(config: JsonRecord, field: string): string | undefined {\n const value = config[field]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction hasNonEmptyString(config: JsonRecord, field: string): boolean {\n const value = getString(config, field)\n return typeof value === 'string' && value.trim().length > 0\n}\n\nfunction getArray(config: JsonRecord, field: string): unknown[] | undefined {\n const value = config[field]\n return Array.isArray(value) ? value : undefined\n}\n\nfunction getNumber(config: JsonRecord, field: string): number | undefined {\n const value = config[field]\n return typeof value === 'number' ? value : undefined\n}\n\nfunction pushNodeIssue(\n issues: NodeValidationIssue[],\n node: WorkflowNode,\n locale: ValidationLocale | undefined,\n code: ValidationIssueCode,\n field?: string,\n params?: ValidationParams,\n) {\n issues.push({\n nodeId: node.id,\n nodeType: node.type,\n field,\n code,\n params,\n message: template(code, params, locale),\n })\n}\n\nfunction pushIssue(\n issues: ValidationIssue[],\n locale: ValidationLocale | undefined,\n code: ValidationIssueCode,\n params?: ValidationParams,\n) {\n issues.push({\n code,\n params,\n message: template(code, params, locale),\n })\n}\n\nfunction ensureProviderIdentifiable(\n node: WorkflowNode,\n config: JsonRecord,\n issues: NodeValidationIssue[],\n locale?: ValidationLocale,\n) {\n const hasConnection = hasNonEmptyString(config, 'connectionId')\n const hasModelId = hasNonEmptyString(config, 'modelId')\n const hasInline = hasNonEmptyString(config, 'provider') && hasNonEmptyString(config, 'model')\n if (!hasConnection && !hasModelId && !hasInline) {\n pushNodeIssue(issues, node, locale, 'node.providerIdentityRequired', 'provider')\n }\n}\n\nfunction formatNodeIssue(issue: NodeValidationIssue, nodeMap: Map<string, WorkflowNode>): string {\n const label = nodeMap.get(issue.nodeId)?.data.label ?? issue.nodeId\n const fieldRef = issue.field ? ` (${issue.field})` : ''\n return `Node \"${label}\" [${issue.nodeType}]${fieldRef}: ${issue.message}`\n}\n\nexport function validateNodeConfig(node: WorkflowNode, options: ValidationOptions = {}): NodeValidationIssue[] {\n const locale = options.locale\n const config = getConfig(node)\n const issues: NodeValidationIssue[] = []\n const nodeType = node.type as string\n\n switch (nodeType) {\n case 'start':\n case 'note':\n case 'group':\n case 'dashboard_output':\n break\n\n case 'end': {\n if ('outputVariables' in config && !Array.isArray(config.outputVariables)) {\n pushNodeIssue(issues, node, locale, 'node.mustBeReferenceArray', 'outputVariables')\n } else if (Array.isArray(config.outputs)) {\n config.outputs.forEach((entry, index) => {\n if (!isRecord(entry) || typeof entry.key !== 'string' || entry.key.trim().length === 0) {\n pushNodeIssue(issues, node, locale, 'node.required', `outputs[${index}].key`)\n }\n if (!isRecord(entry) || typeof entry.from !== 'string' || entry.from.trim().length === 0) {\n pushNodeIssue(issues, node, locale, 'node.required', `outputs[${index}].from`)\n }\n })\n }\n break\n }\n\n case 'code': {\n const hasLanguage = 'language' in config\n const hasOperation = 'operation' in config\n if (hasLanguage) {\n if (!hasNonEmptyString(config, 'code')) {\n pushNodeIssue(issues, node, locale, 'node.requiredWhenLanguageSet', 'code')\n }\n } else if (!hasOperation) {\n pushNodeIssue(issues, node, locale, 'node.codeShapeRequired', 'operation')\n }\n break\n }\n\n case 'iteration_start': {\n for (const field of ['iteratorVariable', 'itemVariable', 'indexVariable']) {\n if (!hasNonEmptyString(config, field)) {\n pushNodeIssue(issues, node, locale, 'node.required', field)\n }\n }\n break\n }\n\n case 'entity':\n if (!hasNonEmptyString(config, 'entityMasterId')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'entityMasterId')\n }\n break\n\n case 'datasource':\n if (!hasNonEmptyString(config, 'datasourceId')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'datasourceId')\n }\n break\n\n case 'model_provider':\n if (!hasNonEmptyString(config, 'providerType')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'providerType')\n }\n break\n\n case 'variable_assigner': {\n const assignments = getArray(config, 'assignments')\n if (!assignments) {\n pushNodeIssue(issues, node, locale, 'node.mustBeArray', 'assignments')\n return issues\n }\n\n assignments.forEach((entry, index) => {\n const record = isRecord(entry) ? entry : {}\n const target = typeof record.target === 'string' && record.target.trim().length > 0\n const legacyTarget = typeof record.key === 'string' && record.key.trim().length > 0\n if (!target && !legacyTarget) {\n pushNodeIssue(issues, node, locale, 'node.required', `assignments[${index}].target`)\n }\n\n const source = typeof record.source === 'string' && record.source.trim().length > 0\n const legacySource = typeof record.from === 'string' && record.from.trim().length > 0\n const hasValue = 'value' in record\n if (!source && !legacySource && !hasValue) {\n pushNodeIssue(issues, node, locale, 'node.assignmentNeedsSourceOrValue', `assignments[${index}]`)\n }\n })\n break\n }\n\n case 'variable_aggregator': {\n if ('inputVariables' in config) {\n const inputVariables = getArray(config, 'inputVariables')\n if (!inputVariables || inputVariables.length === 0) {\n pushNodeIssue(issues, node, locale, 'node.mustBeNonEmptyReferenceArray', 'inputVariables')\n }\n if (!hasNonEmptyString(config, 'outputVariable')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'outputVariable')\n }\n const aggregationMode = getString(config, 'aggregationMode')\n if (aggregationMode && !['array', 'object', 'concatenate'].includes(aggregationMode)) {\n pushNodeIssue(issues, node, locale, 'node.invalidAggregationMode', 'aggregationMode')\n }\n }\n break\n }\n\n case 'list_operator': {\n const operation = getString(config, 'operation') ?? ''\n if (!operation) {\n pushNodeIssue(issues, node, locale, 'node.required', 'operation')\n } else if (!['filter', 'map', 'sort', 'limit', 'deduplicate', 'flatten', 'count', 'sum', 'avg'].includes(operation)) {\n pushNodeIssue(issues, node, locale, 'node.invalidListOperation', 'operation')\n }\n\n const inputVariable = getString(config, 'inputVariable')\n const legacySource = getString(config, 'source')\n if (!(inputVariable && inputVariable.trim()) && !(legacySource && legacySource.trim())) {\n pushNodeIssue(issues, node, locale, 'node.required', 'inputVariable')\n }\n break\n }\n\n case 'template_transform':\n if (!hasNonEmptyString(config, 'template')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'template')\n }\n break\n\n case 'answer': {\n const outputTemplate = getString(config, 'outputTemplate')\n const legacyAnswer = getString(config, 'answer')\n if (!(outputTemplate && outputTemplate.trim()) && !(legacyAnswer && legacyAnswer.trim())) {\n pushNodeIssue(issues, node, locale, 'node.required', 'outputTemplate')\n }\n break\n }\n\n case 'if_else': {\n const conditions = getArray(config, 'conditions')\n if (!conditions || conditions.length === 0) {\n pushNodeIssue(issues, node, locale, 'node.mustBeArray', 'conditions')\n } else {\n conditions.forEach((condition, index) => {\n const record = isRecord(condition) ? condition : {}\n if (typeof record.variable !== 'string' || record.variable.trim().length === 0) {\n pushNodeIssue(issues, node, locale, 'node.required', `conditions[${index}].variable`)\n }\n if (typeof record.operator !== 'string' || record.operator.trim().length === 0) {\n pushNodeIssue(issues, node, locale, 'node.required', `conditions[${index}].operator`)\n }\n })\n }\n\n const logicalOperator = getString(config, 'logicalOperator')\n if (logicalOperator && !['and', 'or'].includes(logicalOperator)) {\n pushNodeIssue(issues, node, locale, 'node.invalidLogicalOperator', 'logicalOperator')\n }\n break\n }\n\n case 'iteration': {\n const iteratorVariable = getString(config, 'iteratorVariable')\n const legacySource = getString(config, 'source')\n if (!(iteratorVariable && iteratorVariable.trim()) && !(legacySource && legacySource.trim())) {\n pushNodeIssue(issues, node, locale, 'node.required', 'iteratorVariable')\n }\n if ('maxIterations' in config && getNumber(config, 'maxIterations') === undefined) {\n pushNodeIssue(issues, node, locale, 'node.mustBeNumber', 'maxIterations')\n }\n break\n }\n\n case 'http_request': {\n const method = (getString(config, 'method') ?? '').toUpperCase()\n if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {\n pushNodeIssue(issues, node, locale, 'node.invalidHttpMethod', 'method')\n }\n if (!hasNonEmptyString(config, 'url')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'url')\n }\n break\n }\n\n case 's3_write': {\n // Mirrors the Rust `s3_write` arm in\n // `lambda-rs/crates/platform-workflow-handlers/src/engine/validation.rs`.\n // `key` is required; either `sourceUrl` or `body` must be present.\n if (!hasNonEmptyString(config, 'key')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'key')\n }\n const hasSource = hasNonEmptyString(config, 'sourceUrl')\n const hasBody = hasNonEmptyString(config, 'body')\n if (!hasSource && !hasBody) {\n pushNodeIssue(issues, node, locale, 'node.s3WriteSourceOrBodyRequired', 'sourceUrl')\n }\n break\n }\n\n case 'rule':\n break\n\n case 'agent':\n if (!hasNonEmptyString(config, 'userPrompt')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'userPrompt')\n }\n ensureProviderIdentifiable(node, config, issues, locale)\n break\n\n case 'question_classifier': {\n ensureProviderIdentifiable(node, config, issues, locale)\n const input = getString(config, 'input')\n const instructions = getString(config, 'instructions')\n if (!(input && input.trim()) && !(instructions && instructions.trim())) {\n pushNodeIssue(issues, node, locale, 'node.inputOrInstructionsRequired', 'input')\n }\n\n const categories = getArray(config, 'categories') ?? getArray(config, 'classes')\n if (!categories || categories.length === 0) {\n pushNodeIssue(issues, node, locale, 'node.mustBeArray', 'categories')\n }\n break\n }\n\n case 'parameter_extractor': {\n ensureProviderIdentifiable(node, config, issues, locale)\n if (!hasNonEmptyString(config, 'input')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'input')\n }\n const parameters = getArray(config, 'parameters')\n if (!parameters || parameters.length === 0) {\n pushNodeIssue(issues, node, locale, 'node.mustBeArray', 'parameters')\n }\n break\n }\n\n case 'tool':\n if (!hasNonEmptyString(config, 'toolId')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'toolId')\n }\n break\n\n case 'agent_tool':\n if (!hasNonEmptyString(config, 'agentId')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'agentId')\n }\n if (!hasNonEmptyString(config, 'toolId')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'toolId')\n }\n break\n\n case 'knowledge_base':\n if (!hasNonEmptyString(config, 'sourceId')) {\n pushNodeIssue(issues, node, locale, 'node.required', 'sourceId')\n }\n if ('topK' in config && getNumber(config, 'topK') === undefined) {\n pushNodeIssue(issues, node, locale, 'node.mustBeNumber', 'topK')\n }\n if ('similarityThreshold' in config && getNumber(config, 'similarityThreshold') === undefined) {\n pushNodeIssue(issues, node, locale, 'node.mustBeNumber', 'similarityThreshold')\n }\n break\n\n case 'document_extractor': {\n const extractionMode = getString(config, 'extractionMode')\n if (extractionMode && !['text', 'table', 'structured'].includes(extractionMode)) {\n pushNodeIssue(issues, node, locale, 'node.invalidExtractionMode', 'extractionMode')\n }\n break\n }\n\n default:\n pushNodeIssue(issues, node, locale, 'node.unknownType', undefined, { nodeType })\n break\n }\n\n return issues\n}\n\nexport function validateGraphNodeConfigs(graph: WorkflowGraph, options: ValidationOptions = {}): NodeValidationIssue[] {\n return graph.nodes.flatMap((node) => validateNodeConfig(node, options))\n}\n\nexport function validateWorkflowGraph(graph: WorkflowGraph, options: ValidationOptions = {}): ValidationResult {\n const locale = options.locale\n const issues: ValidationIssue[] = []\n const nodeMap = new Map<string, WorkflowNode>()\n\n for (const node of graph.nodes) {\n nodeMap.set(node.id, node)\n }\n\n const agentNodes = graph.nodes.filter((node) => node.type === 'agent')\n if (agentNodes.length === 0) {\n pushIssue(issues, locale, 'graph.noAgents')\n }\n\n for (const edge of graph.edges) {\n if (!nodeMap.has(edge.source)) {\n pushIssue(issues, locale, 'graph.missingSource', { edgeId: edge.id, source: edge.source })\n }\n if (!nodeMap.has(edge.target)) {\n pushIssue(issues, locale, 'graph.missingTarget', { edgeId: edge.id, target: edge.target })\n }\n }\n\n const connectedNodeIds = new Set<string>()\n for (const edge of graph.edges) {\n connectedNodeIds.add(edge.source)\n connectedNodeIds.add(edge.target)\n }\n\n for (const node of graph.nodes) {\n if (node.type === 'note') continue\n if (!connectedNodeIds.has(node.id)) {\n pushIssue(issues, locale, 'graph.orphanNode', {\n label: node.data.label ?? node.id,\n nodeType: node.type,\n })\n }\n }\n\n for (const edge of graph.edges) {\n const sourceNode = nodeMap.get(edge.source)\n const targetNode = nodeMap.get(edge.target)\n if (!sourceNode || !targetNode) continue\n\n if (sourceNode.type === 'tool' && targetNode.type !== 'agent') {\n pushIssue(issues, locale, 'graph.toolToNonAgent', {\n label: sourceNode.data.label ?? sourceNode.id,\n targetType: targetNode.type,\n })\n }\n }\n\n const ruleNodes = graph.nodes.filter((node) => node.type === 'rule')\n for (const ruleNode of ruleNodes) {\n const incomingEdges = graph.edges.filter((edge) => edge.target === ruleNode.id)\n const hasAgentSource = incomingEdges.some((edge) => nodeMap.get(edge.source)?.type === 'agent')\n if (incomingEdges.length === 0 || !hasAgentSource) {\n pushIssue(issues, locale, 'graph.ruleNoAgent', {\n label: ruleNode.data.label ?? ruleNode.id,\n })\n }\n }\n\n if (agentNodes.length > 1) {\n const cycleIssue = detectCycle(agentNodes, graph.edges, nodeMap, locale)\n if (cycleIssue) {\n issues.push(cycleIssue)\n }\n }\n\n const startNodes = graph.nodes.filter((node) => node.type === 'start')\n if (startNodes.length > 1) {\n pushIssue(issues, locale, 'graph.multipleStartNodes')\n }\n\n const endNodes = graph.nodes.filter((node) => node.type === 'end')\n if (endNodes.length > 1) {\n pushIssue(issues, locale, 'graph.multipleEndNodes')\n }\n\n for (const startNode of startNodes) {\n const incomingEdges = graph.edges.filter((edge) => edge.target === startNode.id)\n if (incomingEdges.length > 0) {\n pushIssue(issues, locale, 'graph.startHasIncoming')\n }\n }\n\n for (const endNode of endNodes) {\n const outgoingEdges = graph.edges.filter((edge) => edge.source === endNode.id)\n if (outgoingEdges.length > 0) {\n pushIssue(issues, locale, 'graph.endHasOutgoing')\n }\n }\n\n const iterationNodes = graph.nodes.filter((node) => node.type === 'iteration')\n for (const iterationNode of iterationNodes) {\n const outgoingEdges = graph.edges.filter((edge) => edge.source === iterationNode.id)\n if (outgoingEdges.length === 0) {\n pushIssue(issues, locale, 'graph.iterationNoOutgoing')\n }\n }\n\n const nodeIssues = validateGraphNodeConfigs(graph, options)\n const errors = [\n ...issues.map((issue) => issue.message),\n ...nodeIssues.map((issue) => formatNodeIssue(issue, nodeMap)),\n ]\n\n return {\n valid: errors.length === 0,\n errors,\n issues,\n nodeIssues,\n }\n}\n\nexport function topologicalSortAgents(\n agentNodes: WorkflowNode[],\n edges: WorkflowEdge[],\n nodeMap: Map<string, WorkflowNode>,\n): WorkflowNode[] {\n const adjacency = new Map<string, string[]>()\n const inDegree = new Map<string, number>()\n\n for (const node of agentNodes) {\n adjacency.set(node.id, [])\n inDegree.set(node.id, 0)\n }\n\n for (const edge of edges) {\n const sourceNode = nodeMap.get(edge.source)\n const targetNode = nodeMap.get(edge.target)\n if (!sourceNode || !targetNode) continue\n\n if (sourceNode.type === 'agent' && targetNode.type === 'agent') {\n adjacency.get(edge.source)?.push(edge.target)\n inDegree.set(edge.target, (inDegree.get(edge.target) ?? 0) + 1)\n }\n }\n\n const queue = agentNodes\n .filter((node) => (inDegree.get(node.id) ?? 0) === 0)\n .map((node) => node.id)\n\n const sortedIds: string[] = []\n\n while (queue.length > 0) {\n const nodeId = queue.shift()\n if (!nodeId) break\n sortedIds.push(nodeId)\n\n const neighbors = adjacency.get(nodeId) ?? []\n for (const neighborId of neighbors) {\n const newInDegree = (inDegree.get(neighborId) ?? 1) - 1\n inDegree.set(neighborId, newInDegree)\n if (newInDegree === 0) {\n queue.push(neighborId)\n }\n }\n }\n\n if (sortedIds.length !== agentNodes.length) {\n throw new Error('Cycle detected in agent graph')\n }\n\n return sortedIds.map((nodeId) => nodeMap.get(nodeId)).filter((node): node is WorkflowNode => Boolean(node))\n}\n\nfunction detectCycle(\n agentNodes: WorkflowNode[],\n edges: WorkflowEdge[],\n nodeMap: Map<string, WorkflowNode>,\n locale?: ValidationLocale,\n): ValidationIssue | null {\n try {\n topologicalSortAgents(agentNodes, edges, nodeMap)\n return null\n } catch {\n return {\n code: 'graph.cycleDetected',\n message: template('graph.cycleDetected', undefined, locale),\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.mjs';
1
+ import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, S3WriteNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.js';
2
2
 
3
3
  type WorkflowCardDisplayMode = 'detailed' | 'compact';
4
4
  type WorkflowEntityDefinition = {
@@ -112,6 +112,13 @@ type HttpRequestNodeData = {
112
112
  onDelete?: (nodeId: string) => void;
113
113
  onEdit?: (nodeId: string) => void;
114
114
  };
115
+ type S3WriteNodeData = {
116
+ config: S3WriteNodeConfig;
117
+ label: string;
118
+ displayMode?: WorkflowCardDisplayMode;
119
+ onDelete?: (nodeId: string) => void;
120
+ onEdit?: (nodeId: string) => void;
121
+ };
115
122
  type TemplateTransformNodeData = {
116
123
  config: TemplateTransformNodeConfig;
117
124
  label: string;
@@ -205,4 +212,4 @@ type GroupNodeData = {
205
212
  onRemoveFromCanvas?: (nodeId: string) => void;
206
213
  };
207
214
 
208
- export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, TemplateTransformNodeData as c, IterationNodeData as d, AnswerNodeData as e, VariableAggregatorNodeData as f, IterationStartNodeData as g, AgentNodeTool as h };
215
+ export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, S3WriteNodeData as c, TemplateTransformNodeData as d, IterationNodeData as e, AnswerNodeData as f, VariableAggregatorNodeData as g, IterationStartNodeData as h, AgentNodeTool as i };
@@ -1,4 +1,4 @@
1
- import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.js';
1
+ import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, S3WriteNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.mjs';
2
2
 
3
3
  type WorkflowCardDisplayMode = 'detailed' | 'compact';
4
4
  type WorkflowEntityDefinition = {
@@ -112,6 +112,13 @@ type HttpRequestNodeData = {
112
112
  onDelete?: (nodeId: string) => void;
113
113
  onEdit?: (nodeId: string) => void;
114
114
  };
115
+ type S3WriteNodeData = {
116
+ config: S3WriteNodeConfig;
117
+ label: string;
118
+ displayMode?: WorkflowCardDisplayMode;
119
+ onDelete?: (nodeId: string) => void;
120
+ onEdit?: (nodeId: string) => void;
121
+ };
115
122
  type TemplateTransformNodeData = {
116
123
  config: TemplateTransformNodeConfig;
117
124
  label: string;
@@ -205,4 +212,4 @@ type GroupNodeData = {
205
212
  onRemoveFromCanvas?: (nodeId: string) => void;
206
213
  };
207
214
 
208
- export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, TemplateTransformNodeData as c, IterationNodeData as d, AnswerNodeData as e, VariableAggregatorNodeData as f, IterationStartNodeData as g, AgentNodeTool as h };
215
+ export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, S3WriteNodeData as c, TemplateTransformNodeData as d, IterationNodeData as e, AnswerNodeData as f, VariableAggregatorNodeData as g, IterationStartNodeData as h, AgentNodeTool as i };
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkFUVJHNNI_js = require('../chunk-FUVJHNNI.js');
4
+ var chunk3Z366CVM_js = require('../chunk-3Z366CVM.js');
5
5
  require('../chunk-DIMLLLZR.js');
6
- require('../chunk-SFVSDGNF.js');
6
+ require('../chunk-FZTOP6EE.js');
7
7
  require('../chunk-55H6WZQP.js');
8
- require('../chunk-5UU3RQRB.js');
9
- require('../chunk-XXYDLYIT.js');
8
+ require('../chunk-NJS2YC3J.js');
9
+ require('../chunk-NYQAEPC7.js');
10
10
  require('../chunk-ZKUYNCAG.js');
11
11
  require('../chunk-UZ3CMNUJ.js');
12
12
  require('../chunk-YXN2K77G.js');
@@ -14,13 +14,13 @@ require('../chunk-S7KHTUHA.js');
14
14
  require('../chunk-ARVLVWUC.js');
15
15
  require('../chunk-FAGDZEKM.js');
16
16
  require('../chunk-P4YYEM4B.js');
17
- require('../chunk-C7BI5LQ6.js');
17
+ require('../chunk-C3H4FM4A.js');
18
18
 
19
19
 
20
20
 
21
21
  Object.defineProperty(exports, "AgentsWorkspace", {
22
22
  enumerable: true,
23
- get: function () { return chunkFUVJHNNI_js.AgentsWorkspace; }
23
+ get: function () { return chunk3Z366CVM_js.AgentsWorkspace; }
24
24
  });
25
25
  //# sourceMappingURL=agents-workspace.js.map
26
26
  //# sourceMappingURL=agents-workspace.js.map
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- export { AgentsWorkspace } from '../chunk-WI663467.mjs';
2
+ export { AgentsWorkspace } from '../chunk-GMZ3PTNK.mjs';
3
3
  import '../chunk-ZHUPYX4Q.mjs';
4
- import '../chunk-3PKG4KFY.mjs';
4
+ import '../chunk-HUGHELRM.mjs';
5
5
  import '../chunk-JB6RNAD2.mjs';
6
- import '../chunk-53SRKVKQ.mjs';
7
- import '../chunk-3SUFSAP6.mjs';
6
+ import '../chunk-U7XM3N7F.mjs';
7
+ import '../chunk-TEQYIK2B.mjs';
8
8
  import '../chunk-A3BFURJB.mjs';
9
9
  import '../chunk-D2JF6C3E.mjs';
10
10
  import '../chunk-7VJ7CMMT.mjs';
@@ -12,6 +12,6 @@ import '../chunk-QWG2FMUN.mjs';
12
12
  import '../chunk-PU2KTO4O.mjs';
13
13
  import '../chunk-SYNVNTLJ.mjs';
14
14
  import '../chunk-OZNTQROP.mjs';
15
- import '../chunk-WNCPAWLC.mjs';
15
+ import '../chunk-5W7L7BT7.mjs';
16
16
  //# sourceMappingURL=agents-workspace.mjs.map
17
17
  //# sourceMappingURL=agents-workspace.mjs.map
@@ -90,7 +90,7 @@ declare function useWorkflowExecution(workflowId: string): {
90
90
  execute: (inputVariables?: Record<string, VariableValue>) => Promise<void>;
91
91
  stop: () => void;
92
92
  runId: string | null;
93
- runStatus: "error" | "idle" | "streaming" | "completed" | "failed";
93
+ runStatus: "error" | "idle" | "completed" | "failed" | "streaming";
94
94
  };
95
95
 
96
96
  type RunEventStreamState = {
@@ -90,7 +90,7 @@ declare function useWorkflowExecution(workflowId: string): {
90
90
  execute: (inputVariables?: Record<string, VariableValue>) => Promise<void>;
91
91
  stop: () => void;
92
92
  runId: string | null;
93
- runStatus: "error" | "idle" | "streaming" | "completed" | "failed";
93
+ runStatus: "error" | "idle" | "completed" | "failed" | "streaming";
94
94
  };
95
95
 
96
96
  type RunEventStreamState = {
@@ -1,26 +1,26 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkDADFESAQ_js = require('../chunk-DADFESAQ.js');
4
+ var chunkSMKN4ZVB_js = require('../chunk-SMKN4ZVB.js');
5
5
  var chunkXSBZNPUO_js = require('../chunk-XSBZNPUO.js');
6
6
  var chunk2RDGJXYZ_js = require('../chunk-2RDGJXYZ.js');
7
7
  var chunkP4RVGMZL_js = require('../chunk-P4RVGMZL.js');
8
8
  var chunkMEEFOZC4_js = require('../chunk-MEEFOZC4.js');
9
- var chunkTBPWMPZU_js = require('../chunk-TBPWMPZU.js');
9
+ var chunkST3GH5OM_js = require('../chunk-ST3GH5OM.js');
10
10
  var chunk43GCSCQA_js = require('../chunk-43GCSCQA.js');
11
11
  var chunkBUI7BCUN_js = require('../chunk-BUI7BCUN.js');
12
12
  var chunkDB64YDV2_js = require('../chunk-DB64YDV2.js');
13
13
  var chunkNA57KK4O_js = require('../chunk-NA57KK4O.js');
14
14
  var chunkPTGPQJZJ_js = require('../chunk-PTGPQJZJ.js');
15
- var chunkFUVJHNNI_js = require('../chunk-FUVJHNNI.js');
15
+ var chunk3Z366CVM_js = require('../chunk-3Z366CVM.js');
16
16
  require('../chunk-DIMLLLZR.js');
17
17
  var chunk24QKSC74_js = require('../chunk-24QKSC74.js');
18
18
  var chunkHZ4LOVHM_js = require('../chunk-HZ4LOVHM.js');
19
19
  var chunk6PBTB5ZX_js = require('../chunk-6PBTB5ZX.js');
20
- require('../chunk-SFVSDGNF.js');
20
+ require('../chunk-FZTOP6EE.js');
21
21
  require('../chunk-55H6WZQP.js');
22
- require('../chunk-5UU3RQRB.js');
23
- require('../chunk-XXYDLYIT.js');
22
+ require('../chunk-NJS2YC3J.js');
23
+ require('../chunk-NYQAEPC7.js');
24
24
  var chunkZKUYNCAG_js = require('../chunk-ZKUYNCAG.js');
25
25
  require('../chunk-UZ3CMNUJ.js');
26
26
  var chunkYXN2K77G_js = require('../chunk-YXN2K77G.js');
@@ -28,7 +28,7 @@ var chunkS7KHTUHA_js = require('../chunk-S7KHTUHA.js');
28
28
  var chunkARVLVWUC_js = require('../chunk-ARVLVWUC.js');
29
29
  require('../chunk-FAGDZEKM.js');
30
30
  require('../chunk-P4YYEM4B.js');
31
- require('../chunk-C7BI5LQ6.js');
31
+ require('../chunk-C3H4FM4A.js');
32
32
  var jsxRuntime = require('react/jsx-runtime');
33
33
  var react = require('react');
34
34
  var client = require('@datatechsolutions/windsock/client');
@@ -229,7 +229,7 @@ function UsersSettingsSection({ normalizeRole }) {
229
229
  void reload();
230
230
  }, [currentOrganizationId]);
231
231
  return /* @__PURE__ */ jsxRuntime.jsx(
232
- chunkTBPWMPZU_js.UsersPageView,
232
+ chunkST3GH5OM_js.UsersPageView,
233
233
  {
234
234
  labels: {
235
235
  title: t("title"),
@@ -272,7 +272,7 @@ function RolesSettingsSection({ roleDefinitions, roleOptions, normalizeRole }) {
272
272
  chunk6PBTB5ZX_js.listUsers({ organizationId: currentOrganizationId }).then((result) => setUsers(result.items.map((row) => mapAdminUser(row, normalizeRole)))).catch((error) => notifyError(error.message));
273
273
  }, [currentOrganizationId, notifyError, normalizeRole]);
274
274
  return /* @__PURE__ */ jsxRuntime.jsx(
275
- chunkTBPWMPZU_js.RolesPageView,
275
+ chunkST3GH5OM_js.RolesPageView,
276
276
  {
277
277
  roleDefinitions,
278
278
  roleOptions,
@@ -5263,7 +5263,7 @@ function KoriAssistantDemo({ locale, hideHeader } = {}) {
5263
5263
 
5264
5264
  Object.defineProperty(exports, "WorkflowCanvasShell", {
5265
5265
  enumerable: true,
5266
- get: function () { return chunkDADFESAQ_js.WorkflowCanvasShell; }
5266
+ get: function () { return chunkSMKN4ZVB_js.WorkflowCanvasShell; }
5267
5267
  });
5268
5268
  Object.defineProperty(exports, "AdminOrganizationForm", {
5269
5269
  enumerable: true,
@@ -5339,7 +5339,7 @@ Object.defineProperty(exports, "ImpersonationBanner", {
5339
5339
  });
5340
5340
  Object.defineProperty(exports, "WorkflowWorkspace", {
5341
5341
  enumerable: true,
5342
- get: function () { return chunkTBPWMPZU_js.WorkflowWorkspace; }
5342
+ get: function () { return chunkST3GH5OM_js.WorkflowWorkspace; }
5343
5343
  });
5344
5344
  Object.defineProperty(exports, "PlatformSettings", {
5345
5345
  enumerable: true,
@@ -5403,27 +5403,27 @@ Object.defineProperty(exports, "BillingPanel", {
5403
5403
  });
5404
5404
  Object.defineProperty(exports, "AgentsWorkspace", {
5405
5405
  enumerable: true,
5406
- get: function () { return chunkFUVJHNNI_js.AgentsWorkspace; }
5406
+ get: function () { return chunk3Z366CVM_js.AgentsWorkspace; }
5407
5407
  });
5408
5408
  Object.defineProperty(exports, "applyWorkflowExecutionEventToStore", {
5409
5409
  enumerable: true,
5410
- get: function () { return chunkFUVJHNNI_js.applyWorkflowExecutionEventToStore; }
5410
+ get: function () { return chunk3Z366CVM_js.applyWorkflowExecutionEventToStore; }
5411
5411
  });
5412
5412
  Object.defineProperty(exports, "resetWorkflowRunPresentation", {
5413
5413
  enumerable: true,
5414
- get: function () { return chunkFUVJHNNI_js.resetWorkflowRunPresentation; }
5414
+ get: function () { return chunk3Z366CVM_js.resetWorkflowRunPresentation; }
5415
5415
  });
5416
5416
  Object.defineProperty(exports, "useRunEvents", {
5417
5417
  enumerable: true,
5418
- get: function () { return chunkFUVJHNNI_js.useRunEvents; }
5418
+ get: function () { return chunk3Z366CVM_js.useRunEvents; }
5419
5419
  });
5420
5420
  Object.defineProperty(exports, "useWorkflowExecution", {
5421
5421
  enumerable: true,
5422
- get: function () { return chunkFUVJHNNI_js.useWorkflowExecution; }
5422
+ get: function () { return chunk3Z366CVM_js.useWorkflowExecution; }
5423
5423
  });
5424
5424
  Object.defineProperty(exports, "useWorkflowRunPresentation", {
5425
5425
  enumerable: true,
5426
- get: function () { return chunkFUVJHNNI_js.useWorkflowRunPresentation; }
5426
+ get: function () { return chunk3Z366CVM_js.useWorkflowRunPresentation; }
5427
5427
  });
5428
5428
  Object.defineProperty(exports, "PlatformAppShell", {
5429
5429
  enumerable: true,
@@ -1,27 +1,27 @@
1
1
  "use client";
2
- export { WorkflowCanvasShell } from '../chunk-MZAS6TG4.mjs';
2
+ export { WorkflowCanvasShell } from '../chunk-RXFAQFE7.mjs';
3
3
  export { AdminOrganizationForm, AdminOrganizationList, AdminPermissionList, AdminUserForm, AdminUserList } from '../chunk-VGSWSQQU.mjs';
4
4
  export { ConsentScreen, ForgotPassword, MfaChallenge, PasswordlessSignIn, ResetPassword, SignIn, SignUp, SsoConnectorList, SsoEmailForm, UserButton, VerifyEmail } from '../chunk-6NAZVG2O.mjs';
5
5
  export { UpgradePrompt } from '../chunk-DJ33CSGJ.mjs';
6
6
  export { ImpersonationBanner } from '../chunk-4TY55HGO.mjs';
7
- import { UsersPageView, RolesPageView } from '../chunk-RELMVNNR.mjs';
8
- export { WorkflowWorkspace } from '../chunk-RELMVNNR.mjs';
7
+ import { UsersPageView, RolesPageView } from '../chunk-OLXOBT42.mjs';
8
+ export { WorkflowWorkspace } from '../chunk-OLXOBT42.mjs';
9
9
  export { PlatformSettings } from '../chunk-Y3WJAYOY.mjs';
10
10
  export { AdminOrganizationDetail } from '../chunk-MLAXYDEU.mjs';
11
11
  export { LinkedAccountsTabContent, MfaManage, MfaSetup, ProfileTabContent, SecurityTabContent, SessionsTabContent, UserProfile } from '../chunk-YEWXDCCI.mjs';
12
12
  export { AuthLayout, BackupCodeGrid, OtpInput, PasswordStrengthMeter, SocialLoginButtons } from '../chunk-LKJZGFM4.mjs';
13
13
  export { BillingPanel } from '../chunk-DWFLIXES.mjs';
14
- export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation } from '../chunk-WI663467.mjs';
14
+ export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation } from '../chunk-GMZ3PTNK.mjs';
15
15
  import '../chunk-ZHUPYX4Q.mjs';
16
16
  import { usePlatformState } from '../chunk-HGN5W56D.mjs';
17
17
  export { PlatformAppShell, PlatformStateProvider, usePlatformState } from '../chunk-HGN5W56D.mjs';
18
18
  export { createPlatformRbac } from '../chunk-ZJPNP2YW.mjs';
19
19
  import { createUser, listUsers, addOrganizationMember } from '../chunk-UHHPBREK.mjs';
20
20
  export { addOrganizationDomain, addOrganizationMember, createOrganization, createOrganizationInvitation, createPermission, createSecret, createUser, deleteOrganization, deletePermission, deleteUser, disableSecret, getSecret, getUserPermissions, listOrganizationDomains, listOrganizationInvitations, listOrganizationMembers, listOrganizations, listPermissions, listSecrets, listUsers, removeOrganizationMember, resetUserPassword, rotateSecret, setUserPermissions, setWindsockAdminClient, updateOrganization, updatePermission, updateUser, verifyOrganizationDomain } from '../chunk-UHHPBREK.mjs';
21
- import '../chunk-3PKG4KFY.mjs';
21
+ import '../chunk-HUGHELRM.mjs';
22
22
  import '../chunk-JB6RNAD2.mjs';
23
- import '../chunk-53SRKVKQ.mjs';
24
- import '../chunk-3SUFSAP6.mjs';
23
+ import '../chunk-U7XM3N7F.mjs';
24
+ import '../chunk-TEQYIK2B.mjs';
25
25
  import { Select, Button, filterByPermission, AppNavigation, GlassModal, IconButton, useNotifications, Textarea, DepartmentAssistantDemo, koriAssistantTheme, logisticsWorkflow, marketingWorkflow, manufacturingWorkflow, supportWorkflow, lgpdWorkflow, payrollWorkflow, inventoryWorkflow, financialWorkflow, salesWorkflow, customerAnalyticsWorkflow } from '../chunk-A3BFURJB.mjs';
26
26
  import '../chunk-D2JF6C3E.mjs';
27
27
  import { useTranslations, useLocale } from '../chunk-7VJ7CMMT.mjs';
@@ -29,7 +29,7 @@ import { usePathname, useRouter } from '../chunk-QWG2FMUN.mjs';
29
29
  import { listModelProviderConnections, listWorkflowTemplates, createWorkflowFromTemplate, aiGenerateWorkflow, createWorkflow, saveWorkflowDraft } from '../chunk-PU2KTO4O.mjs';
30
30
  import '../chunk-SYNVNTLJ.mjs';
31
31
  import '../chunk-OZNTQROP.mjs';
32
- import '../chunk-WNCPAWLC.mjs';
32
+ import '../chunk-5W7L7BT7.mjs';
33
33
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
34
34
  import { useState, useMemo, useCallback, useEffect } from 'react';
35
35
  import { useAuth, usePlatformPreferences } from '@datatechsolutions/windsock/client';
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { UsersPageViewProps, DataSource, RolesPageViewProps, WorkflowsPageViewProps } from '@datatechsolutions/shared-domain/common';
3
3
  import { AgentModel, AgentTool, AgentRule, WorkflowRun, ModelProviderType } from '../../astrlabe/contracts.mjs';
4
- import { A as AgentWithPrompts } from '../../index-AioB90qq.mjs';
4
+ import { A as AgentWithPrompts } from '../../index-VI9gyJXl.mjs';
5
5
  import { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow';
6
6
  import { R as RuleFormValue, E as ExecutionTimelineLabels } from '../../rule-form-BYJzyork.mjs';
7
- import { D as DatasourceFormData, A as AnalyticsSummary, R as RunTimelineEntry, M as ModelProviderConnection } from '../../workflow-api-client-wLoap-tt.mjs';
8
- export { a as DIALECT_CATEGORIES, b as DatasourceFormModal, c as DatasourceFormModalProps, d as DatasourceModal, e as DatasourceModalProps, f as findCategory, g as findDialect } from '../../workflow-api-client-wLoap-tt.mjs';
7
+ import { D as DatasourceFormData, A as AnalyticsSummary, R as RunTimelineEntry, M as ModelProviderConnection } from '../../workflow-api-client-DpBxHTHr.mjs';
8
+ export { a as DIALECT_CATEGORIES, b as DatasourceFormModal, c as DatasourceFormModalProps, d as DatasourceModal, e as DatasourceModalProps, f as findCategory, g as findDialect } from '../../workflow-api-client-DpBxHTHr.mjs';
9
9
  import { ReactNode } from 'react';
10
10
  import { PlatformRoleDefinition } from '../rbac.mjs';
11
11
  import { SecretSummary } from '../windsock-admin-client.mjs';
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { UsersPageViewProps, DataSource, RolesPageViewProps, WorkflowsPageViewProps } from '@datatechsolutions/shared-domain/common';
3
3
  import { AgentModel, AgentTool, AgentRule, WorkflowRun, ModelProviderType } from '../../astrlabe/contracts.js';
4
- import { A as AgentWithPrompts } from '../../index-D5ai0cGZ.js';
4
+ import { A as AgentWithPrompts } from '../../index-CoB18TbG.js';
5
5
  import { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow';
6
6
  import { R as RuleFormValue, E as ExecutionTimelineLabels } from '../../rule-form-BYJzyork.js';
7
- import { D as DatasourceFormData, A as AnalyticsSummary, R as RunTimelineEntry, M as ModelProviderConnection } from '../../workflow-api-client-zVtc8FIl.js';
8
- export { a as DIALECT_CATEGORIES, b as DatasourceFormModal, c as DatasourceFormModalProps, d as DatasourceModal, e as DatasourceModalProps, f as findCategory, g as findDialect } from '../../workflow-api-client-zVtc8FIl.js';
7
+ import { D as DatasourceFormData, A as AnalyticsSummary, R as RunTimelineEntry, M as ModelProviderConnection } from '../../workflow-api-client-DVLhcpUj.js';
8
+ export { a as DIALECT_CATEGORIES, b as DatasourceFormModal, c as DatasourceFormModalProps, d as DatasourceModal, e as DatasourceModalProps, f as findCategory, g as findDialect } from '../../workflow-api-client-DVLhcpUj.js';
9
9
  import { ReactNode } from 'react';
10
10
  import { PlatformRoleDefinition } from '../rbac.js';
11
11
  import { SecretSummary } from '../windsock-admin-client.js';
@@ -2,12 +2,12 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk3T2WGL47_js = require('../../chunk-3T2WGL47.js');
5
- var chunkTBPWMPZU_js = require('../../chunk-TBPWMPZU.js');
5
+ var chunkST3GH5OM_js = require('../../chunk-ST3GH5OM.js');
6
6
  var chunkDIMLLLZR_js = require('../../chunk-DIMLLLZR.js');
7
- var chunkSFVSDGNF_js = require('../../chunk-SFVSDGNF.js');
7
+ var chunkFZTOP6EE_js = require('../../chunk-FZTOP6EE.js');
8
8
  require('../../chunk-55H6WZQP.js');
9
- require('../../chunk-5UU3RQRB.js');
10
- require('../../chunk-XXYDLYIT.js');
9
+ require('../../chunk-NJS2YC3J.js');
10
+ require('../../chunk-NYQAEPC7.js');
11
11
  var chunkZKUYNCAG_js = require('../../chunk-ZKUYNCAG.js');
12
12
  require('../../chunk-UZ3CMNUJ.js');
13
13
  require('../../chunk-YXN2K77G.js');
@@ -15,7 +15,7 @@ var chunkS7KHTUHA_js = require('../../chunk-S7KHTUHA.js');
15
15
  require('../../chunk-ARVLVWUC.js');
16
16
  require('../../chunk-FAGDZEKM.js');
17
17
  require('../../chunk-P4YYEM4B.js');
18
- require('../../chunk-C7BI5LQ6.js');
18
+ require('../../chunk-C3H4FM4A.js');
19
19
  var outline = require('@heroicons/react/24/outline');
20
20
  var jsxRuntime = require('react/jsx-runtime');
21
21
  var react = require('react');
@@ -933,7 +933,7 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
933
933
  {
934
934
  title: labels.createTitle,
935
935
  saveLabel: labels.save,
936
- initial: chunkSFVSDGNF_js.defaultRuleForm(),
936
+ initial: chunkFZTOP6EE_js.defaultRuleForm(),
937
937
  onClose: () => setCreateOpen(false),
938
938
  onSubmit: (value) => {
939
939
  onCreate(value);
@@ -977,12 +977,12 @@ function RuleEditor({
977
977
  event.preventDefault();
978
978
  onSubmit(value);
979
979
  },
980
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkSFVSDGNF_js.RuleForm, { value, onChange: setValue })
980
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkFZTOP6EE_js.RuleForm, { value, onChange: setValue })
981
981
  }
982
982
  );
983
983
  }
984
984
  function ruleToFormValue(rule) {
985
- const base = chunkSFVSDGNF_js.defaultRuleForm();
985
+ const base = chunkFZTOP6EE_js.defaultRuleForm();
986
986
  const rawCondition = rule.condition ?? rule.conditions;
987
987
  const rawAction = pickAction(rule);
988
988
  return {
@@ -1386,7 +1386,7 @@ function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublis
1386
1386
  ] }),
1387
1387
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "liquid-surface rounded-2xl p-4 space-y-3", children: [
1388
1388
  /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.workspace }),
1389
- selectedWorkflow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(chunkTBPWMPZU_js.WorkflowWorkspace, { graph: chunk3T2WGL47_js.adaptWorkflowGraphToUi(selectedWorkflow.graph) }) }) : /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Text, { children: labels.empty })
1389
+ selectedWorkflow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(chunkST3GH5OM_js.WorkflowWorkspace, { graph: chunk3T2WGL47_js.adaptWorkflowGraphToUi(selectedWorkflow.graph) }) }) : /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Text, { children: labels.empty })
1390
1390
  ] })
1391
1391
  ] });
1392
1392
  }
@@ -1500,7 +1500,7 @@ function RunTimelinePageView({ labels, entries, loading, runId }) {
1500
1500
  {
1501
1501
  hero,
1502
1502
  content: /* @__PURE__ */ jsxRuntime.jsx(
1503
- chunkSFVSDGNF_js.ExecutionTimelinePanel,
1503
+ chunkFZTOP6EE_js.ExecutionTimelinePanel,
1504
1504
  {
1505
1505
  entries,
1506
1506
  labels
@@ -2026,11 +2026,11 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2026
2026
 
2027
2027
  Object.defineProperty(exports, "RolesPageView", {
2028
2028
  enumerable: true,
2029
- get: function () { return chunkTBPWMPZU_js.RolesPageView; }
2029
+ get: function () { return chunkST3GH5OM_js.RolesPageView; }
2030
2030
  });
2031
2031
  Object.defineProperty(exports, "UsersPageView", {
2032
2032
  enumerable: true,
2033
- get: function () { return chunkTBPWMPZU_js.UsersPageView; }
2033
+ get: function () { return chunkST3GH5OM_js.UsersPageView; }
2034
2034
  });
2035
2035
  Object.defineProperty(exports, "DIALECT_CATEGORIES", {
2036
2036
  enumerable: true,
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { adaptWorkflowGraphToUi, formatDurationMs } from '../../chunk-UQXVCVAN.mjs';
3
- import { WorkflowWorkspace } from '../../chunk-RELMVNNR.mjs';
4
- export { RolesPageView, UsersPageView } from '../../chunk-RELMVNNR.mjs';
3
+ import { WorkflowWorkspace } from '../../chunk-OLXOBT42.mjs';
4
+ export { RolesPageView, UsersPageView } from '../../chunk-OLXOBT42.mjs';
5
5
  import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-ZHUPYX4Q.mjs';
6
6
  export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-ZHUPYX4Q.mjs';
7
- import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-3PKG4KFY.mjs';
7
+ import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-HUGHELRM.mjs';
8
8
  import '../../chunk-JB6RNAD2.mjs';
9
- import '../../chunk-53SRKVKQ.mjs';
10
- import '../../chunk-3SUFSAP6.mjs';
9
+ import '../../chunk-U7XM3N7F.mjs';
10
+ import '../../chunk-TEQYIK2B.mjs';
11
11
  import { HeroSection, PageLoadingState, PageEmptyState, EntityCard, Badge, ManagementPageLayout, CreateActionButton, Button, GlassModal, FormGrid, FormSelect, FormInput, FormTextarea, SectionHeader, Text, Form, FormActionsRow, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, InlineForm, CopyableId } from '../../chunk-A3BFURJB.mjs';
12
12
  import '../../chunk-D2JF6C3E.mjs';
13
13
  import '../../chunk-7VJ7CMMT.mjs';
@@ -15,7 +15,7 @@ import { useLink } from '../../chunk-QWG2FMUN.mjs';
15
15
  import '../../chunk-PU2KTO4O.mjs';
16
16
  import '../../chunk-SYNVNTLJ.mjs';
17
17
  import '../../chunk-OZNTQROP.mjs';
18
- import '../../chunk-WNCPAWLC.mjs';
18
+ import '../../chunk-5W7L7BT7.mjs';
19
19
  import { CubeTransparentIcon, CpuChipIcon, ChatBubbleLeftEllipsisIcon, WrenchScrewdriverIcon, AdjustmentsHorizontalIcon, CircleStackIcon, RectangleStackIcon, ClockIcon, LinkIcon, KeyIcon, ArrowPathIcon, TrashIcon } from '@heroicons/react/24/outline';
20
20
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
21
21
  import { useState, useMemo, useEffect } from 'react';