mcp-ai-agent-guidelines 0.16.0 → 0.17.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 (54) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +13 -2
  3. package/dist/index.d.ts +18 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +119 -5
  6. package/dist/index.js.map +1 -1
  7. package/dist/memory/toon-interface.d.ts +19 -0
  8. package/dist/memory/toon-interface.d.ts.map +1 -1
  9. package/dist/memory/toon-interface.js +51 -20
  10. package/dist/memory/toon-interface.js.map +1 -1
  11. package/dist/runtime/session-bootstrap.d.ts.map +1 -1
  12. package/dist/runtime/session-bootstrap.js +1 -6
  13. package/dist/runtime/session-bootstrap.js.map +1 -1
  14. package/dist/runtime/session-store-utils.d.ts +17 -3
  15. package/dist/runtime/session-store-utils.d.ts.map +1 -1
  16. package/dist/runtime/session-store-utils.js +36 -9
  17. package/dist/runtime/session-store-utils.js.map +1 -1
  18. package/dist/tests/cli/local-tool-sanity.test.d.ts +2 -0
  19. package/dist/tests/cli/local-tool-sanity.test.d.ts.map +1 -0
  20. package/dist/tests/cli/local-tool-sanity.test.js +40 -0
  21. package/dist/tests/cli/local-tool-sanity.test.js.map +1 -0
  22. package/dist/tests/index.test.js +84 -1
  23. package/dist/tests/index.test.js.map +1 -1
  24. package/dist/tests/memory/toon-interface.test.js +177 -4
  25. package/dist/tests/memory/toon-interface.test.js.map +1 -1
  26. package/dist/tests/readme-installation.test.js +6 -0
  27. package/dist/tests/readme-installation.test.js.map +1 -1
  28. package/dist/tests/runtime/index-main.test.d.ts +2 -0
  29. package/dist/tests/runtime/index-main.test.d.ts.map +1 -0
  30. package/dist/tests/runtime/index-main.test.js +363 -0
  31. package/dist/tests/runtime/index-main.test.js.map +1 -0
  32. package/dist/tests/runtime/mcp-server-stdio.test.d.ts +2 -0
  33. package/dist/tests/runtime/mcp-server-stdio.test.d.ts.map +1 -0
  34. package/dist/tests/runtime/mcp-server-stdio.test.js +320 -0
  35. package/dist/tests/runtime/mcp-server-stdio.test.js.map +1 -0
  36. package/dist/tests/runtime/mcp-server.test.js +99 -2
  37. package/dist/tests/runtime/mcp-server.test.js.map +1 -1
  38. package/dist/tests/runtime/session-store-utils.test.js +75 -0
  39. package/dist/tests/runtime/session-store-utils.test.js.map +1 -1
  40. package/dist/tests/runtime/toon-architecture-contracts.test.js +5 -3
  41. package/dist/tests/runtime/toon-architecture-contracts.test.js.map +1 -1
  42. package/dist/tests/runtime/workspace-root.test.d.ts +2 -0
  43. package/dist/tests/runtime/workspace-root.test.d.ts.map +1 -0
  44. package/dist/tests/runtime/workspace-root.test.js +128 -0
  45. package/dist/tests/runtime/workspace-root.test.js.map +1 -0
  46. package/dist/tests/tools/session-tools.test.js +3 -3
  47. package/dist/tests/tools/session-tools.test.js.map +1 -1
  48. package/dist/tools/memory-tools.d.ts.map +1 -1
  49. package/dist/tools/memory-tools.js +3 -11
  50. package/dist/tools/memory-tools.js.map +1 -1
  51. package/dist/tools/session-tools.d.ts.map +1 -1
  52. package/dist/tools/session-tools.js +3 -11
  53. package/dist/tools/session-tools.js.map +1 -1
  54. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -8,6 +8,22 @@ and [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.17.0] - 2026-05-05
