@roackb2/heddle 0.0.26 → 0.0.27

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 (86) hide show
  1. package/dist/src/cli/ask.d.ts +3 -0
  2. package/dist/src/cli/ask.d.ts.map +1 -1
  3. package/dist/src/cli/ask.js +85 -2
  4. package/dist/src/cli/ask.js.map +1 -1
  5. package/dist/src/cli/chat/App.d.ts.map +1 -1
  6. package/dist/src/cli/chat/App.js +104 -8
  7. package/dist/src/cli/chat/App.js.map +1 -1
  8. package/dist/src/cli/chat/debug/tui-debug-snapshot.d.ts +49 -0
  9. package/dist/src/cli/chat/debug/tui-debug-snapshot.d.ts.map +1 -0
  10. package/dist/src/cli/chat/debug/tui-debug-snapshot.js +103 -0
  11. package/dist/src/cli/chat/debug/tui-debug-snapshot.js.map +1 -0
  12. package/dist/src/cli/chat/debug/tui-frame-recorder.d.ts +20 -0
  13. package/dist/src/cli/chat/debug/tui-frame-recorder.d.ts.map +1 -0
  14. package/dist/src/cli/chat/debug/tui-frame-recorder.js +75 -0
  15. package/dist/src/cli/chat/debug/tui-frame-recorder.js.map +1 -0
  16. package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +1 -1
  17. package/dist/src/cli/chat/hooks/useAgentRun.js +93 -22
  18. package/dist/src/cli/chat/hooks/useAgentRun.js.map +1 -1
  19. package/dist/src/cli/chat/hooks/useChatSessions.js +1 -1
  20. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  21. package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts +2 -1
  22. package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts.map +1 -1
  23. package/dist/src/cli/chat/hooks/usePromptSubmission.js +11 -1
  24. package/dist/src/cli/chat/hooks/usePromptSubmission.js.map +1 -1
  25. package/dist/src/cli/chat/index.d.ts.map +1 -1
  26. package/dist/src/cli/chat/index.js +15 -1
  27. package/dist/src/cli/chat/index.js.map +1 -1
  28. package/dist/src/cli/chat/state/compaction.d.ts +1 -1
  29. package/dist/src/cli/chat/state/compaction.d.ts.map +1 -1
  30. package/dist/src/cli/chat/state/compaction.js +1 -1
  31. package/dist/src/cli/chat/state/compaction.js.map +1 -1
  32. package/dist/src/cli/chat/state/local-commands.d.ts +3 -1
  33. package/dist/src/cli/chat/state/local-commands.d.ts.map +1 -1
  34. package/dist/src/cli/chat/state/local-commands.js +49 -1
  35. package/dist/src/cli/chat/state/local-commands.js.map +1 -1
  36. package/dist/src/cli/chat/submit.d.ts +1 -0
  37. package/dist/src/cli/chat/submit.d.ts.map +1 -1
  38. package/dist/src/cli/chat/submit.js +39 -16
  39. package/dist/src/cli/chat/submit.js.map +1 -1
  40. package/dist/src/cli/chat/utils/runtime.d.ts +11 -0
  41. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  42. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  43. package/dist/src/cli/main.js +12 -2
  44. package/dist/src/cli/main.js.map +1 -1
  45. package/dist/src/core/chat/archive.d.ts +19 -0
  46. package/dist/src/core/chat/archive.d.ts.map +1 -0
  47. package/dist/src/core/chat/archive.js +129 -0
  48. package/dist/src/core/chat/archive.js.map +1 -0
  49. package/dist/src/core/chat/compaction.d.ts +39 -2
  50. package/dist/src/core/chat/compaction.d.ts.map +1 -1
  51. package/dist/src/core/chat/compaction.js +309 -19
  52. package/dist/src/core/chat/compaction.js.map +1 -1
  53. package/dist/src/core/chat/conversation-lines.d.ts.map +1 -1
  54. package/dist/src/core/chat/conversation-lines.js +4 -1
  55. package/dist/src/core/chat/conversation-lines.js.map +1 -1
  56. package/dist/src/core/chat/session-submit.d.ts +7 -0
  57. package/dist/src/core/chat/session-submit.d.ts.map +1 -1
  58. package/dist/src/core/chat/session-submit.js +62 -6
  59. package/dist/src/core/chat/session-submit.js.map +1 -1
  60. package/dist/src/core/chat/storage.d.ts +2 -1
  61. package/dist/src/core/chat/storage.d.ts.map +1 -1
  62. package/dist/src/core/chat/storage.js +34 -1
  63. package/dist/src/core/chat/storage.js.map +1 -1
  64. package/dist/src/core/chat/types.d.ts +21 -0
  65. package/dist/src/core/chat/types.d.ts.map +1 -1
  66. package/dist/src/core/tools/file-edit-core.js +0 -4
  67. package/dist/src/core/tools/file-edit-core.js.map +1 -1
  68. package/dist/src/server/features/control-plane/router.d.ts +27 -0
  69. package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
  70. package/dist/src/server/features/control-plane/router.js +19 -1
  71. package/dist/src/server/features/control-plane/router.js.map +1 -1
  72. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
  73. package/dist/src/server/features/control-plane/services/chat-sessions.js +58 -9
  74. package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
  75. package/dist/src/server/features/control-plane/services/heartbeat.d.ts +2 -0
  76. package/dist/src/server/features/control-plane/services/heartbeat.d.ts.map +1 -1
  77. package/dist/src/server/features/control-plane/services/heartbeat.js +46 -1
  78. package/dist/src/server/features/control-plane/services/heartbeat.js.map +1 -1
  79. package/dist/src/server/features/control-plane/types.d.ts +22 -1
  80. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  81. package/dist/src/server/router.d.ts +27 -0
  82. package/dist/src/server/router.d.ts.map +1 -1
  83. package/dist/src/web/assets/index-BPZ31ir-.js +12 -0
  84. package/dist/src/web/index.html +1 -1
  85. package/package.json +1 -1
  86. package/dist/src/web/assets/index-CY-VX1fa.js +0 -12
