@principal-ai/principal-view-core 0.19.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -18,7 +18,8 @@ export type { ReactFlowNode, ReactFlowEdge } from './utils/CanvasConverter';
18
18
  export { parseYaml, isYamlFile, getConfigNameFromFilename } from './utils/YamlParser';
19
19
  export type { YamlParseResult } from './utils/YamlParser';
20
20
  export { renderWorkflow } from './workflow/template-renderer';
21
- export { parseTemplate } from './workflow/template-parser';
21
+ export { parseTemplate, ParsedTemplate } from './workflow/template-parser';
22
+ export type { TemplateSegment } from './workflow/template-parser';
22
23
  export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, } from './workflow/scenario-matcher';
23
24
  export type { WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, } from './workflow/types';
24
25
  export type { OtelAttributes, OtelAttributeValue, OtelLog, OtelSpan, OtelResource, OtelSeverity, OtelSeverityText, OtelSeverityNumber, OtelSpanKind, OtelSpanStatus, } from './types/otel';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ export { parseYaml, isYamlFile, getConfigNameFromFilename } from './utils/YamlPa
18
18
  // Export workflow template system (browser-safe)
19
19
  // Import directly from files to avoid pulling in Node.js validator
20
20
  export { renderWorkflow } from './workflow/template-renderer';
21
- export { parseTemplate } from './workflow/template-parser';
21
+ export { parseTemplate, ParsedTemplate } from './workflow/template-parser';
22
22
  export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, } from './workflow/scenario-matcher';
23
23
  // Export canvas, workflow, and test trace discovery (browser-safe)
24
24
  export { CanvasDiscovery } from './discovery/CanvasDiscovery';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,mFAAmF;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,iDAAiD;AACjD,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AAiCrC,mEAAmE;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAiB9D,uEAAuE;AACvE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,gEAAgE;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,oEAAoE;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,+CAA+C;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,uFAAuF;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,4FAA4F;AAC5F,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,mDAAmD;AACnD,oDAAoD;AACpD,+DAA+D;AAC/D,2GAA2G;AAC3G,0FAA0F;AAC1F,uDAAuD;AACvD,8CAA8C;AAC9C,qEAAqE;AACrE,gEAAgE;AAChE,EAAE;AACF,WAAW;AACX,iIAAiI"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,mFAAmF;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,iDAAiD;AACjD,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AAiCrC,mEAAmE;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAiB9D,uEAAuE;AACvE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,gEAAgE;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,oEAAoE;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,+CAA+C;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,uFAAuF;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,4FAA4F;AAC5F,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,mDAAmD;AACnD,oDAAoD;AACpD,+DAA+D;AAC/D,2GAA2G;AAC3G,0FAA0F;AAC1F,uDAAuD;AACvD,8CAA8C;AAC9C,qEAAqE;AACrE,gEAAgE;AAChE,EAAE;AACF,WAAW;AACX,iIAAiI"}
package/dist/node.d.ts CHANGED
@@ -46,8 +46,8 @@ export type { CreateNodeOptions, CreateEdgeOptions } from './utils/LibraryConver
46
46
  export type { FileSystemAdapter } from '@principal-ai/repository-abstraction';
47
47
  export { InMemoryFileSystemAdapter } from '@principal-ai/repository-abstraction';
48
48
  export * from './rules';
