@machina.ai/cell-cli-core 1.40.1-rc2 → 1.41.1-rc2

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 (178) hide show
  1. package/dist/docs/AFTER_MERGE_PROMPT.md +1 -1
  2. package/dist/docs/CHANGES.md +19 -0
  3. package/dist/docs/changelogs/index.md +18 -0
  4. package/dist/docs/changelogs/latest.md +243 -255
  5. package/dist/docs/changelogs/preview.md +168 -18
  6. package/dist/docs/cli/sandbox.md +162 -45
  7. package/dist/docs/cli/settings.md +19 -13
  8. package/dist/docs/reference/configuration.md +77 -0
  9. package/dist/docs/reference/keyboard-shortcuts.md +1 -0
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/package.json +3 -2
  14. package/dist/src/agents/local-executor.js +8 -0
  15. package/dist/src/agents/local-executor.js.map +1 -1
  16. package/dist/src/agents/skill-extraction-agent.js +5 -4
  17. package/dist/src/agents/skill-extraction-agent.js.map +1 -1
  18. package/dist/src/agents/skill-extraction-agent.test.js +4 -2
  19. package/dist/src/agents/skill-extraction-agent.test.js.map +1 -1
  20. package/dist/src/agents/types.d.ts +2 -0
  21. package/dist/src/agents/types.js.map +1 -1
  22. package/dist/src/code_assist/server.js +16 -0
  23. package/dist/src/code_assist/server.js.map +1 -1
  24. package/dist/src/code_assist/server.test.js +18 -0
  25. package/dist/src/code_assist/server.test.js.map +1 -1
  26. package/dist/src/config/config.d.ts +6 -0
  27. package/dist/src/config/config.js +26 -8
  28. package/dist/src/config/config.js.map +1 -1
  29. package/dist/src/config/config.test.js +39 -1
  30. package/dist/src/config/config.test.js.map +1 -1
  31. package/dist/src/config/defaultModelConfigs.js +69 -0
  32. package/dist/src/config/defaultModelConfigs.js.map +1 -1
  33. package/dist/src/config/models.d.ts +5 -1
  34. package/dist/src/config/models.js +34 -6
  35. package/dist/src/config/models.js.map +1 -1
  36. package/dist/src/config/models.test.js +23 -1
  37. package/dist/src/config/models.test.js.map +1 -1
  38. package/dist/src/context/config/configLoader.d.ts +1 -2
  39. package/dist/src/context/config/configLoader.js +12 -7
  40. package/dist/src/context/config/configLoader.js.map +1 -1
  41. package/dist/src/context/config/configLoader.test.js +8 -12
  42. package/dist/src/context/config/configLoader.test.js.map +1 -1
  43. package/dist/src/context/config/profiles.d.ts +7 -1
  44. package/dist/src/context/config/profiles.js +46 -5
  45. package/dist/src/context/config/profiles.js.map +1 -1
  46. package/dist/src/context/contextManager.js +5 -3
  47. package/dist/src/context/contextManager.js.map +1 -1
  48. package/dist/src/context/eventBus.d.ts +7 -0
  49. package/dist/src/context/eventBus.js +6 -0
  50. package/dist/src/context/eventBus.js.map +1 -1
  51. package/dist/src/context/graph/builtinBehaviors.js +3 -3
  52. package/dist/src/context/graph/builtinBehaviors.js.map +1 -1
  53. package/dist/src/context/graph/mapper.d.ts +4 -2
  54. package/dist/src/context/graph/mapper.js +15 -3
  55. package/dist/src/context/graph/mapper.js.map +1 -1
  56. package/dist/src/context/graph/toGraph.d.ts +13 -2
  57. package/dist/src/context/graph/toGraph.js +88 -32
  58. package/dist/src/context/graph/toGraph.js.map +1 -1
  59. package/dist/src/context/historyObserver.d.ts +1 -0
  60. package/dist/src/context/historyObserver.js +25 -26
  61. package/dist/src/context/historyObserver.js.map +1 -1
  62. package/dist/src/context/initializer.d.ts +9 -0
  63. package/dist/src/context/initializer.js +75 -0
  64. package/dist/src/context/initializer.js.map +1 -0
  65. package/dist/src/context/pipeline/contextWorkingBuffer.js +12 -6
  66. package/dist/src/context/pipeline/contextWorkingBuffer.js.map +1 -1
  67. package/dist/src/context/pipeline/contextWorkingBuffer.test.js +1 -1
  68. package/dist/src/context/pipeline/environmentImpl.d.ts +3 -2
  69. package/dist/src/context/pipeline/environmentImpl.js +6 -3
  70. package/dist/src/context/pipeline/environmentImpl.js.map +1 -1
  71. package/dist/src/context/pipeline/environmentImpl.test.js +1 -1
  72. package/dist/src/context/pipeline/environmentImpl.test.js.map +1 -1
  73. package/dist/src/context/pipeline/orchestrator.js +5 -0
  74. package/dist/src/context/pipeline/orchestrator.js.map +1 -1
  75. package/dist/src/context/processors/toolMaskingProcessor.js +21 -5
  76. package/dist/src/context/processors/toolMaskingProcessor.js.map +1 -1
  77. package/dist/src/context/processors/toolMaskingProcessor.test.js +22 -0
  78. package/dist/src/context/processors/toolMaskingProcessor.test.js.map +1 -1
  79. package/dist/src/context/system-tests/lifecycle.golden.test.js +5 -0
  80. package/dist/src/context/system-tests/lifecycle.golden.test.js.map +1 -1
  81. package/dist/src/context/system-tests/simulationHarness.js +1 -1
  82. package/dist/src/context/system-tests/simulationHarness.js.map +1 -1
  83. package/dist/src/context/testing/contextTestUtils.js +7 -3
  84. package/dist/src/context/testing/contextTestUtils.js.map +1 -1
  85. package/dist/src/context/tracer.js +3 -1
  86. package/dist/src/context/tracer.js.map +1 -1
  87. package/dist/src/context/tracer.test.js +4 -2
  88. package/dist/src/context/tracer.test.js.map +1 -1
  89. package/dist/src/context/utils/contextTokenCalculator.d.ts +2 -1
  90. package/dist/src/context/utils/contextTokenCalculator.js +13 -11
  91. package/dist/src/context/utils/contextTokenCalculator.js.map +1 -1
  92. package/dist/src/core/client.d.ts +1 -0
  93. package/dist/src/core/client.js +9 -8
  94. package/dist/src/core/client.js.map +1 -1
  95. package/dist/src/core/client.test.js +0 -3
  96. package/dist/src/core/client.test.js.map +1 -1
  97. package/dist/src/core/geminiChat.d.ts +2 -1
  98. package/dist/src/core/geminiChat.js +72 -20
  99. package/dist/src/core/geminiChat.js.map +1 -1
  100. package/dist/src/core/geminiChat.test.js +1 -0
  101. package/dist/src/core/geminiChat.test.js.map +1 -1
  102. package/dist/src/core/geminiChat_network_retry.test.js +1 -0
  103. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  104. package/dist/src/core/tokenLimits.d.ts +1 -0
  105. package/dist/src/core/tokenLimits.js +5 -1
  106. package/dist/src/core/tokenLimits.js.map +1 -1
  107. package/dist/src/generated/git-commit.d.ts +2 -2
  108. package/dist/src/generated/git-commit.js +2 -2
  109. package/dist/src/index.d.ts +9 -1
  110. package/dist/src/index.js +10 -1
  111. package/dist/src/index.js.map +1 -1
  112. package/dist/src/policy/policy-engine.js +12 -7
  113. package/dist/src/policy/policy-engine.js.map +1 -1
  114. package/dist/src/policy/policy-engine.test.js +69 -1
  115. package/dist/src/policy/policy-engine.test.js.map +1 -1
  116. package/dist/src/prompts/snippets.js +2 -1
  117. package/dist/src/prompts/snippets.js.map +1 -1
  118. package/dist/src/prompts/snippets.legacy.js +2 -1
  119. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  120. package/dist/src/services/chatRecordingService.d.ts +1 -0
  121. package/dist/src/services/chatRecordingService.js +23 -0
  122. package/dist/src/services/chatRecordingService.js.map +1 -1
  123. package/dist/src/services/chatRecordingTypes.d.ts +13 -0
  124. package/dist/src/services/memoryService.d.ts +5 -0
  125. package/dist/src/services/memoryService.js +76 -53
  126. package/dist/src/services/memoryService.js.map +1 -1
  127. package/dist/src/services/memoryService.test.js +256 -12
  128. package/dist/src/services/memoryService.test.js.map +1 -1
  129. package/dist/src/services/sessionScratchpadUtils.d.ts +7 -0
  130. package/dist/src/services/sessionScratchpadUtils.js +121 -0
  131. package/dist/src/services/sessionScratchpadUtils.js.map +1 -0
  132. package/dist/src/services/sessionScratchpadUtils.test.d.ts +6 -0
  133. package/dist/src/services/sessionScratchpadUtils.test.js +27 -0
  134. package/dist/src/services/sessionScratchpadUtils.test.js.map +1 -0
  135. package/dist/src/services/sessionSummaryUtils.d.ts +3 -3
  136. package/dist/src/services/sessionSummaryUtils.js +232 -27
  137. package/dist/src/services/sessionSummaryUtils.js.map +1 -1
  138. package/dist/src/services/sessionSummaryUtils.test.js +449 -10
  139. package/dist/src/services/sessionSummaryUtils.test.js.map +1 -1
  140. package/dist/src/services/test-data/resolved-aliases-retry.golden.json +24 -0
  141. package/dist/src/services/test-data/resolved-aliases.golden.json +24 -0
  142. package/dist/src/tools/mcp-client.js +12 -2
  143. package/dist/src/tools/mcp-client.js.map +1 -1
  144. package/dist/src/tools/trackerTools.test.js +7 -2
  145. package/dist/src/tools/trackerTools.test.js.map +1 -1
  146. package/dist/src/utils/binaryCheck.d.ts +9 -0
  147. package/dist/src/utils/binaryCheck.js +13 -0
  148. package/dist/src/utils/binaryCheck.js.map +1 -0
  149. package/dist/src/utils/fsErrorMessages.js +4 -0
  150. package/dist/src/utils/fsErrorMessages.js.map +1 -1
  151. package/dist/src/utils/fsErrorMessages.test.js +21 -0
  152. package/dist/src/utils/fsErrorMessages.test.js.map +1 -1
  153. package/dist/src/utils/tokenCalculation.d.ts +2 -2
  154. package/dist/src/utils/tokenCalculation.js +15 -14
  155. package/dist/src/utils/tokenCalculation.js.map +1 -1
  156. package/dist/src/voice/audioRecorder.d.ts +27 -0
  157. package/dist/src/voice/audioRecorder.js +95 -0
  158. package/dist/src/voice/audioRecorder.js.map +1 -0
  159. package/dist/src/voice/geminiLiveTranscriptionProvider.d.ts +20 -0
  160. package/dist/src/voice/geminiLiveTranscriptionProvider.js +140 -0
  161. package/dist/src/voice/geminiLiveTranscriptionProvider.js.map +1 -0
  162. package/dist/src/voice/transcriptionFactory.d.ts +12 -0
  163. package/dist/src/voice/transcriptionFactory.js +32 -0
  164. package/dist/src/voice/transcriptionFactory.js.map +1 -0
  165. package/dist/src/voice/transcriptionProvider.d.ts +29 -0
  166. package/dist/src/voice/transcriptionProvider.js +7 -0
  167. package/dist/src/voice/transcriptionProvider.js.map +1 -0
  168. package/dist/src/voice/whisperModelManager.d.ts +26 -0
  169. package/dist/src/voice/whisperModelManager.js +79 -0
  170. package/dist/src/voice/whisperModelManager.js.map +1 -0
  171. package/dist/src/voice/whisperTranscriptionProvider.d.ts +34 -0
  172. package/dist/src/voice/whisperTranscriptionProvider.js +151 -0
  173. package/dist/src/voice/whisperTranscriptionProvider.js.map +1 -0
  174. package/dist/src/voice/whisperTranscriptionProvider.test.d.ts +6 -0
  175. package/dist/src/voice/whisperTranscriptionProvider.test.js +24 -0
  176. package/dist/src/voice/whisperTranscriptionProvider.test.js.map +1 -0
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +3 -2
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SHELL_TOOL_NAME } from '../tools/definitions/base-declarations.js';
7
+ const WORKFLOW_PART_SEPARATOR = ' | ';
8
+ const TOOL_SEQUENCE_SEPARATOR = ' -> ';
9
+ const SHELL_ASSIGNMENT_REGEX = /^[A-Za-z_][A-Za-z0-9_]*=/;
10
+ const SAFE_COMMAND_NAME_REGEX = /^[A-Za-z0-9_.@+-]+$/;
11
+ const SAFE_TOOL_SEQUENCE_ENTRY_REGEX = /^[A-Za-z_][A-Za-z0-9_:.]*$/;
12
+ function tokenizeShellCommand(command) {
13
+ const tokens = [];
14
+ let currentToken = '';
15
+ let quote;
16
+ for (let i = 0; i < command.length; i++) {
17
+ const char = command[i];
18
+ if (quote) {
19
+ if (char === quote) {
20
+ quote = undefined;
21
+ continue;
22
+ }
23
+ if (quote === '"' && char === '\\' && i + 1 < command.length) {
24
+ currentToken += command[i + 1];
25
+ i++;
26
+ continue;
27
+ }
28
+ currentToken += char;
29
+ continue;
30
+ }
31
+ if (char === ' ' || char === '\t' || char === '\n' || char === '\r') {
32
+ if (currentToken) {
33
+ tokens.push(currentToken);
34
+ currentToken = '';
35
+ }
36
+ continue;
37
+ }
38
+ if (char === '"' || char === "'" || char === '`') {
39
+ quote = char;
40
+ continue;
41
+ }
42
+ currentToken += char;
43
+ }
44
+ if (currentToken) {
45
+ tokens.push(currentToken);
46
+ }
47
+ return tokens;
48
+ }
49
+ function getSafeCommandName(token) {
50
+ if (!token || SHELL_ASSIGNMENT_REGEX.test(token)) {
51
+ return undefined;
52
+ }
53
+ const pathParts = token.split(/[/\\]/).filter(Boolean);
54
+ const basename = pathParts[pathParts.length - 1] ?? token;
55
+ if (!basename || basename.includes('://')) {
56
+ return 'shell';
57
+ }
58
+ return SAFE_COMMAND_NAME_REGEX.test(basename) ? basename : 'shell';
59
+ }
60
+ export function summarizeShellCommandForScratchpad(command) {
61
+ const normalized = command.replace(/\s+/g, ' ').trim();
62
+ if (normalized.length === 0) {
63
+ return undefined;
64
+ }
65
+ for (const token of tokenizeShellCommand(normalized)) {
66
+ const commandName = getSafeCommandName(token);
67
+ if (commandName) {
68
+ return commandName;
69
+ }
70
+ }
71
+ return undefined;
72
+ }
73
+ function sanitizeWorkflowToolSequenceEntry(entry) {
74
+ const trimmed = entry.trim();
75
+ if (!trimmed) {
76
+ return undefined;
77
+ }
78
+ const shellPrefix = `${SHELL_TOOL_NAME}:`;
79
+ if (trimmed.startsWith(shellPrefix)) {
80
+ const command = trimmed.slice(shellPrefix.length).trim();
81
+ const commandSummary = summarizeShellCommandForScratchpad(command);
82
+ return commandSummary
83
+ ? `${SHELL_TOOL_NAME}: ${commandSummary}`
84
+ : SHELL_TOOL_NAME;
85
+ }
86
+ if (trimmed === SHELL_TOOL_NAME ||
87
+ SAFE_TOOL_SEQUENCE_ENTRY_REGEX.test(trimmed)) {
88
+ return trimmed;
89
+ }
90
+ return undefined;
91
+ }
92
+ export function sanitizeWorkflowSummaryForScratchpad(summary) {
93
+ const normalized = summary.replace(/\s+/g, ' ').trim();
94
+ if (!normalized.includes(`${SHELL_TOOL_NAME}:`)) {
95
+ return normalized;
96
+ }
97
+ const sanitizedParts = [];
98
+ for (const part of normalized.split(WORKFLOW_PART_SEPARATOR)) {
99
+ const trimmed = part.trim();
100
+ if (!trimmed) {
101
+ continue;
102
+ }
103
+ if (trimmed.includes(`${SHELL_TOOL_NAME}:`)) {
104
+ const sanitizedToolSequence = trimmed
105
+ .split(TOOL_SEQUENCE_SEPARATOR)
106
+ .map(sanitizeWorkflowToolSequenceEntry)
107
+ .filter((entry) => Boolean(entry));
108
+ if (sanitizedToolSequence.length > 0) {
109
+ sanitizedParts.push(sanitizedToolSequence.join(TOOL_SEQUENCE_SEPARATOR));
110
+ }
111
+ continue;
112
+ }
113
+ if (trimmed.startsWith('paths ') ||
114
+ trimmed === 'validated' ||
115
+ trimmed === 'validation failed') {
116
+ sanitizedParts.push(trimmed);
117
+ }
118
+ }
119
+ return sanitizedParts.join(WORKFLOW_PART_SEPARATOR);
120
+ }
121
+ //# sourceMappingURL=sessionScratchpadUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionScratchpadUtils.js","sourceRoot":"","sources":["../../../src/services/sessionScratchpadUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it } from 'vitest';
7
+ import { SHELL_TOOL_NAME } from '../tools/definitions/base-declarations.js';
8
+ import { sanitizeWorkflowSummaryForScratchpad, summarizeShellCommandForScratchpad, } from './sessionScratchpadUtils.js';
9
+ describe('sessionScratchpadUtils', () => {
10
+ describe('summarizeShellCommandForScratchpad', () => {
11
+ it('summarizes quoted and assignment-prefixed shell commands', () => {
12
+ expect(summarizeShellCommandForScratchpad('"npm" run test')).toBe('npm');
13
+ expect(summarizeShellCommandForScratchpad('DATABASE_URL=postgres://user:password@example/db pnpm test')).toBe('pnpm');
14
+ });
15
+ it('handles adversarial unterminated quoted input without exposing arguments', () => {
16
+ const adversarialCommand = `"${'\\"!'.repeat(10_000)}`;
17
+ expect(summarizeShellCommandForScratchpad(adversarialCommand)).toBe('shell');
18
+ });
19
+ });
20
+ describe('sanitizeWorkflowSummaryForScratchpad', () => {
21
+ it('sanitizes adversarial shell commands in workflow summaries', () => {
22
+ const adversarialCommand = `"${'\\"!'.repeat(10_000)}`;
23
+ expect(sanitizeWorkflowSummaryForScratchpad(`${SHELL_TOOL_NAME}: ${adversarialCommand} -> read_file`)).toBe(`${SHELL_TOOL_NAME}: shell -> read_file`);
24
+ });
25
+ });
26
+ });
27
+ //# sourceMappingURL=sessionScratchpadUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionScratchpadUtils.test.js","sourceRoot":"","sources":["../../../src/services/sessionScratchpadUtils.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EACL,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,6BAA6B,CAAC;AAErC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,CACJ,kCAAkC,CAChC,4DAA4D,CAC7D,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAEvD,MAAM,CAAC,kCAAkC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CACjE,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAEvD,MAAM,CACJ,oCAAoC,CAClC,GAAG,eAAe,KAAK,kBAAkB,eAAe,CACzD,CACF,CAAC,IAAI,CAAC,GAAG,eAAe,sBAAsB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -5,12 +5,12 @@
5
5
  */
