@gobing-ai/ts-dual-workflow-engine 0.4.28 → 0.4.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,7 +49,7 @@ The package exposes:
49
49
  |--------|---------|
50
50
  | `loadWorkflowDef()` / `loadWorkflowDefFromText()` | YAML/JSON workflow loading and validation |
51
51
  | `validateWorkflowDef()` | Semantic invariant checking beyond Zod schema |
52
- | `StateMachineWorkflowDefSchema` / `TransitionFlowWorkflowDefSchema` / `WorkflowDefSchema` | Zod schemas for workflow definition validation |
52
+ | `StateMachineWorkflowDefSchema` / `TransitionFlowWorkflowDefSchema` / `WorkflowDefSchema` / `WorkflowExtensionsSchema` | Zod schemas for workflow definition validation |
53
53
  | `ActionDefSchema` / `GuardDefSchema` | Zod schemas for action and guard definitions |
54
54
 
55
55
  ### Extensions
@@ -57,7 +57,8 @@ The package exposes:
57
57
  | Export | Purpose |
58
58
  |--------|---------|
59
59
  | `loadWorkflowExtensionsIntoHost()` | Trust-gated extension module loading for actions and guards |
60
- | `WorkflowExtensionRef` / `LoadWorkflowExtensionsOptions` / `WorkflowExtensionKind` | Extension loading types |
60
+ | `collectWorkflowExtensions()` | Map a YAML `extensions` block to `WorkflowExtensionRef[]` (no import) |
61
+ | `WorkflowExtensions` / `WorkflowExtensionRef` / `LoadWorkflowExtensionsOptions` / `WorkflowExtensionKind` | Extension block and loading types |
61
62
 
62
63
  ### Runtime
63
64
 
@@ -706,7 +707,7 @@ const host = new WorkflowEngineHost();
706
707
 
