neoctl 0.1.18 → 0.1.20
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/dist/core/image-storage.d.ts +6 -0
- package/dist/core/image-storage.js +38 -0
- package/dist/core/image-storage.js.map +1 -0
- package/dist/core/query-engine.d.ts +0 -1
- package/dist/core/query-engine.js +5 -9
- package/dist/core/query-engine.js.map +1 -1
- package/dist/core/query.js +2 -1
- package/dist/core/query.js.map +1 -1
- package/dist/model/openai-mappers.js +16 -2
- package/dist/model/openai-mappers.js.map +1 -1
- package/dist/repl/index.js +57 -46
- package/dist/repl/index.js.map +1 -1
- package/dist/repl/render.js +2 -0
- package/dist/repl/render.js.map +1 -1
- package/dist/repl/status-line.d.ts +1 -0
- package/dist/repl/status-line.js +34 -27
- package/dist/repl/status-line.js.map +1 -1
- package/dist/tips.js +4 -4
- package/dist/tips.js.map +1 -1
- package/dist/types/messages.d.ts +5 -0
- package/dist/types/messages.js.map +1 -1
- package/dist/ui/display-message.d.ts +2 -0
- package/dist/ui/display-message.js +2 -0
- package/dist/ui/display-message.js.map +1 -1
- package/dist/web/html.js +66 -62
- package/dist/web/html.js.map +1 -1
- package/dist/web/index.js +52 -44
- package/dist/web/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/build-standalone.mjs +139 -139
package/dist/repl/render.js
CHANGED
package/dist/repl/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpF,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,eAAe,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,mCAAmC,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9G,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpF,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,eAAe,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,mCAAmC,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9G,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
package/dist/repl/status-line.js
CHANGED
|
@@ -7,6 +7,7 @@ export class ReplStatusLine {
|
|
|
7
7
|
lastUsage;
|
|
8
8
|
outputTokensStreamed = 0;
|
|
9
9
|
visible = false;
|
|
10
|
+
pulseFrame = 0;
|
|
10
11
|
constructor(output) {
|
|
11
12
|
this.output = output;
|
|
12
13
|
}
|
|
@@ -55,17 +56,20 @@ export class ReplStatusLine {
|
|
|
55
56
|
const context = renderContext(this.metrics);
|
|
56
57
|
const model = this.metrics?.model ?? "model?";
|
|
57
58
|
const source = this.metrics?.contextWindowSource ?? "unknown";
|
|
58
|
-
const detail = this.lastDetail ? ` ${this.lastDetail}` : "";
|
|
59
|
+
const detail = this.lastDetail ? ` - ${this.lastDetail}` : "";
|
|
59
60
|
const width = terminalWidth(this.output);
|
|
61
|
+
const label = animatedPhaseLabel(this.phase, this.pulseFrame);
|
|
62
|
+
if (isActivePhase(this.phase))
|
|
63
|
+
this.pulseFrame += 1;
|
|
60
64
|
const fixedPrefix = [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
`
|
|
64
|
-
`
|
|
65
|
-
`
|
|
66
|
-
`
|
|
67
|
-
`
|
|
68
|
-
].join("
|
|
65
|
+
fixed(label, 12, "left"),
|
|
66
|
+
contextMeter(this.metrics, 10),
|
|
67
|
+
`model ${fixed(truncateMiddle(model, 20), 20, "left")}`,
|
|
68
|
+
`in ${fixed(formatCompact(input), 7, "left")}`,
|
|
69
|
+
`out ${fixed(formatCompact(output), 7, "left")}`,
|
|
70
|
+
`ctx ${fixed(context, 20, "left")}`,
|
|
71
|
+
`src ${fixed(source, 7, "left")}`,
|
|
72
|
+
].join(" ");
|
|
69
73
|
return fitToWidth(`${fixedPrefix}${detail}`, width);
|
|
70
74
|
}
|
|
71
75
|
}
|
|
@@ -102,24 +106,11 @@ function trimFixed(value) {
|
|
|
102
106
|
function terminalWidth(output) {
|
|
103
107
|
return Math.max(72, Math.min(output.columns ?? 100, 160)) - 1;
|
|
104
108
|
}
|
|
105
|
-
function
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (phase === "running_tools")
|
|
111
|
-
return "[*]";
|
|
112
|
-
if (phase === "compacting")
|
|
113
|
-
return "[#]";
|
|
114
|
-
if (phase === "preparing")
|
|
115
|
-
return "[.]";
|
|
116
|
-
if (phase === "injecting_context")
|
|
117
|
-
return "[+]";
|
|
118
|
-
if (phase === "stopped")
|
|
119
|
-
return "[-]";
|
|
120
|
-
if (phase === "failed")
|
|
121
|
-
return "[x]";
|
|
122
|
-
return "[~]";
|
|
109
|
+
function animatedPhaseLabel(phase, tick) {
|
|
110
|
+
const label = phaseLabel(phase).toUpperCase();
|
|
111
|
+
if (!isActivePhase(phase))
|
|
112
|
+
return label;
|
|
113
|
+
return `${label}${STATUS_PULSE_FRAMES[tick % STATUS_PULSE_FRAMES.length]}`;
|
|
123
114
|
}
|
|
124
115
|
function phaseLabel(phase) {
|
|
125
116
|
if (phase === "calling_model")
|
|
@@ -130,6 +121,21 @@ function phaseLabel(phase) {
|
|
|
130
121
|
return "context";
|
|
131
122
|
return phase;
|
|
132
123
|
}
|
|
124
|
+
function isActivePhase(phase) {
|
|
125
|
+
return phase === "running" ||
|
|
126
|
+
phase === "preparing" ||
|
|
127
|
+
phase === "calling_model" ||
|
|
128
|
+
phase === "running_tools" ||
|
|
129
|
+
phase === "compacting" ||
|
|
130
|
+
phase === "injecting_context";
|
|
131
|
+
}
|
|
132
|
+
function contextMeter(metrics, width) {
|
|
133
|
+
if (!metrics || metrics.contextUsageRatio === undefined)
|
|
134
|
+
return `[${"-".repeat(width)}]`;
|
|
135
|
+
const ratio = Math.max(0, Math.min(1, metrics.contextUsageRatio));
|
|
136
|
+
const filled = Math.min(width, Math.max(0, Math.round(ratio * width)));
|
|
137
|
+
return `[${"#".repeat(filled)}${"-".repeat(width - filled)}]`;
|
|
138
|
+
}
|
|
133
139
|
function fixed(value, width, align = "right") {
|
|
134
140
|
const clipped = value.length > width ? value.slice(0, width) : value;
|
|
135
141
|
return align === "left" ? clipped.padEnd(width, " ") : clipped.padStart(width, " ");
|
|
@@ -150,4 +156,5 @@ function truncateMiddle(value, maxLength) {
|
|
|
150
156
|
const right = Math.floor((maxLength - 3) / 2);
|
|
151
157
|
return `${value.slice(0, left)}...${value.slice(value.length - right)}`;
|
|
152
158
|
}
|
|
159
|
+
const STATUS_PULSE_FRAMES = ["", ".", "..", "..."];
|
|
153
160
|
//# sourceMappingURL=status-line.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/repl/status-line.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAKrC,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/repl/status-line.ts"],"names":[],"mappings":"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"}
|
package/dist/tips.js
CHANGED
|
@@ -30,10 +30,10 @@ export const appTips = [
|
|
|
30
30
|
detail: "Ctrl+C clears non-empty input, requests interruption while work is running, and exits after a second press on an empty prompt.",
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
|
-
id: "
|
|
34
|
-
title: "
|
|
35
|
-
placeholder: "Tip: You can type while the assistant is busy; Enter
|
|
36
|
-
detail: "When work is running, submit another prompt to
|
|
33
|
+
id: "interrupt-next",
|
|
34
|
+
title: "Interrupt and send the next message",
|
|
35
|
+
placeholder: "Tip: You can type while the assistant is busy; Enter interrupts it and sends the next message",
|
|
36
|
+
detail: "When foreground work is running, submit another prompt to stop the current model/tool run and start the new prompt immediately. Background tasks and detached sessions keep running.",
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
id: "paste",
|
package/dist/tips.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tips.js","sourceRoot":"","sources":["../src/tips.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,OAAO,GAAa;IAC/B;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,2EAA2E;QACxF,MAAM,EAAE,oIAAoI;KAC7I;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,2CAA2C;QACxD,MAAM,EAAE,sDAAsD;KAC/D;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,qDAAqD;QAClE,MAAM,EAAE,2GAA2G;KACpH;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,0DAA0D;QACvE,MAAM,EAAE,mFAAmF;KAC5F;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,iFAAiF;QAC9F,MAAM,EAAE,gIAAgI;KACzI;IACD;QACE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"tips.js","sourceRoot":"","sources":["../src/tips.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,OAAO,GAAa;IAC/B;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,2EAA2E;QACxF,MAAM,EAAE,oIAAoI;KAC7I;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,2CAA2C;QACxD,MAAM,EAAE,sDAAsD;KAC/D;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,qDAAqD;QAClE,MAAM,EAAE,2GAA2G;KACpH;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,0DAA0D;QACvE,MAAM,EAAE,mFAAmF;KAC5F;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,iFAAiF;QAC9F,MAAM,EAAE,gIAAgI;KACzI;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EAAE,+FAA+F;QAC5G,MAAM,EAAE,sLAAsL;KAC/L;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gFAAgF;QAC7F,MAAM,EAAE,kIAAkI;KAC3I;IACD;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,kFAAkF;QAC/F,MAAM,EAAE,qIAAqI;KAC9I;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE,kFAAkF;KAC3F;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,+DAA+D;QAC5E,MAAM,EAAE,6GAA6G;KACtH;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,gEAAgE;QAC7E,MAAM,EAAE,oGAAoG;KAC7G;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,6EAA6E;QAC1F,MAAM,EAAE,+GAA+G;KACxH;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,uEAAuE;QACpF,MAAM,EAAE,wFAAwF;KACjG;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,2DAA2D;QACxE,MAAM,EAAE,6EAA6E;KACtF;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE,2GAA2G;KACpH;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE,0FAA0F;KACnG;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,+DAA+D;QAC5E,MAAM,EAAE,sGAAsG;KAC/G;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,6EAA6E;QAC1F,MAAM,EAAE,gHAAgH;KACzH;IACD;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,8EAA8E;QAC3F,MAAM,EAAE,qFAAqF;KAC9F;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,kFAAkF;QAC/F,MAAM,EAAE,qHAAqH;KAC9H;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,2EAA2E;QACxF,MAAM,EAAE,qHAAqH;KAC9H;IACD;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,gFAAgF;QAC7F,MAAM,EAAE,4HAA4H;KACrI;IACD;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,oEAAoE;QACjF,MAAM,EAAE,6GAA6G;KACtH;IACD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,qFAAqF;QAClG,MAAM,EAAE,uIAAuI;KAChJ;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,gFAAgF;QAC7F,MAAM,EAAE,iIAAiI;KAC1I;CACF,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,QAAQ,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,MAAc;IACnD,OAAO,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAC9C,CAAC"}
|
package/dist/types/messages.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { ModelUsage } from "../model/model-gateway.js";
|
|
2
2
|
export type MessageRole = "system" | "user" | "assistant" | "tool_result" | "progress" | "attachment" | "tombstone";
|
|
3
|
+
export interface ImageStorageRef {
|
|
4
|
+
path: string;
|
|
5
|
+
format: "base64" | "data-url";
|
|
6
|
+
}
|
|
3
7
|
export type MessageBlock = {
|
|
4
8
|
type: "text";
|
|
5
9
|
text: string;
|
|
@@ -8,6 +12,7 @@ export type MessageBlock = {
|
|
|
8
12
|
mimeType: string;
|
|
9
13
|
data: string;
|
|
10
14
|
label?: string;
|
|
15
|
+
storage?: ImageStorageRef;
|
|
11
16
|
} | {
|
|
12
17
|
type: "thinking";
|
|
13
18
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/types/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/types/messages.ts"],"names":[],"mappings":"AA6CA,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,IAAY;IAC/D,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,SAAkB;IACpE,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAuB,EAAE,EAAW,EAAE,MAAe;IAC3F,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAO;QACL,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC;QACzC,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,OAAO;QACL,GAAG,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3E,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC"}
|
|
@@ -47,6 +47,7 @@ export interface DisplayImageBlock {
|
|
|
47
47
|
mimeType: string;
|
|
48
48
|
/** Approximate original payload size decoded from base64, when available. */
|
|
49
49
|
sizeBytes?: number;
|
|
50
|
+
storagePath?: string;
|
|
50
51
|
thumbnail?: DisplayImageSource;
|
|
51
52
|
original?: DisplayImageSource;
|
|
52
53
|
}
|
|
@@ -81,6 +82,7 @@ export interface DisplayImageAttachment {
|
|
|
81
82
|
label?: string;
|
|
82
83
|
mimeType: string;
|
|
83
84
|
sizeBytes?: number;
|
|
85
|
+
storagePath?: string;
|
|
84
86
|
src?: string;
|
|
85
87
|
thumbnailSrc?: string;
|
|
86
88
|
originalSrc?: string;
|
|
@@ -62,6 +62,7 @@ export function toDisplayImageBlock(block, options = {}) {
|
|
|
62
62
|
label: block.label,
|
|
63
63
|
mimeType: block.mimeType,
|
|
64
64
|
sizeBytes: estimateBase64DecodedBytes(normalizeBase64ImageData(block.data)),
|
|
65
|
+
storagePath: block.storage?.path,
|
|
65
66
|
};
|
|
66
67
|
if (imageMode === "metadata-only")
|
|
67
68
|
return base;
|
|
@@ -86,6 +87,7 @@ export function extractDisplayImages(messages) {
|
|
|
86
87
|
label: block.label,
|
|
87
88
|
mimeType: block.mimeType,
|
|
88
89
|
sizeBytes: block.sizeBytes,
|
|
90
|
+
storagePath: block.storagePath,
|
|
89
91
|
src: block.original?.src ?? block.thumbnail?.src,
|
|
90
92
|
thumbnailSrc: block.thumbnail?.src,
|
|
91
93
|
originalSrc: block.original?.src,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-message.js","sourceRoot":"","sources":["../../src/ui/display-message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"display-message.js","sourceRoot":"","sources":["../../src/ui/display-message.ts"],"names":[],"mappings":"AAkFA,MAAM,UAAU,mBAAmB,CAAC,KAA+C;IACjF,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtD,OAAO,QAAQ,KAAK,CAAC,QAAQ,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAiB,EAAE,UAAiC,EAAE;IACxF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAA6B,EAAE,UAAiC,EAAE;IACrG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA4B,EAAE,UAAiC,EAAE;IACjG,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,UAAiC,EAAE;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;SAC1B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACrD,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACxE,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM;QACN,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAmB,EAAE,UAAiC,EAAE;IAC5F,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,iBAAiB,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACnH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAA+C,EAAE,UAAiC,EAAE;IACtH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IAClD,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,IAAI,GAAsB;QAC9B,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,0BAA0B,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3E,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI;KACjC,CAAC;IAEF,IAAI,SAAS,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;QAC5C,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAmC;IACtE,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,GAAG;gBAChD,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG;gBAClC,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG;aACjC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAA4B,EAAE,UAAiC,EAAE;IACpG,OAAO,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChG,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC"}
|
package/dist/web/html.js
CHANGED
|
@@ -220,8 +220,8 @@ const completionsEl = document.getElementById('completions');
|
|
|
220
220
|
const brand = document.getElementById('brand');
|
|
221
221
|
const connection = document.getElementById('connection');
|
|
222
222
|
|
|
223
|
-
const sessionsPage = () => state.view === 'sessions';
|
|
224
|
-
const openSessionsOnLoad = state.view === 'sessions';
|
|
223
|
+
const sessionsPage = () => state.view === 'sessions';
|
|
224
|
+
const openSessionsOnLoad = state.view === 'sessions';
|
|
225
225
|
const es = new EventSource('/events');
|
|
226
226
|
es.addEventListener('open', () => {
|
|
227
227
|
connection.hidden = true;
|
|
@@ -510,7 +510,7 @@ function easeOutCubic(progress) {
|
|
|
510
510
|
function renderQueued() {
|
|
511
511
|
if (!state.queuedInput) { if (queuedEl.style.display !== 'none') queuedEl.style.display = 'none'; return; }
|
|
512
512
|
if (queuedEl.style.display !== 'block') queuedEl.style.display = 'block';
|
|
513
|
-
setText(queuedEl, '
|
|
513
|
+
setText(queuedEl, 'pending next: ' + state.queuedInput.replace(/\s+/g, ' ').trim() + ' (Esc/Ctrl+C to clear)');
|
|
514
514
|
}
|
|
515
515
|
function renderPanel() {
|
|
516
516
|
document.getElementById('app').classList.toggle('sessions-page', sessionsPage());
|
|
@@ -553,28 +553,28 @@ function renderSessionCard(s, i, selected, currentSessionId) {
|
|
|
553
553
|
const classes = ['session-card', i === selected ? 'selected' : '', isCurrent ? 'current' : '', isRunning ? 'running' : ''].filter(Boolean).join(' ');
|
|
554
554
|
return '<div class="' + classes + '" data-session-index="' + i + '"><div class="session-main"><div class="session-title-line"><span class="session-name">' + esc(s.title || '(untitled)') + '</span></div><div class="session-badges">' + badges + '</div><div class="session-meta">' + esc(truncateMiddle(s.sessionId, 28)) + ' · updated ' + esc(s.updatedAt || 'unknown') + '</div></div><div class="session-actions"><span class="panel-actions"><button data-action="enter" data-session-id="' + esc(s.sessionId) + '">enter</button><button class="danger" data-action="delete" data-session-id="' + esc(s.sessionId) + '">delete</button></span></div></div>';
|
|
555
555
|
}
|
|
556
|
-
function showChatView() {
|
|
557
|
-
state.view = 'chat';
|
|
558
|
-
state.panel = undefined;
|
|
559
|
-
history.replaceState(null, '', '/');
|
|
560
|
-
renderPanel();
|
|
561
|
-
input.focus();
|
|
562
|
-
}
|
|
563
|
-
async function enterSession(sessionId) {
|
|
564
|
-
const result = await postJson('/api/sessions/resume', { sessionId });
|
|
565
|
-
if (result.ok) showChatView();
|
|
566
|
-
}
|
|
567
|
-
async function createAndEnterSession() {
|
|
568
|
-
const result = await postJson('/api/sessions/new', {});
|
|
569
|
-
if (result.ok) showChatView();
|
|
570
|
-
}
|
|
571
|
-
async function openSessionsPanelAfterDelete(sessionId) {
|
|
572
|
-
const session = (state.sessions || []).find(s => s.sessionId === sessionId);
|
|
573
|
-
const label = session ? (session.title || session.sessionId) : sessionId;
|
|
574
|
-
if (!confirm('Delete session "' + label + '"? This cannot be undone.')) return;
|
|
575
|
-
await postJson('/api/sessions/delete', { sessionId });
|
|
576
|
-
await openSessionsPanel();
|
|
577
|
-
}
|
|
556
|
+
function showChatView() {
|
|
557
|
+
state.view = 'chat';
|
|
558
|
+
state.panel = undefined;
|
|
559
|
+
history.replaceState(null, '', '/');
|
|
560
|
+
renderPanel();
|
|
561
|
+
input.focus();
|
|
562
|
+
}
|
|
563
|
+
async function enterSession(sessionId) {
|
|
564
|
+
const result = await postJson('/api/sessions/resume', { sessionId });
|
|
565
|
+
if (result.ok) showChatView();
|
|
566
|
+
}
|
|
567
|
+
async function createAndEnterSession() {
|
|
568
|
+
const result = await postJson('/api/sessions/new', {});
|
|
569
|
+
if (result.ok) showChatView();
|
|
570
|
+
}
|
|
571
|
+
async function openSessionsPanelAfterDelete(sessionId) {
|
|
572
|
+
const session = (state.sessions || []).find(s => s.sessionId === sessionId);
|
|
573
|
+
const label = session ? (session.title || session.sessionId) : sessionId;
|
|
574
|
+
if (!confirm('Delete session "' + label + '"? This cannot be undone.')) return;
|
|
575
|
+
await postJson('/api/sessions/delete', { sessionId });
|
|
576
|
+
await openSessionsPanel();
|
|
577
|
+
}
|
|
578
578
|
async function openLoginPanel() {
|
|
579
579
|
state.panel = 'login';
|
|
580
580
|
panelEl.className = 'open';
|
|
@@ -647,25 +647,25 @@ async function saveLoginPanel() {
|
|
|
647
647
|
const result = await postJson('/api/login', { provider, values });
|
|
648
648
|
if (result.ok) { state.panel = undefined; renderPanel(); }
|
|
649
649
|
}
|
|
650
|
-
function attachmentsForText(text) { return state.attachments.filter(attachment => text.includes(attachment.label)); }
|
|
651
|
-
function insertAtCursor(value) { const start = input.selectionStart || 0, end = input.selectionEnd || start; input.value = input.value.slice(0, start) + value + input.value.slice(end); input.selectionStart = input.selectionEnd = start + value.length; advanceTip(); autosize(); renderCompletions(); }
|
|
652
|
-
async function fileToDataUrlPayload(file) {
|
|
653
|
-
const dataUrl = await new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(String(reader.result || '')); reader.onerror = () => reject(reader.error || new Error('read failed')); reader.readAsDataURL(file); });
|
|
654
|
-
const comma = dataUrl.indexOf(',');
|
|
655
|
-
return { mimeType: file.type || 'image/png', data: comma >= 0 ? dataUrl.slice(comma + 1) : dataUrl };
|
|
656
|
-
}
|
|
657
|
-
async function handlePaste(e) {
|
|
658
|
-
const files = Array.from(e.clipboardData?.files || []).filter(file => file.type.startsWith('image/'));
|
|
659
|
-
if (!files.length) return;
|
|
660
|
-
e.preventDefault();
|
|
661
|
-
for (const file of files) {
|
|
662
|
-
const id = ++state.attachmentCounter;
|
|
663
|
-
const label = '[img#' + id + ']';
|
|
664
|
-
const payload = await fileToDataUrlPayload(file);
|
|
665
|
-
state.attachments.push({ kind: 'image', label, mimeType: payload.mimeType, data: payload.data });
|
|
666
|
-
insertAtCursor(label);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
650
|
+
function attachmentsForText(text) { return state.attachments.filter(attachment => text.includes(attachment.label)); }
|
|
651
|
+
function insertAtCursor(value) { const start = input.selectionStart || 0, end = input.selectionEnd || start; input.value = input.value.slice(0, start) + value + input.value.slice(end); input.selectionStart = input.selectionEnd = start + value.length; advanceTip(); autosize(); renderCompletions(); }
|
|
652
|
+
async function fileToDataUrlPayload(file) {
|
|
653
|
+
const dataUrl = await new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(String(reader.result || '')); reader.onerror = () => reject(reader.error || new Error('read failed')); reader.readAsDataURL(file); });
|
|
654
|
+
const comma = dataUrl.indexOf(',');
|
|
655
|
+
return { mimeType: file.type || 'image/png', data: comma >= 0 ? dataUrl.slice(comma + 1) : dataUrl };
|
|
656
|
+
}
|
|
657
|
+
async function handlePaste(e) {
|
|
658
|
+
const files = Array.from(e.clipboardData?.files || []).filter(file => file.type.startsWith('image/'));
|
|
659
|
+
if (!files.length) return;
|
|
660
|
+
e.preventDefault();
|
|
661
|
+
for (const file of files) {
|
|
662
|
+
const id = ++state.attachmentCounter;
|
|
663
|
+
const label = '[img#' + id + ']';
|
|
664
|
+
const payload = await fileToDataUrlPayload(file);
|
|
665
|
+
state.attachments.push({ kind: 'image', label, mimeType: payload.mimeType, data: payload.data });
|
|
666
|
+
insertAtCursor(label);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
669
|
async function submit() {
|
|
670
670
|
const text = input.value;
|
|
671
671
|
if (text.trim() === '/sessions') { input.value = ''; autosize(); renderCompletions(); await openSessionsPanel(); return; }
|
|
@@ -685,6 +685,10 @@ async function submit() {
|
|
|
685
685
|
state.historyIndex = undefined;
|
|
686
686
|
input.value = '';
|
|
687
687
|
state.attachments = [];
|
|
688
|
+
if (state.busy) {
|
|
689
|
+
state.busy = false;
|
|
690
|
+
state.queuedInput = undefined;
|
|
691
|
+
}
|
|
688
692
|
autosize();
|
|
689
693
|
renderCompletions();
|
|
690
694
|
const res = await fetch('/api/submit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text, attachments }) });
|
|
@@ -725,19 +729,19 @@ transcript.addEventListener('click', (e) => {
|
|
|
725
729
|
renderedLineKeys.set(String(id), lineRenderKey(line));
|
|
726
730
|
}
|
|
727
731
|
});
|
|
728
|
-
function handleSessionsKey(e) {
|
|
729
|
-
if (state.panel !== 'sessions') return false;
|
|
730
|
-
const countSessions = (state.sessions || []).length;
|
|
731
|
-
if (e.key === 'Escape') { e.preventDefault(); showChatView(); return true; }
|
|
732
|
-
if (e.key === 'ArrowUp' && countSessions) { e.preventDefault(); state.panelSelection = (state.panelSelection + countSessions - 1) % countSessions; renderPanel(); return true; }
|
|
733
|
-
if (e.key === 'ArrowDown' && countSessions) { e.preventDefault(); state.panelSelection = (state.panelSelection + 1) % countSessions; renderPanel(); return true; }
|
|
734
|
-
if (e.key === 'Enter' && countSessions) { e.preventDefault(); const s = state.sessions[state.panelSelection]; if (s) void enterSession(s.sessionId); return true; }
|
|
735
|
-
if ((e.key === 'Delete' || e.key === 'Backspace') && countSessions) { e.preventDefault(); const s = state.sessions[state.panelSelection]; if (s) openSessionsPanelAfterDelete(s.sessionId); return true; }
|
|
736
|
-
return false;
|
|
737
|
-
}
|
|
738
|
-
input.addEventListener('keydown', (e) => {
|
|
739
|
-
const count = completions().length;
|
|
740
|
-
if (handleSessionsKey(e)) return;
|
|
732
|
+
function handleSessionsKey(e) {
|
|
733
|
+
if (state.panel !== 'sessions') return false;
|
|
734
|
+
const countSessions = (state.sessions || []).length;
|
|
735
|
+
if (e.key === 'Escape') { e.preventDefault(); showChatView(); return true; }
|
|
736
|
+
if (e.key === 'ArrowUp' && countSessions) { e.preventDefault(); state.panelSelection = (state.panelSelection + countSessions - 1) % countSessions; renderPanel(); return true; }
|
|
737
|
+
if (e.key === 'ArrowDown' && countSessions) { e.preventDefault(); state.panelSelection = (state.panelSelection + 1) % countSessions; renderPanel(); return true; }
|
|
738
|
+
if (e.key === 'Enter' && countSessions) { e.preventDefault(); const s = state.sessions[state.panelSelection]; if (s) void enterSession(s.sessionId); return true; }
|
|
739
|
+
if ((e.key === 'Delete' || e.key === 'Backspace') && countSessions) { e.preventDefault(); const s = state.sessions[state.panelSelection]; if (s) openSessionsPanelAfterDelete(s.sessionId); return true; }
|
|
740
|
+
return false;
|
|
741
|
+
}
|
|
742
|
+
input.addEventListener('keydown', (e) => {
|
|
743
|
+
const count = completions().length;
|
|
744
|
+
if (handleSessionsKey(e)) return;
|
|
741
745
|
if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); const c = selectedCompletion(); if (c && c.kind === 'command' && c.arguments !== 'none') { completeSelection(); input.value += ' '; input.selectionStart = input.selectionEnd = input.value.length; return; } submit(); return; }
|
|
742
746
|
if (e.key === 'Tab') { if (completeSelection()) e.preventDefault(); else if (!input.value) { e.preventDefault(); advanceTip(); } return; }
|
|
743
747
|
if (e.key === 'ArrowUp' && count) { e.preventDefault(); state.completionIndex = (state.completionIndex + count - 1) % count; renderCompletions(); return; }
|
|
@@ -751,11 +755,11 @@ input.addEventListener('keydown', (e) => {
|
|
|
751
755
|
if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'c') { if (input.value) { input.value = ''; autosize(); renderCompletions(); } else fetch('/api/interrupt', { method: 'POST' }); }
|
|
752
756
|
if (e.key === 'Escape') { state.completionIndex = 0; if (state.queuedInput) fetch('/api/interrupt', { method: 'POST' }); else renderCompletions(); }
|
|
753
757
|
});
|
|
754
|
-
document.addEventListener('keydown', (e) => {
|
|
755
|
-
if (e.target === input || e.target.closest('input, textarea, select')) return;
|
|
756
|
-
handleSessionsKey(e);
|
|
757
|
-
});
|
|
758
|
-
input.addEventListener('input', () => { state.completionIndex = 0; state.attachments = attachmentsForText(input.value); advanceTip(); autosize(); renderCompletions(); });
|
|
758
|
+
document.addEventListener('keydown', (e) => {
|
|
759
|
+
if (e.target === input || e.target.closest('input, textarea, select')) return;
|
|
760
|
+
handleSessionsKey(e);
|
|
761
|
+
});
|
|
762
|
+
input.addEventListener('input', () => { state.completionIndex = 0; state.attachments = attachmentsForText(input.value); advanceTip(); autosize(); renderCompletions(); });
|
|
759
763
|
input.addEventListener('paste', (e) => { void handlePaste(e); });
|
|
760
764
|
function autosize() { input.style.height = 'auto'; input.style.height = Math.min(input.scrollHeight, window.innerHeight * .35) + 'px'; updateScrollBottomAffordance(); }
|
|
761
765
|
function phaseLabel(phase) { if (phase === 'calling_model') return 'model'; if (phase === 'thinking') return 'think'; if (phase === 'running_tools') return 'tools'; if (phase === 'injecting_context') return 'context'; return phase || 'ready'; }
|
package/dist/web/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/web/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/web/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA41B1B,CAAC"}
|