agentx-sdk 0.2.1 → 0.3.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.
Files changed (89) hide show
  1. package/README.md +629 -25
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +18 -4
  4. package/dist/agent.js.map +1 -1
  5. package/dist/config/config.d.ts +4 -4
  6. package/dist/config/config.d.ts.map +1 -1
  7. package/dist/config/config.js +3 -2
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/contracts/entities/stores.d.ts +2 -0
  10. package/dist/contracts/entities/stores.d.ts.map +1 -1
  11. package/dist/core/compaction/tool-result-budget.d.ts.map +1 -1
  12. package/dist/core/compaction/tool-result-budget.js +8 -4
  13. package/dist/core/compaction/tool-result-budget.js.map +1 -1
  14. package/dist/core/context-builder.d.ts +2 -0
  15. package/dist/core/context-builder.d.ts.map +1 -1
  16. package/dist/core/context-builder.js +7 -2
  17. package/dist/core/context-builder.js.map +1 -1
  18. package/dist/core/conversation-manager.js +1 -1
  19. package/dist/core/conversation-manager.js.map +1 -1
  20. package/dist/core/react-loop.d.ts.map +1 -1
  21. package/dist/core/react-loop.js +8 -5
  22. package/dist/core/react-loop.js.map +1 -1
  23. package/dist/index.d.ts +1 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +0 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/knowledge/knowledge-manager.d.ts.map +1 -1
  28. package/dist/knowledge/knowledge-manager.js +18 -10
  29. package/dist/knowledge/knowledge-manager.js.map +1 -1
  30. package/dist/knowledge/sqlite-vector-store.d.ts +2 -0
  31. package/dist/knowledge/sqlite-vector-store.d.ts.map +1 -1
  32. package/dist/knowledge/sqlite-vector-store.js +20 -1
  33. package/dist/knowledge/sqlite-vector-store.js.map +1 -1
  34. package/dist/llm/errors.d.ts.map +1 -1
  35. package/dist/llm/errors.js +12 -6
  36. package/dist/llm/errors.js.map +1 -1
  37. package/dist/llm/llm-client.d.ts +10 -0
  38. package/dist/llm/llm-client.d.ts.map +1 -1
  39. package/dist/llm/llm-client.js +47 -4
  40. package/dist/llm/llm-client.js.map +1 -1
  41. package/dist/llm/message-types.d.ts +0 -6
  42. package/dist/llm/message-types.d.ts.map +1 -1
  43. package/dist/memory/file-memory-system.d.ts +1 -1
  44. package/dist/memory/file-memory-system.d.ts.map +1 -1
  45. package/dist/memory/file-memory-system.js +15 -18
  46. package/dist/memory/file-memory-system.js.map +1 -1
  47. package/dist/memory/memory-extractor.d.ts +1 -0
  48. package/dist/memory/memory-extractor.d.ts.map +1 -1
  49. package/dist/memory/memory-extractor.js +4 -1
  50. package/dist/memory/memory-extractor.js.map +1 -1
  51. package/dist/memory/memory-paths.d.ts +25 -1
  52. package/dist/memory/memory-paths.d.ts.map +1 -1
  53. package/dist/memory/memory-paths.js +71 -6
  54. package/dist/memory/memory-paths.js.map +1 -1
  55. package/dist/memory/memory-relevance.d.ts +1 -0
  56. package/dist/memory/memory-relevance.d.ts.map +1 -1
  57. package/dist/memory/memory-relevance.js +4 -1
  58. package/dist/memory/memory-relevance.js.map +1 -1
  59. package/dist/memory/memory-scanner.d.ts.map +1 -1
  60. package/dist/memory/memory-scanner.js +2 -0
  61. package/dist/memory/memory-scanner.js.map +1 -1
  62. package/dist/memory/memory-tools.d.ts.map +1 -1
  63. package/dist/memory/memory-tools.js +81 -29
  64. package/dist/memory/memory-tools.js.map +1 -1
  65. package/dist/skills/skill-args.d.ts.map +1 -1
  66. package/dist/skills/skill-args.js +6 -4
  67. package/dist/skills/skill-args.js.map +1 -1
  68. package/dist/skills/skill-manager.d.ts +2 -0
  69. package/dist/skills/skill-manager.d.ts.map +1 -1
  70. package/dist/skills/skill-manager.js +4 -0
  71. package/dist/skills/skill-manager.js.map +1 -1
  72. package/dist/storage/sqlite-conversation-store.js +10 -1
  73. package/dist/storage/sqlite-conversation-store.js.map +1 -1
  74. package/dist/tools/builtin/bash.d.ts.map +1 -1
  75. package/dist/tools/builtin/bash.js +32 -2
  76. package/dist/tools/builtin/bash.js.map +1 -1
  77. package/dist/tools/builtin/glob.d.ts.map +1 -1
  78. package/dist/tools/builtin/glob.js +8 -4
  79. package/dist/tools/builtin/glob.js.map +1 -1
  80. package/dist/tools/builtin/grep.d.ts.map +1 -1
  81. package/dist/tools/builtin/grep.js +9 -2
  82. package/dist/tools/builtin/grep.js.map +1 -1
  83. package/dist/tools/builtin/web-fetch.d.ts.map +1 -1
  84. package/dist/tools/builtin/web-fetch.js +39 -0
  85. package/dist/tools/builtin/web-fetch.js.map +1 -1
  86. package/dist/tools/mcp-adapter.d.ts.map +1 -1
  87. package/dist/tools/mcp-adapter.js +52 -16
  88. package/dist/tools/mcp-adapter.js.map +1 -1
  89. package/package.json +4 -2
