@hostwebhook/node-types 1.27.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,7 +22,7 @@ const PROCESSING_OUTPUTS = [
22
22
  ];
23
23
  /** Standard processing input sources */
24
24
  const STANDARD_INPUTS = [
25
- 'endpoint', 'scheduledWebhook', 'serviceTrigger', 'voiceCall', 'router', 'filter', 'transform',
25
+ 'endpoint', 'scheduledWebhook', 'serviceTrigger', 'voiceAgent', 'router', 'filter', 'transform',
26
26
  'cache', 'code', 'rateLimiter', 'aggregator', 'conditional', 'delay', 'schemaValidator', 'split', 'loop', 'markdown', 'fileTransform',
27
27
  ];
28
28
  /** Action nodes that can chain (non-terminal) */
@@ -35,7 +35,7 @@ exports.NODE_CONNECTIONS = {
35
35
  scheduledWebhook: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
36
36
  chatTrigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
37
37
  serviceTrigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
38
- voiceCall: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
38
+ voiceAgent: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
39
39
  // ── Pipeline processing nodes ──
40
40
  filter: { acceptsInputFrom: STANDARD_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
41
41
  transform: { acceptsInputFrom: STANDARD_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
package/dist/dispatch.js CHANGED
@@ -52,7 +52,7 @@ exports.NODE_DISPATCH = {
52
52
  scheduledWebhook: { service: 'scheduledWebhooksService', collection: 'scheduledwebhooks', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
53
53
  chatTrigger: { service: 'chatTriggersService', collection: 'chattriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
54
54
  serviceTrigger: { service: 'serviceTriggersService', collection: 'servicetriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
55
- voiceCall: { service: 'voiceCallTriggersService', collection: 'voicecalltriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
55
+ voiceAgent: { service: 'voiceAgentsService', collection: 'voiceagents', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
56
56
  // ── Annotation — never executed in pipeline ──
57
57
  stickyNote: { service: 'stickyNotesService', collection: 'stickynotes', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
58
58
  };
package/dist/registry.js CHANGED
@@ -35,10 +35,10 @@ exports.NODE_REGISTRY = {
35
35
  stateKey: 'serviceTriggers', allStateKey: 'allServiceTriggers',
36
36
  color: '#ef4444', testable: false,
37
37
  },
38
- voiceCall: {
39
- type: 'voiceCall', prefix: 'vc', label: 'Voice Call',
40
- group: 'Sources', detailPath: '/dashboard/voice-call-triggers', apiPath: '/voice-call-triggers',
41
- stateKey: 'voiceCallTriggers', allStateKey: 'allVoiceCallTriggers',
38
+ voiceAgent: {
39
+ type: 'voiceAgent', prefix: 'va', label: 'Voice Agent',
40
+ group: 'Sources', detailPath: '/dashboard/voice-agents', apiPath: '/voice-agents',
41
+ stateKey: 'voiceAgents', allStateKey: 'allVoiceAgents',
42
42
  color: '#a855f7', testable: false,
43
43
  },
44
44
  // ── Flow Control ──
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** All valid node type identifiers */
2
- export type NodeType = 'endpoint' | 'scheduledWebhook' | 'chatTrigger' | 'serviceTrigger' | 'voiceCall' | 'filter' | 'transform' | 'schemaValidator' | 'conditional' | 'delay' | 'rateLimiter' | 'aggregator' | 'cache' | 'code' | 'ai' | 'merge' | 'approval' | 'split' | 'loop' | 'markdown' | 'fileTransform' | 'router' | 'emailAction' | 'httpAction' | 'mongoAction' | 'postgresAction' | 'notificationAction' | 'sheetsAction' | 'calendarAction' | 'docsAction' | 'driveAction' | 'firecrawlAction' | 'vectorStore' | 'stickyNote';
2
+ export type NodeType = 'endpoint' | 'scheduledWebhook' | 'chatTrigger' | 'serviceTrigger' | 'voiceAgent' | 'filter' | 'transform' | 'schemaValidator' | 'conditional' | 'delay' | 'rateLimiter' | 'aggregator' | 'cache' | 'code' | 'ai' | 'merge' | 'approval' | 'split' | 'loop' | 'markdown' | 'fileTransform' | 'router' | 'emailAction' | 'httpAction' | 'mongoAction' | 'postgresAction' | 'notificationAction' | 'sheetsAction' | 'calendarAction' | 'docsAction' | 'driveAction' | 'firecrawlAction' | 'vectorStore' | 'stickyNote';
3
3
  /** Node role in the pipeline */
4
4
  export type NodeRole = 'source' | 'processing' | 'flowControl' | 'routing' | 'action' | 'monitoring';
5
5
  /** Handle positions on the canvas node */
@@ -26,6 +26,14 @@ export interface NodeUIConfig {
26
26
  input?: string[];
27
27
  output?: string[];
28
28
  };
29
+ /**
30
+ * When true, the canvas derives output handles from the node entity
31
+ * at render time (e.g. one handle per `entity.tools[i].name`) rather
32
+ * than from a static `dotHandles.output` list. Used by Voice Agent —
33
+ * the count of tools is data, not config. NodeShell branches on this
34
+ * flag to render the dynamic handle set.
35
+ */
36
+ dynamicOutputs?: boolean;
29
37
  special?: {
30
38
  rejectionEndpoints?: string;
31
39
  hasBranches?: boolean;
package/dist/ui.js CHANGED
@@ -12,7 +12,12 @@ exports.NODE_UI = {
12
12
  scheduledWebhook: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right', 'bottom'], dotHandles: { output: ['right-out', 'bottom-out'] } },
13
13
  chatTrigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] } },
14
14
  serviceTrigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right', 'bottom'], dotHandles: { output: ['right-out', 'bottom-out'] } },
15
- voiceCall: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] } },
15
+ // Voice Agent: dynamicOutputs=true tells NodeShell to derive ONE
16
+ // output handle per non-disabled `entity.tools[i].name`. The
17
+ // `right-out` fallback handle is rendered when the agent has zero
18
+ // tools so the user has somewhere to drop the first wired connection
19
+ // before any tools are defined (rare but possible during onboarding).
20
+ voiceAgent: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] }, dynamicOutputs: true },
16
21
  // ── Pipeline processing nodes ──
17
22
  filter: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
18
23
  transform: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
@@ -54,7 +59,7 @@ exports.PREFIX_TO_TYPE = [
54
59
  { prefix: 'sw-', type: 'scheduledWebhook', canvasType: 'scheduledWebhook' },
55
60
  { prefix: 'chat-', type: 'chatTrigger', canvasType: 'chatTrigger' },
56
61
  { prefix: 'svc-', type: 'serviceTrigger', canvasType: 'serviceTrigger' },
57
- { prefix: 'vc-', type: 'voiceCall', canvasType: 'voiceCall' },
62
+ { prefix: 'va-', type: 'voiceAgent', canvasType: 'voiceAgent' },
58
63
  { prefix: 'ea-', type: 'emailAction', canvasType: 'emailAction' },
59
64
  { prefix: 'ha-', type: 'httpAction', canvasType: 'httpAction' },
60
65
  { prefix: 'ma-', type: 'mongoAction', canvasType: 'mongoAction' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/node-types",
3
- "version": "1.27.0",
3
+ "version": "1.28.0",
4
4
  "description": "Shared node type definitions, connection rules, and dispatch config for HostWebhook",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",