@trenchwork/erosolar 1.1.62 → 1.1.63
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/capabilities/todoCapability.js +2 -2
- package/dist/capabilities/todoCapability.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/contracts/v1/agent.d.ts +12 -2
- package/dist/contracts/v1/agent.d.ts.map +1 -1
- package/dist/core/adversarialCorrection.d.ts +22 -0
- package/dist/core/adversarialCorrection.d.ts.map +1 -0
- package/dist/core/adversarialCorrection.js +25 -0
- package/dist/core/adversarialCorrection.js.map +1 -0
- package/dist/core/agent.d.ts +2 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +11 -1
- package/dist/core/agent.js.map +1 -1
- package/dist/core/failureRegistry.d.ts +30 -0
- package/dist/core/failureRegistry.d.ts.map +1 -0
- package/dist/core/failureRegistry.js +74 -0
- package/dist/core/failureRegistry.js.map +1 -0
- package/dist/core/hostedAuth.d.ts +55 -0
- package/dist/core/hostedAuth.d.ts.map +1 -0
- package/dist/core/hostedAuth.js +134 -0
- package/dist/core/hostedAuth.js.map +1 -0
- package/dist/core/secretStore.d.ts +11 -0
- package/dist/core/secretStore.d.ts.map +1 -1
- package/dist/core/secretStore.js +25 -0
- package/dist/core/secretStore.js.map +1 -1
- package/dist/core/slashCommands.d.ts.map +1 -1
- package/dist/core/slashCommands.js +1 -0
- package/dist/core/slashCommands.js.map +1 -1
- package/dist/core/thinkingVerbs.d.ts +31 -0
- package/dist/core/thinkingVerbs.d.ts.map +1 -0
- package/dist/core/thinkingVerbs.js +58 -0
- package/dist/core/thinkingVerbs.js.map +1 -0
- package/dist/core/turnGovernor.d.ts +63 -0
- package/dist/core/turnGovernor.d.ts.map +1 -0
- package/dist/core/turnGovernor.js +94 -0
- package/dist/core/turnGovernor.js.map +1 -0
- package/dist/headless/interactiveShell.d.ts +4 -0
- package/dist/headless/interactiveShell.d.ts.map +1 -1
- package/dist/headless/interactiveShell.js +168 -38
- package/dist/headless/interactiveShell.js.map +1 -1
- package/dist/plugins/tools/todo/todoPlugin.js +1 -1
- package/dist/plugins/tools/todo/todoPlugin.js.map +1 -1
- package/dist/runtime/agentController.d.ts.map +1 -1
- package/dist/runtime/agentController.js +7 -0
- package/dist/runtime/agentController.js.map +1 -1
- package/dist/shell/toolPresentation.d.ts +7 -0
- package/dist/shell/toolPresentation.d.ts.map +1 -1
- package/dist/shell/toolPresentation.js +51 -1
- package/dist/shell/toolPresentation.js.map +1 -1
- package/dist/tools/memoryTools.d.ts +7 -0
- package/dist/tools/memoryTools.d.ts.map +1 -1
- package/dist/tools/memoryTools.js +17 -0
- package/dist/tools/memoryTools.js.map +1 -1
- package/dist/tools/todoTools.d.ts +3 -4
- package/dist/tools/todoTools.d.ts.map +1 -1
- package/dist/tools/todoTools.js +23 -4
- package/dist/tools/todoTools.js.map +1 -1
- package/dist/ui/ink/InkPromptController.d.ts +2 -0
- package/dist/ui/ink/InkPromptController.d.ts.map +1 -1
- package/dist/ui/ink/InkPromptController.js +4 -0
- package/dist/ui/ink/InkPromptController.js.map +1 -1
- package/dist/ui/ink/Prompt.d.ts +2 -0
- package/dist/ui/ink/Prompt.d.ts.map +1 -1
- package/dist/ui/ink/Prompt.js +8 -1
- package/dist/ui/ink/Prompt.js.map +1 -1
- package/dist/ui/ink/StatusLine.d.ts +6 -0
- package/dist/ui/ink/StatusLine.d.ts.map +1 -1
- package/dist/ui/ink/StatusLine.js +17 -3
- package/dist/ui/ink/StatusLine.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hosted-key access — the CLIENT side of "optional sign-in unlocks hosted keys,
|
|
3
|
+
* or bring your own." Keys NEVER ship in this client (Project Glasswing); they
|
|
4
|
+
* live only in the ero.solar AWS backend, exactly like the Tavily search proxy
|
|
5
|
+
* already does (see src/tools/webTools.ts). Sign-in mints a short-lived token;
|
|
6
|
+
* the proxies validate it and use the operator keys.
|
|
7
|
+
*
|
|
8
|
+
* ── CONTRACT (the ero.solar backend implements this; this file codes against it) ──
|
|
9
|
+
* Sign-in (loopback OAuth, increment 2):
|
|
10
|
+
* open https://ero.solar/cli/login?port=<loopbackPort>&state=<csrf>
|
|
11
|
+
* → Google SSO → 302 http://127.0.0.1:<port>/cb?token=<jwt>&email=<e>&state=<csrf>
|
|
12
|
+
* DeepSeek (hosted): POST {HOSTED_DEEPSEEK_PROXY} header `Authorization: Bearer <token>`
|
|
13
|
+
* Tavily (hosted): the existing tavilySearch proxy, same Bearer token
|
|
14
|
+
* The token is short-lived and server-validated; if it 401s the CLI drops to
|
|
15
|
+
* "signed out" and asks the user to /login again or use their own key.
|
|
16
|
+
*
|
|
17
|
+
* THIS MODULE is state + resolution only (increment 1, fully testable). The live
|
|
18
|
+
* sign-in flow and the provider→proxy wiring are increment 2 (backend-gated).
|
|
19
|
+
*/
|
|
20
|
+
export declare const HOSTED_LOGIN_URL = "https://ero.solar/cli/login";
|
|
21
|
+
export declare const HOSTED_DEEPSEEK_PROXY = "https://ero.solar/api/deepseek";
|
|
22
|
+
export interface HostedSession {
|
|
23
|
+
token: string;
|
|
24
|
+
email: string;
|
|
25
|
+
}
|
|
26
|
+
export type KeyMode = 'hosted' | 'own' | 'none';
|
|
27
|
+
export interface KeyModeStatus {
|
|
28
|
+
mode: KeyMode;
|
|
29
|
+
email: string | null;
|
|
30
|
+
signedIn: boolean;
|
|
31
|
+
ownDeepSeek: boolean;
|
|
32
|
+
ownTavily: boolean;
|
|
33
|
+
preferOwnKeys: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** The active hosted session (token + email), or null when signed out. */
|
|
36
|
+
export declare function getHostedSession(): HostedSession | null;
|
|
37
|
+
/** Persist a hosted session (called by /login once the backend returns a token). */
|
|
38
|
+
export declare function setHostedSession(session: HostedSession): void;
|
|
39
|
+
/** Sign out: drop the token but keep the own/hosted preference. */
|
|
40
|
+
export declare function clearHostedSession(): void;
|
|
41
|
+
export declare function prefersOwnKeys(): boolean;
|
|
42
|
+
export declare function setPreferOwnKeys(value: boolean): void;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve which keys are in effect. Preference order: an explicit "use my own
|
|
45
|
+
* keys" wins when the user actually has a DeepSeek key; otherwise a hosted
|
|
46
|
+
* session is used; otherwise the user's own key; otherwise nothing is set up.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveKeyMode(): KeyModeStatus;
|
|
49
|
+
/**
|
|
50
|
+
* The dim welcome/banner line that makes the active key source unmistakable —
|
|
51
|
+
* the user must be able to see at a glance whether they're on hosted keys or
|
|
52
|
+
* their own. Returns null in 'none' mode (the welcome already shows key setup).
|
|
53
|
+
*/
|
|
54
|
+
export declare function keyModeLine(status?: KeyModeStatus): string | null;
|
|
55
|
+
//# sourceMappingURL=hostedAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostedAuth.d.ts","sourceRoot":"","sources":["../../src/core/hostedAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAC9D,eAAO,MAAM,qBAAqB,mCAAmC,CAAC;AAWtE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AASD,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AA+BD,0EAA0E;AAC1E,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAGvD;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAG7D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,aAAa,CAa9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAE,aAAgC,GAAG,MAAM,GAAG,IAAI,CAanF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hosted-key access — the CLIENT side of "optional sign-in unlocks hosted keys,
|
|
3
|
+
* or bring your own." Keys NEVER ship in this client (Project Glasswing); they
|
|
4
|
+
* live only in the ero.solar AWS backend, exactly like the Tavily search proxy
|
|
5
|
+
* already does (see src/tools/webTools.ts). Sign-in mints a short-lived token;
|
|
6
|
+
* the proxies validate it and use the operator keys.
|
|
7
|
+
*
|
|
8
|
+
* ── CONTRACT (the ero.solar backend implements this; this file codes against it) ──
|
|
9
|
+
* Sign-in (loopback OAuth, increment 2):
|
|
10
|
+
* open https://ero.solar/cli/login?port=<loopbackPort>&state=<csrf>
|
|
11
|
+
* → Google SSO → 302 http://127.0.0.1:<port>/cb?token=<jwt>&email=<e>&state=<csrf>
|
|
12
|
+
* DeepSeek (hosted): POST {HOSTED_DEEPSEEK_PROXY} header `Authorization: Bearer <token>`
|
|
13
|
+
* Tavily (hosted): the existing tavilySearch proxy, same Bearer token
|
|
14
|
+
* The token is short-lived and server-validated; if it 401s the CLI drops to
|
|
15
|
+
* "signed out" and asks the user to /login again or use their own key.
|
|
16
|
+
*
|
|
17
|
+
* THIS MODULE is state + resolution only (increment 1, fully testable). The live
|
|
18
|
+
* sign-in flow and the provider→proxy wiring are increment 2 (backend-gated).
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, rmSync } from 'node:fs';
|
|
21
|
+
import { homedir } from 'node:os';
|
|
22
|
+
import { join, resolve } from 'node:path';
|
|
23
|
+
import { getSecretValue } from './secretStore.js';
|
|
24
|
+
// Contract endpoints (the backend the user is building must match these).
|
|
25
|
+
export const HOSTED_LOGIN_URL = 'https://ero.solar/cli/login';
|
|
26
|
+
export const HOSTED_DEEPSEEK_PROXY = 'https://ero.solar/api/deepseek';
|
|
27
|
+
// Resolved per call (not captured at module load) so EROSOLAR_HOME changes —
|
|
28
|
+
// and tests pointing at a temp dir — take effect.
|
|
29
|
+
function homeDir() {
|
|
30
|
+
return process.env['EROSOLAR_HOME'] ? resolve(process.env['EROSOLAR_HOME']) : join(homedir(), '.erosolar');
|
|
31
|
+
}
|
|
32
|
+
function sessionFile() {
|
|
33
|
+
return join(homeDir(), 'session.json');
|
|
34
|
+
}
|
|
35
|
+
function readFile() {
|
|
36
|
+
// Read the on-disk session first (the future /login writes it; it also holds
|
|
37
|
+
// the own/hosted preference), then let env override the token+email — env
|
|
38
|
+
// lets tests/CI inject a session without touching disk, while still honouring
|
|
39
|
+
// a stored preference.
|
|
40
|
+
let data = {};
|
|
41
|
+
const file = sessionFile();
|
|
42
|
+
if (existsSync(file)) {
|
|
43
|
+
try {
|
|
44
|
+
const parsed = JSON.parse(readFileSync(file, 'utf8'));
|
|
45
|
+
if (parsed && typeof parsed === 'object')
|
|
46
|
+
data = parsed;
|
|
47
|
+
}
|
|
48
|
+
catch { /* corrupt → treat as empty */ }
|
|
49
|
+
}
|
|
50
|
+
const envToken = process.env['EROSOLAR_HOSTED_TOKEN']?.trim();
|
|
51
|
+
if (envToken) {
|
|
52
|
+
data.token = envToken;
|
|
53
|
+
data.email = process.env['EROSOLAR_HOSTED_EMAIL']?.trim() || 'you@hosted';
|
|
54
|
+
}
|
|
55
|
+
return data;
|
|
56
|
+
}
|
|
57
|
+
function writeFile(data) {
|
|
58
|
+
const file = sessionFile();
|
|
59
|
+
mkdirSync(homeDir(), { recursive: true, mode: 0o700 });
|
|
60
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
61
|
+
writeFileSync(tmp, JSON.stringify(data, null, 2) + '\n', { mode: 0o600 });
|
|
62
|
+
renameSync(tmp, file);
|
|
63
|
+
}
|
|
64
|
+
/** The active hosted session (token + email), or null when signed out. */
|
|
65
|
+
export function getHostedSession() {
|
|
66
|
+
const f = readFile();
|
|
67
|
+
return f.token ? { token: f.token, email: f.email || 'you@hosted' } : null;
|
|
68
|
+
}
|
|
69
|
+
/** Persist a hosted session (called by /login once the backend returns a token). */
|
|
70
|
+
export function setHostedSession(session) {
|
|
71
|
+
const f = readFile();
|
|
72
|
+
writeFile({ ...f, token: session.token, email: session.email });
|
|
73
|
+
}
|
|
74
|
+
/** Sign out: drop the token but keep the own/hosted preference. */
|
|
75
|
+
export function clearHostedSession() {
|
|
76
|
+
const f = readFile();
|
|
77
|
+
delete f.token;
|
|
78
|
+
delete f.email;
|
|
79
|
+
if (Object.keys(f).length === 0) {
|
|
80
|
+
try {
|
|
81
|
+
rmSync(sessionFile(), { force: true });
|
|
82
|
+
}
|
|
83
|
+
catch { /* ignore */ }
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
writeFile(f);
|
|
87
|
+
}
|
|
88
|
+
export function prefersOwnKeys() {
|
|
89
|
+
return readFile().preferOwnKeys === true;
|
|
90
|
+
}
|
|
91
|
+
export function setPreferOwnKeys(value) {
|
|
92
|
+
writeFile({ ...readFile(), preferOwnKeys: value });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolve which keys are in effect. Preference order: an explicit "use my own
|
|
96
|
+
* keys" wins when the user actually has a DeepSeek key; otherwise a hosted
|
|
97
|
+
* session is used; otherwise the user's own key; otherwise nothing is set up.
|
|
98
|
+
*/
|
|
99
|
+
export function resolveKeyMode() {
|
|
100
|
+
const session = getHostedSession();
|
|
101
|
+
const ownDeepSeek = Boolean(getSecretValue('DEEPSEEK_API_KEY'));
|
|
102
|
+
const ownTavily = Boolean(getSecretValue('TAVILY_API_KEY'));
|
|
103
|
+
const preferOwnKeys = prefersOwnKeys();
|
|
104
|
+
let mode;
|
|
105
|
+
if (preferOwnKeys && ownDeepSeek)
|
|
106
|
+
mode = 'own';
|
|
107
|
+
else if (session)
|
|
108
|
+
mode = 'hosted';
|
|
109
|
+
else if (ownDeepSeek)
|
|
110
|
+
mode = 'own';
|
|
111
|
+
else
|
|
112
|
+
mode = 'none';
|
|
113
|
+
return { mode, email: session?.email ?? null, signedIn: Boolean(session), ownDeepSeek, ownTavily, preferOwnKeys };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The dim welcome/banner line that makes the active key source unmistakable —
|
|
117
|
+
* the user must be able to see at a glance whether they're on hosted keys or
|
|
118
|
+
* their own. Returns null in 'none' mode (the welcome already shows key setup).
|
|
119
|
+
*/
|
|
120
|
+
export function keyModeLine(status = resolveKeyMode()) {
|
|
121
|
+
switch (status.mode) {
|
|
122
|
+
case 'hosted':
|
|
123
|
+
return `Signed in as ${status.email} · using hosted keys` +
|
|
124
|
+
(status.ownDeepSeek ? ' · /account to use your own' : '');
|
|
125
|
+
case 'own': {
|
|
126
|
+
const tav = status.ownTavily ? 'Tavily ✓' : 'Tavily (shared proxy)';
|
|
127
|
+
const base = `Using your own keys · DeepSeek ✓ · ${tav}`;
|
|
128
|
+
return status.signedIn ? `${base} · /account to use hosted` : base;
|
|
129
|
+
}
|
|
130
|
+
default:
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=hostedAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostedAuth.js","sourceRoot":"","sources":["../../src/core/hostedAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,17 @@ export declare function getSecretValue(id: SecretName): string | null;
|
|
|
24
24
|
*/
|
|
25
25
|
export declare function loadAllSecrets(): void;
|
|
26
26
|
export declare function setSecretValue(id: SecretName, rawValue: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Route a raw `/key` argument to the secret it sets, by prefix or explicit
|
|
29
|
+
* provider word. DeepSeek keys are `sk-…`, Tavily keys are `tvly-…`, so a bare
|
|
30
|
+
* key self-identifies; `/key tavily <k>` / `/key deepseek <k>` force it. Bare
|
|
31
|
+
* keys with no known prefix default to DeepSeek (back-compat — that was the
|
|
32
|
+
* only key `/key` ever set). Returns null for an empty/blank argument.
|
|
33
|
+
*/
|
|
34
|
+
export declare function classifyKeyEntry(raw: string): {
|
|
35
|
+
id: SecretName;
|
|
36
|
+
value: string;
|
|
37
|
+
} | null;
|
|
27
38
|
export declare function maskSecret(value: string): string;
|
|
28
39
|
export declare function ensureSecretForProvider(provider: ProviderId): string;
|
|
29
40
|
export declare function getSecretDefinitionForProvider(provider: ProviderId): SecretDefinition | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secretStore.d.ts","sourceRoot":"","sources":["../../src/core/secretStore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AA2BD,qBAAa,kBAAmB,SAAQ,KAAK;aACf,MAAM,EAAE,gBAAgB;gBAAxB,MAAM,EAAE,gBAAgB;CAIrD;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAE3E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAkB5D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAYrC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAUrE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAQpE;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAE5F;AAmED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA4B5D;AAoCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAQlD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQvD"}
|
|
1
|
+
{"version":3,"file":"secretStore.d.ts","sourceRoot":"","sources":["../../src/core/secretStore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AA2BD,qBAAa,kBAAmB,SAAQ,KAAK;aACf,MAAM,EAAE,gBAAgB;gBAAxB,MAAM,EAAE,gBAAgB;CAIrD;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAE3E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAkB5D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAYrC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAUrE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAetF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAQpE;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAE5F;AAmED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA4B5D;AAoCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAQlD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQvD"}
|
package/dist/core/secretStore.js
CHANGED
|
@@ -82,6 +82,31 @@ export function setSecretValue(id, rawValue) {
|
|
|
82
82
|
writeSecretStore(store);
|
|
83
83
|
process.env[id] = value;
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Route a raw `/key` argument to the secret it sets, by prefix or explicit
|
|
87
|
+
* provider word. DeepSeek keys are `sk-…`, Tavily keys are `tvly-…`, so a bare
|
|
88
|
+
* key self-identifies; `/key tavily <k>` / `/key deepseek <k>` force it. Bare
|
|
89
|
+
* keys with no known prefix default to DeepSeek (back-compat — that was the
|
|
90
|
+
* only key `/key` ever set). Returns null for an empty/blank argument.
|
|
91
|
+
*/
|
|
92
|
+
export function classifyKeyEntry(raw) {
|
|
93
|
+
const trimmed = (raw || '').trim();
|
|
94
|
+
if (!trimmed)
|
|
95
|
+
return null;
|
|
96
|
+
const parts = trimmed.split(/\s+/);
|
|
97
|
+
const lead = (parts[0] || '').toLowerCase();
|
|
98
|
+
if (lead === 'tavily' || lead === 'tvly' || lead === 'search') {
|
|
99
|
+
const value = parts.slice(1).join(' ').trim();
|
|
100
|
+
return value ? { id: 'TAVILY_API_KEY', value } : null;
|
|
101
|
+
}
|
|
102
|
+
if (lead === 'deepseek' || lead === 'ds') {
|
|
103
|
+
const value = parts.slice(1).join(' ').trim();
|
|
104
|
+
return value ? { id: 'DEEPSEEK_API_KEY', value } : null;
|
|
105
|
+
}
|
|
106
|
+
if (/^tvly-/i.test(trimmed))
|
|
107
|
+
return { id: 'TAVILY_API_KEY', value: trimmed };
|
|
108
|
+
return { id: 'DEEPSEEK_API_KEY', value: trimmed };
|
|
109
|
+
}
|
|
85
110
|
export function maskSecret(value) {
|
|
86
111
|
if (!value) {
|
|
87
112
|
return '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secretStore.js","sourceRoot":"","sources":["../../src/core/secretStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBnD,MAAM,kBAAkB,GAAuB;IAC7C;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,mDAAmD;QAChE,MAAM,EAAE,kBAAkB;QAC1B,SAAS,EAAE,CAAC,UAAU,CAAC;KACxB;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,8EAA8E;QAC3F,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,EAAE;KACd;CACF,CAAC;AAEF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACnF,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAErD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACf;IAA5B,YAA4B,MAAwB;QAClD,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,qBAAqB,CAAC,CAAC;QADlB,WAAM,GAAN,MAAM,CAAkB;QAElD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAc;IAChD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAc;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,oEAAoE;QACpE,wEAAwE;QACxE,yEAAyE;QACzE,+DAA+D;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;IAC9B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,WAAW,EAAE,CAAC;YAChB,2EAA2E;YAC3E,+CAA+C;YAC/C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;QAC3C,CAAC;QACD,0EAA0E;QAC1E,yDAAyD;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAc,EAAE,QAAgB;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IAClB,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAoB;IAC1D,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,QAAoB;IACjE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;AACxF,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,MAAyB,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAsB;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,oEAAoE;IACpE,sEAAsE;IACtE,6DAA6D;IAC7D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,mEAAmE;IACnE,kEAAkE;IAClE,mEAAmE;IACnE,MAAM,GAAG,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IAC9D,aAAa,CAAC,GAAG,EAAE,GAAG,OAAO;CAC9B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClB,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAoB;IACrD,MAAM,UAAU,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,gBAAgB,GAAa;IACjC,gCAAgC;IAChC,wCAAwC;IACxC,+EAA+E;IAC/E,oBAAoB;IACpB,kGAAkG;CACnG,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,SAAS,GAAG,OAAO,CAAC;IAExB,6BAA6B;IAC7B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,sCAAsC;QACtC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/C,4DAA4D;YAC5D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,YAAY,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,SAAS,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAEpD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,4BAA4B,CAAC,OAAe;IACnD,MAAM,WAAW,GAAiB;QAChC,kBAAkB;QAClB,gBAAgB;KACjB,CAAC;IAEF,IAAI,SAAS,GAAG,OAAO,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/B,oDAAoD;YACpD,4DAA4D;YAC5D,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxD,CAAC;YAED,uEAAuE;YACvE,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACvB,MAAM,cAAc,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBACzF,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACvC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,GAAG,OAAO,KAAK,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"secretStore.js","sourceRoot":"","sources":["../../src/core/secretStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["../../src/core/slashCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["../../src/core/slashCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAajD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9E;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,EAAE,CAa7E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIpH"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
export const SLASH_COMMANDS = [
|
|
15
15
|
{ command: '/key', description: 'Set your DeepSeek API key' },
|
|
16
|
+
{ command: '/account', description: 'Show / switch key source (hosted vs your own)' },
|
|
16
17
|
{ command: '/clear', description: 'Clear the screen and conversation' },
|
|
17
18
|
{ command: '/resume', description: 'Restore a saved conversation' },
|
|
18
19
|
{ command: '/context', description: 'Show context-window usage' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommands.js","sourceRoot":"","sources":["../../src/core/slashCommands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slashCommands.js","sourceRoot":"","sources":["../../src/core/slashCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rotating "thinking" gerunds for the working spinner — Claude Code parity
|
|
3
|
+
* (see src/ui/CLAUDE_CODE_UX.md §4: "a rotating gerund ('Thinking',
|
|
4
|
+
* 'Synthesizing', 'Forging', 'Puzzling', 'Conjuring', 'Noodling')"). When the
|
|
5
|
+
* agent is working without a specific tool activity, the host parks the
|
|
6
|
+
* canonical generic label on the spinner and the renderer swaps it for a
|
|
7
|
+
* whimsical gerund that rotates over time, instead of a static "Thinking…".
|
|
8
|
+
*
|
|
9
|
+
* Pure module: no side effects, no imports. The renderer rotates by calling
|
|
10
|
+
* pickThinkingVerb(); tests seed the rng for determinism.
|
|
11
|
+
*/
|
|
12
|
+
export declare const THINKING_VERBS: readonly string[];
|
|
13
|
+
/**
|
|
14
|
+
* Canonical generic-thinking label. The host sets this (or one of the legacy
|
|
15
|
+
* "Thinking…" / "Thinking..." variants) on the spinner when the agent is busy
|
|
16
|
+
* without a named tool activity; the renderer treats it as a sentinel and shows
|
|
17
|
+
* a rotating gerund instead. Never displayed verbatim while spinning.
|
|
18
|
+
*/
|
|
19
|
+
export declare const GENERIC_THINKING_LABEL = "Thinking";
|
|
20
|
+
/** True when `message` is a generic-thinking sentinel (any historical spelling). */
|
|
21
|
+
export declare function isGenericThinking(message: string | null | undefined): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Pick a thinking gerund. Pass `exclude` (the current verb) so a rotation
|
|
24
|
+
* always lands on a different word; pass `rng` to make the choice deterministic
|
|
25
|
+
* in tests.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pickThinkingVerb(opts?: {
|
|
28
|
+
rng?: () => number;
|
|
29
|
+
exclude?: string;
|
|
30
|
+
}): string;
|
|
31
|
+
//# sourceMappingURL=thinkingVerbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinkingVerbs.d.ts","sourceRoot":"","sources":["../../src/core/thinkingVerbs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAqB1C,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,aAAa,CAAC;AAIjD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAM5F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rotating "thinking" gerunds for the working spinner — Claude Code parity
|
|
3
|
+
* (see src/ui/CLAUDE_CODE_UX.md §4: "a rotating gerund ('Thinking',
|
|
4
|
+
* 'Synthesizing', 'Forging', 'Puzzling', 'Conjuring', 'Noodling')"). When the
|
|
5
|
+
* agent is working without a specific tool activity, the host parks the
|
|
6
|
+
* canonical generic label on the spinner and the renderer swaps it for a
|
|
7
|
+
* whimsical gerund that rotates over time, instead of a static "Thinking…".
|
|
8
|
+
*
|
|
9
|
+
* Pure module: no side effects, no imports. The renderer rotates by calling
|
|
10
|
+
* pickThinkingVerb(); tests seed the rng for determinism.
|
|
11
|
+
*/
|
|
12
|
+
export const THINKING_VERBS = Object.freeze([
|
|
13
|
+
'Thinking',
|
|
14
|
+
'Synthesizing',
|
|
15
|
+
'Forging',
|
|
16
|
+
'Puzzling',
|
|
17
|
+
'Conjuring',
|
|
18
|
+
'Noodling',
|
|
19
|
+
'Pondering',
|
|
20
|
+
'Brewing',
|
|
21
|
+
'Cooking',
|
|
22
|
+
'Churning',
|
|
23
|
+
'Crafting',
|
|
24
|
+
'Computing',
|
|
25
|
+
'Cerebrating',
|
|
26
|
+
'Simmering',
|
|
27
|
+
'Percolating',
|
|
28
|
+
'Ruminating',
|
|
29
|
+
'Wrangling',
|
|
30
|
+
'Tinkering',
|
|
31
|
+
'Marinating',
|
|
32
|
+
'Spelunking',
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Canonical generic-thinking label. The host sets this (or one of the legacy
|
|
36
|
+
* "Thinking…" / "Thinking..." variants) on the spinner when the agent is busy
|
|
37
|
+
* without a named tool activity; the renderer treats it as a sentinel and shows
|
|
38
|
+
* a rotating gerund instead. Never displayed verbatim while spinning.
|
|
39
|
+
*/
|
|
40
|
+
export const GENERIC_THINKING_LABEL = 'Thinking';
|
|
41
|
+
const GENERIC_VARIANTS = new Set(['Thinking', 'Thinking…', 'Thinking...']);
|
|
42
|
+
/** True when `message` is a generic-thinking sentinel (any historical spelling). */
|
|
43
|
+
export function isGenericThinking(message) {
|
|
44
|
+
return message != null && GENERIC_VARIANTS.has(message.trim());
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Pick a thinking gerund. Pass `exclude` (the current verb) so a rotation
|
|
48
|
+
* always lands on a different word; pass `rng` to make the choice deterministic
|
|
49
|
+
* in tests.
|
|
50
|
+
*/
|
|
51
|
+
export function pickThinkingVerb(opts = {}) {
|
|
52
|
+
const rng = opts.rng ?? Math.random;
|
|
53
|
+
const pool = opts.exclude ? THINKING_VERBS.filter((v) => v !== opts.exclude) : THINKING_VERBS;
|
|
54
|
+
const list = pool.length ? pool : THINKING_VERBS;
|
|
55
|
+
const idx = Math.abs(Math.floor(rng() * list.length)) % list.length;
|
|
56
|
+
return list[idx];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=thinkingVerbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinkingVerbs.js","sourceRoot":"","sources":["../../src/core/thinkingVerbs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAsB,MAAM,CAAC,MAAM,CAAC;IAC7D,UAAU;IACV,cAAc;IACd,SAAS;IACT,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;IACX,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,aAAa;IACb,WAAW;IACX,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;CACb,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAEjD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAE3E,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,OAAkC;IAClE,OAAO,OAAO,IAAI,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAiD,EAAE;IAClF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;IAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACpE,OAAO,IAAI,CAAC,GAAG,CAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn governor — a bounded, stall-aware spine for the auto-continue loop.
|
|
3
|
+
*
|
|
4
|
+
* The auto-continue loop (interactiveShell processPrompt → processPrompt
|
|
5
|
+
* recursion) was UNBOUNDED: an agent that couldn't satisfy the completion
|
|
6
|
+
* heuristic ran forever, re-trying dead ends with no escalation. This caps the
|
|
7
|
+
* turns per user request and detects a stall (the same observable work
|
|
8
|
+
* repeating with no new progress), so the loop yields to the user WITH state
|
|
9
|
+
* instead of thrashing for hours. It also derives the next continuation from
|
|
10
|
+
* the agent's live TODO plan (which the loop previously ignored).
|
|
11
|
+
*
|
|
12
|
+
* Pure + dependency-free so it's unit-testable; the shell instantiates one per
|
|
13
|
+
* user request, resets on a fresh prompt, calls recordTurn() each auto-continue,
|
|
14
|
+
* and breaks on check().stop.
|
|
15
|
+
*/
|
|
16
|
+
export interface TurnMetrics {
|
|
17
|
+
/** tools invoked during the turn */
|
|
18
|
+
toolsUsed: string[];
|
|
19
|
+
/** files written/edited during the turn */
|
|
20
|
+
filesModified: string[];
|
|
21
|
+
/** failing test/build signal in the turn output, or null */
|
|
22
|
+
failingSignal: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface GovernorVerdict {
|
|
25
|
+
stop: boolean;
|
|
26
|
+
reason: 'limit' | 'stall' | null;
|
|
27
|
+
turn: number;
|
|
28
|
+
}
|
|
29
|
+
/** Stable signature of a turn's observable work — the same signature repeating means no progress. */
|
|
30
|
+
export declare function fingerprintTurn(m: TurnMetrics): string;
|
|
31
|
+
export declare class TurnGovernor {
|
|
32
|
+
private turn;
|
|
33
|
+
private fps;
|
|
34
|
+
private readonly max;
|
|
35
|
+
private readonly stallWindow;
|
|
36
|
+
constructor(opts?: {
|
|
37
|
+
maxAutoTurns?: number;
|
|
38
|
+
stallWindow?: number;
|
|
39
|
+
});
|
|
40
|
+
/** A new user request starts a fresh turn budget. */
|
|
41
|
+
reset(): void;
|
|
42
|
+
/** Record one completed auto-continue turn. */
|
|
43
|
+
recordTurn(m: TurnMetrics): void;
|
|
44
|
+
/** Whether the auto-continue loop should stop now, and why. */
|
|
45
|
+
check(): GovernorVerdict;
|
|
46
|
+
get turnCount(): number;
|
|
47
|
+
get maxTurns(): number;
|
|
48
|
+
}
|
|
49
|
+
export interface TodoLike {
|
|
50
|
+
content?: string;
|
|
51
|
+
status?: string;
|
|
52
|
+
activeForm?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Todos still to do (pending or in-progress). */
|
|
55
|
+
export declare function pendingTodos(todos: ReadonlyArray<TodoLike> | null | undefined): TodoLike[];
|
|
56
|
+
/**
|
|
57
|
+
* The next auto-continue prompt derived from the plan — the in-progress item
|
|
58
|
+
* (or first pending). Prefixed IMPORTANT: so the loop treats it as an
|
|
59
|
+
* auto-continue (not a fresh user request) and the no-docs guard holds.
|
|
60
|
+
* Returns null when the plan has no pending work.
|
|
61
|
+
*/
|
|
62
|
+
export declare function nextTodoPrompt(todos: ReadonlyArray<TodoLike> | null | undefined): string | null;
|
|
63
|
+
//# sourceMappingURL=turnGovernor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turnGovernor.d.ts","sourceRoot":"","sources":["../../src/core/turnGovernor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAItD;AASD,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAKtE,qDAAqD;IACrD,KAAK,IAAI,IAAI;IAKb,+CAA+C;IAC/C,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAMhC,+DAA+D;IAC/D,KAAK,IAAI,eAAe;IAiBxB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAKD,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,EAAE,CAE1F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO/F"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn governor — a bounded, stall-aware spine for the auto-continue loop.
|
|
3
|
+
*
|
|
4
|
+
* The auto-continue loop (interactiveShell processPrompt → processPrompt
|
|
5
|
+
* recursion) was UNBOUNDED: an agent that couldn't satisfy the completion
|
|
6
|
+
* heuristic ran forever, re-trying dead ends with no escalation. This caps the
|
|
7
|
+
* turns per user request and detects a stall (the same observable work
|
|
8
|
+
* repeating with no new progress), so the loop yields to the user WITH state
|
|
9
|
+
* instead of thrashing for hours. It also derives the next continuation from
|
|
10
|
+
* the agent's live TODO plan (which the loop previously ignored).
|
|
11
|
+
*
|
|
12
|
+
* Pure + dependency-free so it's unit-testable; the shell instantiates one per
|
|
13
|
+
* user request, resets on a fresh prompt, calls recordTurn() each auto-continue,
|
|
14
|
+
* and breaks on check().stop.
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_MAX_AUTO_TURNS = 25;
|
|
17
|
+
const STALL_WINDOW = 3;
|
|
18
|
+
/** Stable signature of a turn's observable work — the same signature repeating means no progress. */
|
|
19
|
+
export function fingerprintTurn(m) {
|
|
20
|
+
const tools = [...(m.toolsUsed ?? [])].map((t) => t.toLowerCase()).sort().join(',');
|
|
21
|
+
const files = [...(m.filesModified ?? [])].sort().join(',');
|
|
22
|
+
return `${tools}|${files}|${m.failingSignal ?? ''}`;
|
|
23
|
+
}
|
|
24
|
+
function maxFromEnv() {
|
|
25
|
+
const raw = process.env['EROSOLAR_MAX_AUTO_TURNS'];
|
|
26
|
+
if (!raw)
|
|
27
|
+
return null;
|
|
28
|
+
const n = parseInt(raw, 10);
|
|
29
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
30
|
+
}
|
|
31
|
+
export class TurnGovernor {
|
|
32
|
+
turn = 0;
|
|
33
|
+
fps = [];
|
|
34
|
+
max;
|
|
35
|
+
stallWindow;
|
|
36
|
+
constructor(opts = {}) {
|
|
37
|
+
this.max = opts.maxAutoTurns ?? maxFromEnv() ?? DEFAULT_MAX_AUTO_TURNS;
|
|
38
|
+
this.stallWindow = Math.max(2, opts.stallWindow ?? STALL_WINDOW);
|
|
39
|
+
}
|
|
40
|
+
/** A new user request starts a fresh turn budget. */
|
|
41
|
+
reset() {
|
|
42
|
+
this.turn = 0;
|
|
43
|
+
this.fps = [];
|
|
44
|
+
}
|
|
45
|
+
/** Record one completed auto-continue turn. */
|
|
46
|
+
recordTurn(m) {
|
|
47
|
+
this.turn += 1;
|
|
48
|
+
this.fps.push(fingerprintTurn(m));
|
|
49
|
+
if (this.fps.length > this.stallWindow)
|
|
50
|
+
this.fps.shift();
|
|
51
|
+
}
|
|
52
|
+
/** Whether the auto-continue loop should stop now, and why. */
|
|
53
|
+
check() {
|
|
54
|
+
if (this.turn >= this.max) {
|
|
55
|
+
return { stop: true, reason: 'limit', turn: this.turn };
|
|
56
|
+
}
|
|
57
|
+
// Stall: the last `stallWindow` turns did the exact same observable work
|
|
58
|
+
// (same tools, files, failing signal) — the agent is repeating itself with
|
|
59
|
+
// no new progress (including doing nothing at all), so stop rather than
|
|
60
|
+
// burn turns up to the limit.
|
|
61
|
+
if (this.fps.length >= this.stallWindow &&
|
|
62
|
+
this.fps.every((f) => f === this.fps[0])) {
|
|
63
|
+
return { stop: true, reason: 'stall', turn: this.turn };
|
|
64
|
+
}
|
|
65
|
+
return { stop: false, reason: null, turn: this.turn };
|
|
66
|
+
}
|
|
67
|
+
get turnCount() {
|
|
68
|
+
return this.turn;
|
|
69
|
+
}
|
|
70
|
+
get maxTurns() {
|
|
71
|
+
return this.max;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Todos still to do (pending or in-progress). */
|
|
75
|
+
export function pendingTodos(todos) {
|
|
76
|
+
return (todos ?? []).filter((t) => t && (t.status === 'pending' || t.status === 'in_progress'));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The next auto-continue prompt derived from the plan — the in-progress item
|
|
80
|
+
* (or first pending). Prefixed IMPORTANT: so the loop treats it as an
|
|
81
|
+
* auto-continue (not a fresh user request) and the no-docs guard holds.
|
|
82
|
+
* Returns null when the plan has no pending work.
|
|
83
|
+
*/
|
|
84
|
+
export function nextTodoPrompt(todos) {
|
|
85
|
+
const p = pendingTodos(todos);
|
|
86
|
+
if (!p.length)
|
|
87
|
+
return null;
|
|
88
|
+
const next = p.find((t) => t.status === 'in_progress') ?? p[0];
|
|
89
|
+
const content = (next?.content ?? '').trim();
|
|
90
|
+
if (!content)
|
|
91
|
+
return null;
|
|
92
|
+
return `IMPORTANT: Do NOT create docs/markdown/summaries. Continue the plan — the next task is: ${content}. Complete it, then update the todo list (mark it completed and the next one in_progress).`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=turnGovernor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turnGovernor.js","sourceRoot":"","sources":["../../src/core/turnGovernor.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,10 @@ export interface WelcomeLineInput {
|
|
|
22
22
|
provider: string;
|
|
23
23
|
updateLines?: string[];
|
|
24
24
|
cwd?: string;
|
|
25
|
+
/** Active key source — makes hosted-vs-own unmistakable. Defaults from hasApiKey. */
|
|
26
|
+
keyMode?: 'hosted' | 'own' | 'none';
|
|
27
|
+
/** Dim status line for the active key source (hosted/own). */
|
|
28
|
+
keyModeLine?: string | null;
|
|
25
29
|
}
|
|
26
30
|
/**
|
|
27
31
|
* Compose the lines shown when the interactive shell opens. Deliberately NOT a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/headless/interactiveShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/headless/interactiveShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmKH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACpC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAgDD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDzF"}
|