@@ -6,9 +6,14 @@
6
6
  * - Tilde expansion only from config (~/), not from bare ~ or ~/. or ~/..
7
7
  * - All paths normalized to NFC to prevent Unicode normalization attacks
8
8
  */
9
+ /**
10
+ * Default memory directory: `<cwd>/.agentx/memory/`.
11
+ * Computed dynamically because `process.cwd()` can change across tests.
12
+ */
13
+ export declare function getDefaultMemoryDir(): string;
9
14
  /**
10
15
  * Resolve the memory directory from config, env var, or default.
11
- * Priority: config.memoryDir → AGENT_MEMORY_DIR env → ~/.agent/memory/
16
+ * Priority: config.memoryDir → AGENT_MEMORY_DIR env → <cwd>/.agentx/memory/
12
17
  *
13
18
  * Config paths support ~/ expansion (user-friendly).
14
19
  * Env var paths must be absolute (set programmatically).
@@ -29,10 +34,29 @@ export declare function resolveMemoryDir(memoryDir?: string): string;
29
34
  * Returns the normalized path if valid, undefined if rejected.
30
35
  */
31
36
  export declare function validateMemoryPath(path: string, memoryDir: string): string | undefined;
37
+ /**
38
+ * Like `validateMemoryPath`, but resolves symlinks via `realpath` before
39
+ * the containment check. Use this before actually reading or writing a file
40
+ * so a symlink inside the memory directory cannot escape to the broader
41
+ * filesystem. Returns undefined if the path is unsafe OR if the target
42
+ * does not yet exist (caller should create its parent first).
43
+ */
44
+ export declare function validateMemoryPathResolved(path: string, memoryDir: string): Promise<string | undefined>;
32
45
  /**
33
46
  * Sanitize a name into a safe kebab-case filename with .md extension.
34
47
  */
35
48
  export declare function sanitizeFilename(name: string): string;
49
+ /**
50
+ * Validate a threadId as safe to use as a path component.
51
+ * Rejects traversal sequences, separators, null bytes, control chars.
52
+ * Returns the validated id or undefined if unsafe.
53
+ */
54
+ export declare function validateThreadId(threadId: string): string | undefined;
55
+ /**
56
+ * Sanitize a value for safe embedding in a single-line YAML frontmatter field.
57
+ * Prevents frontmatter injection by collapsing newlines to spaces and trimming.
58
+ */
59
+ export declare function sanitizeFrontmatterValue(value: string): string;
36
60
  /**
37
61
  * Idempotent memory directory creation.
38
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"memory-paths.d.ts","sourceRoot":"","sources":["../../src/memory/memory-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAY3D;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAqBpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAI7E"}
1
+ {"version":3,"file":"memory-paths.d.ts","sourceRoot":"","sources":["../../src/memory/memory-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAY3D;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAqBpB;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAe7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWrE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAI7E"}
@@ -8,11 +8,18 @@
8
8
  */
