koneck 2.76.1 → 2.77.0
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/compressor.d.ts +10 -0
- package/dist/compressor.d.ts.map +1 -1
- package/dist/compressor.js +46 -2
- package/dist/compressor.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +39 -1
- package/dist/engine.js.map +1 -1
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +14 -0
- package/dist/ink-chat.js.map +1 -1
- package/dist/tools.d.ts +21 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +90 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/web/events.d.ts +11 -0
- package/dist/web/events.d.ts.map +1 -1
- package/dist/web/events.js.map +1 -1
- package/dist/web/sessions.d.ts.map +1 -1
- package/dist/web/sessions.js +1 -0
- package/dist/web/sessions.js.map +1 -1
- package/dist/web/ui-client.d.ts.map +1 -1
- package/dist/web/ui-client.js +11 -0
- package/dist/web/ui-client.js.map +1 -1
- package/package.json +1 -1
package/dist/compressor.d.ts
CHANGED
|
@@ -74,6 +74,16 @@ export interface CompressOptions {
|
|
|
74
74
|
* been left.
|
|
75
75
|
*/
|
|
76
76
|
export declare function activeRequestIndex(messages: readonly Message[]): number;
|
|
77
|
+
/**
|
|
78
|
+
* How many recent messages can be kept and still get under the threshold.
|
|
79
|
+
*
|
|
80
|
+
* Estimated from the share of the conversation each message carries, which is crude and does not
|
|
81
|
+
* need to be otherwise: the question is only "is twelve going to be enough", and the answer is
|
|
82
|
+
* usually a clear yes or a clear no. Never below four, because a tail shorter than that stops being
|
|
83
|
+
* a conversation — and a compaction that leaves nothing recent is worse than one that has to run
|
|
84
|
+
* again later.
|
|
85
|
+
*/
|
|
86
|
+
export declare function keepForTarget(messages: readonly Message[], size: number, limit: number, start?: number): number;
|
|
77
87
|
export declare function compressIfNeeded(messages: Message[], client: OpenAI, model: string, options?: CompressOptions): Promise<{
|
|
78
88
|
messages: Message[];
|
|
79
89
|
compressed: boolean;
|
package/dist/compressor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C,iBAAS,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAenD;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtF;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAW1E;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9F;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,SAAI,EACP,QAAQ,YAA+B,GACtC,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,YAA+B,GACtC,MAAM,GAAG,IAAI,CAKf;AAED,MAAM,WAAW,eAAe;IAC9B;sDACkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAUvE;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAGb,OAAO,GAAE,eAAkD,GAC1D,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C,iBAAS,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAenD;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtF;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAW1E;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9F;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,SAAI,EACP,QAAQ,YAA+B,GACtC,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,YAA+B,GACtC,MAAM,GAAG,IAAI,CAKf;AAED,MAAM,WAAW,eAAe;IAC9B;sDACkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAUvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAuB,GAC3B,MAAM,CAYR;AAQD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAGb,OAAO,GAAE,eAAkD,GAC1D,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAsGvD;AAmBD,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/compressor.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { shouldCompact, DEFAULT_CONTEXT_LIMIT } from './context-limit.js';
|
|
1
|
+
import { shouldCompact, COMPACT_AT, DEFAULT_CONTEXT_LIMIT } from './context-limit.js';
|
|
2
2
|
const CHARS_PER_TOKEN = 4;
|
|
3
3
|
const KEEP_RECENT_MESSAGES = 12;
|
|
4
4
|
function estimateTokens(messages) {
|
|
@@ -143,6 +143,33 @@ export function activeRequestIndex(messages) {
|
|
|
143
143
|
}
|
|
144
144
|
return -1;
|
|
145
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* How many recent messages can be kept and still get under the threshold.
|
|
148
|
+
*
|
|
149
|
+
* Estimated from the share of the conversation each message carries, which is crude and does not
|
|
150
|
+
* need to be otherwise: the question is only "is twelve going to be enough", and the answer is
|
|
151
|
+
* usually a clear yes or a clear no. Never below four, because a tail shorter than that stops being
|
|
152
|
+
* a conversation — and a compaction that leaves nothing recent is worse than one that has to run
|
|
153
|
+
* again later.
|
|
154
|
+
*/
|
|
155
|
+
export function keepForTarget(messages, size, limit, start = KEEP_RECENT_MESSAGES) {
|
|
156
|
+
const target = limit * COMPACT_AT;
|
|
157
|
+
if (size <= 0 || target <= 0)
|
|
158
|
+
return start;
|
|
159
|
+
for (let keep = start; keep >= MIN_KEEP_RECENT; keep -= 2) {
|
|
160
|
+
const kept = messages.slice(Math.max(2, messages.length - keep));
|
|
161
|
+
// The head and the summary itself are the rest of what survives; a summary is capped at about
|
|
162
|
+
// a thousand tokens by the request that makes it.
|
|
163
|
+
const after = estimateTokens([...messages.slice(0, 2), ...kept]) + SUMMARY_TOKENS;
|
|
164
|
+
if (after <= target)
|
|
165
|
+
return keep;
|
|
166
|
+
}
|
|
167
|
+
return MIN_KEEP_RECENT;
|
|
168
|
+
}
|
|
169
|
+
/** The fewest recent messages worth keeping. Below this a tail stops being a conversation. */
|
|
170
|
+
const MIN_KEEP_RECENT = 4;
|
|
171
|
+
/** What a summary costs, roughly — the request that makes one caps it at 1024 tokens. */
|
|
172
|
+
const SUMMARY_TOKENS = 1100;
|
|
146
173
|
export async function compressIfNeeded(messages, client, model,
|
|
147
174
|
// Defaulted rather than required: a caller that forgets should compact conservatively, not
|
|
148
175
|
// throw. The engine always passes the real window.
|
|
@@ -163,7 +190,24 @@ options = { limit: DEFAULT_CONTEXT_LIMIT }) {
|
|
|
163
190
|
// fixed by choosing a luckier constant.
|
|
164
191
|
const head = messages.slice(0, 2);
|
|
165
192
|
const balanced = toolPairingBalance(messages);
|
|
166
|
-
|
|
193
|
+
/*
|
|
194
|
+
* How much of the recent conversation to keep, given how much has to go.
|
|
195
|
+
*
|
|
196
|
+
* Twelve, flatly, was the whole of the problem. The weight of an agent conversation is in the
|
|
197
|
+
* recent tool results — a file read, a type-check's output — and those are exactly what the last
|
|
198
|
+
* twelve messages hold. So compaction summarised a handful of small old messages, saved almost
|
|
199
|
+
* nothing, and was over the threshold again on the very next turn. Watched in a real run:
|
|
200
|
+
* 27 messages to 16, then 19 to 16, then 19 to 17, then 20 to 17, four rounds in a row, each one
|
|
201
|
+
* a summarisation request that bought three messages and lost the detail behind them. And each
|
|
202
|
+
* round dropped context the model then went and read again, which is how "it keeps reading
|
|
203
|
+
* instead of acting" begins.
|
|
204
|
+
*
|
|
205
|
+
* So the amount kept is chosen to actually get under the threshold. It starts at twelve, and
|
|
206
|
+
* gives ground only as far as it must — the recent conversation is the useful part, and keeping
|
|
207
|
+
* less of it is a cost paid to avoid paying it repeatedly.
|
|
208
|
+
*/
|
|
209
|
+
const keep = keepForTarget(messages, size, options.limit);
|
|
210
|
+
const wanted = Math.max(2, messages.length - keep);
|
|
167
211
|
// Backwards first, because that keeps more of the recent conversation. Forwards as a fallback:
|
|
168
212
|
// it summarises more than intended, which still beats sending a prompt the model will refuse.
|
|
169
213
|
const cut = safeCutAtOrBefore(messages, wanted, 2, balanced)
|
package/dist/compressor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compressor.js","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"compressor.js","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAc5B,OAAO,EACE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAoBtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWtC,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAWlB,OAAO,EAAE,kBAAkB,EAAuD,MAAM,iBAAiB,CAAC;AAI1G,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EAEX,UAAU,EAKX,MAAM,YAAY,CAAC;AAIpB;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;AAC7C;;;;GAIG;AACH,KAAK,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACtD,MAAM,CAmGR;AAED,qGAAqG;AACrG,MAAM,WAAW,aAAa;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAEpF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACxG,IAAI,CAQN;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.js
CHANGED
|
@@ -255,6 +255,15 @@ export function isRetryableProviderError(err) {
|
|
|
255
255
|
return /model|route|not supported|unavailable|no such/.test(text);
|
|
256
256
|
}
|
|
257
257
|
if (status === undefined) {
|
|
258
|
+
/*
|
|
259
|
+
* A dead link is retryable by definition, and saying so here rather than repeating the patterns
|
|
260
|
+
* is what keeps the two answers from contradicting each other. They did: "read ETIMEDOUT" was
|
|
261
|
+
* recognised as a lost connection and refused a retry in the same breath, because this list
|
|
262
|
+
* matches "timeout" and that message says "etimedout". The run ended on a blip the classifier
|
|
263
|
+
* had already identified.
|
|
264
|
+
*/
|
|
265
|
+
if (isConnectivityFailure(err))
|
|
266
|
+
return true;
|
|
258
267
|
// Network-level failures carry no status.
|
|
259
268
|
// "Connection error." is the OpenAI SDK's APIConnectionError wording and carries no status,
|
|
260
269
|
// which is exactly the transient case retrying exists for. It cost a four-turn run.
|
|
@@ -357,7 +366,19 @@ export function isConnectivityFailure(err) {
|
|
|
357
366
|
const text = `${e?.message ?? ''} ${e?.code ?? ''}`.toLowerCase();
|
|
358
367
|
if (!text.trim())
|
|
359
368
|
return false;
|
|
360
|
-
|
|
369
|
+
/*
|
|
370
|
+
* Every way a socket dies, including the ones that do not mention a socket.
|
|
371
|
+
*
|
|
372
|
+
* "Premature close" is what Node says when a response body ends before it should, and "terminated"
|
|
373
|
+
* is undici's wording for the same event. Neither contains a word like connection or timeout, so
|
|
374
|
+
* both fell through every pattern here and ended runs outright — the reported case was a stream
|
|
375
|
+
* that stopped mid-sentence after six seconds and took the whole run with it.
|
|
376
|
+
*
|
|
377
|
+
* "aborted" is deliberately absent. A user pressing stop produces exactly that word, and retrying
|
|
378
|
+
* somebody's cancellation is the worst possible reading of it; the caller checks the signal
|
|
379
|
+
* before this is consulted.
|
|
380
|
+
*/
|
|
381
|
+
return /connection error|econnrefused|econnreset|econnaborted|etimedout|enotfound|eai_again|ehostunreach|enetunreach|enetdown|epipe|socket hang up|socket disconnected|fetch failed|network|dns|tunnel|offline|premature close|terminated|unexpected end|stream closed|other side closed/
|
|
361
382
|
.test(text);
|
|
362
383
|
}
|
|
363
384
|
export function retryDelayMs(err, attempt, random = Math.random) {
|
|
@@ -1180,6 +1201,8 @@ detectedContext = { current: 0 }) {
|
|
|
1180
1201
|
* one, and what somebody means by "wait for the network" is an amount of time.
|
|
1181
1202
|
*/
|
|
1182
1203
|
let offlineSince = 0;
|
|
1204
|
+
/** Whether the attempt in flight has emitted any of the reply yet. */
|
|
1205
|
+
let shownThisAttempt = false;
|
|
1183
1206
|
let emptyTurns = 0;
|
|
1184
1207
|
/** Retries spent on an empty turn from a model already known to use tools. */
|
|
1185
1208
|
let emptyRetries = 0;
|
|
@@ -1635,6 +1658,15 @@ detectedContext = { current: 0 }) {
|
|
|
1635
1658
|
* so every call reasoned at the provider's default and running `echo hello` cost a full
|
|
1636
1659
|
* deliberation. Measured: KONECK's own overhead for a command is about forty milliseconds.
|
|
1637
1660
|
*/
|
|
1661
|
+
/*
|
|
1662
|
+
* Whether this attempt has already put words on screen.
|
|
1663
|
+
*
|
|
1664
|
+
* A retry re-asks from the same messages, so the model says its piece again — and the half a
|
|
1665
|
+
* sentence the failed attempt managed is still sitting in the transcript. Six retries of a
|
|
1666
|
+
* stream that died mid-sentence produced "node_modules is present. Let me" six times over.
|
|
1667
|
+
* Reset per attempt, so only an attempt that actually showed something asks for it back.
|
|
1668
|
+
*/
|
|
1669
|
+
shownThisAttempt = false;
|
|
1638
1670
|
const paceField = config.pace && !effortRefused
|
|
1639
1671
|
// effortValue is set when a provider has told us which values it takes; until then the
|
|
1640
1672
|
// ordinary mapping applies.
|
|
@@ -1817,6 +1849,8 @@ detectedContext = { current: 0 }) {
|
|
|
1817
1849
|
heldTail = hold;
|
|
1818
1850
|
if (emit) {
|
|
1819
1851
|
config.onChunk?.(emit);
|
|
1852
|
+
// So a retry knows there is something on screen to take back.
|
|
1853
|
+
shownThisAttempt = true;
|
|
1820
1854
|
if (!silent) {
|
|
1821
1855
|
if (spinner && !spinnerStopped) {
|
|
1822
1856
|
spinner.stop();
|
|
@@ -2078,6 +2112,10 @@ detectedContext = { current: 0 }) {
|
|
|
2078
2112
|
config.onOffline?.(offline
|
|
2079
2113
|
? { provider: config.provider, attempt: turnRetries, nextInMs: delay, downForMs: waitedFor }
|
|
2080
2114
|
: null);
|
|
2115
|
+
// Whatever the failed attempt managed to say is withdrawn before it is said again, so a
|
|
2116
|
+
// recovered turn reads as one reply rather than as several false starts stitched together.
|
|
2117
|
+
if (shownThisAttempt)
|
|
2118
|
+
config.onStreamReset?.();
|
|
2081
2119
|
// Interruptible: a wait measured in minutes must not swallow a stop.
|
|
2082
2120
|
await sleepUnlessAborted(delay, combinedSignal);
|
|
2083
2121
|
if (combinedSignal.aborted)
|