@roackb2/heddle 0.0.24 → 0.0.26
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.
- package/README.md +12 -1
- package/dist/examples/repo-investigator.js +2 -2
- package/dist/examples/repo-investigator.js.map +1 -1
- package/dist/src/cli/chat/App.d.ts.map +1 -1
- package/dist/src/cli/chat/App.js +51 -324
- package/dist/src/cli/chat/App.js.map +1 -1
- package/dist/src/cli/chat/hooks/useChatDrift.d.ts +22 -0
- package/dist/src/cli/chat/hooks/useChatDrift.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useChatDrift.js +43 -0
- package/dist/src/cli/chat/hooks/useChatDrift.js.map +1 -0
- package/dist/src/cli/chat/hooks/useChatPickers.d.ts +44 -0
- package/dist/src/cli/chat/hooks/useChatPickers.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useChatPickers.js +142 -0
- package/dist/src/cli/chat/hooks/useChatPickers.js.map +1 -0
- package/dist/src/cli/chat/hooks/useLocalIds.d.ts +2 -0
- package/dist/src/cli/chat/hooks/useLocalIds.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useLocalIds.js +6 -0
- package/dist/src/cli/chat/hooks/useLocalIds.js.map +1 -0
- package/dist/src/cli/chat/hooks/usePromptDraft.d.ts +9 -0
- package/dist/src/cli/chat/hooks/usePromptDraft.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/usePromptDraft.js +22 -0
- package/dist/src/cli/chat/hooks/usePromptDraft.js.map +1 -0
- package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts +58 -0
- package/dist/src/cli/chat/hooks/usePromptSubmission.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/usePromptSubmission.js +144 -0
- package/dist/src/cli/chat/hooks/usePromptSubmission.js.map +1 -0
- package/dist/src/cli/chat/state/local-commands.js +1 -1
- package/dist/src/cli/chat/state/local-commands.js.map +1 -1
- package/dist/src/cli/chat/utils/format.d.ts +5 -5
- package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
- package/dist/src/cli/chat/utils/format.js +5 -2
- package/dist/src/cli/chat/utils/format.js.map +1 -1
- package/dist/src/cli/heartbeat/args.d.ts +11 -0
- package/dist/src/cli/heartbeat/args.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/args.js +147 -0
- package/dist/src/cli/heartbeat/args.js.map +1 -0
- package/dist/src/cli/heartbeat/duration.d.ts +3 -0
- package/dist/src/cli/heartbeat/duration.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/duration.js +33 -0
- package/dist/src/cli/heartbeat/duration.js.map +1 -0
- package/dist/src/cli/heartbeat/output.d.ts +5 -0
- package/dist/src/cli/heartbeat/output.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/output.js +89 -0
- package/dist/src/cli/heartbeat/output.js.map +1 -0
- package/dist/src/cli/heartbeat/run-commands.d.ts +4 -0
- package/dist/src/cli/heartbeat/run-commands.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/run-commands.js +58 -0
- package/dist/src/cli/heartbeat/run-commands.js.map +1 -0
- package/dist/src/cli/heartbeat/store.d.ts +3 -0
- package/dist/src/cli/heartbeat/store.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/store.js +10 -0
- package/dist/src/cli/heartbeat/store.js.map +1 -0
- package/dist/src/cli/heartbeat/summary.d.ts +3 -0
- package/dist/src/cli/heartbeat/summary.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/summary.js +9 -0
- package/dist/src/cli/heartbeat/summary.js.map +1 -0
- package/dist/src/cli/heartbeat/task-commands.d.ts +4 -0
- package/dist/src/cli/heartbeat/task-commands.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/task-commands.js +117 -0
- package/dist/src/cli/heartbeat/task-commands.js.map +1 -0
- package/dist/src/cli/heartbeat/types.d.ts +11 -0
- package/dist/src/cli/heartbeat/types.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/types.js +2 -0
- package/dist/src/cli/heartbeat/types.js.map +1 -0
- package/dist/src/cli/heartbeat/worker.d.ts +5 -0
- package/dist/src/cli/heartbeat/worker.d.ts.map +1 -0
- package/dist/src/cli/heartbeat/worker.js +92 -0
- package/dist/src/cli/heartbeat/worker.js.map +1 -0
- package/dist/src/cli/heartbeat.d.ts +4 -18
- package/dist/src/cli/heartbeat.d.ts.map +1 -1
- package/dist/src/cli/heartbeat.js +9 -525
- package/dist/src/cli/heartbeat.js.map +1 -1
- package/dist/src/core/chat/conversation-lines.d.ts +4 -0
- package/dist/src/core/chat/conversation-lines.d.ts.map +1 -0
- package/dist/src/core/chat/conversation-lines.js +48 -0
- package/dist/src/core/chat/conversation-lines.js.map +1 -0
- package/dist/src/core/chat/failure-messages.d.ts +6 -0
- package/dist/src/core/chat/failure-messages.d.ts.map +1 -0
- package/dist/src/core/chat/failure-messages.js +24 -0
- package/dist/src/core/chat/failure-messages.js.map +1 -0
- package/dist/src/core/chat/session-submit.d.ts.map +1 -1
- package/dist/src/core/chat/session-submit.js +3 -1
- package/dist/src/core/chat/session-submit.js.map +1 -1
- package/dist/src/core/chat/storage.js +1 -1
- package/dist/src/core/chat/storage.js.map +1 -1
- package/dist/src/core/chat/trace-summary.d.ts +4 -0
- package/dist/src/core/chat/trace-summary.d.ts.map +1 -0
- package/dist/src/core/chat/trace-summary.js +64 -0
- package/dist/src/core/chat/trace-summary.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-lucid.d.ts +2 -1
- package/dist/src/core/runtime/heartbeat-lucid.d.ts.map +1 -1
- package/dist/src/core/runtime/heartbeat-lucid.js.map +1 -1
- package/dist/src/core/runtime/heartbeat-scheduler.d.ts +3 -58
- package/dist/src/core/runtime/heartbeat-scheduler.d.ts.map +1 -1
- package/dist/src/core/runtime/heartbeat-scheduler.js +6 -177
- package/dist/src/core/runtime/heartbeat-scheduler.js.map +1 -1
- package/dist/src/core/runtime/heartbeat-task-state.d.ts +5 -0
- package/dist/src/core/runtime/heartbeat-task-state.d.ts.map +1 -0
- package/dist/src/core/runtime/heartbeat-task-state.js +81 -0
- package/dist/src/core/runtime/heartbeat-task-state.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-task-store.d.ts +63 -0
- package/dist/src/core/runtime/heartbeat-task-store.d.ts.map +1 -0
- package/dist/src/core/runtime/heartbeat-task-store.js +95 -0
- package/dist/src/core/runtime/heartbeat-task-store.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-views.d.ts +1 -1
- package/dist/src/core/runtime/heartbeat-views.d.ts.map +1 -1
- package/dist/src/core/utils/text.d.ts +2 -0
- package/dist/src/core/utils/text.d.ts.map +1 -0
- package/dist/src/core/utils/text.js +7 -0
- package/dist/src/core/utils/text.js.map +1 -0
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/server/features/control-plane/router.d.ts +7 -0
- package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/router.js +7 -0
- package/dist/src/server/features/control-plane/router.js.map +1 -1
- package/dist/src/server/features/control-plane/services/layout-snapshots.d.ts +6 -0
- package/dist/src/server/features/control-plane/services/layout-snapshots.d.ts.map +1 -0
- package/dist/src/server/features/control-plane/services/layout-snapshots.js +68 -0
- package/dist/src/server/features/control-plane/services/layout-snapshots.js.map +1 -0
- package/dist/src/server/router.d.ts +7 -0
- package/dist/src/server/router.d.ts.map +1 -1
- package/dist/src/web/assets/index-C9sFoCL6.css +2 -0
- package/dist/src/web/assets/index-CY-VX1fa.js +12 -0
- package/dist/src/web/index.html +3 -3
- package/package.json +16 -16
- package/dist/examples/conversation.d.ts +0 -2
- package/dist/examples/conversation.d.ts.map +0 -1
- package/dist/examples/conversation.js +0 -3
- package/dist/examples/conversation.js.map +0 -1
- package/dist/src/core/chat/format.d.ts +0 -12
- package/dist/src/core/chat/format.d.ts.map +0 -1
- package/dist/src/core/chat/format.js +0 -139
- package/dist/src/core/chat/format.js.map +0 -1
- package/dist/src/web/assets/index-B5Df7Ey_.js +0 -12
- package/dist/src/web/assets/index-Cu-enbes.css +0 -1
package/dist/src/web/index.html
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
|
6
6
|
<link rel="icon" type="image/jpeg" href="/assets/favicon-CT3fFV8g.jpeg" />
|
|
7
7
|
<title>Heddle Control Plane</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-CY-VX1fa.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-C9sFoCL6.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roackb2/heddle",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"description": "An open-source terminal coding agent runtime and CLI for real repositories, with sessions, approvals, memory, heartbeat, and a browser control plane",
|
|
5
5
|
"author": "Jay / Fienna Liang <roackb2@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,27 +36,20 @@
|
|
|
36
36
|
"typecheck": "tsc -p tsconfig.build.json --noEmit",
|
|
37
37
|
"eslint": "eslint .",
|
|
38
38
|
"release:context": "node scripts/release-context.mjs",
|
|
39
|
-
"build": "yarn clean && tsc -p tsconfig.build.json && yarn
|
|
40
|
-
"
|
|
41
|
-
"
|
|
39
|
+
"build": "yarn clean && tsc -p tsconfig.build.json && yarn client:build",
|
|
40
|
+
"client:build": "tsc -p src/web/tsconfig.json --noEmit && vite build --config src/web/vite.config.ts",
|
|
41
|
+
"client:dev": "vite --config src/web/vite.config.ts",
|
|
42
42
|
"server:dev": "tsx --no-cache src/server/dev.ts",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"dev": "tsx --no-cache
|
|
43
|
+
"cli:dev": "tsx --no-cache src/cli/main.ts",
|
|
44
|
+
"chat:dev": "tsx --no-cache src/cli/main.ts chat",
|
|
45
|
+
"chat:dev:openai": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" tsx --no-cache src/cli/main.ts chat",
|
|
46
|
+
"chat:dev:anthropic": "ANTHROPIC_API_KEY=\"$PERSONAL_ANTHROPIC_API_KEY\" tsx --no-cache src/cli/main.ts chat",
|
|
47
|
+
"example:repo-investigator": "tsx --no-cache examples/repo-investigator.ts",
|
|
47
48
|
"example:programmatic": "tsx --no-cache examples/programmatic-loop.ts",
|
|
48
49
|
"example:heartbeat": "tsx --no-cache examples/heartbeat.ts",
|
|
49
50
|
"example:heartbeat-scheduler": "tsx --no-cache examples/heartbeat-scheduler.ts",
|
|
50
51
|
"example:host-events": "tsx --no-cache examples/host-events.ts",
|
|
51
52
|
"example:cyberloop-observer": "tsx --no-cache examples/cyberloop-observer.ts",
|
|
52
|
-
"cli:dev": "tsx --no-cache src/cli/main.ts",
|
|
53
|
-
"chat": "tsx --no-cache examples/conversation.tsx",
|
|
54
|
-
"chat:light": "OPENAI_MODEL=gpt-5.1-codex-mini tsx --no-cache examples/conversation.tsx",
|
|
55
|
-
"repo-investigator:dev": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" tsx --no-cache examples/repo-investigator.ts",
|
|
56
|
-
"chat:dev": "tsx --no-cache examples/conversation.tsx",
|
|
57
|
-
"chat:dev:openai": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" tsx --no-cache examples/conversation.tsx",
|
|
58
|
-
"chat:dev:openai:light": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" OPENAI_MODEL=gpt-5.1-codex-mini tsx --no-cache examples/conversation.tsx",
|
|
59
|
-
"chat:dev:anthropic": "ANTHROPIC_API_KEY=\"$PERSONAL_ANTHROPIC_API_KEY\" tsx --no-cache examples/conversation.tsx",
|
|
60
53
|
"test": "vitest run src/__tests__",
|
|
61
54
|
"prepare": "yarn build"
|
|
62
55
|
},
|
|
@@ -107,8 +100,13 @@
|
|
|
107
100
|
"dependencies": {
|
|
108
101
|
"@anthropic-ai/sdk": "^0.54.0",
|
|
109
102
|
"@inkjs/ui": "^2.0.0",
|
|
103
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
104
|
+
"@radix-ui/react-toast": "^1.2.15",
|
|
105
|
+
"@tailwindcss/vite": "^4.2.2",
|
|
110
106
|
"@trpc/client": "^11.16.0",
|
|
111
107
|
"@trpc/server": "^11.16.0",
|
|
108
|
+
"class-variance-authority": "^0.7.1",
|
|
109
|
+
"clsx": "^2.1.1",
|
|
112
110
|
"commander": "^14.0.1",
|
|
113
111
|
"express": "^5.2.1",
|
|
114
112
|
"ink": "^6.8.0",
|
|
@@ -116,6 +114,8 @@
|
|
|
116
114
|
"pino": "^10.3.1",
|
|
117
115
|
"pino-pretty": "^13.1.3",
|
|
118
116
|
"react": "19.2.5",
|
|
117
|
+
"tailwind-merge": "^3.5.0",
|
|
118
|
+
"tailwindcss": "^4.2.2",
|
|
119
119
|
"zod": "^4.3.6"
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../examples/conversation.tsx"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../examples/conversation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,YAAY,EAAE,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ChatMessage, TraceEvent } from '../../index.js';
|
|
2
|
-
import type { ConversationLine } from './types.js';
|
|
3
|
-
export type ChatFailureHintOptions = {
|
|
4
|
-
model: string;
|
|
5
|
-
estimatedHistoryTokens?: number;
|
|
6
|
-
};
|
|
7
|
-
export declare function buildConversationMessages(history: ChatMessage[]): ConversationLine[];
|
|
8
|
-
export declare function summarizeTrace(trace: TraceEvent[]): string[];
|
|
9
|
-
export declare function countAssistantSteps(trace: TraceEvent[]): number;
|
|
10
|
-
export declare function formatChatFailureMessage(message: string, options: ChatFailureHintOptions): string;
|
|
11
|
-
export declare function truncate(value: string, maxLength: number): string;
|
|
12
|
-
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CA6BpF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAgC5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAcjG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMjE"}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { isCompactedHistorySummary } from './compaction.js';
|
|
2
|
-
const MAX_TOOL_CALL_SUMMARY_CHARS = 96;
|
|
3
|
-
export function buildConversationMessages(history) {
|
|
4
|
-
return history.flatMap((message, index) => {
|
|
5
|
-
if (isCompactedHistorySummary(message)) {
|
|
6
|
-
return [{
|
|
7
|
-
id: `compacted-${index}`,
|
|
8
|
-
role: 'assistant',
|
|
9
|
-
text: 'Earlier conversation history was compacted to preserve context for longer chats.',
|
|
10
|
-
}];
|
|
11
|
-
}
|
|
12
|
-
if (message.role === 'user' || message.role === 'assistant') {
|
|
13
|
-
if (!message.content.trim()) {
|
|
14
|
-
return [];
|
|
15
|
-
}
|
|
16
|
-
return [{ id: `${message.role}-${index}-${message.content}`, role: message.role, text: message.content }];
|
|
17
|
-
}
|
|
18
|
-
if (message.role === 'tool') {
|
|
19
|
-
const rendered = renderToolHistoryMessage(message, history, index);
|
|
20
|
-
if (!rendered) {
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
23
|
-
return [{ id: `tool-${index}-${rendered}`, role: 'assistant', text: rendered }];
|
|
24
|
-
}
|
|
25
|
-
return [];
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
export function summarizeTrace(trace) {
|
|
29
|
-
return trace.flatMap((event) => {
|
|
30
|
-
switch (event.type) {
|
|
31
|
-
case 'assistant.turn':
|
|
32
|
-
return [
|
|
33
|
-
...(event.diagnostics?.rationale ? [`reasoning: ${truncate(event.diagnostics.rationale, 140)}`] : []),
|
|
34
|
-
event.requestedTools ?
|
|
35
|
-
`assistant requested ${event.toolCalls?.map((call) => summarizeToolCall(call.tool, call.input)).join(', ')}`
|
|
36
|
-
: 'assistant answered',
|
|
37
|
-
];
|
|
38
|
-
case 'tool.approval_requested':
|
|
39
|
-
return [`approval requested for ${summarizeToolCall(event.call.tool, event.call.input)}`];
|
|
40
|
-
case 'tool.approval_resolved':
|
|
41
|
-
return [
|
|
42
|
-
`approval ${event.approved ? 'granted' : 'denied'} for ${summarizeToolCall(event.call.tool, event.call.input)}${event.reason ? ` (${truncate(event.reason, 80)})` : ''}`,
|
|
43
|
-
];
|
|
44
|
-
case 'tool.fallback':
|
|
45
|
-
return [
|
|
46
|
-
`fallback ${summarizeToolCall(event.fromCall.tool, event.fromCall.input)} -> ${summarizeToolCall(event.toCall.tool, event.toCall.input)} (${event.reason})`,
|
|
47
|
-
];
|
|
48
|
-
case 'tool.call':
|
|
49
|
-
return [`tool call ${summarizeToolCall(event.call.tool, event.call.input)}`];
|
|
50
|
-
case 'tool.result':
|
|
51
|
-
return [
|
|
52
|
-
`tool result ${event.tool}: ${event.result.ok ? 'ok' : event.result.error ?? 'error'}`,
|
|
53
|
-
];
|
|
54
|
-
case 'run.finished':
|
|
55
|
-
return [`run finished: ${event.outcome}`];
|
|
56
|
-
default:
|
|
57
|
-
return [];
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
export function countAssistantSteps(trace) {
|
|
62
|
-
return trace.filter((event) => event.type === 'assistant.turn').length;
|
|
63
|
-
}
|
|
64
|
-
export function formatChatFailureMessage(message, options) {
|
|
65
|
-
if (looksLikeAnthropicInputRateLimit(message)) {
|
|
66
|
-
const sizeHint = typeof options.estimatedHistoryTokens === 'number' ?
|
|
67
|
-
` Current session history is estimated at about ${options.estimatedHistoryTokens.toLocaleString()} tokens before the next request.`
|
|
68
|
-
: '';
|
|
69
|
-
return `${message}\n\nThis likely failed because the current prompt plus session history are too large for ${options.model}'s input-token-per-minute limit.${sizeHint} Try /compact, /clear, or /session new, then retry.`;
|
|
70
|
-
}
|
|
71
|
-
if (looksLikeOpenAiQuotaError(message)) {
|
|
72
|
-
return `${message}\n\nThis looks like an OpenAI quota or billing limit for the active key, not a transient prompt-size issue. Switch providers or check the OpenAI account quota and billing state.`;
|
|
73
|
-
}
|
|
74
|
-
return message;
|
|
75
|
-
}
|
|
76
|
-
export function truncate(value, maxLength) {
|
|
77
|
-
if (value.length <= maxLength) {
|
|
78
|
-
return value;
|
|
79
|
-
}
|
|
80
|
-
return `${value.slice(0, maxLength - 1)}…`;
|
|
81
|
-
}
|
|
82
|
-
function summarizeToolCall(tool, input) {
|
|
83
|
-
const shellCommand = extractShellCommand(input);
|
|
84
|
-
if (shellCommand) {
|
|
85
|
-
return `${tool} (${truncate(shellCommand, MAX_TOOL_CALL_SUMMARY_CHARS)})`;
|
|
86
|
-
}
|
|
87
|
-
const path = extractPathField(input);
|
|
88
|
-
if (path) {
|
|
89
|
-
return `${tool} (${truncate(path, MAX_TOOL_CALL_SUMMARY_CHARS)})`;
|
|
90
|
-
}
|
|
91
|
-
return tool;
|
|
92
|
-
}
|
|
93
|
-
function extractShellCommand(value) {
|
|
94
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
95
|
-
return undefined;
|
|
96
|
-
}
|
|
97
|
-
const command = value.command;
|
|
98
|
-
return typeof command === 'string' && command.trim() ? command.trim() : undefined;
|
|
99
|
-
}
|
|
100
|
-
function extractPathField(value) {
|
|
101
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
102
|
-
return undefined;
|
|
103
|
-
}
|
|
104
|
-
const path = value.path;
|
|
105
|
-
return typeof path === 'string' && path.trim() ? path.trim() : undefined;
|
|
106
|
-
}
|
|
107
|
-
function renderToolHistoryMessage(message, history, index) {
|
|
108
|
-
const priorAssistant = findPriorAssistantWithToolCall(history, index, message.toolCallId);
|
|
109
|
-
const toolName = priorAssistant?.toolCalls?.find((call) => call.id === message.toolCallId)?.tool ?? 'tool';
|
|
110
|
-
const summary = message.content.trim();
|
|
111
|
-
if (!summary) {
|
|
112
|
-
return `${toolName} returned no visible output.`;
|
|
113
|
-
}
|
|
114
|
-
return `${toolName}: ${summary}`;
|
|
115
|
-
}
|
|
116
|
-
function findPriorAssistantWithToolCall(history, index, toolCallId) {
|
|
117
|
-
for (let cursor = index - 1; cursor >= 0; cursor--) {
|
|
118
|
-
const candidate = history[cursor];
|
|
119
|
-
if (candidate?.role !== 'assistant' || !candidate.toolCalls?.length) {
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (candidate.toolCalls.some((call) => call.id === toolCallId)) {
|
|
123
|
-
return candidate;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
function looksLikeAnthropicInputRateLimit(message) {
|
|
129
|
-
const normalized = message.toLowerCase();
|
|
130
|
-
return (normalized.includes('input tokens per minute')
|
|
131
|
-
|| (normalized.includes('reduce the prompt length') && normalized.includes('maximum tokens requested'))
|
|
132
|
-
|| (normalized.includes('rate_limit_error') && normalized.includes('tokens per minute')));
|
|
133
|
-
}
|
|
134
|
-
function looksLikeOpenAiQuotaError(message) {
|
|
135
|
-
const normalized = message.toLowerCase();
|
|
136
|
-
return (normalized.includes('exceeded your current quota')
|
|
137
|
-
|| (normalized.includes('billing details') && normalized.includes('quota')));
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=format.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/core/chat/format.ts"],"names":[],"mappings":"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"}
|