49
- export { renderWorkflow, parseTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
50
- export type { WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, WorkflowValidationContext, WorkflowViolation, WorkflowValidationResult, } from './workflow';
49
+ export { renderWorkflow, parseTemplate, ParsedTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
50
+ export type { TemplateSegment, WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, WorkflowValidationContext, WorkflowViolation, WorkflowValidationResult, } from './workflow';
51
51
  export { CanvasDiscovery } from './discovery/CanvasDiscovery';
52
52
  export type { DiscoveredCanvas, DiscoveredTestTrace, CanvasDiscoveryResult, DiscoveryOptions, CanvasType, TestTraceType, DiscoveredCanvasWithContent, DiscoveredTestTraceWithContent, CanvasDiscoveryResultWithContent, } from './discovery/types';
53
53
  export { ExecutionValidator, createExecutionValidator } from './execution/ExecutionValidator';
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
package/dist/node.js CHANGED
@@ -49,7 +49,7 @@ export { InMemoryFileSystemAdapter } from '@principal-ai/repository-abstraction'
49
49
  // Export rules engine (Node.js only - OpenTelemetry dependencies)
50
50
  export * from './rules';
51
51
  // Export workflow template system (full system including Node.js validator)
52
- export { renderWorkflow, parseTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
52
+ export { renderWorkflow, parseTemplate, ParsedTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
53
53
  // Export canvas, workflow, and test trace discovery
54
54
  export { CanvasDiscovery } from './discovery/CanvasDiscovery';
55
55
  // Export execution validation
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8CAA8C;AAC9C,cAAc,SAAS,CAAC;AAExB,2CAA2C;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,iDAAiD;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3G,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,4EAA4E;AAC5E,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQzE,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,gCAAgC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,4DAA4D;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,gEAAgE;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,kEAAkE;AAClE,cAAc,SAAS,CAAC;AAExB,4EAA4E;AAC5E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAsBpB,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAa9D,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,wDAAwD;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8CAA8C;AAC9C,cAAc,SAAS,CAAC;AAExB,2CAA2C;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,iDAAiD;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3G,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,4EAA4E;AAC5E,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQzE,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,gCAAgC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,4DAA4D;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,gEAAgE;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,kEAAkE;AAClE,cAAc,SAAS,CAAC;AAExB,4EAA4E;AAC5E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAuBpB,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAa9D,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,wDAAwD;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -7,7 +7,8 @@
7
7
  */
8
8
  export type { WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, } from './types';
9
9
  export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue } from './scenario-matcher';
10
- export { parseTemplate } from './template-parser';
10
+ export { parseTemplate, ParsedTemplate } from './template-parser';
11
+ export type { TemplateSegment } from './template-parser';
11
12
  export { renderWorkflow } from './template-renderer';
12
13
  export type { WorkflowValidationContext, WorkflowViolation, WorkflowValidationResult, } from './validator';
13
14
  export { WorkflowValidator, createWorkflowValidator } from './validator';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9J,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EACV,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9J,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EACV,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -8,7 +8,7 @@
8
8
  // Scenario Matching
9
9
  export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue } from './scenario-matcher';
10
10
  // Template Parsing
11
- export { parseTemplate } from './template-parser';
11
+ export { parseTemplate, ParsedTemplate } from './template-parser';
12
12
  // Template Rendering
13
13
  export { renderWorkflow } from './template-renderer';
14
14
  export { WorkflowValidator, createWorkflowValidator } from './validator';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9J,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9J,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGlE,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -8,12 +8,36 @@
8
8
  * - Loops: {{#each items}}...{{/each}}
9
9
  * - Comparison helpers: {{#if (eq a b)}}...{{/if}}
10
10
  */
11
+ /**
12
+ * Represents a segment in a parsed template
13
+ */
14
+ export interface TemplateSegment {
15
+ /** Segment type: text (static) or variable (dynamic) */
16
+ type: 'text' | 'variable';
17
+ /** The rendered value (interpolated for variables, raw for text) */
18
+ value: string;
19
+ /** Original template variable name (e.g., "customer.name"), only for variables */
20
+ variableName?: string;
21
+ /** Whether the variable had data in the context, only for variables */
22
+ resolved?: boolean;
23
+ }
24
+ /**
25
+ * Structured representation of a parsed template with metadata about variables
26
+ */
27
+ export declare class ParsedTemplate {
28
+ readonly segments: TemplateSegment[];
29
+ constructor(segments: TemplateSegment[]);
30
+ /**
31
+ * Convert to flat string for backwards compatibility
32
+ */
33
+ toString(): string;
34
+ }
11
35
  /**
12
36
  * Parse and evaluate a template string using Handlebars
13
37
  *
14
38
  * @param template - Template string with {{variables}}
15
39
  * @param context - Data context for variable lookup
16
- * @returns Evaluated string
40
+ * @returns ParsedTemplate with structured segments and variable metadata
17
41
  */
18
- export declare function parseTemplate(template: string, context: Record<string, unknown>): string;
42
+ export declare function parseTemplate(template: string, context: Record<string, unknown>): ParsedTemplate;
19
43
  //# sourceMappingURL=template-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/workflow/template-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuBH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOxF"}
1
+ {"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/workflow/template-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,cAAc;aACG,QAAQ,EAAE,eAAe,EAAE;gBAA3B,QAAQ,EAAE,eAAe,EAAE;IAEvD;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB;AAoND;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAkBhG"}
@@ -27,20 +27,221 @@ Handlebars.registerHelper('or', (...args) => {
27
27
  return values.some(Boolean);
28
28
  });
29
29
  Handlebars.registerHelper('not', (a) => !a);
30
+ /**
31
+ * Structured representation of a parsed template with metadata about variables
32
+ */
33
+ export class ParsedTemplate {
34
+ constructor(segments) {
35
+ this.segments = segments;
36
+ }
37
+ /**
38
+ * Convert to flat string for backwards compatibility
39
+ */
40
+ toString() {
41
+ return this.segments.map((seg) => seg.value).join('');
42
+ }
43
+ }
44
+ /**
45
+ * Extract variable references from a Handlebars AST node
46
+ */
47
+ function extractVariables(node, variables = new Set()) {
48
+ if (node.type === 'MustacheStatement' || node.type === 'SubExpression') {
49
+ const mustache = node;
50
+ if (mustache.path.type === 'PathExpression') {
51
+ const pathExpr = mustache.path;
52
+ // Only track simple variable references, not helpers
53
+ if (pathExpr.data === false && !mustache.params?.length) {
54
+ variables.add(pathExpr.original);
55
+ }
56
+ }
57
+ // Process parameters (they might contain variables)
58
+ if (mustache.params) {
59
+ mustache.params.forEach((param) => extractVariables(param, variables));
60
+ }
61
+ }
62
+ else if (node.type === 'PathExpression') {
63
+ const pathExpr = node;
64
+ if (pathExpr.data === false) {
65
+ variables.add(pathExpr.original);
66
+ }
67
+ }
68
+ else if (node.type === 'BlockStatement') {
69
+ const block = node;
70
+ if (block.program) {
71
+ extractVariables(block.program, variables);
72
+ }
73
+ if (block.inverse) {
74
+ extractVariables(block.inverse, variables);
75
+ }
76
+ // Process block parameters
77
+ if (block.params) {
78
+ block.params.forEach((param) => extractVariables(param, variables));
79
+ }
80
+ }
81
+ else if (node.type === 'Program') {
82
+ const program = node;
83
+ program.body.forEach((child) => extractVariables(child, variables));
84
+ }
85
+ else if (node.type === 'PartialStatement') {
86
+ const partial = node;
87
+ if (partial.params) {
88
+ partial.params.forEach((param) => extractVariables(param, variables));
89
+ }
90
+ }
91
+ return variables;
92
+ }
93
+ /**
94
+ * Resolve a variable path in a context object
95
+ * Returns [value, resolved] where resolved indicates if the path exists
96
+ */
97
+ function resolveVariable(path, context) {
98
+ const parts = path.split('.');
99
+ let current = context;
100
+ for (const part of parts) {
101
+ if (current == null || typeof current !== 'object') {
102
+ return [undefined, false];
103
+ }
104
+ if (!(part in current)) {
105
+ return [undefined, false];
106
+ }
107
+ current = current[part];
108
+ }
109
+ return [current, true];
110
+ }
111
+ /**
112
+ * Build segments from rendered output by identifying variable boundaries
113
+ */
114
+ function buildSegments(template, rendered, context) {
115
+ const segments = [];
116
+ // Find all {{variable}} patterns in the rendered output (these are unresolved)
117
+ const unresolvedPattern = /\{\{([^}]+)\}\}/g;
118
+ const unresolvedMatches = Array.from(rendered.matchAll(unresolvedPattern));
119
+ if (unresolvedMatches.length === 0) {
120
+ // No unresolved variables, check if we have any variables at all
121
+ try {
122
+ const ast = Handlebars.parse(template);
123
+ const variables = extractVariables(ast);
124
+ if (variables.size === 0) {
125
+ // Pure text template
126
+ return [{ type: 'text', value: rendered }];
127
+ }
128
+ // All variables resolved - need to parse more carefully
129
+ // This is complex, so for MVP we'll use a simpler heuristic:
130
+ // Split by variable positions in the template and match to rendered output
131
+ return buildSegmentsWithResolvedVariables(template, rendered, context, variables);
132
+ }
133
+ catch {
134
+ // If parsing fails, return as text
135
+ return [{ type: 'text', value: rendered }];
136
+ }
137
+ }
138
+ // Build segments with unresolved variables
139
+ let lastIndex = 0;
140
+ for (const match of unresolvedMatches) {
141
+ const beforeText = rendered.substring(lastIndex, match.index);
142
+ if (beforeText) {
143
+ segments.push({ type: 'text', value: beforeText });
144
+ }
145
+ segments.push({
146
+ type: 'variable',
147
+ value: match[0],
148
+ variableName: match[1].trim(),
149
+ resolved: false,
150
+ });
151
+ lastIndex = match.index + match[0].length;
152
+ }
153
+ // Add remaining text
154
+ if (lastIndex < rendered.length) {
155
+ segments.push({ type: 'text', value: rendered.substring(lastIndex) });
156
+ }
157
+ return segments;
158
+ }
159
+ /**
160
+ * Build segments when all variables are resolved
161
+ * This uses template analysis to identify variable positions
162
+ */
163
+ function buildSegmentsWithResolvedVariables(template, rendered, context, variables) {
164
+ const segments = [];
165
+ // Find all variable positions in the template
166
+ const varPattern = /\{\{([^}]+)\}\}/g;
167
+ const templateMatches = Array.from(template.matchAll(varPattern));
168
+ if (templateMatches.length === 0) {
169
+ return [{ type: 'text', value: rendered }];
170
+ }
171
+ let templateIndex = 0;
172
+ let renderedIndex = 0;
173
+ for (const match of templateMatches) {
174
+ const varName = match[1].trim();
175
+ // Check if this is a helper or a simple variable
176
+ const isHelper = varName.startsWith('#') ||
177
+ varName.startsWith('/') ||
178
+ varName.startsWith('^') ||
179
+ varName.startsWith('>') ||
180
+ !variables.has(varName);
181
+ if (isHelper) {
182
+ continue; // Skip helpers for now
183
+ }
184
+ // Add text before this variable
185
+ const textBefore = template.substring(templateIndex, match.index);
186
+ if (textBefore && renderedIndex < rendered.length) {
187
+ const textLength = textBefore.length;
188
+ segments.push({ type: 'text', value: rendered.substring(renderedIndex, renderedIndex + textLength) });
189
+ renderedIndex += textLength;
190
+ }
191
+ // Resolve the variable
192
+ const [value, resolved] = resolveVariable(varName, context);
193
+ if (resolved && value !== undefined) {
194
+ const valueStr = String(value);
195
+ segments.push({
196
+ type: 'variable',
197
+ value: valueStr,
198
+ variableName: varName,
199
+ resolved: true,
200
+ });
201
+ renderedIndex += valueStr.length;
202
+ }
203
+ else {
204
+ // Unresolved - should appear as {{varName}} in output
205
+ const unresolvedStr = `{{${varName}}}`;
206
+ segments.push({
207
+ type: 'variable',
208
+ value: unresolvedStr,
209
+ variableName: varName,
210
+ resolved: false,
211
+ });
212
+ renderedIndex += unresolvedStr.length;
213
+ }
214
+ templateIndex = match.index + match[0].length;
215
+ }
216
+ // Add remaining text
217
+ if (renderedIndex < rendered.length) {
218
+ segments.push({ type: 'text', value: rendered.substring(renderedIndex) });
219
+ }
220
+ return segments;
221
+ }
30
222
  /**
31
223
  * Parse and evaluate a template string using Handlebars
32
224
  *
33
225
  * @param template - Template string with {{variables}}
34
226
  * @param context - Data context for variable lookup
35
- * @returns Evaluated string
227
+ * @returns ParsedTemplate with structured segments and variable metadata
36
228
  */
37
229
  export function parseTemplate(template, context) {
38
230
  try {
39
231
  const handlebarTemplate = Handlebars.compile(template, { noEscape: true });
40
- return handlebarTemplate(context);
232
+ const rendered = handlebarTemplate(context);
233
+ // Build structured segments
234
+ const segments = buildSegments(template, rendered, context);
235
+ return new ParsedTemplate(segments);
41
236
  }
42
237
  catch (error) {
43
- return `{ERROR: Template parsing failed - ${error instanceof Error ? error.message : 'unknown'}}`;
238
+ // Return error as a single text segment
239
+ return new ParsedTemplate([
240
+ {
241
+ type: 'text',
242
+ value: `{ERROR: Template parsing failed - ${error instanceof Error ? error.message : 'unknown'}}`,
243
+ },
244
+ ]);
44
245
  }
45
246
  }
46
247
  //# sourceMappingURL=template-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/workflow/template-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,qCAAqC;AACrC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;IAC3C,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;IAC1C,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAgC;IAC9E,IAAI;QACF,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACnC;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC;KACnG;AACH,CAAC"}
1
+ {"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/workflow/template-parser.ts"],"names":[],"mappings":"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"}
@@ -79,7 +79,7 @@ function renderScenario(context) {
79
79
  };
80
80
  // Introduction
81
81
  if (scenario.template.introduction) {
82
- parts.push(parseTemplate(scenario.template.introduction, evalContext));
82
+ parts.push(parseTemplate(scenario.template.introduction, evalContext).toString());
83
83
  parts.push(''); // Blank line
84
84
  }
85
85
  // Main content based on mode
@@ -102,7 +102,7 @@ function renderScenario(context) {
102
102
  if (parts.length > 0) {
103
103
  parts.push(''); // Blank line before summary
104
104
  }
105
- parts.push(parseTemplate(scenario.template.summary, evalContext));
105
+ parts.push(parseTemplate(scenario.template.summary, evalContext).toString());
106
106
  }
107
107
  return parts.join('\n');
108
108
  }
@@ -145,12 +145,12 @@ function renderSpanTree(tree, scenario, context, formatting) {
145
145
  eventContext.span = node.span;
146
146
  // Render span
147
147
  if (scenario.template.span) {
148
- const spanText = parseTemplate(scenario.template.span, eventContext);
148
+ const spanText = parseTemplate(scenario.template.span, eventContext).toString();
149
149
  parts.push(indent + spanText);
150
150
  }
151
151
  else if (scenario.template.events?.[node.span.name]) {
152
152
  const eventTemplate = scenario.template.events[node.span.name];
153
- const eventText = parseTemplate(eventTemplate, eventContext);
153
+ const eventText = parseTemplate(eventTemplate, eventContext).toString();
154
154
  parts.push(indent + eventText);
155
155
  }
156
156
  else {
@@ -220,7 +220,7 @@ function renderTimeline(events, scenario, context, formatting) {
220
220
  eventText = renderLog(event, scenario, { ...eventContext, log: event }, formatting);
221
221
  }
222
222
  else if (scenario.template.events?.[event.name]) {
223
- eventText = parseTemplate(scenario.template.events[event.name], eventContext);
223
+ eventText = parseTemplate(scenario.template.events[event.name], eventContext).toString();
224
224
  }
225
225
  if (eventText) {
226
226
  if (formatting.showTimestamps) {
@@ -249,12 +249,12 @@ function renderLog(log, scenario, context, _formatting) {
249
249
  const severity = getSeverityLevel(log.severityNumber);
250
250
  const logTemplate = scenario.template.logs[severity] || scenario.template.logs.default;
251
251
  if (logTemplate) {
252
- return parseTemplate(logTemplate, context);
252
+ return parseTemplate(logTemplate, context).toString();
253
253
  }
254
254
  }
255
255
  // Check for event-specific template
256
256
  if (scenario.template.events?.[`log.${log.severityText?.toLowerCase()}`]) {
257
- return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context);
257
+ return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context).toString();
258
258
  }
259
259
  // Default log rendering
260
260
  return `[${log.severityText || 'LOG'}] ${log.body}`;
@@ -292,7 +292,7 @@ function renderFlow(flow, context) {
292
292
  for (const item of flow) {
293
293
  if (typeof item === 'string') {
294
294
  // Simple string template
295
- parts.push(parseTemplate(item, context));
295
+ parts.push(parseTemplate(item, context).toString());
296
296
  }
297
297
  else {
298
298
  // Flow directive
@@ -307,21 +307,21 @@ function renderFlow(flow, context) {
307
307
  ...(typeof collectionItem === 'object' && collectionItem !== null ? collectionItem : {}),
308
308
  index: i,
309
309
  };
310
- parts.push(parseTemplate(item.template, itemContext));
310
+ parts.push(parseTemplate(item.template, itemContext).toString());
311
311
  }
312
312
  }
313
313
  }
314
314
  else if (item.if) {
315
315
  // Conditional
316
- const condition = parseTemplate(item.if, context);
316
+ const condition = parseTemplate(item.if, context).toString();
317
317
  if (condition === 'true' || condition === '1') {
318
318
  if (item.then) {
319
- parts.push(parseTemplate(item.then, context));
319
+ parts.push(parseTemplate(item.then, context).toString());
320
320
  }
321
321
  }
322
322
  else {
323
323
  if (item.else) {
324
- parts.push(parseTemplate(item.else, context));
324
+ parts.push(parseTemplate(item.else, context).toString());
325
325
  }
326
326
  }
327
327
  }
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/workflow/template-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/workflow/template-renderer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/principal-view-core",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "description": "Core logic and types for graph-based principal view framework",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/src/index.ts CHANGED
@@ -57,7 +57,8 @@ export type { YamlParseResult } from './utils/YamlParser';
57
57
  // Export workflow template system (browser-safe)
58
58
  // Import directly from files to avoid pulling in Node.js validator
59
59
  export { renderWorkflow } from './workflow/template-renderer';
60
- export { parseTemplate } from './workflow/template-parser';
60
+ export { parseTemplate, ParsedTemplate } from './workflow/template-parser';
61
+ export type { TemplateSegment } from './workflow/template-parser';
61
62
  export {
62
63
  selectScenario,
63
64
  matchesCondition,
package/src/node.ts CHANGED
@@ -122,6 +122,7 @@ export * from './rules';
122
122
  export {
123
123
  renderWorkflow,
124
124
  parseTemplate,
125
+ ParsedTemplate,
125
126
  selectScenario,
126
127
  matchesCondition,
127
128
  hasEventMatching,
@@ -133,6 +134,7 @@ export {
133
134
  WorkflowValidator,
134
135
  } from './workflow';
135
136
  export type {
137
+ TemplateSegment,
136
138
  WorkflowTemplate,
137
139
  WorkflowScenario,
138
140
  WorkflowMode,
@@ -13,62 +13,162 @@ describe('parseTemplate', () => {
13
13
  agents: { count: 2 },
14
14
  };
15
15
 
16
- it('should parse simple property substitution', () => {
17
- expect(parseTemplate('Found {{result.nodes.count}} nodes', context)).toBe('Found 12 nodes');
18
- });
19
-
20
- it('should parse multiple substitutions', () => {
21
- expect(parseTemplate('Config has {{config.nodeTypes}} node types and {{config.edgeTypes}} edge types', context)).toBe(
22
- 'Config has 5 node types and 3 edge types'
23
- );
24
- });
25
-
26
- it('should parse nested properties', () => {
27
- expect(parseTemplate('Total violations: {{result.violations.total}}', context)).toBe('Total violations: 3');
28
- });
29
-
30
- it('should handle realistic workflow templates', () => {
31
- expect(parseTemplate(' Installed {{skills.installed}} skill(s) to {{agents.count}} agent(s)', context)).toBe(
32
- '✅ Installed 2 skill(s) to 2 agent(s)'
33
- );
34
- });
35
-
36
- it('should leave non-expression text unchanged', () => {
37
- expect(parseTemplate('This is plain text', context)).toBe('This is plain text');
38
- expect(parseTemplate('No substitutions here!', context)).toBe('No substitutions here!');
39
- });
40
-
41
- it('should handle missing properties gracefully', () => {
42
- expect(parseTemplate('Value: {{missing.property}}', context)).toBe('Value: ');
43
- });
44
-
45
- it('should format multiline workflow', () => {
46
- const template = `✅ Conversion Complete
16
+ describe('backwards compatibility (toString)', () => {
17
+ it('should parse simple property substitution', () => {
18
+ expect(parseTemplate('Found {{result.nodes.count}} nodes', context).toString()).toBe('Found 12 nodes');
19
+ });
20
+
21
+ it('should parse multiple substitutions', () => {
22
+ expect(parseTemplate('Config has {{config.nodeTypes}} node types and {{config.edgeTypes}} edge types', context).toString()).toBe(
23
+ 'Config has 5 node types and 3 edge types'
24
+ );
25
+ });
26
+
27
+ it('should parse nested properties', () => {
28
+ expect(parseTemplate('Total violations: {{result.violations.total}}', context).toString()).toBe('Total violations: 3');
29
+ });
30
+
31
+ it('should handle realistic workflow templates', () => {
32
+ expect(parseTemplate('✅ Installed {{skills.installed}} skill(s) to {{agents.count}} agent(s)', context).toString()).toBe(
33
+ '✅ Installed 2 skill(s) to 2 agent(s)'
34
+ );
35
+ });
36
+
37
+ it('should leave non-expression text unchanged', () => {
38
+ expect(parseTemplate('This is plain text', context).toString()).toBe('This is plain text');
39
+ expect(parseTemplate('No substitutions here!', context).toString()).toBe('No substitutions here!');
40
+ });
41
+
42
+ it('should handle missing properties gracefully', () => {
43
+ expect(parseTemplate('Value: {{missing.property}}', context).toString()).toBe('Value: {{missing.property}}');
44
+ });
45
+
46
+ it('should format multiline workflow', () => {
47
+ const template = `✅ Conversion Complete
47
48
 
48
49
  Processed {{config.nodeTypes}} node types
49
50
  Generated {{result.nodes.count}} nodes in {{duration.ms}}ms
50
51
 
51
52
  Found {{result.violations.total}} violations`;
52
53
 
53
- const expected = `✅ Conversion Complete
54
+ const expected = `✅ Conversion Complete
54
55
 
55
56
  Processed 5 node types
56
57
  Generated 12 nodes in 45ms
57
58
 
58
59
  Found 3 violations`;
59
60
 
60
- expect(parseTemplate(template, context)).toBe(expected);
61
- });
61
+ expect(parseTemplate(template, context).toString()).toBe(expected);
62
+ });
63
+
64
+ it('should handle Handlebars conditionals', () => {
65
+ const template = '{{#if result.violations.total}}Has violations{{else}}No violations{{/if}}';
66
+ expect(parseTemplate(template, context).toString()).toBe('Has violations');
67
+ });
62
68
 
63
- it('should handle Handlebars conditionals', () => {
64
- const template = '{{#if result.violations.total}}Has violations{{else}}No violations{{/if}}';
65
- expect(parseTemplate(template, context)).toBe('Has violations');
69
+ it('should handle Handlebars comparison helpers', () => {
70
+ const contextZero = { ...context, result: { ...context.result, violations: { total: 0 } } };
71
+ const template = '{{#if result.violations.total}}❌ FAILED{{else}}✅ PASSED{{/if}}';
72
+ expect(parseTemplate(template, context).toString()).toBe('❌ FAILED');
73
+ expect(parseTemplate(template, contextZero).toString()).toBe('✅ PASSED');
74
+ });
66
75
  });
67
76
 
68
- it('should handle Handlebars comparison helpers', () => {
69
- const contextZero = { ...context, result: { ...context.result, violations: { total: 0 } } };
70
- const template = '{{#if result.violations.total}} FAILED{{else}}✅ PASSED{{/if}}';
71
- expect(parseTemplate(template, context)).toBe('❌ FAILED');
72
- expect(parseTemplate(template, contextZero)).toBe('✅ PASSED');
77
+ describe('structured segments', () => {
78
+ it('should return ParsedTemplate with segments', () => {
79
+ const result = parseTemplate('Found {{result.nodes.count}} nodes', context);
80
+ expect(result.segments).toBeDefined();
81
+ expect(Array.isArray(result.segments)).toBe(true);
82
+ });
83
+
84
+ it('should identify text segments', () => {
85
+ const result = parseTemplate('This is plain text', context);
86
+ expect(result.segments).toHaveLength(1);
87
+ expect(result.segments[0]).toEqual({
88
+ type: 'text',
89
+ value: 'This is plain text',
90
+ });
91
+ });
92
+
93
+ it('should identify resolved variable segments', () => {
94
+ const result = parseTemplate('Found {{result.nodes.count}} nodes', context);
95
+ expect(result.segments).toHaveLength(3);
96
+
97
+ expect(result.segments[0]).toEqual({
98
+ type: 'text',
99
+ value: 'Found ',
100
+ });
101
+
102
+ expect(result.segments[1]).toEqual({
103
+ type: 'variable',
104
+ value: '12',
105
+ variableName: 'result.nodes.count',
106
+ resolved: true,
107
+ });
108
+
109
+ expect(result.segments[2]).toEqual({
110
+ type: 'text',
111
+ value: ' nodes',
112
+ });
113
+ });
114
+
115
+ it('should identify unresolved variable segments', () => {
116
+ const result = parseTemplate('Value: {{missing.property}}', context);
117
+ expect(result.segments).toHaveLength(2);
118
+
119
+ expect(result.segments[0]).toEqual({
120
+ type: 'text',
121
+ value: 'Value: ',
122
+ });
123
+
124
+ expect(result.segments[1]).toEqual({
125
+ type: 'variable',
126
+ value: '{{missing.property}}',
127
+ variableName: 'missing.property',
128
+ resolved: false,
129
+ });
130
+ });
131
+
132
+ it('should handle mixed resolved and unresolved variables', () => {
133
+ const result = parseTemplate('Count: {{result.nodes.count}}, Missing: {{missing.value}}', context);
134
+
135
+ expect(result.segments).toHaveLength(4);
136
+ expect(result.segments[0]).toMatchObject({
137
+ type: 'text',
138
+ value: 'Count: ',
139
+ });
140
+ expect(result.segments[1]).toMatchObject({
141
+ type: 'variable',
142
+ variableName: 'result.nodes.count',
143
+ resolved: true,
144
+ });
145
+ expect(result.segments[2]).toMatchObject({
146
+ type: 'text',
147
+ value: ', Missing: ',
148
+ });
149
+ expect(result.segments[3]).toMatchObject({
150
+ type: 'variable',
151
+ variableName: 'missing.value',
152
+ resolved: false,
153
+ });
154
+ });
155
+
156
+ it('should handle multiple resolved variables', () => {
157
+ const result = parseTemplate('{{config.nodeTypes}} nodes, {{config.edgeTypes}} edges', context);
158
+
159
+ expect(result.segments).toHaveLength(4);
160
+ expect(result.segments[0]).toMatchObject({
161
+ type: 'variable',
162
+ value: '5',
163
+ variableName: 'config.nodeTypes',
164
+ resolved: true,
165
+ });
166
+ expect(result.segments[2]).toMatchObject({
167
+ type: 'variable',
168
+ value: '3',
169
+ variableName: 'config.edgeTypes',
170
+ resolved: true,
171
+ });
172
+ });
73
173
  });
74
174
  });
@@ -29,7 +29,8 @@ export type {
29
29
  export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue } from './scenario-matcher';
30
30
 
31
31
  // Template Parsing
32
- export { parseTemplate } from './template-parser';
32
+ export { parseTemplate, ParsedTemplate } from './template-parser';
33
+ export type { TemplateSegment } from './template-parser';
33
34
 
34
35
  // Template Rendering
35
36
  export { renderWorkflow } from './template-renderer';
@@ -30,19 +30,267 @@ Handlebars.registerHelper('or', (...args) => {
30
30
  });
31
31
  Handlebars.registerHelper('not', (a) => !a);
32
32
 
33
+ /**
34
+ * Represents a segment in a parsed template
35
+ */
36
+ export interface TemplateSegment {
37
+ /** Segment type: text (static) or variable (dynamic) */
38
+ type: 'text' | 'variable';
39
+ /** The rendered value (interpolated for variables, raw for text) */
40
+ value: string;
41
+ /** Original template variable name (e.g., "customer.name"), only for variables */
42
+ variableName?: string;
43
+ /** Whether the variable had data in the context, only for variables */
44
+ resolved?: boolean;
45
+ }
46
+
47
+ /**
48
+ * Structured representation of a parsed template with metadata about variables
49
+ */
50
+ export class ParsedTemplate {
51
+ constructor(public readonly segments: TemplateSegment[]) {}
52
+
53
+ /**
54
+ * Convert to flat string for backwards compatibility
55
+ */
56
+ toString(): string {
57
+ return this.segments.map((seg) => seg.value).join('');
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Extract variable references from a Handlebars AST node
63
+ */
64
+ function extractVariables(node: hbs.AST.Node, variables: Set<string> = new Set()): Set<string> {
65
+ if (node.type === 'MustacheStatement' || node.type === 'SubExpression') {
66
+ const mustache = node as hbs.AST.MustacheStatement | hbs.AST.SubExpression;
67
+ if (mustache.path.type === 'PathExpression') {
68
+ const pathExpr = mustache.path as hbs.AST.PathExpression;
69
+ // Only track simple variable references, not helpers
70
+ if (pathExpr.data === false && !mustache.params?.length) {
71
+ variables.add(pathExpr.original);
72
+ }
73
+ }
74
+ // Process parameters (they might contain variables)
75
+ if (mustache.params) {
76
+ mustache.params.forEach((param) => extractVariables(param, variables));
77
+ }
78
+ } else if (node.type === 'PathExpression') {
79
+ const pathExpr = node as hbs.AST.PathExpression;
80
+ if (pathExpr.data === false) {
81
+ variables.add(pathExpr.original);
82
+ }
83
+ } else if (node.type === 'BlockStatement') {
84
+ const block = node as hbs.AST.BlockStatement;
85
+ if (block.program) {
86
+ extractVariables(block.program, variables);
87
+ }
88
+ if (block.inverse) {
89
+ extractVariables(block.inverse, variables);
90
+ }
91
+ // Process block parameters
92
+ if (block.params) {
93
+ block.params.forEach((param) => extractVariables(param, variables));
94
+ }
95
+ } else if (node.type === 'Program') {
96
+ const program = node as hbs.AST.Program;
97
+ program.body.forEach((child) => extractVariables(child, variables));
98
+ } else if (node.type === 'PartialStatement') {
99
+ const partial = node as hbs.AST.PartialStatement;
100
+ if (partial.params) {
101
+ partial.params.forEach((param) => extractVariables(param, variables));
102
+ }
103
+ }
104
+
105
+ return variables;
106
+ }
107
+
108
+ /**
109
+ * Resolve a variable path in a context object
110
+ * Returns [value, resolved] where resolved indicates if the path exists
111
+ */
112
+ function resolveVariable(path: string, context: Record<string, unknown>): [unknown, boolean] {
113
+ const parts = path.split('.');
114
+ let current: any = context;
115
+
116
+ for (const part of parts) {
117
+ if (current == null || typeof current !== 'object') {
118
+ return [undefined, false];
119
+ }
120
+ if (!(part in current)) {
121
+ return [undefined, false];
122
+ }
123
+ current = current[part];
124
+ }
125
+
126
+ return [current, true];
127
+ }
128
+
129
+ /**
130
+ * Build segments from rendered output by identifying variable boundaries
131
+ */
132
+ function buildSegments(
133
+ template: string,
134
+ rendered: string,
135
+ context: Record<string, unknown>
136
+ ): TemplateSegment[] {
137
+ const segments: TemplateSegment[] = [];
138
+
139
+ // Find all {{variable}} patterns in the rendered output (these are unresolved)
140
+ const unresolvedPattern = /\{\{([^}]+)\}\}/g;
141
+ const unresolvedMatches = Array.from(rendered.matchAll(unresolvedPattern));
142
+
143
+ if (unresolvedMatches.length === 0) {
144
+ // No unresolved variables, check if we have any variables at all
145
+ try {
146
+ const ast = Handlebars.parse(template);
147
+ const variables = extractVariables(ast);
148
+
149
+ if (variables.size === 0) {
150
+ // Pure text template
151
+ return [{ type: 'text', value: rendered }];
152
+ }
153
+
154
+ // All variables resolved - need to parse more carefully
155
+ // This is complex, so for MVP we'll use a simpler heuristic:
156
+ // Split by variable positions in the template and match to rendered output
157
+ return buildSegmentsWithResolvedVariables(template, rendered, context, variables);
158
+ } catch {
159
+ // If parsing fails, return as text
160
+ return [{ type: 'text', value: rendered }];
161
+ }
162
+ }
163
+
164
+ // Build segments with unresolved variables
165
+ let lastIndex = 0;
166
+
167
+ for (const match of unresolvedMatches) {
168
+ const beforeText = rendered.substring(lastIndex, match.index);
169
+ if (beforeText) {
170
+ segments.push({ type: 'text', value: beforeText });
171
+ }
172
+
173
+ segments.push({
174
+ type: 'variable',
175
+ value: match[0],
176
+ variableName: match[1].trim(),
177
+ resolved: false,
178
+ });
179
+
180
+ lastIndex = match.index! + match[0].length;
181
+ }
182
+
183
+ // Add remaining text
184
+ if (lastIndex < rendered.length) {
185
+ segments.push({ type: 'text', value: rendered.substring(lastIndex) });
186
+ }
187
+
188
+ return segments;
189
+ }
190
+
191
+ /**
192
+ * Build segments when all variables are resolved
193
+ * This uses template analysis to identify variable positions
194
+ */
195
+ function buildSegmentsWithResolvedVariables(
196
+ template: string,
197
+ rendered: string,
198
+ context: Record<string, unknown>,
199
+ variables: Set<string>
200
+ ): TemplateSegment[] {
201
+ const segments: TemplateSegment[] = [];
202
+
203
+ // Find all variable positions in the template
204
+ const varPattern = /\{\{([^}]+)\}\}/g;
205
+ const templateMatches = Array.from(template.matchAll(varPattern));
206
+
207
+ if (templateMatches.length === 0) {
208
+ return [{ type: 'text', value: rendered }];
209
+ }
210
+
211
+ let templateIndex = 0;
212
+ let renderedIndex = 0;
213
+
214
+ for (const match of templateMatches) {
215
+ const varName = match[1].trim();
216
+
217
+ // Check if this is a helper or a simple variable
218
+ const isHelper = varName.startsWith('#') ||
219
+ varName.startsWith('/') ||
220
+ varName.startsWith('^') ||
221
+ varName.startsWith('>') ||
222
+ !variables.has(varName);
223
+
224
+ if (isHelper) {
225
+ continue; // Skip helpers for now
226
+ }
227
+
228
+ // Add text before this variable
229
+ const textBefore = template.substring(templateIndex, match.index);
230
+ if (textBefore && renderedIndex < rendered.length) {
231
+ const textLength = textBefore.length;
232
+ segments.push({ type: 'text', value: rendered.substring(renderedIndex, renderedIndex + textLength) });
233
+ renderedIndex += textLength;
234
+ }
235
+
236
+ // Resolve the variable
237
+ const [value, resolved] = resolveVariable(varName, context);
238
+
239
+ if (resolved && value !== undefined) {
240
+ const valueStr = String(value);
241
+ segments.push({
242
+ type: 'variable',
243
+ value: valueStr,
244
+ variableName: varName,
245
+ resolved: true,
246
+ });
247
+ renderedIndex += valueStr.length;
248
+ } else {
249
+ // Unresolved - should appear as {{varName}} in output
250
+ const unresolvedStr = `{{${varName}}}`;
251
+ segments.push({
252
+ type: 'variable',
253
+ value: unresolvedStr,
254
+ variableName: varName,
255
+ resolved: false,
256
+ });
257
+ renderedIndex += unresolvedStr.length;
258
+ }
259
+
260
+ templateIndex = match.index! + match[0].length;
261
+ }
262
+
263
+ // Add remaining text
264
+ if (renderedIndex < rendered.length) {
265
+ segments.push({ type: 'text', value: rendered.substring(renderedIndex) });
266
+ }
267
+
268
+ return segments;
269
+ }
270
+
33
271
  /**
34
272
  * Parse and evaluate a template string using Handlebars
35
273
  *
36
274
  * @param template - Template string with {{variables}}
37
275
  * @param context - Data context for variable lookup
38
- * @returns Evaluated string
276
+ * @returns ParsedTemplate with structured segments and variable metadata
39
277
  */
40
- export function parseTemplate(template: string, context: Record<string, unknown>): string {
278
+ export function parseTemplate(template: string, context: Record<string, unknown>): ParsedTemplate {
41
279
  try {
42
280
  const handlebarTemplate = Handlebars.compile(template, { noEscape: true });
43
- return handlebarTemplate(context);
281
+ const rendered = handlebarTemplate(context);
282
+
283
+ // Build structured segments
284
+ const segments = buildSegments(template, rendered, context);
285
+
286
+ return new ParsedTemplate(segments);
44
287
  } catch (error) {
45
- return `{ERROR: Template parsing failed - ${error instanceof Error ? error.message : 'unknown'}}`;
288
+ // Return error as a single text segment
289
+ return new ParsedTemplate([
290
+ {
291
+ type: 'text',
292
+ value: `{ERROR: Template parsing failed - ${error instanceof Error ? error.message : 'unknown'}}`,
293
+ },
294
+ ]);
46
295
  }
47
296
  }
48
-
@@ -101,7 +101,7 @@ function renderScenario(context: WorkflowContext): string {
101
101
 
102
102
  // Introduction
103
103
  if (scenario.template.introduction) {
104
- parts.push(parseTemplate(scenario.template.introduction, evalContext));
104
+ parts.push(parseTemplate(scenario.template.introduction, evalContext).toString());
105
105
  parts.push(''); // Blank line
106
106
  }
107
107
 
@@ -128,7 +128,7 @@ function renderScenario(context: WorkflowContext): string {
128
128
  if (parts.length > 0) {
129
129
  parts.push(''); // Blank line before summary
130
130
  }
131
- parts.push(parseTemplate(scenario.template.summary, evalContext));
131
+ parts.push(parseTemplate(scenario.template.summary, evalContext).toString());
132
132
  }
133
133
 
134
134
  return parts.join('\n');
@@ -182,11 +182,11 @@ function renderSpanTree(
182
182
 
183
183
  // Render span
184
184
  if (scenario.template.span) {
185
- const spanText = parseTemplate(scenario.template.span, eventContext);
185
+ const spanText = parseTemplate(scenario.template.span, eventContext).toString();
186
186
  parts.push(indent + spanText);
187
187
  } else if (scenario.template.events?.[node.span.name]) {
188
188
  const eventTemplate = scenario.template.events[node.span.name];
189
- const eventText = parseTemplate(eventTemplate, eventContext);
189
+ const eventText = parseTemplate(eventTemplate, eventContext).toString();
190
190
  parts.push(indent + eventText);
191
191
  } else {
192
192
  // Default span rendering
@@ -267,7 +267,7 @@ function renderTimeline(
267
267
  if (event.type === 'log') {
268
268
  eventText = renderLog(event, scenario, { ...eventContext, log: event }, formatting);
269
269
  } else if (scenario.template.events?.[event.name]) {
270
- eventText = parseTemplate(scenario.template.events[event.name], eventContext);
270
+ eventText = parseTemplate(scenario.template.events[event.name], eventContext).toString();
271
271
  }
272
272
 
273
273
  if (eventText) {
@@ -303,13 +303,13 @@ function renderLog(
303
303
  const severity = getSeverityLevel(log.severityNumber);
304
304
  const logTemplate = scenario.template.logs[severity] || scenario.template.logs.default;
305
305
  if (logTemplate) {
306
- return parseTemplate(logTemplate, context);
306
+ return parseTemplate(logTemplate, context).toString();
307
307
  }
308
308
  }
309
309
 
310
310
  // Check for event-specific template
311
311
  if (scenario.template.events?.[`log.${log.severityText?.toLowerCase()}`]) {
312
- return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context);
312
+ return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context).toString();
313
313
  }
314
314
 
315
315
  // Default log rendering
@@ -345,7 +345,7 @@ function renderFlow(flow: Array<string | FlowDirective>, context: Record<string,
345
345
  for (const item of flow) {
346
346
  if (typeof item === 'string') {
347
347
  // Simple string template
348
- parts.push(parseTemplate(item, context));
348
+ parts.push(parseTemplate(item, context).toString());
349
349
  } else {
350
350
  // Flow directive
351
351
  if (item.forEach && item.template) {
@@ -359,19 +359,19 @@ function renderFlow(flow: Array<string | FlowDirective>, context: Record<string,
359
359
  ...(typeof collectionItem === 'object' && collectionItem !== null ? (collectionItem as Record<string, unknown>) : {}),
360
360
  index: i,
361
361
  };
362
- parts.push(parseTemplate(item.template, itemContext));
362
+ parts.push(parseTemplate(item.template, itemContext).toString());
363
363
  }
364
364
  }
365
365
  } else if (item.if) {
366
366
  // Conditional
367
- const condition = parseTemplate(item.if, context);
367
+ const condition = parseTemplate(item.if, context).toString();
368
368
  if (condition === 'true' || condition === '1') {
369
369
  if (item.then) {
370
- parts.push(parseTemplate(item.then, context));
370
+ parts.push(parseTemplate(item.then, context).toString());
371
371
  }
372
372
  } else {
373
373
  if (item.else) {
374
- parts.push(parseTemplate(item.else, context));
374
+ parts.push(parseTemplate(item.else, context).toString());
375
375
  }
376
376
  }
377
377
  }