12
+ ### Added
13
+ - implement workspace root anchoring for state storage and enhance ToonMemoryInterface
14
+ - **mcp**: implement startup onboarding memory handling and enhance tool result summarization
15
+ - **mcp**: allow workspace writes when uninitialized
16
+
17
+ ### Documentation
18
+ - **mcp**: document local write behavior for .mcp-ai-agent-guidelines
19
+
20
+ ### Fixed
21
+ - **pr**: address PR #1467 review feedback
22
+ - **mcp**: make all state artifact writes atomic
23
+ - **mcp**: use atomic writes for memory artifacts and snapshots
24
+
25
+ ### Changed
26
+ - **mcp**: improve workspace directory handling and cleanup in tests
11
27
  ## [0.16.0] - 2026-04-28
12
28
  ### Fixed
13
29
  - update tool references and enhance memory tool tests for better context handling
package/README.md CHANGED
@@ -116,12 +116,19 @@ Add the server to your MCP host config. The entry-point is `dist/index.js` and c
116
116
 
117
117
  ### Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`)
118
118
 
119
+ > [!IMPORTANT]
120
+ > Claude Desktop spawns the server with a different working directory than your project.
121
+ > Set `MCP_WORKSPACE_ROOT` to the absolute path of the project you want the server to write state into.
122
+
119
123
  ```json
120
124
  {
121
125
  "mcpServers": {
122
126
  "ai-agent-guidelines": {
123
127
  "command": "npx",
124
- "args": ["mcp-ai-agent-guidelines"]
128
+ "args": ["-y", "mcp-ai-agent-guidelines@latest"],
129
+ "env": {
130
+ "MCP_WORKSPACE_ROOT": "/absolute/path/to/your/project"
131
+ }
125
132
  }
126
133
  }
127
134
  }
@@ -135,7 +142,10 @@ Add the server to your MCP host config. The entry-point is `dist/index.js` and c
135
142
  "ai-agent-guidelines": {
136
143
  "type": "stdio",
137
144
  "command": "npx",
138
- "args": ["mcp-ai-agent-guidelines"]
145
+ "args": ["-y", "mcp-ai-agent-guidelines@latest"],
146
+ "env": {
147
+ "MCP_WORKSPACE_ROOT": "${workspaceFolder}"
148
+ }
139
149
  }
140
150
  }
141
151
  }
@@ -359,6 +369,7 @@ Published package note: the npm package ships `dist/`, `README.md`, and `LICENSE
359
369
  | `DISABLE_ADAPTIVE_ROUTING` | unset / `"false"` | Set to `true` to hide `routing-adapt` and block `adapt-*` skills; enabled by default (opt-out model) |
360
370
  | `ALLOW_INTENSIVE_SKILLS` | unset / `"false"` | Must be `true` to allow resource-intensive skills such as `bench-eval-suite`, `eval-prompt-bench`, `qm-path-integral-historian`, and `gr-spacetime-debt-metric` |
361
371
  | `ENABLE_PHYSICS_SKILLS` | unset / `"false"` | Required by input validation when physics skills are not otherwise authorized; physics skills also require conventional-evidence schema validation |
372
+ | `MCP_WORKSPACE_ROOT` | unset | Absolute path to the project directory the server should write state into (`.mcp-ai-agent-guidelines/`). Required when using `npx` via Claude Desktop, Cursor, or Windsurf — these clients do not preserve the terminal's working directory. VS Code supports `${workspaceFolder}`. |
362
373
  | `MCP_SLIM_MODE` | unset / `"false"` | Set to `true` to expose only the minimal surface: `task-bootstrap`, `meta-routing`, and `project-onboard` (useful for low-context agents) |
363
374
 
364
375
  ### Skill gates
package/dist/index.d.ts CHANGED
@@ -197,6 +197,24 @@ export declare function createServer(sharedRuntime?: ServerRuntime): {
197
197
  }>;
198
198
  runtime: ServerRuntime;
199
199
  };
