@x-code-cli/core 0.2.1 → 0.2.3

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 (147) hide show
  1. package/dist/agent/api-errors.js +1 -1
  2. package/dist/agent/api-errors.js.map +1 -1
  3. package/dist/agent/compression.d.ts +25 -0
  4. package/dist/agent/compression.d.ts.map +1 -0
  5. package/dist/agent/compression.js +105 -0
  6. package/dist/agent/compression.js.map +1 -0
  7. package/dist/agent/diff.js.map +1 -1
  8. package/dist/agent/file-ingest.d.ts +14 -0
  9. package/dist/agent/file-ingest.d.ts.map +1 -1
  10. package/dist/agent/file-ingest.js +125 -34
  11. package/dist/agent/file-ingest.js.map +1 -1
  12. package/dist/agent/light-compact.d.ts.map +1 -1
  13. package/dist/agent/light-compact.js +0 -19
  14. package/dist/agent/light-compact.js.map +1 -1
  15. package/dist/agent/loop-guard.d.ts.map +1 -1
  16. package/dist/agent/loop-guard.js.map +1 -1
  17. package/dist/agent/loop-state.d.ts.map +1 -1
  18. package/dist/agent/loop-state.js +8 -1
  19. package/dist/agent/loop-state.js.map +1 -1
  20. package/dist/agent/loop.d.ts +2 -3
  21. package/dist/agent/loop.d.ts.map +1 -1
  22. package/dist/agent/loop.js +53 -93
  23. package/dist/agent/loop.js.map +1 -1
  24. package/dist/agent/memory-extractor.d.ts +22 -0
  25. package/dist/agent/memory-extractor.d.ts.map +1 -0
  26. package/dist/agent/memory-extractor.js +253 -0
  27. package/dist/agent/memory-extractor.js.map +1 -0
  28. package/dist/agent/messages.d.ts +9 -0
  29. package/dist/agent/messages.d.ts.map +1 -1
  30. package/dist/agent/messages.js +15 -0
  31. package/dist/agent/messages.js.map +1 -1
  32. package/dist/agent/plan-storage.d.ts.map +1 -1
  33. package/dist/agent/plan-storage.js +1 -1
  34. package/dist/agent/plan-storage.js.map +1 -1
  35. package/dist/agent/plan-tools.d.ts +8 -0
  36. package/dist/agent/plan-tools.d.ts.map +1 -0
  37. package/dist/agent/plan-tools.js +150 -0
  38. package/dist/agent/plan-tools.js.map +1 -0
  39. package/dist/agent/provider-compat.d.ts.map +1 -1
  40. package/dist/agent/provider-compat.js.map +1 -1
  41. package/dist/agent/sub-agents/built-in.d.ts.map +1 -1
  42. package/dist/agent/sub-agents/built-in.js +41 -15
  43. package/dist/agent/sub-agents/built-in.js.map +1 -1
  44. package/dist/agent/sub-agents/loader.d.ts.map +1 -1
  45. package/dist/agent/sub-agents/loader.js.map +1 -1
  46. package/dist/agent/sub-agents/runner.d.ts.map +1 -1
  47. package/dist/agent/sub-agents/runner.js +12 -8
  48. package/dist/agent/sub-agents/runner.js.map +1 -1
  49. package/dist/agent/system-prompt.d.ts.map +1 -1
  50. package/dist/agent/system-prompt.js +0 -31
  51. package/dist/agent/system-prompt.js.map +1 -1
  52. package/dist/agent/tool-execution.d.ts +34 -2
  53. package/dist/agent/tool-execution.d.ts.map +1 -1
  54. package/dist/agent/tool-execution.js +363 -360
  55. package/dist/agent/tool-execution.js.map +1 -1
  56. package/dist/agent/tool-result-sanitize.d.ts +21 -7
  57. package/dist/agent/tool-result-sanitize.d.ts.map +1 -1
  58. package/dist/agent/tool-result-sanitize.js +56 -30
  59. package/dist/agent/tool-result-sanitize.js.map +1 -1
  60. package/dist/agent/vision-fallback.d.ts.map +1 -1
  61. package/dist/agent/vision-fallback.js +3 -14
  62. package/dist/agent/vision-fallback.js.map +1 -1
  63. package/dist/index.d.ts +3 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/knowledge/loader.d.ts.map +1 -1
  68. package/dist/knowledge/loader.js +50 -23
  69. package/dist/knowledge/loader.js.map +1 -1
  70. package/dist/permissions/index.d.ts +9 -4
  71. package/dist/permissions/index.d.ts.map +1 -1
  72. package/dist/permissions/index.js +41 -7
  73. package/dist/permissions/index.js.map +1 -1
  74. package/dist/permissions/session-store.d.ts +34 -20
  75. package/dist/permissions/session-store.d.ts.map +1 -1
  76. package/dist/permissions/session-store.js +94 -34
  77. package/dist/permissions/session-store.js.map +1 -1
  78. package/dist/providers/cache-control.d.ts.map +1 -1
  79. package/dist/providers/cache-control.js +0 -29
  80. package/dist/providers/cache-control.js.map +1 -1
  81. package/dist/providers/thinking.d.ts.map +1 -1
  82. package/dist/providers/thinking.js +2 -6
  83. package/dist/providers/thinking.js.map +1 -1
  84. package/dist/tools/ask-user.d.ts.map +1 -1
  85. package/dist/tools/ask-user.js +17 -7
  86. package/dist/tools/ask-user.js.map +1 -1
  87. package/dist/tools/edit.d.ts.map +1 -1
  88. package/dist/tools/edit.js +8 -1
  89. package/dist/tools/edit.js.map +1 -1
  90. package/dist/tools/glob.d.ts.map +1 -1
  91. package/dist/tools/glob.js +9 -2
  92. package/dist/tools/glob.js.map +1 -1
  93. package/dist/tools/grep.d.ts +1 -1
  94. package/dist/tools/grep.d.ts.map +1 -1
  95. package/dist/tools/grep.js +29 -6
  96. package/dist/tools/grep.js.map +1 -1
  97. package/dist/tools/index.d.ts +2 -10
  98. package/dist/tools/index.d.ts.map +1 -1
  99. package/dist/tools/index.js +10 -3
  100. package/dist/tools/index.js.map +1 -1
  101. package/dist/tools/list-dir.d.ts.map +1 -1
  102. package/dist/tools/list-dir.js.map +1 -1
  103. package/dist/tools/read-file.d.ts.map +1 -1
  104. package/dist/tools/read-file.js +78 -36
  105. package/dist/tools/read-file.js.map +1 -1
  106. package/dist/tools/shell-provider.d.ts +1 -0
  107. package/dist/tools/shell-provider.d.ts.map +1 -1
  108. package/dist/tools/shell-provider.js +7 -0
  109. package/dist/tools/shell-provider.js.map +1 -1
  110. package/dist/tools/shell-utils.d.ts.map +1 -1
  111. package/dist/tools/shell-utils.js +45 -2
  112. package/dist/tools/shell-utils.js.map +1 -1
  113. package/dist/tools/shell.d.ts.map +1 -1
  114. package/dist/tools/shell.js +15 -1
  115. package/dist/tools/shell.js.map +1 -1
  116. package/dist/tools/task.d.ts.map +1 -1
  117. package/dist/tools/task.js +4 -4
  118. package/dist/tools/task.js.map +1 -1
  119. package/dist/tools/todo-write.d.ts.map +1 -1
  120. package/dist/tools/todo-write.js.map +1 -1
  121. package/dist/tools/web-fetch.d.ts +2 -0
  122. package/dist/tools/web-fetch.d.ts.map +1 -1
  123. package/dist/tools/web-fetch.js +92 -27
  124. package/dist/tools/web-fetch.js.map +1 -1
  125. package/dist/tools/write-file.d.ts.map +1 -1
  126. package/dist/tools/write-file.js +7 -1
  127. package/dist/tools/write-file.js.map +1 -1
  128. package/dist/types/index.d.ts +17 -1
  129. package/dist/types/index.d.ts.map +1 -1
  130. package/dist/types/index.js.map +1 -1
  131. package/dist/utils/lru-cache.d.ts +17 -0
  132. package/dist/utils/lru-cache.d.ts.map +1 -0
  133. package/dist/utils/lru-cache.js +40 -0
  134. package/dist/utils/lru-cache.js.map +1 -0
  135. package/dist/utils/media-type.d.ts +5 -0
  136. package/dist/utils/media-type.d.ts.map +1 -0
  137. package/dist/utils/media-type.js +19 -0
  138. package/dist/utils/media-type.js.map +1 -0
  139. package/dist/utils/message-helpers.d.ts +6 -0
  140. package/dist/utils/message-helpers.d.ts.map +1 -0
  141. package/dist/utils/message-helpers.js +14 -0
  142. package/dist/utils/message-helpers.js.map +1 -0
  143. package/package.json +1 -1
  144. package/dist/tools/save-knowledge.d.ts +0 -8
  145. package/dist/tools/save-knowledge.d.ts.map +0 -1
  146. package/dist/tools/save-knowledge.js +0 -61
  147. package/dist/tools/save-knowledge.js.map +0 -1
