@lumenflow/mcp 2.21.0 → 3.0.0

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.
Files changed (79) hide show
  1. package/LICENSE +661 -190
  2. package/dist/mcp-constants.d.ts +173 -0
  3. package/dist/mcp-constants.d.ts.map +1 -0
  4. package/dist/mcp-constants.js +191 -0
  5. package/dist/mcp-constants.js.map +1 -0
  6. package/dist/runtime-cache.d.ts +7 -0
  7. package/dist/runtime-cache.d.ts.map +1 -0
  8. package/dist/runtime-cache.js +26 -0
  9. package/dist/runtime-cache.js.map +1 -0
  10. package/dist/runtime-tool-resolver.constants.d.ts +33 -0
  11. package/dist/runtime-tool-resolver.constants.d.ts.map +1 -0
  12. package/dist/runtime-tool-resolver.constants.js +33 -0
  13. package/dist/runtime-tool-resolver.constants.js.map +1 -0
  14. package/dist/runtime-tool-resolver.d.ts +5 -0
  15. package/dist/runtime-tool-resolver.d.ts.map +1 -0
  16. package/dist/runtime-tool-resolver.js +2028 -0
  17. package/dist/runtime-tool-resolver.js.map +1 -0
  18. package/dist/server.d.ts.map +1 -1
  19. package/dist/server.js +30 -4
  20. package/dist/server.js.map +1 -1
  21. package/dist/tools/agent-tools.d.ts +1 -0
  22. package/dist/tools/agent-tools.d.ts.map +1 -1
  23. package/dist/tools/agent-tools.js +113 -41
  24. package/dist/tools/agent-tools.js.map +1 -1
  25. package/dist/tools/context-tools.d.ts +2 -1
  26. package/dist/tools/context-tools.d.ts.map +1 -1
  27. package/dist/tools/context-tools.js +23 -40
  28. package/dist/tools/context-tools.js.map +1 -1
  29. package/dist/tools/flow-tools.d.ts +1 -0
  30. package/dist/tools/flow-tools.d.ts.map +1 -1
  31. package/dist/tools/flow-tools.js +51 -64
  32. package/dist/tools/flow-tools.js.map +1 -1
  33. package/dist/tools/initiative-tools.d.ts.map +1 -1
  34. package/dist/tools/initiative-tools.js +198 -84
  35. package/dist/tools/initiative-tools.js.map +1 -1
  36. package/dist/tools/memory-tools.d.ts +2 -0
  37. package/dist/tools/memory-tools.d.ts.map +1 -1
  38. package/dist/tools/memory-tools.js +268 -166
  39. package/dist/tools/memory-tools.js.map +1 -1
  40. package/dist/tools/orchestration-tools.d.ts.map +1 -1
  41. package/dist/tools/orchestration-tools.js +99 -57
  42. package/dist/tools/orchestration-tools.js.map +1 -1
  43. package/dist/tools/parity-tools.d.ts +12 -0
  44. package/dist/tools/parity-tools.d.ts.map +1 -1
  45. package/dist/tools/parity-tools.js +776 -193
  46. package/dist/tools/parity-tools.js.map +1 -1
  47. package/dist/tools/runtime-task-constants.d.ts +19 -0
  48. package/dist/tools/runtime-task-constants.d.ts.map +1 -0
  49. package/dist/tools/runtime-task-constants.js +19 -0
  50. package/dist/tools/runtime-task-constants.js.map +1 -0
  51. package/dist/tools/runtime-task-tools.d.ts +10 -0
  52. package/dist/tools/runtime-task-tools.d.ts.map +1 -0
  53. package/dist/tools/runtime-task-tools.js +114 -0
  54. package/dist/tools/runtime-task-tools.js.map +1 -0
  55. package/dist/tools/setup-tools.d.ts +1 -0
  56. package/dist/tools/setup-tools.d.ts.map +1 -1
  57. package/dist/tools/setup-tools.js +150 -65
  58. package/dist/tools/setup-tools.js.map +1 -1
  59. package/dist/tools/validation-tools.d.ts +2 -0
  60. package/dist/tools/validation-tools.d.ts.map +1 -1
  61. package/dist/tools/validation-tools.js +98 -54
  62. package/dist/tools/validation-tools.js.map +1 -1
  63. package/dist/tools/wu-tools.d.ts +1 -1
  64. package/dist/tools/wu-tools.d.ts.map +1 -1
  65. package/dist/tools/wu-tools.js +444 -250
  66. package/dist/tools/wu-tools.js.map +1 -1
  67. package/dist/tools-shared.d.ts +81 -1
  68. package/dist/tools-shared.d.ts.map +1 -1
  69. package/dist/tools-shared.js +199 -1
  70. package/dist/tools-shared.js.map +1 -1
  71. package/dist/tools.d.ts +28 -2
  72. package/dist/tools.d.ts.map +1 -1
  73. package/dist/tools.js +59 -3
  74. package/dist/tools.js.map +1 -1
  75. package/dist/worktree-enforcement.d.ts +47 -0
  76. package/dist/worktree-enforcement.d.ts.map +1 -0
  77. package/dist/worktree-enforcement.js +152 -0
  78. package/dist/worktree-enforcement.js.map +1 -0
  79. package/package.json +5 -2
