@gobing-ai/ts-dual-workflow-engine 0.4.28 → 0.4.30
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/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 +7 -5
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +5 -18
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +2 -1
- 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/service.d.ts.map +1 -1
- package/dist/service.js +9 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/action-step.ts +3 -0
- package/src/events.ts +42 -8
- package/src/extensions.ts +12 -26
- package/src/host.ts +2 -1
- package/src/persistence.ts +53 -15
- package/src/run-lifecycle.ts +29 -4
- package/src/service.ts +9 -1
- package/src/types.ts +9 -1
package/dist/service.js
CHANGED
|
@@ -104,6 +104,7 @@ export class WorkflowService {
|
|
|
104
104
|
fromState: result.fromState ?? '',
|
|
105
105
|
toState: result.toState,
|
|
106
106
|
externalKey: extKey,
|
|
107
|
+
severity: 'warning',
|
|
107
108
|
});
|
|
108
109
|
}
|
|
109
110
|
/** Resume a paused run, continuing execution from where it stopped. */
|
|
@@ -130,7 +131,12 @@ export class WorkflowService {
|
|
|
130
131
|
const extKey = run.external_key ?? undefined;
|
|
131
132
|
await this.persistence.finalizeRun(runId, 'running', '');
|
|
132
133
|
const events = this.resolveEvents(mergedOptions.events);
|
|
133
|
-
void events?.emit('workflow.run.resumed', {
|
|
134
|
+
void events?.emit('workflow.run.resumed', {
|
|
135
|
+
runId,
|
|
136
|
+
node: currentState,
|
|
137
|
+
externalKey: extKey,
|
|
138
|
+
severity: 'info',
|
|
139
|
+
});
|
|
134
140
|
// Resume through the appropriate driver, starting from the paused state (skip on-enter).
|
|
135
141
|
if (workflow.kind === 'transition-flow') {
|
|
136
142
|
return await new TransitionFlowDriver({
|
|
@@ -234,6 +240,7 @@ export class WorkflowService {
|
|
|
234
240
|
to: toState,
|
|
235
241
|
trigger,
|
|
236
242
|
externalKey: extKey,
|
|
243
|
+
severity: 'info',
|
|
237
244
|
});
|
|
238
245
|
return { allowed: true, fromState: currentState, toState };
|
|
239
246
|
}
|
|
@@ -249,6 +256,7 @@ export class WorkflowService {
|
|
|
249
256
|
to,
|
|
250
257
|
reason: denial.reason,
|
|
251
258
|
externalKey,
|
|
259
|
+
severity: 'error',
|
|
252
260
|
});
|
|
253
261
|
return { allowed: false, ...denial };
|
|
254
262
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -158,6 +158,13 @@ export interface WorkflowRunOptions {
|
|
|
158
158
|
readonly events?: EventBus<WorkflowEngineEvents>;
|
|
159
159
|
/** Run-level error policy override. Lowest precedence; action-level wins. */
|
|
160
160
|
readonly onError?: OnErrorPolicy;
|
|
161
|
+
/**
|
|
162
|
+
* Optional result redaction hook applied before an action row is finalized.
|
|
163
|
+
* When omitted, the built-in default scrubs shell stdout/stderr so raw command
|
|
164
|
+
* output never lands in the audit table. Callers that need raw output in
|
|
165
|
+
* `action_runs.result_json` must supply their own redactor (task 0060 F4).
|
|
166
|
+
*/
|
|
167
|
+
readonly redactor?: ActionRedactor;
|
|
161
168
|
/** Validate the definition and walk the transition graph without executing actions. */
|
|
162
169
|
readonly dryRun?: boolean;
|
|
163
170
|
/** Optional caller-supplied external key, unique per workflow definition. */
|
|
@@ -252,8 +259,8 @@ export interface WorkflowPersistenceAdapter {
|
|
|
252
259
|
* persistence implementations ignore it (mirror-only — no new column, no alter, no redaction).
|
|
253
260
|
*/
|
|
254
261
|
saveActionStart(runId: string, node: string, kind: string, options?: Record<string, unknown>): Promise<string>;
|
|
255
|
-
/** Finalize an action row with duration, ok, result. */
|
|
256
|
-
saveActionFinalize(actionId: string, status: WorkflowStatus, durationMs: number, ok: boolean, result?: unknown, redactor?: ActionRedactor): Promise<void>;
|
|
262
|
+
/** Finalize an action row with duration, ok, result. `kind` names the action for the redactor. */
|
|
263
|
+
saveActionFinalize(actionId: string, status: WorkflowStatus, durationMs: number, ok: boolean, kind: string, result?: unknown, redactor?: ActionRedactor): Promise<void>;
|
|
257
264
|
loadRun(runId: string): Promise<WorkflowRunRecord | undefined>;
|
|
258
265
|
listRuns(): Promise<readonly WorkflowRunRecord[]>;
|
|
259
266
|
/** Look up a run by its external key within a workflow definition. Returns undefined if not found. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/ts-dual-workflow-engine",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.30",
|
|
4
4
|
"description": "@gobing-ai/ts-dual-workflow-engine — State-machine and transition-flow workflow runtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"release": "echo 'Manual publish is disabled. Releases go through GitHub Actions via Trusted Publishing — push a tag: git tag @gobing-ai/ts-dual-workflow-engine-v<version> && git push --tags' && exit 1"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@gobing-ai/ts-db": "^0.4.
|
|
52
|
-
"@gobing-ai/ts-infra": "^0.4.
|
|
53
|
-
"@gobing-ai/ts-runtime": "^0.4.
|
|
51
|
+
"@gobing-ai/ts-db": "^0.4.30",
|
|
52
|
+
"@gobing-ai/ts-infra": "^0.4.30",
|
|
53
|
+
"@gobing-ai/ts-runtime": "^0.4.30",
|
|
54
54
|
"zod": "^4.1.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
package/src/action-step.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { WorkflowEngineHost } from './host';
|
|
2
|
+
import { defaultActionRedactor } from './persistence';
|
|
2
3
|
import type { RunLifecycle } from './run-lifecycle';
|
|
3
4
|
import { runtimeBuiltins, type WorkflowMode } from './run-lifecycle';
|
|
4
5
|
import type { ActionDef, ActionResult, OnErrorPolicy, WorkflowPersistenceAdapter, WorkflowRunOptions } from './types';
|
|
@@ -91,7 +92,9 @@ export async function runActionStep(
|
|
|
91
92
|
result?.ok !== false ? 'done' : 'failed',
|
|
92
93
|
durationMs,
|
|
93
94
|
result?.ok ?? false,
|
|
95
|
+
action.kind,
|
|
94
96
|
result,
|
|
97
|
+
deps.options.redactor ?? defaultActionRedactor,
|
|
95
98
|
)
|
|
96
99
|
.catch(() => undefined);
|
|
97
100
|
}
|
package/src/events.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { EventSeverity } from '@gobing-ai/ts-infra';
|
|
2
|
+
|
|
1
3
|
/** Typed event map for workflow-engine run observability. All events prefixed `workflow.`. */
|
|
2
4
|
export type WorkflowEngineEvents = {
|
|
3
5
|
/** Emitted when a run begins (inside the span). */
|
|
@@ -7,6 +9,7 @@ export type WorkflowEngineEvents = {
|
|
|
7
9
|
runId: string;
|
|
8
10
|
dryRun: boolean;
|
|
9
11
|
externalKey?: string;
|
|
12
|
+
severity: EventSeverity;
|
|
10
13
|
}) => void;
|
|
11
14
|
/** Emitted when a run completes successfully. */
|
|
12
15
|
'workflow.run.done': (data: {
|
|
@@ -14,11 +17,23 @@ export type WorkflowEngineEvents = {
|
|
|
14
17
|
finalState: string;
|
|
15
18
|
transitionsTaken: number;
|
|
16
19
|
externalKey?: string;
|
|
20
|
+
severity: EventSeverity;
|
|
17
21
|
}) => void;
|
|
18
22
|
/** Emitted when a run fails. */
|
|
19
|
-
'workflow.run.failed': (data: {
|
|
23
|
+
'workflow.run.failed': (data: {
|
|
24
|
+
runId: string;
|
|
25
|
+
finalState: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
externalKey?: string;
|
|
28
|
+
severity: EventSeverity;
|
|
29
|
+
}) => void;
|
|
20
30
|
/** Emitted when entering a state or node. */
|
|
21
|
-
'workflow.node.enter': (data: {
|
|
31
|
+
'workflow.node.enter': (data: {
|
|
32
|
+
runId: string;
|
|
33
|
+
node: string;
|
|
34
|
+
transitionsTaken: number;
|
|
35
|
+
severity: EventSeverity;
|
|
36
|
+
}) => void;
|
|
22
37
|
/** Emitted on a state/node transition. */
|
|
23
38
|
'workflow.node.transition': (data: {
|
|
24
39
|
runId: string;
|
|
@@ -26,9 +41,10 @@ export type WorkflowEngineEvents = {
|
|
|
26
41
|
to: string;
|
|
27
42
|
trigger: string | null;
|
|
28
43
|
externalKey?: string;
|
|
44
|
+
severity: EventSeverity;
|
|
29
45
|
}) => void;
|
|
30
46
|
/** Emitted when an action starts executing. */
|
|
31
|
-
'workflow.action.start': (data: { runId: string; node: string; kind: string }) => void;
|
|
47
|
+
'workflow.action.start': (data: { runId: string; node: string; kind: string; severity: EventSeverity }) => void;
|
|
32
48
|
/** Emitted when an action finishes executing (success or failure). */
|
|
33
49
|
'workflow.action.done': (data: {
|
|
34
50
|
runId: string;
|
|
@@ -36,6 +52,7 @@ export type WorkflowEngineEvents = {
|
|
|
36
52
|
kind: string;
|
|
37
53
|
durationMs: number;
|
|
38
54
|
ok: boolean;
|
|
55
|
+
severity: EventSeverity;
|
|
39
56
|
}) => void;
|
|
40
57
|
/** Emitted when a non-fatal action failure is continued past (onError: 'continue'). */
|
|
41
58
|
'workflow.action.failed_continue': (data: {
|
|
@@ -43,11 +60,12 @@ export type WorkflowEngineEvents = {
|
|
|
43
60
|
node: string;
|
|
44
61
|
transitionsTaken: number;
|
|
45
62
|
error?: string;
|
|
63
|
+
severity: EventSeverity;
|
|
46
64
|
}) => void;
|
|
47
65
|
/** Emitted by the builtin `event.emit` action for custom user-defined events. */
|
|
48
|
-
'workflow.custom': (data: { name: string; payload: Record<string, unknown
|
|
66
|
+
'workflow.custom': (data: { name: string; payload: Record<string, unknown>; severity: EventSeverity }) => void;
|
|
49
67
|
/** Emitted by the builtin `note` action for workflow-visible annotations. */
|
|
50
|
-
'workflow.hitl.note': (data: { runId: string; node: string; message: string }) => void;
|
|
68
|
+
'workflow.hitl.note': (data: { runId: string; node: string; message: string; severity: EventSeverity }) => void;
|
|
51
69
|
/** Emitted when a guard condition is evaluated. Fires for every guard, including rejected ones. */
|
|
52
70
|
'workflow.guard.evaluated': (data: {
|
|
53
71
|
runId: string;
|
|
@@ -56,17 +74,25 @@ export type WorkflowEngineEvents = {
|
|
|
56
74
|
kind: string;
|
|
57
75
|
passed: boolean;
|
|
58
76
|
externalKey?: string;
|
|
77
|
+
severity: EventSeverity;
|
|
59
78
|
}) => void;
|
|
60
79
|
/** Emitted when an interactive HITL prompt is presented and the engine waits for input. */
|
|
61
|
-
'workflow.hitl.ask': (data: {
|
|
80
|
+
'workflow.hitl.ask': (data: {
|
|
81
|
+
runId: string;
|
|
82
|
+
node: string;
|
|
83
|
+
kind: string;
|
|
84
|
+
message: string;
|
|
85
|
+
severity: EventSeverity;
|
|
86
|
+
}) => void;
|
|
62
87
|
/** Emitted when an interactive HITL prompt receives a response. */
|
|
63
|
-
'workflow.hitl.response': (data: { runId: string; node: string; ok: boolean }) => void;
|
|
88
|
+
'workflow.hitl.response': (data: { runId: string; node: string; ok: boolean; severity: EventSeverity }) => void;
|
|
64
89
|
/** Emitted when a run's state is force-set via reseed (consumer-side authority reconciliation). */
|
|
65
90
|
'workflow.run.reseeded': (data: {
|
|
66
91
|
runId: string;
|
|
67
92
|
fromState: string;
|
|
68
93
|
toState: string;
|
|
69
94
|
externalKey?: string;
|
|
95
|
+
severity: EventSeverity;
|
|
70
96
|
}) => void;
|
|
71
97
|
/** Emitted when an external transition request is allowed and committed. */
|
|
72
98
|
'workflow.transition.requested': (data: {
|
|
@@ -75,6 +101,7 @@ export type WorkflowEngineEvents = {
|
|
|
75
101
|
to: string;
|
|
76
102
|
trigger: string | null;
|
|
77
103
|
externalKey?: string;
|
|
104
|
+
severity: EventSeverity;
|
|
78
105
|
}) => void;
|
|
79
106
|
/** Emitted when an external transition request is denied. */
|
|
80
107
|
'workflow.transition.denied': (data: {
|
|
@@ -83,6 +110,7 @@ export type WorkflowEngineEvents = {
|
|
|
83
110
|
to: string;
|
|
84
111
|
reason: string;
|
|
85
112
|
externalKey?: string;
|
|
113
|
+
severity: EventSeverity;
|
|
86
114
|
}) => void;
|
|
87
115
|
/** Emitted when a run pauses at a declared pause point. */
|
|
88
116
|
'workflow.run.paused': (data: {
|
|
@@ -90,7 +118,13 @@ export type WorkflowEngineEvents = {
|
|
|
90
118
|
node: string;
|
|
91
119
|
transitionsTaken: number;
|
|
92
120
|
externalKey?: string;
|
|
121
|
+
severity: EventSeverity;
|
|
93
122
|
}) => void;
|
|
94
123
|
/** Emitted when a paused run is resumed. */
|
|
95
|
-
'workflow.run.resumed': (data: {
|
|
124
|
+
'workflow.run.resumed': (data: {
|
|
125
|
+
runId: string;
|
|
126
|
+
node: string;
|
|
127
|
+
externalKey?: string;
|
|
128
|
+
severity: EventSeverity;
|
|
129
|
+
}) => void;
|
|
96
130
|
};
|
package/src/extensions.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Logger } from '@gobing-ai/ts-infra';
|
|
2
|
-
import { basenamePath, dirnamePath, SEP } from '@gobing-ai/ts-runtime';
|
|
3
2
|
import type { ExtensionRef, LoadExtensionsOptions } from '@gobing-ai/ts-runtime/extension';
|
|
4
3
|
import { loadExtensionModules } from '@gobing-ai/ts-runtime/extension';
|
|
5
4
|
import { WorkflowValidationError } from './errors';
|
|
@@ -21,15 +20,17 @@ export type WorkflowExtensionKind = 'actions' | 'guards';
|
|
|
21
20
|
/**
|
|
22
21
|
* A single workflow extension module reference.
|
|
23
22
|
*
|
|
24
|
-
* The caller
|
|
25
|
-
* shared
|
|
26
|
-
*
|
|
23
|
+
* The caller supplies the authored relative path plus the declaring directory; the
|
|
24
|
+
* shared loader resolves `(baseDir, path)` and applies its traversal + symlink
|
|
25
|
+
* guards to the authored string exactly as declared (task 0060 C2).
|
|
27
26
|
*/
|
|
28
27
|
export interface WorkflowExtensionRef {
|
|
29
28
|
/** Target capability registry. */
|
|
30
29
|
readonly kind: WorkflowExtensionKind;
|
|
31
|
-
/**
|
|
32
|
-
readonly
|
|
30
|
+
/** Relative path as authored (e.g. `./exts/foo.ts`). */
|
|
31
|
+
readonly path: string;
|
|
32
|
+
/** Absolute directory the authored `path` is resolved against. */
|
|
33
|
+
readonly baseDir: string;
|
|
33
34
|
/** Name of the config declaring this extension (for diagnostics). */
|
|
34
35
|
readonly sourceName: string;
|
|
35
36
|
}
|
|
@@ -79,28 +80,13 @@ export async function loadWorkflowExtensionsIntoHost(
|
|
|
79
80
|
): Promise<void> {
|
|
80
81
|
if (refs.length === 0) return;
|
|
81
82
|
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
// traversal in the caller-supplied absPath before basename strips it (R6).
|
|
86
|
-
for (const ref of refs) {
|
|
87
|
-
const segments = ref.absPath.split(SEP);
|
|
88
|
-
if (segments.includes('..')) {
|
|
89
|
-
throw new Error(
|
|
90
|
-
`extension path "${ref.absPath}" declared by "${ref.sourceName}" must not contain ".." traversal`,
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Adapt WorkflowExtensionRef → shared ExtensionRef so the generic loader
|
|
96
|
-
// governs every import. The shared loader resolves (baseDir, path) ->
|
|
97
|
-
// absPath internally; we supply dirname/basename so the resolved path
|
|
98
|
-
// reconstructs the caller's original absPath. assertRelativeExtensionPath
|
|
99
|
-
// is satisfied because basenamePath() is always a simple filename.
|
|
83
|
+
// Map 1:1 onto the shared ref shape — no dirname/basename smash, so the shared
|
|
84
|
+
// loader's assertRelativeExtensionPath + realPath confinement govern the authored
|
|
85
|
+
// path exactly as declared (task 0060 C2).
|
|
100
86
|
const sharedRefs: ExtensionRef<WorkflowExtensionKind>[] = refs.map((ref) => ({
|
|
101
87
|
kind: ref.kind,
|
|
102
|
-
path:
|
|
103
|
-
baseDir:
|
|
88
|
+
path: ref.path,
|
|
89
|
+
baseDir: ref.baseDir,
|
|
104
90
|
sourceName: ref.sourceName,
|
|
105
91
|
}));
|
|
106
92
|
|
package/src/host.ts
CHANGED
|
@@ -123,6 +123,7 @@ export class NoteActionRunner implements ActionRunner {
|
|
|
123
123
|
runId: context.runId,
|
|
124
124
|
node: context.stateOrNodeId,
|
|
125
125
|
message,
|
|
126
|
+
severity: 'info',
|
|
126
127
|
});
|
|
127
128
|
return { ok: true, data: { message } };
|
|
128
129
|
}
|
|
@@ -136,7 +137,7 @@ export class EventEmitActionRunner implements ActionRunner {
|
|
|
136
137
|
const name = String(options.name ?? '');
|
|
137
138
|
if (!name) return { ok: false, error: 'event.emit requires a non-empty "name" option' };
|
|
138
139
|
const payload = (options.payload as Record<string, unknown>) ?? {};
|
|
139
|
-
void context?.events?.emit('workflow.custom', { name, payload });
|
|
140
|
+
void context?.events?.emit('workflow.custom', { name, payload, severity: 'info' });
|
|
140
141
|
return { ok: true, data: { name, payload } };
|
|
141
142
|
}
|
|
142
143
|
}
|
package/src/persistence.ts
CHANGED
|
@@ -17,6 +17,36 @@ export async function applyWorkflowEngineSchema(db: DbAdapter): Promise<void> {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/** Narrow to a non-array object record. */
|
|
21
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
22
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Default result redactor (task 0060 F4): shell action results keep `ok`/`exitCode`
|
|
27
|
+
* but drop raw `stdout`/`stderr`, which may carry secrets, from the persisted row.
|
|
28
|
+
* Non-shell results pass through unchanged.
|
|
29
|
+
*/
|
|
30
|
+
export function defaultActionRedactor(kind: string, payload: Record<string, unknown>): Record<string, unknown> {
|
|
31
|
+
if (kind !== 'shell') return payload;
|
|
32
|
+
const data = isRecord(payload.data) ? { ...payload.data } : payload.data;
|
|
33
|
+
if (isRecord(data)) {
|
|
34
|
+
if ('stdout' in data) data.stdout = '[redacted]';
|
|
35
|
+
if ('stderr' in data) data.stderr = '[redacted]';
|
|
36
|
+
}
|
|
37
|
+
return { ...payload, data };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Apply the caller redactor, or the built-in default when none is supplied. */
|
|
41
|
+
export function applyRedactor(
|
|
42
|
+
redactor: ActionRedactor | undefined,
|
|
43
|
+
kind: string,
|
|
44
|
+
result: unknown,
|
|
45
|
+
): Record<string, unknown> {
|
|
46
|
+
const payload = isRecord(result) ? result : { value: result };
|
|
47
|
+
return redactor !== undefined ? redactor(kind, payload) : defaultActionRedactor(kind, payload);
|
|
48
|
+
}
|
|
49
|
+
|
|
20
50
|
/** SQLite/D1-compatible workflow persistence adapter backed by ts-db. */
|
|
21
51
|
export class DbWorkflowPersistenceAdapter implements WorkflowPersistenceAdapter {
|
|
22
52
|
/** Memoized schema-ensure; the DDL runs at most once per adapter instance. */
|
|
@@ -180,8 +210,9 @@ export class DbWorkflowPersistenceAdapter implements WorkflowPersistenceAdapter
|
|
|
180
210
|
status: WorkflowStatus,
|
|
181
211
|
durationMs: number,
|
|
182
212
|
ok: boolean,
|
|
213
|
+
kind: string,
|
|
183
214
|
result?: unknown,
|
|
184
|
-
|
|
215
|
+
redactor?: ActionRedactor,
|
|
185
216
|
): Promise<void> {
|
|
186
217
|
const now = Date.now();
|
|
187
218
|
await this.db.run(
|
|
@@ -191,7 +222,7 @@ export class DbWorkflowPersistenceAdapter implements WorkflowPersistenceAdapter
|
|
|
191
222
|
status,
|
|
192
223
|
durationMs,
|
|
193
224
|
ok ? 1 : 0,
|
|
194
|
-
result !== undefined ? JSON.stringify(result) : null,
|
|
225
|
+
result !== undefined ? JSON.stringify(applyRedactor(redactor, kind, result)) : null,
|
|
195
226
|
new Date(now).toISOString(),
|
|
196
227
|
now,
|
|
197
228
|
actionId,
|
|
@@ -241,16 +272,18 @@ export class DbWorkflowPersistenceAdapter implements WorkflowPersistenceAdapter
|
|
|
241
272
|
return { ...record };
|
|
242
273
|
}
|
|
243
274
|
|
|
244
|
-
/** Force-set the current state of a run (reseed).
|
|
275
|
+
/** Force-set the current state of a run (reseed). Atomic: snapshot + `__reseed__` transition
|
|
276
|
+
* commit in one `db.batch`, and the previous snapshot's `effectiveVars` survive (task 0060 F6). */
|
|
245
277
|
async reseedRun(runId: string, newState: string): Promise<WorkflowReseedResult> {
|
|
246
|
-
const now = Date.now();
|
|
247
278
|
await this.ensureSchema();
|
|
248
|
-
const previous = await this.
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
279
|
+
const previous = await this.loadLatestStateSnapshot(runId);
|
|
280
|
+
const now = Date.now();
|
|
281
|
+
const data = {
|
|
282
|
+
...(previous?.data ?? {}),
|
|
283
|
+
reseeded: true,
|
|
284
|
+
reseededAt: new Date(now).toISOString(),
|
|
285
|
+
};
|
|
286
|
+
await this.commitTransition(runId, previous?.state ?? '', newState, '__reseed__', newState, data);
|
|
254
287
|
return { fromState: previous?.state ?? null, toState: newState };
|
|
255
288
|
}
|
|
256
289
|
|
|
@@ -357,15 +390,16 @@ export class MemoryWorkflowPersistenceAdapter implements WorkflowPersistenceAdap
|
|
|
357
390
|
status: WorkflowStatus,
|
|
358
391
|
durationMs: number,
|
|
359
392
|
ok: boolean,
|
|
393
|
+
kind: string,
|
|
360
394
|
result?: unknown,
|
|
361
|
-
|
|
395
|
+
redactor?: ActionRedactor,
|
|
362
396
|
): Promise<void> {
|
|
363
397
|
const row = this.actionRuns.find((a) => a.id === actionId);
|
|
364
398
|
if (row === undefined) return;
|
|
365
399
|
row.status = status;
|
|
366
400
|
row.durationMs = durationMs;
|
|
367
401
|
row.ok = ok ? 1 : 0;
|
|
368
|
-
row.resultJson = result !== undefined ? JSON.stringify(result) : null;
|
|
402
|
+
row.resultJson = result !== undefined ? JSON.stringify(applyRedactor(redactor, kind, result)) : null;
|
|
369
403
|
}
|
|
370
404
|
|
|
371
405
|
/** Save one phase/state execution record. */
|
|
@@ -430,9 +464,13 @@ export class MemoryWorkflowPersistenceAdapter implements WorkflowPersistenceAdap
|
|
|
430
464
|
|
|
431
465
|
/** Force-set the current state of a run (reseed). */
|
|
432
466
|
async reseedRun(runId: string, newState: string): Promise<WorkflowReseedResult> {
|
|
433
|
-
const previous = this.
|
|
434
|
-
|
|
435
|
-
|
|
467
|
+
const previous = await this.loadLatestStateSnapshot(runId);
|
|
468
|
+
const data = {
|
|
469
|
+
...(previous?.data ?? {}),
|
|
470
|
+
reseeded: true,
|
|
471
|
+
reseededAt: new Date().toISOString(),
|
|
472
|
+
};
|
|
473
|
+
await this.commitTransition(runId, previous?.state ?? '', newState, '__reseed__', newState, data);
|
|
436
474
|
return { fromState: previous?.state ?? null, toState: newState };
|
|
437
475
|
}
|
|
438
476
|
|
package/src/run-lifecycle.ts
CHANGED
|
@@ -165,6 +165,7 @@ export class RunLifecycle {
|
|
|
165
165
|
runId: lifecycle.runId,
|
|
166
166
|
dryRun: options.dryRun ?? false,
|
|
167
167
|
externalKey: extKey,
|
|
168
|
+
severity: 'info',
|
|
168
169
|
});
|
|
169
170
|
return await loop(lifecycle);
|
|
170
171
|
},
|
|
@@ -217,6 +218,7 @@ export class RunLifecycle {
|
|
|
217
218
|
runId: this.runId,
|
|
218
219
|
node: stateOrNodeId,
|
|
219
220
|
transitionsTaken,
|
|
221
|
+
severity: 'info',
|
|
220
222
|
});
|
|
221
223
|
}
|
|
222
224
|
|
|
@@ -251,6 +253,7 @@ export class RunLifecycle {
|
|
|
251
253
|
to,
|
|
252
254
|
trigger,
|
|
253
255
|
externalKey: this.externalKey,
|
|
256
|
+
severity: 'info',
|
|
254
257
|
});
|
|
255
258
|
}
|
|
256
259
|
async recordTransition(from: string, to: string, trigger: string | null): Promise<void> {
|
|
@@ -267,6 +270,7 @@ export class RunLifecycle {
|
|
|
267
270
|
to,
|
|
268
271
|
trigger,
|
|
269
272
|
externalKey: this.externalKey,
|
|
273
|
+
severity: 'info',
|
|
270
274
|
});
|
|
271
275
|
}
|
|
272
276
|
|
|
@@ -281,6 +285,7 @@ export class RunLifecycle {
|
|
|
281
285
|
finalState,
|
|
282
286
|
transitionsTaken,
|
|
283
287
|
externalKey: this.externalKey,
|
|
288
|
+
severity: 'info',
|
|
284
289
|
});
|
|
285
290
|
return this.result('done', finalState, transitionsTaken);
|
|
286
291
|
}
|
|
@@ -295,6 +300,7 @@ export class RunLifecycle {
|
|
|
295
300
|
finalState,
|
|
296
301
|
reason,
|
|
297
302
|
externalKey: this.externalKey,
|
|
303
|
+
severity: 'error',
|
|
298
304
|
});
|
|
299
305
|
this.logger.warn('workflow run failed', { finalState, transitionsTaken, reason });
|
|
300
306
|
return this.result('failed', finalState, transitionsTaken, reason);
|
|
@@ -320,6 +326,7 @@ export class RunLifecycle {
|
|
|
320
326
|
node: stateOrNodeId,
|
|
321
327
|
transitionsTaken,
|
|
322
328
|
externalKey: this.externalKey,
|
|
329
|
+
severity: 'warning',
|
|
323
330
|
});
|
|
324
331
|
return this.result('paused', stateOrNodeId, transitionsTaken);
|
|
325
332
|
}
|
|
@@ -327,13 +334,23 @@ export class RunLifecycle {
|
|
|
327
334
|
/** Emit the resumed event (called by WorkflowService after re-creating a lifecycle for resume). */
|
|
328
335
|
emitResumed(node: string): void {
|
|
329
336
|
addSpanEvent('workflow.run.resumed', { runId: this.runId, node });
|
|
330
|
-
void this.events?.emit('workflow.run.resumed', {
|
|
337
|
+
void this.events?.emit('workflow.run.resumed', {
|
|
338
|
+
runId: this.runId,
|
|
339
|
+
node,
|
|
340
|
+
externalKey: this.externalKey,
|
|
341
|
+
severity: 'info',
|
|
342
|
+
});
|
|
331
343
|
}
|
|
332
344
|
|
|
333
345
|
/** Emit action-level observability before a host action is invoked. */
|
|
334
346
|
actionStart(stateOrNodeId: string, kind: string): void {
|
|
335
347
|
addSpanEvent('workflow.action.start', { runId: this.runId, node: stateOrNodeId, kind });
|
|
336
|
-
void this.events?.emit('workflow.action.start', {
|
|
348
|
+
void this.events?.emit('workflow.action.start', {
|
|
349
|
+
runId: this.runId,
|
|
350
|
+
node: stateOrNodeId,
|
|
351
|
+
kind,
|
|
352
|
+
severity: 'info',
|
|
353
|
+
});
|
|
337
354
|
}
|
|
338
355
|
|
|
339
356
|
/** Emit action-level observability after a host action settles. */
|
|
@@ -345,6 +362,7 @@ export class RunLifecycle {
|
|
|
345
362
|
kind,
|
|
346
363
|
durationMs,
|
|
347
364
|
ok,
|
|
365
|
+
severity: ok ? 'info' : 'error',
|
|
348
366
|
});
|
|
349
367
|
}
|
|
350
368
|
|
|
@@ -361,6 +379,7 @@ export class RunLifecycle {
|
|
|
361
379
|
node: stateOrNodeId,
|
|
362
380
|
transitionsTaken,
|
|
363
381
|
...(error === undefined ? {} : { error }),
|
|
382
|
+
severity: 'warning',
|
|
364
383
|
});
|
|
365
384
|
this.logger.warn('action failed (continuing)', { node: stateOrNodeId, transitionsTaken, error });
|
|
366
385
|
}
|
|
@@ -374,17 +393,23 @@ export class RunLifecycle {
|
|
|
374
393
|
kind,
|
|
375
394
|
passed,
|
|
376
395
|
externalKey: this.externalKey,
|
|
396
|
+
severity: passed ? 'info' : 'warning',
|
|
377
397
|
});
|
|
378
398
|
}
|
|
379
399
|
|
|
380
400
|
/** Emit when an interactive HITL prompt is presented. */
|
|
381
401
|
hitlAsk(node: string, kind: string, message: string): void {
|
|
382
|
-
void this.events?.emit('workflow.hitl.ask', { runId: this.runId, node, kind, message });
|
|
402
|
+
void this.events?.emit('workflow.hitl.ask', { runId: this.runId, node, kind, message, severity: 'info' });
|
|
383
403
|
}
|
|
384
404
|
|
|
385
405
|
/** Emit when an interactive HITL prompt resolves. */
|
|
386
406
|
hitlResponse(node: string, ok: boolean): void {
|
|
387
|
-
void this.events?.emit('workflow.hitl.response', {
|
|
407
|
+
void this.events?.emit('workflow.hitl.response', {
|
|
408
|
+
runId: this.runId,
|
|
409
|
+
node,
|
|
410
|
+
ok,
|
|
411
|
+
severity: ok ? 'info' : 'warning',
|
|
412
|
+
});
|
|
388
413
|
}
|
|
389
414
|
|
|
390
415
|
private result(
|
package/src/service.ts
CHANGED
|
@@ -147,6 +147,7 @@ export class WorkflowService {
|
|
|
147
147
|
fromState: result.fromState ?? '',
|
|
148
148
|
toState: result.toState,
|
|
149
149
|
externalKey: extKey,
|
|
150
|
+
severity: 'warning',
|
|
150
151
|
});
|
|
151
152
|
}
|
|
152
153
|
|
|
@@ -176,7 +177,12 @@ export class WorkflowService {
|
|
|
176
177
|
const extKey = run.external_key ?? undefined;
|
|
177
178
|
await this.persistence.finalizeRun(runId, 'running', '');
|
|
178
179
|
const events = this.resolveEvents(mergedOptions.events);
|
|
179
|
-
void events?.emit('workflow.run.resumed', {
|
|
180
|
+
void events?.emit('workflow.run.resumed', {
|
|
181
|
+
runId,
|
|
182
|
+
node: currentState,
|
|
183
|
+
externalKey: extKey,
|
|
184
|
+
severity: 'info',
|
|
185
|
+
});
|
|
180
186
|
|
|
181
187
|
// Resume through the appropriate driver, starting from the paused state (skip on-enter).
|
|
182
188
|
if (workflow.kind === 'transition-flow') {
|
|
@@ -305,6 +311,7 @@ export class WorkflowService {
|
|
|
305
311
|
to: toState,
|
|
306
312
|
trigger,
|
|
307
313
|
externalKey: extKey,
|
|
314
|
+
severity: 'info',
|
|
308
315
|
});
|
|
309
316
|
return { allowed: true, fromState: currentState, toState };
|
|
310
317
|
}
|
|
@@ -328,6 +335,7 @@ export class WorkflowService {
|
|
|
328
335
|
to,
|
|
329
336
|
reason: denial.reason,
|
|
330
337
|
externalKey,
|
|
338
|
+
severity: 'error',
|
|
331
339
|
});
|
|
332
340
|
return { allowed: false, ...denial };
|
|
333
341
|
}
|