@@ -1,9 +1,8 @@
1
- import type { LanguageModel, ModelMessage, UserContent } from 'ai';
1
+ import type { LanguageModel, UserContent } from 'ai';
2
2
  import type { AgentCallbacks, AgentOptions } from '../types/index.js';
3
3
  import type { LoopState } from './loop-state.js';
4
4
  export type { LoopState } from './loop-state.js';
5
- /** Compress old messages into a summary. */
6
- export declare function compressMessages(messages: ModelMessage[], model: LanguageModel): Promise<ModelMessage[]>;
5
+ export { compressMessages } from './compression.js';
7
6
  /** Main agent loop. */
8
7
  export declare function agentLoop(userMessage: UserContent, model: LanguageModel, options: AgentOptions, callbacks: AgentCallbacks, existingState?: LoopState): Promise<LoopState>;
9
8
  /** Sync any in-memory messages to the session jsonl. Called on exit /
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AASlE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA6BrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQhD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKhD,4CAA4C;AAC5C,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAc9G;AAwVD,uBAAuB;AACvB,wBAAsB,SAAS,CAC7B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc,EACzB,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,CAAC,SAAS,CAAC,CA4LpB;AAED;;;;;;;;oCAQoC;AACpC,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAExF"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AAQpD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AA8BhD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAgRnD,uBAAuB;AACvB,wBAAsB,SAAS,CAC7B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc,EACzB,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,CAAC,SAAS,CAAC,CAyNpB;AAED;;;;;;;;oCAQoC;AACpC,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAExF"}
@@ -1,21 +1,29 @@
1
- // @x-code-cli/core — Agent Loop (orchestration: streaming, tool calls, permission, context compression)
1
+ // @x-code-cli/core — Agent Loop (orchestration: streaming, tool calls, permission)
2
+ //
3
+ // Context compression lives in `./compression.ts`; this file just
4
+ // orchestrates the per-turn streaming + tool dispatch loop.
2
5
  import fs from 'node:fs/promises';
3
6
  import path from 'node:path';
4
- import { generateText, streamText } from 'ai';
7
+ import { streamText } from 'ai';
5
8
  import { buildKnowledgeContext } from '../knowledge/loader.js';
6
- import { generateSessionSummary } from '../knowledge/session.js';
7
9
  import { applyCacheControl } from '../providers/cache-control.js';
8
10
  import { getThinkingProviderOptions, mergeThinkingOptions } from '../providers/thinking.js';
9
- import { clearProgressReporter, setProgressReporter } from '../tools/progress.js';
10
11
  import { toolRegistry, truncateToolResult } from '../tools/index.js';
12
+ import { clearProgressReporter, setProgressReporter } from '../tools/progress.js';
11
13
  import { createTaskTool } from '../tools/task.js';
12
14
  import { debugLog } from '../utils.js';
13
15
  import { classifyApiError, isContextTooLongError } from './api-errors.js';
14
- import { estimateTokenCount, getCompressionThreshold, getMaxOutputTokens } from './context-window.js';
15
- import { lightCompactMessages } from './light-compact.js';
16
+ import { checkAndCompressContext, handleContextTooLong } from './compression.js';
17
+ import { getCompressionThreshold, getMaxOutputTokens } from './context-window.js';
16
18
  import { createLoopState } from './loop-state.js';
19
+ import { runMemoryExtractor } from './memory-extractor.js';
17
20
  import { generateTaskSlug, makePlanFilePath } from './plan-storage.js';
18
- import { appendHeader, appendUsage, flushPendingMessages, markBoundaryAndReflush, } from './session-store.js';
21
+ import { downgradeBinaryPartsForProvider, ensureReasoningContentParts } from './provider-compat.js';
22
+ import { appendHeader, appendUsage, flushPendingMessages } from './session-store.js';
23
+ import { drainStreamResult } from './stream-utils.js';
24
+ import { buildSystemPrompt } from './system-prompt.js';
25
+ import { processToolCalls } from './tool-execution.js';
26
+ import { repairOrphanToolCalls, truncateToolResultsInMessages } from './tool-result-sanitize.js';
19
27
  /** Pull plain text out of a UserContent payload for slugification.
20
28
  * UserContent can be a string OR a multi-part array (text/image/file
21
29
  * parts after `buildUserContent` ingests `@path` references); we only
@@ -32,91 +40,8 @@ function userContentToText(content) {
32
40
  }
33
41
  return '';
34
42
  }
35
- import { downgradeBinaryPartsForProvider, ensureReasoningContentParts } from './provider-compat.js';
36
- import { drainStreamResult } from './stream-utils.js';
37
- import { buildSystemPrompt } from './system-prompt.js';
38
- import { processToolCalls } from './tool-execution.js';
39
- import { repairOrphanToolCalls, truncateToolResultsInMessages } from './tool-result-sanitize.js';
40
- /** Number of recent messages to keep verbatim when compressing. */
41
- const KEEP_RECENT = 6;
42
- /** Compress old messages into a summary. */
43
- export async function compressMessages(messages, model) {
44
- const recent = messages.slice(-KEEP_RECENT);
45
- const old = messages.slice(0, -KEEP_RECENT);
46
- if (old.length === 0)
47
- return messages;
48
- const { text: summary } = await generateText({
49
- model,
50
- system: 'Summarize the following conversation concisely, preserving key decisions, file changes, and context needed to continue.',
51
- messages: old,
52
- });
53
- return [{ role: 'user', content: `[Previous conversation summary]\n${summary}` }, ...recent];
54
- }
55
- /**
56
- * Proactive compression: compress when either the last real input-token count
57
- * or the character-based estimate has crossed the threshold.
58
- *
59
- * Runs a light O(n) compaction first (drops loop-guard pairs — no LLM call,
60
- * no network). If that brings us back under the threshold, we skip the
61
- * expensive LLM-summary path entirely. This is the difference between a
62
- * $0 10ms pass and a full summarisation round trip — for loop-induced
63
- * bloat (by far the common case), the light path is enough.
64
- */
65
- async function checkAndCompressContext(state, model, threshold, callbacks) {
66
- const needsCompression = state.lastInputTokens > threshold || estimateTokenCount(state.messages) > threshold;
67
- if (!needsCompression || state.messages.length <= KEEP_RECENT)
68
- return;
69
- const light = lightCompactMessages(state.messages);
70
- if (light.dropped > 0) {
71
- state.messages = light.messages;
72
- const stillOver = estimateTokenCount(state.messages) > threshold;
73
- callbacks.onContextCompressed(`Dropped ${light.dropped} looped tool-call message(s) to reclaim context${stillOver ? ' — still over threshold, summarising' : ''}.`);
74
- if (!stillOver) {
75
- // Light compaction succeeded — write a boundary so resume won't
76
- // resurrect the dropped loop-guard pairs (they're still on disk
77
- // pre-boundary, but the loader cuts at the latest boundary). The
78
- // boundary carries no summary text since nothing was summarised.
79
- void markBoundaryAndReflush(state);
80
- return;
81
- }
82
- }
83
- let summaryText = '';
84
- try {
85
- const summary = await generateSessionSummary(state.messages, model, state.sessionId, state.startedAt, [
86
- ...state.filesModified,
87
- ]);
88
- summaryText = summary.summary;
89
- }
90
- catch {
91
- // Summary generation failed — fall through with empty text. The
92
- // compressMessages call below still runs its own LLM summarisation,
93
- // so context still shrinks; we just lose the structured summary
94
- // that would have ridden along on the boundary line for picker UX.
95
- }
96
- state.messages = await compressMessages(state.messages, model);
97
- state.lastInputTokens = 0;
98
- // Write a compact-boundary line + re-flush the trimmed messages so
99
- // the post-boundary jsonl content equals the new in-memory state.
100
- void markBoundaryAndReflush(state, summaryText);
101
- callbacks.onContextCompressed('Context compressed to fit context window.');
102
- }
103
- /**
104
- * Reactive compact: when a stream errors because the prompt was too long,
105
- * compress and signal the caller to retry. Mirrors Claude Code's reactiveCompact.
106
- * Returns true if compression happened (caller should retry this turn).
107
- */
108
- async function handleContextTooLong(state, model, callbacks) {
109
- if (state.messages.length <= KEEP_RECENT)
110
- return false;
111
- state.messages = await compressMessages(state.messages, model);
112
- state.lastInputTokens = 0;
113
- // Same boundary discipline as the proactive path — reactive compact
114
- // also shrinks state.messages in place, so the jsonl needs a
115
- // compact-boundary marker to keep loader semantics consistent.
116
- void markBoundaryAndReflush(state);
117
- callbacks.onContextCompressed('Context too long — automatically compressed. Retrying...');
118
- return true;
119
- }
43
+ // Re-exported for the CLI's resume / manual-compact path (see use-agent.ts).
44
+ export { compressMessages } from './compression.js';
120
45
  /** Consume streamText output, dispatching chunks to the UI via callbacks.
121
46
  * Reasoning-delta chunks (thinking-mode models — DeepSeek-reasoner, o1,
122
47
  * etc.) are deliberately ignored: that's the model's internal chain of
@@ -336,6 +261,12 @@ effectiveTools) {
336
261
  return { kind: 'aborted' };
337
262
  if (isContextTooLongError(err)) {
338
263
  const compressed = await handleContextTooLong(state, model, callbacks);
264
+ // Compression makes its own LLM round-trip (2–5s) and doesn't accept
265
+ // an abort signal. If the user Esc'd while it ran, the next runTurn
266
+ // would issue another streamText only to have the SDK reject it
267
+ // immediately on the now-aborted signal — wasted setup. Bail here.
268
+ if (options.abortSignal?.aborted)
269
+ return { kind: 'aborted' };
339
270
  if (compressed)
340
271
  return { kind: 'retry' };
341
272
  }
@@ -423,6 +354,9 @@ export async function agentLoop(userMessage, model, options, callbacks, existing
423
354
  // capped so a pathologically runaway reply still terminates eventually.
424
355
  const MAX_CONTINUATIONS = 3;
425
356
  let continuationAttempts = 0;
357
+ // Tracks whether we exited the loop on a clean `stop` finish reason —
358
+ // the only case where the post-turn memory extractor should run.
359
+ let completedNormally = false;
426
360
  while (state.turnCount < options.maxTurns) {
427
361
  state.turnCount++;
428
362
  // Sweep any unpersisted messages from the prior iteration (or the
@@ -506,9 +440,20 @@ export async function agentLoop(userMessage, model, options, callbacks, existing
506
440
  if (outcome.finishReason === 'content-filter') {
507
441
  callbacks.onError(new Error('Response stopped by the provider content filter.'));
508
442
  }
443
+ else if (outcome.finishReason === 'stop') {
444
+ completedNormally = true;
445
+ }
509
446
  break;
510
447
  }
511
- if (state.turnCount >= options.maxTurns) {
448
+ // Only report "max turns reached" when the loop genuinely ran out of
449
+ // budget without a clean finish. The `&& !completedNormally` guard
450
+ // matters at the boundary where the model's final 'stop' lands on the
451
+ // exact turn that equals maxTurns: prior to this guard we'd both break
452
+ // out of the loop normally AND fire the error message, which is a lie.
453
+ // Most relevant to the memory-extractor sub-loop (maxTurns=3, often
454
+ // genuinely finishes on turn 2 or 3) but the same bug existed for any
455
+ // user who set --max-turns N and got a clean reply on turn N.
456
+ if (state.turnCount >= options.maxTurns && !completedNormally) {
512
457
  callbacks.onError(new Error(`Reached maximum turns (${options.maxTurns}). Stopping agent loop.`));
513
458
  }
514
459
  // Final flush — catches the last iteration's content when we exit via
@@ -517,6 +462,21 @@ export async function agentLoop(userMessage, model, options, callbacks, existing
517
462
  // `[Request interrupted by user]` notice AFTER agentLoop returns, so
518
463
  // it's responsible for its own flush — see use-agent.ts.
519
464
  void flushPendingMessages(state);
465
+ // Post-turn memory extractor: runs ONLY on a clean `stop` finish (no
466
+ // error, no abort, no content-filter, no length-cap give-up). Fire-and-
467
+ // forget — the user can type the next prompt immediately while a single
468
+ // generateText + Output.object call scans the transcript for durable
469
+ // knowledge to persist. Writes go directly to AutoMemory (silent path)
470
+ // so the ChatInput frame doesn't render a tool row after the user's
471
+ // reply is already complete.
472
+ if (completedNormally && !options.abortSignal?.aborted) {
473
+ void runMemoryExtractor({
474
+ parentState: state,
475
+ parentModel: model,
476
+ abortSignal: options.abortSignal,
477
+ onWrite: callbacks.onMemoryWrite,
478
+ });
479
+ }
520
480
  return state;
521
481
  }
522
482
  /** Sync any in-memory messages to the session jsonl. Called on exit /
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAE3B;;;;4CAI4C;AAC5C,SAAS,iBAAiB,CAAC,OAAoB;IAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAA;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC5H,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,OAAO,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAA;AAIhG,mEAAmE;AACnE,MAAM,WAAW,GAAG,CAAC,CAAA;AAErB,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAwB,EAAE,KAAoB;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;IAE3C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAErC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CAAC;QAC3C,KAAK;QACL,MAAM,EACJ,yHAAyH;QAC3H,QAAQ,EAAE,GAAG;KACd,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oCAAoC,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAA;AAC9F,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,uBAAuB,CACpC,KAAgB,EAChB,KAAoB,EACpB,SAAiB,EACjB,SAAyB;IAEzB,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe,GAAG,SAAS,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAA;IAC5G,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW;QAAE,OAAM;IAErE,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClD,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC/B,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAA;QAChE,SAAS,CAAC,mBAAmB,CAC3B,WAAW,KAAK,CAAC,OAAO,kDAAkD,SAAS,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,GAAG,CACrI,CAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,gEAAgE;YAChE,gEAAgE;YAChE,iEAAiE;YACjE,iEAAiE;YACjE,KAAK,sBAAsB,CAAC,KAAK,CAAC,CAAA;YAClC,OAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,WAAW,GAAG,EAAE,CAAA;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;YACpG,GAAG,KAAK,CAAC,aAAa;SACvB,CAAC,CAAA;QACF,WAAW,GAAG,OAAO,CAAC,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;QAChE,oEAAoE;QACpE,gEAAgE;QAChE,mEAAmE;IACrE,CAAC;IACD,KAAK,CAAC,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAC9D,KAAK,CAAC,eAAe,GAAG,CAAC,CAAA;IACzB,mEAAmE;IACnE,kEAAkE;IAClE,KAAK,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,SAAS,CAAC,mBAAmB,CAAC,2CAA2C,CAAC,CAAA;AAC5E,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CACjC,KAAgB,EAChB,KAAoB,EACpB,SAAyB;IAEzB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW;QAAE,OAAO,KAAK,CAAA;IACtD,KAAK,CAAC,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAC9D,KAAK,CAAC,eAAe,GAAG,CAAC,CAAA;IACzB,oEAAoE;IACpE,6DAA6D;IAC7D,+DAA+D;IAC/D,KAAK,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAClC,SAAS,CAAC,mBAAmB,CAAC,0DAA0D,CAAC,CAAA;IACzF,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;oCAIoC;AACpC,KAAK,UAAU,gBAAgB,CAAC,MAAoB,EAAE,SAAyB;IAC7E,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAA;YAC7B,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;YACnC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;YAC5F,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAA;YACzC,oEAAoE;YACpE,oEAAoE;YACpE,kEAAkE;YAClE,iEAAiE;YACjE,IAAI,UAAU,EAAE,CAAC;gBACf,mBAAmB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAA;YACrF,CAAC;YACD,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC,CAAA;QACxG,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACxC,0EAA0E;YAC1E,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;YAChG,QAAQ,CAAC,oBAAoB,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;YAClE,IAAI,KAAK,CAAC,UAAU;gBAAE,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC7D,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;QACzE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,mFAAmF;QACnF,8EAA8E;IAChF,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,mBAAmB,CAChC,MAAoB,EACpB,KAAgB,EAChB,OAAe,EACf,SAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAA;IACtC,6EAA6E;IAC7E,wEAAwE;IACxE,wEAAwE;IACxE,4EAA4E;IAC5E,uEAAuE;IACvE,uEAAuE;IACvE,wEAAwE;IACxE,0EAA0E;IAC1E,qCAAqC;IACrC,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAChD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACzC,2BAA2B,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEpD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAA;IAChC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;QACtD,KAAK,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAA;QACxD,qEAAqE;QACrE,gFAAgF;QAChF,yEAAyE;QACzE,wEAAwE;QACxE,KAAK,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,CAAC,iBAAiB,EAAE,eAAe,IAAI,CAAC,CAAA;QACjF,KAAK,CAAC,UAAU,CAAC,mBAAmB,IAAI,KAAK,CAAC,iBAAiB,EAAE,gBAAgB,IAAI,CAAC,CAAA;QACtF,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAA;QAC3F,qEAAqE;QACrE,mEAAmE;QACnE,iEAAiE;QACjE,oEAAoE;QACpE,uEAAuE;QACvE,mEAAmE;QACnE,yDAAyD;QACzD,qEAAqE;QACrE,uEAAuE;QACvE,iEAAiE;QACjE,KAAK,CAAC,UAAU,CAAC,oBAAoB,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;QAC5F,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI;YAAE,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,WAAW,CAAA;QACxE,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACzC,sEAAsE;QACtE,wEAAwE;QACxE,kEAAkE;QAClE,mDAAmD;QACnD,KAAK,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAA;AAC5B,CAAC;AAaD;;;uDAGuD;AACvD,SAAS,YAAY,CAAC,GAAY,EAAE,MAA+B;IACjE,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,IAAI,CAAA;IAChC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,IAAI,CAAA;QAC1C,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;IAC1D,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;kEAMkE;AAClE,SAAS,UAAU,CAAC,OAAqB;IACvC,8DAA8D;IAC9D,MAAM,KAAK,GAAwB,EAAE,GAAG,YAAY,EAAE,CAAA;IAEtD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAA;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,KAAK,UAAU,OAAO,CACpB,KAAgB,EAChB,KAAoB,EACpB,OAAqB,EACrB,YAAoB,EACpB,SAAyB;AACzB,8DAA8D;AAC9D,cAAmC;IAEnC,mEAAmE;IACnE,kEAAkE;IAClE,oEAAoE;IACpE,iEAAiE;IACjE,mEAAmE;IACnE,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,4DAA4D;IAC5D,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAErC,oEAAoE;IACpE,sEAAsE;IACtE,mEAAmE;IACnE,0CAA0C;IAC1C,MAAM,+BAA+B,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtE,2EAA2E;IAC3E,8DAA8D;IAC9D,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAC/B,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAA;IAEF,2EAA2E;IAC3E,0EAA0E;IAC1E,6DAA6D;IAC7D,0EAA0E;IAC1E,qEAAqE;IACrE,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,4BAA4B;IAC5B,MAAM,eAAe,GAAG,0BAA0B,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAA;IAC9F,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;IAE3F,IAAI,MAAoB,CAAA;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC;YAClB,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,qEAAqE;YACrE,qEAAqE;YACrE,yEAAyE;YACzE,2DAA2D;YAC3D,eAAe,EAAE,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC;YACpD,sEAAsE;YACtE,yDAAyD;YACzD,uEAAuE;YACvE,sEAAsE;YACtE,2DAA2D;YAC3D,eAAe,EAAE,qBAA4E;SAC9F,CAA4B,CAAA;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACtE,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,8CAA8C;IAC9C,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEzB,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oEAAoE;QACpE,0DAA0D;QAC1D,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAEzB,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACtE,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;YACtE,IAAI,UAAU;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAC1C,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzF,QAAQ,CACN,aAAa,EACb,UAAU,YAAY,SAAS,KAAK,CAAC,SAAS,UAAU,KAAK,CAAC,eAAe,UAAU,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CACtH,CAAA;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACzB,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACtE,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1B,CAAC;AACH,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,WAAwB,EACxB,KAAoB,EACpB,OAAqB,EACrB,SAAyB,EACzB,aAAyB;IAEzB,MAAM,KAAK,GAAG,aAAa,IAAI,eAAe,CAAC,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,CAAA;IACnF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;IAE3D,oEAAoE;IACpE,mEAAmE;IACnE,iEAAiE;IACjE,oEAAoE;IACpE,MAAM;IACN,EAAE;IACF,oEAAoE;IACpE,mEAAmE;IACnE,oEAAoE;IACpE,iEAAiE;IACjE,kEAAkE;IAClE,6DAA6D;IAC7D,mEAAmE;IACnE,gEAAgE;IAChE,yCAAyC;IACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAC/C,MAAM,eAAe,GAAoB,KAAK,CAAC,QAAQ;QACrD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAE3E,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,MAAM,oBAAoB,GAAG,MAAM,qBAAqB,EAAE,CAAA;IAE1D,8DAA8D;IAC9D,MAAM,SAAS,GAAG,MAAM,EAAE;SACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;SACtC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IAErB,oEAAoE;IACpE,KAAK,CAAC,gBAAgB,GAAG,oBAAoB,CAAA;IAC7C,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;IAE3B,qEAAqE;IACrE,qEAAqE;IACrE,gEAAgE;IAChE,2DAA2D;IAC3D,KAAK,CAAC,QAAQ,GAAG,MAAM,eAAe,CAAA;IAEtC,+DAA+D;IAC/D,6DAA6D;IAC7D,+DAA+D;IAC/D,6DAA6D;IAC7D,+DAA+D;IAC/D,iEAAiE;IACjE,sCAAsC;IACtC,IAAI,KAAK,CAAC,cAAc,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC9D,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,yEAAyE;IACzE,wDAAwD;IACxD,KAAK,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEnD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAErE,oEAAoE;IACpE,oEAAoE;IACpE,wDAAwD;IACxD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAE1C,yEAAyE;IACzE,wEAAwE;IACxE,sEAAsE;IACtE,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,iBAAiB,GAAG,CAAC,CAAA;IAC3B,IAAI,oBAAoB,GAAG,CAAC,CAAA;IAE5B,OAAO,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1C,KAAK,CAAC,SAAS,EAAE,CAAA;QAEjB,kEAAkE;QAClE,mEAAmE;QACnE,mEAAmE;QACnE,mDAAmD;QACnD,sEAAsE;QACtE,qEAAqE;QACrE,0CAA0C;QAC1C,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAEhC,MAAM,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAA;QAE5E,sEAAsE;QACtE,mEAAmE;QACnE,oEAAoE;QACpE,mEAAmE;QACnE,sEAAsE;QACtE,iBAAiB;QACjB,EAAE;QACF,oEAAoE;QACpE,8DAA8D;QAC9D,mEAAmE;QACnE,qEAAqE;QACrE,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC7B,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;gBAC1C,gBAAgB,EAAE,oBAAoB;gBACtC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS;gBACT,QAAQ,EAAE,KAAK,CAAC,cAAc,KAAK,MAAM;gBACzC,YAAY,EAAE,KAAK,CAAC,eAAe,IAAI,SAAS;aACjD,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,iBAAiB,CAAA;QAE5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAE7F,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;YAAE,MAAK;QACnC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,MAAK;QACrC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,2EAA2E;YAC3E,KAAK,CAAC,SAAS,EAAE,CAAA;YACjB,SAAQ;QACV,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;YAC1C,sEAAsE;YACtE,4CAA4C;YAC5C,oBAAoB,GAAG,CAAC,CAAA;YACxB,IAAI,SAA6C,CAAA;YACjD,IAAI,CAAC;gBACH,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAA;YAC5C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;oBAAE,MAAK;gBACjD,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC3D,MAAK;YACP,CAAC;YACD,MAAM,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;YACnE,mEAAmE;YACnE,mEAAmE;YACnE,IAAI,OAAO,CAAC,WAAW,EAAE,OAAO;gBAAE,MAAK;YACvC,SAAQ;QACV,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,oBAAoB,GAAG,iBAAiB,EAAE,CAAC;gBAC7C,oBAAoB,EAAE,CAAA;gBACtB,QAAQ,CACN,0BAA0B,EAC1B,WAAW,oBAAoB,IAAI,iBAAiB,SAAS,KAAK,CAAC,SAAS,EAAE,CAC/E,CAAA;gBACD,iEAAiE;gBACjE,iEAAiE;gBACjE,4DAA4D;gBAC5D,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,MAAM;oBACZ,OAAO,EACL,kKAAkK;iBACrK,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YACD,SAAS,CAAC,OAAO,CACf,IAAI,KAAK,CACP,kCAAkC,iBAAiB,mDAAmD,CACvG,CACF,CAAA;YACD,MAAK;QACP,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,KAAK,gBAAgB,EAAE,CAAC;YAC9C,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAA;QAClF,CAAC;QAED,MAAK;IACP,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACxC,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,QAAQ,yBAAyB,CAAC,CAAC,CAAA;IACnG,CAAC;IAED,sEAAsE;IACtE,mEAAmE;IACnE,gEAAgE;IAChE,qEAAqE;IACrE,yDAAyD;IACzD,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAEhC,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;oCAQoC;AACpC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAgB,EAAE,MAAqB;IACvE,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { LanguageModel } from 'ai';
2
+ import type { MemoryWriteNotice } from '../types/index.js';
3
+ import type { LoopState } from './loop-state.js';
4
+ export interface RunMemoryExtractorArgs {
5
+ parentState: LoopState;
6
+ parentModel: LanguageModel;
7
+ abortSignal?: AbortSignal;
8
+ /** Fired once per successful AutoMemory write so the UI can surface a
9
+ * "Remembered: …" line in scrollback. The extractor is fire-and-forget,
10
+ * so this may be invoked after the parent agentLoop has already
11
+ * returned — closures must remain valid. */
12
+ onWrite?: (notice: MemoryWriteNotice) => void;
13
+ }
14
+ /** Fire-and-forget memory extraction. Caller should `void runMemoryExtractor(...)`
15
+ * — awaiting it would block the user from typing the next prompt.
16
+ *
17
+ * Writes go straight to AutoMemory at file level. There is no
18
+ * user-facing memory-write tool: the main agent has no way to write
19
+ * memory itself, so extraction is the sole write path. Silent matches
20
+ * Codex's "main agent is read-only for memory" convention. */
21
+ export declare function runMemoryExtractor(args: RunMemoryExtractorArgs): Promise<void>;
22
+ //# sourceMappingURL=memory-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-extractor.d.ts","sourceRoot":"","sources":["../../src/agent/memory-extractor.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,IAAI,CAAA;AAKrD,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AA+JhD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,SAAS,CAAA;IACtB,WAAW,EAAE,aAAa,CAAA;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;;iDAG6C;IAC7C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAC9C;AAED;;;;;;+DAM+D;AAC/D,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF"}
@@ -0,0 +1,253 @@
1
+ // @x-code-cli/core — Post-turn memory extractor (silent path).
2
+ //
3
+ // Runs as a fire-and-forget pass after each `finishReason === 'stop'` in
4
+ // agentLoop. Sees the recent transcript, decides what (if anything) is
5
+ // durable cross-session knowledge, and writes to AutoMemory directly.
6
+ //
7
+ // The main agent has NO memory-write tool exposed — `saveKnowledge` was
8
+ // removed from the tool registry. Memory writes happen exclusively
9
+ // through this extractor, matching Codex's "main agent is read-only for
10
+ // memory" philosophy. Any visible `● SaveKnowledge` row in the ChatInput
11
+ // frame would feel like the AI doing things behind the user's back right
12
+ // as they're about to type the next prompt.
13
+ //
14
+ // Implementation: one `generateText` round-trip with an `output` setting
15
+ // (the v6 replacement for the deprecated `generateObject`). No agentLoop,
16
+ // no turn budget, no tool filter, no sub-callbacks. The model returns a
17
+ // structured object; we iterate the `memories` array and call
18
+ // AutoMemory.add() for each.
19
+ import { Output, generateText } from 'ai';
20
+ import { z } from 'zod';
21
+ import { getAutoMemory } from '../knowledge/auto-memory.js';
22
+ import { debugLog } from '../utils.js';
23
+ /** Cap on how many of the most-recent main-loop messages we replay to
24
+ * the extractor. 12 is enough for a few full "user said X → assistant
25
+ * did Y → user reacted Z" turns without dragging in stale background. */
26
+ const MAX_TRANSCRIPT_MESSAGES = 12;
27
+ /** Skip the extractor entirely if the transcript is too short — nothing
28
+ * durable in a single greeting + reply. */
29
+ const MIN_TRANSCRIPT_MESSAGES = 4;
30
+ /** Bound the blast radius if the model gets imaginative. At most this
31
+ * many writes per pass even on pathological output. */
32
+ const MAX_MEMORIES_PER_PASS = 3;
33
+ /** Serialize concurrent extractor calls. JS is single-threaded so this
34
+ * is just a re-entrancy guard, not a real lock — keeps two back-to-back
35
+ * stops from racing on the same transcript. */
36
+ let inflight = Promise.resolve();
37
+ const MemoryItemSchema = z.object({
38
+ category: z.enum(['user', 'feedback', 'project', 'reference']),
39
+ scope: z.enum(['project', 'global']),
40
+ key: z.string().min(1).describe('Short slug. Same key under same category overwrites the previous fact.'),
41
+ fact: z.string().min(1).describe('The fact itself. Lead with the rule; for feedback include a one-line reason.'),
42
+ });
43
+ const MemorySchema = z.object({
44
+ /** Empty array means "nothing to save" — the model's preferred no-op. */
45
+ memories: z.array(MemoryItemSchema).max(MAX_MEMORIES_PER_PASS),
46
+ });
47
+ /** Render both AutoMemory scopes as a snapshot the extractor can scan
48
+ * before deciding whether to write. Without this the model has no idea
49
+ * what's already saved and routinely produces near-duplicates under
50
+ * fresh keys (`role` + `user-stack` + `user-profile` for the same
51
+ * person). The dedup-by-(category, key) check in `AutoMemory.add()`
52
+ * only catches exact key collisions, not semantic overlap, so the
53
+ * prevention has to happen in the extractor's prompt. */
54
+ function renderExistingMemory() {
55
+ const global = getAutoMemory('global').getPromptContent().trim();
56
+ const project = getAutoMemory('project').getPromptContent().trim();
57
+ const sections = [];
58
+ sections.push(`## Global (~/.x-code/memory/auto.md)\n${global || '(empty)'}`);
59
+ sections.push(`## Project (.x-code/memory/auto.md)\n${project || '(empty)'}`);
60
+ return sections.join('\n\n');
61
+ }
62
+ /** Render the transcript tail as plain text the extractor can read.
63
+ * Tool-calls and tool-results collapse to bracketed markers — the
64
+ * extractor only cares about user/assistant intent, not tool details. */
65
+ function renderTranscript(messages) {
66
+ const tail = messages.slice(-MAX_TRANSCRIPT_MESSAGES);
67
+ const lines = [];
68
+ for (const msg of tail) {
69
+ const role = msg.role;
70
+ if (role === 'system')
71
+ continue;
72
+ const content = msg.content;
73
+ if (typeof content === 'string') {
74
+ lines.push(`### ${role}\n${content.trim()}`);
75
+ continue;
76
+ }
77
+ if (!Array.isArray(content))
78
+ continue;
79
+ const parts = [];
80
+ for (const part of content) {
81
+ if (part?.type === 'text' && typeof part.text === 'string') {
82
+ parts.push(part.text.trim());
83
+ }
84
+ else if (part?.type === 'tool-call' && typeof part.toolName === 'string') {
85
+ parts.push(`[tool-call: ${part.toolName}]`);
86
+ }
87
+ else if (part?.type === 'tool-result') {
88
+ parts.push('[tool-result]');
89
+ }
90
+ }
91
+ const body = parts.filter(Boolean).join('\n').trim();
92
+ if (body)
93
+ lines.push(`### ${role}\n${body}`);
94
+ }
95
+ return lines.join('\n\n');
96
+ }
97
+ const SYSTEM_PROMPT = `You are a post-turn memory extractor for a coding-assistant CLI.
98
+
99
+ The main agent has just finished replying to the user. Scan the recent transcript and decide whether anything in it is **durable cross-session knowledge** worth saving. Output a JSON object matching the provided schema: \`{ "memories": [...] }\`. **Empty array means save nothing — that is the default and often correct.**
100
+
101
+ # Hard rules
102
+
103
+ 1. **Quality over quantity.** Output AT MOST 1-2 memories per pass; an empty array is fine.
104
+ 2. **Never save the user's CURRENT TASK or REQUEST.** "User wanted me to refactor X" / "user asked me to debug Y" is transient and has zero value next session.
105
+ 3. **Never save anything derivable from code or git history.** Tech stack, dependencies, file layout, commit author, when something changed — the agent can re-read these next session.
106
+ 4. **Save EXACTLY what the user said. No inference, no generalization, no padding, no fabricated rules.**
107
+ - If they said "Node.js engineer", save "Node.js engineer" — do NOT generalize to "frontend engineer" or specialize to "backend engineer".
108
+ - If they said "reply in Chinese", save "User wants replies in Chinese" — do NOT add "user has limited English", "is from mainland China", or any implication.
109
+ - Do NOT invent rules the user did not state ("keep variable names in English", "explain by analogy", "use simple words"). If they didn't say it, it isn't a fact.
110
+ - When tempted to add motivation, audience, or implication, stop. Quote the user.
111
+ - One stated fact = one short fact in the output. Do not pad a single sentence into a paragraph.
112
+ 5. **Don't write near-duplicates. Reuse keys to update.** The user message includes an "Existing memory" snapshot of everything already saved.
113
+ - If your candidate fact is already covered there — even under a different key, different category, or slightly different phrasing — RETURN EMPTY for it. The fact is already in the system prompt next session; writing it again under a fresh key just clutters memory.
114
+ - If you want to REFINE an existing fact (more accurate, more complete), REUSE its exact \`(category, key)\` so \`AutoMemory.add()\` overwrites it in place. Different key = duplicate, not update.
115
+ - Common pitfall: writing \`role\` AND \`user-stack\` AND \`user-profile\` for the same person. Pick whichever canonical key already exists in the snapshot and reuse it; if none exists, pick one and don't drift later.
116
+
117
+ # What to save (pick the matching category)
118
+
119
+ **user** — durable facts about who the human is, changing how you'd talk to them next session.
120
+ Trigger: role, expertise, working environment, language preferences, long-term constraints.
121
+ Example: User says "I've been writing Go for ten years but this is my first time touching the React side."
122
+ → \`{ category: "user", scope: "global", key: "user-stack", fact: "Ten years of Go; first time touching React in this repo." }\`
123
+ (Note: the fact is a direct paraphrase. Do NOT add "explain by analogy" or any other prescriptive action — that's inference, not what the user said.)
124
+
125
+ **feedback** — corrections OR validated approaches. Both count. Lead with the rule, include a one-line reason.
126
+ Trigger A (correction): "no", "stop", "don't do X", "you got Y wrong because…".
127
+ Example: "Stop using --no-verify on commits, last time we did that CI went red."
128
+ → \`{ category: "feedback", scope: "project", key: "no-skip-hooks", fact: "Never use git --no-verify; previously bypassed pre-commit hook and broke CI." }\`
129
+ Trigger B (validated approach): user accepts a non-obvious choice without pushback. Quieter than corrections — watch for them.
130
+ Example: "yeah that's right, splitting would be churn" after assistant suggested bundling.
131
+ → \`{ category: "feedback", scope: "project", key: "refactor-bundling", fact: "Bundle related refactors into one PR rather than splitting; user-validated as reducing churn." }\`
132
+
133
+ **project** — ongoing work, decisions, deadlines, or non-obvious project state. Convert relative dates to absolute.
134
+ Example: "Mobile release branch cuts Thursday — non-critical merges blocked after that."
135
+ → \`{ category: "project", scope: "project", key: "release-freeze", fact: "Mobile release freeze begins 2026-03-05. Flag non-critical merges past that date." }\`
136
+
137
+ **reference** — pointers to external systems (tickets, dashboards, docs).
138
+ Example: "Pipeline bugs are tracked in Linear project INGEST."
139
+ → \`{ category: "reference", scope: "project", key: "linear-pipeline", fact: "Pipeline bugs tracked in Linear project INGEST." }\`
140
+
141
+ # What NOT to save
142
+
143
+ - Current request, task, file edits, bug fix, or anything tied to "what we just did". → empty.
144
+ - The model's own opinion about the user. → empty.
145
+ - Vague impressions ("user prefers concise answers") with no concrete trigger sentence. → empty.
146
+ - Single-word reactions ("nice", "ok", "thanks") without context. → empty.
147
+ - **Inferences from the user's words.** If they say "Node.js engineer", do NOT save "frontend engineer" or "backend engineer" — both are guesses. Save what they literally wrote.
148
+ - **Demographic/skill assumptions** the user did NOT state (nationality, English level, seniority beyond what was claimed, team size). → empty.
149
+ - **Self-invented rules** dressed up as user preferences ("keep variable names English", "use markdown headings"). If the user did not say it this session, it is not a fact. → empty.
150
+
151
+ # Scope rule
152
+
153
+ - Project-specific facts (this repo / team / release): \`scope: "project"\`.
154
+ - Cross-project facts about the user themselves (stack expertise, OS, name): \`scope: "global"\`.
155
+
156
+ When in doubt, prefer empty array. The user can always type the durable fact again next session if it really matters.`;
157
+ const USER_TEMPLATE = (transcript, existing) => `# Existing memory (already saved — DO NOT duplicate, see Hard rule 5)
158
+
159
+ ${existing}
160
+
161
+ ---
162
+
163
+ # Recent main-loop transcript
164
+
165
+ ${transcript}
166
+
167
+ ---
168
+
169
+ Output a JSON object matching the schema. Empty \`memories\` array means save nothing — that is the default and often correct. Anything already present in the Existing memory snapshot above is by definition not new — return empty for it unless you are deliberately reusing its exact (category, key) to overwrite with a refined version.`;
170
+ /** Fire-and-forget memory extraction. Caller should `void runMemoryExtractor(...)`
171
+ * — awaiting it would block the user from typing the next prompt.
172
+ *
173
+ * Writes go straight to AutoMemory at file level. There is no
174
+ * user-facing memory-write tool: the main agent has no way to write
175
+ * memory itself, so extraction is the sole write path. Silent matches
176
+ * Codex's "main agent is read-only for memory" convention. */
177
+ export async function runMemoryExtractor(args) {
178
+ inflight = inflight.then(() => doExtract(args)).catch(() => undefined);
179
+ return inflight;
180
+ }
181
+ async function doExtract(args) {
182
+ const { parentState, parentModel, abortSignal, onWrite } = args;
183
+ if (abortSignal?.aborted)
184
+ return;
185
+ if (parentState.messages.length < MIN_TRANSCRIPT_MESSAGES)
186
+ return;
187
+ const transcript = renderTranscript(parentState.messages);
188
+ if (!transcript)
189
+ return;
190
+ // Snapshot existing memory so the model can detect semantic overlap with
191
+ // already-saved facts (the dedup in AutoMemory.add only catches exact
192
+ // (category, key) collisions). Cost: a few hundred extra prompt tokens
193
+ // per pass, paid once per turn — much cheaper than letting the file
194
+ // grow unbounded with `role` + `user-profile` + `user-stack` triples.
195
+ const existing = renderExistingMemory();
196
+ debugLog('memory-extractor.start', `transcript-bytes=${transcript.length} existing-bytes=${existing.length}`);
197
+ const startTime = Date.now();
198
+ try {
199
+ const { output: object } = await generateText({
200
+ model: parentModel,
201
+ system: SYSTEM_PROMPT,
202
+ prompt: USER_TEMPLATE(transcript, existing),
203
+ output: Output.object({ schema: MemorySchema }),
204
+ abortSignal,
205
+ });
206
+ const today = new Date().toISOString().slice(0, 10);
207
+ let written = 0;
208
+ for (const m of object.memories.slice(0, MAX_MEMORIES_PER_PASS)) {
209
+ const fact = {
210
+ key: m.key,
211
+ fact: m.fact,
212
+ category: m.category,
213
+ date: today,
214
+ };
215
+ try {
216
+ getAutoMemory(m.scope).add(fact);
217
+ written++;
218
+ debugLog('memory-extractor.write', `[${m.scope}/${m.category}] ${m.key}: ${m.fact.slice(0, 100)}`);
219
+ // Fire the UI notification AFTER the add succeeds. Wrapped in its
220
+ // own try/catch — a thrown UI callback shouldn't abort remaining
221
+ // writes in this batch.
222
+ if (onWrite) {
223
+ try {
224
+ onWrite({ scope: m.scope, category: m.category, key: m.key, fact: m.fact });
225
+ }
226
+ catch {
227
+ // intentionally swallowed
228
+ }
229
+ }
230
+ }
231
+ catch (err) {
232
+ // AutoMemory.add wraps the FS write in a queued save; failures
233
+ // surface here only on validation throws, which shouldn't happen
234
+ // since zod already validated the category enum.
235
+ const msg = err instanceof Error ? err.message : String(err);
236
+ debugLog('memory-extractor.write-fail', `${m.key}: ${msg}`);
237
+ }
238
+ }
239
+ debugLog('memory-extractor.done', `written=${written} skipped=${object.memories.length - written} duration=${Date.now() - startTime}ms`);
240
+ }
241
+ catch (err) {
242
+ if (abortSignal?.aborted) {
243
+ debugLog('memory-extractor.aborted', 'parent abort');
244
+ return;
245
+ }
246
+ // Catches NoOutputGeneratedError, network errors, schema-mismatch
247
+ // retries exhausted, etc. The user isn't waiting on this — debugLog
248
+ // and move on.
249
+ const msg = err instanceof Error ? err.message : String(err);
250
+ debugLog('memory-extractor.fail', msg);
251
+ }
252
+ }
253
+ //# sourceMappingURL=memory-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-extractor.js","sourceRoot":"","sources":["../../src/agent/memory-extractor.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,13 @@ export type UserContent = string | Array<TextPart | ImagePart | FilePart>;
6
6
  export declare function userMessage(content: UserContent): ModelMessage;