200
+ /**
201
+ * Phase C: Anchor state storage to the MCP client's workspace root.
202
+ *
203
+ * When launched via `npx`, `process.cwd()` is typically the user's home
204
+ * directory (~) or the filesystem root. The MCP `roots/list` call returns the
205
+ * actual project directories the client has open, so we redirect all
206
+ * memory/session/snapshot writes there before bootstrap fires.
207
+ *
208
+ * Exported for testability — the function is side-effect-free with respect to
209
+ * the transport and can be exercised with a mocked Server instance.
210
+ *
211
+ * @returns The resolved workspace root path, or `undefined` if no roots were
212
+ * available (client doesn't expose roots capability, empty roots list,
213
+ * or any error during the roots query).
214
+ */
215
+ export declare function anchorStateToClientRoots(server: Server, runtime: WorkflowExecutionRuntime, memoryInterface?: {
216
+ setBaseDir(dir: string): void;
217
+ }): Promise<string | undefined>;
200
218
  export declare function main(): Promise<void>;
201
219
  export declare function isDirectExecutionEntry(entryPath?: string, moduleUrl?: string): boolean;
202
220
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAUnE,OAAO,KAAK,EAEX,iBAAiB,EACjB,wBAAwB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAgBvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AA2C3D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,WAAW,aAAc,SAAQ,wBAAwB;IAC9D;;oDAEgD;IAChD,YAAY,EAAE,iBAAiB,CAAC;IAChC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;CAC/B;AAuCD,wBAAgB,aAAa,IAAI,aAAa,CA2B7C;AAED,wBAAgB,qBAAqB,CAAC,aAAa,gBAAkB;;;;wBAmBzC;QACzB,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;KAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA2D6B;QAAE,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;;;;;;;;;;yBAY9B;QAC1B,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;KAC7D;;;;;;;;;;EAEF;AAED,wBAAgB,YAAY,CAAC,aAAa,gBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED,wBAAsB,IAAI,kBAsGzB;AAED,wBAAgB,sBAAsB,CACrC,SAAS,SAAkB,EAC3B,SAAS,SAAkB,WAW3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAgBnE,OAAO,KAAK,EAEX,iBAAiB,EACjB,wBAAwB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAoBvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AA2C3D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,WAAW,aAAc,SAAQ,wBAAwB;IAC9D;;oDAEgD;IAChD,YAAY,EAAE,iBAAiB,CAAC;IAChC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;CAC/B;AAwGD,wBAAgB,aAAa,IAAI,aAAa,CA2B7C;AAED,wBAAgB,qBAAqB,CAAC,aAAa,gBAAkB;;;;wBAmBzC;QACzB,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;KAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA2D6B;QAAE,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;;;;;;;;;;yBAY9B;QAC1B,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;KAC7D;;;;;;;;;;EAEF;AAED,wBAAgB,YAAY,CAAC,aAAa,gBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,wBAAwB,EACjC,eAAe,GAAE;IAChB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACF,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B;AAED,wBAAsB,IAAI,kBAuIzB;AAED,wBAAgB,sBAAsB,CACrC,SAAS,SAAkB,EAC3B,SAAS,SAAkB,WAW3B"}
package/dist/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { realpathSync } from "node:fs";
3
+ import { join } from "node:path";
3
4
  import { fileURLToPath, pathToFileURL } from "node:url";
4
5
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
5
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
7
  import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
8
+ import { loadOrchestrationConfig, resetConfigCache, resolveOrchestrationConfigPath, } from "./config/orchestration-config.js";
7
9
  import { toErrorMessage } from "./infrastructure/object-utilities.js";
8
10
  import { packageMetadata } from "./infrastructure/package-metadata.js";
9
11
  import { InstructionRegistry } from "./instructions/instruction-registry.js";
@@ -14,6 +16,7 @@ import { buildPublicResources, readPublicResource, } from "./resources/resource-
14
16
  import { createIntegratedRuntime } from "./runtime/integration.js";
15
17
  import { createSessionId, isValidSessionId, SecureFileSessionStore, } from "./runtime/secure-session-store.js";
16
18
  import { SessionBootstrap } from "./runtime/session-bootstrap.js";
19
+ import { DEFAULT_SESSION_STATE_DIR, resolveWorkspaceRoot, } from "./runtime/session-store-utils.js";
17
20
  import { SkillRegistry } from "./skills/skill-registry.js";
18
21
  import { dispatchMemoryToolCall, MEMORY_TOOL_DEFINITIONS, resolveMemoryToolName, } from "./tools/memory-tools.js";
