atom-lite 0.4.1 → 0.6.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/CHANGELOG.md +35 -1
- package/README.md +41 -108
- package/dist/agent/loop.d.ts +15 -0
- package/dist/agent/loop.js +277 -57
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/model-turn.d.ts +37 -0
- package/dist/agent/model-turn.js +53 -0
- package/dist/agent/model-turn.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +1 -0
- package/dist/agent/system-prompt.js +23 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/turn-recorder.d.ts +33 -0
- package/dist/agent/turn-recorder.js +74 -0
- package/dist/agent/turn-recorder.js.map +1 -0
- package/dist/agent/types.d.ts +15 -0
- package/dist/cli/app.js +570 -68
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/commands.d.ts +3 -0
- package/dist/cli/commands.js +20 -5
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/diff-view.d.ts +18 -0
- package/dist/cli/diff-view.js +66 -0
- package/dist/cli/diff-view.js.map +1 -0
- package/dist/cli/main.js +2 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mouse.js +4 -1
- package/dist/cli/mouse.js.map +1 -1
- package/dist/cli/panel.js +8 -8
- package/dist/cli/panel.js.map +1 -1
- package/dist/cli/status-line.d.ts +2 -0
- package/dist/cli/status-line.js +9 -1
- package/dist/cli/status-line.js.map +1 -1
- package/dist/cli/stream-text.js +1 -0
- package/dist/cli/stream-text.js.map +1 -1
- package/dist/cli/theme.d.ts +1 -1
- package/dist/cli/theme.js +2 -0
- package/dist/cli/theme.js.map +1 -1
- package/dist/cli/tool-box.d.ts +1 -1
- package/dist/cli/tool-box.js +44 -39
- package/dist/cli/tool-box.js.map +1 -1
- package/dist/cli/transcript.d.ts +15 -1
- package/dist/cli/transcript.js +40 -1
- package/dist/cli/transcript.js.map +1 -1
- package/dist/cli/trust-prompt.d.ts +24 -0
- package/dist/cli/trust-prompt.js +89 -0
- package/dist/cli/trust-prompt.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -5
- package/dist/config/defaults.js +8 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/load.js +33 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/paths.d.ts +2 -0
- package/dist/config/paths.js +12 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.d.ts +14 -14
- package/dist/config/schema.js +6 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/context/manager.d.ts +17 -3
- package/dist/context/manager.js +129 -41
- package/dist/context/manager.js.map +1 -1
- package/dist/extensions/api.d.ts +51 -1
- package/dist/extensions/api.js +124 -6
- package/dist/extensions/api.js.map +1 -1
- package/dist/extensions/discovery.d.ts +16 -0
- package/dist/extensions/discovery.js +191 -108
- package/dist/extensions/discovery.js.map +1 -1
- package/dist/extensions/loader.d.ts +42 -1
- package/dist/extensions/loader.js +272 -32
- package/dist/extensions/loader.js.map +1 -1
- package/dist/extensions/session-manager.d.ts +44 -0
- package/dist/extensions/session-manager.js +137 -0
- package/dist/extensions/session-manager.js.map +1 -0
- package/dist/extensions/tool-adapter.d.ts +12 -0
- package/dist/extensions/tool-adapter.js +157 -0
- package/dist/extensions/tool-adapter.js.map +1 -0
- package/dist/extensions/trust.d.ts +2 -0
- package/dist/extensions/trust.js +32 -17
- package/dist/extensions/trust.js.map +1 -1
- package/dist/extensions/types.d.ts +45 -3
- package/dist/extensions/ui.d.ts +21 -0
- package/dist/extensions/ui.js +75 -0
- package/dist/extensions/ui.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/stdio-transport.js +3 -20
- package/dist/mcp/stdio-transport.js.map +1 -1
- package/dist/runtime/modes.d.ts +3 -0
- package/dist/runtime/modes.js +8 -0
- package/dist/runtime/modes.js.map +1 -0
- package/dist/runtime/scheduler.d.ts +4 -3
- package/dist/runtime/scheduler.js +7 -105
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/tool-executor.d.ts +18 -0
- package/dist/runtime/tool-executor.js +136 -0
- package/dist/runtime/tool-executor.js.map +1 -0
- package/dist/security/process.d.ts +10 -0
- package/dist/security/process.js +36 -0
- package/dist/security/process.js.map +1 -1
- package/dist/sessions/store.js +2 -3
- package/dist/sessions/store.js.map +1 -1
- package/dist/skills/registry.js +8 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/tools/bash.js +7 -4
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/glob.d.ts +2 -0
- package/dist/tools/glob.js +97 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +2 -0
- package/dist/tools/grep.js +290 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.d.ts +8 -0
- package/dist/types.d.ts +0 -3
- package/dist/types.js +1 -4
- package/dist/types.js.map +1 -1
- package/package.json +5 -2
- package/skills/atom-lite-extensions/SKILL.md +240 -0
- package/skills/caveman/SKILL.md +89 -0
- package/skills/code-review/SKILL.md +46 -0
- package/skills/optimization/SKILL.md +51 -0
|
@@ -4,6 +4,8 @@ export interface StatusLineParts {
|
|
|
4
4
|
left: string;
|
|
5
5
|
tokens: string;
|
|
6
6
|
effort: string;
|
|
7
|
+
/** Current agent mode, rendered as "mode:<value>" in the top row. */
|
|
8
|
+
mode?: string;
|
|
7
9
|
/** Animated agent state, rendered as an optional third row. Already styled. */
|
|
8
10
|
activity?: string;
|
|
9
11
|
}
|
package/dist/cli/status-line.js
CHANGED
|
@@ -31,7 +31,15 @@ export class StatusLine {
|
|
|
31
31
|
render(width) {
|
|
32
32
|
const tokens = this.theme.tokens;
|
|
33
33
|
const contentWidth = Math.max(1, width - 2);
|
|
34
|
-
const
|
|
34
|
+
const modePart = this.parts.mode
|
|
35
|
+
? (this.parts.mode === "yolo"
|
|
36
|
+
? tokens.warning(`mode:${this.parts.mode}`)
|
|
37
|
+
: tokens.accent(`mode:${this.parts.mode}`))
|
|
38
|
+
: "";
|
|
39
|
+
const right = [modePart, tokens.dim(this.parts.effort)]
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.join(" ");
|
|
42
|
+
const top = formatStatusLine(tokens.status(this.parts.left), right, contentWidth);
|
|
35
43
|
const bottom = truncateToWidth(tokens.dim(this.parts.tokens), contentWidth);
|
|
36
44
|
const rows = [
|
|
37
45
|
" " + top + " ".repeat(Math.max(0, width - visibleWidth(top) - 1)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/cli/status-line.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/cli/status-line.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/stream-text.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../../src/cli/stream-text.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../../src/cli/stream-text.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/theme.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* and makes the choice testable without asserting on raw escape sequences.
|
|
7
7
|
*/
|
|
8
8
|
export type ThemeMode = "dark" | "light" | "ansi";
|
|
9
|
-
export type ThemeToken = "text" | "dim" | "accent" | "success" | "warning" | "error" | "border" | "selection" | "status" | "banner" | "heading" | "link" | "code" | "quote" | "diffAdded" | "diffRemoved" | "diffContext" | "approval";
|
|
9
|
+
export type ThemeToken = "text" | "user" | "dim" | "accent" | "success" | "warning" | "error" | "border" | "selection" | "status" | "banner" | "heading" | "link" | "code" | "quote" | "diffAdded" | "diffRemoved" | "diffContext" | "approval";
|
|
10
10
|
export type ThemeStyle = (text: string) => string;
|
|
11
11
|
export interface Theme {
|
|
12
12
|
/** Name recorded in config (never "auto"; auto resolves to dark/light). */
|
package/dist/cli/theme.js
CHANGED
|
@@ -13,6 +13,7 @@ const identity = (text) => text;
|
|
|
13
13
|
function tokens(overrides) {
|
|
14
14
|
const base = {
|
|
15
15
|
text: identity,
|
|
16
|
+
user: sgr("34"),
|
|
16
17
|
dim: sgr("2"),
|
|
17
18
|
accent: sgr("36"),
|
|
18
19
|
success: sgr("32"),
|
|
@@ -83,6 +84,7 @@ export const ansiTheme = {
|
|
|
83
84
|
mode: "ansi",
|
|
84
85
|
tokens: tokens({
|
|
85
86
|
text: identity,
|
|
87
|
+
user: identity,
|
|
86
88
|
dim: identity,
|
|
87
89
|
accent: identity,
|
|
88
90
|
success: identity,
|
package/dist/cli/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/tool-box.d.ts
CHANGED
package/dist/cli/tool-box.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { cyan, dim, green,
|
|
1
|
+
import { cyan, dim, green, red, yellow, } from "./panel.js";
|
|
2
|
+
import { wrapTextWithAnsi, visibleWidth } from "@earendil-works/pi-tui";
|
|
3
|
+
import { DiffView } from "./diff-view.js";
|
|
2
4
|
const LIVE_TAIL_LINES = 8;
|
|
3
5
|
const EXPANDED_LINE_LIMIT = 600;
|
|
4
6
|
function singleLine(text) {
|
|
@@ -28,17 +30,6 @@ function formatDuration(ms) {
|
|
|
28
30
|
const seconds = Math.floor((ms % 60_000) / 1000);
|
|
29
31
|
return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
|
|
30
32
|
}
|
|
31
|
-
function colorizeDiff(line) {
|
|
32
|
-
if (line.startsWith("+++") || line.startsWith("---"))
|
|
33
|
-
return dim(line);
|
|
34
|
-
if (line.startsWith("+"))
|
|
35
|
-
return green(line);
|
|
36
|
-
if (line.startsWith("-"))
|
|
37
|
-
return red(line);
|
|
38
|
-
if (line.startsWith("@@"))
|
|
39
|
-
return cyan(line);
|
|
40
|
-
return line;
|
|
41
|
-
}
|
|
42
33
|
function tail(items, count) {
|
|
43
34
|
return items.length <= count ? items : items.slice(items.length - count);
|
|
44
35
|
}
|
|
@@ -54,7 +45,7 @@ export class ToolBox {
|
|
|
54
45
|
status = "running";
|
|
55
46
|
expanded = false;
|
|
56
47
|
outputLines = [];
|
|
57
|
-
|
|
48
|
+
diffLines;
|
|
58
49
|
liveBuffer = "";
|
|
59
50
|
startedAt = Date.now();
|
|
60
51
|
finishedAt;
|
|
@@ -77,8 +68,8 @@ export class ToolBox {
|
|
|
77
68
|
this.status = options.isError ? "error" : "done";
|
|
78
69
|
this.finishedAt = Date.now();
|
|
79
70
|
this.liveBuffer = "";
|
|
80
|
-
this.
|
|
81
|
-
this.outputLines =
|
|
71
|
+
this.diffLines = Array.isArray(options.diff) ? options.diff : undefined;
|
|
72
|
+
this.outputLines = this.diffLines ? [] : content.split("\n");
|
|
82
73
|
}
|
|
83
74
|
appendLive(text) {
|
|
84
75
|
this.liveBuffer += text;
|
|
@@ -92,25 +83,48 @@ export class ToolBox {
|
|
|
92
83
|
// No cached render state.
|
|
93
84
|
}
|
|
94
85
|
render(width) {
|
|
95
|
-
const
|
|
86
|
+
const w = Math.max(8, Math.floor(width));
|
|
87
|
+
const TOOL_BG = "\x1b[48;5;236m";
|
|
88
|
+
const TOOL_BG_RESET = "\x1b[49m";
|
|
89
|
+
const fill = (line) => {
|
|
90
|
+
const pad = Math.max(0, w - visibleWidth(line));
|
|
91
|
+
return `${TOOL_BG}${line}${" ".repeat(pad)}${TOOL_BG_RESET}`;
|
|
92
|
+
};
|
|
96
93
|
const lines = [];
|
|
97
94
|
const callColor = this.status === "error" ? red : cyan;
|
|
98
95
|
const title = this.title();
|
|
99
|
-
lines.push(
|
|
96
|
+
lines.push(fill(` ${callColor(title)}`));
|
|
97
|
+
lines.push(fill(""));
|
|
100
98
|
const preview = formatToolArgs(this.name, this.args);
|
|
101
99
|
if (preview) {
|
|
102
|
-
for (const line of
|
|
103
|
-
lines.push(
|
|
100
|
+
for (const line of wrapTextWithAnsi(preview, w - 2)) {
|
|
101
|
+
lines.push(fill(` ${dim(line)}`));
|
|
104
102
|
}
|
|
103
|
+
lines.push(fill(""));
|
|
105
104
|
}
|
|
106
105
|
if (this.status === "running" && !this.liveBuffer) {
|
|
107
|
-
lines.push(
|
|
106
|
+
lines.push(fill(` ${dim("waiting for output…")}`));
|
|
107
|
+
lines.push(fill(""));
|
|
108
|
+
}
|
|
109
|
+
if (this.diffLines) {
|
|
110
|
+
const view = new DiffView({ lines: this.diffLines, path: typeof this.args?.path === "string"
|
|
111
|
+
? this.args.path
|
|
112
|
+
: typeof this.args?.file === "string"
|
|
113
|
+
? this.args.file
|
|
114
|
+
: typeof this.args?.file_path === "string"
|
|
115
|
+
? this.args.file_path
|
|
116
|
+
: undefined,
|
|
117
|
+
});
|
|
118
|
+
// Render diff lines with bg fill by re-wrapping view output? view already fills.
|
|
119
|
+
lines.push(...view.render(width));
|
|
108
120
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
121
|
+
else {
|
|
122
|
+
const output = this.renderedOutput();
|
|
123
|
+
if (output.length > 0) {
|
|
124
|
+
lines.push(...this.renderOutput(output, width, fill));
|
|
125
|
+
}
|
|
113
126
|
}
|
|
127
|
+
lines.push(fill(""));
|
|
114
128
|
return lines;
|
|
115
129
|
}
|
|
116
130
|
title() {
|
|
@@ -134,14 +148,6 @@ export class ToolBox {
|
|
|
134
148
|
}
|
|
135
149
|
return visible;
|
|
136
150
|
}
|
|
137
|
-
if (this.outputIsDiff) {
|
|
138
|
-
const added = this.outputLines.filter((line) => line.startsWith("+") && !line.startsWith("+++")).length;
|
|
139
|
-
const removed = this.outputLines.filter((line) => line.startsWith("-") && !line.startsWith("---")).length;
|
|
140
|
-
if (!this.expanded) {
|
|
141
|
-
return [dim(`+${added} -${removed} · ctrl+o to expand`)];
|
|
142
|
-
}
|
|
143
|
-
return this.outputLines.map(colorizeDiff);
|
|
144
|
-
}
|
|
145
151
|
if (!this.expanded) {
|
|
146
152
|
return [dim(`(${this.outputLines.length} lines · ctrl+o to expand)`)];
|
|
147
153
|
}
|
|
@@ -154,23 +160,22 @@ export class ToolBox {
|
|
|
154
160
|
}
|
|
155
161
|
return this.outputLines;
|
|
156
162
|
}
|
|
157
|
-
renderOutput(output, width) {
|
|
158
|
-
const
|
|
159
|
-
const outputWidth = Math.max(6, Math.floor(width) - indent.length);
|
|
163
|
+
renderOutput(output, width, fill) {
|
|
164
|
+
const w = Math.max(8, Math.floor(width));
|
|
160
165
|
const color = this.status === "error"
|
|
161
166
|
? red
|
|
162
167
|
: this.status === "running"
|
|
163
168
|
? yellow
|
|
164
169
|
: green;
|
|
165
170
|
const label = this.status === "running" ? "output · live" : "output";
|
|
166
|
-
const lines = [
|
|
171
|
+
const lines = [];
|
|
172
|
+
lines.push(fill(` ${color(label)}`));
|
|
167
173
|
for (const raw of output) {
|
|
168
174
|
const content = raw.length === 0 ? "" : raw;
|
|
169
|
-
for (const line of
|
|
170
|
-
lines.push(
|
|
175
|
+
for (const line of wrapTextWithAnsi(content, w - 2)) {
|
|
176
|
+
lines.push(fill(` ${line}`));
|
|
171
177
|
}
|
|
172
178
|
}
|
|
173
|
-
lines.push(indent + panelBottom(outputWidth, color));
|
|
174
179
|
return lines;
|
|
175
180
|
}
|
|
176
181
|
}
|
package/dist/cli/tool-box.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-box.js","sourceRoot":"","sources":["../../src/cli/tool-box.ts"],"names":[],"mappings":"AACA,OAAO,EACL,IAAI,EACJ,GAAG,EACH,KAAK,EACL,
|
|
1
|
+
{"version":3,"file":"tool-box.js","sourceRoot":"","sources":["../../src/cli/tool-box.ts"],"names":[],"mappings":"AACA,OAAO,EACL,IAAI,EACJ,GAAG,EACH,KAAK,EACL,GAAG,EACH,MAAM,GAEP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAe1C,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,IAAyC;IAEzC,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QAC3E,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,GAAG,GAAG,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;IACzD,IAAI,EAAE,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED,SAAS,IAAI,CAAI,KAAU,EAAE,KAAa;IACxC,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,OAAO;IACT,EAAE,CAAS;IACX,IAAI,CAAS;IACb,IAAI,CAAsC;IACnD,MAAM,GAAe,SAAS,CAAC;IACvB,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,GAAa,EAAE,CAAC;IAC3B,SAAS,CAAuB;IAChC,UAAU,GAAG,EAAE,CAAC;IAChB,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,UAAU,CAAqB;IAEvC,YAAY,OAAuB;QACjC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,UAA6B,EAAE;QACxD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;QACxB,2EAA2E;QAC3E,0EAA0E;QAC1E,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,UAAU;QACR,0BAA0B;IAC5B,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC;QACjC,MAAM,aAAa,GAAG,UAAU,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,EAAE,CAAC;QAC/D,CAAC,CAAC;QAEF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAErB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ;oBACjC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;oBAChB,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ;wBACnC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;wBAChB,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ;4BACxC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;4BACrB,CAAC,CAAC,SAAS;aAClB,CAAC,CAAC;YACH,iFAAiF;YACjF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,KAAK,IAAI,CAAC,IAAI,YAAY,CAAC;QACpC,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAC5B,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CACjD,CAAC;QACF,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,MAAM,OAAO,EAAE,CAAC;IAC5E,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjC,OAAO;oBACL,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,gBAAgB,CAAC;oBACtD,GAAG,OAAO;iBACX,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,4BAA4B,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC7D,OAAO;gBACL,GAAG,KAAK;gBACR,GAAG,CACD,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,mBAAmB,oBAAoB,CACvE;aACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEO,YAAY,CAAC,MAAgB,EAAE,KAAa,EAAE,IAA8B;QAClF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,KAAK,OAAO;YACrB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,KAAK,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
package/dist/cli/transcript.d.ts
CHANGED
|
@@ -8,13 +8,26 @@ export declare const TRANSCRIPT_PRUNE_COUNT = 500;
|
|
|
8
8
|
* Append-only transcript with bounded rendering work. The session store keeps
|
|
9
9
|
* the full history; this only limits what the TUI keeps as live components.
|
|
10
10
|
*/
|
|
11
|
+
declare class TranscriptContainer extends Container {
|
|
12
|
+
version: number;
|
|
13
|
+
private cachedVersion;
|
|
14
|
+
private cachedWidth;
|
|
15
|
+
private cachedLines;
|
|
16
|
+
bump(): void;
|
|
17
|
+
addChild(component: Component): void;
|
|
18
|
+
removeChild(component: Component): void;
|
|
19
|
+
clear(): void;
|
|
20
|
+
render(width: number): string[];
|
|
21
|
+
}
|
|
11
22
|
export declare class Transcript {
|
|
12
|
-
readonly container:
|
|
23
|
+
readonly container: TranscriptContainer;
|
|
13
24
|
private hidden;
|
|
14
25
|
private marker;
|
|
15
26
|
private theme;
|
|
16
27
|
constructor(theme?: Theme);
|
|
17
28
|
setTheme(theme: Theme): void;
|
|
29
|
+
/** Invalidate the rendered-line cache after a child mutates in place. */
|
|
30
|
+
invalidate(): void;
|
|
18
31
|
/** Clear all history and pruning state, e.g. when resuming a session. */
|
|
19
32
|
reset(): void;
|
|
20
33
|
get hiddenCount(): number;
|
|
@@ -24,3 +37,4 @@ export declare class Transcript {
|
|
|
24
37
|
private markerLabel;
|
|
25
38
|
private pruneIfNeeded;
|
|
26
39
|
}
|
|
40
|
+
export {};
|
package/dist/cli/transcript.js
CHANGED
|
@@ -8,8 +8,40 @@ export const TRANSCRIPT_PRUNE_COUNT = 500;
|
|
|
8
8
|
* Append-only transcript with bounded rendering work. The session store keeps
|
|
9
9
|
* the full history; this only limits what the TUI keeps as live components.
|
|
10
10
|
*/
|
|
11
|
+
class TranscriptContainer extends Container {
|
|
12
|
+
version = 0;
|
|
13
|
+
cachedVersion = -1;
|
|
14
|
+
cachedWidth = -1;
|
|
15
|
+
cachedLines = [];
|
|
16
|
+
bump() {
|
|
17
|
+
this.version++;
|
|
18
|
+
this.cachedVersion = -1;
|
|
19
|
+
}
|
|
20
|
+
addChild(component) {
|
|
21
|
+
super.addChild(component);
|
|
22
|
+
this.bump();
|
|
23
|
+
}
|
|
24
|
+
removeChild(component) {
|
|
25
|
+
super.removeChild(component);
|
|
26
|
+
this.bump();
|
|
27
|
+
}
|
|
28
|
+
clear() {
|
|
29
|
+
super.clear();
|
|
30
|
+
this.bump();
|
|
31
|
+
}
|
|
32
|
+
render(width) {
|
|
33
|
+
if (this.cachedVersion === this.version && this.cachedWidth === width) {
|
|
34
|
+
return this.cachedLines;
|
|
35
|
+
}
|
|
36
|
+
const lines = super.render(width);
|
|
37
|
+
this.cachedLines = lines;
|
|
38
|
+
this.cachedWidth = width;
|
|
39
|
+
this.cachedVersion = this.version;
|
|
40
|
+
return lines;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
11
43
|
export class Transcript {
|
|
12
|
-
container = new
|
|
44
|
+
container = new TranscriptContainer();
|
|
13
45
|
hidden = 0;
|
|
14
46
|
marker = null;
|
|
15
47
|
theme;
|
|
@@ -21,6 +53,11 @@ export class Transcript {
|
|
|
21
53
|
if (this.marker) {
|
|
22
54
|
this.marker.setText(this.markerLabel());
|
|
23
55
|
}
|
|
56
|
+
this.container.bump();
|
|
57
|
+
}
|
|
58
|
+
/** Invalidate the rendered-line cache after a child mutates in place. */
|
|
59
|
+
invalidate() {
|
|
60
|
+
this.container.bump();
|
|
24
61
|
}
|
|
25
62
|
/** Clear all history and pruning state, e.g. when resuming a session. */
|
|
26
63
|
reset() {
|
|
@@ -34,6 +71,7 @@ export class Transcript {
|
|
|
34
71
|
add(child) {
|
|
35
72
|
this.container.addChild(child);
|
|
36
73
|
this.pruneIfNeeded();
|
|
74
|
+
this.container.bump();
|
|
37
75
|
}
|
|
38
76
|
/** Add a plain transcript line using the theme's text token. */
|
|
39
77
|
addLine(text) {
|
|
@@ -59,6 +97,7 @@ export class Transcript {
|
|
|
59
97
|
this.marker = new Text(label);
|
|
60
98
|
this.container.children.unshift(this.marker);
|
|
61
99
|
}
|
|
100
|
+
this.container.bump();
|
|
62
101
|
}
|
|
63
102
|
}
|
|
64
103
|
//# sourceMappingURL=transcript.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/cli/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AAEnD,gFAAgF;AAChF,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/cli/transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Component } from "@earendil-works/pi-tui";
|
|
2
|
+
export interface TrustReviewEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
entryPath: string;
|
|
5
|
+
version?: string;
|
|
6
|
+
capabilities: string[];
|
|
7
|
+
}
|
|
8
|
+
export type ProjectTrustDecision = "approve" | "deny";
|
|
9
|
+
/**
|
|
10
|
+
* Modal review for project-local extensions. It defaults to deny and captures
|
|
11
|
+
* input directly so the editor underneath cannot receive the decision keys.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ProjectTrustPrompt implements Component {
|
|
14
|
+
private readonly entries;
|
|
15
|
+
private readonly cwd;
|
|
16
|
+
private readonly onDecision;
|
|
17
|
+
private selected;
|
|
18
|
+
private settled;
|
|
19
|
+
constructor(entries: TrustReviewEntry[], cwd: string, onDecision: (decision: ProjectTrustDecision) => void);
|
|
20
|
+
invalidate(): void;
|
|
21
|
+
handleInput(data: string): void;
|
|
22
|
+
render(width: number): string[];
|
|
23
|
+
private finish;
|
|
24
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { decodeKittyPrintable, isKeyRelease, matchesKey, wrapTextWithAnsi, } from "@earendil-works/pi-tui";
|
|
2
|
+
import { cyan, dim, panelBottom, panelRow, panelTop, red, yellow, } from "./panel.js";
|
|
3
|
+
/**
|
|
4
|
+
* Modal review for project-local extensions. It defaults to deny and captures
|
|
5
|
+
* input directly so the editor underneath cannot receive the decision keys.
|
|
6
|
+
*/
|
|
7
|
+
export class ProjectTrustPrompt {
|
|
8
|
+
entries;
|
|
9
|
+
cwd;
|
|
10
|
+
onDecision;
|
|
11
|
+
selected = 1; // Safe default: deny.
|
|
12
|
+
settled = false;
|
|
13
|
+
constructor(entries, cwd, onDecision) {
|
|
14
|
+
this.entries = entries;
|
|
15
|
+
this.cwd = cwd;
|
|
16
|
+
this.onDecision = onDecision;
|
|
17
|
+
}
|
|
18
|
+
invalidate() {
|
|
19
|
+
// No cached state.
|
|
20
|
+
}
|
|
21
|
+
handleInput(data) {
|
|
22
|
+
if (this.settled || isKeyRelease(data))
|
|
23
|
+
return;
|
|
24
|
+
if (matchesKey(data, "left")) {
|
|
25
|
+
this.selected = 0;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (matchesKey(data, "right")) {
|
|
29
|
+
this.selected = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const key = (decodeKittyPrintable(data) ?? (data.length === 1 ? data : undefined))?.toLowerCase();
|
|
33
|
+
if (key === "y")
|
|
34
|
+
return this.finish("approve");
|
|
35
|
+
if (key === "n")
|
|
36
|
+
return this.finish("deny");
|
|
37
|
+
if (matchesKey(data, "enter") || matchesKey(data, "space")) {
|
|
38
|
+
return this.finish(this.selected === 0 ? "approve" : "deny");
|
|
39
|
+
}
|
|
40
|
+
if (matchesKey(data, "escape") || matchesKey(data, "ctrl+c")) {
|
|
41
|
+
return this.finish("deny");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
render(width) {
|
|
45
|
+
const panelWidth = Math.max(8, Math.floor(width));
|
|
46
|
+
const inner = panelWidth - 4;
|
|
47
|
+
const lines = [
|
|
48
|
+
panelTop("project extensions need approval", panelWidth, yellow),
|
|
49
|
+
];
|
|
50
|
+
for (const line of wrapTextWithAnsi(this.cwd, inner)) {
|
|
51
|
+
lines.push(panelRow(` ${dim(line)}`, panelWidth, yellow));
|
|
52
|
+
}
|
|
53
|
+
for (const entry of this.entries) {
|
|
54
|
+
const label = entry.version
|
|
55
|
+
? `${entry.id} ${dim(`v${entry.version}`)}`
|
|
56
|
+
: entry.id;
|
|
57
|
+
lines.push(panelRow(` ${cyan(label)}`, panelWidth, yellow));
|
|
58
|
+
for (const line of wrapTextWithAnsi(entry.entryPath, inner)) {
|
|
59
|
+
lines.push(panelRow(` ${dim(line)}`, panelWidth, yellow));
|
|
60
|
+
}
|
|
61
|
+
const capabilities = entry.capabilities.length > 0
|
|
62
|
+
? entry.capabilities.join(", ")
|
|
63
|
+
: "no declared capabilities";
|
|
64
|
+
for (const line of wrapTextWithAnsi(capabilities, inner)) {
|
|
65
|
+
lines.push(panelRow(` ${dim(line)}`, panelWidth, yellow));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
lines.push(panelRow(` ${dim("only approve projects you trust; extensions run with your permissions")}`, panelWidth, yellow));
|
|
69
|
+
const choices = [
|
|
70
|
+
{ label: "[y] Approve", color: cyan, active: this.selected === 0 },
|
|
71
|
+
{ label: "[n] Deny", color: red, active: this.selected === 1 },
|
|
72
|
+
]
|
|
73
|
+
.map((choice) => choice.active
|
|
74
|
+
? `\x1b[7m${choice.color(choice.label)}\x1b[0m`
|
|
75
|
+
: choice.color(choice.label))
|
|
76
|
+
.join(" ");
|
|
77
|
+
lines.push(panelRow(` ${choices}`, panelWidth, yellow));
|
|
78
|
+
lines.push(panelRow(` ${dim("←/→ select · Enter confirm · Esc deny")}`, panelWidth, yellow));
|
|
79
|
+
lines.push(panelBottom(panelWidth, yellow));
|
|
80
|
+
return lines;
|
|
81
|
+
}
|
|
82
|
+
finish(decision) {
|
|
83
|
+
if (this.settled)
|
|
84
|
+
return;
|
|
85
|
+
this.settled = true;
|
|
86
|
+
this.onDecision(decision);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=trust-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-prompt.js","sourceRoot":"","sources":["../../src/cli/trust-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,20 +2,20 @@ export declare const DEFAULT_CONFIG: {
|
|
|
2
2
|
defaultProvider: string;
|
|
3
3
|
providers: Record<string, unknown>;
|
|
4
4
|
runtime: {
|
|
5
|
-
bashConcurrency: string;
|
|
6
|
-
approvalMode: string;
|
|
7
|
-
maxIterations: number;
|
|
8
|
-
maxToolCalls: number;
|
|
9
|
-
maxExecutionMs: number;
|
|
10
5
|
maxParallelToolCalls: number;
|
|
11
6
|
maxToolOutputBytes: number;
|
|
12
7
|
maxBashTimeMs: number;
|
|
8
|
+
bashConcurrency: string;
|
|
9
|
+
mode: string;
|
|
10
|
+
maxTokensPerSession: number | null;
|
|
11
|
+
maxTokensPerTurn: number | null;
|
|
13
12
|
};
|
|
14
13
|
context: {
|
|
15
14
|
maxInputTokens: number | null;
|
|
16
15
|
reserveOutputTokens: number;
|
|
17
16
|
compactAtPercent: number;
|
|
18
17
|
maxProjectInstructionBytes: number;
|
|
18
|
+
compactEveryNTurns: number;
|
|
19
19
|
};
|
|
20
20
|
sessions: {
|
|
21
21
|
enabled: boolean;
|
|
@@ -30,5 +30,6 @@ export declare const DEFAULT_CONFIG: {
|
|
|
30
30
|
mcpServers: Record<string, unknown>;
|
|
31
31
|
extensions: {
|
|
32
32
|
trustedProjects: string[];
|
|
33
|
+
deniedProjects: string[];
|
|
33
34
|
};
|
|
34
35
|
};
|
package/dist/config/defaults.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DEFAULT_LIMITS } from "../types.js";
|
|
2
1
|
export const DEFAULT_CONFIG = {
|
|
3
2
|
defaultProvider: "kilo",
|
|
4
3
|
providers: {
|
|
@@ -10,15 +9,20 @@ export const DEFAULT_CONFIG = {
|
|
|
10
9
|
},
|
|
11
10
|
},
|
|
12
11
|
runtime: {
|
|
13
|
-
|
|
12
|
+
maxParallelToolCalls: 10,
|
|
13
|
+
maxToolOutputBytes: 30000,
|
|
14
|
+
maxBashTimeMs: 120000,
|
|
14
15
|
bashConcurrency: "serial",
|
|
15
|
-
|
|
16
|
+
mode: "plan",
|
|
17
|
+
maxTokensPerSession: null,
|
|
18
|
+
maxTokensPerTurn: null,
|
|
16
19
|
},
|
|
17
20
|
context: {
|
|
18
21
|
maxInputTokens: null,
|
|
19
22
|
reserveOutputTokens: 4096,
|
|
20
23
|
compactAtPercent: 85,
|
|
21
24
|
maxProjectInstructionBytes: 30000,
|
|
25
|
+
compactEveryNTurns: 0,
|
|
22
26
|
},
|
|
23
27
|
sessions: { enabled: true, retentionDays: null },
|
|
24
28
|
ui: {
|
|
@@ -30,6 +34,7 @@ export const DEFAULT_CONFIG = {
|
|
|
30
34
|
mcpServers: {},
|
|
31
35
|
extensions: {
|
|
32
36
|
trustedProjects: [],
|
|
37
|
+
deniedProjects: [],
|
|
33
38
|
},
|
|
34
39
|
};
|
|
35
40
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe,EAAE,MAAM;IACvB,SAAS,EAAE;QACT,IAAI,EAAE;YACJ,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,IAAI;SAChB;KACyB;IAC5B,OAAO,EAAE;QACP,oBAAoB,EAAE,EAAE;QACxB,kBAAkB,EAAE,KAAK;QACzB,aAAa,EAAE,MAAM;QACrB,eAAe,EAAE,QAAQ;QACzB,IAAI,EAAE,MAAM;QACZ,mBAAmB,EAAE,IAAqB;QAC1C,gBAAgB,EAAE,IAAqB;KACxC;IACD,OAAO,EAAE;QACP,cAAc,EAAE,IAAqB;QACrC,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,EAAE;QACpB,0BAA0B,EAAE,KAAK;QACjC,kBAAkB,EAAE,CAAC;KACtB;IACD,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAqB,EAAE;IACjE,EAAE,EAAE;QACF,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,IAAI;KACnB;IACD,UAAU,EAAE,EAA6B;IACzC,UAAU,EAAE;QACV,eAAe,EAAE,EAAc;QAC/B,cAAc,EAAE,EAAc;KAC/B;CACF,CAAC"}
|