7
7
  /** Create a tool result message */
8
8
  export declare function toolResultMessage(toolCallId: string, toolName: string, result: string): ModelMessage;
9
+ /** Standard error string returned to the model from a tool. The "Error: "
10
+ * prefix is load-bearing — handleToolCall checks for it via
11
+ * isToolErrorString to flip the scrollback line to red, and the model
12
+ * itself learns to read it as a failure marker. */
13
+ export declare function toolErrorString(message: string): string;
14
+ /** Wrap a thrown / unknown value into the standard tool-error string. */
15
+ export declare function toolErrorFromUnknown(err: unknown): string;
16
+ /** Match the result-string prefix produced by toolErrorString. */
17
+ export declare function isToolErrorString(value: string): boolean;
9
18
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAErE;yEACyE;AACzE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAA;AAEzE,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAE9D;AAED,mCAAmC;AACnC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAYpG"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAErE;yEACyE;AACzE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAA;AAEzE,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAE9D;AAED,mCAAmC;AACnC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAYpG;AAED;;;oDAGoD;AACpD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -16,4 +16,19 @@ export function toolResultMessage(toolCallId, toolName, result) {
16
16
  ],
17
17
  };
18
18
  }
19
+ /** Standard error string returned to the model from a tool. The "Error: "
20
+ * prefix is load-bearing — handleToolCall checks for it via
21
+ * isToolErrorString to flip the scrollback line to red, and the model
22
+ * itself learns to read it as a failure marker. */
23
+ export function toolErrorString(message) {
24
+ return `Error: ${message}`;
25
+ }
26
+ /** Wrap a thrown / unknown value into the standard tool-error string. */
27
+ export function toolErrorFromUnknown(err) {
28
+ return toolErrorString(err instanceof Error ? err.message : String(err));
29
+ }
30
+ /** Match the result-string prefix produced by toolErrorString. */
31
+ export function isToolErrorString(value) {
32
+ return value.startsWith('Error:');
33
+ }
19
34
  //# sourceMappingURL=messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AAOA,4BAA4B;AAC5B,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAc;IACpF,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,aAAa;gBACnB,UAAU;gBACV,QAAQ;gBACR,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACxC;SACF;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AAOA,4BAA4B;AAC5B,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAc;IACpF,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,aAAa;gBACnB,UAAU;gBACV,QAAQ;gBACR,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACxC;SACF;KACF,CAAA;AACH,CAAC;AAED;;;oDAGoD;AACpD,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,UAAU,OAAO,EAAE,CAAA;AAC5B,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,OAAO,eAAe,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AACnC,CAAC"}