logicstamp-mcp 0.2.0 → 0.2.1
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/CHANGELOG.md +42 -1
- package/README.md +2 -3
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +14 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/list-bundles.d.ts.map +1 -1
- package/dist/mcp/tools/list-bundles.js +64 -9
- package/dist/mcp/tools/list-bundles.js.map +1 -1
- package/dist/mcp/tools/read-bundle.d.ts.map +1 -1
- package/dist/mcp/tools/read-bundle.js +72 -7
- package/dist/mcp/tools/read-bundle.js.map +1 -1
- package/dist/mcp/tools/read-logicstamp-docs.d.ts +2 -0
- package/dist/mcp/tools/read-logicstamp-docs.d.ts.map +1 -1
- package/dist/mcp/tools/read-logicstamp-docs.js +3 -0
- package/dist/mcp/tools/read-logicstamp-docs.js.map +1 -1
- package/dist/mcp/tools/watch-status.js +2 -2
- package/dist/mcp/tools/watch-status.js.map +1 -1
- package/docs/logicstamp-for-llms.md +42 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.2.1] - 2026-03-06
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **Watch Mode Retry Logic** ([#35](https://github.com/LogicStamp/logicstamp-mcp/pull/35)) - Added automatic retry mechanism with exponential backoff for reading files when watch mode is active
|
|
17
|
+
- Initial delay before reading files: 200ms for regular watch mode, 500ms for strict watch mode
|
|
18
|
+
- Automatic retry up to 3 times with exponential backoff (100ms, 200ms, 400ms) if JSON parsing fails
|
|
19
|
+
- Prevents race conditions when watch mode is actively writing context files
|
|
20
|
+
- Worst case total wait: ~900ms for regular watch, ~1.1s for strict watch
|
|
21
|
+
- Only applies when watch mode is active - no performance impact otherwise
|
|
22
|
+
- Updated `logicstamp_read_bundle` and `logicstamp_list_bundles` to use retry logic
|
|
23
|
+
- **Documentation Warnings Against External `sleep()`** - Added explicit, prominent warnings in tool descriptions and outputs to prevent AI assistants from using unnecessary `sleep()` calls
|
|
24
|
+
- **Tool Descriptions** - Added "⚠️ CRITICAL: Do NOT use sleep() delays" as the FIRST line in all relevant tool descriptions (`logicstamp_watch_status`, `logicstamp_list_bundles`, `logicstamp_read_bundle`, `logicstamp_refresh_snapshot`) to ensure AI assistants see the warning immediately
|
|
25
|
+
- **Tool Output Warnings** - Added `warning` field to `logicstamp_read_bundle` and `logicstamp_list_bundles` outputs when watch mode is active, ensuring warnings appear in every response
|
|
26
|
+
- **Watch Status Messages** - Enhanced `logicstamp_watch_status` messages to explicitly state "DO NOT use sleep() delays" when watch mode is active
|
|
27
|
+
- **Documentation** - Added comprehensive section in `docs/logicstamp-for-llms.md` explaining why `sleep()` is unnecessary
|
|
28
|
+
- **Command Documentation** - Updated command documentation (`docs/commands/read-bundle.md`, `docs/commands/list-bundles.md`) with warnings that delays are internal
|
|
29
|
+
- Emphasizes that watch mode keeps bundles fresh automatically - AI assistants should read bundles directly without waiting
|
|
30
|
+
- Explains that internal retry logic handles all race conditions (200-500ms delays + exponential backoff built-in)
|
|
31
|
+
- Multiple warning touchpoints (descriptions, outputs, messages) ensure AI assistants cannot miss the guidance
|
|
32
|
+
- Prevents unnecessary delays that slow down AI assistant workflows when watch mode is active
|
|
33
|
+
- **Branch Testing Improvements** ([#36](https://github.com/LogicStamp/logicstamp-mcp/pull/36)) - Added comprehensive branch coverage tests for `read-logicstamp-docs.ts` and `compare-snapshot.ts`
|
|
34
|
+
- Added tests for filesystem root check in `findPackageRoot` function
|
|
35
|
+
- Added test for invalid docPath validation branch by exporting `readDocFile` for testing purposes
|
|
36
|
+
- Added depth validation tests (invalid, negative, non-integer values)
|
|
37
|
+
- Added baseline path resolution tests (snapshot, disk, custom path baselines)
|
|
38
|
+
- Added profile-specific command building tests for different profiles and depth combinations
|
|
39
|
+
- Added bundle hash comparison tests (hash changes, bundle addition/removal scenarios)
|
|
40
|
+
- Added tests for missing contracts, loadBundles error handling, and token delta fallback calculation
|
|
41
|
+
- Added cache cleanup tests for corruption detection scenarios
|
|
42
|
+
- Improves branch coverage for error handling paths and edge cases
|
|
43
|
+
- Exported `readDocFile` function for testing to enable coverage of defensive validation branch (line 93)
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- **TypeScript File Validation** ([#35](https://github.com/LogicStamp/logicstamp-mcp/pull/35)) - Fixed issue where TypeScript file validation errors were masked by JSON parse errors in retry logic
|
|
48
|
+
- Retry logic now checks for TypeScript files (starting with `import` or `export`) before attempting JSON parsing
|
|
49
|
+
- Ensures proper error messages when users accidentally point to TypeScript source files instead of JSON bundle files
|
|
50
|
+
|
|
12
51
|
### Roadmap
|
|
13
52
|
|
|
14
53
|
For a comprehensive roadmap with detailed status, priorities, and implementation plans, see [ROADMAP.md](ROADMAP.md).
|
|
@@ -334,7 +373,9 @@ For a comprehensive roadmap with detailed status, priorities, and implementation
|
|
|
334
373
|
- Requires `logicstamp-context` CLI to be installed globally (`npm install -g logicstamp-context`)
|
|
335
374
|
- All tools are read-only - they analyze but never modify your codebase
|
|
336
375
|
|
|
337
|
-
[Unreleased]: https://github.com/LogicStamp/logicstamp-mcp/compare/v0.2.
|
|
376
|
+
[Unreleased]: https://github.com/LogicStamp/logicstamp-mcp/compare/v0.2.1...HEAD
|
|
377
|
+
|
|
378
|
+
[0.2.1]: https://github.com/LogicStamp/logicstamp-mcp/releases/tag/v0.2.1
|
|
338
379
|
|
|
339
380
|
[0.2.0]: https://github.com/LogicStamp/logicstamp-mcp/releases/tag/v0.2.0
|
|
340
381
|
|
package/README.md
CHANGED
|
@@ -28,9 +28,8 @@
|
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
31
|
-

|
|
32
|
+
*Example workflow: `stamp context --strict-watch` generates context bundles that MCP-powered assistants use to explain component architecture (ThemeContext shown here).*
|
|
34
33
|
|
|
35
34
|
---
|
|
36
35
|
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAkBnE;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAkBnE;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAqZrC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CASjD"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -32,7 +32,8 @@ export function createServer() {
|
|
|
32
32
|
tools: [
|
|
33
33
|
{
|
|
34
34
|
name: 'logicstamp_refresh_snapshot',
|
|
35
|
-
description: '⚠️
|
|
35
|
+
description: '⚠️ CRITICAL: Do NOT use sleep() delays. After calling this tool, bundles are immediately available. When watch mode is active, skip this tool entirely and read bundles directly - they\'re already fresh. ' +
|
|
36
|
+
'⚠️ FIRST: Call logicstamp_watch_status! If watch mode is ACTIVE → SKIP this tool, go to list_bundles → read_bundle (context is fresh). ' +
|
|
36
37
|
'Use when: watch mode INACTIVE, first-time analysis, or after large changes. Default skipIfWatchActive=true (auto-skips regeneration if watch mode active). ' +
|
|
37
38
|
'WHAT IT DOES: Runs `stamp context` to analyze React/TypeScript/Node.js codebases (Next.js, Express.js, NestJS) and generate structured context files (context_main.json + per-folder context.json bundles). These are STRUCTURED DATA, not raw source. SLOW compared to reading existing context. ' +
|
|
38
39
|
'WHAT YOU GET: Summary statistics (component counts, token estimates, folder structure) and a snapshotId. If watch mode is active, also includes watchMode status. ' +
|
|
@@ -87,12 +88,14 @@ export function createServer() {
|
|
|
87
88
|
},
|
|
88
89
|
{
|
|
89
90
|
name: 'logicstamp_list_bundles',
|
|
90
|
-
description: '
|
|
91
|
+
description: '⚠️ CRITICAL: Do NOT use sleep() delays before calling this tool. When watch mode is active, bundles are already fresh - call this tool directly without any waiting. ' +
|
|
92
|
+
'Lists all ROOT bundles from context_main.json. Returns bundle catalog (component names, file paths, bundle paths, token estimates). ' +
|
|
91
93
|
'IMPORTANT: LogicStamp organizes components into ROOT components (have their own bundles, listed here) and DEPENDENCIES (included in importing root\'s bundle.graph.nodes[], not listed here). ' +
|
|
92
94
|
'If a component isn\'t in this list, it\'s a dependency - find which root imports it, then read that root\'s bundle to see the dependency contract in bundle.graph.nodes[]. ' +
|
|
93
95
|
'Use bundle paths in read_bundle to get component contracts. ' +
|
|
94
96
|
'Watch mode: Use projectPath directly (no snapshotId needed). Filter: folderPrefix="src/components" to filter by directory. ' +
|
|
95
|
-
'Next: read_bundle(snapshotId|projectPath, bundlePath).'
|
|
97
|
+
'Next: read_bundle(snapshotId|projectPath, bundlePath). ' +
|
|
98
|
+
'The tool handles race conditions internally - no external sleep() delays needed.',
|
|
96
99
|
inputSchema: {
|
|
97
100
|
type: 'object',
|
|
98
101
|
properties: {
|
|
@@ -113,13 +116,15 @@ export function createServer() {
|
|
|
113
116
|
},
|
|
114
117
|
{
|
|
115
118
|
name: 'logicstamp_read_bundle',
|
|
116
|
-
description: '
|
|
119
|
+
description: '⚠️ CRITICAL: Do NOT use sleep() delays before calling this tool. When watch mode is active, bundles are already fresh - call this tool directly without any waiting. ' +
|
|
120
|
+
'Reads bundle/index file to get component contracts and dependency graphs. Reads context_main.json (project overview) or folder context.json (component contracts). ' +
|
|
117
121
|
'These are pre-parsed summaries optimized for AI - PREFER over raw .ts/.tsx files. ' +
|
|
118
122
|
'ROOT vs DEPENDENCY: Root components have their own bundles (use rootComponent param). Dependencies appear in bundle.graph.nodes[] of the root that imports them. ' +
|
|
119
123
|
'If a component isn\'t found as root, it\'s a dependency - read bundles that might import it and check bundle.graph.nodes[] for the dependency contract. ' +
|
|
120
124
|
'Bundle contains: entryId, graph.nodes[] (UIFContract for root + dependencies), graph.edges[] (dependencies), meta.missing[] (unresolved). ' +
|
|
121
125
|
'UIFContract: kind, description, props, emits, state, exports, semanticHash, optional style metadata. ' +
|
|
122
|
-
'Watch mode: Use projectPath directly (no snapshotId needed). Use bundlePath="context_main.json" for overview, or folder paths from list_bundles for details.'
|
|
126
|
+
'Watch mode: Use projectPath directly (no snapshotId needed). Use bundlePath="context_main.json" for overview, or folder paths from list_bundles for details. ' +
|
|
127
|
+
'The tool handles race conditions internally with retry logic (200-500ms delays + exponential backoff built-in). No external sleep() delays needed.',
|
|
123
128
|
inputSchema: {
|
|
124
129
|
type: 'object',
|
|
125
130
|
properties: {
|
|
@@ -235,14 +240,16 @@ export function createServer() {
|
|
|
235
240
|
},
|
|
236
241
|
{
|
|
237
242
|
name: 'logicstamp_watch_status',
|
|
238
|
-
description: '⚠️
|
|
243
|
+
description: '⚠️ CRITICAL: Do NOT use sleep() delays before calling LogicStamp tools when watch mode is active. Watch mode keeps bundles fresh automatically - just read them directly. ' +
|
|
244
|
+
'⚠️ CALL THIS FIRST before any other LogicStamp tool! Checks if watch mode (`stamp context --watch`) is active. ' +
|
|
239
245
|
'If ACTIVE: SKIP refresh_snapshot, go to list_bundles → read_bundle (context fresh via incremental rebuilds). ' +
|
|
240
246
|
'If INACTIVE: Call refresh_snapshot first. Enables zero-cost instant context access when watch mode running. ' +
|
|
241
247
|
'Reads .logicstamp/context_watch-status.json and verifies process is running. ' +
|
|
242
248
|
'Watch features: Incremental rebuilds (affected bundles only), change detection (props/hooks/state/components), debouncing (500ms), optional log file. ' +
|
|
243
249
|
'Strict watch mode (`stamp context --watch --strict-watch`): Also detects breaking changes. Returns strictWatch=true when enabled. ' +
|
|
244
250
|
'Detection: Reads strictWatch field from .logicstamp/context_watch-status.json file (when LogicStamp CLI includes it). ' +
|
|
245
|
-
'Set includeRecentLogs=true to see recent regeneration events.'
|
|
251
|
+
'Set includeRecentLogs=true to see recent regeneration events. ' +
|
|
252
|
+
'When watch mode is active, bundles are already fresh - read them directly without any sleep() delays. The tools handle race conditions internally.',
|
|
246
253
|
inputSchema: {
|
|
247
254
|
type: 'object',
|
|
248
255
|
properties: {
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,6BAA6B;oBACnC,WAAW,EACT,yIAAyI;wBACzI,6JAA6J;wBAC7J,oSAAoS;wBACpS,oKAAoK;wBACpK,sGAAsG;wBACtG,6KAA6K;wBAC7K,oPAAoP;wBACpP,sKAAsK;wBACtK,wJAAwJ;wBACxJ,qFAAqF;oBACvF,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,OAAO,EAAE;gCACP,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC;gCAC3C,WAAW,EAAE,4HAA4H;gCACzI,OAAO,EAAE,UAAU;6BACpB;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gCAChC,WAAW,EAAE,mKAAmK;gCAChL,OAAO,EAAE,QAAQ;6BAClB;4BACD,YAAY,EAAE;gCACZ,IAAI,EAAE,SAAS;gCACf,WAAW,EAAE,gPAAgP;gCAC7P,OAAO,EAAE,KAAK;6BACf;4BACD,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,iOAAiO;gCAC9O,OAAO,EAAE,CAAC;6BACX;4BACD,WAAW,EAAE;gCACX,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,iNAAiN;6BAC/N;4BACD,UAAU,EAAE;gCACV,IAAI,EAAE,SAAS;gCACf,WAAW,EAAE,2LAA2L;gCACxM,OAAO,EAAE,KAAK;6BACf;4BACD,iBAAiB,EAAE;gCACjB,IAAI,EAAE,SAAS;gCACf,WAAW,EAAE,8PAA8P;gCAC3Q,OAAO,EAAE,IAAI;6BACd;yBACF;wBACD,QAAQ,EAAE,CAAC,aAAa,CAAC;qBAC1B;iBACF;gBACD;oBACE,IAAI,EAAE,yBAAyB;oBAC/B,WAAW,EACT,sIAAsI;wBACtI,gMAAgM;wBAChM,6KAA6K;wBAC7K,8DAA8D;wBAC9D,6HAA6H;wBAC7H,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-bundles.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-bundles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"list-bundles.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-bundles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,wBAAwB,CAAC;AA8GhC,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuIrF"}
|
|
@@ -22,11 +22,12 @@ async function exists(path) {
|
|
|
22
22
|
/**
|
|
23
23
|
* Check if watch mode is active for the project.
|
|
24
24
|
* Cleans up stale status files when the process is no longer running.
|
|
25
|
+
* Returns watch mode status including strictWatch flag.
|
|
25
26
|
*/
|
|
26
27
|
async function checkWatchMode(projectPath) {
|
|
27
28
|
const statusPath = join(projectPath, '.logicstamp', 'context_watch-status.json');
|
|
28
29
|
if (!(await exists(statusPath))) {
|
|
29
|
-
return false;
|
|
30
|
+
return { active: false };
|
|
30
31
|
}
|
|
31
32
|
try {
|
|
32
33
|
const content = await readFile(statusPath, 'utf-8');
|
|
@@ -40,19 +41,66 @@ async function checkWatchMode(projectPath) {
|
|
|
40
41
|
catch {
|
|
41
42
|
// Ignore cleanup errors
|
|
42
43
|
}
|
|
43
|
-
return false;
|
|
44
|
+
return { active: false };
|
|
44
45
|
}
|
|
45
|
-
return
|
|
46
|
+
return {
|
|
47
|
+
active: status.active === true,
|
|
48
|
+
strictWatch: status.strictWatch === true,
|
|
49
|
+
};
|
|
46
50
|
}
|
|
47
51
|
catch {
|
|
48
|
-
return false;
|
|
52
|
+
return { active: false };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sleep utility for delays
|
|
57
|
+
*/
|
|
58
|
+
function sleep(ms) {
|
|
59
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Read file with retry logic for watch mode.
|
|
63
|
+
* When watch mode is active, files may be in the process of being written,
|
|
64
|
+
* so we retry with exponential backoff if JSON parsing fails.
|
|
65
|
+
*/
|
|
66
|
+
async function readFileWithRetry(filePath, watchMode, maxRetries = 3) {
|
|
67
|
+
// If watch mode is active, add a small initial delay to let files stabilize
|
|
68
|
+
// Strict watch mode does breaking change detection which may take longer
|
|
69
|
+
// The retry logic below handles edge cases, so shorter delays are sufficient
|
|
70
|
+
if (watchMode.active) {
|
|
71
|
+
const delay = watchMode.strictWatch ? 500 : 200; // 500ms for strict watch, 200ms for regular watch
|
|
72
|
+
await sleep(delay);
|
|
73
|
+
}
|
|
74
|
+
let lastError = null;
|
|
75
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
76
|
+
try {
|
|
77
|
+
const content = await readFile(filePath, 'utf-8');
|
|
78
|
+
// Try to parse as JSON to validate it's complete
|
|
79
|
+
// This catches cases where the file is partially written
|
|
80
|
+
JSON.parse(content);
|
|
81
|
+
return content;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
85
|
+
// If watch mode is active and this might be a race condition, retry
|
|
86
|
+
if (watchMode.active && attempt < maxRetries) {
|
|
87
|
+
// Exponential backoff: 100ms, 200ms, 400ms
|
|
88
|
+
const backoffDelay = 100 * Math.pow(2, attempt);
|
|
89
|
+
await sleep(backoffDelay);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// If not watch mode or out of retries, throw immediately
|
|
93
|
+
throw lastError;
|
|
94
|
+
}
|
|
49
95
|
}
|
|
96
|
+
throw lastError || new Error('Failed to read file after retries');
|
|
50
97
|
}
|
|
51
98
|
export async function listBundles(input) {
|
|
52
99
|
let contextDir;
|
|
53
100
|
let snapshotId;
|
|
54
101
|
let projectPath;
|
|
55
102
|
let isWatchMode = false;
|
|
103
|
+
let watchStatus = { active: false };
|
|
56
104
|
// Determine context directory: either from snapshot or direct disk access
|
|
57
105
|
if (input.snapshotId) {
|
|
58
106
|
// Use snapshot-based access
|
|
@@ -66,11 +114,14 @@ export async function listBundles(input) {
|
|
|
66
114
|
contextDir = snapshot.contextDir;
|
|
67
115
|
snapshotId = input.snapshotId;
|
|
68
116
|
projectPath = snapshot.projectPath;
|
|
117
|
+
// Check watch mode even for snapshots (in case watch mode started after snapshot)
|
|
118
|
+
watchStatus = await checkWatchMode(projectPath);
|
|
119
|
+
isWatchMode = watchStatus.active;
|
|
69
120
|
}
|
|
70
121
|
else if (input.projectPath) {
|
|
71
122
|
// Direct disk access - check if watch mode is active or context files exist
|
|
72
123
|
projectPath = resolve(input.projectPath);
|
|
73
|
-
|
|
124
|
+
watchStatus = await checkWatchMode(projectPath);
|
|
74
125
|
const contextMainPath = join(projectPath, 'context_main.json');
|
|
75
126
|
const contextExists = await exists(contextMainPath);
|
|
76
127
|
if (!contextExists) {
|
|
@@ -79,12 +130,12 @@ export async function listBundles(input) {
|
|
|
79
130
|
`Either: (1) Start watch mode with 'stamp context --watch', or ` +
|
|
80
131
|
`(2) Call logicstamp_refresh_snapshot to generate context files first.`);
|
|
81
132
|
}
|
|
82
|
-
if (!
|
|
133
|
+
if (!watchStatus.active) {
|
|
83
134
|
// Context exists but watch mode is not active - warn but allow
|
|
84
135
|
// The context might be stale, but we'll allow access
|
|
85
136
|
}
|
|
86
137
|
contextDir = projectPath;
|
|
87
|
-
isWatchMode =
|
|
138
|
+
isWatchMode = watchStatus.active;
|
|
88
139
|
}
|
|
89
140
|
else {
|
|
90
141
|
throw new Error('Either snapshotId or projectPath is required. ' +
|
|
@@ -94,7 +145,8 @@ export async function listBundles(input) {
|
|
|
94
145
|
try {
|
|
95
146
|
// Read context_main.json to get folder information
|
|
96
147
|
const contextMainPath = join(contextDir, 'context_main.json');
|
|
97
|
-
|
|
148
|
+
// Use retry logic when watch mode is active to handle race conditions
|
|
149
|
+
const contextMainContent = await readFileWithRetry(contextMainPath, watchStatus);
|
|
98
150
|
const contextMain = JSON.parse(contextMainContent);
|
|
99
151
|
// Filter folders by prefix if specified
|
|
100
152
|
let folders = contextMain.folders;
|
|
@@ -106,7 +158,8 @@ export async function listBundles(input) {
|
|
|
106
158
|
for (const folder of folders) {
|
|
107
159
|
const contextPath = join(contextDir, folder.path, 'context.json');
|
|
108
160
|
try {
|
|
109
|
-
|
|
161
|
+
// Use retry logic when watch mode is active to handle race conditions
|
|
162
|
+
const contextContent = await readFileWithRetry(contextPath, watchStatus);
|
|
110
163
|
const bundleArray = JSON.parse(contextContent);
|
|
111
164
|
// Process each bundle in the folder
|
|
112
165
|
for (const bundle of bundleArray) {
|
|
@@ -141,6 +194,8 @@ export async function listBundles(input) {
|
|
|
141
194
|
}
|
|
142
195
|
if (isWatchMode) {
|
|
143
196
|
output.watchMode = true;
|
|
197
|
+
// Add warning to help AI assistants avoid unnecessary sleep() calls
|
|
198
|
+
output.warning = 'Watch mode is active - bundles are already fresh. Do not use sleep() delays before reading bundles.';
|
|
144
199
|
}
|
|
145
200
|
return output;
|
|
146
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-bundles.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-bundles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"list-bundles.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-bundles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAAC,WAAmB;IAI/C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,2BAA2B,CAAC,CAAC;IAEjF,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,sCAAsC;QACtC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,sBAAsB;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,IAAI;YAC9B,WAAW,EAAE,MAAM,CAAC,WAAW,KAAK,IAAI;SACzC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAgB,EAChB,SAAqD,EACrD,UAAU,GAAG,CAAC;IAEd,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,kDAAkD;QACnG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,SAAS,GAAiB,IAAI,CAAC;IAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAElD,iDAAiD;YACjD,yDAAyD;YACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAEtE,oEAAoE;YACpE,IAAI,SAAS,CAAC,MAAM,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBAC7C,2CAA2C;gBAC3C,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,yDAAyD;YACzD,MAAM,SAAS,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,IAAI,UAAkB,CAAC;IACvB,IAAI,UAA8B,CAAC;IACnC,IAAI,WAAmB,CAAC;IACxB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,WAAW,GAA+C,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhF,0EAA0E;IAC1E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,CAAC,UAAU,IAAI;gBAC3C,sFAAsF;gBACtF,oGAAoG;gBACpG,kGAAkG,CACnG,CAAC;QACJ,CAAC;QAED,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACjC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAC9B,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QACnC,kFAAkF;QAClF,WAAW,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAChD,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,4EAA4E;QAC5E,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzC,WAAW,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,kCAAkC,WAAW,IAAI;gBACjD,iDAAiD;gBACjD,gEAAgE;gBAChE,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,+DAA+D;YAC/D,qDAAqD;QACvD,CAAC;QAED,UAAU,GAAG,WAAW,CAAC;QACzB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,gDAAgD;YAChD,mFAAmF;YACnF,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,mDAAmD;QACnD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC9D,sEAAsE;QACtE,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAEnD,wCAAwC;QACxC,IAAI,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QAClC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAClC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAa,CAAC,CACvC,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAElE,IAAI,CAAC;gBACH,sEAAsE;gBACtE,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACzE,MAAM,WAAW,GAAuB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAEnE,oCAAoC;gBACpC,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBAExB,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAE7D,OAAO,CAAC,IAAI,CAAC;wBACX,EAAE,EAAE,UAAU,aAAa,EAAE;wBAC7B,aAAa,EAAE,aAAa;wBAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY;wBACxC,MAAM,EAAE,MAAM,CAAC,IAAI;wBACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;wBACjE,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,YAAY,EAAE,oBAAoB,CAAC,MAAM,CAAC;qBAC3C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,8CAA8C;gBAC9C,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAsB;YAChC,WAAW;YACX,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,OAAO;SACR,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,oEAAoE;YACnE,MAAc,CAAC,OAAO,GAAG,qGAAqG,CAAC;QAClI,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,0BAA0B;YAC1B,UAAU,YAAY,IAAI;YAC1B,2CAA2C,UAAU,IAAI;YACzD,yFAAyF;YACzF,iEAAiE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAwB;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,0CAA0C;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-bundle.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-bundle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAGjB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"read-bundle.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-bundle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAGjB,MAAM,wBAAwB,CAAC;AA0HhC,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+KlF"}
|
|
@@ -22,11 +22,12 @@ async function exists(path) {
|
|
|
22
22
|
/**
|
|
23
23
|
* Check if watch mode is active for the project.
|
|
24
24
|
* Cleans up stale status files when the process is no longer running.
|
|
25
|
+
* Returns watch mode status including strictWatch flag.
|
|
25
26
|
*/
|
|
26
27
|
async function checkWatchMode(projectPath) {
|
|
27
28
|
const statusPath = join(projectPath, '.logicstamp', 'context_watch-status.json');
|
|
28
29
|
if (!(await exists(statusPath))) {
|
|
29
|
-
return false;
|
|
30
|
+
return { active: false };
|
|
30
31
|
}
|
|
31
32
|
try {
|
|
32
33
|
const content = await readFile(statusPath, 'utf-8');
|
|
@@ -40,19 +41,77 @@ async function checkWatchMode(projectPath) {
|
|
|
40
41
|
catch {
|
|
41
42
|
// Ignore cleanup errors
|
|
42
43
|
}
|
|
43
|
-
return false;
|
|
44
|
+
return { active: false };
|
|
44
45
|
}
|
|
45
|
-
return
|
|
46
|
+
return {
|
|
47
|
+
active: status.active === true,
|
|
48
|
+
strictWatch: status.strictWatch === true,
|
|
49
|
+
};
|
|
46
50
|
}
|
|
47
51
|
catch {
|
|
48
|
-
return false;
|
|
52
|
+
return { active: false };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sleep utility for delays
|
|
57
|
+
*/
|
|
58
|
+
function sleep(ms) {
|
|
59
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Read file with retry logic for watch mode.
|
|
63
|
+
* When watch mode is active, files may be in the process of being written,
|
|
64
|
+
* so we retry with exponential backoff if JSON parsing fails.
|
|
65
|
+
*
|
|
66
|
+
* Note: This function validates JSON parsing to catch partial writes, but
|
|
67
|
+
* does NOT validate TypeScript files - that's handled by the caller.
|
|
68
|
+
*/
|
|
69
|
+
async function readFileWithRetry(filePath, watchMode, maxRetries = 3) {
|
|
70
|
+
// If watch mode is active, add a small initial delay to let files stabilize
|
|
71
|
+
// Strict watch mode does breaking change detection which may take longer
|
|
72
|
+
// The retry logic below handles edge cases, so shorter delays are sufficient
|
|
73
|
+
if (watchMode.active) {
|
|
74
|
+
const delay = watchMode.strictWatch ? 500 : 200; // 500ms for strict watch, 200ms for regular watch
|
|
75
|
+
await sleep(delay);
|
|
76
|
+
}
|
|
77
|
+
let lastError = null;
|
|
78
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
79
|
+
try {
|
|
80
|
+
const content = await readFile(filePath, 'utf-8');
|
|
81
|
+
// Check if this looks like a TypeScript file (not JSON)
|
|
82
|
+
// If so, return it immediately - let the caller handle the validation error
|
|
83
|
+
const trimmedContent = content.trim();
|
|
84
|
+
if (trimmedContent.startsWith('import ') || trimmedContent.startsWith('export ')) {
|
|
85
|
+
// This is likely a TypeScript file, not a partial JSON write
|
|
86
|
+
// Return it so the caller can throw the appropriate error
|
|
87
|
+
return content;
|
|
88
|
+
}
|
|
89
|
+
// Try to parse as JSON to validate it's complete
|
|
90
|
+
// This catches cases where the file is partially written
|
|
91
|
+
JSON.parse(content);
|
|
92
|
+
return content;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
96
|
+
// If watch mode is active and this might be a race condition, retry
|
|
97
|
+
if (watchMode.active && attempt < maxRetries) {
|
|
98
|
+
// Exponential backoff: 100ms, 200ms, 400ms
|
|
99
|
+
const backoffDelay = 100 * Math.pow(2, attempt);
|
|
100
|
+
await sleep(backoffDelay);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
// If not watch mode or out of retries, throw immediately
|
|
104
|
+
throw lastError;
|
|
105
|
+
}
|
|
49
106
|
}
|
|
107
|
+
throw lastError || new Error('Failed to read file after retries');
|
|
50
108
|
}
|
|
51
109
|
export async function readBundle(input) {
|
|
52
110
|
let contextDir;
|
|
53
111
|
let snapshotId;
|
|
54
112
|
let projectPath;
|
|
55
113
|
let isWatchMode = false;
|
|
114
|
+
let watchStatus = { active: false };
|
|
56
115
|
// Determine context directory: either from snapshot or direct disk access
|
|
57
116
|
if (input.snapshotId) {
|
|
58
117
|
// Use snapshot-based access
|
|
@@ -66,11 +125,14 @@ export async function readBundle(input) {
|
|
|
66
125
|
contextDir = snapshot.contextDir;
|
|
67
126
|
snapshotId = input.snapshotId;
|
|
68
127
|
projectPath = snapshot.projectPath;
|
|
128
|
+
// Check watch mode even for snapshots (in case watch mode started after snapshot)
|
|
129
|
+
watchStatus = await checkWatchMode(projectPath);
|
|
130
|
+
isWatchMode = watchStatus.active;
|
|
69
131
|
}
|
|
70
132
|
else if (input.projectPath) {
|
|
71
133
|
// Direct disk access - check if watch mode is active or context files exist
|
|
72
134
|
projectPath = resolve(input.projectPath);
|
|
73
|
-
|
|
135
|
+
watchStatus = await checkWatchMode(projectPath);
|
|
74
136
|
const contextMainPath = join(projectPath, 'context_main.json');
|
|
75
137
|
const contextExists = await exists(contextMainPath);
|
|
76
138
|
if (!contextExists) {
|
|
@@ -80,7 +142,7 @@ export async function readBundle(input) {
|
|
|
80
142
|
`(2) Call logicstamp_refresh_snapshot to generate context files first.`);
|
|
81
143
|
}
|
|
82
144
|
contextDir = projectPath;
|
|
83
|
-
isWatchMode =
|
|
145
|
+
isWatchMode = watchStatus.active;
|
|
84
146
|
}
|
|
85
147
|
else {
|
|
86
148
|
throw new Error('Either snapshotId or projectPath is required. ' +
|
|
@@ -90,7 +152,8 @@ export async function readBundle(input) {
|
|
|
90
152
|
try {
|
|
91
153
|
// Read the context.json file from the specified bundle path
|
|
92
154
|
const contextPath = join(contextDir, input.bundlePath);
|
|
93
|
-
|
|
155
|
+
// Use retry logic when watch mode is active to handle race conditions
|
|
156
|
+
const contextContent = await readFileWithRetry(contextPath, watchStatus);
|
|
94
157
|
// Validate that we're reading JSON, not a TypeScript file
|
|
95
158
|
const trimmedContent = contextContent.trim();
|
|
96
159
|
if (trimmedContent.startsWith('import ') || trimmedContent.startsWith('export ')) {
|
|
@@ -170,6 +233,8 @@ export async function readBundle(input) {
|
|
|
170
233
|
}
|
|
171
234
|
if (isWatchMode) {
|
|
172
235
|
output.watchMode = true;
|
|
236
|
+
// Add warning to help AI assistants avoid unnecessary sleep() calls
|
|
237
|
+
output.warning = 'Watch mode is active - bundles are already fresh. Do not use sleep() delays before reading bundles.';
|
|
173
238
|
}
|
|
174
239
|
return output;
|
|
175
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-bundle.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-bundle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"read-bundle.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,5 +42,7 @@ export interface ReadLogicStampDocsOutput {
|
|
|
42
42
|
keyConcepts: string[];
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
+
declare function readDocFile(docPath: string): Promise<string>;
|
|
46
|
+
export { readDocFile };
|
|
45
47
|
export declare function readLogicStampDocs(): Promise<ReadLogicStampDocsOutput>;
|
|
46
48
|
//# sourceMappingURL=read-logicstamp-docs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-logicstamp-docs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-logicstamp-docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,aAAa,EAAE;QAIb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE;YACZ,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,OAAO,EAAE;YACP,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE;YACZ,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"read-logicstamp-docs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-logicstamp-docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,aAAa,EAAE;QAIb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE;YACZ,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,OAAO,EAAE;YACP,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE;YACZ,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;AAmCD,iBAAe,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3D;AAID,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAgF5E"}
|
|
@@ -80,6 +80,9 @@ async function readDocFile(docPath) {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
// Exported for testing purposes to allow coverage of defensive validation logic.
|
|
84
|
+
// Not intended as part of the public API.
|
|
85
|
+
export { readDocFile };
|
|
83
86
|
export async function readLogicStampDocs() {
|
|
84
87
|
try {
|
|
85
88
|
// Read only the LLM-focused doc bundle (embedded in MCP package)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-logicstamp-docs.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-logicstamp-docs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read-logicstamp-docs.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-logicstamp-docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AA8CtC;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5B,kCAAkC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YACzE,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC1C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM,CAAC,0BAA0B;QACzD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8CAA8C;QAC9C,6GAA6G;QAC7G,yHAAyH,CAC1H,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAe;IACxC,6CAA6C;IAC7C,IAAI,OAAO,KAAK,6BAA6B,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,IAAI;YACpD,oDAAoD;YACpD,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,wEAAwE;IACxE,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACxD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,8DAA8D;QAC9D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9B,OAAO,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,uDAAuD;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,6DAA6D;gBAC7D,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,MAAM;oBACnD,2DAA2D;oBAC3D,oCAAoC,UAAU,CAAC,CAAC,CAAC,IAAI;oBACrD,qCAAqC,UAAU,CAAC,CAAC,CAAC,IAAI,eAAe,IAAI;oBACzE,sCAAsC,UAAU,CAAC,CAAC,CAAC,IAAI,eAAe,MAAM;oBAC5E,+BAA+B,SAAS,mBAAmB,OAAO,CAAC,GAAG,EAAE,MAAM;oBAC9E,mGAAmG;oBACnG,sEAAsE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,0CAA0C;AAC1C,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,iEAAiE;QACjE,wGAAwG;QACxG,iFAAiF;QACjF,MAAM,OAAO,GAAG,6BAA6B,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACJ,OAAO;aACR;YACD,aAAa,EAAE;gBACb,mDAAmD;gBACnD,iGAAiG;gBACjG,kFAAkF;gBAClF,WAAW,EAAE,wDAAwD;gBACrE,OAAO,EAAE,kDAAkD;gBAC3D,KAAK,EAAE;oBACL,OAAO,EAAE,sDAAsD;oBAC/D,QAAQ,EAAE,0EAA0E;iBACrF;gBACD,YAAY,EAAE;oBACZ,OAAO,EAAE,8DAA8D;oBACvE,QAAQ,EAAE,kFAAkF;iBAC7F;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,uDAAuD;oBAChE,QAAQ,EAAE,2EAA2E;iBACtF;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,wDAAwD;oBACjE,QAAQ,EAAE,gFAAgF;iBAC3F;gBACD,YAAY,EAAE;oBACZ,OAAO,EAAE,8DAA8D;oBACvE,QAAQ,EAAE,sFAAsF;iBACjG;gBACD,WAAW,EAAE;oBACX,OAAO,EAAE,kEAAkE;oBAC3E,QAAQ,EAAE,gFAAgF;iBAC3F;aACF;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,sMAAsM;gBAC/M,QAAQ,EAAE;oBACR,oFAAoF;oBACpF,mFAAmF;oBACnF,iGAAiG;oBACjG,yGAAyG;oBACzG,2FAA2F;oBAC3F,4EAA4E;iBAC7E;gBACD,WAAW,EAAE;oBACX,iHAAiH;oBACjH,oHAAoH;oBACpH,4EAA4E;oBAC5E,4EAA4E;oBAC5E,iGAAiG;oBACjG,gHAAgH;oBAChH,8GAA8G;oBAC9G,oGAAoG;oBACpG,gFAAgF;oBAChF,4PAA4P;iBAC7P;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,2CAA2C;YAC3C,+EAA+E;YAC/E,UAAU,YAAY,IAAI;YAC1B,0DAA0D;YAC1D,uEAAuE;YACvE,oGAAoG,CACrG,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -97,8 +97,8 @@ export async function watchStatus(input) {
|
|
|
97
97
|
watchModeActive,
|
|
98
98
|
message: watchModeActive
|
|
99
99
|
? strictWatch
|
|
100
|
-
?
|
|
101
|
-
:
|
|
100
|
+
? `⚠️ Watch mode is ACTIVE with STRICT WATCH enabled (PID: ${status.pid}, started: ${status.startedAt}). Context bundles are being kept fresh automatically with breaking change detection. You can skip calling refresh_snapshot - just use list_bundles and read_bundle with the existing context files. DO NOT use sleep() delays - bundles are already fresh, just read them directly.`
|
|
101
|
+
: `⚠️ Watch mode is ACTIVE (PID: ${status.pid}, started: ${status.startedAt}). Context bundles are being kept fresh automatically. You can skip calling refresh_snapshot - just use list_bundles and read_bundle with the existing context files. DO NOT use sleep() delays - bundles are already fresh, just read them directly.`
|
|
102
102
|
: 'Watch mode is NOT active. Context files may be stale. Consider running refresh_snapshot or starting watch mode with `stamp context --watch` (or `stamp context --watch --strict-watch` for breaking change detection).',
|
|
103
103
|
};
|
|
104
104
|
if (watchModeActive && status) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-status.js","sourceRoot":"","sources":["../../../src/mcp/tools/watch-status.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"watch-status.js","sourceRoot":"","sources":["../../../src/mcp/tools/watch-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,6 +124,48 @@ refresh_snapshot({ projectPath: "...", skipIfWatchActive: true })
|
|
|
124
124
|
- **Efficient** - Watch mode only rebuilds affected bundles, not entire project
|
|
125
125
|
- **Smart** - MCP detects watch mode automatically and guides you
|
|
126
126
|
|
|
127
|
+
### ⚠️ Important: Do Not Use `sleep()` with Watch Mode
|
|
128
|
+
|
|
129
|
+
**Why `sleep()` is unnecessary:**
|
|
130
|
+
|
|
131
|
+
Watch mode automatically regenerates bundles in the background when files change. The MCP tools handle this correctly without any waiting:
|
|
132
|
+
|
|
133
|
+
1. **Watch mode updates bundles automatically** - When a file changes, LogicStamp regenerates the bundle in the background. No waiting needed.
|
|
134
|
+
2. **Bundles are already fresh** - If watch mode is active, bundles are already up-to-date when you read them. Just read directly.
|
|
135
|
+
3. **Internal retry logic** - The MCP tools (`list_bundles`, `read_bundle`) have built-in retry logic with exponential backoff to handle race conditions during file writes. This is handled internally - you don't need to wait.
|
|
136
|
+
4. **Check timestamps if needed** - If you need to verify when a bundle was updated, check the `createdAt` timestamp in the bundle metadata. Don't use `sleep()`.
|
|
137
|
+
|
|
138
|
+
**❌ Avoid this pattern:**
|
|
139
|
+
```typescript
|
|
140
|
+
// Incorrect: Using sleep to wait for watch mode regeneration
|
|
141
|
+
sleep(3000) // Unnecessary delay
|
|
142
|
+
read_bundle({ projectPath: "...", bundlePath: "..." })
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**✅ Correct approach:**
|
|
146
|
+
```typescript
|
|
147
|
+
// CORRECT: Just read directly - bundles are already fresh if watch mode is active
|
|
148
|
+
read_bundle({ projectPath: "...", bundlePath: "..." })
|
|
149
|
+
|
|
150
|
+
// If you need to verify updates, check timestamps in the bundle response
|
|
151
|
+
// The bundle includes metadata about when it was created/updated
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**How it works:**
|
|
155
|
+
- When watch mode is active, LogicStamp monitors file changes and regenerates bundles automatically
|
|
156
|
+
- The MCP tools detect watch mode and read bundles directly (no snapshot needed)
|
|
157
|
+
- Internal retry logic handles any race conditions during file writes (200-500ms delays built-in)
|
|
158
|
+
- Bundles are immediately available - no external waiting required
|
|
159
|
+
|
|
160
|
+
**Architecture explanation:**
|
|
161
|
+
- Watch mode runs `stamp context --watch` in the background, monitoring file system changes
|
|
162
|
+
- When files change, LogicStamp incrementally rebuilds only affected bundles
|
|
163
|
+
- The rebuild happens asynchronously - bundles are written to disk when ready
|
|
164
|
+
- MCP tools use `readFileWithRetry()` which includes small delays (200-500ms) and exponential backoff for edge cases
|
|
165
|
+
- This retry logic is internal to the MCP server - AI assistants should not add external `sleep()` calls
|
|
166
|
+
|
|
167
|
+
**Key takeaway:** Watch mode keeps bundles fresh automatically. When watch mode is active, skip `refresh_snapshot` and read bundles directly - they're already fresh. Do not use `sleep()` to wait for regeneration.
|
|
168
|
+
|
|
127
169
|
## The LogicStamp Workflow
|
|
128
170
|
|
|
129
171
|
**Always follow this workflow when working with a new project:**
|