19
22
  import { dispatchModelDiscoveryToolCall, MODEL_DISCOVERY_TOOL_DEFINITIONS, MODEL_DISCOVERY_TOOL_NAME, } from "./tools/model-discovery.js";
@@ -28,6 +31,7 @@ import { buildVisualizationToolSurface, dispatchVisualizationToolCall, } from ".
28
31
  import { buildWorkspaceToolSurface, dispatchWorkspaceToolCall, resolveWorkspaceToolName, } from "./tools/workspace-tools.js";
29
32
  import { createErrorContext, ValidationService } from "./validation/index.js";
30
33
  import { WorkflowEngine } from "./workflows/workflow-engine.js";
34
+ const STARTUP_ONBOARDING_MEMORY_ID = "system-bootstrap-onboarding";
31
35
  function getValidationService() {
32
36
  try {
33
37
  return ValidationService.getInstance();
@@ -54,6 +58,53 @@ function formatAuxToolError(toolName, runtime, error) {
54
58
  ],
55
59
  };
56
60
  }
61
+ function summarizeToolResult(result) {
62
+ return result.content
63
+ .map((item) => ("text" in item ? item.text : ""))
64
+ .filter((text) => text.length > 0)
65
+ .join(" ")
66
+ .trim();
67
+ }
68
+ async function runStartupToolCall(label, operation) {
69
+ try {
70
+ const result = await operation();
71
+ if (!result.isError) {
72
+ return;
73
+ }
74
+ const detail = summarizeToolResult(result);
75
+ process.stderr.write(`[warn] Startup ${label} failed${detail ? `: ${detail}` : ""}\n`);
76
+ }
77
+ catch (error) {
78
+ process.stderr.write(`[warn] Startup ${label} failed: ${toErrorMessage(error)}\n`);
79
+ }
80
+ }
81
+ async function ensureStartupOnboardingMemory(runtime) {
82
+ const existingArtifact = await sharedToonMemoryInterface.loadMemoryArtifact(STARTUP_ONBOARDING_MEMORY_ID);
83
+ if (existingArtifact) {
84
+ return;
85
+ }
86
+ const now = new Date().toISOString();
87
+ await sharedToonMemoryInterface.saveMemoryArtifact({
88
+ meta: {
89
+ id: STARTUP_ONBOARDING_MEMORY_ID,
90
+ created: now,
91
+ updated: now,
92
+ tags: ["bootstrap", "onboarding", "system"],
93
+ relevance: 0.2,
94
+ },
95
+ content: {
96
+ summary: "Workspace bootstrap initialized",
97
+ details: "This onboarding artifact is created automatically on first startup. It records that local TOON state is active before interactive onboarding and that snapshots, sessions, and memory can persist under .mcp-ai-agent-guidelines.",
98
+ context: `Workspace root: ${runtime.workspaceRoot}`,
99
+ actionable: false,
100
+ },
101
+ links: {
102
+ relatedSessions: [],
103
+ relatedMemories: [],
104
+ sources: ["startup-bootstrap"],
105
+ },
106
+ });
107
+ }
57
108
  export function createRuntime() {
58
109
  const instructionRegistry = new InstructionRegistry();
59
110
  const skillRegistry = new SkillRegistry();
@@ -65,7 +116,7 @@ export function createRuntime() {
65
116
  });
