@lumenflow/cli 3.6.1 → 3.6.3

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.
@@ -0,0 +1,120 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import path from 'node:path';
4
+ import { readFile } from 'node:fs/promises';
5
+ import YAML from 'yaml';
6
+ import { getErrorMessage } from '@lumenflow/core/error-handler';
7
+ import { CONFIG_FILES } from '@lumenflow/core/wu-constants';
8
+ import { WU_LIFECYCLE_SYNC_CONFIG, WU_LIFECYCLE_SYNC_LOG_PREFIX, WU_LIFECYCLE_SYNC_RESULT_DEFAULTS, WU_LIFECYCLE_SYNC_SKIPPED_REASONS, } from './constants.js';
9
+ import { createNoopSink } from './noop-sink.js';
10
+ function isRecord(value) {
11
+ return typeof value === 'object' && value !== null;
12
+ }
13
+ function asNonEmptyString(value) {
14
+ if (typeof value !== 'string') {
15
+ return undefined;
16
+ }
17
+ const trimmed = value.trim();
18
+ return trimmed.length > 0 ? trimmed : undefined;
19
+ }
20
+ function createNoopSyncResult(skippedReason) {
21
+ return {
22
+ sent: WU_LIFECYCLE_SYNC_RESULT_DEFAULTS.SENT,
23
+ accepted: WU_LIFECYCLE_SYNC_RESULT_DEFAULTS.ACCEPTED,
24
+ skippedReason,
25
+ };
26
+ }
27
+ function createParseInput(workspaceId, controlPlaneRaw) {
28
+ return {
29
+ [WU_LIFECYCLE_SYNC_CONFIG.WORKSPACE_ID_FIELD]: workspaceId,
30
+ [WU_LIFECYCLE_SYNC_CONFIG.CONTROL_PLANE_FIELD]: controlPlaneRaw,
31
+ };
32
+ }
33
+ async function loadControlPlaneSdk(logger) {
34
+ try {
35
+ return await import('@lumenflow/control-plane-sdk');
36
+ }
37
+ catch (error) {
38
+ logger?.warn?.(`${WU_LIFECYCLE_SYNC_LOG_PREFIX} control-plane SDK unavailable: ${getErrorMessage(error)}`);
39
+ return null;
40
+ }
41
+ }
42
+ export async function resolveWuLifecycleEventSink(options = {}) {
43
+ const workspaceRoot = options.workspaceRoot ?? process.cwd();
44
+ const workspacePath = path.join(workspaceRoot, CONFIG_FILES.WORKSPACE_CONFIG);
45
+ let workspaceContent;
46
+ try {
47
+ workspaceContent = await readFile(workspacePath, WU_LIFECYCLE_SYNC_CONFIG.TEXT_ENCODING_UTF8);
48
+ }
49
+ catch {
50
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.WORKSPACE_CONFIG_MISSING);
51
+ }
52
+ let parsedWorkspace;
53
+ try {
54
+ parsedWorkspace = YAML.parse(workspaceContent);
55
+ }
56
+ catch {
57
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.WORKSPACE_CONFIG_INVALID);
58
+ }
59
+ if (!isRecord(parsedWorkspace)) {
60
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.WORKSPACE_CONFIG_INVALID);
61
+ }
62
+ const workspaceId = asNonEmptyString(Reflect.get(parsedWorkspace, WU_LIFECYCLE_SYNC_CONFIG.WORKSPACE_ID_FIELD));
63
+ if (!workspaceId) {
64
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.WORKSPACE_ID_MISSING);
65
+ }
66
+ const controlPlaneRaw = Reflect.get(parsedWorkspace, WU_LIFECYCLE_SYNC_CONFIG.CONTROL_PLANE_FIELD);
67
+ if (!isRecord(controlPlaneRaw)) {
68
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.CONTROL_PLANE_NOT_CONFIGURED);
69
+ }
70
+ const controlPlaneSdk = await loadControlPlaneSdk(options.logger);
71
+ if (!controlPlaneSdk) {
72
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.CONTROL_PLANE_SDK_UNAVAILABLE);
73
+ }
74
+ const { parseWorkspaceControlPlaneConfig, createHttpControlPlaneSyncPort } = controlPlaneSdk;
75
+ let runtimeConfig;
76
+ try {
77
+ runtimeConfig = parseWorkspaceControlPlaneConfig(createParseInput(workspaceId, controlPlaneRaw));
78
+ }
79
+ catch {
80
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.CONTROL_PLANE_INVALID);
81
+ }
82
+ const environment = options.environment ?? process.env;
83
+ const tokenEnv = runtimeConfig.control_plane.auth.token_env;
84
+ const token = asNonEmptyString(environment[tokenEnv]);
85
+ if (!token) {
86
+ return createNoopSink(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.MISSING_TOKEN_ENV);
87
+ }
88
+ const syncPort = createHttpControlPlaneSyncPort(runtimeConfig.control_plane, options.logger, {
89
+ fetchFn: options.fetchFn,
90
+ environment,
91
+ timeoutMs: options.timeoutMs,
92
+ });
93
+ return {
94
+ async push(events) {
95
+ if (events.length === 0) {
96
+ return createNoopSyncResult(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.NO_EVENTS);
97
+ }
98
+ try {
99
+ const result = await syncPort.pushKernelEvents({
100
+ workspace_id: workspaceId,
101
+ events,
102
+ });
103
+ return {
104
+ sent: result.accepted > 0,
105
+ accepted: result.accepted,
106
+ ...(result.accepted > 0
107
+ ? {}
108
+ : {
109
+ skippedReason: WU_LIFECYCLE_SYNC_SKIPPED_REASONS.NO_EVENTS_ACCEPTED,
110
+ }),
111
+ };
112
+ }
113
+ catch (error) {
114
+ options.logger?.warn?.(`${WU_LIFECYCLE_SYNC_LOG_PREFIX} pushKernelEvents failed: ${getErrorMessage(error)}`);
115
+ return createNoopSyncResult(WU_LIFECYCLE_SYNC_SKIPPED_REASONS.PUSH_FAILED);
116
+ }
117
+ },
118
+ };
119
+ }
120
+ //# sourceMappingURL=control-plane-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane-sink.js","sourceRoot":"","sources":["../../src/wu-lifecycle-sync/control-plane-sink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { WU_LIFECYCLE_SYNC_RESULT_DEFAULTS } from './constants.js';
4
+ export function createNoopSink(skippedReason) {
5
+ return {
6
+ async push() {
7
+ return {
8
+ sent: WU_LIFECYCLE_SYNC_RESULT_DEFAULTS.SENT,
9
+ accepted: WU_LIFECYCLE_SYNC_RESULT_DEFAULTS.ACCEPTED,
10
+ skippedReason,
11
+ };
12
+ },
13
+ };
14
+ }
15
+ //# sourceMappingURL=noop-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-sink.js","sourceRoot":"","sources":["../../src/wu-lifecycle-sync/noop-sink.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAazC,OAAO,EAAE,iCAAiC,EAAE,MAAM,gBAAgB,CAAC;AAEnE,MAAM,UAAU,cAAc,CAAC,aAA2C;IACxE,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO;gBACL,IAAI,EAAE,iCAAiC,CAAC,IAAI;gBAC5C,QAAQ,EAAE,iCAAiC,CAAC,QAAQ;gBACpD,aAAa;aACd,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
4
+ //# sourceMappingURL=port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/wu-lifecycle-sync/port.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC"}
@@ -0,0 +1,92 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { createHash } from 'node:crypto';
4
+ import { readFileSync } from 'node:fs';
5
+ import { createError, ErrorCodes, getErrorMessage } from '@lumenflow/core/error-handler';
6
+ import { resolveWuLifecycleEventSink, } from './control-plane-sink.js';
7
+ import { WU_LIFECYCLE_CLAIM_DEFAULTS, WU_LIFECYCLE_COMMANDS, WU_LIFECYCLE_EVENT_KINDS, WU_LIFECYCLE_EVENT_SCHEMA_VERSION, WU_LIFECYCLE_SPEC_HASH, WU_LIFECYCLE_SYNC_CONFIG, WU_LIFECYCLE_SYNC_LOG_PREFIX, WU_LIFECYCLE_SYNC_RESULT_DEFAULTS, WU_LIFECYCLE_SYNC_SKIPPED_REASONS, } from './constants.js';
8
+ function asNonEmptyString(value) {
9
+ if (typeof value !== 'string') {
10
+ return undefined;
11
+ }
12
+ const trimmed = value.trim();
13
+ return trimmed.length > 0 ? trimmed : undefined;
14
+ }
15
+ function createSha256Hex(input) {
16
+ return createHash(WU_LIFECYCLE_SPEC_HASH.ALGORITHM)
17
+ .update(input)
18
+ .digest(WU_LIFECYCLE_SPEC_HASH.DIGEST_ENCODING);
19
+ }
20
+ function resolveSpecHash(input) {
21
+ const explicitSpecHash = asNonEmptyString(input.specHash);
22
+ if (explicitSpecHash && WU_LIFECYCLE_SPEC_HASH.HEX_256_REGEX.test(explicitSpecHash)) {
23
+ return explicitSpecHash;
24
+ }
25
+ const specPath = asNonEmptyString(input.specPath);
26
+ if (specPath) {
27
+ try {
28
+ const fileContent = readFileSync(specPath, WU_LIFECYCLE_SYNC_CONFIG.TEXT_ENCODING_UTF8);
29
+ return createSha256Hex(fileContent);
30
+ }
31
+ catch {
32
+ // Fall back to deterministic hash from WU metadata.
33
+ }
34
+ }
35
+ return createSha256Hex(`${WU_LIFECYCLE_COMMANDS.CREATE}:${input.wuId}`);
36
+ }
37
+ function resolveTimestamp(input) {
38
+ return input.timestamp ?? new Date().toISOString();
39
+ }
40
+ export function buildWuLifecycleKernelEvent(input) {
41
+ const timestamp = resolveTimestamp(input);
42
+ switch (input.command) {
43
+ case WU_LIFECYCLE_COMMANDS.CREATE:
44
+ return {
45
+ schema_version: WU_LIFECYCLE_EVENT_SCHEMA_VERSION,
46
+ kind: WU_LIFECYCLE_EVENT_KINDS.CREATE,
47
+ task_id: input.wuId,
48
+ timestamp,
49
+ spec_hash: resolveSpecHash(input),
50
+ };
51
+ case WU_LIFECYCLE_COMMANDS.CLAIM:
52
+ return {
53
+ schema_version: WU_LIFECYCLE_EVENT_SCHEMA_VERSION,
54
+ kind: WU_LIFECYCLE_EVENT_KINDS.CLAIM,
55
+ task_id: input.wuId,
56
+ timestamp,
57
+ by: asNonEmptyString(input.by) ?? WU_LIFECYCLE_CLAIM_DEFAULTS.ACTOR,
58
+ session_id: asNonEmptyString(input.sessionId) ?? WU_LIFECYCLE_CLAIM_DEFAULTS.SESSION_ID,
59
+ };
60
+ case WU_LIFECYCLE_COMMANDS.DONE:
61
+ return {
62
+ schema_version: WU_LIFECYCLE_EVENT_SCHEMA_VERSION,
63
+ kind: WU_LIFECYCLE_EVENT_KINDS.DONE,
64
+ task_id: input.wuId,
65
+ timestamp,
66
+ ...(input.evidenceRefs && input.evidenceRefs.length > 0
67
+ ? { evidence_refs: input.evidenceRefs }
68
+ : {}),
69
+ };
70
+ default: {
71
+ const exhaustiveCheck = input.command;
72
+ throw createError(ErrorCodes.INVALID_ARGUMENT, `Unsupported WU lifecycle command: ${exhaustiveCheck}`);
73
+ }
74
+ }
75
+ }
76
+ export async function flushWuLifecycleSync(input, options = {}) {
77
+ const logger = options.logger;
78
+ try {
79
+ const sink = options.sink ?? (await resolveWuLifecycleEventSink(options));
80
+ const event = buildWuLifecycleKernelEvent(input);
81
+ return await sink.push([event]);
82
+ }
83
+ catch (error) {
84
+ logger?.warn?.(`${WU_LIFECYCLE_SYNC_LOG_PREFIX} fail-open: ${getErrorMessage(error)}`);
85
+ return {
86
+ sent: WU_LIFECYCLE_SYNC_RESULT_DEFAULTS.SENT,
87
+ accepted: WU_LIFECYCLE_SYNC_RESULT_DEFAULTS.ACCEPTED,
88
+ skippedReason: WU_LIFECYCLE_SYNC_SKIPPED_REASONS.PUSH_FAILED,
89
+ };
90
+ }
91
+ }
92
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/wu-lifecycle-sync/service.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEzF,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,iCAAiC,EACjC,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,iCAAiC,EACjC,iCAAiC,GAElC,MAAM,gBAAgB,CAAC;AAGxB,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,UAAU,CAAC,sBAAsB,CAAC,SAAS,CAAC;SAChD,MAAM,CAAC,KAAK,CAAC;SACb,MAAM,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,KAAgC;IACvD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,gBAAgB,IAAI,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;YACxF,OAAO,eAAe,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC,GAAG,qBAAqB,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAgC;IACxD,OAAO,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC;AAiBD,MAAM,UAAU,2BAA2B,CAAC,KAAgC;IAC1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE1C,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,qBAAqB,CAAC,MAAM;YAC/B,OAAO;gBACL,cAAc,EAAE,iCAAiC;gBACjD,IAAI,EAAE,wBAAwB,CAAC,MAAM;gBACrC,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,SAAS;gBACT,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC;aAClC,CAAC;QAEJ,KAAK,qBAAqB,CAAC,KAAK;YAC9B,OAAO;gBACL,cAAc,EAAE,iCAAiC;gBACjD,IAAI,EAAE,wBAAwB,CAAC,KAAK;gBACpC,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,SAAS;gBACT,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,2BAA2B,CAAC,KAAK;gBACnE,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,2BAA2B,CAAC,UAAU;aACxF,CAAC;QAEJ,KAAK,qBAAqB,CAAC,IAAI;YAC7B,OAAO;gBACL,cAAc,EAAE,iCAAiC;gBACjD,IAAI,EAAE,wBAAwB,CAAC,IAAI;gBACnC,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,SAAS;gBACT,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;oBACrD,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE;oBACvC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QAEJ,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,eAAe,GAAU,KAAK,CAAC,OAAO,CAAC;YAC7C,MAAM,WAAW,CACf,UAAU,CAAC,gBAAgB,EAC3B,qCAAqC,eAAe,EAAE,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAgC,EAChC,UAAuC,EAAE;IAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,4BAA4B,eAAe,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO;YACL,IAAI,EAAE,iCAAiC,CAAC,IAAI;YAC5C,QAAQ,EAAE,iCAAiC,CAAC,QAAQ;YACpD,aAAa,EAAE,iCAAiC,CAAC,WAAW;SAC7D,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumenflow/cli",
3
- "version": "3.6.1",
3
+ "version": "3.6.3",
4
4
  "description": "Command-line interface for LumenFlow workflow framework",