9
9
  import { homedir } from 'node:os';
10
10
  import { isAbsolute, join, normalize, sep } from 'node:path';
11
- import { mkdir } from 'node:fs/promises';
12
- const DEFAULT_MEMORY_DIR = '~/.agent/memory/';
11
+ import { mkdir, realpath } from 'node:fs/promises';
12
+ /**
13
+ * Default memory directory: `<cwd>/.agentx/memory/`.
14
+ * Computed dynamically because `process.cwd()` can change across tests.
15
+ */
16
+ export function getDefaultMemoryDir() {
17
+ const path = join(process.cwd(), '.agentx', 'memory');
18
+ return (path + sep).normalize('NFC');
19
+ }
13
20
  /**
14
21
  * Resolve the memory directory from config, env var, or default.
15
- * Priority: config.memoryDir → AGENT_MEMORY_DIR env → ~/.agent/memory/
22
+ * Priority: config.memoryDir → AGENT_MEMORY_DIR env → <cwd>/.agentx/memory/
16
23
  *
17
24
  * Config paths support ~/ expansion (user-friendly).
18
25
  * Env var paths must be absolute (set programmatically).
@@ -26,8 +33,9 @@ export function resolveMemoryDir(memoryDir) {
26
33
  return (normalized + sep).normalize('NFC');
27
34
  }
28
35
  }
29
- const raw = memoryDir ?? DEFAULT_MEMORY_DIR;
30
- return expandAndNormalize(raw);
36
+ if (!memoryDir)
37
+ return getDefaultMemoryDir();
38
+ return expandAndNormalize(memoryDir);
31
39
  }
32
40
  /**
33
41
  * Expand ~ and normalize a path. Returns absolute path with trailing separator.
@@ -41,7 +49,7 @@ function expandAndNormalize(raw) {
41
49
  const restNorm = normalize(rest || '.');
42
50
  if (restNorm === '.' || restNorm === '..') {
43
51
  // Fall through to default — don't expand dangerous paths
44
- candidate = join(homedir(), '.agent', 'memory');
52
+ candidate = join(process.cwd(), '.agentx', 'memory');
45
53
  }
46
54
  else {
47
55
  candidate = join(homedir(), rest);
@@ -87,6 +95,32 @@ export function validateMemoryPath(path, memoryDir) {
87
95
  return undefined;
88
96
  return normalized;
89
97
  }
98
+ /**
99
+ * Like `validateMemoryPath`, but resolves symlinks via `realpath` before
100
+ * the containment check. Use this before actually reading or writing a file
101
+ * so a symlink inside the memory directory cannot escape to the broader
102
+ * filesystem. Returns undefined if the path is unsafe OR if the target
103
+ * does not yet exist (caller should create its parent first).
104
+ */
105
+ export async function validateMemoryPathResolved(path, memoryDir) {
106
+ const cheap = validateMemoryPath(path, memoryDir);
107
+ if (!cheap)
108
+ return undefined;
109
+ try {
110
+ const real = await realpath(cheap);
111
+ const realDir = await realpath(normalize(memoryDir).replace(/[/\\]+$/, ''));
112
+ const realDirWithSep = real === realDir ? realDir : realDir + sep;
113
+ if (real !== realDir && !real.startsWith(realDirWithSep))
114
+ return undefined;
115
+ return real;
116
+ }
117
+ catch {
118
+ // realpath fails when the target doesn't exist yet — that's normal for
119
+ // creates. Fall back to the cheap (string) check, which still guards
120
+ // against traversal inside the memory directory.
121
+ return cheap;
122
+ }
123
+ }
90
124
  /**
91
125
  * Sanitize a name into a safe kebab-case filename with .md extension.
92
126
  */
@@ -103,6 +137,37 @@ export function sanitizeFilename(name) {
103
137
  return 'memory.md';
104
138
  return sanitized.endsWith('.md') ? sanitized : `${sanitized}.md`;
105
139
  }
