@markusylisiurunen/tau 0.1.2
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 +228 -0
- package/dist/app.js +1140 -0
- package/dist/app.js.map +1 -0
- package/dist/bash_commands.js +81 -0
- package/dist/bash_commands.js.map +1 -0
- package/dist/cli.js +147 -0
- package/dist/cli.js.map +1 -0
- package/dist/clipboard.js +16 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/commands.js +76 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.js +39 -0
- package/dist/config.js.map +1 -0
- package/dist/content_loader.js +241 -0
- package/dist/content_loader.js.map +1 -0
- package/dist/debug-ui.js +134 -0
- package/dist/debug-ui.js.map +1 -0
- package/dist/main.js +85 -0
- package/dist/main.js.map +1 -0
- package/dist/personas.js +227 -0
- package/dist/personas.js.map +1 -0
- package/dist/prompts.js +261 -0
- package/dist/prompts.js.map +1 -0
- package/dist/session/message_accumulator.js +56 -0
- package/dist/session/message_accumulator.js.map +1 -0
- package/dist/session/session_engine.js +290 -0
- package/dist/session/session_engine.js.map +1 -0
- package/dist/subagents/explore.js +42 -0
- package/dist/subagents/explore.js.map +1 -0
- package/dist/subagents/registry.js +30 -0
- package/dist/subagents/registry.js.map +1 -0
- package/dist/subagents/subagent_engine.js +147 -0
- package/dist/subagents/subagent_engine.js.map +1 -0
- package/dist/subagents/types.js +2 -0
- package/dist/subagents/types.js.map +1 -0
- package/dist/terminal.js +115 -0
- package/dist/terminal.js.map +1 -0
- package/dist/tools/bash.js +334 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.js +199 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/registry.js +15 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/task.js +202 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/write.js +89 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/assistant_message.js +87 -0
- package/dist/ui/assistant_message.js.map +1 -0
- package/dist/ui/bash_execution.js +127 -0
- package/dist/ui/bash_execution.js.map +1 -0
- package/dist/ui/chat_container.js +90 -0
- package/dist/ui/chat_container.js.map +1 -0
- package/dist/ui/components/dynamic_border.js +11 -0
- package/dist/ui/components/dynamic_border.js.map +1 -0
- package/dist/ui/components/one_line_segments.js +79 -0
- package/dist/ui/components/one_line_segments.js.map +1 -0
- package/dist/ui/components/padded_container.js +24 -0
- package/dist/ui/components/padded_container.js.map +1 -0
- package/dist/ui/custom_editor.js +53 -0
- package/dist/ui/custom_editor.js.map +1 -0
- package/dist/ui/file_execution.js +189 -0
- package/dist/ui/file_execution.js.map +1 -0
- package/dist/ui/footer.js +56 -0
- package/dist/ui/footer.js.map +1 -0
- package/dist/ui/queued_messages.js +31 -0
- package/dist/ui/queued_messages.js.map +1 -0
- package/dist/ui/session_divider.js +17 -0
- package/dist/ui/session_divider.js.map +1 -0
- package/dist/ui/session_summary.js +30 -0
- package/dist/ui/session_summary.js.map +1 -0
- package/dist/ui/slash_autocomplete.js +177 -0
- package/dist/ui/slash_autocomplete.js.map +1 -0
- package/dist/ui/system_message.js +8 -0
- package/dist/ui/system_message.js.map +1 -0
- package/dist/ui/task_execution.js +190 -0
- package/dist/ui/task_execution.js.map +1 -0
- package/dist/ui/theme.js +108 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/tool_output.js +24 -0
- package/dist/ui/tool_output.js.map +1 -0
- package/dist/ui/user_message.js +14 -0
- package/dist/ui/user_message.js.map +1 -0
- package/dist/utils/color.js +13 -0
- package/dist/utils/color.js.map +1 -0
- package/dist/utils/context.js +108 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/fork.js +41 -0
- package/dist/utils/fork.js.map +1 -0
- package/dist/utils/format.js +35 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/fuzzy.js +48 -0
- package/dist/utils/fuzzy.js.map +1 -0
- package/dist/utils/git.js +21 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/messages.js +41 -0
- package/dist/utils/messages.js.map +1 -0
- package/dist/utils/never.js +4 -0
- package/dist/utils/never.js.map +1 -0
- package/dist/utils/project_files.js +96 -0
- package/dist/utils/project_files.js.map +1 -0
- package/dist/utils/truncate.js +299 -0
- package/dist/utils/truncate.js.map +1 -0
- package/package.json +37 -0
package/dist/ui/theme.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Chalk } from "chalk";
|
|
2
|
+
import { hslToHex } from "../utils/color.js";
|
|
3
|
+
import { assertNever } from "../utils/never.js";
|
|
4
|
+
const chalk = new Chalk({ level: 3 });
|
|
5
|
+
const ACCENT_HUE = 28;
|
|
6
|
+
const TEXT_HUE = 24;
|
|
7
|
+
const LINK_HUE = 328;
|
|
8
|
+
const CODE_HUE = 224;
|
|
9
|
+
const WARN_HUE = 24;
|
|
10
|
+
const ERROR_HUE = 0;
|
|
11
|
+
const palette = {
|
|
12
|
+
// Primary colors
|
|
13
|
+
accent: chalk.hex(hslToHex(ACCENT_HUE, 92, 72)),
|
|
14
|
+
muted: chalk.hex(hslToHex(TEXT_HUE, 8, 56)),
|
|
15
|
+
dim: chalk.hex(hslToHex(TEXT_HUE, 6, 42)),
|
|
16
|
+
link: chalk.hex(hslToHex(LINK_HUE, 84, 72)),
|
|
17
|
+
thinking: chalk.hex(hslToHex(TEXT_HUE, 8, 56)),
|
|
18
|
+
codeInline: chalk.hex(hslToHex(CODE_HUE, 64, 74)),
|
|
19
|
+
codeBlock: chalk.hex(hslToHex(CODE_HUE, 64, 74)),
|
|
20
|
+
// Semantic colors
|
|
21
|
+
warn: chalk.hex(hslToHex(WARN_HUE, 76, 68)),
|
|
22
|
+
error: chalk.hex(hslToHex(ERROR_HUE, 76, 68)),
|
|
23
|
+
memoryMode: chalk.hex(hslToHex(280, 80, 72)),
|
|
24
|
+
bashRunning: chalk.hex(hslToHex(168, 80, 72)),
|
|
25
|
+
bashRan: chalk.hex(hslToHex(192, 80, 72)),
|
|
26
|
+
bashOutput: chalk.hex(hslToHex(TEXT_HUE, 8, 56)),
|
|
27
|
+
toolFileRan: chalk.hex(hslToHex(192, 80, 72)),
|
|
28
|
+
filePreview: chalk.hex(hslToHex(TEXT_HUE, 8, 56)),
|
|
29
|
+
taskRunning: chalk.hex(hslToHex(168, 80, 72)),
|
|
30
|
+
taskRan: chalk.hex(hslToHex(192, 80, 72)),
|
|
31
|
+
taskPreview: chalk.hex(hslToHex(TEXT_HUE, 8, 56)),
|
|
32
|
+
// Diff colors
|
|
33
|
+
diffAdded: chalk.hex(hslToHex(72, 40, 46)),
|
|
34
|
+
diffRemoved: chalk.hex(hslToHex(6, 44, 52)),
|
|
35
|
+
// Notices
|
|
36
|
+
noticeSuccess: chalk.hex(hslToHex(CODE_HUE, 64, 74)),
|
|
37
|
+
noticeWarn: chalk.hex(hslToHex(WARN_HUE, 76, 68)),
|
|
38
|
+
noticeError: chalk.hex(hslToHex(ERROR_HUE, 76, 68)),
|
|
39
|
+
// User message
|
|
40
|
+
userBg: chalk.bgHex(hslToHex(TEXT_HUE, 6, 12)),
|
|
41
|
+
userText: (text) => text,
|
|
42
|
+
userMemoryBg: chalk.bgHex(hslToHex(280, 18, 18)),
|
|
43
|
+
userMemoryText: chalk.hex(hslToHex(280, 42, 82)),
|
|
44
|
+
// Risk level indicators
|
|
45
|
+
riskNone: chalk.hex(hslToHex(TEXT_HUE, 6, 42)),
|
|
46
|
+
riskReadOnly: chalk.hex(hslToHex(72, 16, 44)),
|
|
47
|
+
riskReadWrite: chalk.hex(hslToHex(8, 20, 56)),
|
|
48
|
+
};
|
|
49
|
+
const markdownTheme = {
|
|
50
|
+
bold: (text) => chalk.bold(text),
|
|
51
|
+
code: (text) => palette.codeInline(text),
|
|
52
|
+
codeBlock: (text) => palette.codeBlock(text),
|
|
53
|
+
codeBlockBorder: (text) => palette.dim(text),
|
|
54
|
+
heading: (text) => chalk.bold(palette.accent(text)),
|
|
55
|
+
hr: (text) => palette.dim(text),
|
|
56
|
+
italic: (text) => chalk.italic(text),
|
|
57
|
+
link: (text) => palette.link(text),
|
|
58
|
+
linkUrl: (text) => palette.dim(text),
|
|
59
|
+
listBullet: (text) => palette.accent(text),
|
|
60
|
+
quote: (text) => chalk.italic(palette.muted(text)),
|
|
61
|
+
quoteBorder: (text) => palette.dim(text),
|
|
62
|
+
strikethrough: (text) => chalk.strikethrough(text),
|
|
63
|
+
underline: (text) => chalk.underline(text),
|
|
64
|
+
};
|
|
65
|
+
const selectListTheme = {
|
|
66
|
+
selectedPrefix: (text) => chalk.bold(palette.accent(text)),
|
|
67
|
+
selectedText: (text) => chalk.bold(palette.accent(text)),
|
|
68
|
+
description: (text) => palette.muted(text),
|
|
69
|
+
scrollInfo: (text) => palette.dim(text),
|
|
70
|
+
noMatch: (text) => palette.muted(text),
|
|
71
|
+
};
|
|
72
|
+
const editorTheme = {
|
|
73
|
+
borderColor: (text) => editorBorderForReasoning("none")(text),
|
|
74
|
+
selectList: selectListTheme,
|
|
75
|
+
};
|
|
76
|
+
export const theme = {
|
|
77
|
+
palette: palette,
|
|
78
|
+
markdownTheme: markdownTheme,
|
|
79
|
+
editorTheme: editorTheme,
|
|
80
|
+
};
|
|
81
|
+
export function editorBorderForReasoning(effort) {
|
|
82
|
+
const [MIN_H, MAX_H] = [20, 28];
|
|
83
|
+
const [MIN_S, MAX_S] = [8, 76];
|
|
84
|
+
const [MIN_L, MAX_L] = [24, 52];
|
|
85
|
+
const [RANGE_H, RANGE_S, RANGE_L] = [MAX_H - MIN_H, MAX_S - MIN_S, MAX_L - MIN_L];
|
|
86
|
+
const h = (x) => MIN_H + RANGE_H * x;
|
|
87
|
+
const s = (x) => MIN_S + RANGE_S * x;
|
|
88
|
+
const l = (x) => MIN_L + RANGE_L * x;
|
|
89
|
+
switch (effort) {
|
|
90
|
+
case undefined:
|
|
91
|
+
case "none":
|
|
92
|
+
return chalk.hex(hslToHex(h(0), s(0), l(0)));
|
|
93
|
+
case "minimal":
|
|
94
|
+
return chalk.hex(hslToHex(h(0.2), s(0.2), l(0.2)));
|
|
95
|
+
case "low":
|
|
96
|
+
return chalk.hex(hslToHex(h(0.4), s(0.4), l(0.4)));
|
|
97
|
+
case "medium":
|
|
98
|
+
return chalk.hex(hslToHex(h(0.6), s(0.6), l(0.6)));
|
|
99
|
+
case "high":
|
|
100
|
+
return chalk.hex(hslToHex(h(0.8), s(0.8), l(0.8)));
|
|
101
|
+
case "xhigh":
|
|
102
|
+
return chalk.hex(hslToHex(h(1), s(1), l(1)));
|
|
103
|
+
default:
|
|
104
|
+
assertNever(effort);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export { editorTheme, markdownTheme, palette };
|
|
108
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Container, Text } from "@mariozechner/pi-tui";
|
|
2
|
+
import { DynamicBorder } from "./components/dynamic_border.js";
|
|
3
|
+
import { OneLineSegmentsComponent } from "./components/one_line_segments.js";
|
|
4
|
+
export class ToolOutputComponent extends Container {
|
|
5
|
+
constructor(props) {
|
|
6
|
+
super();
|
|
7
|
+
if (props.compact) {
|
|
8
|
+
const { segments, flexIndices, extraText, extraComponent, paddingX, paddingY } = props.compactView;
|
|
9
|
+
this.addChild(new OneLineSegmentsComponent(segments, flexIndices ?? []));
|
|
10
|
+
if (extraComponent) {
|
|
11
|
+
this.addChild(extraComponent);
|
|
12
|
+
}
|
|
13
|
+
else if (extraText && extraText.trim() !== "") {
|
|
14
|
+
this.addChild(new Text(extraText, paddingX ?? 0, paddingY ?? 0));
|
|
15
|
+
}
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const { borderColor, text, paddingX, paddingY } = props.expanded;
|
|
19
|
+
this.addChild(new DynamicBorder(borderColor));
|
|
20
|
+
this.addChild(new Text(text, paddingX ?? 1, paddingY ?? 0));
|
|
21
|
+
this.addChild(new DynamicBorder(borderColor));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=tool_output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool_output.js","sourceRoot":"","sources":["../../src/ui/tool_output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAuB,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAwBlG,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAChD,YAAY,KAAsB;QAChC,KAAK,EAAE,CAAC;QAER,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAC5E,KAAK,CAAC,WAAW,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,wBAAwB,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YAEzE,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;YACnE,CAAC;YAED,OAAO;QACT,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEjE,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Container, Markdown } from "@mariozechner/pi-tui";
|
|
2
|
+
import { theme } from "./theme.js";
|
|
3
|
+
export class UserMessageComponent extends Container {
|
|
4
|
+
constructor(text, opts) {
|
|
5
|
+
super();
|
|
6
|
+
const bgColor = opts?.isMemoryMode ? theme.palette.userMemoryBg : theme.palette.userBg;
|
|
7
|
+
const color = opts?.isMemoryMode ? theme.palette.userMemoryText : theme.palette.userText;
|
|
8
|
+
this.addChild(new Markdown(text, 1, 1, theme.markdownTheme, {
|
|
9
|
+
bgColor: (t) => bgColor(t),
|
|
10
|
+
color: (t) => color(t),
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=user_message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_message.js","sourceRoot":"","sources":["../../src/ui/user_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjD,YAAY,IAAY,EAAE,IAAiC;QACzD,KAAK,EAAE,CAAC;QAER,MAAM,OAAO,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACvF,MAAM,KAAK,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAEzF,IAAI,CAAC,QAAQ,CACX,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE;YAC5C,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/B,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function hslToHex(h, s, l) {
|
|
2
|
+
l /= 100;
|
|
3
|
+
const a = (s * Math.min(l, 1 - l)) / 100;
|
|
4
|
+
const f = (n) => {
|
|
5
|
+
const k = (n + h / 30) % 12;
|
|
6
|
+
const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
|
|
7
|
+
return Math.round(255 * color)
|
|
8
|
+
.toString(16)
|
|
9
|
+
.padStart(2, "0");
|
|
10
|
+
};
|
|
11
|
+
return `#${f(0)}${f(8)}${f(4)}`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/utils/color.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACtD,CAAC,IAAI,GAAG,CAAC;IACT,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;aAC3B,QAAQ,CAAC,EAAE,CAAC;aACZ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
3
|
+
function buildUserPreferencesBlock(userPreferences) {
|
|
4
|
+
if (typeof userPreferences === "string" && userPreferences.trim()) {
|
|
5
|
+
return ["<user_preferences>", userPreferences, "</user_preferences>"].join("\n");
|
|
6
|
+
}
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
export function buildBaseSystemPrompt(args) {
|
|
10
|
+
const parts = [args.personaSystemPrompt.trim()];
|
|
11
|
+
if (args.projectContextBlock?.trim()) {
|
|
12
|
+
parts.push(args.projectContextBlock.trim());
|
|
13
|
+
}
|
|
14
|
+
if (args.previousSessionSummary?.trim()) {
|
|
15
|
+
parts.push([
|
|
16
|
+
"### Previous session context",
|
|
17
|
+
"",
|
|
18
|
+
"The following is a summary of a previous conversation session that provides relevant context:",
|
|
19
|
+
"<previous_session_summary>",
|
|
20
|
+
args.previousSessionSummary.trim(),
|
|
21
|
+
"</previous_session_summary>",
|
|
22
|
+
].join("\n"));
|
|
23
|
+
}
|
|
24
|
+
parts.push(args.environmentTag.trim());
|
|
25
|
+
const userPrefsBlock = buildUserPreferencesBlock(args.userPreferences);
|
|
26
|
+
if (userPrefsBlock) {
|
|
27
|
+
parts.push(userPrefsBlock);
|
|
28
|
+
}
|
|
29
|
+
return parts.join("\n\n");
|
|
30
|
+
}
|
|
31
|
+
export function buildProjectContextBlock(args) {
|
|
32
|
+
const agentsFiles = findAgentsFilesFromCwdToHome(args.cwd, args.home);
|
|
33
|
+
if (agentsFiles.length === 0)
|
|
34
|
+
return undefined;
|
|
35
|
+
const lines = ["### Project context", ""];
|
|
36
|
+
for (const filePath of agentsFiles) {
|
|
37
|
+
let content = "";
|
|
38
|
+
try {
|
|
39
|
+
content = readFileSync(filePath, "utf-8");
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
lines.push(`<file path="${filePath}">`);
|
|
45
|
+
lines.push(content.trimEnd());
|
|
46
|
+
lines.push("</file>");
|
|
47
|
+
lines.push("");
|
|
48
|
+
}
|
|
49
|
+
const out = lines.join("\n").trimEnd();
|
|
50
|
+
return out.trim() ? out : undefined;
|
|
51
|
+
}
|
|
52
|
+
export function findAgentsFilesFromCwdToHome(cwd, home) {
|
|
53
|
+
const cwdAbs = resolve(cwd);
|
|
54
|
+
const homeAbs = resolve(home);
|
|
55
|
+
// If we're not inside the user's home directory, don't walk beyond it.
|
|
56
|
+
if (cwdAbs !== homeAbs && !cwdAbs.startsWith(homeAbs + sep)) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
const found = [];
|
|
60
|
+
let dir = cwdAbs;
|
|
61
|
+
// Closest-first order: cwd, parent, ..., home.
|
|
62
|
+
while (true) {
|
|
63
|
+
const candidate = join(dir, "AGENTS.md");
|
|
64
|
+
if (existsSync(candidate)) {
|
|
65
|
+
found.push(candidate);
|
|
66
|
+
}
|
|
67
|
+
if (dir === homeAbs)
|
|
68
|
+
break;
|
|
69
|
+
const parent = dirname(dir);
|
|
70
|
+
if (parent === dir)
|
|
71
|
+
break;
|
|
72
|
+
// Stay within home.
|
|
73
|
+
if (parent !== homeAbs && !parent.startsWith(homeAbs + sep))
|
|
74
|
+
break;
|
|
75
|
+
dir = parent;
|
|
76
|
+
}
|
|
77
|
+
return found;
|
|
78
|
+
}
|
|
79
|
+
export function describeRiskLevel(level) {
|
|
80
|
+
switch (level) {
|
|
81
|
+
case "none":
|
|
82
|
+
return "No bash tool access for the model.";
|
|
83
|
+
case "read-only":
|
|
84
|
+
return "Model may call bash only for read-only commands (safetyLevel='read').";
|
|
85
|
+
case "read-write":
|
|
86
|
+
return "Model may call bash for read or write commands (safetyLevel='read' or 'write').";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export function buildEnvironmentTag(args) {
|
|
90
|
+
const riskDesc = describeRiskLevel(args.riskLevel);
|
|
91
|
+
const nodeVersion = process.version;
|
|
92
|
+
const platform = process.platform;
|
|
93
|
+
return [
|
|
94
|
+
"<environment>",
|
|
95
|
+
` <datetime>${args.datetime}</datetime>`,
|
|
96
|
+
` <cwd>${args.cwd}</cwd>`,
|
|
97
|
+
` <risk_level level="${args.riskLevel}">${riskDesc}</risk_level>`,
|
|
98
|
+
` <node>${nodeVersion}</node>`,
|
|
99
|
+
` <platform>${platform}</platform>`,
|
|
100
|
+
" <notes>This environment tag is static for the session and reflects the initial risk level. If the user changes risk level, you will be informed in a <system> tag at the start of the next user message.</notes>",
|
|
101
|
+
"</environment>",
|
|
102
|
+
].join("\n");
|
|
103
|
+
}
|
|
104
|
+
export function formatRiskLevelChangeNotice(change) {
|
|
105
|
+
const toDesc = describeRiskLevel(change.to);
|
|
106
|
+
return `<system>Risk level changed by user from '${change.from}' to '${change.to}'. ${toDesc} This overrides the initial risk level described in the system prompt.</system>`;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function formatHistoryForCompression(history) {
|
|
2
|
+
const lines = [];
|
|
3
|
+
for (const message of history) {
|
|
4
|
+
if (message.role === "user") {
|
|
5
|
+
lines.push("--- USER ---");
|
|
6
|
+
for (const block of message.content) {
|
|
7
|
+
if (typeof block === "string") {
|
|
8
|
+
lines.push(block);
|
|
9
|
+
}
|
|
10
|
+
else if (block.type === "text") {
|
|
11
|
+
lines.push(block.text);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
lines.push("");
|
|
15
|
+
}
|
|
16
|
+
else if (message.role === "assistant") {
|
|
17
|
+
lines.push("--- ASSISTANT ---");
|
|
18
|
+
const assistantMsg = message;
|
|
19
|
+
for (const block of assistantMsg.content) {
|
|
20
|
+
if (block.type === "text") {
|
|
21
|
+
lines.push(block.text);
|
|
22
|
+
}
|
|
23
|
+
else if (block.type === "toolCall") {
|
|
24
|
+
const toolCall = block;
|
|
25
|
+
lines.push(`[Tool call: ${toolCall.name}(${JSON.stringify(toolCall.arguments)})]`);
|
|
26
|
+
}
|
|
27
|
+
else if (block.type === "thinking") {
|
|
28
|
+
// Skip thinking blocks for compression
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
lines.push("");
|
|
32
|
+
}
|
|
33
|
+
else if (message.role === "toolResult") {
|
|
34
|
+
const toolResult = message;
|
|
35
|
+
lines.push(`[Tool output: ${toolResult.toolName} (truncated)]`);
|
|
36
|
+
lines.push("");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return lines.join("\n").trim();
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=fork.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../../src/utils/fork.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,2BAA2B,CAAC,OAA2B;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,MAAM,YAAY,GAAG,OAA2B,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAG,KAAiB,CAAC;oBACnC,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrF,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACrC,uCAAuC;gBACzC,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,OAA4B,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,QAAQ,eAAe,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
export function formatTokenWindow(tokens) {
|
|
3
|
+
if (tokens >= 1_000_000) {
|
|
4
|
+
const m = tokens / 1_000_000;
|
|
5
|
+
return `${m.toFixed(tokens % 1_000_000 === 0 ? 0 : 1)}M`;
|
|
6
|
+
}
|
|
7
|
+
if (tokens >= 1_000) {
|
|
8
|
+
const k = tokens / 1_000;
|
|
9
|
+
return `${k.toFixed(tokens % 1_000 === 0 ? 0 : 1)}k`;
|
|
10
|
+
}
|
|
11
|
+
return String(tokens);
|
|
12
|
+
}
|
|
13
|
+
export function formatAdaptiveNumber(value, minDecimals, maxDecimals) {
|
|
14
|
+
if (!Number.isFinite(value))
|
|
15
|
+
return "0";
|
|
16
|
+
if (value === 0)
|
|
17
|
+
return value.toFixed(minDecimals);
|
|
18
|
+
let decimals = minDecimals;
|
|
19
|
+
let formatted = value.toFixed(decimals);
|
|
20
|
+
while (decimals < maxDecimals && Number(formatted) === 0) {
|
|
21
|
+
decimals += 1;
|
|
22
|
+
formatted = value.toFixed(decimals);
|
|
23
|
+
}
|
|
24
|
+
return formatted;
|
|
25
|
+
}
|
|
26
|
+
export function formatCwd(cwd) {
|
|
27
|
+
const home = homedir();
|
|
28
|
+
if (cwd === home)
|
|
29
|
+
return "~";
|
|
30
|
+
if (cwd.startsWith(`${home}/`)) {
|
|
31
|
+
return `~${cwd.slice(home.length)}`;
|
|
32
|
+
}
|
|
33
|
+
return cwd;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;QAC7B,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;QACzB,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,WAAmB,EACnB,WAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEnD,IAAI,QAAQ,GAAG,WAAW,CAAC;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO,QAAQ,GAAG,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,QAAQ,IAAI,CAAC,CAAC;QACd,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function fuzzyMatch(query, text) {
|
|
2
|
+
const q = query.toLowerCase();
|
|
3
|
+
const t = text.toLowerCase();
|
|
4
|
+
if (q.length === 0)
|
|
5
|
+
return { matches: true, score: 0 };
|
|
6
|
+
if (q.length > t.length)
|
|
7
|
+
return { matches: false, score: 0 };
|
|
8
|
+
let qi = 0;
|
|
9
|
+
let score = 0;
|
|
10
|
+
let lastMatch = -1;
|
|
11
|
+
let consecutive = 0;
|
|
12
|
+
for (let i = 0; i < t.length && qi < q.length; i++) {
|
|
13
|
+
if (t[i] === q[qi]) {
|
|
14
|
+
const isBoundary = i === 0 || /[\s\-_./]/.test(t[i - 1]);
|
|
15
|
+
if (lastMatch === i - 1) {
|
|
16
|
+
consecutive++;
|
|
17
|
+
score -= consecutive * 5;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
consecutive = 0;
|
|
21
|
+
if (lastMatch >= 0) {
|
|
22
|
+
score += (i - lastMatch - 1) * 2;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (isBoundary)
|
|
26
|
+
score -= 10;
|
|
27
|
+
score += i * 0.1;
|
|
28
|
+
lastMatch = i;
|
|
29
|
+
qi++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (qi < q.length)
|
|
33
|
+
return { matches: false, score: 0 };
|
|
34
|
+
return { matches: true, score };
|
|
35
|
+
}
|
|
36
|
+
export function fuzzyFilter(items, query, getText) {
|
|
37
|
+
if (!query.trim())
|
|
38
|
+
return items;
|
|
39
|
+
const scored = [];
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
const match = fuzzyMatch(query, getText(item));
|
|
42
|
+
if (match.matches)
|
|
43
|
+
scored.push({ item, score: match.score });
|
|
44
|
+
}
|
|
45
|
+
scored.sort((a, b) => a.score - b.score);
|
|
46
|
+
return scored.map((s) => s.item);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=fuzzy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../src/utils/fuzzy.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,IAAY;IACpD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAE7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAE7D,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;YAE1D,IAAI,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,WAAW,EAAE,CAAC;gBACd,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,KAAK,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,UAAU;gBAAE,KAAK,IAAI,EAAE,CAAC;YAE5B,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC;YAEjB,SAAS,GAAG,CAAC,CAAC;YACd,EAAE,EAAE,CAAC;QACP,CAAC;IACH,CAAC;IAED,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,KAAU,EAAE,KAAa,EAAE,OAA4B;IACpF,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAEhC,MAAM,MAAM,GAAsC,EAAE,CAAC;IAErD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
export function getGitRoot(cwd) {
|
|
4
|
+
try {
|
|
5
|
+
const res = spawnSync("git", ["rev-parse", "--show-toplevel"], {
|
|
6
|
+
cwd,
|
|
7
|
+
encoding: "utf-8",
|
|
8
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
9
|
+
});
|
|
10
|
+
if (res.status !== 0)
|
|
11
|
+
return undefined;
|
|
12
|
+
const root = (res.stdout ?? "").trim();
|
|
13
|
+
if (!root)
|
|
14
|
+
return undefined;
|
|
15
|
+
return resolve(root);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE;YAC7D,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEvC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function extractAssistantText(message) {
|
|
2
|
+
return message.content
|
|
3
|
+
.filter((c) => c.type === "text")
|
|
4
|
+
.map((c) => c.text)
|
|
5
|
+
.join("\n")
|
|
6
|
+
.trim();
|
|
7
|
+
}
|
|
8
|
+
export function createToolResult(toolCall, text, isError) {
|
|
9
|
+
return {
|
|
10
|
+
role: "toolResult",
|
|
11
|
+
toolCallId: toolCall.id,
|
|
12
|
+
toolName: toolCall.name,
|
|
13
|
+
content: [{ type: "text", text }],
|
|
14
|
+
isError: isError,
|
|
15
|
+
timestamp: Date.now(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function createToolError(toolCall, errorMessage) {
|
|
19
|
+
return createToolResult(toolCall, errorMessage, true);
|
|
20
|
+
}
|
|
21
|
+
export function createToolSuccess(toolCall, text) {
|
|
22
|
+
return createToolResult(toolCall, text, false);
|
|
23
|
+
}
|
|
24
|
+
export function extractAllFencedCodeBlocks(text) {
|
|
25
|
+
// Match all triple-backtick fenced code blocks with optional language specifier
|
|
26
|
+
// Allows optional spaces after opening fence, any language/info string, optional trailing spaces
|
|
27
|
+
// on closing fence, and both LF and CRLF line endings
|
|
28
|
+
const codeBlockRegex = /^```[ \t]*[^\r\n]*\r?\n([\s\S]*?)\r?\n```[ \t]*$/gm;
|
|
29
|
+
const codeBlocks = [];
|
|
30
|
+
let match = codeBlockRegex.exec(text);
|
|
31
|
+
while (match !== null) {
|
|
32
|
+
codeBlocks.push(match[1] ?? "");
|
|
33
|
+
match = codeBlockRegex.exec(text);
|
|
34
|
+
}
|
|
35
|
+
if (codeBlocks.length === 0) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
// Join all code blocks with newlines
|
|
39
|
+
return codeBlocks.join("\n");
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,OAAO,OAAO,CAAC,OAAO;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,IAAY,EACZ,OAAgB;IAEhB,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,YAAoB;IACtE,OAAO,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB,EAAE,IAAY;IAChE,OAAO,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,gFAAgF;IAChF,iGAAiG;IACjG,sDAAsD;IACtD,MAAM,cAAc,GAAG,oDAAoD,CAAC;IAE5E,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"never.js","sourceRoot":"","sources":["../../src/utils/never.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { readdirSync, statSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const DEFAULT_IGNORED_DIRS = new Set([".git", "node_modules"]);
|
|
5
|
+
export function listProjectFiles(cwd) {
|
|
6
|
+
const fromGit = listProjectFilesFromGit(cwd);
|
|
7
|
+
if (fromGit.length)
|
|
8
|
+
return fromGit;
|
|
9
|
+
return listProjectFilesByWalking(cwd);
|
|
10
|
+
}
|
|
11
|
+
function listProjectFilesFromGit(cwd) {
|
|
12
|
+
try {
|
|
13
|
+
const inside = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], {
|
|
14
|
+
cwd,
|
|
15
|
+
encoding: "utf-8",
|
|
16
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
17
|
+
});
|
|
18
|
+
if (inside.status !== 0)
|
|
19
|
+
return [];
|
|
20
|
+
if ((inside.stdout ?? "").trim() !== "true")
|
|
21
|
+
return [];
|
|
22
|
+
const res = spawnSync("git", ["ls-files", "--cached", "--others", "--exclude-standard"], {
|
|
23
|
+
cwd,
|
|
24
|
+
encoding: "utf-8",
|
|
25
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
26
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
27
|
+
});
|
|
28
|
+
if (res.status !== 0)
|
|
29
|
+
return [];
|
|
30
|
+
const files = (res.stdout ?? "")
|
|
31
|
+
.split("\n")
|
|
32
|
+
.map((l) => l.trim())
|
|
33
|
+
.filter(Boolean);
|
|
34
|
+
// Keep stable order and avoid duplicates.
|
|
35
|
+
return [...new Set(files)].sort();
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function listProjectFilesByWalking(cwd) {
|
|
42
|
+
const out = [];
|
|
43
|
+
const walk = (dirAbs, dirRel) => {
|
|
44
|
+
try {
|
|
45
|
+
const entries = readdirSync(dirAbs, { withFileTypes: true, encoding: "utf8" });
|
|
46
|
+
for (const entry of entries) {
|
|
47
|
+
if (entry.name.startsWith(".")) {
|
|
48
|
+
// Keep hidden files out of autocomplete by default; they are rarely helpful.
|
|
49
|
+
// (Still allow hidden directories to be traversed if explicitly desired later.)
|
|
50
|
+
if (entry.isDirectory())
|
|
51
|
+
continue;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (entry.isDirectory()) {
|
|
55
|
+
if (DEFAULT_IGNORED_DIRS.has(entry.name))
|
|
56
|
+
continue;
|
|
57
|
+
const nextAbs = join(dirAbs, entry.name);
|
|
58
|
+
const nextRel = dirRel ? join(dirRel, entry.name) : entry.name;
|
|
59
|
+
walk(nextAbs, nextRel);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// Handle symlinks that point to directories
|
|
63
|
+
if (entry.isSymbolicLink()) {
|
|
64
|
+
try {
|
|
65
|
+
const targetPath = join(dirAbs, entry.name);
|
|
66
|
+
const stat = statSync(targetPath);
|
|
67
|
+
if (stat.isDirectory()) {
|
|
68
|
+
if (DEFAULT_IGNORED_DIRS.has(entry.name))
|
|
69
|
+
continue;
|
|
70
|
+
const nextRel = dirRel ? join(dirRel, entry.name) : entry.name;
|
|
71
|
+
walk(targetPath, nextRel);
|
|
72
|
+
}
|
|
73
|
+
else if (stat.isFile()) {
|
|
74
|
+
const rel = dirRel ? join(dirRel, entry.name) : entry.name;
|
|
75
|
+
out.push(rel);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Broken symlink or permission error, skip
|
|
80
|
+
}
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (entry.isFile()) {
|
|
84
|
+
const rel = dirRel ? join(dirRel, entry.name) : entry.name;
|
|
85
|
+
out.push(rel);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
walk(cwd, "");
|
|
94
|
+
return [...new Set(out)].sort();
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=project_files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_files.js","sourceRoot":"","sources":["../../src/utils/project_files.ts"],"names":[],"mappings":"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"}
|