package/dist/tools.js CHANGED
@@ -31,6 +31,8 @@
31
31
  export { contextGetTool, wuListTool } from './tools/context-tools.js';
32
32
  // Re-export domain tools -- WU lifecycle
33
33
  export { wuStatusTool, wuCreateTool, wuClaimTool, wuSandboxTool, wuDoneTool, gatesRunTool, wuBlockTool, wuUnblockTool, wuEditTool, wuReleaseTool, wuRecoverTool, wuRepairTool, wuDepsTool, wuPrepTool, wuPreflightTool, wuPruneTool, wuDeleteTool, wuCleanupTool, wuBriefTool, wuDelegateTool, wuValidateTool, wuInferLaneTool, wuUnlockLaneTool, } from './tools/wu-tools.js';
34
+ // Re-export runtime tracer-bullet tools
35
+ export { taskBlockTool, taskClaimTool, taskCompleteTool, taskCreateTool, taskInspectTool, taskToolExecuteTool, taskUnblockTool, } from './tools/runtime-task-tools.js';
34
36
  // Re-export domain tools -- initiative
35
37
  export { initiativeListTool, initiativeStatusTool, initiativeCreateTool, initiativeEditTool, initiativeAddWuTool, initiativeRemoveWuTool, initiatiBulkAssignTool, initiativePlanTool, } from './tools/initiative-tools.js';
36
38
  // Re-export domain tools -- memory