140
+ /**
141
+ * Validate a threadId as safe to use as a path component.
142
+ * Rejects traversal sequences, separators, null bytes, control chars.
143
+ * Returns the validated id or undefined if unsafe.
144
+ */
145
+ export function validateThreadId(threadId) {
146
+ if (!threadId)
147
+ return undefined;
148
+ if (threadId.includes('\0'))
149
+ return undefined;
150
+ if (/[\x00-\x1f\x7f]/.test(threadId))
151
+ return undefined;
152
+ if (threadId.includes('/') || threadId.includes('\\'))
153
+ return undefined;
154
+ if (threadId === '.' || threadId === '..')
155
+ return undefined;
156
+ // Defense-in-depth: ensure normalization does not turn it into a traversal
157
+ const normalized = normalize(threadId);
158
+ if (normalized !== threadId)
159
+ return undefined;
160
+ if (normalized.includes('..'))
161
+ return undefined;
162
+ return threadId;
163
+ }
164
+ /**
165
+ * Sanitize a value for safe embedding in a single-line YAML frontmatter field.
166
+ * Prevents frontmatter injection by collapsing newlines to spaces and trimming.
167
+ */
168
+ export function sanitizeFrontmatterValue(value) {
169
+ return value.replace(/[\r\n]+/g, ' ').trim();
170
+ }
106
171
  /**
107
172
  * Idempotent memory directory creation.
108
173
  */
