autodev-cli 1.4.0 → 1.4.4
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/bin/autodev.js +0 -0
- package/out/agentBackup/archive.d.ts +44 -0
- package/out/agentBackup/archive.js +131 -0
- package/out/agentBackup/archive.js.map +1 -0
- package/out/agentBackup/export.d.ts +18 -0
- package/out/agentBackup/export.js +92 -0
- package/out/agentBackup/export.js.map +1 -0
- package/out/agentBackup/import.d.ts +21 -0
- package/out/agentBackup/import.js +40 -0
- package/out/agentBackup/import.js.map +1 -0
- package/out/agentBackup/index.d.ts +6 -0
- package/out/agentBackup/index.js +11 -0
- package/out/agentBackup/index.js.map +1 -0
- package/out/agentBackup/layout.d.ts +30 -0
- package/out/agentBackup/layout.js +126 -0
- package/out/agentBackup/layout.js.map +1 -0
- package/out/agentBackup/manifest.d.ts +24 -0
- package/out/agentBackup/manifest.js +70 -0
- package/out/agentBackup/manifest.js.map +1 -0
- package/out/agentBackup/opencodeDb.d.ts +20 -0
- package/out/agentBackup/opencodeDb.js +213 -0
- package/out/agentBackup/opencodeDb.js.map +1 -0
- package/out/agentBackup/sessionProviders.d.ts +35 -0
- package/out/agentBackup/sessionProviders.js +263 -0
- package/out/agentBackup/sessionProviders.js.map +1 -0
- package/out/agentBackup/upload.d.ts +9 -0
- package/out/agentBackup/upload.js +121 -0
- package/out/agentBackup/upload.js.map +1 -0
- package/out/cli.d.ts +1 -0
- package/out/cli.js +8 -0
- package/out/cli.js.map +1 -1
- package/out/cliExit.d.ts +34 -0
- package/out/cliExit.js +159 -0
- package/out/cliExit.js.map +1 -0
- package/out/commands/config.d.ts +2 -0
- package/out/commands/config.js +7 -7
- package/out/commands/config.js.map +1 -1
- package/out/commands/connect.d.ts +2 -0
- package/out/commands/connect.js +11 -0
- package/out/commands/connect.js.map +1 -1
- package/out/commands/export.d.ts +2 -0
- package/out/commands/export.js +79 -0
- package/out/commands/export.js.map +1 -0
- package/out/commands/import.d.ts +2 -0
- package/out/commands/import.js +92 -0
- package/out/commands/import.js.map +1 -0
- package/out/commands/init.d.ts +16 -0
- package/out/commands/init.js +9 -5
- package/out/commands/init.js.map +1 -1
- package/out/commands/resume.d.ts +2 -0
- package/out/commands/resume.js +65 -0
- package/out/commands/resume.js.map +1 -0
- package/out/commands/sessions.d.ts +2 -0
- package/out/commands/sessions.js +64 -0
- package/out/commands/sessions.js.map +1 -0
- package/out/commands/start.d.ts +2 -0
- package/out/commands/start.js +40 -7
- package/out/commands/start.js.map +1 -1
- package/out/commands/status.d.ts +2 -0
- package/out/commands/status.js +3 -3
- package/out/commands/status.js.map +1 -1
- package/out/commands/tailOutput.d.ts +12 -0
- package/out/commands/up.d.ts +3 -0
- package/out/configManager.d.ts +42 -0
- package/out/configManager.js +447 -0
- package/out/configManager.js.map +1 -0
- package/out/connect.d.ts +4 -0
- package/out/connect.js +7 -7
- package/out/connect.js.map +1 -1
- package/out/core/adapters.d.ts +34 -0
- package/out/core/adapters.js +84 -0
- package/out/core/adapters.js.map +1 -0
- package/out/core/commandHelpers.d.ts +12 -0
- package/out/core/commandHelpers.js +96 -0
- package/out/core/commandHelpers.js.map +1 -0
- package/out/core/projectMcp.d.ts +34 -0
- package/out/core/projectMcp.js +160 -0
- package/out/core/projectMcp.js.map +1 -0
- package/out/core/provider/BaseProvider.d.ts +14 -0
- package/out/core/provider/BaseProvider.js +25 -0
- package/out/core/provider/BaseProvider.js.map +1 -0
- package/out/core/provider/ProviderRegistry.d.ts +12 -0
- package/out/core/provider/ProviderRegistry.js +40 -0
- package/out/core/provider/ProviderRegistry.js.map +1 -0
- package/out/core/provider/contract.d.ts +62 -0
- package/out/core/provider/contract.js +9 -0
- package/out/core/provider/contract.js.map +1 -0
- package/out/core/provider/implementations.d.ts +54 -0
- package/out/core/provider/implementations.js +147 -0
- package/out/core/provider/implementations.js.map +1 -0
- package/out/core/settingsLoader.d.ts +221 -0
- package/out/core/settingsLoader.js +176 -0
- package/out/core/settingsLoader.js.map +1 -0
- package/out/discordGateway.d.ts +26 -0
- package/out/discordGateway.js +230 -0
- package/out/discordGateway.js.map +1 -0
- package/out/discordPoller.d.ts +28 -0
- package/out/discordPoller.js +247 -0
- package/out/discordPoller.js.map +1 -0
- package/out/dispatcher.d.ts +12 -0
- package/out/dispatcher.js +214 -0
- package/out/dispatcher.js.map +1 -0
- package/out/emailPoller.d.ts +42 -0
- package/out/emailPoller.js +221 -0
- package/out/emailPoller.js.map +1 -0
- package/out/git/gitService.d.ts +36 -0
- package/out/git/gitService.js +165 -0
- package/out/git/gitService.js.map +1 -0
- package/out/hookEventNormalizer.d.ts +39 -0
- package/out/hookEventNormalizer.js +397 -0
- package/out/hookEventNormalizer.js.map +1 -0
- package/out/hooksManager.d.ts +25 -0
- package/out/hooksManager.js +471 -0
- package/out/hooksManager.js.map +1 -0
- package/out/launchIde.d.ts +14 -0
- package/out/logger.d.ts +12 -0
- package/out/mcpEmailTest.d.ts +29 -0
- package/out/mcpEmailTest.js +245 -0
- package/out/mcpEmailTest.js.map +1 -0
- package/out/mcpInstallCheck.d.ts +23 -0
- package/out/mcpInstallCheck.js +219 -0
- package/out/mcpInstallCheck.js.map +1 -0
- package/out/mcpManager.d.ts +35 -0
- package/out/mcpManager.js +371 -0
- package/out/mcpManager.js.map +1 -0
- package/out/messageBuilder.d.ts +54 -0
- package/out/messageBuilder.js +373 -0
- package/out/messageBuilder.js.map +1 -0
- package/out/openCodeHooksManager.d.ts +23 -0
- package/out/openCodeHooksManager.js +511 -0
- package/out/openCodeHooksManager.js.map +1 -0
- package/out/periodicActions.d.ts +63 -0
- package/out/periodicActions.js +237 -0
- package/out/periodicActions.js.map +1 -0
- package/out/profileBuilder.d.ts +29 -0
- package/out/profileBuilder.js +366 -0
- package/out/profileBuilder.js.map +1 -0
- package/out/prompt.d.ts +12 -0
- package/out/prompt.js +18 -0
- package/out/prompt.js.map +1 -0
- package/out/protocolSections.d.ts +26 -0
- package/out/protocolSections.js +209 -0
- package/out/protocolSections.js.map +1 -0
- package/out/providers/claudeCliProvider.d.ts +71 -0
- package/out/providers/claudeCliProvider.js +425 -0
- package/out/providers/claudeCliProvider.js.map +1 -0
- package/out/providers/claudeTuiProvider.d.ts +23 -0
- package/out/providers/claudeTuiProvider.js +296 -0
- package/out/providers/claudeTuiProvider.js.map +1 -0
- package/out/providers/copilotCliProvider.d.ts +16 -0
- package/out/providers/copilotCliProvider.js +44 -0
- package/out/providers/copilotCliProvider.js.map +1 -0
- package/out/providers/copilotSdkProvider.d.ts +12 -0
- package/out/providers/copilotSdkProvider.js +445 -0
- package/out/providers/copilotSdkProvider.js.map +1 -0
- package/out/providers/grokTuiProvider.d.ts +14 -0
- package/out/providers/grokTuiProvider.js +271 -0
- package/out/providers/grokTuiProvider.js.map +1 -0
- package/out/providers/opencodeCliProvider.d.ts +29 -0
- package/out/providers/opencodeCliProvider.js +199 -0
- package/out/providers/opencodeCliProvider.js.map +1 -0
- package/out/providers/opencodeSdkProvider.d.ts +22 -0
- package/out/providers/opencodeSdkProvider.js +557 -0
- package/out/providers/opencodeSdkProvider.js.map +1 -0
- package/out/providers.d.ts +9 -0
- package/out/providers.js +44 -0
- package/out/providers.js.map +1 -0
- package/out/rateLimit.d.ts +18 -0
- package/out/rateLimit.js +90 -0
- package/out/rateLimit.js.map +1 -0
- package/out/rdp/auth.d.ts +55 -0
- package/out/rdp/auth.js +197 -0
- package/out/rdp/auth.js.map +1 -0
- package/out/rdp/bridge.d.ts +86 -0
- package/out/rdp/bridge.js +1398 -0
- package/out/rdp/bridge.js.map +1 -0
- package/out/rdp/constants.d.ts +86 -0
- package/out/rdp/constants.js +182 -0
- package/out/rdp/constants.js.map +1 -0
- package/out/rdp/index.d.ts +7 -0
- package/out/rdp/index.js +14 -0
- package/out/rdp/index.js.map +1 -0
- package/out/rdp/session.d.ts +30 -0
- package/out/rdp/session.js +196 -0
- package/out/rdp/session.js.map +1 -0
- package/out/rdp/types.d.ts +27 -0
- package/out/rdp/types.js +6 -0
- package/out/rdp/types.js.map +1 -0
- package/out/sdk/index.d.ts +22 -0
- package/out/sdk/index.js +81 -0
- package/out/sdk/index.js.map +1 -0
- package/out/sessionState.d.ts +54 -0
- package/out/sessionState.js +284 -0
- package/out/sessionState.js.map +1 -0
- package/out/sessions.d.ts +11 -0
- package/out/sessions.js +32 -0
- package/out/sessions.js.map +1 -0
- package/out/taskLoop.d.ts +152 -0
- package/out/taskLoop.js +2505 -0
- package/out/taskLoop.js.map +1 -0
- package/out/todo.d.ts +42 -0
- package/out/todo.js +311 -0
- package/out/todo.js.map +1 -0
- package/out/todoWriteManager.d.ts +26 -0
- package/out/todoWriteManager.js +44 -0
- package/out/todoWriteManager.js.map +1 -0
- package/out/vnc/auth.d.ts +52 -0
- package/out/vnc/auth.js +181 -0
- package/out/vnc/auth.js.map +1 -0
- package/out/vnc/bridge.d.ts +40 -0
- package/out/vnc/bridge.js +540 -0
- package/out/vnc/bridge.js.map +1 -0
- package/out/vnc/constants.d.ts +8 -0
- package/out/vnc/constants.js +34 -0
- package/out/vnc/constants.js.map +1 -0
- package/out/vnc/des.d.ts +6 -0
- package/out/vnc/des.js +93 -0
- package/out/vnc/des.js.map +1 -0
- package/out/vnc/index.d.ts +7 -0
- package/out/vnc/index.js +13 -0
- package/out/vnc/index.js.map +1 -0
- package/out/vnc/session.d.ts +18 -0
- package/out/vnc/session.js +193 -0
- package/out/vnc/session.js.map +1 -0
- package/out/vnc/types.d.ts +16 -0
- package/out/vnc/types.js +6 -0
- package/out/vnc/types.js.map +1 -0
- package/out/webSocketPoller.d.ts +95 -0
- package/out/webSocketPoller.js +986 -0
- package/out/webSocketPoller.js.map +1 -0
- package/out/webhook.d.ts +37 -0
- package/out/webhook.js +265 -0
- package/out/webhook.js.map +1 -0
- package/out/webhookPoller.d.ts +40 -0
- package/out/webhookPoller.js +378 -0
- package/out/webhookPoller.js.map +1 -0
- package/package.json +54 -41
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// claudeTuiProvider -- long-running TUI session via @raylin01/claude-client.
|
|
4
|
+
//
|
|
5
|
+
// Uses ClaudeClient.init() (StructuredClaudeClient) to keep a single Claude
|
|
6
|
+
// process alive per workspace root. Each task calls client.send(text) and
|
|
7
|
+
// iterates turn.updates() to stream output to the AutoDev output channel.
|
|
8
|
+
//
|
|
9
|
+
// No terminal is spawned -- all I/O goes through the extension-host process.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.isClaudeTuiBusy = isClaudeTuiBusy;
|
|
46
|
+
exports.getClaudeTuiLastActivity = getClaudeTuiLastActivity;
|
|
47
|
+
exports.forceIdleClaudeTui = forceIdleClaudeTui;
|
|
48
|
+
exports.getClaudeTuiLatestSessionId = getClaudeTuiLatestSessionId;
|
|
49
|
+
exports.closeClaudeTuiClient = closeClaudeTuiClient;
|
|
50
|
+
exports.closeAllClaudeTuiClients = closeAllClaudeTuiClients;
|
|
51
|
+
exports.sendClaudeTuiPrompt = sendClaudeTuiPrompt;
|
|
52
|
+
exports.runClaudeTuiCompact = runClaudeTuiCompact;
|
|
53
|
+
exports.runClaudeTuiClear = runClaudeTuiClear;
|
|
54
|
+
exports.detectTuiRateLimit = detectTuiRateLimit;
|
|
55
|
+
const fs = __importStar(require("fs"));
|
|
56
|
+
const rateLimit_1 = require("../rateLimit");
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Per-workspace persistent client instances.
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
const _clients = new Map();
|
|
61
|
+
const _latestSessionIds = new Map();
|
|
62
|
+
/** Roots that currently have a claude-tui turn actively running (fire-and-forget async in flight). */
|
|
63
|
+
const _busyRoots = new Set();
|
|
64
|
+
/** Timestamp (ms) of the most recent streaming update received per root. */
|
|
65
|
+
const _lastActivityMs = new Map();
|
|
66
|
+
/** True while a claude-tui turn is running for the given workspace root. */
|
|
67
|
+
function isClaudeTuiBusy(root) {
|
|
68
|
+
return _busyRoots.has(root);
|
|
69
|
+
}
|
|
70
|
+
/** Returns the epoch-ms timestamp of the last streaming update for the root, or 0 if none. */
|
|
71
|
+
function getClaudeTuiLastActivity(root) {
|
|
72
|
+
return _lastActivityMs.get(root) ?? 0;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Force-clears the busy flag for a root whose turn appears hung
|
|
76
|
+
* (no activity for a long time). Call only after an inactivity timeout.
|
|
77
|
+
*/
|
|
78
|
+
function forceIdleClaudeTui(root) {
|
|
79
|
+
_busyRoots.delete(root);
|
|
80
|
+
}
|
|
81
|
+
function getClaudeTuiLatestSessionId(root) {
|
|
82
|
+
return _latestSessionIds.get(root) ?? _clients.get(root)?.sessionId;
|
|
83
|
+
}
|
|
84
|
+
function _getLib() {
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
86
|
+
return require('@raylin01/claude-client');
|
|
87
|
+
}
|
|
88
|
+
/** Returns the cached client, or starts a fresh one (resuming if sessionId given). */
|
|
89
|
+
async function getOrCreateClient(root, resumeSessionId, log, model) {
|
|
90
|
+
const existing = _clients.get(root);
|
|
91
|
+
if (existing) {
|
|
92
|
+
log(`Claude TUI: reusing live session (session=${existing.sessionId ?? 'unknown'})`);
|
|
93
|
+
return existing;
|
|
94
|
+
}
|
|
95
|
+
const lib = _getLib();
|
|
96
|
+
const client = await lib.ClaudeClient.init({
|
|
97
|
+
cwd: root,
|
|
98
|
+
dangerouslySkipPermissions: true,
|
|
99
|
+
permissionPromptTool: false, // no --permission-prompt-tool stdio
|
|
100
|
+
verbose: true,
|
|
101
|
+
includePartialMessages: true,
|
|
102
|
+
resumeSessionId: resumeSessionId || undefined,
|
|
103
|
+
env: { CI: 'true' },
|
|
104
|
+
...(model ? { model: model.replace(/-1m$/i, '') } : {}),
|
|
105
|
+
});
|
|
106
|
+
_clients.set(root, client);
|
|
107
|
+
if (client.sessionId) {
|
|
108
|
+
_latestSessionIds.set(root, client.sessionId);
|
|
109
|
+
}
|
|
110
|
+
log(`Claude TUI: client started (session=${client.sessionId ?? 'new'})`);
|
|
111
|
+
return client;
|
|
112
|
+
}
|
|
113
|
+
/** Kill and remove a stale client so the next call starts fresh. */
|
|
114
|
+
function _evictClient(root) {
|
|
115
|
+
const c = _clients.get(root);
|
|
116
|
+
if (c) {
|
|
117
|
+
try {
|
|
118
|
+
c.raw.kill();
|
|
119
|
+
}
|
|
120
|
+
catch { /* ignore */ }
|
|
121
|
+
_clients.delete(root);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** Cleanly shut down the persistent client when the task loop stops. */
|
|
125
|
+
function closeClaudeTuiClient(root, log) {
|
|
126
|
+
const c = _clients.get(root);
|
|
127
|
+
if (c) {
|
|
128
|
+
log('Claude TUI: closing persistent session');
|
|
129
|
+
try {
|
|
130
|
+
c.raw.kill();
|
|
131
|
+
}
|
|
132
|
+
catch { /* ignore */ }
|
|
133
|
+
_clients.delete(root);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Kill all open TUI clients — called on extension deactivate to avoid orphaned processes. */
|
|
137
|
+
function closeAllClaudeTuiClients() {
|
|
138
|
+
for (const [root, c] of _clients) {
|
|
139
|
+
try {
|
|
140
|
+
c.raw.kill();
|
|
141
|
+
}
|
|
142
|
+
catch { /* ignore */ }
|
|
143
|
+
_clients.delete(root);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
// sendClaudeTuiPrompt
|
|
148
|
+
//
|
|
149
|
+
// Fire-and-forget: reads the combined prompt file, sends it to the persistent
|
|
150
|
+
// client, streams output to stdoutFile + log(), writes exit code to exitFile.
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
function sendClaudeTuiPrompt(root,
|
|
153
|
+
/** Absolute path to the combined agent-profile + message file. */
|
|
154
|
+
promptFilePath, resolvedSessionId, stdoutFile, exitFile, log, model,
|
|
155
|
+
/** Optional callback invoked once to reveal the output panel to the user. */
|
|
156
|
+
showOutput) {
|
|
157
|
+
showOutput?.();
|
|
158
|
+
try {
|
|
159
|
+
fs.writeFileSync(stdoutFile, '', 'utf8');
|
|
160
|
+
}
|
|
161
|
+
catch { /* ignore */ }
|
|
162
|
+
try {
|
|
163
|
+
fs.writeFileSync(exitFile, '', 'utf8');
|
|
164
|
+
}
|
|
165
|
+
catch { /* ignore */ }
|
|
166
|
+
void (async () => {
|
|
167
|
+
_busyRoots.add(root);
|
|
168
|
+
try {
|
|
169
|
+
const promptText = fs.readFileSync(promptFilePath, 'utf8');
|
|
170
|
+
// Get (or start) the persistent client for this workspace.
|
|
171
|
+
const client = await getOrCreateClient(root, resolvedSessionId, log, model);
|
|
172
|
+
if (client.sessionId) {
|
|
173
|
+
_latestSessionIds.set(root, client.sessionId);
|
|
174
|
+
}
|
|
175
|
+
log(`Claude TUI: sending turn (${promptText.length} chars)`);
|
|
176
|
+
const turn = client.send(promptText);
|
|
177
|
+
let lastTextLen = 0;
|
|
178
|
+
let _lineBuf = '';
|
|
179
|
+
for await (const update of turn.updates()) {
|
|
180
|
+
_lastActivityMs.set(root, Date.now());
|
|
181
|
+
const { snapshot } = update;
|
|
182
|
+
// Stream any newly accumulated text to the output channel + capture file.
|
|
183
|
+
if (snapshot.text.length > lastTextLen) {
|
|
184
|
+
const newChunk = snapshot.text.slice(lastTextLen);
|
|
185
|
+
lastTextLen = snapshot.text.length;
|
|
186
|
+
try {
|
|
187
|
+
fs.appendFileSync(stdoutFile, newChunk, 'utf8');
|
|
188
|
+
}
|
|
189
|
+
catch { /* ignore */ }
|
|
190
|
+
// Log only complete lines (terminated by \n) so partial streaming
|
|
191
|
+
// updates don't produce fragmented mid-word log entries.
|
|
192
|
+
_lineBuf += newChunk;
|
|
193
|
+
let nl;
|
|
194
|
+
while ((nl = _lineBuf.indexOf('\n')) !== -1) {
|
|
195
|
+
const line = _lineBuf.slice(0, nl).replace(/\r$/, '');
|
|
196
|
+
_lineBuf = _lineBuf.slice(nl + 1);
|
|
197
|
+
if (line) {
|
|
198
|
+
log(` ${line}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Auto-approve all tool-use / hook requests.
|
|
203
|
+
for (const req of snapshot.openRequests) {
|
|
204
|
+
try {
|
|
205
|
+
if (req.kind === 'tool_approval' || req.kind === 'hook') {
|
|
206
|
+
await client.approveRequest(req.id);
|
|
207
|
+
}
|
|
208
|
+
else if (req.kind === 'question') {
|
|
209
|
+
await client.answerQuestion(req.id, {});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch { /* already resolved or unknown kind */ }
|
|
213
|
+
}
|
|
214
|
+
if (update.kind === 'completed' || update.kind === 'error') {
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Flush any remaining partial line.
|
|
219
|
+
if (_lineBuf.trim()) {
|
|
220
|
+
log(` ${_lineBuf}`);
|
|
221
|
+
_lineBuf = '';
|
|
222
|
+
}
|
|
223
|
+
// Capture session after turn completes.
|
|
224
|
+
if (client.sessionId) {
|
|
225
|
+
_latestSessionIds.set(root, client.sessionId);
|
|
226
|
+
}
|
|
227
|
+
log(`Claude TUI: turn complete`);
|
|
228
|
+
try {
|
|
229
|
+
fs.writeFileSync(exitFile, '0\n', 'utf8');
|
|
230
|
+
}
|
|
231
|
+
catch { /* ignore */ }
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
const msg = err?.message ?? String(err);
|
|
235
|
+
log(`Claude TUI error: ${msg}`);
|
|
236
|
+
_evictClient(root); // kill stale process; next task gets a fresh client
|
|
237
|
+
try {
|
|
238
|
+
fs.appendFileSync(stdoutFile, `\n[Error: ${msg}]\n`, 'utf8');
|
|
239
|
+
}
|
|
240
|
+
catch { /* ignore */ }
|
|
241
|
+
try {
|
|
242
|
+
fs.writeFileSync(exitFile, '1\n', 'utf8');
|
|
243
|
+
}
|
|
244
|
+
catch { /* ignore */ }
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
_busyRoots.delete(root);
|
|
248
|
+
}
|
|
249
|
+
})();
|
|
250
|
+
}
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
// runClaudeTuiCompact
|
|
253
|
+
//
|
|
254
|
+
// Sends /compact to the active session to free up context window space.
|
|
255
|
+
// Awaitable -- resolves once the compact turn finishes.
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
async function runClaudeTuiCompact(root, sessionId, log) {
|
|
258
|
+
try {
|
|
259
|
+
const client = await getOrCreateClient(root, sessionId, log);
|
|
260
|
+
log(`Claude TUI compact: sending /compact`);
|
|
261
|
+
const turn = client.send('/compact');
|
|
262
|
+
await turn.done;
|
|
263
|
+
log(`Claude TUI compact: done`);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
log(`Claude TUI compact error: ${err?.message ?? String(err)}`);
|
|
267
|
+
_evictClient(root);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
// runClaudeTuiClear
|
|
272
|
+
//
|
|
273
|
+
// Sends /clear to the active session to wipe history and start fresh.
|
|
274
|
+
// Used when autocompact is thrashing (context refills immediately after compact).
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
async function runClaudeTuiClear(root, sessionId, log) {
|
|
277
|
+
try {
|
|
278
|
+
const client = await getOrCreateClient(root, sessionId, log);
|
|
279
|
+
log(`Claude TUI clear: sending /clear`);
|
|
280
|
+
const turn = client.send('/clear');
|
|
281
|
+
await turn.done;
|
|
282
|
+
log(`Claude TUI clear: done`);
|
|
283
|
+
_evictClient(root);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
log(`Claude TUI clear error: ${err?.message ?? String(err)}`);
|
|
287
|
+
_evictClient(root);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
// detectTuiRateLimit
|
|
292
|
+
// ---------------------------------------------------------------------------
|
|
293
|
+
function detectTuiRateLimit(stdoutContent) {
|
|
294
|
+
return rateLimit_1.RateLimitDetector.detect(stdoutContent);
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=claudeTuiProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeTuiProvider.js","sourceRoot":"","sources":["../../src/providers/claudeTuiProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the shell command string for the copilot-cli provider.
|
|
3
|
+
* Accepts a pre-combined file written by the dispatcher and passes it as a
|
|
4
|
+
* single `@file` reference so copilot reads it directly.
|
|
5
|
+
*
|
|
6
|
+
* Resume behaviour:
|
|
7
|
+
* - sessionId provided → --resume <id>
|
|
8
|
+
* - neither → fresh session
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildCopilotCliCommand(combinedFile: string, sessionId?: string, model?: string, sessionName?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Run a tiny probe prompt against Copilot CLI (via Node exec, not the terminal)
|
|
13
|
+
* and extract the session ID from the JSON output.
|
|
14
|
+
* Used to obtain a real session ID before sending the main prompt.
|
|
15
|
+
*/
|
|
16
|
+
export declare function probeCopilotSession(cwd: string, log: (msg: string) => void): Promise<string | undefined>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildCopilotCliCommand = buildCopilotCliCommand;
|
|
4
|
+
exports.probeCopilotSession = probeCopilotSession;
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Copilot CLI command builder
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/**
|
|
10
|
+
* Build the shell command string for the copilot-cli provider.
|
|
11
|
+
* Accepts a pre-combined file written by the dispatcher and passes it as a
|
|
12
|
+
* single `@file` reference so copilot reads it directly.
|
|
13
|
+
*
|
|
14
|
+
* Resume behaviour:
|
|
15
|
+
* - sessionId provided → --resume <id>
|
|
16
|
+
* - neither → fresh session
|
|
17
|
+
*/
|
|
18
|
+
function buildCopilotCliCommand(combinedFile, sessionId, model, sessionName) {
|
|
19
|
+
const resumeFlag = sessionId ? ` --resume=${sessionId}` : '';
|
|
20
|
+
const modelFlag = model ? ` --model=${model}` : '';
|
|
21
|
+
// `--name` only applies to a NEW session (resume keeps the prior name).
|
|
22
|
+
const nameFlag = (!sessionId && sessionName) ? ` --name ${JSON.stringify(sessionName)}` : '';
|
|
23
|
+
const flags = `--autopilot --yolo --no-ask-user --allow-all --no-auto-update --allow-all-paths --allow-all-urls --allow-all-tools --enable-all-github-mcp-tools --no-color --max-autopilot-continues 2000${resumeFlag}${modelFlag}${nameFlag}`;
|
|
24
|
+
const fileRef = JSON.stringify(`@${combinedFile}`);
|
|
25
|
+
return `copilot ${flags} -p ${fileRef}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Run a tiny probe prompt against Copilot CLI (via Node exec, not the terminal)
|
|
29
|
+
* and extract the session ID from the JSON output.
|
|
30
|
+
* Used to obtain a real session ID before sending the main prompt.
|
|
31
|
+
*/
|
|
32
|
+
function probeCopilotSession(cwd, log) {
|
|
33
|
+
return new Promise(resolve => {
|
|
34
|
+
const cmd = `copilot --yolo --allow-all --allow-all-paths --allow-all-urls --allow-all-tools --output-format json -p "session-init"`;
|
|
35
|
+
log(`Copilot CLI probe: ${cmd}`);
|
|
36
|
+
(0, child_process_1.exec)(cmd, { cwd, encoding: 'utf8', timeout: 30000 }, (_err, stdout) => {
|
|
37
|
+
const match = (stdout ?? '').match(/"sessionId"\s*:\s*"([^"]+)"/);
|
|
38
|
+
const id = match?.[1];
|
|
39
|
+
log(`Copilot CLI probe result: ${id ?? 'no session ID found'}`);
|
|
40
|
+
resolve(id);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=copilotCliProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilotCliProvider.js","sourceRoot":"","sources":["../../src/providers/copilotCliProvider.ts"],"names":[],"mappings":";;AAeA,wDAcC;AAOD,kDAcC;AAlDD,iDAAqC;AAErC,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CACpC,YAAoB,EACpB,SAAkB,EAClB,KAAc,EACd,WAAoB;IAEpB,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,SAAS,GAAI,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,wEAAwE;IACxE,MAAM,QAAQ,GAAK,CAAC,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,MAAM,KAAK,GAAG,6LAA6L,UAAU,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;IAC/O,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACnD,OAAO,WAAW,KAAK,OAAO,OAAO,EAAE,CAAC;AAE1C,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CACjC,GAAW,EACX,GAA0B;IAE1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,GAAG,GAAG,wHAAwH,CAAC;QACrI,GAAG,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACjC,IAAA,oBAAI,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACpE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAClE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACtB,GAAG,CAAC,6BAA6B,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,EAAE,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function setCopilotSettingsToken(token: string | undefined): void;
|
|
2
|
+
export declare function clearCopilotAuthCache(): void;
|
|
3
|
+
/** Expose the npm root path so callers can run `npm rebuild` there. */
|
|
4
|
+
export declare function copilotNpmRoot(): string;
|
|
5
|
+
/** Clear the cached SDK dynamic import so the next call to _getSdk() re-imports it. */
|
|
6
|
+
export declare function clearCopilotSdkCache(): void;
|
|
7
|
+
export declare function isCopilotSdkBusy(root: string): boolean;
|
|
8
|
+
export declare function getLatestCopilotSdkSessionId(root: string): string | undefined;
|
|
9
|
+
export declare function readCopilotSdkOutputSince(stdoutFile: string, fromByte: number): string;
|
|
10
|
+
export declare function sendCopilotSdkPrompt(root: string, promptFilePath: string, _resolvedSessionId: string | undefined, stdoutFile: string, exitFile: string, log: (msg: string) => void, showOutput?: () => void): void;
|
|
11
|
+
export declare function closeCopilotSdkSession(root: string, log: (msg: string) => void): void;
|
|
12
|
+
export declare function closeAllCopilotSdkSessions(): void;
|