@@ -6,6 +6,9 @@ export type AskCliOptions = {
6
6
  stateDir?: string;
7
7
  searchIgnoreDirs?: string[];
8
8
  systemContext?: string;
9
+ sessionId?: string;
10
+ latestSession?: boolean;
11
+ createSessionName?: string;
9
12
  };
10
13
  export declare function runAskCli(goal: string, options?: AskCliOptions): Promise<void>;
11
14
  //# sourceMappingURL=ask.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/cli/ask.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,iBAiCxE"}
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/cli/ask.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,iBA2ExE"}
@@ -1,6 +1,8 @@
1
- import { mkdirSync, writeFileSync } from 'node:fs';
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { DEFAULT_OPENAI_MODEL, inferProviderFromModel, runAgentLoop, formatTraceForConsole, createLogger, resolveProviderApiKey, } from '../index.js';
3
+ import { DEFAULT_OPENAI_MODEL, inferProviderFromModel, runAgentLoop, formatTraceForConsole, createLogger, resolveProviderApiKey, resolveApiKeyForModel, } from '../index.js';
4
+ import { submitChatSessionPrompt } from '../core/chat/session-submit.js';
5
+ import { createChatSession, readChatSession, readChatSessionCatalog, saveChatSessions } from '../core/chat/storage.js';
4
6
  export async function runAskCli(goal, options = {}) {
5
7
  if (!goal.trim()) {
6
8
  throw new Error('Usage: heddle ask "<goal>"');
@@ -11,7 +13,44 @@ export async function runAskCli(goal, options = {}) {
11
13
  const stateRoot = join(workspaceRoot, options.stateDir ?? '.heddle');
12
14
  const logger = createLogger({ pretty: true, level: 'debug' });
13
15
  const provider = inferProviderFromModel(model);
16
+ const sessionStoragePath = join(stateRoot, 'chat-sessions.catalog.json');
14
17
  logger.info({ goal, model, provider, maxSteps, cwd: workspaceRoot }, 'Heddle');
18
+ const sessionModeCount = Number(Boolean(options.sessionId)) + Number(Boolean(options.latestSession)) + Number(options.createSessionName !== undefined);
19
+ if (sessionModeCount > 1) {
20
+ throw new Error('Choose only one of --session, --latest, or --new-session for heddle ask.');
21
+ }
22
+ const targetSession = resolveAskSession({
23
+ sessionId: options.sessionId,
24
+ latestSession: options.latestSession,
25
+ createSessionName: options.createSessionName,
26
+ sessionStoragePath,
27
+ stateRoot,
28
+ model,
29
+ apiKeyPresent: Boolean(resolveApiKeyForModel(model, { apiKey: options.apiKey, apiKeyProvider: 'explicit' })),
30
+ });
31
+ if (targetSession) {
32
+ const result = await submitChatSessionPrompt({
33
+ workspaceRoot,
34
+ stateRoot,
35
+ sessionStoragePath,
36
+ sessionId: targetSession.id,
37
+ prompt: goal,
38
+ apiKey: options.apiKey,
39
+ });
40
+ const latestTraceFile = result.session.turns.at(-1)?.traceFile;
41
+ const trace = latestTraceFile ? readTraceFile(latestTraceFile) : undefined;
42
+ if (trace) {
43
+ process.stdout.write(`${formatTraceForConsole(trace)}\n`);
44
+ }
45
+ process.stdout.write([
46
+ `Session: ${result.session.id}`,
47
+ `Outcome: ${result.outcome}`,
48
+ `Summary: ${result.summary}`,
49
+ latestTraceFile ? `Trace: ${latestTraceFile}` : undefined,
50
+ result.session.context?.lastArchivePath ? `Latest archive: ${result.session.context.lastArchivePath}` : undefined,
51
+ ].filter((line) => Boolean(line)).join('\n') + '\n');
52
+ return;
53
+ }
15
54
  const result = await runAgentLoop({
16
55
  goal,
17
56
  model,
@@ -31,6 +70,50 @@ export async function runAskCli(goal, options = {}) {
31
70
  writeFileSync(traceFile, JSON.stringify(result.trace, null, 2));
32
71
  logger.info({ traceFile }, 'Trace saved');
33
72
  }
73
+ function resolveAskSession(options) {
74
+ if (options.createSessionName !== undefined) {
75
+ const existing = readChatSessionCatalog(options.sessionStoragePath);
76
+ const nextNumber = existing.length + 1;
77
+ const session = createChatSession({
78
+ id: `session-${Date.now()}`,
79
+ name: options.createSessionName.trim() || `Session ${nextNumber}`,
80
+ apiKeyPresent: options.apiKeyPresent,
81
+ model: options.model,
82
+ });
83
+ const currentSessions = existing
84
+ .map((entry) => readChatSession(options.sessionStoragePath, entry.id, options.apiKeyPresent))
85
+ .filter((candidate) => Boolean(candidate));
86
+ saveChatSessions(options.sessionStoragePath, [session, ...currentSessions]);
87
+ return session;
88
+ }
89
+ if (options.latestSession) {
90
+ const latest = readChatSessionCatalog(options.sessionStoragePath)[0];
91
+ if (!latest) {
92
+ throw new Error('No saved chat sessions are available yet. Use --new-session to create one first.');
93
+ }
94
+ const session = readChatSession(options.sessionStoragePath, latest.id, options.apiKeyPresent);
95
+ if (!session) {
96
+ throw new Error(`Chat session not found: ${latest.id}`);
97
+ }
98
+ return session;
99
+ }
100
+ if (options.sessionId) {
101
+ const session = readChatSession(options.sessionStoragePath, options.sessionId, options.apiKeyPresent);
102
+ if (!session) {
103
+ throw new Error(`Chat session not found: ${options.sessionId}`);
104
+ }
105
+ return session;
106
+ }
107
+ return undefined;
108
+ }
109
+ function readTraceFile(path) {
110
+ try {
111
+ return JSON.parse(readFileSync(path, 'utf8'));
112
+ }
113
+ catch {
114
+ return undefined;
115
+ }
116
+ }
34
117
  function parsePositiveInt(raw) {
35
118
  if (!raw) {
36
119
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../../src/cli/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAYrB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,UAAyB,EAAE;IACvE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,oBAAoB,CAAC;IAC/G,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;IAC3F,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE/E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC,QAAQ,CAAC;QACzD,QAAQ;QACR,MAAM;QACN,aAAa;QACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7D,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAuB;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../../src/cli/ask.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../src/cli/chat/App.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,wBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,iBAAiB,CAAA;CAAE,2CAgR9D"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../src/cli/chat/App.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,wBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,iBAAiB,CAAA;CAAE,2CAyX9D"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
2
+ import { useCallback, useEffect, useMemo, useState } from 'react';
3
3
  import { Box, Text } from 'ink';
4
4
  import { ApprovalComposer, CommandHintPanel, ConversationPanel, FileMentionPickerPanel, ModelPickerPanel, PromptInput, SessionPickerPanel, shouldShowCommandHint, shouldShowSlashHints, SlashHintPanel, } from './components/index.js';
5
+ import { buildTuiDebugSnapshot } from './debug/tui-debug-snapshot.js';
5
6
  import { estimateBuiltInContextWindow } from '../../core/llm/openai-models.js';
6
7
  import { useApprovalFlow } from './hooks/useApprovalFlow.js';
7
8
  import { useAgentRun } from './hooks/useAgentRun.js';
@@ -11,6 +12,7 @@ import { useChatSessions } from './hooks/useChatSessions.js';
11
12
  import { useLocalIds } from './hooks/useLocalIds.js';
12
13
  import { usePromptDraft } from './hooks/usePromptDraft.js';
13
14
  import { usePromptSubmission } from './hooks/usePromptSubmission.js';
15
+ import { autocompleteLocalCommand } from './state/local-commands.js';
14
16
  import { currentActivityText } from './utils/format.js';
15
17
  import { listMentionableFiles } from './utils/file-mentions.js';
16
18
  const SESSION_TITLE_MODEL = 'gpt-5.1-codex-mini';
@@ -45,10 +47,20 @@ export function App({ runtime }) {
45
47
  }
46
48
  }, [activeModel, activeSession, runtime.model]);
47
49
  const { status, setStatus, isRunning, error, liveEvents, workingFrame, elapsedSeconds, pendingApproval, approvalChoice, interruptRequested, currentAssistantText, currentPlan, resetRunState, actionState, workingFrames, } = useApprovalFlow(nextLocalId);
48
- const messages = activeSession?.messages ?? [];
50
+ const messages = useMemo(() => activeSession?.messages ?? [], [activeSession?.messages]);
51
+ const compacting = activeSession?.context?.compactionStatus === 'running';
49
52
  const activityText = currentActivityText(liveEvents, isRunning, elapsedSeconds, pendingApproval, interruptRequested);
50
53
  const contextStatus = formatContextStatus(activeModel, activeSession?.context?.lastRunInputTokens ?? activeSession?.context?.estimatedRequestTokens);
51
54
  const sessionFooter = `session=${activeSession?.id ?? activeSessionId}${activeSession?.name ? ` (${activeSession.name})` : ''}`;
55
+ const renderedStatus = pendingApproval ? 'awaiting approval'
56
+ : compacting ? 'compacting'
57
+ : interruptRequested ? 'interrupt requested'
58
+ : isRunning ? 'running'
59
+ : status;
60
+ const statusHint = pendingApproval ? '←/→ choose • Enter confirms • A remembers for this project • Esc denies • Ctrl+C exits'
61
+ : compacting ? 'Compacting archived history in the background • Ctrl+C exits'
62
+ : isRunning ? 'Type freely • Enter queues prompt • Esc requests stop after the current step • Ctrl+C exits'
63
+ : 'Enter sends • Tab completes slash commands • /help shows commands • !command runs shell • Ctrl+C exits';
52
64
  const activityLines = liveEvents
53
65
  .slice(-4)
54
66
  .filter((event, index, events) => events.findIndex((candidate) => candidate.text === event.text) === index)
@@ -58,7 +70,7 @@ export function App({ runtime }) {
58
70
  }
59
71
  return event.text;
60
72
  });
61
- const activeTurn = isRunning || pendingApproval || interruptRequested || error ?
73
+ const activeTurn = useMemo(() => isRunning || pendingApproval || interruptRequested || error ?
62
74
  {
63
75
  title: pendingApproval ? activityText
64
76
  : error ? 'Recent activity before failure'
@@ -70,7 +82,92 @@ export function App({ runtime }) {
70
82
  currentAssistantText,
71
83
  currentPlan,
72
84
  }
73
- : undefined;
85
+ : undefined, [
86
+ isRunning,
87
+ pendingApproval,
88
+ interruptRequested,
89
+ error,
90
+ activityText,
91
+ activityLines,
92
+ currentAssistantText,
93
+ currentPlan,
94
+ ]);
95
+ const saveTuiSnapshotMessage = useCallback(() => {
96
+ if (!runtime.saveTuiSnapshot) {
97
+ return 'TUI snapshots are not available in this runtime.';
98
+ }
99
+ const saved = runtime.saveTuiSnapshot({
100
+ sessionId: activeSessionId,
101
+ model: activeModel,
102
+ status: pendingApproval ? 'awaiting-approval'
103
+ : isRunning ? 'running'
104
+ : compacting ? 'compacting'
105
+ : 'idle',
106
+ textSnapshot: buildTuiDebugSnapshot({
107
+ sessionName: activeSession?.name ?? 'unknown',
108
+ activeModel,
109
+ maxSteps: runtime.maxSteps,
110
+ status: renderedStatus,
111
+ hint: statusHint,
112
+ contextStatus,
113
+ sessionFooter,
114
+ activeSessionId,
115
+ sessions,
116
+ messages,
117
+ activeTurn,
118
+ pendingApproval,
119
+ approvalChoice,
120
+ draft,
121
+ draftCursor,
122
+ showSlashHints: shouldShowSlashHints(draft),
123
+ showCommandHint: shouldShowCommandHint(draft),
124
+ modelPicker: pickers.model,
125
+ sessionPicker: pickers.session,
126
+ fileMentionPicker: pickers.fileMention,
127
+ }),
128
+ });
129
+ return [
130
+ `Saved TUI snapshot at ${saved.capturedAt}.`,
131
+ `Text: ${saved.txtPath}`,
132
+ `ANSI: ${saved.ansiPath}`,
133
+ `Metadata: ${saved.jsonPath}`,
134
+ ].join('\n');
135
+ }, [
136
+ runtime,
137
+ activeSessionId,
138
+ activeModel,
139
+ pendingApproval,
140
+ isRunning,
141
+ compacting,
142
+ activeSession,
143
+ contextStatus,
144
+ sessionFooter,
145
+ sessions,
146
+ messages,
147
+ activeTurn,
148
+ approvalChoice,
149
+ draft,
150
+ draftCursor,
151
+ pickers.model,
152
+ pickers.session,
153
+ pickers.fileMention,
154
+ renderedStatus,
155
+ statusHint,
156
+ ]);
157
+ const handlePromptSpecialKey = useCallback((event) => {
158
+ if (pickers.handleSpecialKey(event)) {
159
+ return true;
160
+ }
161
+ if (!event.key.tab || draftCursor !== draft.length) {
162
+ return false;
163
+ }
164
+ const completed = autocompleteLocalCommand(draft, activeSession?.id ?? activeSessionId, sessions);
165
+ if (!completed || completed === draft) {
166
+ return false;
167
+ }
168
+ replaceDraft(completed);
169
+ return true;
170
+ }, [pickers, draftCursor, draft, activeSession, activeSessionId, sessions, replaceDraft]);
74
171
  const switchSession = (id) => {
75
172
  setActiveSessionId(id);
76
173
  clearDraft();
@@ -122,6 +219,7 @@ export function App({ runtime }) {
122
219
  driftEnabled: drift.enabled,
123
220
  driftError: drift.error,
124
221
  setDriftEnabled: drift.setEnabled,
222
+ saveTuiSnapshotMessage,
125
223
  isRunning,
126
224
  pendingApproval,
127
225
  executeTurn,
@@ -132,9 +230,7 @@ export function App({ runtime }) {
132
230
  fileMentionPicker: pickers.fileMention,
133
231
  resetPickerIndexes: pickers.resetPickerIndexes,
134
232
  });
135
- return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { bold: true, children: ["Heddle", _jsx(Text, { dimColor: true, children: ` • ${activeSession?.name ?? 'unknown'} • model=${activeModel} • steps=${runtime.maxSteps}` })] }), _jsxs(Text, { color: error ? 'red' : isRunning ? 'yellow' : 'green', children: ["status=", pendingApproval ? 'awaiting approval' : interruptRequested ? 'interrupt requested' : isRunning ? 'running' : status] }), _jsx(Text, { dimColor: true, children: pendingApproval ? '←/→ choose Enter confirms A remembers for this project Esc denies Ctrl+C exits'
136
- : isRunning ? 'Type freely • Enter queues prompt • Esc requests stop after the current step • Ctrl+C exits'
137
- : 'Enter sends • /help shows commands • !command runs shell • Ctrl+C exits' })] }), _jsx(ConversationPanel, { messages: messages, activeTurn: activeTurn }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: pendingApproval ? 'yellow' : isRunning ? 'yellow' : 'cyan', paddingX: 1, paddingY: 0, children: [_jsx(Text, { bold: true, color: pendingApproval ? 'yellow' : undefined, children: pendingApproval ? 'Approval Required' : isRunning ? `Working${workingFrames[workingFrame]}` : 'Prompt' }), pendingApproval ?
233
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { bold: true, children: ["Heddle", _jsx(Text, { dimColor: true, children: ` • ${activeSession?.name ?? 'unknown'} • model=${activeModel} • steps=${runtime.maxSteps}` })] }), _jsxs(Text, { color: error ? 'red' : isRunning ? 'yellow' : 'green', children: ["status=", renderedStatus] }), _jsx(Text, { dimColor: true, children: statusHint })] }), _jsx(ConversationPanel, { messages: messages, activeTurn: activeTurn }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: pendingApproval ? 'yellow' : isRunning ? 'yellow' : 'cyan', paddingX: 1, paddingY: 0, children: [_jsx(Text, { bold: true, color: pendingApproval ? 'yellow' : undefined, children: pendingApproval ? 'Approval Required' : compacting ? 'Compacting…' : isRunning ? `Working${workingFrames[workingFrame]}` : 'Prompt' }), pendingApproval ?
138
234
  _jsx(ApprovalComposer, { pendingApproval: pendingApproval, approvalChoice: approvalChoice })
139
235
  : _jsxs(_Fragment, { children: [pickers.model.visible ?
140
236
  _jsx(ModelPickerPanel, { query: pickers.model.query ?? '', models: pickers.model.items, activeModel: activeModel, highlightedIndex: pickers.model.highlightedIndex })
@@ -146,7 +242,7 @@ export function App({ runtime }) {
146
242
  _jsx(SlashHintPanel, { draft: draft, activeSessionId: activeSession?.id ?? '', sessions: sessions })
147
243
  : shouldShowCommandHint(draft) ?
148
244
  _jsx(CommandHintPanel, { draft: draft })
149
- : null, _jsxs(Box, { children: [_jsxs(Text, { color: "cyan", children: ['>', " "] }), _jsx(Box, { flexGrow: 1, children: _jsx(PromptInput, { value: draft, cursor: draftCursor, isDisabled: Boolean(pendingApproval), placeholder: isRunning ? "Keep typing while Heddle works" : "Ask Heddle about this project", maxVisibleLines: 10, onChange: setDraft, onCursorChange: setDraftCursor, onSpecialKey: pickers.handleSpecialKey, onSubmit: (value) => {
245
+ : null, _jsxs(Box, { children: [_jsxs(Text, { color: "cyan", children: ['>', " "] }), _jsx(Box, { flexGrow: 1, children: _jsx(PromptInput, { value: draft, cursor: draftCursor, isDisabled: Boolean(pendingApproval), placeholder: isRunning ? "Keep typing while Heddle works" : "Ask Heddle about this project", maxVisibleLines: 10, onChange: setDraft, onCursorChange: setDraftCursor, onSpecialKey: handlePromptSpecialKey, onSubmit: (value) => {
150
246
  clearDraft();
151
247
  void submitPrompt(value);
152
248
  } }) })] }), _jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { dimColor: true, children: draft ? `${draft.length} chars`
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../../../src/cli/chat/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../../../src/cli/chat/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ChatSession, ConversationLine, PendingApproval } from '../state/types.js';
2
+ type ActiveTurnSnapshot = {
3
+ title: string;
4
+ lines: string[];
5
+ error?: string;
6
+ currentAssistantText?: string;
7
+ };
8
+ export declare function buildTuiDebugSnapshot(args: {
9
+ sessionName: string;
10
+ activeModel: string;
11
+ maxSteps: number;
12
+ status: string;
13
+ hint: string;
14
+ contextStatus: string;
15
+ sessionFooter: string;
16
+ activeSessionId: string;
17
+ sessions: ChatSession[];
18
+ messages: ConversationLine[];
19
+ activeTurn?: ActiveTurnSnapshot;
20
+ pendingApproval?: PendingApproval;
21
+ approvalChoice?: 'approve' | 'allow_project' | 'deny';
22
+ draft: string;
23
+ draftCursor: number;
24
+ showSlashHints: boolean;
25
+ showCommandHint: boolean;
26
+ modelPicker?: {
27
+ visible: boolean;
28
+ query?: string;
29
+ items: string[];
30
+ highlightedIndex: number;
31
+ };
32
+ sessionPicker?: {
33
+ visible: boolean;
34
+ query?: string;
35
+ items: Array<{
36
+ id: string;
37
+ name: string;
38
+ }>;
39
+ highlightedIndex: number;
40
+ };
41
+ fileMentionPicker?: {
42
+ visible: boolean;
43
+ query?: string;
44
+ items: string[];
45
+ highlightedIndex: number;
46
+ };
47
+ }): string;
48
+ export {};
49
+ //# sourceMappingURL=tui-debug-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-debug-snapshot.d.ts","sourceRoot":"","sources":["../../../../../src/cli/chat/debug/tui-debug-snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGxF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH,GAAG,MAAM,CAuGT"}
@@ -0,0 +1,103 @@
1
+ import { buildPromptRenderLines } from '../components/PromptInput.js';
2
+ import { getLocalCommandHints } from '../state/local-commands.js';
3
+ import { formatApprovalHint, summarizePendingApproval, truncate } from '../utils/format.js';
4
+ export function buildTuiDebugSnapshot(args) {
5
+ const lines = [
6
+ `Heddle • ${args.sessionName} • model=${args.activeModel} • steps=${args.maxSteps}`,
7
+ `status=${args.status}`,
8
+ args.hint,
9
+ '',
10
+ 'Conversation',
11
+ ];
12
+ for (const message of args.messages.slice(-8)) {
13
+ lines.push(message.role === 'user' ? `┌ You${message.isPending ? ' (queued)' : ''}` : '┌ Heddle');
14
+ lines.push(...indentLines(renderMessageText(message.text)));
15
+ lines.push('└');
16
+ lines.push('');
17
+ }
18
+ if (args.activeTurn) {
19
+ lines.push('┌ Heddle');
20
+ lines.push(...indentLines([args.activeTurn.title, ...args.activeTurn.lines]));
21
+ if (args.activeTurn.currentAssistantText) {
22
+ lines.push(...indentLines(renderMessageText(args.activeTurn.currentAssistantText)));
23
+ }
24
+ if (args.activeTurn.error) {
25
+ lines.push(...indentLines([`Error: ${args.activeTurn.error}`]));
26
+ }
27
+ lines.push('└');
28
+ lines.push('');
29
+ }
30
+ if (args.pendingApproval) {
31
+ const summary = summarizePendingApproval(args.pendingApproval);
32
+ lines.push('Approval');
33
+ lines.push(`Title: ${summary.title}`);
34
+ if (summary.command) {
35
+ lines.push(`Command: ${summary.command}`);
36
+ }
37
+ lines.push(`Scope: ${summary.scope}`);
38
+ lines.push(`Capability: ${summary.capability}`);
39
+ if (summary.risk) {
40
+ lines.push(`Risk: ${summary.risk}`);
41
+ }
42
+ lines.push(`Why: ${summary.why}`);
43
+ lines.push(`Hint: ${formatApprovalHint(args.pendingApproval)}`);
44
+ lines.push(`Choice: ${args.approvalChoice ?? 'approve'}`);
45
+ lines.push('');
46
+ }
47
+ if (args.showSlashHints) {
48
+ lines.push('Slash commands');
49
+ for (const hint of getLocalCommandHints(args.draft, args.activeSessionId, args.sessions).slice(0, 10)) {
50
+ lines.push(`${hint.command} ${hint.description}`);
51
+ }
52
+ lines.push('');
53
+ }
54
+ if (args.showCommandHint) {
55
+ const command = args.draft.trim().slice(1).trim();
56
+ lines.push('Direct shell');
57
+ lines.push(command ?
58
+ `Run ${truncate(command, 100)} directly in chat. Read-oriented commands stay in inspect mode; other commands fall back to approval-gated execution.`
59
+ : 'Start with ! to run a shell command directly in chat.');
60
+ lines.push('');
61
+ }
62
+ if (args.modelPicker?.visible) {
63
+ lines.push('Model picker');
64
+ lines.push(args.modelPicker.query ? `Search: ${args.modelPicker.query}` : 'Type after /model set to filter. Use ↑/↓ or Tab to choose.');
65
+ lines.push(...renderPickerLines(args.modelPicker.items, args.modelPicker.highlightedIndex));
66
+ lines.push('');
67
+ }
68
+ if (args.sessionPicker?.visible) {
69
+ lines.push('Session picker');
70
+ lines.push(args.sessionPicker.query ? `Search: ${args.sessionPicker.query}` : 'Type after /session choose to filter. Use ↑/↓ or Tab to choose.');
71
+ lines.push(...renderPickerLines(args.sessionPicker.items.map((item, index) => `${index + 1}. ${item.name} [${item.id}]`), args.sessionPicker.highlightedIndex));
72
+ lines.push('');
73
+ }
74
+ if (args.fileMentionPicker?.visible) {
75
+ lines.push('File mentions');
76
+ lines.push(args.fileMentionPicker.query ? `Search: ${args.fileMentionPicker.query}` : 'Type after @ to mention a file. Use ↑/↓ or Tab to choose.');
77
+ lines.push(...renderPickerLines(args.fileMentionPicker.items, args.fileMentionPicker.highlightedIndex));
78
+ lines.push('');
79
+ }
80
+ lines.push('Prompt');
81
+ const promptLines = args.draft.length > 0 ?
82
+ buildPromptRenderLines(args.draft, args.draftCursor, 8, 80).map((line) => `${line.before}${line.hasCursor ? `[${line.cursor}]` : ''}${line.after}` || ' ')
83
+ : ['Ask Heddle about this project'];
84
+ lines.push(...promptLines.map((line) => `> ${line}`));
85
+ lines.push(args.draft.length > 0 ? `${args.draft.length} chars` : 'Enter to send');
86
+ lines.push('');
87
+ lines.push(`${args.contextStatus} • ${args.sessionFooter}`);
88
+ return `${lines.join('\n').trimEnd()}\n`;
89
+ }
90
+ function renderMessageText(text) {
91
+ const normalized = text.split(/\r?\n/);
92
+ return normalized.length > 0 ? normalized : [''];
93
+ }
94
+ function renderPickerLines(items, highlightedIndex) {
95
+ if (items.length === 0) {
96
+ return ['No matching entries.'];
97
+ }
98
+ return items.slice(0, 8).map((item, index) => `${index === highlightedIndex ? '◉' : '○'} ${item}`);
99
+ }
100
+ function indentLines(lines) {
101
+ return lines.map((line) => ` ${line || ' '}`);
102
+ }
103
+ //# sourceMappingURL=tui-debug-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-debug-snapshot.js","sourceRoot":"","sources":["../../../../../src/cli/chat/debug/tui-debug-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type SavedTuiSnapshot = {
2
+ capturedAt: string;
3
+ txtPath: string;
4
+ ansiPath: string;
5
+ jsonPath: string;
6
+ };
7
+ export type TuiSnapshotMetadata = {
8
+ sessionId?: string;
9
+ model?: string;
10
+ status?: string;
11
+ terminalColumns?: number;
12
+ terminalRows?: number;
13
+ textSnapshot?: string;
14
+ };
15
+ export type TuiFrameRecorder = {
16
+ record: (chunk: string) => void;
17
+ saveSnapshot: (metadata?: TuiSnapshotMetadata) => SavedTuiSnapshot;
18
+ };
19
+ export declare function createTuiFrameRecorder(stateRoot: string): TuiFrameRecorder;
20
+ //# sourceMappingURL=tui-frame-recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-frame-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/cli/chat/debug/tui-frame-recorder.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,mBAAmB,KAAK,gBAAgB,CAAC;CACpE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CA8C1E"}
@@ -0,0 +1,75 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const TUI_SNAPSHOT_DIR = 'debug/tui-snapshots';
4
+ const MAX_CAPTURE_CHARS = 200_000;
5
+ const ANSI_PATTERN = new RegExp(`${String.fromCharCode(27)}(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~])`, 'g');
6
+ export function createTuiFrameRecorder(stateRoot) {
7
+ let latestChunk = '';
8
+ let streamTail = '';
9
+ return {
10
+ record(chunk) {
11
+ if (!chunk) {
12
+ return;
13
+ }
14
+ latestChunk = chunk;
15
+ streamTail = truncateTail(`${streamTail}${chunk}`);
16
+ },
17
+ saveSnapshot(metadata = {}) {
18
+ const capturedAt = new Date().toISOString();
19
+ const outputDir = join(stateRoot, TUI_SNAPSHOT_DIR);
20
+ mkdirSync(outputDir, { recursive: true });
21
+ const basename = capturedAt.replaceAll(':', '-');
22
+ const bestCapture = selectBestCapture(latestChunk, streamTail);
23
+ const ansiOutput = bestCapture.ansiOutput;
24
+ const textOutput = normalizeTerminalText(metadata.textSnapshot ?? bestCapture.textOutput);
25
+ const txtPath = join(outputDir, `${basename}.txt`);
26
+ const ansiPath = join(outputDir, `${basename}.ansi`);
27
+ const jsonPath = join(outputDir, `${basename}.json`);
28
+ writeFileSync(txtPath, textOutput.endsWith('\n') ? textOutput : `${textOutput}\n`, 'utf8');
29
+ writeFileSync(ansiPath, ansiOutput, 'utf8');
30
+ writeFileSync(jsonPath, `${JSON.stringify({
31
+ capturedAt,
32
+ txtPath,
33
+ ansiPath,
34
+ latestChunkLength: latestChunk.length,
35
+ streamTailLength: streamTail.length,
36
+ ...metadata,
37
+ textSnapshot: undefined,
38
+ }, null, 2)}\n`, 'utf8');
39
+ return {
40
+ capturedAt,
41
+ txtPath,
42
+ ansiPath,
43
+ jsonPath,
44
+ };
45
+ },
46
+ };
47
+ }
48
+ function truncateTail(value) {
49
+ return value.length <= MAX_CAPTURE_CHARS ? value : value.slice(-MAX_CAPTURE_CHARS);
50
+ }
51
+ function stripAnsi(value) {
52
+ return value.replaceAll(ANSI_PATTERN, '');
53
+ }
54
+ function normalizeTerminalText(value) {
55
+ return value
56
+ .replaceAll('\r\n', '\n')
57
+ .replaceAll('\r', '\n')
58
+ .replaceAll('\u0007', '')
59
+ .replaceAll('\u001B]8;;', '')
60
+ .trimEnd();
61
+ }
62
+ function selectBestCapture(latestChunk, streamTail) {
63
+ const latestText = normalizeTerminalText(stripAnsi(latestChunk));
64
+ if (latestText.length > 0) {
65
+ return {
66
+ ansiOutput: latestChunk,
67
+ textOutput: latestText,
68
+ };
69
+ }
70
+ return {
71
+ ansiOutput: streamTail || latestChunk,
72
+ textOutput: normalizeTerminalText(stripAnsi(streamTail || latestChunk)),
73
+ };
74
+ }
75
+ //# sourceMappingURL=tui-frame-recorder.js.map