5
5
  "keywords": [
6
6
  "lumenflow",
@@ -40,6 +40,7 @@
40
40
  "wu-create": "./dist/wu-create.js",
41
41
  "wu-proto": "./dist/wu-proto.js",
42
42
  "wu-edit": "./dist/wu-edit.js",
43
+ "wu-escalate": "./dist/wu-escalate.js",
43
44
  "wu-brief": "./dist/wu-brief.js",
44
45
  "wu-delegate": "./dist/wu-delegate.js",
45
46
  "wu-validate": "./dist/wu-validate.js",
@@ -176,12 +177,13 @@
176
177
  "xstate": "^5.28.0",
177
178
  "yaml": "^2.8.2",
178
179
  "zod": "^4.3.6",
179
- "@lumenflow/core": "3.6.1",
180
- "@lumenflow/agent": "3.6.1",
181
- "@lumenflow/metrics": "3.6.1",
182
- "@lumenflow/memory": "3.6.1",
183
- "@lumenflow/initiatives": "3.6.1",
184
- "@lumenflow/kernel": "3.6.1"
180
+ "@lumenflow/initiatives": "3.6.3",
181
+ "@lumenflow/core": "3.6.3",
182
+ "@lumenflow/metrics": "3.6.3",
183
+ "@lumenflow/control-plane-sdk": "3.6.3",
184
+ "@lumenflow/agent": "3.6.3",
185
+ "@lumenflow/kernel": "3.6.3",
186
+ "@lumenflow/memory": "3.6.3"
185
187
  },
186
188
  "devDependencies": {
187
189
  "@vitest/coverage-v8": "^4.0.18",