66
117
  return {
67
118
  sessionId: createSessionId(),
68
- workspaceRoot: process.cwd(),
119
+ workspaceRoot: resolveWorkspaceRoot(),
69
120
  executionState: {
70
121
  instructionStack: [],
71
122
  progressRecords: [],
@@ -193,6 +244,51 @@ export function createServer(sharedRuntime = createRuntime()) {
193
244
  server.setRequestHandler(GetPromptRequestSchema, handlers.getPrompt);
194
245
  return { server, runtime: sharedRuntime };
195
246
  }
247
+ /**
248
+ * Phase C: Anchor state storage to the MCP client's workspace root.
249
+ *
250
+ * When launched via `npx`, `process.cwd()` is typically the user's home
251
+ * directory (~) or the filesystem root. The MCP `roots/list` call returns the
252
+ * actual project directories the client has open, so we redirect all
253
+ * memory/session/snapshot writes there before bootstrap fires.
254
+ *
255
+ * Exported for testability — the function is side-effect-free with respect to
256
+ * the transport and can be exercised with a mocked Server instance.
257
+ *
258
+ * @returns The resolved workspace root path, or `undefined` if no roots were
259
+ * available (client doesn't expose roots capability, empty roots list,
260
+ * or any error during the roots query).
261
+ */
262
+ export async function anchorStateToClientRoots(server, runtime, memoryInterface = sharedToonMemoryInterface) {
263
+ try {
264
+ const clientCaps = server.getClientCapabilities();
265
+ if (!clientCaps?.roots) {
266
+ return undefined;
267
+ }
268
+ const { roots } = await server.listRoots();
269
+ if (roots.length === 0) {
270
+ return undefined;
271
+ }
272
+ const firstRootUri = roots[0].uri;
273
+ const firstRoot = firstRootUri.startsWith("file://")
274
+ ? fileURLToPath(firstRootUri)
275
+ : firstRootUri;
276
+ const stateDir = join(firstRoot, DEFAULT_SESSION_STATE_DIR);
277
+ memoryInterface.setBaseDir(stateDir);
278
+ runtime.workspaceRoot = firstRoot;
279
+ // Reset the orchestration config cache so it reloads from the correct
280
+ // project path (it may have cached a stale home-dir path during
281
+ // modelRouter.initialize() before roots were known).
282
+ resetConfigCache();
283
+ loadOrchestrationConfig(resolveOrchestrationConfigPath(firstRoot));
284
+ process.stderr.write(`[info] Workspace root resolved from client roots: ${firstRoot}\n`);
285
+ return firstRoot;
286
+ }
287
+ catch (err) {
288
+ process.stderr.write(`[warn] Could not resolve workspace root from client roots: ${toErrorMessage(err)}\n`);
289
+ return undefined;
290
+ }
291
+ }
196
292
  export async function main() {
197
293
  const { server, runtime } = createServer();
198
294
  ValidationService.initialize();
@@ -217,17 +313,35 @@ export async function main() {
217
313
  });
218
314
  const transport = new StdioServerTransport();
219
315
  await server.connect(transport);
316
+ // Phase C: Anchor state storage to the MCP client's workspace root.
317
+ await anchorStateToClientRoots(server, runtime);
220
318
  void (async () => {
221
319
  await Promise.all([
222
- dispatchSnapshotToolCall("agent-snapshot-write", {}).catch(() => { }),
223
- dispatchSessionToolCall("agent-session-fetch", {}, runtime).catch(() => { }),
224
- dispatchSessionToolCall("agent-session-write", {
320
+ runStartupToolCall("snapshot bootstrap", () => dispatchSnapshotToolCall("agent-snapshot-write", {})),
321
+ runStartupToolCall("session listing bootstrap", () => dispatchSessionToolCall("agent-session-fetch", {}, runtime)),
322
+ runStartupToolCall("session scan-results bootstrap", () => dispatchSessionToolCall("agent-session-write", {
225
323
  target: "scan-results",
226
324
  data: {
227
325
  scannedAt: new Date().toISOString(),
228
326
  sessionId: runtime.sessionId,
229
327
  },
230
- }, runtime).catch(() => { }),
328
+ }, runtime)),
329
+ runStartupToolCall("session context bootstrap", () => dispatchSessionToolCall("agent-session-write", {
330
+ target: "session-context",
331
+ data: {
332
+ context: {
333
+ requestScope: "Startup bootstrap",
334
+ constraints: ["Pre-onboarding local state"],
335
+ phase: "bootstrap",
336
+ },
337
+ progress: {
338
+ next: ["Run onboarding or continue with MCP tools"],
339
+ },
340
+ },
341
+ }, runtime)),
342
+ ensureStartupOnboardingMemory(runtime).catch((error) => {
343
+ process.stderr.write(`[warn] Startup onboarding memory bootstrap failed: ${toErrorMessage(error)}\n`);
344
+ }),
231
345
  ]);
232
346
  resolveContextReady();
233
347
  // Emit a codebase-specific orientation message after context is ready so
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,12 @@ export declare class ToonMemoryInterface {
74
74
  private instructionNameSource?;
75
75
  /** Resolves once the workspace-root–aware base directory has been determined. */
76
76
  private baseDirReadyPromise;
77
+ /**
78
+ * Incremented each time the base directory is overridden so that any
79
+ * in-flight async resolution callbacks can detect they are stale and skip
80
+ * the update.
81
+ */
82
+ private baseDirGeneration;
77
83
  /**
78
84
  * Wire live registry data into the scanner so skillIds / instructionNames
79
85
  * are populated even when .github/ skill/instruction source files have been
@@ -81,6 +87,18 @@ export declare class ToonMemoryInterface {
81
87
  * Call this from main() after the runtime is fully initialised.
82
88
  */
83
89
  setRegistrySources(skillIdSource: () => string[], instructionNameSource: () => string[]): void;
90
+ /**
91
+ * Override the base storage directory after construction.
92
+ *
93
+ * Call this once the MCP transport has connected and the client's workspace
94
+ * roots are known (e.g. via `server.listRoots()`). This redirects all
95
+ * state writes — memory, sessions, snapshots — to the correct project
96
+ * directory instead of the `npx` launch directory (typically `~`).
97
+ *
98
+ * The pending async resolution promise is cancelled so it can never
99
+ * overwrite the explicitly-provided directory.
100
+ */
101
+ setBaseDir(newBaseDir: string): void;
84
102
  constructor(customDir?: string, options?: {
85
103
  enableEncryption?: boolean;
86
104
  encryptionKey?: string;
@@ -122,6 +140,7 @@ export declare class ToonMemoryInterface {
122
140
  private ensureSnapshotHistoryInitialized;
123
141
  private persistFingerprintSnapshot;
124
142
  listFingerprintSnapshots(): Promise<FingerprintSnapshotIndexEntry[]>;
143
+ private awaitBaseDirReady;
125
144
  private ensureSessionDir;
126
145
  /** Save an explicit workspace map artifact for the current session. */
127
146
  saveWorkspaceMap(sessionId: string, map: PersistedWorkspaceMap | Record<string, PersistedWorkspaceModuleEntry>): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"toon-interface.d.ts","sourceRoot":"","sources":["../../src/memory/toon-interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toon-interface.d.ts","sourceRoot":"","sources":["../../src/memory/toon-interface.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * TOON (Token-Oriented Object Notation) memory interface for session storage.
3
3
  */
4
4
  import { randomUUID } from "node:crypto";
5
- import { access, mkdir, readdir, readFile, writeFile } from "node:fs/promises";
5
+ import { access, mkdir, readdir, readFile } from "node:fs/promises";
6
6
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
7
7
  import { decode as toonDecode, encode as toonEncode } from "@toon-format/toon";
8
8
  import { assertValidSessionId, isValidSessionId, } from "../runtime/secure-session-store.js";
@@ -25,6 +25,12 @@ export class ToonMemoryInterface {
25
25
  instructionNameSource;
26
26
  /** Resolves once the workspace-root–aware base directory has been determined. */
27
27
  baseDirReadyPromise;
28
+ /**
29
+ * Incremented each time the base directory is overridden so that any
30
+ * in-flight async resolution callbacks can detect they are stale and skip
31
+ * the update.
32
+ */
33
+ baseDirGeneration = 0;
28
34
  /**
29
35
  * Wire live registry data into the scanner so skillIds / instructionNames
30
36
  * are populated even when .github/ skill/instruction source files have been
@@ -35,6 +41,27 @@ export class ToonMemoryInterface {
35
41
  this.skillIdSource = skillIdSource;
36
42
  this.instructionNameSource = instructionNameSource;
37
43
  }
44
+ /**
45
+ * Override the base storage directory after construction.
46
+ *
47
+ * Call this once the MCP transport has connected and the client's workspace
48
+ * roots are known (e.g. via `server.listRoots()`). This redirects all
49
+ * state writes — memory, sessions, snapshots — to the correct project
50
+ * directory instead of the `npx` launch directory (typically `~`).
51
+ *
52
+ * The pending async resolution promise is cancelled so it can never
53
+ * overwrite the explicitly-provided directory.
54
+ */
55
+ setBaseDir(newBaseDir) {
56
+ if (newBaseDir === this.baseDir)
57
+ return;
58
+ this.baseDirGeneration++;
59
+ this.baseDir = newBaseDir;
60
+ this.sessionDir = join(newBaseDir, "sessions");
61
+ this.memoryDir = join(newBaseDir, "memory");
62
+ // Cancel any in-flight async resolution — the explicit root wins.
63
+ this.baseDirReadyPromise = undefined;
64
+ }
38
65
  constructor(customDir, options = {}) {
39
66
  // Sync best-effort resolution — will be refined by resolveBaseDir() on
40
67
  // first async operation if no explicit dir was provided.
@@ -48,8 +75,10 @@ export class ToonMemoryInterface {
48
75
  // If no explicit dir was provided, kick off async workspace-root detection
49
76
  // immediately so it is ready before any IO call.
50
77
  if (!customDir && !process.env["MCP_AI_AGENT_GUIDELINES_STATE_DIR"]) {
78
+ const generation = ++this.baseDirGeneration;
51
79
  this.baseDirReadyPromise = resolveSessionStateDirAsync().then((resolvedDir) => {
52
- if (resolvedDir !== this.baseDir) {
80
+ if (this.baseDirGeneration === generation &&
81
+ resolvedDir !== this.baseDir) {
53
82
  this.baseDir = resolvedDir;
54
83
  this.sessionDir = join(resolvedDir, "sessions");
55
84
  this.memoryDir = join(resolvedDir, "memory");
@@ -125,12 +154,7 @@ export class ToonMemoryInterface {
125
154
  return await this.encryptionKeyPromise;
126
155
  }
127
156
  async ensureDirectories() {
128
- // Await workspace-root resolution before any filesystem access so the
129
- // correct baseDir (workspace vs. $HOME) is used for all paths.
130
- if (this.baseDirReadyPromise) {
131
- await this.baseDirReadyPromise;
132
- this.baseDirReadyPromise = undefined;
133
- }
157
+ await this.awaitBaseDirReady();
134
158
  await ensureSessionStateGitignore(this.baseDir);
135
159
  await mkdir(this.memoryDir, { recursive: true });
136
160
  await mkdir(this.snapshotDir(), { recursive: true });
@@ -166,10 +190,7 @@ export class ToonMemoryInterface {
166
190
  * write-path tool guards.
167
191
  */
168
192
  async isWorkspaceInitialized() {
169
- if (this.baseDirReadyPromise) {
170
- await this.baseDirReadyPromise;
171
- this.baseDirReadyPromise = undefined;
172
- }
193
+ await this.awaitBaseDirReady();
173
194
  const configPath = join(this.configDir(), "orchestration.toml");
174
195
  try {
175
196
  await access(configPath);
@@ -230,7 +251,7 @@ export class ToonMemoryInterface {
230
251
  }
231
252
  }
232
253
  async saveFingerprintSnapshotHistory(history) {
233
- await writeFile(this.snapshotHistoryPath(), JSON.stringify(history, null, 2), "utf8");
254
+ await writeTextFileAtomic(this.snapshotHistoryPath(), JSON.stringify(history, null, 2));
234
255
  }
235
256
  async ensureSnapshotHistoryInitialized() {
236
257
  const history = await this.loadFingerprintSnapshotHistory();
@@ -247,8 +268,8 @@ export class ToonMemoryInterface {
247
268
  return history;
248
269
  }
249
270
  const fileName = `fingerprint-${snapshotId}.json`;
250
- await writeFile(this.snapshotArchivePath(snapshotId), JSON.stringify(migratedSnapshot, null, 2), "utf8");
251
- await writeFile(this.snapshotLatestPath(), JSON.stringify(migratedSnapshot, null, 2), "utf8");
271
+ await writeTextFileAtomic(this.snapshotArchivePath(snapshotId), JSON.stringify(migratedSnapshot, null, 2));
272
+ await writeTextFileAtomic(this.snapshotLatestPath(), JSON.stringify(migratedSnapshot, null, 2));
252
273
  const migratedHistory = {
253
274
  version: "1",
254
275
  latestSnapshotId: snapshotId,
@@ -271,8 +292,8 @@ export class ToonMemoryInterface {
271
292
  }
272
293
  const normalizedSnapshot = this.normalizeFingerprintSnapshot(snapshot);
273
294
  const fileName = `fingerprint-${snapshotId}.json`;
274
- await writeFile(this.snapshotArchivePath(snapshotId), JSON.stringify(normalizedSnapshot, null, 2), "utf8");
275
- await writeFile(this.snapshotLatestPath(), JSON.stringify(normalizedSnapshot, null, 2), "utf8");
295
+ await writeTextFileAtomic(this.snapshotArchivePath(snapshotId), JSON.stringify(normalizedSnapshot, null, 2));
296
+ await writeTextFileAtomic(this.snapshotLatestPath(), JSON.stringify(normalizedSnapshot, null, 2));
276
297
  const existingHistory = await this.ensureSnapshotHistoryInitialized();
277
298
  const filteredSnapshots = existingHistory.snapshots.filter((entry) => entry.snapshotId !== snapshotId);
278
299
  const updatedHistory = {
@@ -302,7 +323,17 @@ export class ToonMemoryInterface {
302
323
  await this.ensureDirectories();
303
324
  return (await this.ensureSnapshotHistoryInitialized()).snapshots;
304
325
  }
326
+ async awaitBaseDirReady() {
327
+ if (this.baseDirReadyPromise) {
328
+ await this.baseDirReadyPromise;
329
+ this.baseDirReadyPromise = undefined;
330
+ }
331
+ }
305
332
  async ensureSessionDir(sessionId) {
333
+ // Session writes need the same workspace-root correction as snapshot and
334
+ // memory writes, otherwise an npx-launched server can leak state into the
335
+ // launch directory before MCP_WORKSPACE_ROOT takes effect.
336
+ await this.awaitBaseDirReady();
306
337
  await ensureSessionStateGitignore(this.baseDir);
307
338
  await mkdir(this.sessionSubDir(sessionId), { recursive: true });
308
339
  await mkdir(this.memoryDir, { recursive: true });
@@ -316,12 +347,12 @@ export class ToonMemoryInterface {
316
347
  modules: map,
317
348
  };
318
349
  await this.ensureSessionDir(sessionId);
319
- await writeFile(this.workspaceMapPath(sessionId), JSON.stringify(workspaceMap, null, 2), "utf8");
350
+ await writeTextFileAtomic(this.workspaceMapPath(sessionId), JSON.stringify(workspaceMap, null, 2));
320
351
  }
321
352
  /** Save per-session scan results (code scanning / AST outputs). */
322
353
  async saveScanResults(sessionId, results) {
323
354
  await this.ensureSessionDir(sessionId);
324
- await writeFile(this.scanResultsPath(sessionId), JSON.stringify(results, null, 2), "utf8");
355
+ await writeTextFileAtomic(this.scanResultsPath(sessionId), JSON.stringify(results, null, 2));
325
356
  }
326
357
  async listSessionIds() {
327
358
  await this.ensureDirectories();
@@ -449,7 +480,7 @@ export class ToonMemoryInterface {
449
480
  await this.ensureDirectories();
450
481
  const now = new Date().toISOString();
451
482
  const enhancedArtifact = enhanceMemoryArtifact(artifact, now);
452
- await writeFile(this.memoryArtifactPath(enhancedArtifact.meta.id), toonEncode(enhancedArtifact, { delimiter: "\t", keyFolding: "safe" }), "utf8");
483
+ await writeTextFileAtomic(this.memoryArtifactPath(enhancedArtifact.meta.id), toonEncode(enhancedArtifact, { delimiter: "\t", keyFolding: "safe" }));
453
484
  }
454
485
  async loadMemoryArtifact(memoryId) {
455
486
  try {