kumo-cli 1.2.4 → 1.3.1
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/README.md +4 -5
- package/dist/auth/credentialsStore.js +8 -6
- package/dist/auth/credentialsStore.js.map +1 -1
- package/dist/claude/conversation.js +26 -2
- package/dist/claude/conversation.js.map +1 -1
- package/dist/claude/goal.js +100 -0
- package/dist/claude/goal.js.map +1 -0
- package/dist/claude/sessionTasks.js +112 -0
- package/dist/claude/sessionTasks.js.map +1 -0
- package/dist/claude/transcriptParser.js +11 -0
- package/dist/claude/transcriptParser.js.map +1 -1
- package/dist/core/config.js +3 -2
- package/dist/core/config.js.map +1 -1
- package/dist/engine/claudeArgs.js +5 -0
- package/dist/engine/claudeArgs.js.map +1 -1
- package/dist/engine/claudeBinary.js +79 -27
- package/dist/engine/claudeBinary.js.map +1 -1
- package/dist/engine/claudeConfig.js +23 -9
- package/dist/engine/claudeConfig.js.map +1 -1
- package/dist/engine/designLogin.js +112 -0
- package/dist/engine/designLogin.js.map +1 -0
- package/dist/engine/liveTranscript.js +27 -4
- package/dist/engine/liveTranscript.js.map +1 -1
- package/dist/engine/notices.js +53 -0
- package/dist/engine/notices.js.map +1 -0
- package/dist/engine/sessionManager.js +50 -1
- package/dist/engine/sessionManager.js.map +1 -1
- package/dist/engine/settingsCommands.js +24 -0
- package/dist/engine/settingsCommands.js.map +1 -1
- package/dist/engine/streamSession.js +99 -6
- package/dist/engine/streamSession.js.map +1 -1
- package/dist/engine/taskTracker.js +87 -13
- package/dist/engine/taskTracker.js.map +1 -1
- package/dist/engine/toolLabels.js +5 -0
- package/dist/engine/toolLabels.js.map +1 -1
- package/dist/handlers/runtimeHandlers.js +23 -1
- package/dist/handlers/runtimeHandlers.js.map +1 -1
- package/dist/handlers/sessionHandlers.js +7 -1
- package/dist/handlers/sessionHandlers.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/services/bootstrapService.js +1 -1
- package/dist/services/bootstrapService.js.map +1 -1
- package/dist/services/cliRuntime.js +14 -0
- package/dist/services/cliRuntime.js.map +1 -1
- package/dist/services/sessionService.js +27 -4
- package/dist/services/sessionService.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
1
|
+
import { execFileSync, execSync } from 'node:child_process';
|
|
2
2
|
import fs from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
import { log } from '../core/logger.js';
|
|
5
6
|
const CLAUDE_PACKAGE = '@anthropic-ai/claude-code';
|
|
7
|
+
// oldest claude with every flag and subcommand kumo relies on
|
|
8
|
+
const MIN_CLAUDE_VERSION = '2.1.268';
|
|
6
9
|
const NATIVE_EXE = ['node_modules', '@anthropic-ai', 'claude-code', 'bin', 'claude.exe'];
|
|
10
|
+
// launcher of the official native installer; right after an install the running process's PATH lacks it
|
|
11
|
+
const NATIVE_LAUNCHER = path.join(os.homedir(), '.local', 'bin', process.platform === 'win32' ? 'claude.exe' : 'claude');
|
|
12
|
+
// the official native installer first, npm when it fails (no curl/bash, claude.ai blocked...)
|
|
13
|
+
const INSTALLERS = [
|
|
14
|
+
process.platform === 'win32'
|
|
15
|
+
? 'powershell -NoProfile -Command "irm https://claude.ai/install.ps1 | iex"'
|
|
16
|
+
: 'curl -fsSL https://claude.ai/install.sh | bash',
|
|
17
|
+
`npm install -g --allow-scripts=${CLAUDE_PACKAGE} ${CLAUDE_PACKAGE}`,
|
|
18
|
+
];
|
|
7
19
|
let cached = null;
|
|
8
20
|
function lookup(command) {
|
|
9
21
|
try {
|
|
@@ -43,39 +55,79 @@ function findOnPosix() {
|
|
|
43
55
|
return found ? { cmd: found, shell: false } : null;
|
|
44
56
|
}
|
|
45
57
|
function find() {
|
|
46
|
-
return process.platform === 'win32' ? findOnWindows() : findOnPosix()
|
|
58
|
+
return (process.platform === 'win32' ? findOnWindows() : findOnPosix())
|
|
59
|
+
?? (fs.existsSync(NATIVE_LAUNCHER) ? { cmd: NATIVE_LAUNCHER, shell: false } : null);
|
|
47
60
|
}
|
|
48
|
-
// install
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
// install claude code when it is missing from the host machine, trying each installer in turn
|
|
62
|
+
function install() {
|
|
63
|
+
for (const command of INSTALLERS) {
|
|
64
|
+
console.log(`[kumo-cli] claude cli not found, installing it: ${command}`);
|
|
65
|
+
try {
|
|
66
|
+
execSync(command, { stdio: 'inherit' });
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
log(`[claude-bin] install failed: ${error}`);
|
|
70
|
+
}
|
|
71
|
+
const found = find();
|
|
72
|
+
if (found)
|
|
73
|
+
return found;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
52
76
|
}
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
function remember(command) {
|
|
78
|
+
log(`[claude-bin] using ${command.cmd} (shell=${command.shell})`);
|
|
79
|
+
return cached = command;
|
|
80
|
+
}
|
|
81
|
+
// the claude already on this machine, never installing one; KUMO_CLAUDE_BIN overrides discovery
|
|
82
|
+
function locate() {
|
|
55
83
|
if (cached)
|
|
56
84
|
return cached;
|
|
57
85
|
const override = process.env['KUMO_CLAUDE_BIN'];
|
|
58
|
-
|
|
59
|
-
|
|
86
|
+
const found = override ? { cmd: override, shell: process.platform === 'win32' && /\.(cmd|bat)$/i.test(override) } : find();
|
|
87
|
+
return found && remember(found);
|
|
88
|
+
}
|
|
89
|
+
// resolve the claude executable on first use (never at import), installing it when missing
|
|
90
|
+
export function resolveClaudeCommand() {
|
|
91
|
+
const found = locate();
|
|
92
|
+
if (found)
|
|
93
|
+
return found;
|
|
94
|
+
const installed = install();
|
|
95
|
+
// a bare `claude` through cmd.exe would also run one from the current folder
|
|
96
|
+
if (!installed)
|
|
97
|
+
throw new Error('claude cli not found: install claude code (https://code.claude.com/docs/en/setup) or set KUMO_CLAUDE_BIN');
|
|
98
|
+
return remember(installed);
|
|
99
|
+
}
|
|
100
|
+
// compare dotted version numbers part by part, so 2.1.99 is older than 2.1.268
|
|
101
|
+
export function isOlderVersion(version, than) {
|
|
102
|
+
const a = version.split('.').map(Number);
|
|
103
|
+
const b = than.split('.').map(Number);
|
|
104
|
+
for (let i = 0; i < Math.max(a.length, b.length); i++) {
|
|
105
|
+
if ((a[i] ?? 0) !== (b[i] ?? 0))
|
|
106
|
+
return (a[i] ?? 0) < (b[i] ?? 0);
|
|
60
107
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
// warn when the claude already on this machine predates what kumo relies on; a missing one is skipped,
|
|
111
|
+
// since it gets installed at its latest version
|
|
112
|
+
export function warnIfClaudeOutdated() {
|
|
113
|
+
const command = locate();
|
|
114
|
+
if (!command)
|
|
115
|
+
return;
|
|
116
|
+
const options = { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'], timeout: 10_000, windowsHide: true };
|
|
117
|
+
let output;
|
|
118
|
+
try {
|
|
119
|
+
output = command.shell
|
|
120
|
+
? execSync(buildShellCommandLine(command.cmd, ['--version']), options)
|
|
121
|
+
: execFileSync(command.cmd, ['--version'], options);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
log(`[claude-bin] version check failed: ${error}`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const version = /\d+\.\d+\.\d+/.exec(output)?.[0];
|
|
128
|
+
if (version && isOlderVersion(version, MIN_CLAUDE_VERSION)) {
|
|
129
|
+
console.warn(`\x1b[33m[kumo-cli] claude ${version} is too old (kumo needs ${MIN_CLAUDE_VERSION} or later), some features may not work correctly. run \`claude update\` to upgrade\x1b[0m`);
|
|
76
130
|
}
|
|
77
|
-
log(`[claude-bin] using ${cached.cmd} (shell=${cached.shell})`);
|
|
78
|
-
return cached;
|
|
79
131
|
}
|
|
80
132
|
// quote one argument for a cmd.exe command line. inside quotes cmd.exe still ends the quote at `"`,
|
|
81
133
|
// expands %VAR% (and !VAR!) and splits at line breaks, and no escaping is reliable for a .cmd
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeBinary.js","sourceRoot":"","sources":["../../src/engine/claudeBinary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"claudeBinary.js","sourceRoot":"","sources":["../../src/engine/claudeBinary.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,23 +25,24 @@ export function withoutProviderConfig(patch) {
|
|
|
25
25
|
// control requests the app may run through claude_control
|
|
26
26
|
export const CONTROL_WHITELIST = new Set([
|
|
27
27
|
'get_status', 'get_usage', 'get_context_usage', 'get_settings', 'export_conversation', 'side_question',
|
|
28
|
-
'mcp_status', 'mcp_toggle', 'mcp_reconnect', 'list_permission_rules', 'update_settings', 'rewind_files',
|
|
28
|
+
'mcp_status', 'mcp_toggle', 'mcp_reconnect', 'mcp_authenticate', 'mcp_oauth_callback_url', 'list_permission_rules', 'update_settings', 'rewind_files',
|
|
29
29
|
'stop_task', 'cancel_async_message',
|
|
30
30
|
'get_hooks_listing', 'get_sandbox_dialog', 'get_skills_dialog', 'get_memory_dialog', 'reload_plugins', 'reload_skills',
|
|
31
|
+
'get_chrome_dialog', 'get_chrome_browsers', 'select_chrome_browser',
|
|
31
32
|
]);
|
|
32
33
|
const NOT_RUNNING = 'This session is no longer running.';
|
|
33
|
-
// requests about the running process itself, with the reason a stopped session can't answer
|
|
34
|
-
// file checkpoints live in the process that ran the turns, a resumed one has none
|
|
34
|
+
// requests about the running process itself, with the reason a stopped session can't answer
|
|
35
35
|
export const LIVE_ONLY_CONTROLS = new Map([
|
|
36
|
-
['rewind_files', "Code checkpoints only last while this session's Claude process runs, and it has stopped. You can still fork the conversation."],
|
|
37
36
|
['stop_task', NOT_RUNNING],
|
|
38
37
|
['cancel_async_message', NOT_RUNNING],
|
|
39
38
|
]);
|
|
40
|
-
// requests answered from the target session's own context
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
//
|
|
44
|
-
|
|
39
|
+
// requests answered from the target session's own context; file checkpoints stay on disk, so a
|
|
40
|
+
// resumed process rewinds the turns of an earlier one too
|
|
41
|
+
export const SESSION_SCOPED_CONTROLS = new Set(['get_context_usage', 'export_conversation', 'side_question', 'rewind_files']);
|
|
42
|
+
// mcp servers and the chrome connection live in the chat's own process: shown, switched,
|
|
43
|
+
// reconnected and signed in to there (the sign-in waits in that process for its redirect), which is started when it is not running; a throwaway probe would only ever
|
|
44
|
+
// see them connecting
|
|
45
|
+
export const OWN_PROCESS_CONTROLS = new Set(['mcp_status', 'mcp_toggle', 'mcp_reconnect', 'mcp_authenticate', 'mcp_oauth_callback_url', 'get_chrome_dialog', 'get_chrome_browsers', 'select_chrome_browser']);
|
|
45
46
|
// side questions run a model call (5 min like the extension), the rest are quick reads
|
|
46
47
|
export const controlTimeoutMs = (subtype) => (subtype === 'side_question' ? 300_000 : undefined);
|
|
47
48
|
const text = (source, key, max = 4000) => {
|
|
@@ -57,7 +58,10 @@ export function controlPayload(subtype, payload) {
|
|
|
57
58
|
case 'side_question':
|
|
58
59
|
return { question: text(source, 'question') };
|
|
59
60
|
case 'mcp_reconnect':
|
|
61
|
+
case 'mcp_authenticate':
|
|
60
62
|
return { serverName: text(source, 'serverName', 200) };
|
|
63
|
+
case 'mcp_oauth_callback_url':
|
|
64
|
+
return { serverName: text(source, 'serverName', 200), callbackUrl: text(source, 'callbackUrl') };
|
|
61
65
|
case 'mcp_toggle':
|
|
62
66
|
if (typeof source['enabled'] !== 'boolean')
|
|
63
67
|
throw new Error('enabled is required');
|
|
@@ -68,6 +72,8 @@ export function controlPayload(subtype, payload) {
|
|
|
68
72
|
return { message_uuid: text(source, 'uuid', 100) };
|
|
69
73
|
case 'rewind_files':
|
|
70
74
|
return { user_message_id: text(source, 'userMessageId', 100), dry_run: source['dryRun'] === true };
|
|
75
|
+
case 'select_chrome_browser':
|
|
76
|
+
return { device_id: text(source, 'deviceId', 200) };
|
|
71
77
|
case 'update_settings':
|
|
72
78
|
// only the output style may be changed from the app, and only for this project
|
|
73
79
|
return { source: 'localSettings', settings: { outputStyle: text(source, 'outputStyle', 200) } };
|
|
@@ -98,6 +104,9 @@ export function sanitizeControlResponse(subtype, response) {
|
|
|
98
104
|
}),
|
|
99
105
|
})),
|
|
100
106
|
};
|
|
107
|
+
case 'mcp_authenticate':
|
|
108
|
+
// the page to sign in on, and whether claude then waits for the redirect pasted back
|
|
109
|
+
return pick(response, ['authUrl', 'requiresUserAction', 'callbackExpected']);
|
|
101
110
|
case 'list_permission_rules':
|
|
102
111
|
return { rules: list(obj(response['state'])['rules']).map((rule) => pick(rule, ['rule', 'behavior', 'source'])) };
|
|
103
112
|
case 'get_context_usage': {
|
|
@@ -112,6 +121,11 @@ export function sanitizeControlResponse(subtype, response) {
|
|
|
112
121
|
};
|
|
113
122
|
case 'reload_skills':
|
|
114
123
|
return { count: list(response['skills']).length };
|
|
124
|
+
case 'get_chrome_dialog':
|
|
125
|
+
// the extension pages it links open the desktop's chrome, nothing the phone can use
|
|
126
|
+
return pick(response, ['allowed', 'subscriber', 'wsl', 'installed', 'connected', 'enabled_by_default', 'paired_browser']);
|
|
127
|
+
case 'get_chrome_browsers':
|
|
128
|
+
return { browsers: (Array.isArray(response) ? list(response) : list(response['browsers'])).map((b) => pick(b, ['device_id', 'name', 'os_platform', 'current'])) };
|
|
115
129
|
case 'get_usage': {
|
|
116
130
|
const limits = obj(response['rate_limits']);
|
|
117
131
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../src/engine/claudeConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAC3L,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAE7D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACpE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;QACjG,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI;QACzC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5G,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,IAAI;QAC5C,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI;KAC/C,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,yFAAyF;AACzF,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC7F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe;IACtG,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../src/engine/claudeConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createInterface } from 'node:readline';
|
|
3
|
+
import { buildClaudeEnv } from './claudeArgs.js';
|
|
4
|
+
import { buildShellCommandLine, resolveClaudeCommand } from './claudeBinary.js';
|
|
5
|
+
import { killTree } from './processTree.js';
|
|
6
|
+
import { stripAnsi } from './permissions.js';
|
|
7
|
+
// claude gives up on a sign-in after five minutes; this only catches one that never reports back
|
|
8
|
+
const SIGN_IN_TIMEOUT_MS = 6 * 60_000;
|
|
9
|
+
const START_TIMEOUT_MS = 30_000;
|
|
10
|
+
const parse = (line) => {
|
|
11
|
+
try {
|
|
12
|
+
const value = JSON.parse(line);
|
|
13
|
+
return value && typeof value === 'object' ? value : null;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
// Claude Design's own sign-in (design-system access), run like the extension does with
|
|
20
|
+
// `claude design-login --json`: its pages come back to open on the phone, the code the manual
|
|
21
|
+
// page shows goes to its stdin, and it says when it is done. closing its stdin cancels it
|
|
22
|
+
export class DesignLogin {
|
|
23
|
+
options;
|
|
24
|
+
child = null;
|
|
25
|
+
finished = false;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
}
|
|
29
|
+
// start a sign-in, replacing one in progress; resolves with the page that ends on a code
|
|
30
|
+
async start(cwd) {
|
|
31
|
+
this.cancel();
|
|
32
|
+
const { cmd, args, shell } = this.options.command ?? { ...resolveClaudeCommand(), args: ['design-login', '--json'] };
|
|
33
|
+
const spawnOptions = { cwd, env: buildClaudeEnv(process.env), stdio: 'pipe', windowsHide: true };
|
|
34
|
+
const child = shell ? spawn(buildShellCommandLine(cmd, args), { ...spawnOptions, shell: true }) : spawn(cmd, args, spawnOptions);
|
|
35
|
+
this.child = child;
|
|
36
|
+
this.finished = false;
|
|
37
|
+
child.stdin?.on('error', () => { });
|
|
38
|
+
let stderr = '';
|
|
39
|
+
child.stderr?.setEncoding('utf8');
|
|
40
|
+
child.stderr?.on('data', (chunk) => { stderr = (stderr + chunk).slice(-2000); });
|
|
41
|
+
const timer = setTimeout(() => this.finish(child, false, 'The sign-in timed out.'), SIGN_IN_TIMEOUT_MS);
|
|
42
|
+
timer.unref();
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const startTimer = setTimeout(() => reject(new Error('Claude Design sign-in did not start')), START_TIMEOUT_MS);
|
|
45
|
+
startTimer.unref();
|
|
46
|
+
createInterface({ input: child.stdout }).on('line', (line) => {
|
|
47
|
+
const event = parse(line);
|
|
48
|
+
if (event?.['event'] === 'pages') {
|
|
49
|
+
clearTimeout(startTimer);
|
|
50
|
+
const manual = typeof event['manual_url'] === 'string' ? event['manual_url'] : '';
|
|
51
|
+
const url = typeof event['url'] === 'string' ? event['url'] : '';
|
|
52
|
+
// the automatic page returns to a port on this machine; the phone needs the code page
|
|
53
|
+
if (manual || url)
|
|
54
|
+
resolve(manual || url);
|
|
55
|
+
else
|
|
56
|
+
reject(new Error('Claude Design did not return a sign-in page'));
|
|
57
|
+
}
|
|
58
|
+
else if (event?.['event'] === 'done') {
|
|
59
|
+
clearTimeout(timer);
|
|
60
|
+
clearTimeout(startTimer);
|
|
61
|
+
const message = typeof event['message'] === 'string' ? event['message'] : undefined;
|
|
62
|
+
reject(new Error(message ?? 'The sign-in ended'));
|
|
63
|
+
this.finish(child, event['ok'] === true, message);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
child.on('error', (error) => {
|
|
67
|
+
clearTimeout(startTimer);
|
|
68
|
+
reject(error);
|
|
69
|
+
this.finish(child, false, error.message);
|
|
70
|
+
});
|
|
71
|
+
child.on('close', (code) => {
|
|
72
|
+
clearTimeout(timer);
|
|
73
|
+
clearTimeout(startTimer);
|
|
74
|
+
const reason = stripAnsi(stderr).trim() || `The sign-in ended before it finished (exit code ${code}).`;
|
|
75
|
+
reject(new Error(reason));
|
|
76
|
+
this.finish(child, false, reason);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// the code the manual page shows, `code#state`
|
|
81
|
+
submitCode(code) {
|
|
82
|
+
const child = this.child;
|
|
83
|
+
if (!child || this.finished)
|
|
84
|
+
throw new Error('No Claude Design sign-in is in progress, start it again');
|
|
85
|
+
child.stdin?.write(`${JSON.stringify({ code: code.trim() })}\n`);
|
|
86
|
+
}
|
|
87
|
+
cancel() {
|
|
88
|
+
const child = this.child;
|
|
89
|
+
if (!child || this.finished)
|
|
90
|
+
return;
|
|
91
|
+
this.finished = true;
|
|
92
|
+
this.child = null;
|
|
93
|
+
try {
|
|
94
|
+
child.stdin?.end();
|
|
95
|
+
}
|
|
96
|
+
catch { }
|
|
97
|
+
setTimeout(() => killTree(child), 2000).unref();
|
|
98
|
+
}
|
|
99
|
+
// the first word on how it ended counts; a sign-in replaced meanwhile says nothing
|
|
100
|
+
finish(child, ok, message) {
|
|
101
|
+
if (this.child !== child || this.finished)
|
|
102
|
+
return;
|
|
103
|
+
this.finished = true;
|
|
104
|
+
this.child = null;
|
|
105
|
+
try {
|
|
106
|
+
child.stdin?.end();
|
|
107
|
+
}
|
|
108
|
+
catch { }
|
|
109
|
+
this.options.onFinish(ok, message);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=designLogin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"designLogin.js","sourceRoot":"","sources":["../../src/engine/designLogin.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ export class LiveTranscript {
|
|
|
26
26
|
// the last frame of each thread (the main one, each subagent): a thinking block took the time
|
|
27
27
|
// since then
|
|
28
28
|
lastFrameAt = new Map();
|
|
29
|
+
// when each prompt was sent: its echo comes once claude reads it, seconds later on a fresh start
|
|
30
|
+
sentAt = new Map();
|
|
29
31
|
constructor(emit, now = Date.now) {
|
|
30
32
|
this.emit = emit;
|
|
31
33
|
this.now = now;
|
|
@@ -41,6 +43,15 @@ export class LiveTranscript {
|
|
|
41
43
|
}
|
|
42
44
|
this.lastFrameAt.set(str(frame['parent_tool_use_id']), this.now());
|
|
43
45
|
}
|
|
46
|
+
// a muted line between the messages for something that happened during the turn
|
|
47
|
+
notice(kind, content, id) {
|
|
48
|
+
this.flush();
|
|
49
|
+
this.emit({ role: 'notice', kind, content, id, timestamp: new Date(this.now()).toISOString() });
|
|
50
|
+
}
|
|
51
|
+
// a prompt went to claude: its echo is stamped with this time, as the turn's start
|
|
52
|
+
promptSent(uuid) {
|
|
53
|
+
this.sentAt.set(uuid, this.now());
|
|
54
|
+
}
|
|
44
55
|
// emit the messages updated since the last flush; the session calls it before any other event
|
|
45
56
|
// so the app sees the transcript and the turn state in order
|
|
46
57
|
flush() {
|
|
@@ -67,8 +78,11 @@ export class LiveTranscript {
|
|
|
67
78
|
const since = this.lastFrameAt.get(str(frame['parent_tool_use_id']));
|
|
68
79
|
if (isThinkingBlock(block) && since !== undefined)
|
|
69
80
|
entry.thinkingMs = (entry.thinkingMs ?? 0) + this.now() - since;
|
|
70
|
-
|
|
81
|
+
// stamped with its newest visible block, as the jsonl stamps each block's line
|
|
82
|
+
if (isVisible(block)) {
|
|
71
83
|
entry.version++;
|
|
84
|
+
entry.timestamp = new Date(this.now()).toISOString();
|
|
85
|
+
}
|
|
72
86
|
if (block['type'] === 'tool_use' && typeof block['id'] === 'string')
|
|
73
87
|
this.owners.set(block['id'], id);
|
|
74
88
|
}
|
|
@@ -77,8 +91,10 @@ export class LiveTranscript {
|
|
|
77
91
|
this.publish(id);
|
|
78
92
|
}
|
|
79
93
|
user(frame) {
|
|
80
|
-
|
|
81
|
-
|
|
94
|
+
const origin = frame['origin'];
|
|
95
|
+
// claude's own messages, such as the summary a compaction starts from, are no prompts; one
|
|
96
|
+
// another session sent shows
|
|
97
|
+
if (frame['isSynthetic'] === true && origin?.kind !== 'peer')
|
|
82
98
|
return;
|
|
83
99
|
const parentToolUseId = str(frame['parent_tool_use_id']) || undefined;
|
|
84
100
|
const message = frame['message'];
|
|
@@ -88,6 +104,7 @@ export class LiveTranscript {
|
|
|
88
104
|
message,
|
|
89
105
|
toolUseResult: frame['tool_use_result'],
|
|
90
106
|
isSidechain: parentToolUseId !== undefined,
|
|
107
|
+
origin,
|
|
91
108
|
};
|
|
92
109
|
const toolResults = blocksOf(message?.content).filter((b) => b['type'] === 'tool_result');
|
|
93
110
|
if (toolResults.length > 0) {
|
|
@@ -102,7 +119,13 @@ export class LiveTranscript {
|
|
|
102
119
|
}
|
|
103
120
|
return;
|
|
104
121
|
}
|
|
105
|
-
|
|
122
|
+
// a prompt from here counts from when it was sent, anything else (a message another session
|
|
123
|
+
// sent) from when claude took it in, which its echo comes well after
|
|
124
|
+
const sent = jsonl.uuid ? this.sentAt.get(jsonl.uuid) : undefined;
|
|
125
|
+
if (jsonl.uuid)
|
|
126
|
+
this.sentAt.delete(jsonl.uuid);
|
|
127
|
+
const at = sent ?? (Date.parse(str(frame['timestamp'])) || this.now());
|
|
128
|
+
const parsed = parseTranscriptMessage(jsonl, { timestamp: new Date(at).toISOString() });
|
|
106
129
|
if (!parsed)
|
|
107
130
|
return;
|
|
108
131
|
this.flush();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liveTranscript.js","sourceRoot":"","sources":["../../src/engine/liveTranscript.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GAIpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAgBvC,sFAAsF;AACtF,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAW,EAAE,CAC7C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChG,2FAA2F;AAC3F,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAU,EAAE,CACxC,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;IAC3D,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;QACvD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,oDAAoD;AACpD,MAAM,SAAS,GAAG,CAAC,KAAY,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;AAEtG,+FAA+F;AAC/F,8FAA8F;AAC9F,4FAA4F;AAC5F,gGAAgG;AAChG,+FAA+F;AAC/F,uBAAuB;AACvB,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"liveTranscript.js","sourceRoot":"","sources":["../../src/engine/liveTranscript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { obj, str } from '../utils/json.js';
|
|
2
|
+
const oneLine = (value, max = 300) => {
|
|
3
|
+
const line = value.replace(/\s+/g, ' ').trim();
|
|
4
|
+
return line.length > max ? `${line.slice(0, max - 1)}…` : line;
|
|
5
|
+
};
|
|
6
|
+
// the turn label while claude waits to retry a failed api request (system/api_retry)
|
|
7
|
+
export function retryLabel(msg) {
|
|
8
|
+
const error = str(msg['error']).replace(/_/g, ' ') || 'error';
|
|
9
|
+
const attempt = typeof msg['attempt'] === 'number' ? msg['attempt'] : 1;
|
|
10
|
+
const max = typeof msg['max_retries'] === 'number' ? `/${msg['max_retries']}` : '';
|
|
11
|
+
return `API ${error}, retrying ${attempt}${max}`;
|
|
12
|
+
}
|
|
13
|
+
// a tool call refused without a prompt: auto mode's classifier or a deny rule (system/permission_denied)
|
|
14
|
+
export function deniedText(msg) {
|
|
15
|
+
const tool = str(msg['tool_name']) || 'A tool';
|
|
16
|
+
const reason = oneLine(str(msg['decision_reason']) || str(msg['message']));
|
|
17
|
+
return reason ? `Blocked ${tool}: ${reason}` : `Blocked ${tool}`;
|
|
18
|
+
}
|
|
19
|
+
const LIMIT_NAMES = {
|
|
20
|
+
five_hour: '5-hour',
|
|
21
|
+
seven_day: 'weekly',
|
|
22
|
+
seven_day_opus: 'weekly Opus',
|
|
23
|
+
seven_day_sonnet: 'weekly Sonnet',
|
|
24
|
+
overage: 'extra usage',
|
|
25
|
+
};
|
|
26
|
+
// "2h 10m" until a unix time in seconds
|
|
27
|
+
function untilText(resetsAt, now) {
|
|
28
|
+
if (typeof resetsAt !== 'number')
|
|
29
|
+
return '';
|
|
30
|
+
const minutes = Math.max(1, Math.round((resetsAt * 1000 - now) / 60_000));
|
|
31
|
+
const hours = Math.floor(minutes / 60);
|
|
32
|
+
if (hours >= 24)
|
|
33
|
+
return ` · resets in ${Math.floor(hours / 24)}d ${hours % 24}h`;
|
|
34
|
+
return ` · resets in ${hours > 0 ? `${hours}h ${minutes % 60}m` : `${minutes}m`}`;
|
|
35
|
+
}
|
|
36
|
+
// a usage limit getting close or reached (rate_limit_event); null while it is fine
|
|
37
|
+
export function rateLimitText(info, now = Date.now()) {
|
|
38
|
+
const status = str(info['status']);
|
|
39
|
+
if (status !== 'allowed_warning' && status !== 'rejected')
|
|
40
|
+
return null;
|
|
41
|
+
const type = str(info['rateLimitType']);
|
|
42
|
+
const name = LIMIT_NAMES[type] ?? 'usage';
|
|
43
|
+
const window = obj(obj(info['unifiedWindows'])[type]);
|
|
44
|
+
const utilization = typeof window['utilization'] === 'number' ? window['utilization'] : info['utilization'];
|
|
45
|
+
const resets = untilText(window['resetsAt'] ?? info['resetsAt'], now);
|
|
46
|
+
if (status === 'rejected')
|
|
47
|
+
return `${name[0].toUpperCase()}${name.slice(1)} limit reached${resets}`;
|
|
48
|
+
const used = typeof utilization === 'number' ? `${Math.round(utilization * 100)}% of ` : 'most of ';
|
|
49
|
+
return `You've used ${used}your ${name} limit${resets}`;
|
|
50
|
+
}
|
|
51
|
+
// claude's own notices (system/notification) by its color: error, else warning
|
|
52
|
+
export const notificationLevel = (msg) => (str(msg['color']) === 'error' ? 'error' : 'warning');
|
|
53
|
+
//# sourceMappingURL=notices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.js","sourceRoot":"","sources":["../../src/engine/notices.ts"],"names":[],"mappings":"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"}
|