707
708
  await loadWorkflowExtensionsIntoHost(
708
709
  host,
709
- [{ kind: 'actions', absPath: '/path/to/my-extension.ts', sourceName: 'my-config' }],
710
+ [{ kind: 'actions', path: './exts/audit.ts', baseDir: '/project/workflows', sourceName: 'my-config' }],
710
711
  {
711
712
  allowExtensions: true, // required — disabled by default
712
713
  moduleLoader: (absPath) => import(absPath),
@@ -716,12 +717,54 @@ await loadWorkflowExtensionsIntoHost(
716
717
 
717
718
  When a ref has `kind: 'actions'`, only the module's `actions[]` entries are registered; `guards[]` in the same module are ignored (and vice versa). Override warnings are emitted through an optional `logger.warn` callback when an extension replaces a built-in capability.
718
719
 
720
+ ### Declaring extensions in YAML
721
+
722
+ Like rule presets, a workflow file can declare relative extension modules inline. Both dialects accept an optional top-level `extensions` block with `actions` and/or `guards` arrays; the paths are resolved against the declaring YAML's directory and must be relative (absolute paths and `..` traversal are rejected at parse time):
723
+
724
+ ```yaml
725
+ # workflows/approval.yaml
726
+ kind: state-machine
727
+ name: approval
728
+ extensions:
729
+ actions: ["./exts/audit.ts"]
730
+ guards: ["./exts/flag.ts"]
731
+ initialState: draft
732
+ terminalStates: [done]
733
+ states:
734
+ - id: draft
735
+ - id: done
736
+ transitions:
737
+ - from: draft
738
+ to: done
739
+ guard:
740
+ kind: feature-flag
741
+ ```
742
+
743
+ ```ts
744
+ import {
745
+ collectWorkflowExtensions,
746
+ loadWorkflowDefFromText,
747
+ loadWorkflowExtensionsIntoHost,
748
+ WorkflowEngineHost,
749
+ } from '@gobing-ai/ts-dual-workflow-engine';
750
+ import { dirnamePath } from '@gobing-ai/ts-runtime';
751
+
752
+ const def = loadWorkflowDefFromText(yamlText);
753
+ const refs = collectWorkflowExtensions(def.name, dirnamePath(workflowPath), def.extensions);
754
+ await loadWorkflowExtensionsIntoHost(host, refs, {
755
+ allowExtensions: true,
756
+ moduleLoader: (absPath) => import(absPath),
757
+ });
758
+ ```
759
+
760
+ `collectWorkflowExtensions` maps the block to `WorkflowExtensionRef[]` (kind order `actions` then `guards`) without importing or resolving anything; it is the workflow analog of rule-engine's `collectExtensions`.
761
+
719
762
  ### Security
720
763
 
721
764
  **Extension modules execute arbitrary code.** The trust gate is fail-closed:
722
765
 
723
766
  - `allowExtensions` defaults to `false`. When refs are present and loading is not explicitly allowed, the loader throws **before any import** — a declared extension is never silently dropped.
724
- - Extension paths are validated at load time; `..` traversal is rejected.
767
+ - Extension paths are rejected at schema parse time (absolute paths and `..` traversal) and again at load time by `assertRelativeExtensionPath`.
725
768
  - The caller controls the `moduleLoader` function. Tests use a stub; production callers use `(absPath) => import(absPath)`. The loader itself has no ambient code-loading capability.
726
769
 
727
770
  ## Zod Schemas
@@ -1 +1 @@
1
- {"version":3,"file":"action-step.d.ts","sourceRoot":"","sources":["../src/action-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGtH;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAElE,iGAAiG;AACjG,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,aAAa,GAAG,SAAS,CAAC;CACtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAC/B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAgD3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAS3B"}
1
+ {"version":3,"file":"action-step.d.ts","sourceRoot":"","sources":["../src/action-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGtH;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAElE,iGAAiG;AACjG,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,aAAa,GAAG,SAAS,CAAC;CACtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAC/B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAkD3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAS3B"}
@@ -1,3 +1,4 @@
1
+ import { defaultActionRedactor } from './persistence.js';
1
2
  import { runtimeBuiltins } from './run-lifecycle.js';
2
3
  import { resolveOnErrorPolicy, resolveTemplates } from './variables.js';
3
4
  /**
@@ -44,7 +45,7 @@ export async function runActionStep(action, vars, deps) {
44
45
  // keeps a rejected write from surfacing as an unhandledRejection (repo convention,
45
46
  // see runtime/process-executor.ts).
46
47
  void persistence
47
- .saveActionFinalize(actionId, result?.ok !== false ? 'done' : 'failed', durationMs, result?.ok ?? false, result)
48
+ .saveActionFinalize(actionId, result?.ok !== false ? 'done' : 'failed', durationMs, result?.ok ?? false, action.kind, result, deps.options.redactor ?? defaultActionRedactor)
48
49
  .catch(() => undefined);
49
50
  }
50
51
  if (result.terminal === true)
package/dist/events.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { EventSeverity } from '@gobing-ai/ts-infra';
1
2
  /** Typed event map for workflow-engine run observability. All events prefixed `workflow.`. */
2
3
  export type WorkflowEngineEvents = {
3
4
  /** Emitted when a run begins (inside the span). */
@@ -7,6 +8,7 @@ export type WorkflowEngineEvents = {
7
8
  runId: string;
8
9
  dryRun: boolean;
9
10
  externalKey?: string;
11
+ severity: EventSeverity;
10
12
  }) => void;
11
13
  /** Emitted when a run completes successfully. */
12
14
  'workflow.run.done': (data: {
@@ -14,6 +16,7 @@ export type WorkflowEngineEvents = {
14
16
  finalState: string;
15
17
  transitionsTaken: number;
16
18
  externalKey?: string;
19
+ severity: EventSeverity;
17
20
  }) => void;
18
21
  /** Emitted when a run fails. */
19
22
  'workflow.run.failed': (data: {
@@ -21,12 +24,14 @@ export type WorkflowEngineEvents = {
21
24
  finalState: string;
22
25
  reason: string;
23
26
  externalKey?: string;
27
+ severity: EventSeverity;
24
28
  }) => void;
25
29
  /** Emitted when entering a state or node. */
26
30
  'workflow.node.enter': (data: {
27
31
  runId: string;
28
32
  node: string;
29
33
  transitionsTaken: number;
34
+ severity: EventSeverity;
30
35
  }) => void;
31
36
  /** Emitted on a state/node transition. */
32
37
  'workflow.node.transition': (data: {
@@ -35,12 +40,14 @@ export type WorkflowEngineEvents = {
35
40
  to: string;
36
41
  trigger: string | null;
37
42
  externalKey?: string;
43
+ severity: EventSeverity;
38
44
  }) => void;
39
45
  /** Emitted when an action starts executing. */
40
46
  'workflow.action.start': (data: {
41
47
  runId: string;
42
48
  node: string;
43
49
  kind: string;
50
+ severity: EventSeverity;
44
51
  }) => void;
45
52
  /** Emitted when an action finishes executing (success or failure). */
46
53
  'workflow.action.done': (data: {
@@ -49,6 +56,7 @@ export type WorkflowEngineEvents = {
49
56
  kind: string;
50
57
  durationMs: number;
51
58
  ok: boolean;
59
+ severity: EventSeverity;
52
60
  }) => void;
53
61
  /** Emitted when a non-fatal action failure is continued past (onError: 'continue'). */
54
62
  'workflow.action.failed_continue': (data: {
@@ -56,17 +64,20 @@ export type WorkflowEngineEvents = {
56
64
  node: string;
57
65
  transitionsTaken: number;
58
66
  error?: string;
67
+ severity: EventSeverity;
59
68
  }) => void;
60
69
  /** Emitted by the builtin `event.emit` action for custom user-defined events. */
61
70
  'workflow.custom': (data: {
62
71
  name: string;
63
72
  payload: Record<string, unknown>;
73
+ severity: EventSeverity;
64
74
  }) => void;
65
75
  /** Emitted by the builtin `note` action for workflow-visible annotations. */
66
76
  'workflow.hitl.note': (data: {
67
77
  runId: string;
68
78
  node: string;
69
79
  message: string;
80
+ severity: EventSeverity;
70
81
  }) => void;
71
82
  /** Emitted when a guard condition is evaluated. Fires for every guard, including rejected ones. */
72
83
  'workflow.guard.evaluated': (data: {
@@ -76,6 +87,7 @@ export type WorkflowEngineEvents = {
76
87
  kind: string;
77
88
  passed: boolean;
78
89
  externalKey?: string;
90
+ severity: EventSeverity;
79
91
  }) => void;
80
92
  /** Emitted when an interactive HITL prompt is presented and the engine waits for input. */
81
93
  'workflow.hitl.ask': (data: {
@@ -83,12 +95,14 @@ export type WorkflowEngineEvents = {
83
95
  node: string;
84
96
  kind: string;
85
97
  message: string;
98
+ severity: EventSeverity;
86
99
  }) => void;
87
100
  /** Emitted when an interactive HITL prompt receives a response. */
88
101
  'workflow.hitl.response': (data: {
89
102
  runId: string;
90
103
  node: string;
91
104
  ok: boolean;
105
+ severity: EventSeverity;
92
106
  }) => void;
93
107
  /** Emitted when a run's state is force-set via reseed (consumer-side authority reconciliation). */
94
108
  'workflow.run.reseeded': (data: {
@@ -96,6 +110,7 @@ export type WorkflowEngineEvents = {
96
110
  fromState: string;
97
111
  toState: string;
98
112
  externalKey?: string;
113
+ severity: EventSeverity;
99
114
  }) => void;
100
115
  /** Emitted when an external transition request is allowed and committed. */
101
116
  'workflow.transition.requested': (data: {
@@ -104,6 +119,7 @@ export type WorkflowEngineEvents = {
104
119
  to: string;
105
120
  trigger: string | null;
106
121
  externalKey?: string;
122
+ severity: EventSeverity;
107
123
  }) => void;
108
124
  /** Emitted when an external transition request is denied. */
109
125
  'workflow.transition.denied': (data: {
@@ -112,6 +128,7 @@ export type WorkflowEngineEvents = {
112
128
  to: string;
113
129
  reason: string;
114
130
  externalKey?: string;
131
+ severity: EventSeverity;
115
132
  }) => void;
116
133
  /** Emitted when a run pauses at a declared pause point. */
117
134
  'workflow.run.paused': (data: {
@@ -119,12 +136,14 @@ export type WorkflowEngineEvents = {
119
136
  node: string;
120
137
  transitionsTaken: number;
121
138
  externalKey?: string;
139
+ severity: EventSeverity;
122
140
  }) => void;
123
141
  /** Emitted when a paused run is resumed. */
124
142
  'workflow.run.resumed': (data: {
125
143
  runId: string;
126
144
  node: string;
127
145
  externalKey?: string;
146
+ severity: EventSeverity;
128
147
  }) => void;
129
148
  };
130
149
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IAC/B,mDAAmD;IACnD,sBAAsB,EAAE,CAAC,IAAI,EAAE;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,iDAAiD;IACjD,mBAAmB,EAAE,CAAC,IAAI,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,gCAAgC;IAChC,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnH,6CAA6C;IAC7C,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjG,0CAA0C;IAC1C,0BAA0B,EAAE,CAAC,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,+CAA+C;IAC/C,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,sEAAsE;IACtE,sBAAsB,EAAE,CAAC,IAAI,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,OAAO,CAAC;KACf,KAAK,IAAI,CAAC;IACX,uFAAuF;IACvF,iCAAiC,EAAE,CAAC,IAAI,EAAE;QACtC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,KAAK,IAAI,CAAC;IACX,iFAAiF;IACjF,iBAAiB,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,6EAA6E;IAC7E,oBAAoB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,mGAAmG;IACnG,0BAA0B,EAAE,CAAC,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,2FAA2F;IAC3F,mBAAmB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACpG,mEAAmE;IACnE,wBAAwB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,mGAAmG;IACnG,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,4EAA4E;IAC5E,+BAA+B,EAAE,CAAC,IAAI,EAAE;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,6DAA6D;IAC7D,4BAA4B,EAAE,CAAC,IAAI,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,2DAA2D;IAC3D,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,4CAA4C;IAC5C,sBAAsB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACjG,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IAC/B,mDAAmD;IACnD,sBAAsB,EAAE,CAAC,IAAI,EAAE;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,iDAAiD;IACjD,mBAAmB,EAAE,CAAC,IAAI,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,gCAAgC;IAChC,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,6CAA6C;IAC7C,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,0CAA0C;IAC1C,0BAA0B,EAAE,CAAC,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,+CAA+C;IAC/C,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,CAAA;KAAE,KAAK,IAAI,CAAC;IAChH,sEAAsE;IACtE,sBAAsB,EAAE,CAAC,IAAI,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,OAAO,CAAC;QACZ,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,uFAAuF;IACvF,iCAAiC,EAAE,CAAC,IAAI,EAAE;QACtC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,iFAAiF;IACjF,iBAAiB,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,aAAa,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,6EAA6E;IAC7E,oBAAoB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,CAAA;KAAE,KAAK,IAAI,CAAC;IAChH,mGAAmG;IACnG,0BAA0B,EAAE,CAAC,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,2FAA2F;IAC3F,mBAAmB,EAAE,CAAC,IAAI,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,mEAAmE;IACnE,wBAAwB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,aAAa,CAAA;KAAE,KAAK,IAAI,CAAC;IAChH,mGAAmG;IACnG,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,4EAA4E;IAC5E,+BAA+B,EAAE,CAAC,IAAI,EAAE;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,6DAA6D;IAC7D,4BAA4B,EAAE,CAAC,IAAI,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,2DAA2D;IAC3D,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,4CAA4C;IAC5C,sBAAsB,EAAE,CAAC,IAAI,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,aAAa,CAAC;KAC3B,KAAK,IAAI,CAAC;CACd,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { Logger } from '@gobing-ai/ts-infra';
2
2
  import type { WorkflowEngineHost } from './host';
3
+ import type { WorkflowExtensions } from './types';
3
4
  /** Minimal warning sink accepted for non-fatal extension diagnostics; a full {@link Logger} satisfies it. */
4
5
  export type WorkflowExtensionLogger = Pick<Logger, 'warn'>;
5
6
  /**
@@ -13,15 +14,17 @@ export type WorkflowExtensionKind = 'actions' | 'guards';
13
14
  /**
14
15
  * A single workflow extension module reference.
15
16
  *
16
- * The caller provides a pre-resolved absolute path; the loader adapts it to the
17
- * shared `ExtensionRef` format before delegating to the generic core so the
18
- * trust guard always governs the module that gets imported.
17
+ * The caller supplies the authored relative path plus the declaring directory; the
18
+ * shared loader resolves `(baseDir, path)` and applies its traversal + symlink
19
+ * guards to the authored string exactly as declared (task 0060 C2).
19
20
  */
20
21
  export interface WorkflowExtensionRef {
21
22
  /** Target capability registry. */
22
23
  readonly kind: WorkflowExtensionKind;
23
- /** Absolute path to the module to import. */
24
- readonly absPath: string;
24
+ /** Relative path as authored (e.g. `./exts/foo.ts`). */
25
+ readonly path: string;
26
+ /** Absolute directory the authored `path` is resolved against. */
27
+ readonly baseDir: string;
25
28
  /** Name of the config declaring this extension (for diagnostics). */
26
29
  readonly sourceName: string;
27
30
  }
@@ -49,6 +52,16 @@ export interface LoadWorkflowExtensionsOptions {
49
52
  */
50
53
  readonly realPath?: (absPath: string) => string;
51
54
  }
55
+ /**
56
+ * Build `WorkflowExtensionRef[]` from a YAML `extensions` block without importing
57
+ * or resolving anything.
58
+ *
59
+ * Kind order is `actions` then `guards`. Paths are kept **as authored** (no
60
+ * basename smash, no `resolve(sourceDir, path)`) so the shared loader sees the
61
+ * real declaration — a `..` segment or absolute path is rejected there by
62
+ * `assertRelativeExtensionPath`, not after a rewrite here.
63
+ */
64
+ export declare function collectWorkflowExtensions(sourceName: string, sourceDir: string, extensions: WorkflowExtensions | undefined): WorkflowExtensionRef[];
52
65
  /**
53
66
  * Import each extension module behind an explicit trust gate and register
54
67
  * its actions and/or guards on the workflow host.
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAGjD,6GAA6G;AAC7G,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED,sDAAsD;AACtD,MAAM,WAAW,6BAA6B;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,8BAA8B,CAChD,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,OAAO,EAAE,6BAA6B,GACvC,OAAO,CAAC,IAAI,CAAC,CAsCf"}
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAA6B,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7E,6GAA6G;AAC7G,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED,sDAAsD;AACtD,MAAM,WAAW,6BAA6B;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACrC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAC3C,oBAAoB,EAAE,CASxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,8BAA8B,CAChD,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,OAAO,EAAE,6BAA6B,GACvC,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -1,6 +1,25 @@
1
- import { basenamePath, dirnamePath, SEP } from '@gobing-ai/ts-runtime';
2
1
  import { loadExtensionModules } from '@gobing-ai/ts-runtime/extension';
3
2
  import { WorkflowValidationError } from './errors.js';
3
+ /**
4
+ * Build `WorkflowExtensionRef[]` from a YAML `extensions` block without importing
5
+ * or resolving anything.
6
+ *
7
+ * Kind order is `actions` then `guards`. Paths are kept **as authored** (no
8
+ * basename smash, no `resolve(sourceDir, path)`) so the shared loader sees the
9
+ * real declaration — a `..` segment or absolute path is rejected there by
10
+ * `assertRelativeExtensionPath`, not after a rewrite here.
11
+ */
12
+ export function collectWorkflowExtensions(sourceName, sourceDir, extensions) {
13
+ if (extensions === undefined)
14
+ return [];
15
+ const refs = [];
16
+ for (const kind of ['actions', 'guards']) {
17
+ for (const path of extensions[kind] ?? []) {
18
+ refs.push({ kind, sourceName, path, baseDir: sourceDir });
19
+ }
20
+ }
21
+ return refs;
22
+ }
4
23
  /**
5
24
  * Import each extension module behind an explicit trust gate and register
6
25
  * its actions and/or guards on the workflow host.
@@ -17,25 +36,13 @@ import { WorkflowValidationError } from './errors.js';
17
36
  export async function loadWorkflowExtensionsIntoHost(host, refs, options) {
18
37
  if (refs.length === 0)
19
38
  return;
20
- // Enforce relative-path guard before adapting to the shared format.
21
- // The shared loader's assertRelativeExtensionPath applies to the derived
22
- // (basename) path, which is always clean this pre-check catches `..`
23
- // traversal in the caller-supplied absPath before basename strips it (R6).
24
- for (const ref of refs) {
25
- const segments = ref.absPath.split(SEP);
26
- if (segments.includes('..')) {
27
- throw new Error(`extension path "${ref.absPath}" declared by "${ref.sourceName}" must not contain ".." traversal`);
28
- }
29
- }
30
- // Adapt WorkflowExtensionRef → shared ExtensionRef so the generic loader
31
- // governs every import. The shared loader resolves (baseDir, path) ->
32
- // absPath internally; we supply dirname/basename so the resolved path
33
- // reconstructs the caller's original absPath. assertRelativeExtensionPath
34
- // is satisfied because basenamePath() is always a simple filename.
39
+ // Map 1:1 onto the shared ref shape — no dirname/basename smash, so the shared
40
+ // loader's assertRelativeExtensionPath + realPath confinement govern the authored
41
+ // path exactly as declared (task 0060 C2).
35
42
  const sharedRefs = refs.map((ref) => ({
36
43
  kind: ref.kind,
37
- path: `./${basenamePath(ref.absPath)}`,
38
- baseDir: dirnamePath(ref.absPath),
44
+ path: ref.path,
45
+ baseDir: ref.baseDir,
39
46
  sourceName: ref.sourceName,
40
47
  }));
41
48
  const sharedOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,iCAAiC,CAAC;AAE5F,OAAO,KAAK,EACR,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACd,MAAM,SAAS,CAAC;AAEjB,sDAAsD;AACtD,qBAAa,kBAAkB;IAIf,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAHhE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2D;IACnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyD;gBAE3D,YAAY,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,YAAA;IAEhE,4CAA4C;IAC5C,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,gBAA8B,GAAG,IAAI;IAKlF,0CAA0C;IAC1C,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,GAAE,gBAA8B,GAAG,IAAI;IAK/E,0DAA0D;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B,0DAA0D;IAC1D,WAAW,IAAI,MAAM,EAAE;IAIvB,yDAAyD;IACzD,UAAU,IAAI,MAAM,EAAE;IAItB,mHAAmH;IACnH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIxD,0DAA0D;IAC1D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIvD,mCAAmC;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOjH,mCAAmC;IAC7B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5G,uFAAuF;IACjF,mBAAmB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,qBAAqB,CAAC;CAKpC;AAED,4FAA4F;AAC5F,wBAAgB,+BAA+B,CAC3C,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAC;IAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAA;CAAO,GACjG,kBAAkB,CAsBpB;AAED,gFAAgF;AAChF,qBAAa,gBAAiB,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,UAAU;IAEvB,kEAAkE;IAC5D,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;CASrG;AAED,yFAAyF;AACzF,qBAAa,qBAAsB,YAAW,YAAY;IACtD,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;CAOrG;AAED,kEAAkE;AAClE,qBAAa,iBAAkB,YAAW,YAAY;IAGtC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAF5C,QAAQ,CAAC,IAAI,WAAW;gBAEK,eAAe,EAAE,eAAe;IAE7D;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;CAkBpG;AAED,uGAAuG;AACvG,qBAAa,gBAAiB,YAAW,WAAW;IAGpC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAF5C,QAAQ,CAAC,IAAI,WAAW;gBAEK,eAAe,EAAE,eAAe;IAEvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAiB1G"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
package/dist/host.js CHANGED
@@ -88,6 +88,7 @@ export class NoteActionRunner {
88
88
  runId: context.runId,
89
89
  node: context.stateOrNodeId,
90
90
  message,
91
+ severity: 'info',
91
92
  });
92
93
  return { ok: true, data: { message } };
93
94
  }
@@ -100,7 +101,7 @@ export class EventEmitActionRunner {
100
101
  if (!name)
101
102
  return { ok: false, error: 'event.emit requires a non-empty "name" option' };
102
103
  const payload = options.payload ?? {};
103
- void context?.events?.emit('workflow.custom', { name, payload });
104
+ void context?.events?.emit('workflow.custom', { name, payload, severity: 'info' });
104
105
  return { ok: true, data: { name, payload } };
105
106
  }
106
107
  }
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  export { loadWorkflowDef, loadWorkflowDefFromText, validateWorkflowDef } from './config';
2
2
  export { FSMError, RunCollisionError, WorkflowResumeError, WorkflowValidationError } from './errors';
3
3
  export type { WorkflowEngineEvents } from './events';
4
- export { type LoadWorkflowExtensionsOptions, loadWorkflowExtensionsIntoHost, type WorkflowExtensionKind, type WorkflowExtensionLogger, type WorkflowExtensionRef, } from './extensions';
4
+ export { collectWorkflowExtensions, type LoadWorkflowExtensionsOptions, loadWorkflowExtensionsIntoHost, type WorkflowExtensionKind, type WorkflowExtensionLogger, type WorkflowExtensionRef, } from './extensions';
5
5
  export type { HitlAnswer, HitlRequest, HitlRequestKind, HitlResponder } from './hitl';
6
6
  export { createDefaultWorkflowEngineHost, EventEmitActionRunner, NoteActionRunner, ShellActionRunner, ShellGuardRunner, WorkflowEngineHost, } from './host';
7
7
  export { applyWorkflowEngineSchema, DbWorkflowPersistenceAdapter, MemoryWorkflowPersistenceAdapter, } from './persistence';
8
8
  export { allowedEnv, RUNTIME_BUILTIN_KEYS, RunLifecycle, type RunLifecycleDeps, runtimeBuiltins, type WorkflowMode, } from './run-lifecycle';
9
- export { ActionDefSchema, GuardDefSchema, StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema, WorkflowDefSchema, } from './schema';
9
+ export { ActionDefSchema, GuardDefSchema, StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema, WorkflowDefSchema, WorkflowExtensionsSchema, } from './schema';
10
10
  export { WORKFLOW_ENGINE_SCHEMA_SQL } from './schema-sql';
11
11
  export { WorkflowService } from './service';
12
12
  export { StateMachineDriver, type StateMachineDriverOptions } from './state-machine';
13
13
  export { TransitionFlowDriver, type TransitionFlowDriverOptions } from './transition-flow';
14
- export type { ActionDef, ActionRedactor, ActionResult, ActionRunContext, ActionRunner, ActionRunRecord, Env, FlowEdgeDef, FlowNodeDef, GuardContext, GuardDef, GuardEvaluationResult, GuardRunner, OnErrorPolicy, StateDef, StateMachineWorkflowDef, TransitionAllowed, TransitionDef, TransitionDenied, TransitionDeniedReason, TransitionFlowWorkflowDef, TransitionRequestResult, Vars, WorkflowDef, WorkflowPersistenceAdapter, WorkflowRunOptions, WorkflowRunRecord, WorkflowRunResult, WorkflowStatus, } from './types';
14
+ export type { ActionDef, ActionRedactor, ActionResult, ActionRunContext, ActionRunner, ActionRunRecord, Env, FlowEdgeDef, FlowNodeDef, GuardContext, GuardDef, GuardEvaluationResult, GuardRunner, OnErrorPolicy, StateDef, StateMachineWorkflowDef, TransitionAllowed, TransitionDef, TransitionDenied, TransitionDeniedReason, TransitionFlowWorkflowDef, TransitionRequestResult, Vars, WorkflowDef, WorkflowExtensions, WorkflowPersistenceAdapter, WorkflowRunOptions, WorkflowRunRecord, WorkflowRunResult, WorkflowStatus, } from './types';
15
15
  export { mergeSetVars, mergeVars, resolveOnErrorPolicy, resolveTemplateString, resolveTemplates, type VariableContext, } from './variables';
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACrG,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EACH,KAAK,6BAA6B,EAClC,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC5B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACtF,OAAO,EACH,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACrB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACH,yBAAyB,EACzB,4BAA4B,EAC5B,gCAAgC,GACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,YAAY,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,eAAe,EACf,cAAc,EACd,6BAA6B,EAC7B,+BAA+B,EAC/B,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,YAAY,EACR,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,GAAG,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,IAAI,EACJ,WAAW,EACX,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EACH,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,eAAe,GACvB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACrG,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EACH,yBAAyB,EACzB,KAAK,6BAA6B,EAClC,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC5B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACtF,OAAO,EACH,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACrB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACH,yBAAyB,EACzB,4BAA4B,EAC5B,gCAAgC,GACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,YAAY,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,eAAe,EACf,cAAc,EACd,6BAA6B,EAC7B,+BAA+B,EAC/B,iBAAiB,EACjB,wBAAwB,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,YAAY,EACR,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,GAAG,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,IAAI,EACJ,WAAW,EACX,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EACH,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,eAAe,GACvB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  export { loadWorkflowDef, loadWorkflowDefFromText, validateWorkflowDef } from './config.js';
2
2
  export { FSMError, RunCollisionError, WorkflowResumeError, WorkflowValidationError } from './errors.js';
3
- export { loadWorkflowExtensionsIntoHost, } from './extensions.js';
3
+ export { collectWorkflowExtensions, loadWorkflowExtensionsIntoHost, } from './extensions.js';
4
4
  export { createDefaultWorkflowEngineHost, EventEmitActionRunner, NoteActionRunner, ShellActionRunner, ShellGuardRunner, WorkflowEngineHost, } from './host.js';
5
5
  export { applyWorkflowEngineSchema, DbWorkflowPersistenceAdapter, MemoryWorkflowPersistenceAdapter, } from './persistence.js';
6
6
  export { allowedEnv, RUNTIME_BUILTIN_KEYS, RunLifecycle, runtimeBuiltins, } from './run-lifecycle.js';
7
- export { ActionDefSchema, GuardDefSchema, StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema, WorkflowDefSchema, } from './schema.js';
7
+ export { ActionDefSchema, GuardDefSchema, StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema, WorkflowDefSchema, WorkflowExtensionsSchema, } from './schema.js';
8
8
  export { WORKFLOW_ENGINE_SCHEMA_SQL } from './schema-sql.js';
9
9
  export { WorkflowService } from './service.js';
10
10
  export { StateMachineDriver } from './state-machine.js';
@@ -2,6 +2,14 @@ import type { DbAdapter } from '@gobing-ai/ts-db';
2
2
  import type { ActionRedactor, WorkflowPersistenceAdapter, WorkflowReseedResult, WorkflowRunRecord, WorkflowStatus } from './types';
3
3
  /** Apply workflow-engine-owned schema to a database adapter. */
4
4
  export declare function applyWorkflowEngineSchema(db: DbAdapter): Promise<void>;
5
+ /**
6
+ * Default result redactor (task 0060 F4): shell action results keep `ok`/`exitCode`
7
+ * but drop raw `stdout`/`stderr`, which may carry secrets, from the persisted row.
8
+ * Non-shell results pass through unchanged.
9
+ */
10
+ export declare function defaultActionRedactor(kind: string, payload: Record<string, unknown>): Record<string, unknown>;
11
+ /** Apply the caller redactor, or the built-in default when none is supplied. */
12
+ export declare function applyRedactor(redactor: ActionRedactor | undefined, kind: string, result: unknown): Record<string, unknown>;
5
13
  /** SQLite/D1-compatible workflow persistence adapter backed by ts-db. */
6
14
  export declare class DbWorkflowPersistenceAdapter implements WorkflowPersistenceAdapter {
7
15
  private readonly db;
@@ -34,7 +42,7 @@ export declare class DbWorkflowPersistenceAdapter implements WorkflowPersistence
34
42
  /** Insert a running action row. Returns the row id for later finalization. The `options` arg is mirror-only (observability seam) and deliberately ignored by persistence. */
35
43
  saveActionStart(runId: string, node: string, kind: string, _options?: Record<string, unknown>): Promise<string>;
36
44
  /** Finalize an action row with duration, ok flag, and optional redacted result. */
37
- saveActionFinalize(actionId: string, status: WorkflowStatus, durationMs: number, ok: boolean, result?: unknown, _redactor?: ActionRedactor): Promise<void>;
45
+ saveActionFinalize(actionId: string, status: WorkflowStatus, durationMs: number, ok: boolean, kind: string, result?: unknown, redactor?: ActionRedactor): Promise<void>;
38
46
  /** Load a single run by id. */
39
47
  loadRun(runId: string): Promise<WorkflowRunRecord | undefined>;
40
48
  /** List persisted workflow runs. */
@@ -43,7 +51,8 @@ export declare class DbWorkflowPersistenceAdapter implements WorkflowPersistence
43
51
  findRunByKey(workflowName: string, externalKey: string): Promise<WorkflowRunRecord | undefined>;
44
52
  /** Create a run or attach to an existing one by external key. */
45
53
  createOrAttachRun(record: WorkflowRunRecord): Promise<WorkflowRunRecord>;
46
- /** Force-set the current state of a run (reseed). */
54
+ /** Force-set the current state of a run (reseed). Atomic: snapshot + `__reseed__` transition
55
+ * commit in one `db.batch`, and the previous snapshot's `effectiveVars` survive (task 0060 F6). */
47
56
  reseedRun(runId: string, newState: string): Promise<WorkflowReseedResult>;
48
57
  /** Load the current state name for a run. */
49
58
  loadCurrentState(runId: string): Promise<string | undefined>;
@@ -94,7 +103,7 @@ export declare class MemoryWorkflowPersistenceAdapter implements WorkflowPersist
94
103
  /** Insert a running action row. The `options` arg is mirror-only (observability seam) and deliberately ignored by the in-memory adapter. */
95
104
  saveActionStart(runId: string, node: string, kind: string, _options?: Record<string, unknown>): Promise<string>;
96
105
  /** Finalize an action row. */
97
- saveActionFinalize(actionId: string, status: WorkflowStatus, durationMs: number, ok: boolean, result?: unknown, _redactor?: ActionRedactor): Promise<void>;
106
+ saveActionFinalize(actionId: string, status: WorkflowStatus, durationMs: number, ok: boolean, kind: string, result?: unknown, redactor?: ActionRedactor): Promise<void>;
98
107
  /** Save one phase/state execution record. */
99
108
  savePhase(runId: string, phase: string, status: WorkflowStatus): Promise<void>;
100
109
  /** Save one transition record. */
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}