@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 +47 -4
- package/dist/action-step.d.ts.map +1 -1
- package/dist/action-step.js +2 -1
- package/dist/events.d.ts +19 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/extensions.d.ts +18 -5
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +25 -18
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +2 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/persistence.d.ts +12 -3
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +47 -12
- package/dist/run-lifecycle.d.ts.map +1 -1
- package/dist/run-lifecycle.js +29 -4
- package/dist/schema.d.ts +25 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +34 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +9 -1
- package/dist/types.d.ts +21 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/schemas/state-machine-workflow.schema.json +23 -1
- package/schemas/transition-flow-workflow.schema.json +23 -1
- package/src/action-step.ts +3 -0
- package/src/events.ts +42 -8
- package/src/extensions.ts +37 -27
- package/src/host.ts +2 -1
- package/src/index.ts +3 -0
- package/src/persistence.ts +53 -15
- package/src/run-lifecycle.ts +29 -4
- package/src/schema.ts +35 -0
- package/src/service.ts +9 -1
- package/src/types.ts +22 -1
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
|
-
| `
|
|
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',
|
|
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
|
|
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;
|
|
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"}
|
package/dist/action-step.js
CHANGED
|
@@ -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
|
package/dist/events.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/extensions.d.ts
CHANGED
|
@@ -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
|
|
17
|
-
* shared
|
|
18
|
-
*
|
|
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
|
-
/**
|
|
24
|
-
readonly
|
|
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.
|
package/dist/extensions.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/extensions.js
CHANGED
|
@@ -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
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
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:
|
|
38
|
-
baseDir:
|
|
44
|
+
path: ref.path,
|
|
45
|
+
baseDir: ref.baseDir,
|
|
39
46
|
sourceName: ref.sourceName,
|
|
40
47
|
}));
|
|
41
48
|
const sharedOptions = {
|
package/dist/host.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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';
|
package/dist/persistence.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,kBAAkB,CAAC;AAG7D,OAAO,KAAK,EACR,cAAc,EACd,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACjB,MAAM,SAAS,CAAC;AAEjB,gEAAgE;AAChE,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5E;AAED,yEAAyE;AACzE,qBAAa,4BAA6B,YAAW,0BAA0B;IAI/D,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,8EAA8E;IAC9E,OAAO,CAAC,WAAW,CAA4B;gBAElB,EAAE,EAAE,SAAS;IAE1C;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAKpB,qDAAqD;IAC/C,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzD,yDAAyD;IACnD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5F,6CAA6C;IACvC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpF,kCAAkC;IAC5B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpG,+CAA+C;IACzC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7F,gBAAgB,CAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,GAClD,OAAO,CAAC,IAAI,CAAC;IAgBhB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,QAAQ;IAiBhB,6KAA6K;IACvK,eAAe,CACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC;IAkBlB,mFAAmF;IAC7E,kBAAkB,CACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,OAAO,EACX,MAAM,CAAC,EAAE,OAAO,EAChB,
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|