6
6
  import type { Config } from '../config/config.js';
7
7
  /**
8
- * Finds the most recently updated previous session that still needs a summary.
9
- * Returns the path if it needs a summary, null otherwise.
8
+ * Finds the most recently updated previous session that still needs workflow metadata.
9
+ * Returns the path if it needs a scratchpad, null otherwise.
10
10
  */
11
11
  export declare function getPreviousSession(config: Config): Promise<string | null>;
12
12
  /**
13
- * Generates summary for the previous session if it lacks one.
13
+ * Generates summary metadata for the previous session if it lacks a scratchpad.
14
14
  * This is designed to be called fire-and-forget on startup.
15
15
  */
16
16
  export declare function generateSummary(config: Config): Promise<void>;
@@ -7,9 +7,19 @@ import { SessionSummaryService } from './sessionSummaryService.js';
7
7
  import { BaseLlmClient } from '../core/baseLlmClient.js';
8
8
  import { debugLogger } from '../utils/debugLogger.js';
9
9
  import { SESSION_FILE_PREFIX, loadConversationRecord, } from './chatRecordingService.js';
10
+ import { CoreToolCallStatus } from '../scheduler/types.js';
11
+ import { SHELL_TOOL_NAME } from '../tools/definitions/base-declarations.js';
12
+ import { summarizeShellCommandForScratchpad } from './sessionScratchpadUtils.js';
10
13
  import fs from 'node:fs/promises';
