@lumenflow/cli 3.8.0 → 3.8.2
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/hooks/enforcement-checks.js +20 -4
- package/dist/hooks/enforcement-checks.js.map +1 -1
- package/dist/hooks/generators/enforce-worktree.js +14 -2
- package/dist/hooks/generators/enforce-worktree.js.map +1 -1
- package/dist/hooks/generators/require-wu.js +45 -3
- package/dist/hooks/generators/require-wu.js.map +1 -1
- package/dist/hooks/path-utils.js +47 -0
- package/dist/hooks/path-utils.js.map +1 -1
- package/package.json +8 -8
- package/packs/sidekick/.turbo/turbo-build.log +1 -1
- package/packs/sidekick/package.json +1 -1
- package/packs/software-delivery/.turbo/turbo-build.log +1 -1
- package/packs/software-delivery/package.json +1 -1
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
import * as fs from 'node:fs';
|
|
18
18
|
import * as path from 'node:path';
|
|
19
19
|
import { resolveWorktreesDirSegment, resolveMainWriteAllowlistPrefixes, } from './config-resolver.js';
|
|
20
|
-
import { isAllowlistedPath } from './path-utils.js';
|
|
20
|
+
import { isAllowlistedPath, resolveToolInputPath } from './path-utils.js';
|
|
21
21
|
// Re-export sub-module public APIs for backward compatibility
|
|
22
|
-
export { normalizeDirectorySegment, ensureRepoRelativePrefix, isAllowlistedPath, } from './path-utils.js';
|
|
22
|
+
export { normalizeDirectorySegment, ensureRepoRelativePrefix, expandHomeRelativePath, resolveToolInputPath, isAllowlistedPath, } from './path-utils.js';
|
|
23
23
|
export { resolveWorktreesDirSegment, resolveWuAllowlistPrefix, resolveMainWriteAllowlistPrefixes, } from './config-resolver.js';
|
|
24
24
|
export { parseDirtyPathsFromStatus, getNonAllowlistedDirtyPaths, formatBlockedPaths, formatMainDirtyMutationGuardMessage, } from './git-status-parser.js';
|
|
25
25
|
export { evaluateMainDirtyMutationGuard } from './dirty-guard.js';
|
|
@@ -82,7 +82,7 @@ export async function checkWorktreeEnforcement(input, projectDir) {
|
|
|
82
82
|
// Resolve the file path
|
|
83
83
|
let resolvedPath;
|
|
84
84
|
try {
|
|
85
|
-
resolvedPath =
|
|
85
|
+
resolvedPath = resolveToolInputPath(input.file_path);
|
|
86
86
|
}
|
|
87
87
|
catch {
|
|
88
88
|
return {
|
|
@@ -164,7 +164,6 @@ export async function checkWorktreeEnforcement(input, projectDir) {
|
|
|
164
164
|
* @returns Check result with allowed status and reason
|
|
165
165
|
*/
|
|
166
166
|
export async function checkWuRequirement(input, projectDir) {
|
|
167
|
-
void input;
|
|
168
167
|
const mainRepoPath = projectDir ?? process.env.CLAUDE_PROJECT_DIR;
|
|
169
168
|
if (!mainRepoPath) {
|
|
170
169
|
return {
|
|
@@ -182,6 +181,23 @@ export async function checkWuRequirement(input, projectDir) {
|
|
|
182
181
|
reason: 'graceful: LumenFlow not configured',
|
|
183
182
|
};
|
|
184
183
|
}
|
|
184
|
+
// Resolve path and scope requirement to writes targeting this repository.
|
|
185
|
+
let resolvedPath;
|
|
186
|
+
try {
|
|
187
|
+
resolvedPath = resolveToolInputPath(input.file_path);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return {
|
|
191
|
+
allowed: true,
|
|
192
|
+
reason: 'graceful: cannot resolve file path',
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
if (!resolvedPath.startsWith(mainRepoPath + path.sep) && resolvedPath !== mainRepoPath) {
|
|
196
|
+
return {
|
|
197
|
+
allowed: true,
|
|
198
|
+
reason: 'path is outside repository',
|
|
199
|
+
};
|
|
200
|
+
}
|
|
185
201
|
// Check for active worktrees (indicates claimed WU)
|
|
186
202
|
if (fs.existsSync(worktreesDir)) {
|
|
187
203
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enforcement-checks.js","sourceRoot":"","sources":["../../src/hooks/enforcement-checks.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"enforcement-checks.js","sourceRoot":"","sources":["../../src/hooks/enforcement-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -130,8 +130,20 @@ if [[ -z "\$FILE_PATH" ]]; then
|
|
|
130
130
|
graceful_allow "No file_path in input"
|
|
131
131
|
fi
|
|
132
132
|
|
|
133
|
-
#
|
|
134
|
-
|
|
133
|
+
# Canonicalize tool path before resolution (e.g., "~/" -> "$HOME/")
|
|
134
|
+
CANONICAL_PATH="\$FILE_PATH"
|
|
135
|
+
if [[ "\$CANONICAL_PATH" == "~" ]]; then
|
|
136
|
+
if [[ -n "\${HOME:-}" ]]; then
|
|
137
|
+
CANONICAL_PATH="\$HOME"
|
|
138
|
+
fi
|
|
139
|
+
elif [[ "\$CANONICAL_PATH" == "~/"* || "\$CANONICAL_PATH" == "~\\\\"* ]]; then
|
|
140
|
+
if [[ -n "\${HOME:-}" ]]; then
|
|
141
|
+
CANONICAL_PATH="\${HOME}/\${CANONICAL_PATH:2}"
|
|
142
|
+
fi
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
# Resolve the canonicalized file path
|
|
146
|
+
RESOLVED_PATH=\$(realpath -m "\$CANONICAL_PATH" 2>/dev/null || echo "\$CANONICAL_PATH")
|
|
135
147
|
|
|
136
148
|
# Allow if path is outside repo entirely
|
|
137
149
|
if [[ "\$RESOLVED_PATH" != "\${MAIN_REPO_PATH}/"* && "\$RESOLVED_PATH" != "\${MAIN_REPO_PATH}" ]]; then
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enforce-worktree.js","sourceRoot":"","sources":["../../../src/hooks/generators/enforce-worktree.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,6BAA6B,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjF,MAAM,2BAA2B,GAAG,WAAW,CAAC,MAAM,CAAC;AAEvD,SAAS,yBAAyB,CAAC,KAAa,EAAE,QAAgB;IAChE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAAC,UAAoC,EAAE;IAClF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzD,IAAI,mBAAmB,GAAG,6BAA6B,CAAC;IACxD,IAAI,iBAAiB,GAAG,GAAG,2BAA2B,GAAG,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/C,mBAAmB,GAAG,yBAAyB,CAC7C,OAAO,CAAC,aAAa,EAAE,EACvB,6BAA6B,CAC9B,CAAC;QACF,iBAAiB,GAAG,mBAAmB,CACrC,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CACzE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IAED,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;eAQM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;oCAwBI,mBAAmB
|
|
1
|
+
{"version":3,"file":"enforce-worktree.js","sourceRoot":"","sources":["../../../src/hooks/generators/enforce-worktree.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,6BAA6B,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjF,MAAM,2BAA2B,GAAG,WAAW,CAAC,MAAM,CAAC;AAEvD,SAAS,yBAAyB,CAAC,KAAa,EAAE,QAAgB;IAChE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAAC,UAAoC,EAAE;IAClF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzD,IAAI,mBAAmB,GAAG,6BAA6B,CAAC;IACxD,IAAI,iBAAiB,GAAG,GAAG,2BAA2B,GAAG,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/C,mBAAmB,GAAG,yBAAyB,CAC7C,OAAO,CAAC,aAAa,EAAE,EACvB,6BAA6B,CAC9B,CAAC;QACF,iBAAiB,GAAG,mBAAmB,CACrC,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CACzE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IAED,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;eAQM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;oCAwBI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAsGhB,mBAAmB;;;;;;;;;;;;;IAatD,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0BL,mBAAmB;;;;;;CAMlC,CAAC;IACA,qCAAqC;AACvC,CAAC"}
|
|
@@ -62,23 +62,65 @@ fi
|
|
|
62
62
|
TMPFILE=\$(mktemp)
|
|
63
63
|
echo "\$INPUT" > "\$TMPFILE"
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
PARSE_RESULT=\$(python3 -c "
|
|
66
66
|
import json
|
|
67
67
|
try:
|
|
68
68
|
with open('\$TMPFILE', 'r') as f:
|
|
69
69
|
data = json.load(f)
|
|
70
|
-
|
|
70
|
+
tool_name = data.get('tool_name', '')
|
|
71
|
+
tool_input = data.get('tool_input', {})
|
|
72
|
+
if not isinstance(tool_input, dict):
|
|
73
|
+
tool_input = {}
|
|
74
|
+
file_path = tool_input.get('file_path', '')
|
|
75
|
+
print('OK')
|
|
76
|
+
print(tool_name if tool_name else '')
|
|
77
|
+
print(file_path if file_path else '')
|
|
71
78
|
except:
|
|
79
|
+
print('ERROR')
|
|
72
80
|
print('')
|
|
73
|
-
|
|
81
|
+
print('')
|
|
82
|
+
" 2>/dev/null || echo "ERROR")
|
|
74
83
|
|
|
75
84
|
rm -f "\$TMPFILE"
|
|
76
85
|
|
|
86
|
+
# Parse result
|
|
87
|
+
PARSE_STATUS=\$(echo "\$PARSE_RESULT" | head -1)
|
|
88
|
+
TOOL_NAME=\$(echo "\$PARSE_RESULT" | sed -n '2p')
|
|
89
|
+
FILE_PATH=\$(echo "\$PARSE_RESULT" | sed -n '3p')
|
|
90
|
+
|
|
91
|
+
if [[ "\$PARSE_STATUS" != "OK" ]]; then
|
|
92
|
+
graceful_allow "JSON parse failed"
|
|
93
|
+
fi
|
|
94
|
+
|
|
77
95
|
# Only check Write and Edit
|
|
78
96
|
if [[ "\$TOOL_NAME" != "Write" && "\$TOOL_NAME" != "Edit" ]]; then
|
|
79
97
|
exit 0
|
|
80
98
|
fi
|
|
81
99
|
|
|
100
|
+
if [[ -z "\$FILE_PATH" ]]; then
|
|
101
|
+
graceful_allow "No file_path in input"
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
# Canonicalize tool path before resolution (e.g., "~/" -> "$HOME/")
|
|
105
|
+
CANONICAL_PATH="\$FILE_PATH"
|
|
106
|
+
if [[ "\$CANONICAL_PATH" == "~" ]]; then
|
|
107
|
+
if [[ -n "\${HOME:-}" ]]; then
|
|
108
|
+
CANONICAL_PATH="\$HOME"
|
|
109
|
+
fi
|
|
110
|
+
elif [[ "\$CANONICAL_PATH" == "~/"* || "\$CANONICAL_PATH" == "~\\\\"* ]]; then
|
|
111
|
+
if [[ -n "\${HOME:-}" ]]; then
|
|
112
|
+
CANONICAL_PATH="\${HOME}/\${CANONICAL_PATH:2}"
|
|
113
|
+
fi
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# Resolve the canonicalized file path
|
|
117
|
+
RESOLVED_PATH=\$(realpath -m "\$CANONICAL_PATH" 2>/dev/null || echo "\$CANONICAL_PATH")
|
|
118
|
+
|
|
119
|
+
# Only enforce WU requirement for writes targeting this repository
|
|
120
|
+
if [[ "\$RESOLVED_PATH" != "\${MAIN_REPO_PATH}/"* && "\$RESOLVED_PATH" != "\${MAIN_REPO_PATH}" ]]; then
|
|
121
|
+
exit 0
|
|
122
|
+
fi
|
|
123
|
+
|
|
82
124
|
# Check for active worktrees (indicates claimed WU)
|
|
83
125
|
if [[ -d "\$WORKTREES_DIR" ]]; then
|
|
84
126
|
WORKTREE_COUNT=\$(find "\$WORKTREES_DIR" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-wu.js","sourceRoot":"","sources":["../../../src/hooks/generators/require-wu.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB;IACrC,sFAAsF;IACtF,sCAAsC;IACtC,OAAO
|
|
1
|
+
{"version":3,"file":"require-wu.js","sourceRoot":"","sources":["../../../src/hooks/generators/require-wu.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB;IACrC,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyIR,CAAC;IACA,qCAAqC;AACvC,CAAC"}
|
package/dist/hooks/path-utils.js
CHANGED
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
* Split from enforcement-checks.ts (WU-2127).
|
|
9
9
|
*/
|
|
10
10
|
import * as path from 'node:path';
|
|
11
|
+
import * as os from 'node:os';
|
|
11
12
|
const GIT_STATUS_QUOTE = '"';
|
|
12
13
|
const PATH_PREFIX_CURRENT_DIR = './';
|
|
13
14
|
const PATH_SEPARATOR_WINDOWS = '\\';
|
|
14
15
|
const PATH_SEPARATOR_POSIX = '/';
|
|
16
|
+
const HOME_PATH_PREFIX = '~';
|
|
15
17
|
export function normalizeDirectorySegment(value, fallback) {
|
|
16
18
|
const normalized = value.replace(/\\/g, '/').replace(/^\/+|\/+$/g, '');
|
|
17
19
|
return normalized.length > 0 ? normalized : fallback;
|
|
@@ -36,6 +38,51 @@ export function normalizeRepoRelativePath(value) {
|
|
|
36
38
|
}
|
|
37
39
|
return normalizedSeparators;
|
|
38
40
|
}
|
|
41
|
+
function resolveHomeDirectory(homeDir) {
|
|
42
|
+
if (homeDir && homeDir.length > 0) {
|
|
43
|
+
return homeDir;
|
|
44
|
+
}
|
|
45
|
+
const envHome = process.env.HOME ?? process.env.USERPROFILE;
|
|
46
|
+
if (envHome && envHome.length > 0) {
|
|
47
|
+
return envHome;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const detectedHome = os.homedir();
|
|
51
|
+
return detectedHome.length > 0 ? detectedHome : undefined;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Expand leading "~" in tool file paths without any vendor-specific path rules.
|
|
59
|
+
* Unknown "~user" style inputs are left unchanged.
|
|
60
|
+
*/
|
|
61
|
+
export function expandHomeRelativePath(value, options = {}) {
|
|
62
|
+
const trimmedValue = value.trim();
|
|
63
|
+
if (trimmedValue === HOME_PATH_PREFIX) {
|
|
64
|
+
return resolveHomeDirectory(options.homeDir) ?? trimmedValue;
|
|
65
|
+
}
|
|
66
|
+
if (!trimmedValue.startsWith('~/') && !trimmedValue.startsWith('~\\')) {
|
|
67
|
+
return trimmedValue;
|
|
68
|
+
}
|
|
69
|
+
const homeDirectory = resolveHomeDirectory(options.homeDir);
|
|
70
|
+
if (!homeDirectory) {
|
|
71
|
+
return trimmedValue;
|
|
72
|
+
}
|
|
73
|
+
const relativeSuffix = trimmedValue.slice(2);
|
|
74
|
+
const normalizedSuffix = relativeSuffix.replace(/[\\/]/g, path.sep);
|
|
75
|
+
return normalizedSuffix.length > 0 ? path.join(homeDirectory, normalizedSuffix) : homeDirectory;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve tool-provided file paths to canonical absolute paths.
|
|
79
|
+
* Handles home-relative paths and relative paths against the provided cwd.
|
|
80
|
+
*/
|
|
81
|
+
export function resolveToolInputPath(value, options = {}) {
|
|
82
|
+
const cwd = options.cwd ?? process.cwd();
|
|
83
|
+
const expandedPath = expandHomeRelativePath(value, { homeDir: options.homeDir });
|
|
84
|
+
return path.resolve(cwd, expandedPath);
|
|
85
|
+
}
|
|
39
86
|
/**
|
|
40
87
|
* Check if a resolved path matches the main-write allowlist.
|
|
41
88
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/hooks/path-utils.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;GAMG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/hooks/path-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumenflow/cli",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.2",
|
|
4
4
|
"description": "Command-line interface for LumenFlow workflow framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lumenflow",
|
|
@@ -179,13 +179,13 @@
|
|
|
179
179
|
"xstate": "^5.28.0",
|
|
180
180
|
"yaml": "^2.8.2",
|
|
181
181
|
"zod": "^4.3.6",
|
|
182
|
-
"@lumenflow/agent": "3.8.
|
|
183
|
-
"@lumenflow/
|
|
184
|
-
"@lumenflow/
|
|
185
|
-
"@lumenflow/
|
|
186
|
-
"@lumenflow/
|
|
187
|
-
"@lumenflow/
|
|
188
|
-
"@lumenflow/
|
|
182
|
+
"@lumenflow/agent": "3.8.2",
|
|
183
|
+
"@lumenflow/core": "3.8.2",
|
|
184
|
+
"@lumenflow/initiatives": "3.8.2",
|
|
185
|
+
"@lumenflow/memory": "3.8.2",
|
|
186
|
+
"@lumenflow/kernel": "3.8.2",
|
|
187
|
+
"@lumenflow/control-plane-sdk": "3.8.2",
|
|
188
|
+
"@lumenflow/metrics": "3.8.2"
|
|
189
189
|
},
|
|
190
190
|
"devDependencies": {
|
|
191
191
|
"@vitest/coverage-v8": "^4.0.18",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @lumenflow/packs-software-delivery@3.
|
|
2
|
+
> @lumenflow/packs-software-delivery@3.8.1 build /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
|
|
3
3
|
> tsc
|
|
4
4
|
|