koneck 2.128.73 → 2.128.74

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.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Deleting a provider: everything KONECK keeps under its name, in one place for the terminal and
3
+ * the browser.
4
+ *
5
+ * "we must add a option to delete a provider." There was a way — `/provider remove`, and a button
6
+ * in the browser — but only for a provider you had declared, only as a command you had to know,
7
+ * and it removed the declaration alone. The key stayed in credentials.json, and an endpoint or
8
+ * model saved for the name stayed in config.json, so a provider declared again under the same name
9
+ * picked up the old key and the old address, and a config naming it as the default named nothing.
10
+ *
11
+ * A provider KONECK ships with cannot be removed — it is part of the program — so deleting one
12
+ * means forgetting what you stored for it: the key, and any endpoint or model you set. It goes
13
+ * back to how it was on a fresh install.
14
+ */
15
+ export interface ProviderDeleted {
16
+ name: string;
17
+ /** Your declaration was removed. */
18
+ declaration: boolean;
19
+ /** A declaration was shadowing a built-in, which is back. */
20
+ restoredBuiltIn: boolean;
21
+ /** Its stored key was forgotten. */
22
+ key: boolean;
23
+ /** Settings saved under its name that were cleared: 'endpoint', 'model', 'default provider'. */
24
+ settings: string[];
25
+ }
26
+ /** Whether there is anything to delete under `name` — what a list of deletable providers shows. */
27
+ export declare function deletable(name: string, home?: string): boolean;
28
+ /**
29
+ * Deletes what is kept for `name`. Null when there was nothing: not declared, no key, no settings.
30
+ *
31
+ * The provider in use is deleted like any other; what the session does next is the caller's
32
+ * business, because the terminal and the browser each have their own way of choosing another.
33
+ */
34
+ export declare function deleteProvider(name: string, home?: string): Promise<ProviderDeleted | null>;
35
+ /** One sentence saying what was deleted, the same in the terminal and the browser. */
36
+ export declare function describeDeleted(d: ProviderDeleted): string;
37
+ //# sourceMappingURL=provider-delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-delete.d.ts","sourceRoot":"","sources":["../src/provider-delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,eAAe,EAAE,OAAO,CAAC;IACzB,oCAAoC;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,gGAAgG;IAChG,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA4BjG;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAY1D"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Deleting a provider: everything KONECK keeps under its name, in one place for the terminal and
3
+ * the browser.
4
+ *
5
+ * "we must add a option to delete a provider." There was a way — `/provider remove`, and a button
6
+ * in the browser — but only for a provider you had declared, only as a command you had to know,
7
+ * and it removed the declaration alone. The key stayed in credentials.json, and an endpoint or
8
+ * model saved for the name stayed in config.json, so a provider declared again under the same name
9
+ * picked up the old key and the old address, and a config naming it as the default named nothing.
10
+ *
11
+ * A provider KONECK ships with cannot be removed — it is part of the program — so deleting one
12
+ * means forgetting what you stored for it: the key, and any endpoint or model you set. It goes
13
+ * back to how it was on a fresh install.
14
+ */
15
+ import { BUILT_INS, PROVIDERS, removeUserProvider, readUserProviders } from './providers.js';
16
+ import { forgetKey, storedKeyFor } from './credentials.js';
17
+ import { loadKoneckConfig, saveKoneckConfig } from './config-store.js';
18
+ /** Whether there is anything to delete under `name` — what a list of deletable providers shows. */
19
+ export function deletable(name, home) {
20
+ const key = name.trim().toLowerCase();
21
+ return key in readUserProviders(home) || !!storedKeyFor(key, home);
22
+ }
23
+ /**
24
+ * Deletes what is kept for `name`. Null when there was nothing: not declared, no key, no settings.
25
+ *
26
+ * The provider in use is deleted like any other; what the session does next is the caller's
27
+ * business, because the terminal and the browser each have their own way of choosing another.
28
+ */
29
+ export async function deleteProvider(name, home) {
30
+ const key = name.trim().toLowerCase();
31
+ const declaration = removeUserProvider(key, home);
32
+ const keyGone = forgetKey(key, home);
33
+ const cfg = await loadKoneckConfig(home);
34
+ const settings = [];
35
+ if (cfg.endpoints && key in cfg.endpoints) {
36
+ const { [key]: _e, ...rest } = cfg.endpoints;
37
+ cfg.endpoints = rest;
38
+ settings.push('endpoint');
39
+ }
40
+ if (cfg.models && key in cfg.models) {
41
+ const { [key]: _m, ...rest } = cfg.models;
42
+ cfg.models = rest;
43
+ settings.push('model');
44
+ }
45
+ // A default that names nothing any more would fail every start; with it unset, KONECK infers.
46
+ if (cfg.provider?.toLowerCase() === key && !PROVIDERS[key]) {
47
+ delete cfg.provider;
48
+ delete cfg.model;
49
+ settings.push('default provider');
50
+ }
51
+ if (settings.length)
52
+ await saveKoneckConfig(cfg, home);
53
+ if (!declaration && !keyGone && !settings.length)
54
+ return null;
55
+ return { name: key, declaration, restoredBuiltIn: declaration && BUILT_INS[key] !== undefined,
56
+ key: keyGone, settings };
57
+ }
58
+ /** One sentence saying what was deleted, the same in the terminal and the browser. */
59
+ export function describeDeleted(d) {
60
+ const parts = [];
61
+ if (d.declaration)
62
+ parts.push('its declaration');
63
+ if (d.key)
64
+ parts.push('its stored key');
65
+ for (const s of d.settings)
66
+ if (s !== 'default provider')
67
+ parts.push(`its saved ${s}`);
68
+ const list = parts.length > 1 ? parts.slice(0, -1).join(', ') + ' and ' + parts.at(-1) : parts[0];
69
+ const wasDefault = d.settings.includes('default provider')
70
+ ? ' It is no longer your default provider; KONECK picks one at the next start.' : '';
71
+ const after = wasDefault + (d.restoredBuiltIn
72
+ ? ` The built-in ${d.name} is back, pointing at ${BUILT_INS[d.name].baseURL}.`
73
+ : BUILT_INS[d.name] ? ` ${d.name} ships with KONECK, so it stays in the list as on a fresh install.` : '');
74
+ return `Deleted "${d.name}": ${list ?? 'its saved settings'}.${after}`;
75
+ }
76
+ //# sourceMappingURL=provider-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-delete.js","sourceRoot":"","sources":["../src/provider-delete.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-progress.d.ts","sourceRoot":"","sources":["../src/run-progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQvD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,EAC9C,MAAM,SAAI,GACT,WAAW,CAkBb;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAE1D;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAiBvD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,IAAI,GAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAqB,GAC5D,MAAM,CAgDR"}
1
+ {"version":3,"file":"run-progress.d.ts","sourceRoot":"","sources":["../src/run-progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQvD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,EAC9C,MAAM,SAAI,GACT,WAAW,CAkBb;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAE1D;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAiBvD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,IAAI,GAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAqB,GAC5D,MAAM,CAsDR"}
@@ -123,9 +123,15 @@ export function longRunNotice(spend, progress, opts = { local: false }) {
123
123
  ? `${spend.tokens.toLocaleString()} tokens — ${Math.max(0, spend.tokens - spend.delegatedTokens)
124
124
  .toLocaleString()} here across ${req(spend.requests)}, and `
125
125
  + `${spend.delegatedTokens.toLocaleString()} in the sub-agents it started.`
126
- : `${req(spend.requests)}, ${spend.tokens.toLocaleString()} tokens — about `
127
- + `${per.toLocaleString()} a request, which is mostly the conversation being re-read each `
128
- + `time rather than anything new.`;
126
+ : `${req(spend.requests)} and ${spend.tokens.toLocaleString()} tokens.`;
127
+ /*
128
+ * Why the figure is so large, said as a fact about how requests work and not as a verdict. It
129
+ * read "…which is mostly the conversation being re-read each time rather than anything new" —
130
+ * directly above "It is working: 6 files changed in 9 edits", which was reported as the message
131
+ * contradicting itself: the first line seemed to say nothing was being done.
132
+ */
133
+ const why = spend.delegatedTokens > 0 ? '' : ` Every request sends the whole conversation so far `
134
+ + `(about ${per.toLocaleString()} tokens a request), so the total grows with each step, however small.`;
129
135
  /*
130
136
  * A spend cap rather than a turn cap, when there is a price to cap.
131
137
  *
@@ -144,12 +150,12 @@ export function longRunNotice(spend, progress, opts = { local: false }) {
144
150
  : '';
145
151
  if (isGettingSomewhere(progress)) {
146
152
  return `**This message has taken ${shape}**\n\n`
147
- + `It is working: ${describeProgress(progress)}.${spendLine(spend, opts.local)}\n\n`
153
+ + `It is working: ${describeProgress(progress)}.${why}${spendLine(spend, opts.local)}\n\n`
148
154
  + `Nothing here is wrong — long tasks cost this. Stop it if you have seen enough.${cap}`;
149
155
  }
150
156
  return `**${spend.tokens.toLocaleString()} tokens on one message, and nothing has changed yet.**\n\n`
151
157
  + `${shape} ${describeProgress(progress) || 'No files changed, no commands run, no plan steps '
152
- + 'closed'}.${spendLine(spend, opts.local)}\n\n`
158
+ + 'closed'}.${why}${spendLine(spend, opts.local)}\n\n`
153
159
  + `That is the shape of a run that is stuck rather than slow. Worth stopping and telling it `
154
160
  + `what to do differently — or asking it what it is waiting for.`;
155
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-progress.js","sourceRoot":"","sources":["../src/run-progress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-progress.js","sourceRoot":"","sources":["../src/run-progress.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiC/C,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAYrC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,QAAQ,CAC5B,YAAY,EAAE,WAAW,EAAE,OAAO,GAAE,UAAe,GAClD,OAAO,CAAC,SAAS,CAAC,CAm4DpB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiC/C,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAYrC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,QAAQ,CAC5B,YAAY,EAAE,WAAW,EAAE,OAAO,GAAE,UAAe,GAClD,OAAO,CAAC,SAAS,CAAC,CAu4DpB"}
package/dist/web/api.js CHANGED
@@ -11,6 +11,7 @@
11
11
  * dependency. `Last-Event-ID` is honoured, so a reload replays what the client missed instead of
12
12
  * losing the conversation.
13
13
  */
14
+ import { deleteProvider, deletable, describeDeleted } from '../provider-delete.js';
14
15
  import { createServer } from 'http';
15
16
  import { gzipSync } from 'zlib';
16
17
  import { randomBytes, timingSafeEqual } from 'crypto';
@@ -22,7 +23,7 @@ import { stripInvisible, revealValue } from '../clipboard.js';
22
23
  import { rememberKey } from '../credentials.js';
23
24
  import { freePortFrom, recordServer, forgetServer, runningServers, servingSameWorkspace } from './servers.js';
24
25
  import { coalesce } from './events.js';
25
- import { PROVIDERS, BUILT_INS, resolveProvider, needsNoCredential, readUserProviders, addUserProvider, removeUserProvider, userProvidersPath, keyEnvFor, keyProvenance, } from '../providers.js';
26
+ import { PROVIDERS, BUILT_INS, resolveProvider, needsNoCredential, readUserProviders, addUserProvider, userProvidersPath, keyEnvFor, keyProvenance, } from '../providers.js';
26
27
  import { storedKeyFor, forgetKey, storedProviders } from '../credentials.js';
27
28
  import { policyFrom, TRIGGERS, TRIGGER_BLURB } from '../failover.js';
28
29
  import { loadKoneckConfig, saveKoneckConfig } from '../config-store.js';
@@ -1740,6 +1741,8 @@ export async function startWeb(baseConfigIn, options = {}) {
1740
1741
  || !!storedKeyFor(p.name, baseConfig.stateHome),
1741
1742
  // Where it came from, so the UI can say "remembered" rather than asking again.
1742
1743
  keyRemembered: !!storedKeyFor(p.name, baseConfig.stateHome),
1744
+ // Whether a delete would remove anything: a declaration, or a key stored for it.
1745
+ deletable: deletable(p.name, baseConfig.stateHome),
1743
1746
  /*
1744
1747
  * Which key this provider would use, and a fingerprint of it — never the key.
1745
1748
  *
@@ -1916,18 +1919,20 @@ export async function startWeb(baseConfigIn, options = {}) {
1916
1919
  const name = (url.searchParams.get('name') ?? '').trim().toLowerCase();
1917
1920
  if (!name)
1918
1921
  return json(res, 400, { error: 'which provider?' });
1919
- const removed = removeUserProvider(name, baseConfig.stateHome);
1920
- if (!removed) {
1922
+ // The same delete as the terminal's: declaration, stored key, saved endpoint and model.
1923
+ const done = await deleteProvider(name, baseConfig.stateHome);
1924
+ if (!done) {
1921
1925
  return json(res, 404, {
1922
1926
  error: BUILT_INS[name]
1923
- ? `${name} ships with KONECK and cannot be removed`
1924
- : `${name} was not one you declared`,
1927
+ ? `nothing is stored for ${name} — it ships with KONECK`
1928
+ : `no provider called ${name}`,
1925
1929
  });
1926
1930
  }
1927
- announce(BUILT_INS[name]
1928
- ? ` Provider "${name}" withdrawn from the browser — back to ${BUILT_INS[name].baseURL}`
1929
- : ` Provider "${name}" withdrawn from the browser`);
1930
- return json(res, 200, { removed: name, restoredBuiltIn: BUILT_INS[name] !== undefined });
1931
+ (await import('../model-catalog.js')).forgetCatalog(name);
1932
+ const said = describeDeleted(done);
1933
+ announce(` ${said} (from the browser)`);
1934
+ return json(res, 200, { removed: name, restoredBuiltIn: done.restoredBuiltIn, said,
1935
+ stillListed: PROVIDERS[name] !== undefined });
1931
1936
  }
1932
1937
  if (route === '/api/model' && req.method === 'POST') {
1933
1938
  if (!mayAct)