@leanandmean/coding-agent 0.74.1-scramjet.7 → 0.74.1-scramjet.70

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 (225) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +202 -0
  3. package/README.md +23 -9
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +1 -1
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/initial-message.d.ts +1 -0
  8. package/dist/cli/initial-message.d.ts.map +1 -1
  9. package/dist/cli/initial-message.js +3 -0
  10. package/dist/cli/initial-message.js.map +1 -1
  11. package/dist/cli/list-models.d.ts +2 -0
  12. package/dist/cli/list-models.d.ts.map +1 -1
  13. package/dist/cli/list-models.js +4 -1
  14. package/dist/cli/list-models.js.map +1 -1
  15. package/dist/config.d.ts +9 -2
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +33 -22
  18. package/dist/config.js.map +1 -1
  19. package/dist/core/agent-session-runtime.d.ts +12 -3
  20. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  21. package/dist/core/agent-session-runtime.js +64 -38
  22. package/dist/core/agent-session-runtime.js.map +1 -1
  23. package/dist/core/agent-session-services.d.ts +1 -0
  24. package/dist/core/agent-session-services.d.ts.map +1 -1
  25. package/dist/core/agent-session-services.js +2 -0
  26. package/dist/core/agent-session-services.js.map +1 -1
  27. package/dist/core/agent-session.d.ts +78 -15
  28. package/dist/core/agent-session.d.ts.map +1 -1
  29. package/dist/core/agent-session.js +1059 -203
  30. package/dist/core/agent-session.js.map +1 -1
  31. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  32. package/dist/core/compaction/branch-summarization.js +21 -17
  33. package/dist/core/compaction/branch-summarization.js.map +1 -1
  34. package/dist/core/compaction/compaction.d.ts +3 -5
  35. package/dist/core/compaction/compaction.d.ts.map +1 -1
  36. package/dist/core/compaction/compaction.js +43 -10
  37. package/dist/core/compaction/compaction.js.map +1 -1
  38. package/dist/core/exec.d.ts +12 -0
  39. package/dist/core/exec.d.ts.map +1 -1
  40. package/dist/core/exec.js +74 -28
  41. package/dist/core/exec.js.map +1 -1
  42. package/dist/core/export-html/template.js +4 -0
  43. package/dist/core/extensions/index.d.ts +1 -1
  44. package/dist/core/extensions/index.d.ts.map +1 -1
  45. package/dist/core/extensions/index.js.map +1 -1
  46. package/dist/core/extensions/runner.d.ts +9 -5
  47. package/dist/core/extensions/runner.d.ts.map +1 -1
  48. package/dist/core/extensions/runner.js +160 -3
  49. package/dist/core/extensions/runner.js.map +1 -1
  50. package/dist/core/extensions/types.d.ts +85 -8
  51. package/dist/core/extensions/types.d.ts.map +1 -1
  52. package/dist/core/extensions/types.js.map +1 -1
  53. package/dist/core/keybindings.d.ts +8 -0
  54. package/dist/core/keybindings.d.ts.map +1 -1
  55. package/dist/core/model-registry.d.ts +4 -0
  56. package/dist/core/model-registry.d.ts.map +1 -1
  57. package/dist/core/model-registry.js +179 -28
  58. package/dist/core/model-registry.js.map +1 -1
  59. package/dist/core/model-resolver.d.ts.map +1 -1
  60. package/dist/core/model-resolver.js +24 -6
  61. package/dist/core/model-resolver.js.map +1 -1
  62. package/dist/core/output-throughput-history.d.ts +25 -0
  63. package/dist/core/output-throughput-history.d.ts.map +1 -0
  64. package/dist/core/output-throughput-history.js +240 -0
  65. package/dist/core/output-throughput-history.js.map +1 -0
  66. package/dist/core/output-throughput.d.ts +43 -0
  67. package/dist/core/output-throughput.d.ts.map +1 -0
  68. package/dist/core/output-throughput.js +161 -0
  69. package/dist/core/output-throughput.js.map +1 -0
  70. package/dist/core/resource-loader.d.ts +6 -0
  71. package/dist/core/resource-loader.d.ts.map +1 -1
  72. package/dist/core/resource-loader.js +76 -21
  73. package/dist/core/resource-loader.js.map +1 -1
  74. package/dist/core/scramjet-command-parser.d.ts +4 -0
  75. package/dist/core/scramjet-command-parser.d.ts.map +1 -1
  76. package/dist/core/scramjet-command-parser.js +72 -1
  77. package/dist/core/scramjet-command-parser.js.map +1 -1
  78. package/dist/core/sdk.d.ts +2 -0
  79. package/dist/core/sdk.d.ts.map +1 -1
  80. package/dist/core/sdk.js +61 -10
  81. package/dist/core/sdk.js.map +1 -1
  82. package/dist/core/session-manager.d.ts +11 -3
  83. package/dist/core/session-manager.d.ts.map +1 -1
  84. package/dist/core/session-manager.js +46 -11
  85. package/dist/core/session-manager.js.map +1 -1
  86. package/dist/core/settings-manager.d.ts +19 -6
  87. package/dist/core/settings-manager.d.ts.map +1 -1
  88. package/dist/core/settings-manager.js +131 -17
  89. package/dist/core/settings-manager.js.map +1 -1
  90. package/dist/core/skills.d.ts.map +1 -1
  91. package/dist/core/skills.js +6 -2
  92. package/dist/core/skills.js.map +1 -1
  93. package/dist/core/system-prompt.d.ts +2 -0
  94. package/dist/core/system-prompt.d.ts.map +1 -1
  95. package/dist/core/system-prompt.js +5 -2
  96. package/dist/core/system-prompt.js.map +1 -1
  97. package/dist/core/tools/bash.d.ts.map +1 -1
  98. package/dist/core/tools/bash.js +4 -3
  99. package/dist/core/tools/bash.js.map +1 -1
  100. package/dist/index.d.ts +4 -3
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +3 -2
  103. package/dist/index.js.map +1 -1
  104. package/dist/main.d.ts +16 -0
  105. package/dist/main.d.ts.map +1 -1
  106. package/dist/main.js +38 -10
  107. package/dist/main.js.map +1 -1
  108. package/dist/modes/interactive/components/armin.d.ts +4 -2
  109. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  110. package/dist/modes/interactive/components/armin.js +14 -8
  111. package/dist/modes/interactive/components/armin.js.map +1 -1
  112. package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  113. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  114. package/dist/modes/interactive/components/assistant-message.js +19 -8
  115. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  116. package/dist/modes/interactive/components/daxnuts.d.ts +4 -1
  117. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  118. package/dist/modes/interactive/components/daxnuts.js +14 -6
  119. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  120. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  121. package/dist/modes/interactive/components/extension-editor.js +5 -3
  122. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  123. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  124. package/dist/modes/interactive/components/extension-selector.js +4 -3
  125. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  126. package/dist/modes/interactive/components/footer.d.ts +4 -0
  127. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  128. package/dist/modes/interactive/components/footer.js +24 -20
  129. package/dist/modes/interactive/components/footer.js.map +1 -1
  130. package/dist/modes/interactive/components/model-selector.d.ts +3 -1
  131. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  132. package/dist/modes/interactive/components/model-selector.js +9 -3
  133. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  134. package/dist/modes/interactive/components/scoped-models-selector.d.ts +3 -1
  135. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  136. package/dist/modes/interactive/components/scoped-models-selector.js +8 -2
  137. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  138. package/dist/modes/interactive/components/settings-selector.d.ts +17 -3
  139. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  140. package/dist/modes/interactive/components/settings-selector.js +87 -16
  141. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  142. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  143. package/dist/modes/interactive/components/thinking-selector.js +2 -1
  144. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  145. package/dist/modes/interactive/components/tool-execution.d.ts +19 -1
  146. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  147. package/dist/modes/interactive/components/tool-execution.js +129 -36
  148. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  149. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  150. package/dist/modes/interactive/components/user-message.js +3 -2
  151. package/dist/modes/interactive/components/user-message.js.map +1 -1
  152. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  153. package/dist/modes/interactive/components/visual-truncate.js +2 -2
  154. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  155. package/dist/modes/interactive/interactive-mode.d.ts +37 -1
  156. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  157. package/dist/modes/interactive/interactive-mode.js +901 -176
  158. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  159. package/dist/modes/interactive/spellcheck.d.ts +26 -0
  160. package/dist/modes/interactive/spellcheck.d.ts.map +1 -0
  161. package/dist/modes/interactive/spellcheck.js +144 -0
  162. package/dist/modes/interactive/spellcheck.js.map +1 -0
  163. package/dist/modes/interactive/theme/{dark.json → pi-dark.json} +3 -2
  164. package/dist/modes/interactive/theme/{light.json → pi-light.json} +27 -26
  165. package/dist/modes/interactive/theme/theme-schema.json +6 -1
  166. package/dist/modes/interactive/theme/theme.d.ts +24 -4
  167. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  168. package/dist/modes/interactive/theme/theme.js +123 -22
  169. package/dist/modes/interactive/theme/theme.js.map +1 -1
  170. package/dist/modes/print-mode.d.ts.map +1 -1
  171. package/dist/modes/print-mode.js +5 -0
  172. package/dist/modes/print-mode.js.map +1 -1
  173. package/dist/modes/rpc/rpc-client.d.ts +3 -1
  174. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  175. package/dist/modes/rpc/rpc-client.js.map +1 -1
  176. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  177. package/dist/modes/rpc/rpc-mode.js +6 -1
  178. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  179. package/dist/package-manager-cli.d.ts.map +1 -1
  180. package/dist/package-manager-cli.js +33 -14
  181. package/dist/package-manager-cli.js.map +1 -1
  182. package/dist/utils/clipboard-native.d.ts +1 -0
  183. package/dist/utils/clipboard-native.d.ts.map +1 -1
  184. package/dist/utils/clipboard-native.js.map +1 -1
  185. package/dist/utils/clipboard.d.ts +6 -0
  186. package/dist/utils/clipboard.d.ts.map +1 -1
  187. package/dist/utils/clipboard.js +278 -10
  188. package/dist/utils/clipboard.js.map +1 -1
  189. package/dist/utils/tools-manager.d.ts +1 -1
  190. package/dist/utils/tools-manager.d.ts.map +1 -1
  191. package/dist/utils/tools-manager.js +7 -6
  192. package/dist/utils/tools-manager.js.map +1 -1
  193. package/dist/utils/version-check.d.ts +17 -5
  194. package/dist/utils/version-check.d.ts.map +1 -1
  195. package/dist/utils/version-check.js +88 -21
  196. package/dist/utils/version-check.js.map +1 -1
  197. package/docs/compaction.md +21 -3
  198. package/docs/custom-provider.md +33 -4
  199. package/docs/extensions.md +150 -24
  200. package/docs/json.md +2 -0
  201. package/docs/keybindings.md +25 -1
  202. package/docs/models.md +34 -2
  203. package/docs/packages.md +2 -0
  204. package/docs/prompt-templates.md +2 -0
  205. package/docs/quickstart.md +1 -4
  206. package/docs/rpc.md +8 -6
  207. package/docs/sdk.md +31 -3
  208. package/docs/session-format.md +5 -1
  209. package/docs/settings.md +19 -5
  210. package/docs/skills.md +7 -5
  211. package/docs/terminal-setup.md +79 -2
  212. package/docs/terminal-verification.md +71 -0
  213. package/docs/themes.md +63 -10
  214. package/docs/tui.md +120 -25
  215. package/docs/usage.md +6 -4
  216. package/examples/extensions/border-status-editor.ts +2 -3
  217. package/examples/extensions/doom-overlay/doom-component.ts +3 -3
  218. package/examples/extensions/mac-system-theme.ts +3 -2
  219. package/examples/extensions/modal-editor.ts +13 -8
  220. package/examples/extensions/overlay-qa-tests.ts +22 -9
  221. package/examples/extensions/overlay-test.ts +5 -3
  222. package/examples/extensions/snake.ts +3 -1
  223. package/examples/extensions/space-invaders.ts +6 -3
  224. package/examples/extensions/subagent/index.ts +20 -17
  225. package/package.json +69 -58