@@ -46,9 +48,11 @@ export { validateTool, validateAgentSkillsTool, validateAgentSyncTool, validateB
46
48
  // Re-export domain tools -- setup
47
49
  export { lumenflowInitTool, lumenflowDoctorTool, lumenflowIntegrateTool, lumenflowUpgradeTool, lumenflowCommandsTool, lumenflowDocsSyncTool, lumenflowReleaseTool, lumenflowSyncTemplatesTool, } from './tools/setup-tools.js';
48
50
  // Re-export domain tools -- wave-1/wave-2 parity
49
- export { backlogPruneTool, docsSyncTool, gatesTool, gatesDocsTool, laneHealthTool, laneSuggestTool, lumenflowTool, lumenflowGatesTool, stateBootstrapTool, stateCleanupTool, stateDoctorTool, syncTemplatesTool, fileReadTool, fileWriteTool, fileEditTool, fileDeleteTool, gitStatusTool, gitDiffTool, gitLogTool, gitBranchTool, initPlanTool, planCreateTool, planEditTool, planLinkTool, planPromoteTool, signalCleanupTool, wuProtoTool, } from './tools/parity-tools.js';
51
+ export { backlogPruneTool, docsSyncTool, gatesTool, gatesDocsTool, laneHealthTool, laneSuggestTool, lumenflowTool, lumenflowGatesTool, stateBootstrapTool, stateCleanupTool, stateDoctorTool, syncTemplatesTool, fileReadTool, fileWriteTool, fileEditTool, fileDeleteTool, gitStatusTool, gitDiffTool, gitLogTool, gitBranchTool, initPlanTool, planCreateTool, planEditTool, planLinkTool, planPromoteTool, signalCleanupTool, configSetTool, configGetTool, wuProtoTool, } from './tools/parity-tools.js';
50
52
  import { contextGetTool, wuListTool } from './tools/context-tools.js';
51
53
  import { wuStatusTool, wuCreateTool, wuClaimTool, wuSandboxTool, wuDoneTool, gatesRunTool, wuBlockTool, wuUnblockTool, wuEditTool, wuReleaseTool, wuRecoverTool, wuRepairTool, wuDepsTool, wuPrepTool, wuPreflightTool, wuPruneTool, wuDeleteTool, wuCleanupTool, wuBriefTool, wuDelegateTool, wuValidateTool, wuInferLaneTool, wuUnlockLaneTool, } from './tools/wu-tools.js';
54
+ import { taskBlockTool, taskClaimTool, taskCompleteTool, taskCreateTool, taskInspectTool, taskToolExecuteTool, taskUnblockTool, } from './tools/runtime-task-tools.js';
55
+ import { RuntimeTaskToolNames } from './tools/runtime-task-constants.js';
52
56
  import { initiativeListTool, initiativeStatusTool, initiativeCreateTool, initiativeEditTool, initiativeAddWuTool, initiativeRemoveWuTool, initiatiBulkAssignTool, initiativePlanTool, } from './tools/initiative-tools.js';
53
57
  import { memInitTool, memStartTool, memReadyTool, memCheckpointTool, memCleanupTool, memContextTool, memCreateTool, memDeleteTool, memExportTool, memInboxTool, memSignalTool, memSummarizeTool, memTriageTool, memRecoverTool, } from './tools/memory-tools.js';
54
58
  import { agentSessionTool, agentSessionEndTool, agentLogIssueTool, agentIssuesQueryTool, } from './tools/agent-tools.js';
@@ -56,7 +60,7 @@ import { orchestrateInitiativeTool, orchestrateInitStatusTool, orchestrateMonito
56
60
  import { flowBottlenecksTool, flowReportTool, metricsSnapshotTool, lumenflowMetricsTool, metricsTool, } from './tools/flow-tools.js';
57
61
  import { validateTool, validateAgentSkillsTool, validateAgentSyncTool, validateBacklogSyncTool, validateSkillsSpecTool, lumenflowValidateTool, } from './tools/validation-tools.js';
58
62
  import { lumenflowInitTool, lumenflowDoctorTool, lumenflowIntegrateTool, lumenflowUpgradeTool, lumenflowCommandsTool, lumenflowDocsSyncTool, lumenflowReleaseTool, lumenflowSyncTemplatesTool, } from './tools/setup-tools.js';
59
- import { backlogPruneTool, docsSyncTool, gatesTool, gatesDocsTool, laneHealthTool, laneSuggestTool, lumenflowTool, lumenflowGatesTool, stateBootstrapTool, stateCleanupTool, stateDoctorTool, syncTemplatesTool, fileReadTool, fileWriteTool, fileEditTool, fileDeleteTool, gitStatusTool, gitDiffTool, gitLogTool, gitBranchTool, initPlanTool, planCreateTool, planEditTool, planLinkTool, planPromoteTool, signalCleanupTool, wuProtoTool, } from './tools/parity-tools.js';
63
+ import { backlogPruneTool, docsSyncTool, gatesTool, gatesDocsTool, laneHealthTool, laneSuggestTool, lumenflowTool, lumenflowGatesTool, stateBootstrapTool, stateCleanupTool, stateDoctorTool, syncTemplatesTool, fileReadTool, fileWriteTool, fileEditTool, fileDeleteTool, gitStatusTool, gitDiffTool, gitLogTool, gitBranchTool, initPlanTool, planCreateTool, planEditTool, planLinkTool, planPromoteTool, signalCleanupTool, configSetTool, configGetTool, wuProtoTool, } from './tools/parity-tools.js';
60
64
  /**
61
65
  * MCP parity exclusions for tools that are intentionally MCP-only or maintainer-only.
62
66
  *
@@ -67,12 +71,32 @@ export const MCP_PUBLIC_PARITY_ALLOWED_EXTRA_TOOLS = [
67
71
  'context_get',
68
72
  'gates_run',
69
73
  'initiative_remove_wu',
74
+ RuntimeTaskToolNames.TASK_BLOCK,
75
+ RuntimeTaskToolNames.TASK_COMPLETE,
76
+ RuntimeTaskToolNames.TASK_CREATE,
77
+ RuntimeTaskToolNames.TASK_INSPECT,
78
+ RuntimeTaskToolNames.TASK_UNBLOCK,
79
+ RuntimeTaskToolNames.TOOL_EXECUTE,
70
80
  'validate_agent_skills',
71
81
  'validate_agent_sync',
72
82
  'validate_backlog_sync',
73
83
  'validate_skills_spec',
74
84
  'wu_list',
75
85
  ];
86
+ /**
87
+ * Public CLI commands intentionally out of MCP scope.
88
+ *
89
+ * These normalized command names are excluded from the "missing" parity
90
+ * calculation so MCP parity reflects the supported public MCP surface.
91
+ */
92
+ export const MCP_PUBLIC_PARITY_ALLOWED_MISSING_TOOLS = [
93
+ 'lane_edit',
94
+ 'lane_lock',
95
+ 'lane_setup',
96
+ 'lane_status',
97
+ 'lane_validate',
98
+ 'pack_scaffold',
99
+ ];
76
100
  /**
77
101
  * Normalize public CLI command names to MCP tool naming.
78
102
  *
@@ -90,7 +114,10 @@ export function buildMcpManifestParityReport(manifestCommandNames, mcpToolNames)
90
114
  const normalizedManifest = new Set(manifestCommandNames.map((commandName) => normalizePublicManifestCommandName(commandName)));
91
115
  const mcpToolSet = new Set(mcpToolNames);
92
116
  const allowedExtraSet = new Set(MCP_PUBLIC_PARITY_ALLOWED_EXTRA_TOOLS);
93
- const missing = [...normalizedManifest].filter((name) => !mcpToolSet.has(name)).sort();
117
+ const allowedMissingSet = new Set(MCP_PUBLIC_PARITY_ALLOWED_MISSING_TOOLS);
118
+ const missing = [...normalizedManifest]
119
+ .filter((name) => !mcpToolSet.has(name) && !allowedMissingSet.has(name))
120
+ .sort();
94
121
  const allowedExtra = [...mcpToolSet]
95
122
  .filter((name) => !normalizedManifest.has(name) && allowedExtraSet.has(name))
96
123
  .sort();
@@ -142,6 +169,9 @@ export const allTools = [
142
169
  planLinkTool,
143
170
  planPromoteTool,
144
171
  signalCleanupTool,
172
+ // WU-1902: Config tools
173
+ configSetTool,
174
+ configGetTool,
145
175
  wuProtoTool,
146
176
  // WU-1422: Additional WU tools
147
177
  wuBlockTool,
@@ -216,4 +246,30 @@ export const allTools = [
216
246
  lumenflowReleaseTool,
217
247
  lumenflowSyncTemplatesTool,
218
248
  ];
249
+ /**
250
+ * Runtime-backed additive MCP tools.
251
+ *
252
+ * These are intentionally isolated from legacy CLI-shell tools so we can
253
+ * migrate command-by-command without breaking parity gates.
254
+ *
255
+ * NOTE:
256
+ * `allTools` remains the legacy parity baseline for strict CLI parity checks
257
+ * that intentionally ignore runtime migration deltas.
258
+ *
259
+ * Phase-4 closure metrics use `registeredTools` (production registry) so
260
+ * runtime-migrated tools are measured against the real server surface.
261
+ */
262
+ export const runtimeTaskTools = [
263
+ taskClaimTool,
264
+ taskCreateTool,
265
+ taskCompleteTool,
266
+ taskBlockTool,
267
+ taskUnblockTool,
268
+ taskInspectTool,
269
+ taskToolExecuteTool,
270
+ ];
271
+ /**
272
+ * Production MCP registry consumed by server startup.
273
+ */
274
+ export const registeredTools = [...allTools, ...runtimeTaskTools];
219
275
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @file worktree-enforcement.ts
3
+ * @description Worktree enforcement guard for MCP file_write and file_edit tools.
4
+ *
5
+ * WU-1853: MCP tool calls do not trigger Claude Code PreToolUse hooks, so
6
+ * file_write and file_edit can bypass the enforce-worktree.sh hook that blocks
7
+ * direct writes to the main checkout. This module mirrors the shell hook logic
8
+ * in TypeScript so the MCP server can enforce the same policy.
9
+ *
10
+ * Enforcement check mirrors enforce-worktree.sh:
11
+ * - Allow writes inside worktrees/
12
+ * - Allow writes to .lumenflow/, .claude/, docs/tasks/wu/, plan/
13
+ * - Block everything else when on main/master and enforcement is active
14
+ * - Gracefully allow if config cannot be read
15
+ */
16
+ /**
17
+ * Error code returned when a write is blocked by worktree enforcement.
18
+ */
19
+ export declare const WORKTREE_ENFORCEMENT_ERROR_CODE = "WORKTREE_ENFORCEMENT_BLOCKED";
20
+ /**
21
+ * Result of a worktree enforcement check.
22
+ */
23
+ export interface WorktreeEnforcementResult {
24
+ /** Whether the write operation is allowed */
25
+ allowed: boolean;
26
+ /** Error code when blocked */
27
+ errorCode?: string;
28
+ /** Human-readable reason when blocked */
29
+ reason?: string;
30
+ }
31
+ export interface WorktreeEnforcementInput {
32
+ /** Path to the file being written (relative or absolute) */
33
+ filePath: string;
34
+ /** Project root override (defaults to auto-detection) */
35
+ projectRoot?: string;
36
+ }
37
+ /**
38
+ * Check whether a file write/edit should be allowed based on worktree enforcement policy.
39
+ *
40
+ * Mirrors the logic in enforce-worktree.sh but runs in-process for MCP tools.
41
+ *
42
+ * Graceful degradation: if any check fails (config unreadable, git unavailable,
43
+ * .lumenflow not configured), the operation is allowed to prevent blocking
44
+ * legitimate work.
45
+ */
46
+ export declare function checkWorktreeEnforcement(input: WorktreeEnforcementInput): WorktreeEnforcementResult;
47
+ //# sourceMappingURL=worktree-enforcement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-enforcement.d.ts","sourceRoot":"","sources":["../src/worktree-enforcement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH;;GAEG;AACH,eAAO,MAAM,+BAA+B,iCAAiC,CAAC;AAkB9E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,wBAAwB,GAC9B,yBAAyB,CA8D3B"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * @file worktree-enforcement.ts
3
+ * @description Worktree enforcement guard for MCP file_write and file_edit tools.
4
+ *
5
+ * WU-1853: MCP tool calls do not trigger Claude Code PreToolUse hooks, so
6
+ * file_write and file_edit can bypass the enforce-worktree.sh hook that blocks
7
+ * direct writes to the main checkout. This module mirrors the shell hook logic
8
+ * in TypeScript so the MCP server can enforce the same policy.
9
+ *
10
+ * Enforcement check mirrors enforce-worktree.sh:
11
+ * - Allow writes inside worktrees/
12
+ * - Allow writes to .lumenflow/, .claude/, docs/tasks/wu/, plan/
13
+ * - Block everything else when on main/master and enforcement is active
14
+ * - Gracefully allow if config cannot be read
15
+ */
16
+ import path from 'node:path';
17
+ import { existsSync } from 'node:fs';
18
+ import { execFileSync } from 'node:child_process';
19
+ import { getConfig, findProjectRoot } from '@lumenflow/core';
20
+ /**
21
+ * Error code returned when a write is blocked by worktree enforcement.
22
+ */
23
+ export const WORKTREE_ENFORCEMENT_ERROR_CODE = 'WORKTREE_ENFORCEMENT_BLOCKED';
24
+ /**
25
+ * Branches that are considered "main" and subject to enforcement.
26
+ */
27
+ const PROTECTED_BRANCHES = ['main', 'master'];
28
+ /**
29
+ * Relative path prefixes that are always allowed on main checkout.
30
+ * Mirrors the allowlist in enforce-worktree.sh.
31
+ */
32
+ const ALLOWLISTED_PATH_PREFIXES = [
33
+ 'docs/04-operations/tasks/wu/',
34
+ '.lumenflow/',
35
+ '.claude/',
36
+ 'plan/',
37
+ ];
38
+ /**
39
+ * Check whether a file write/edit should be allowed based on worktree enforcement policy.
40
+ *
41
+ * Mirrors the logic in enforce-worktree.sh but runs in-process for MCP tools.
42
+ *
43
+ * Graceful degradation: if any check fails (config unreadable, git unavailable,
44
+ * .lumenflow not configured), the operation is allowed to prevent blocking
45
+ * legitimate work.
46
+ */
47
+ export function checkWorktreeEnforcement(input) {
48
+ const { filePath } = input;
49
+ try {
50
+ const projectRoot = input.projectRoot ?? findProjectRoot();
51
+ // Graceful degradation: LumenFlow not configured
52
+ const lumenflowDir = path.join(projectRoot, '.lumenflow');
53
+ if (!existsSync(lumenflowDir)) {
54
+ return { allowed: true };
55
+ }
56
+ // Read enforcement config
57
+ const config = getConfig({ projectRoot });
58
+ const enforcement = config?.agents?.clients?.['claude-code']?.enforcement;
59
+ if (!enforcement?.block_outside_worktree) {
60
+ return { allowed: true };
61
+ }
62
+ // Detect current branch
63
+ const currentBranch = detectCurrentBranch(projectRoot);
64
+ if (!currentBranch) {
65
+ // Branch detection failed -- graceful degradation
66
+ return { allowed: true };
67
+ }
68
+ // Allow operations on non-main branches
69
+ if (!isProtectedBranch(currentBranch)) {
70
+ return { allowed: true };
71
+ }
72
+ // Resolve the file path to a relative path within the project
73
+ const resolvedPath = resolveFilePath(filePath, projectRoot);
74
+ // Allow if path is outside the project entirely
75
+ if (resolvedPath === null) {
76
+ return { allowed: true };
77
+ }
78
+ // Allow if path is inside a worktree
79
+ if (resolvedPath.startsWith('worktrees/')) {
80
+ return { allowed: true };
81
+ }
82
+ // Allow if path matches the allowlist
83
+ if (isAllowlistedPath(resolvedPath)) {
84
+ return { allowed: true };
85
+ }
86
+ // Block the write
87
+ return {
88
+ allowed: false,
89
+ errorCode: WORKTREE_ENFORCEMENT_ERROR_CODE,
90
+ reason: `Write to '${filePath}' blocked: you are on the '${currentBranch}' branch. ` +
91
+ 'Direct writes to main checkout are not allowed when worktree enforcement is active. ' +
92
+ 'Use pnpm wu:claim to create a worktree and work there instead.',
93
+ };
94
+ }
95
+ catch {
96
+ // Graceful degradation: any unexpected error allows the operation
97
+ return { allowed: true };
98
+ }
99
+ }
100
+ /**
101
+ * Detect the current git branch for the given project root.
102
+ * Returns null if detection fails.
103
+ */
104
+ function detectCurrentBranch(projectRoot) {
105
+ try {
106
+ // eslint-disable-next-line sonarjs/no-os-command-from-path -- git resolved from PATH; workflow tooling requires git
107
+ const result = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
108
+ cwd: projectRoot,
109
+ encoding: 'utf8',
110
+ stdio: ['pipe', 'pipe', 'pipe'],
111
+ });
112
+ return result.trim() || null;
113
+ }
114
+ catch {
115
+ return null;
116
+ }
117
+ }
118
+ /**
119
+ * Check if a branch name is a protected branch (main/master).
120
+ */
121
+ function isProtectedBranch(branchName) {
122
+ return PROTECTED_BRANCHES.includes(branchName);
123
+ }
124
+ /**
125
+ * Resolve a file path to a relative path within the project.
126
+ * Returns null if the path is outside the project root.
127
+ */
128
+ function resolveFilePath(filePath, projectRoot) {
129
+ let resolved;
130
+ if (path.isAbsolute(filePath)) {
131
+ resolved = filePath;
132
+ }
133
+ else {
134
+ // Relative path is relative to project root
135
+ resolved = path.resolve(projectRoot, filePath);
136
+ }
137
+ // Normalize both paths for comparison
138
+ const normalizedProject = projectRoot.endsWith('/') ? projectRoot : `${projectRoot}/`;
139
+ // Check if the resolved path is inside the project
140
+ if (!resolved.startsWith(normalizedProject) && resolved !== projectRoot) {
141
+ return null;
142
+ }
143
+ // Return the relative path
144
+ return path.relative(projectRoot, resolved);
145
+ }
146
+ /**
147
+ * Check if a relative path matches the allowlist.
148
+ */
149
+ function isAllowlistedPath(relativePath) {
150
+ return ALLOWLISTED_PATH_PREFIXES.some((prefix) => relativePath.startsWith(prefix));
151
+ }
152
+ //# sourceMappingURL=worktree-enforcement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-enforcement.js","sourceRoot":"","sources":["../src/worktree-enforcement.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumenflow/mcp",
3
- "version": "2.21.0",
3
+ "version": "3.0.0",
4
4
  "description": "MCP stdio server for LumenFlow workflow framework",
5
5
  "keywords": [
6
6
  "lumenflow",
@@ -53,7 +53,10 @@
53
53
  "dependencies": {
54
54
  "@modelcontextprotocol/sdk": "^1.26.0",
55
55
  "zod": "^4.3.6",
56
- "@lumenflow/core": "2.21.0"
56
+ "@lumenflow/core": "3.0.0",
57
+ "@lumenflow/kernel": "3.0.0",
58
+ "@lumenflow/metrics": "3.0.0",
59
+ "@lumenflow/memory": "3.0.0"
57
60
  },
58
61
  "devDependencies": {
59
62
  "@vitest/coverage-v8": "^4.0.18",