@@ -1 +1 @@
1
- {"version":3,"file":"memory-paths.js","sourceRoot":"","sources":["../../src/memory/memory-paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-paths.js","sourceRoot":"","sources":["../../src/memory/memory-paths.ts"],"names":[],"mappings":"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"}
@@ -12,5 +12,6 @@ import type { LLMClient } from '../llm/llm-client.js';
12
12
  export declare function selectRelevantMemories(query: string, manifest: string, validFilenames: Set<string>, client: LLMClient, options?: {
13
13
  model?: string;
14
14
  signal?: AbortSignal;
15
+ logger?: import('../utils/logger.js').Logger;
15
16
  }): Promise<string[]>;
16
17
  //# sourceMappingURL=memory-relevance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-relevance.d.ts","sourceRoot":"","sources":["../../src/memory/memory-relevance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAStD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjD,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB"}
1
+ {"version":3,"file":"memory-relevance.d.ts","sourceRoot":"","sources":["../../src/memory/memory-relevance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAStD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,MAAM,CAAA;CAAE,GAC/F,OAAO,CAAC,MAAM,EAAE,CAAC,CA+BnB"}
@@ -39,7 +39,10 @@ export async function selectRelevantMemories(query, manifest, validFilenames, cl
39
39
  .filter(f => typeof f === 'string' && validFilenames.has(f))
40
40
  .slice(0, 5);
41
41
  }
42
- catch {
42
+ catch (e) {
43
+ options?.logger?.debug('Memory relevance selection failed', {
44
+ error: e instanceof Error ? e.message : String(e),
45
+ });
43
46
  return [];
44
47
  }
45
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory-relevance.js","sourceRoot":"","sources":["../../src/memory/memory-relevance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,6BAA6B,GAAG;;;;;yCAKG,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,QAAgB,EAChB,cAA2B,EAC3B,MAAiB,EACjB,OAAkD;IAElD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE;gBAC1D;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,UAAU,KAAK,4BAA4B,QAAQ,EAAE;iBAC/D;aACF;YACD,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YACvC,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAqC,CAAC;QAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAAE,OAAO,EAAE,CAAC;QAExD,OAAO,MAAM,CAAC,iBAAiB;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"memory-relevance.js","sourceRoot":"","sources":["../../src/memory/memory-relevance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,6BAA6B,GAAG;;;;;yCAKG,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,QAAgB,EAChB,cAA2B,EAC3B,MAAiB,EACjB,OAAgG;IAEhG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE;gBAC1D;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,UAAU,KAAK,4BAA4B,QAAQ,EAAE;iBAC/D;aACF;YACD,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YACvC,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAqC,CAAC;QAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAAE,OAAO,EAAE,CAAC;QAExD,OAAO,MAAM,CAAC,iBAAiB;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,mCAAmC,EAAE;YAC1D,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SAClD,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-scanner.d.ts","sourceRoot":"","sources":["../../src/memory/memory-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAIvB,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAgCnE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA4CzB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAUrE"}
1
+ {"version":3,"file":"memory-scanner.d.ts","sourceRoot":"","sources":["../../src/memory/memory-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAIvB,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAgCnE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA6CzB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAUrE"}
@@ -47,6 +47,8 @@ export function parseFrontmatter(content) {
47
47
  */
48
48
  export async function scanMemoryFiles(memoryDir, signal) {
49
49
  try {
50
+ if (signal?.aborted)
51
+ return [];
50
52
  const entries = await readdir(memoryDir, { recursive: true });
51
53
  const mdFiles = entries.filter(f => f.endsWith('.md')
52
54
  && basename(f) !== ENTRYPOINT_NAME
@@ -1 +1 @@
1
- {"version":3,"file":"memory-scanner.js","sourceRoot":"","sources":["../../src/memory/memory-scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-scanner.js","sourceRoot":"","sources":["../../src/memory/memory-scanner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-tools.d.ts","sourceRoot":"","sources":["../../src/memory/memory-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AA4BrE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAyInF"}
1
+ {"version":3,"file":"memory-tools.d.ts","sourceRoot":"","sources":["../../src/memory/memory-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAiDrE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAgKnF"}
@@ -9,19 +9,39 @@
9
9
  * memory directory (global or thread-scoped).
10
10
  */
11
11
  import { z } from 'zod';
12
- import { readFile, writeFile, unlink } from 'node:fs/promises';
12
+ import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises';
13
13
  import { join, basename } from 'node:path';
14
14
  import { ENTRYPOINT_NAME } from './memory-types.js';
15
15
  import { scanMemoryFiles, formatMemoryManifest, parseFrontmatter } from './memory-scanner.js';
16
- import { sanitizeFilename } from './memory-paths.js';
16
+ import { sanitizeFilename, sanitizeFrontmatterValue, validateMemoryPath, validateMemoryPathResolved, validateThreadId } from './memory-paths.js';
17
17
  const THREADS_DIR = 'threads';
18
+ /**
19
+ * Per-directory promise-chain mutex for index writes. Multiple concurrent
20
+ * memory_write calls must not interleave reads and writes on MEMORY.md.
21
+ */
22
+ const indexLocks = new Map();
23
+ async function withIndexLock(dir, fn) {
24
+ const prev = indexLocks.get(dir) ?? Promise.resolve();
25
+ const result = prev.then(() => fn());
26
+ const tail = result.then(() => { }, () => { });
27
+ indexLocks.set(dir, tail);
28
+ // Opportunistically drop completed locks so the Map doesn't grow unbounded
29
+ void tail.finally(() => {
30
+ if (indexLocks.get(dir) === tail)
31
+ indexLocks.delete(dir);
32
+ });
33
+ return result;
34
+ }
18
35
  /**
19
36
  * Resolve the effective directory for memory operations.
20
37
  */
21
38
  function resolveDir(memoryDir, threadId) {
22
39
  if (!threadId)
23
40
  return memoryDir;
24
- return join(memoryDir, THREADS_DIR, threadId);
41
+ const safeId = validateThreadId(threadId);
42
+ if (!safeId)
43
+ throw new Error(`Invalid threadId: ${JSON.stringify(threadId)}`);
44
+ return join(memoryDir, THREADS_DIR, safeId);
25
45
  }
26
46
  /**
27
47
  * Validate a filename: must be .md, not MEMORY.md, no path traversal.
@@ -29,6 +49,8 @@ function resolveDir(memoryDir, threadId) {
29
49
  function validateFilename(filename) {
30
50
  if (!filename || filename.includes('\0'))
31
51
  return 'Invalid filename';
52
+ if (/[\r\n\t]/.test(filename))
53
+ return 'Filename contains invalid whitespace characters';
32
54
  if (filename.includes('/') || filename.includes('\\') || filename.includes('..')) {
33
55
  return 'Path traversal not allowed';
34
56
  }
@@ -43,6 +65,16 @@ function validateFilename(filename) {
43
65
  */
44
66
  export function createMemoryTools(memoryDir, threadId) {
45
67
  const dir = resolveDir(memoryDir, threadId);
68
+ /** Defense-in-depth: ensure the resolved path stays inside memoryDir (sync, shallow). */
69
+ const safeJoin = (filename) => {
70
+ const candidate = join(dir, filename);
71
+ return validateMemoryPath(candidate, memoryDir) ?? null;
72
+ };
73
+ /** Like safeJoin, but resolves symlinks via realpath to prevent symlink escape. */
74
+ const safeJoinResolved = async (filename) => {
75
+ const candidate = join(dir, filename);
76
+ return (await validateMemoryPathResolved(candidate, memoryDir)) ?? null;
77
+ };
46
78
  const memoryList = {
47
79
  name: 'memory_list',
48
80
  description: 'List all existing memory files with their name, type, description, and last modified date. Use this FIRST to see what memories already exist before creating new ones.',
@@ -69,8 +101,11 @@ export function createMemoryTools(memoryDir, threadId) {
69
101
  const err = validateFilename(filename);
70
102
  if (err)
71
103
  return { content: err, isError: true };
104
+ const safePath = await safeJoinResolved(filename);
105
+ if (!safePath)
106
+ return { content: 'Invalid path', isError: true };
72
107
  try {
73
- const content = await readFile(join(dir, filename), 'utf-8');
108
+ const content = await readFile(safePath, 'utf-8');
74
109
  return content;
75
110
  }
76
111
  catch {
@@ -90,17 +125,21 @@ export function createMemoryTools(memoryDir, threadId) {
90
125
  execute: async (rawArgs) => {
91
126
  const args = rawArgs;
92
127
  const filename = sanitizeFilename(args.name);
128
+ await mkdir(dir, { recursive: true });
129
+ const safePath = safeJoin(filename);
130
+ if (!safePath)
131
+ return { content: 'Invalid path', isError: true };
93
132
  const fileContent = [
94
133
  '---',
95
- `name: ${args.name}`,
96
- `description: ${args.description}`,
134
+ `name: ${sanitizeFrontmatterValue(args.name)}`,
135
+ `description: ${sanitizeFrontmatterValue(args.description)}`,
97
136
  `type: ${args.type}`,
98
137
  '---',
99
138
  '',
100
139
  args.content,
101
140
  '',
102
141
  ].join('\n');
103
- await writeFile(join(dir, filename), fileContent, 'utf-8');
142
+ await writeFile(safePath, fileContent, 'utf-8');
104
143
  await addToIndex(dir, filename, args.description);
105
144
  return `Memory saved: ${filename}`;
106
145
  },
@@ -119,7 +158,9 @@ export function createMemoryTools(memoryDir, threadId) {
119
158
  const err = validateFilename(args.filename);
120
159
  if (err)
121
160
  return { content: err, isError: true };
122
- const filePath = join(dir, args.filename);
161
+ const filePath = await safeJoinResolved(args.filename);
162
+ if (!filePath)
163
+ return { content: 'Invalid path', isError: true };
123
164
  // Read existing to preserve frontmatter fields
124
165
  let existingContent;
125
166
  try {
@@ -134,8 +175,8 @@ export function createMemoryTools(memoryDir, threadId) {
134
175
  const type = frontmatter.type ?? 'user';
135
176
  const fileContent = [
136
177
  '---',
137
- `name: ${name}`,
138
- `description: ${description}`,
178
+ `name: ${sanitizeFrontmatterValue(name)}`,
179
+ `description: ${sanitizeFrontmatterValue(description)}`,
139
180
  `type: ${type}`,
140
181
  '---',
141
182
  '',
@@ -158,8 +199,11 @@ export function createMemoryTools(memoryDir, threadId) {
158
199
  const err = validateFilename(filename);
159
200
  if (err)
160
201
  return { content: err, isError: true };
202
+ const safePath = await safeJoinResolved(filename);
203
+ if (!safePath)
204
+ return { content: 'Invalid path', isError: true };
161
205
  try {
162
- await unlink(join(dir, filename));
206
+ await unlink(safePath);
163
207
  }
164
208
  catch {
165
209
  return { content: `File not found: ${filename}`, isError: true };
@@ -172,25 +216,33 @@ export function createMemoryTools(memoryDir, threadId) {
172
216
  }
173
217
  // --- Index helpers (mirror FileMemorySystem's private methods) ---
174
218
  async function addToIndex(dir, filename, description) {
175
- const entrypoint = join(dir, ENTRYPOINT_NAME);
176
- let existing = '';
177
- try {
178
- existing = await readFile(entrypoint, 'utf-8');
179
- }
180
- catch { /* File doesn't exist yet */ }
181
- if (existing.includes(`(${filename})`))
182
- return;
183
- const newEntry = `- [${description}](${filename}) — ${description}`;
184
- const updated = existing ? `${existing.trimEnd()}\n${newEntry}\n` : `${newEntry}\n`;
185
- await writeFile(entrypoint, updated, 'utf-8');
219
+ await withIndexLock(dir, async () => {
220
+ const entrypoint = join(dir, ENTRYPOINT_NAME);
221
+ let existing = '';
222
+ try {
223
+ existing = await readFile(entrypoint, 'utf-8');
224
+ }
225
+ catch { /* File doesn't exist yet */ }
226
+ if (existing.includes(`(${filename})`))
227
+ return;
228
+ const safeDesc = sanitizeFrontmatterValue(description);
229
+ const newEntry = `- [${safeDesc}](${filename}) ${safeDesc}`;
230
+ const updated = existing ? `${existing.trimEnd()}\n${newEntry}\n` : `${newEntry}\n`;
231
+ try {
232
+ await writeFile(entrypoint, updated, 'utf-8');
233
+ }
234
+ catch { /* index update is non-critical — ignore I/O failures */ }
235
+ });
186
236
  }
187
237
  async function removeFromIndex(dir, filename) {
188
- const entrypoint = join(dir, ENTRYPOINT_NAME);
189
- try {
190
- const content = await readFile(entrypoint, 'utf-8');
191
- const lines = content.split('\n').filter(line => !line.includes(`(${filename})`));
192
- await writeFile(entrypoint, lines.join('\n'), 'utf-8');
193
- }
194
- catch { /* Index doesn't exist */ }
238
+ await withIndexLock(dir, async () => {
239
+ const entrypoint = join(dir, ENTRYPOINT_NAME);
240
+ try {
241
+ const content = await readFile(entrypoint, 'utf-8');
242
+ const lines = content.split('\n').filter(line => !line.includes(`(${filename})`));
243
+ await writeFile(entrypoint, lines.join('\n'), 'utf-8');
244
+ }
245
+ catch { /* Index doesn't exist */ }
246
+ });
195
247
  }
196
248
  //# sourceMappingURL=memory-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-tools.js","sourceRoot":"","sources":["../../src/memory/memory-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-tools.js","sourceRoot":"","sources":["../../src/memory/memory-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-args.d.ts","sourceRoot":"","sources":["../../src/skills/skill-args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CA0BR"}
1
+ {"version":3,"file":"skill-args.d.ts","sourceRoot":"","sources":["../../src/skills/skill-args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CA4BR"}
@@ -56,17 +56,19 @@ export function substituteArgs(content, rawArgs, argNames, variables) {
56
56
  for (let i = 0; i < argNames.length; i++) {
57
57
  const name = argNames[i];
58
58
  const value = tokens[i] ?? '';
59
- // Replace $argName (word boundary aware — don't replace $argNameExtra)
60
- result = result.replace(new RegExp(`\\$${name}(?![a-zA-Z0-9_])`, 'g'), value);
59
+ // Replace $argName (word boundary aware — don't replace $argNameExtra).
60
+ // Use a function replacer so special sequences in the value (e.g. $&, $1)
61
+ // are treated as literals, not as backreferences.
62
+ result = result.replace(new RegExp(`\\$${name}(?![a-zA-Z0-9_])`, 'g'), () => value);
61
63
  }
62
64
  // Also make remaining args available as $ARGS (everything after named args)
63
65
  const remaining = tokens.slice(argNames.length).join(' ');
64
- result = result.replace(/\$ARGS(?![a-zA-Z0-9_])/g, remaining);
66
+ result = result.replace(/\$ARGS(?![a-zA-Z0-9_])/g, () => remaining);
65
67
  }
66
68
  // 2. Variable substitution: ${VARIABLE}
67
69
  if (variables) {
68
70
  for (const [key, value] of Object.entries(variables)) {
69
- result = result.replace(new RegExp(`\\$\\{${escapeRegex(key)}\\}`, 'g'), value);
71
+ result = result.replace(new RegExp(`\\$\\{${escapeRegex(key)}\\}`, 'g'), () => value);
70
72
  }
71
73
  }
72
74
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"skill-args.js","sourceRoot":"","sources":["../../src/skills/skill-args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACpC,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,OAAe,EACf,QAAmB,EACnB,SAAkC;IAElC,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,0CAA0C;IAC1C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,uEAAuE;YACvE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;QAED,4EAA4E;QAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"skill-args.js","sourceRoot":"","sources":["../../src/skills/skill-args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACpC,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,OAAe,EACf,QAAmB,EACnB,SAAkC;IAElC,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,0CAA0C;IAC1C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,wEAAwE;YACxE,0EAA0E;YAC1E,kDAAkD;YAClD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC;QAED,4EAA4E;QAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
@@ -63,6 +63,8 @@ export declare class SkillManager {
63
63
  buildSkillListing(budgetChars: number): string;
64
64
  markInvoked(name: string): void;
65
65
  getInvokedSkills(): string[];
66
+ /** Clear the invocation tracking set — call on session reset to avoid unbounded growth. */
67
+ clearInvokedSkills(): void;
66
68
  /** Remove a single sticky skill from a thread */
67
69
  clearStickySkill(threadId: string, skillName: string): void;
68
70
  /** Remove all sticky skills for a thread (e.g. on clearHistory) */
@@ -1 +1 @@
1
- {"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/skills/skill-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAK1E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAWD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IACnE,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC;IACjE,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAEhF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;IASvF,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQjC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMjC,yDAAyD;IACzD,UAAU,IAAI,UAAU,EAAE;IAI1B,oDAAoD;IACpD,aAAa,IAAI,UAAU,EAAE;IAY7B;;;OAGG;IACG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYrD;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAoB/C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA+FhF;;;;OAIG;IACG,mBAAmB,CACvB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAqBlB;;;OAGG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAoC9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,gBAAgB,IAAI,MAAM,EAAE;IAQ5B,iDAAiD;IACjD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI3D,mEAAmE;IACnE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIzC,sEAAsE;IACtE,sBAAsB,IAAI,IAAI;IAQ9B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,uBAAuB;IAU/B,uEAAuE;IACvE,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;YAIlB,aAAa;CA0B5B"}
1
+ {"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/skills/skill-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAK1E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAWD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IACnE,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC;IACjE,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAEhF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;IASvF,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQjC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMjC,yDAAyD;IACzD,UAAU,IAAI,UAAU,EAAE;IAI1B,oDAAoD;IACpD,aAAa,IAAI,UAAU,EAAE;IAY7B;;;OAGG;IACG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYrD;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAoB/C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA+FhF;;;;OAIG;IACG,mBAAmB,CACvB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAqBlB;;;OAGG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAoC9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,gBAAgB,IAAI,MAAM,EAAE;IAI5B,2FAA2F;IAC3F,kBAAkB,IAAI,IAAI;IAQ1B,iDAAiD;IACjD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI3D,mEAAmE;IACnE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIzC,sEAAsE;IACtE,sBAAsB,IAAI,IAAI;IAQ9B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,uBAAuB;IAU/B,uEAAuE;IACvE,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;YAIlB,aAAa;CA0B5B"}
@@ -240,6 +240,10 @@ export class SkillManager {
240
240
  getInvokedSkills() {
241
241
  return [...this.invokedSkills];
242
242
  }
243
+ /** Clear the invocation tracking set — call on session reset to avoid unbounded growth. */
244
+ clearInvokedSkills() {
245
+ this.invokedSkills.clear();
246
+ }
243
247
  // ---------------------------------------------------------------------------
244
248
  // Sticky session management
245
249
  // ---------------------------------------------------------------------------