@@ -63,6 +63,7 @@ export type AgentSessionEvent = AgentEvent | {
63
63
  maxAttempts: number;
64
64
  delayMs: number;
65
65
  errorMessage: string;
66
+ cumulativeErrors?: number;
66
67
  } | {
67
68
  type: "auto_retry_end";
68
69
  success: boolean;
@@ -76,6 +77,7 @@ export interface AgentSessionConfig {
76
77
  sessionManager: SessionManager;
77
78
  settingsManager: SettingsManager;
78
79
  cwd: string;
80
+ outputThroughputHistoryPath: string;
79
81
  /** Models to cycle through with Ctrl+P (from --models flag) */
80
82
  scopedModels?: Array<{
81
83
  model: Model<any>;
@@ -160,24 +162,38 @@ export declare class AgentSession {
160
162
  readonly agent: Agent;
161
163
  readonly sessionManager: SessionManager;
162
164
  readonly settingsManager: SettingsManager;
165
+ readonly outputThroughputHistoryPath: string;
163
166
  private _scopedModels;
164
167
  private _unsubscribeAgent?;
165
168
  private _eventListeners;
166
169
  private _agentEventQueue;
170
+ private readonly _toolCostExecutions;
171
+ private readonly _pendingToolCosts;
172
+ private _historicalCostDefinitions;
173
+ private readonly _outputThroughputTracker;
174
+ private readonly _outputThroughputHistory;
175
+ private _outputThroughputGeneration;
176
+ private _latestOutputThroughputSample;
177
+ private _disposed;
178
+ private readonly _harnessPersistenceAcks;
167
179
  /** Tracks pending steering messages for UI display. Removed when delivered. */
168
180
  private _steeringMessages;
169
181
  /** Tracks pending follow-up messages for UI display. Removed when delivered. */
170
182
  private _followUpMessages;
171
183
  /** Messages queued to be included with the next user prompt as context ("asides"). */
172
184
  private _pendingNextTurnMessages;
185
+ private readonly _inputSessionEntries;
173
186
  private _compactionAbortController;
187
+ private _manualCompactionDrain;
174
188
  private _autoCompactionAbortController;
175
189
  private _overflowRecoveryAttempted;
176
190
  private _branchSummaryAbortController;
177
- private _retryAbortController;
178
- private _retryAttempt;
179
- private _retryPromise;
180
- private _retryResolve;
191
+ private _retry;
192
+ private _runRetryCount;
193
+ private _activeAgentRunSettlement;
194
+ private _pendingAgentRunStart;
195
+ private readonly _unsettledAgentRuns;
196
+ private readonly _unsettledRetryChains;
181
197
  private _bashAbortController;
182
198
  private _pendingBashMessages;
183
199
  private _extensionRunner;
@@ -203,6 +219,7 @@ export declare class AgentSession {
203
219
  private _toolPromptGuidelines;
204
220
  private _baseSystemPromptSections;
205
221
  private _baseSystemPromptOptions;
222
+ private _runPromptComposition;
206
223
  constructor(config: AgentSessionConfig);
207
224
  /** Model registry for API key resolution and model discovery */
208
225
  get modelRegistry(): ModelRegistry;
@@ -220,14 +237,20 @@ export declare class AgentSession {
220
237
  /** Emit an event to all listeners */
221
238
  private _emit;
222
239
  private _emitQueueUpdate;
223
- private _lastAssistantMessage;
224
240
  /** Internal handler for agent events - shared by subscribe and reconnect */
225
241
  private _handleAgentEvent;
226
- private _createRetryPromiseForAgentEnd;
227
- private _findLastAssistantInMessages;
242
+ private _captureToolCost;
243
+ private _captureOutputThroughput;
244
+ private _resetOutputThroughput;
245
+ private _captureAgentRunSettlement;
246
+ private _settleAgentRun;
247
+ private _settleRetryChain;
248
+ private _completeAgentRun;
249
+ private _reserveAgentRunStart;
250
+ private _rejectAgentRunStart;
251
+ private _processAgentEventTracked;
252
+ private _harnessPersistenceAckForEvent;
228
253
  private _processAgentEvent;
229
- /** Resolve the pending retry promise */
230
- private _resolveRetry;
231
254
  /** Extract text content from a message */
232
255
  private _getUserMessageText;
233
256
  /** Find the last assistant message in agent state (including aborted ones) */
@@ -266,6 +289,13 @@ export declare class AgentSession {
266
289
  get isStreaming(): boolean;
267
290
  /** Current effective system prompt (includes any per-turn extension modifications), flattened to a string */
268
291
  get systemPrompt(): string;
292
+ get liveOutputRate(): number | undefined;
293
+ get outputThroughputActive(): boolean;
294
+ get outputThroughputGeneration(): number;
295
+ get medianOutputRate(): number | undefined;
296
+ get outputThroughputHistory(): import("./output-throughput.js").OutputThroughputHistory;
297
+ refreshOutputThroughputHistory(): Promise<import("./output-throughput.js").OutputThroughputHistory>;
298
+ flushOutputThroughputHistory(): Promise<void>;
269
299
  /** Current retry attempt (0 if not retrying) */
270
300
  get retryAttempt(): number;
271
301
  /**
@@ -296,8 +326,28 @@ export declare class AgentSession {
296
326
  * run/turn framing. The idle-vs-mid-run branch lives in `runHarnessTool` (keyed on the agent's
297
327
  * active run, which tracks `isStreaming`): idle calls execute immediately, mid-run calls queue
298
328
  * and drain before the next intra-run LLM call.
329
+ *
330
+ * **Persisted settlement (#341).** This is a strictly stronger boundary than
331
+ * {@link Agent.runHarnessTool}: the returned promise resolves only after (1) the Agent-core
332
+ * pipeline fulfills *and* (2) `_processAgentEvent` has persisted the matching tool-result
333
+ * `message_end` via `SessionManager.appendMessage`. Because the event queue preserves order,
334
+ * that also proves the preceding synthetic assistant tool-call message was persisted first. It
335
+ * rejects on Agent-core failure, on failure to process/persist a matching event, on disposal
336
+ * before settlement, on a post-disposal call, on an unknown tool, or on a duplicate explicit
337
+ * tool-call id that is already pending. **Rejection means the promised pipeline did not complete —
338
+ * it does not prove artifact absence** (Agent state and persistence may have partially or fully
339
+ * completed before a late failure), so callers must not blindly retry. A tool's own `execute()`
340
+ * error is *not* a rejection: it becomes a normal `isError: true` result and the promise resolves
341
+ * after that error-result pipeline is persisted.
342
+ *
343
+ * **Reentrancy.** As with `runHarnessTool`, do not `await` this from work whose return is required
344
+ * for the Agent to reach the drain point or for the event queue to persist the matching result.
299
345
  */
300
346
  invokeHarnessTool(name: string, args: unknown, options?: InvokeHarnessToolOptions): Promise<void>;
347
+ private _allocateHarnessToolCallId;
348
+ private _completeHarnessToolInvocation;
349
+ private _settleHarnessPersistenceAck;
350
+ private _registerHarnessPersistenceAck;
301
351
  /** Whether compaction or branch summarization is currently running */
302
352
  get isCompacting(): boolean;
303
353
  /** All messages including custom types like BashExecutionMessage */
@@ -326,6 +376,7 @@ export declare class AgentSession {
326
376
  get promptTemplates(): ReadonlyArray<PromptTemplate>;
327
377
  private _normalizePromptSnippet;
328
378
  private _normalizePromptGuidelines;
379
+ private _applyRunPromptComposition;
329
380
  /** Rebuild `_baseSystemPromptSections` from the current resources and tool set and apply it to agent state. */
330
381
  private _rebuildSystemPrompt;
331
382
  /**
@@ -505,16 +556,28 @@ export declare class AgentSession {
505
556
  private _refreshToolRegistry;
506
557
  private _buildRuntime;
507
558
  reload(): Promise<void>;
508
- /**
509
- * Check if an error is retryable (overloaded, rate limit, server errors).
510
- * Context overflow errors are NOT retryable (handled by compaction instead).
511
- */
512
- private _isRetryableError;
559
+ private _classifyRetry;
560
+ private _isLegacyRetryableError;
561
+ private _bounded;
562
+ private _appendAutoRetryRecord;
563
+ /**
564
+ * Persist a terminal record, emit `auto_retry_end` when a retry phase was active, and clear the phase.
565
+ * The phase is released before persistence is attempted so a persistence failure can never strand it.
566
+ */
567
+ private _finishRetry;
568
+ private _finishRetryWithoutSuccess;
569
+ /** A run that ends without a classifiable snapshot cannot continue the retry; close it so nothing stays wedged. */
570
+ private _releaseRetryForFailedRun;
571
+ private _reportRetryFailure;
513
572
  private _handleRetryableError;
573
+ private _finishCancelledRetry;
514
574
  /**
515
575
  * Cancel in-progress retry.
516
576
  */
517
577
  abortRetry(): void;
578
+ /** Agent's own `activeRun` guard is false during backoff; the retry phase owns the idle Agent then. */
579
+ private _assertRetryNotOwningIdleAgent;
580
+ private _runAgentPrompt;
518
581
  private waitForRetry;
519
582
  /** Whether auto-retry is currently in progress */
520
583
  get isRetrying(): boolean;
@@ -589,7 +652,7 @@ export declare class AgentSession {
589
652
  entryId: string;
590
653
  text: string;
591
654
  }>;
592
- private _extractUserMessageText;
655
+ getRecordedSessionCost(): number;
593
656
  /**
594
657
  * Get session statistics.
595
658
  */