11
14
  import path from 'node:path';
12
15
  const MIN_MESSAGES_FOR_SUMMARY = 1;
16
+ const MAX_SCRATCHPAD_TOOLS = 6;
17
+ const MAX_SCRATCHPAD_PATHS = 4;
18
+ const MAX_SCRATCHPAD_PATH_DEPTH = 6;
19
+ const MAX_WORKFLOW_SUMMARY_LENGTH = 160;
20
+ const VALIDATION_COMMAND_REGEX = /\b(test|tests|vitest|jest|pytest|cargo test|npm test|pnpm test|yarn test|bun test|lint|build|check|typecheck)\b/i;
21
+ const PATH_KEY_REGEX = /(path|file|dir|directory|cwd|root)/i;
22
+ const VALIDATION_TOOL_REGEX = /\b(test|lint|build|check|typecheck)\b/i;
13
23
  function isSupportedSessionFile(fileName) {
14
24
  return (fileName.startsWith(SESSION_FILE_PREFIX) &&
15
25
  (fileName.endsWith('.json') || fileName.endsWith('.jsonl')));
@@ -46,6 +56,170 @@ function getSessionTimestampMs(session) {
46
56
  const parsed = Date.parse(session.lastUpdated);
47
57
  return Number.isNaN(parsed) ? 0 : parsed;
48
58
  }
59
+ function normalizeToolName(name) {
60
+ const trimmed = name.trim();
61
+ return trimmed.length > 0 ? trimmed : 'unknown_tool';
62
+ }
63
+ function pushUniqueLimited(target, value, limit) {
64
+ if (!value || target.includes(value) || target.length >= limit) {
65
+ return;
66
+ }
67
+ target.push(value);
68
+ }
69
+ function normalizePathCandidate(candidate, projectRoot) {
70
+ const trimmed = candidate.trim();
71
+ if (trimmed.length === 0 ||
72
+ trimmed.length > 240 ||
73
+ trimmed.includes('\n') ||
74
+ (!trimmed.includes('/') &&
75
+ !trimmed.includes('\\') &&
76
+ !trimmed.startsWith('.') &&
77
+ path.extname(trimmed).length === 0)) {
78
+ return null;
79
+ }
80
+ let normalized = trimmed.replace(/\\/g, '/');
81
+ if (path.isAbsolute(trimmed)) {
82
+ const relative = path.relative(projectRoot, trimmed);
83
+ normalized =
84
+ relative && !relative.startsWith('..') && !path.isAbsolute(relative)
85
+ ? relative.replace(/\\/g, '/')
86
+ : path.basename(trimmed);
87
+ }
88
+ if (normalized.length > 120) {
89
+ normalized = normalized.split('/').slice(-3).join('/');
90
+ }
91
+ return normalized.length > 0 ? normalized : null;
92
+ }
93
+ function collectPathsFromValue(value, projectRoot, paths, keyHint, depth = 0) {
94
+ if (paths.length >= MAX_SCRATCHPAD_PATHS ||
95
+ depth > MAX_SCRATCHPAD_PATH_DEPTH) {
96
+ return;
97
+ }
98
+ if (typeof value === 'string') {
99
+ if (!keyHint || !PATH_KEY_REGEX.test(keyHint)) {
100
+ return;
101
+ }
102
+ const normalized = normalizePathCandidate(value, projectRoot);
103
+ if (normalized) {
104
+ pushUniqueLimited(paths, normalized, MAX_SCRATCHPAD_PATHS);
105
+ }
106
+ return;
107
+ }
108
+ if (Array.isArray(value)) {
109
+ for (const item of value) {
110
+ collectPathsFromValue(item, projectRoot, paths, keyHint, depth + 1);
111
+ if (paths.length >= MAX_SCRATCHPAD_PATHS) {
112
+ return;
113
+ }
114
+ }
115
+ return;
116
+ }
117
+ if (typeof value !== 'object' || value === null) {
118
+ return;
119
+ }
120
+ for (const [key, nestedValue] of Object.entries(value)) {
121
+ collectPathsFromValue(nestedValue, projectRoot, paths, key, depth + 1);
122
+ if (paths.length >= MAX_SCRATCHPAD_PATHS) {
123
+ return;
124
+ }
125
+ }
126
+ }
127
+ function getToolCallCommand(toolCall) {
128
+ for (const key of ['command', 'cmd', 'script']) {
129
+ const value = toolCall.args[key];
130
+ if (typeof value === 'string' && value.trim().length > 0) {
131
+ return value;
132
+ }
133
+ }
134
+ return undefined;
135
+ }
136
+ function getToolSequenceEntry(toolCall) {
137
+ const toolName = normalizeToolName(toolCall.name);
138
+ if (toolName !== SHELL_TOOL_NAME) {
139
+ return toolName;
140
+ }
141
+ const command = getToolCallCommand(toolCall);
142
+ const commandSummary = command
143
+ ? summarizeShellCommandForScratchpad(command)
144
+ : undefined;
145
+ return commandSummary ? `${toolName}: ${commandSummary}` : toolName;
146
+ }
147
+ function getValidationStatusForToolCall(toolCall) {
148
+ const command = getToolCallCommand(toolCall);
149
+ const isValidationTool = VALIDATION_TOOL_REGEX.test(toolCall.name) ||
150
+ (command ? VALIDATION_COMMAND_REGEX.test(command) : false);
151
+ if (!isValidationTool) {
152
+ return undefined;
153
+ }
154
+ if (toolCall.status === CoreToolCallStatus.Success) {
155
+ return 'passed';
156
+ }
157
+ if (toolCall.status === CoreToolCallStatus.Error ||
158
+ toolCall.status === CoreToolCallStatus.Cancelled) {
159
+ return 'failed';
160
+ }
161
+ return 'unknown';
162
+ }
163
+ function buildWorkflowSummary(toolSequence, touchedPaths, validationStatus) {
164
+ const parts = [];
165
+ if (toolSequence.length > 0) {
166
+ parts.push(toolSequence.join(' -> '));
167
+ }
168
+ if (touchedPaths.length > 0) {
169
+ parts.push(`paths ${touchedPaths.join(', ')}`);
170
+ }
171
+ if (validationStatus === 'passed') {
172
+ parts.push('validated');
173
+ }
174
+ else if (validationStatus === 'failed') {
175
+ parts.push('validation failed');
176
+ }
177
+ if (parts.length === 0) {
178
+ return undefined;
179
+ }
180
+ const summary = parts.join(' | ');
181
+ if (summary.length === 0) {
182
+ return undefined;
183
+ }
184
+ return summary.length > MAX_WORKFLOW_SUMMARY_LENGTH
185
+ ? `${summary.slice(0, MAX_WORKFLOW_SUMMARY_LENGTH - 3)}...`
186
+ : summary;
187
+ }
188
+ function buildMemoryScratchpad(messages, projectRoot) {
189
+ const toolSequence = [];
190
+ const touchedPaths = [];
191
+ let validationStatus;
192
+ for (const message of messages) {
193
+ if (message.type !== 'gemini' || !message.toolCalls) {
194
+ continue;
195
+ }
196
+ for (const toolCall of message.toolCalls) {
197
+ pushUniqueLimited(toolSequence, getToolSequenceEntry(toolCall), MAX_SCRATCHPAD_TOOLS);
198
+ collectPathsFromValue(toolCall.args, projectRoot, touchedPaths);
199
+ const toolValidationStatus = getValidationStatusForToolCall(toolCall);
200
+ if (toolValidationStatus) {
201
+ validationStatus = toolValidationStatus;
202
+ }
203
+ }
204
+ }
205
+ const workflowSummary = buildWorkflowSummary(toolSequence, touchedPaths, validationStatus);
206
+ return {
207
+ version: 1,
208
+ ...(workflowSummary ? { workflowSummary } : {}),
209
+ ...(toolSequence.length > 0 ? { toolSequence } : {}),
210
+ ...(touchedPaths.length > 0 ? { touchedPaths } : {}),
211
+ ...(validationStatus ? { validationStatus } : {}),
212
+ };
213
+ }
214
+ function hasCurrentMemoryScratchpad(session) {
215
+ return Boolean(session.memoryScratchpad && session.memoryScratchpadIsStale !== true);
216
+ }
217
+ function hasSessionSummaryMetadata(session) {
218
+ return hasCurrentMemoryScratchpad(session);
219
+ }
220
+ function getLoadedMessageCount(session) {
221
+ return session.messageCount ?? session.messages.length;
222
+ }
49
223
  /**
50
224
  * Generates and saves a summary for a session file.
51
225
  */
@@ -55,9 +229,10 @@ async function generateAndSaveSummary(config, sessionPath) {
55
229
  debugLogger.debug(`[SessionSummary] Could not read session ${sessionPath}`);
56
230
  return;
57
231
  }
58
- // Skip if summary already exists
59
- if (conversation.summary) {
60
- debugLogger.debug(`[SessionSummary] Summary already exists for ${sessionPath}, skipping`);
232
+ // Skip if workflow metadata already exists; memory extraction can use the
233
+ // scratchpad even when summary generation was unavailable.
234
+ if (hasSessionSummaryMetadata(conversation)) {
235
+ debugLogger.debug(`[SessionSummary] Summary metadata already exists for ${sessionPath}, skipping`);
61
236
  return;
62
237
  }
63
238
  // Skip if no messages
@@ -65,22 +240,25 @@ async function generateAndSaveSummary(config, sessionPath) {
65
240
  debugLogger.debug(`[SessionSummary] No messages to summarize in ${sessionPath}`);
66
241
  return;
67
242
  }
68
- // Create summary service
69
- const contentGenerator = config.getContentGenerator();
70
- if (!contentGenerator) {
71
- debugLogger.debug('[SessionSummary] Content generator not available, skipping summary generation');
72
- return;
73
- }
74
- const baseLlmClient = new BaseLlmClient(contentGenerator, config);
75
- const summaryService = new SessionSummaryService(baseLlmClient);
76
- // Generate summary
77
- const summary = await summaryService.generateSummary({
78
- messages: conversation.messages,
79
- });
243
+ let summary = conversation.summary;
80
244
  if (!summary) {
81
- debugLogger.warn(`[SessionSummary] Failed to generate summary for ${sessionPath}`);
82
- return;
245
+ const contentGenerator = config.getContentGenerator();
246
+ if (!contentGenerator) {
247
+ debugLogger.debug('[SessionSummary] Content generator not available, skipping summary generation');
248
+ }
249
+ else {
250
+ const baseLlmClient = new BaseLlmClient(contentGenerator, config);
251
+ const summaryService = new SessionSummaryService(baseLlmClient);
252
+ summary =
253
+ (await summaryService.generateSummary({
254
+ messages: conversation.messages,
255
+ })) ?? undefined;
256
+ if (!summary) {
257
+ debugLogger.warn(`[SessionSummary] Failed to generate summary for ${sessionPath}`);
258
+ }
259
+ }
83
260
  }
261
+ let scratchpadSourceConversation = conversation;
84
262
  // Re-read the file before writing to handle race conditions. For JSONL we
85
263
  // only need the metadata; for legacy JSON we need the full record so we can
86
264
  // round-trip the messages back to disk.
@@ -92,27 +270,52 @@ async function generateAndSaveSummary(config, sessionPath) {
92
270
  debugLogger.debug(`[SessionSummary] Could not re-read ${sessionPath}`);
93
271
  return;
94
272
  }
95
- // Check if summary was added by another process
96
- if (freshConversation.summary) {
97
- debugLogger.debug(`[SessionSummary] Summary was added by another process for ${sessionPath}`);
273
+ // Check if summary metadata was added by another process
274
+ if (hasSessionSummaryMetadata(freshConversation)) {
275
+ debugLogger.debug(`[SessionSummary] Summary metadata was added by another process for ${sessionPath}`);
276
+ return;
277
+ }
278
+ if (!hasCurrentMemoryScratchpad(freshConversation) &&
279
+ (getLoadedMessageCount(freshConversation) !==
280
+ getLoadedMessageCount(conversation) ||
281
+ freshConversation.lastUpdated !== conversation.lastUpdated)) {
282
+ const latestConversation = await loadConversationRecord(sessionPath);
283
+ if (!latestConversation) {
284
+ debugLogger.debug(`[SessionSummary] Could not re-read ${sessionPath}`);
285
+ return;
286
+ }
287
+ if (hasSessionSummaryMetadata(latestConversation)) {
288
+ debugLogger.debug(`[SessionSummary] Summary metadata was added by another process for ${sessionPath}`);
289
+ return;
290
+ }
291
+ scratchpadSourceConversation = latestConversation;
292
+ }
293
+ const metadataUpdate = {};
294
+ if (!freshConversation.summary && summary) {
295
+ metadataUpdate.summary = summary;
296
+ }
297
+ if (!hasCurrentMemoryScratchpad(freshConversation)) {
298
+ metadataUpdate.memoryScratchpad = buildMemoryScratchpad(scratchpadSourceConversation.messages, config.getProjectRoot());
299
+ }
300
+ if (Object.keys(metadataUpdate).length === 0) {
98
301
  return;
99
302
  }
100
303
  if (isJsonl) {
101
- await fs.appendFile(sessionPath, `${JSON.stringify({ $set: { summary } })}\n`);
304
+ await fs.appendFile(sessionPath, `${JSON.stringify({ $set: metadataUpdate })}\n`);
102
305
  }
103
306
  else {
104
307
  const lastUpdated = freshConversation.lastUpdated;
105
308
  await fs.writeFile(sessionPath, JSON.stringify({
106
309
  ...freshConversation,
107
- summary,
310
+ ...metadataUpdate,
108
311
  lastUpdated,
109
312
  }, null, 2));
110
313
  }
111
- debugLogger.debug(`[SessionSummary] Saved summary for ${sessionPath}: "${summary}"`);
314
+ debugLogger.debug(`[SessionSummary] Saved summary metadata for ${sessionPath}${summary ? `: "${summary}"` : ''}`);
112
315
  }
113
316
  /**
114
- * Finds the most recently updated previous session that still needs a summary.
115
- * Returns the path if it needs a summary, null otherwise.
317
+ * Finds the most recently updated previous session that still needs workflow metadata.
318
+ * Returns the path if it needs a scratchpad, null otherwise.
116
319
  */
117
320
  export async function getPreviousSession(config) {
118
321
  try {
@@ -149,7 +352,9 @@ export async function getPreviousSession(config) {
149
352
  continue;
150
353
  if (conversation.sessionId === config.getSessionId())
151
354
  continue;
152
- if (conversation.summary)
355
+ if (conversation.kind === 'subagent')
356
+ continue;
357
+ if (hasSessionSummaryMetadata(conversation))
153
358
  continue;
154
359
  // Only generate summaries for sessions with more than 1 user message.
155
360
  // `loadConversationRecord` populates `userMessageCount` in metadataOnly
@@ -187,7 +392,7 @@ export async function getPreviousSession(config) {
187
392
  }
188
393
  }
189
394
  /**
190
- * Generates summary for the previous session if it lacks one.
395
+ * Generates summary metadata for the previous session if it lacks a scratchpad.
191
396
  * This is designed to be called fire-and-forget on startup.
192
397
  */
193
398
  export async function generateSummary(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"sessionSummaryUtils.js","sourceRoot":"","sources":["../../../src/services/sessionSummaryUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionSummaryUtils.js","sourceRoot":"","sources":["../../../src/services/sessionSummaryUtils.ts"],"names":[],"mappings":"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"}