autodev-cli 1.4.0 → 1.4.3
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 +430 -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 +25 -0
- package/out/core/projectMcp.js +144 -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,471 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.hooksJsonlPath = hooksJsonlPath;
|
|
37
|
+
exports.getManualHookCmd = getManualHookCmd;
|
|
38
|
+
exports.areClaudeHooksInstalled = areClaudeHooksInstalled;
|
|
39
|
+
exports.installClaudeHooks = installClaudeHooks;
|
|
40
|
+
exports.uninstallClaudeHooks = uninstallClaudeHooks;
|
|
41
|
+
exports.areCopilotHooksInstalled = areCopilotHooksInstalled;
|
|
42
|
+
exports.installCopilotHooks = installCopilotHooks;
|
|
43
|
+
exports.uninstallCopilotHooks = uninstallCopilotHooks;
|
|
44
|
+
exports.installHooks = installHooks;
|
|
45
|
+
exports.uninstallHooks = uninstallHooks;
|
|
46
|
+
exports.areHooksInstalled = areHooksInstalled;
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Hooks manager — installs/removes autodev command hooks for both:
|
|
51
|
+
// - Claude Code → <root>/.claude/settings.json (PascalCase events)
|
|
52
|
+
// - Copilot CLI → <root>/.github/copilot/settings.json (camelCase events)
|
|
53
|
+
// Each hook appends its stdin JSON payload (one event) as a JSONL line to
|
|
54
|
+
// ~/.autodev/hooks-events.jsonl. The task-loop polls that file every 10 s and
|
|
55
|
+
// forwards events via WebSocket.
|
|
56
|
+
//
|
|
57
|
+
// Hooks bodies are Node.js (not Python) — autodev already requires Node.js,
|
|
58
|
+
// so we drop the python3 dependency.
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
const AUTODEV_MARKER = '__autodev_hooks__';
|
|
61
|
+
// Claude Code uses PascalCase event names.
|
|
62
|
+
const CLAUDE_HOOK_EVENTS = [
|
|
63
|
+
// Tool lifecycle
|
|
64
|
+
'PreToolUse',
|
|
65
|
+
'PostToolUse',
|
|
66
|
+
'PostToolUseFailure',
|
|
67
|
+
// Session lifecycle
|
|
68
|
+
'SessionStart',
|
|
69
|
+
'SessionEnd',
|
|
70
|
+
'Setup',
|
|
71
|
+
'Stop',
|
|
72
|
+
'StopFailure',
|
|
73
|
+
// Subagent / teammate
|
|
74
|
+
'SubagentStart',
|
|
75
|
+
'SubagentStop',
|
|
76
|
+
'TeammateIdle',
|
|
77
|
+
// Permissions
|
|
78
|
+
'PermissionRequest',
|
|
79
|
+
'PermissionDenied',
|
|
80
|
+
// User prompt
|
|
81
|
+
'UserPromptSubmit',
|
|
82
|
+
// Tasks
|
|
83
|
+
'TaskCreated',
|
|
84
|
+
'TaskCompleted',
|
|
85
|
+
// Context / workspace
|
|
86
|
+
'CwdChanged',
|
|
87
|
+
'FileChanged',
|
|
88
|
+
'InstructionsLoaded',
|
|
89
|
+
'ConfigChange',
|
|
90
|
+
// Compaction
|
|
91
|
+
'PreCompact',
|
|
92
|
+
'PostCompact',
|
|
93
|
+
// Elicitation
|
|
94
|
+
'Elicitation',
|
|
95
|
+
'ElicitationResult',
|
|
96
|
+
// Worktree
|
|
97
|
+
'WorktreeCreate',
|
|
98
|
+
'WorktreeRemove',
|
|
99
|
+
// General
|
|
100
|
+
'Notification',
|
|
101
|
+
];
|
|
102
|
+
// Copilot CLI uses camelCase event names. Full list per
|
|
103
|
+
// https://docs.github.com/en/enterprise-cloud@latest/copilot/reference/copilot-cli-reference/cli-hooks-reference
|
|
104
|
+
const COPILOT_HOOK_EVENTS = [
|
|
105
|
+
'sessionStart',
|
|
106
|
+
'sessionEnd',
|
|
107
|
+
'userPromptSubmitted',
|
|
108
|
+
'preToolUse',
|
|
109
|
+
'postToolUse',
|
|
110
|
+
'postToolUseFailure',
|
|
111
|
+
'agentStop',
|
|
112
|
+
'subagentStart',
|
|
113
|
+
'subagentStop',
|
|
114
|
+
'preCompact',
|
|
115
|
+
'permissionRequest',
|
|
116
|
+
'notification',
|
|
117
|
+
'errorOccurred',
|
|
118
|
+
];
|
|
119
|
+
/**
|
|
120
|
+
* Path of the JSONL sink for a given workspace.
|
|
121
|
+
*
|
|
122
|
+
* Per-workspace, NOT homedir. When two VS Code instances run on the same
|
|
123
|
+
* machine, they share `os.homedir()` — so a homedir-scoped sink causes both
|
|
124
|
+
* pollers to see (and forward, attributed to themselves) every hook from
|
|
125
|
+
* every instance. The result was hooks from `tester-1` showing up under
|
|
126
|
+
* `A1` in pixel-office because A1's poller read the line first. Scoping
|
|
127
|
+
* the sink to the workspace avoids the cross-talk entirely.
|
|
128
|
+
*/
|
|
129
|
+
function hooksJsonlPath(workspaceRoot) {
|
|
130
|
+
return path.join(workspaceRoot, '.autodev', 'hooks-events.jsonl');
|
|
131
|
+
}
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// Hook scripts — written to <workspaceRoot>/.autodev/scripts/ once per
|
|
134
|
+
// workspace. Using real files avoids all shell-quoting issues (no node -e
|
|
135
|
+
// with embedded JSON, no PowerShell quote-stripping, no base64 tricks).
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
const HOOK_SCRIPTS_MARKER = '// __autodev_hooks_script__';
|
|
138
|
+
/** Content of hook-append.js — reads stdin JSON, optionally overrides
|
|
139
|
+
* hook/provider fields, then appends to the JSONL sink.
|
|
140
|
+
* Args: <jsonlPath> [injectEvent] [injectProvider] */
|
|
141
|
+
const HOOK_APPEND_SCRIPT = `${HOOK_SCRIPTS_MARKER}
|
|
142
|
+
// Reads one JSON event from stdin and appends it to <jsonlPath>.
|
|
143
|
+
// Args: <jsonlPath> [injectEvent] [injectProvider]
|
|
144
|
+
// Compatible with both CJS and ESM host packages (uses createRequire shim).
|
|
145
|
+
import { createRequire } from 'module';
|
|
146
|
+
const require = createRequire(import.meta.url);
|
|
147
|
+
const [,, jsonlPath, injectEvent, injectProvider] = process.argv;
|
|
148
|
+
let s = '';
|
|
149
|
+
process.stdin.on('data', c => s += c).on('end', () => {
|
|
150
|
+
let d;
|
|
151
|
+
try { d = JSON.parse(s); } catch (e) { d = { _raw: s.replace(/[\\r\\n]+/g, ' ') }; }
|
|
152
|
+
if (injectEvent) { d.hook = injectEvent; }
|
|
153
|
+
if (injectProvider) { d.provider = injectProvider; }
|
|
154
|
+
d.timestamp = new Date().toISOString();
|
|
155
|
+
const fs = require('fs'), p = require('path');
|
|
156
|
+
fs.mkdirSync(p.dirname(jsonlPath), { recursive: true });
|
|
157
|
+
fs.appendFileSync(jsonlPath, JSON.stringify(d) + '\\n');
|
|
158
|
+
});
|
|
159
|
+
`;
|
|
160
|
+
/** Content of hook-event.js — reads a payload from a temp JSON file,
|
|
161
|
+
* appends it to the JSONL sink, then deletes the temp file.
|
|
162
|
+
* Args: <jsonlPath> <payloadFile> */
|
|
163
|
+
const HOOK_EVENT_SCRIPT = `${HOOK_SCRIPTS_MARKER}
|
|
164
|
+
// Reads a synthetic event payload from <payloadFile>, appends to <jsonlPath>,
|
|
165
|
+
// then deletes the temp payload file.
|
|
166
|
+
// Args: <jsonlPath> <payloadFile>
|
|
167
|
+
// Compatible with both CJS and ESM host packages (uses createRequire shim).
|
|
168
|
+
import { createRequire } from 'module';
|
|
169
|
+
const require = createRequire(import.meta.url);
|
|
170
|
+
const [,, jsonlPath, payloadFile] = process.argv;
|
|
171
|
+
const fs = require('fs'), p = require('path');
|
|
172
|
+
try {
|
|
173
|
+
const d = JSON.parse(fs.readFileSync(payloadFile, 'utf8'));
|
|
174
|
+
d.timestamp = new Date().toISOString();
|
|
175
|
+
fs.mkdirSync(p.dirname(jsonlPath), { recursive: true });
|
|
176
|
+
fs.appendFileSync(jsonlPath, JSON.stringify(d) + '\\n');
|
|
177
|
+
} finally {
|
|
178
|
+
try { fs.unlinkSync(payloadFile); } catch { }
|
|
179
|
+
}
|
|
180
|
+
`;
|
|
181
|
+
function hookScriptsDir(workspaceRoot) {
|
|
182
|
+
return path.join(workspaceRoot, '.autodev', 'scripts');
|
|
183
|
+
}
|
|
184
|
+
/** Write (or overwrite) the two hook script files to .autodev/scripts/.
|
|
185
|
+
* Safe to call on every install — idempotent and fast. */
|
|
186
|
+
function ensureHookScripts(workspaceRoot) {
|
|
187
|
+
const dir = hookScriptsDir(workspaceRoot);
|
|
188
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
189
|
+
fs.writeFileSync(path.join(dir, 'hook-append.mjs'), HOOK_APPEND_SCRIPT, 'utf8');
|
|
190
|
+
fs.writeFileSync(path.join(dir, 'hook-event.mjs'), HOOK_EVENT_SCRIPT, 'utf8');
|
|
191
|
+
}
|
|
192
|
+
/** Quote a file path for use in a shell command (handles spaces). Uses
|
|
193
|
+
* forward slashes so the path works in both bash and PowerShell on Windows. */
|
|
194
|
+
function shellQuotePath(p_) {
|
|
195
|
+
return `"${p_.replace(/\\/g, '/')}"`;
|
|
196
|
+
}
|
|
197
|
+
/** Use the exact Node runtime running the extension host.
|
|
198
|
+
* Copilot hook subprocesses can have a minimal PATH (especially on headless
|
|
199
|
+
* hosts), so relying on bare `node` may fail and drop hook events. */
|
|
200
|
+
function nodeExec() {
|
|
201
|
+
return shellQuotePath(process.execPath);
|
|
202
|
+
}
|
|
203
|
+
/** Shell command for Claude Code — Claude already includes hook_event_name in
|
|
204
|
+
* the stdin payload, so we don't need to inject anything. */
|
|
205
|
+
function claudeHookCommand(workspaceRoot) {
|
|
206
|
+
const script = path.join(hookScriptsDir(workspaceRoot), 'hook-append.mjs');
|
|
207
|
+
const jsonl = hooksJsonlPath(workspaceRoot);
|
|
208
|
+
return `${nodeExec()} ${shellQuotePath(script)} ${shellQuotePath(jsonl)}`;
|
|
209
|
+
}
|
|
210
|
+
/** Shell command for one Copilot CLI event — Copilot doesn't include the
|
|
211
|
+
* event name in stdin, so we pass it as an argument. */
|
|
212
|
+
function copilotHookCommand(eventName, workspaceRoot) {
|
|
213
|
+
const script = path.join(hookScriptsDir(workspaceRoot), 'hook-append.mjs');
|
|
214
|
+
const jsonl = hooksJsonlPath(workspaceRoot);
|
|
215
|
+
return `${nodeExec()} ${shellQuotePath(script)} ${shellQuotePath(jsonl)} ${JSON.stringify(eventName)} "copilot-cli"`;
|
|
216
|
+
}
|
|
217
|
+
/** Same command as copilotHookCommand but uses Windows-native path separators
|
|
218
|
+
* so that PowerShell can execute it without WSL path translation issues.
|
|
219
|
+
* On Windows, copilot runs "bash" hooks via WSL which cannot resolve h:/...
|
|
220
|
+
* paths; the "powershell" field runs natively and handles them correctly. */
|
|
221
|
+
function copilotPowershellHookCommand(eventName, workspaceRoot) {
|
|
222
|
+
// PowerShell handles forward-slash quoted paths fine — same command string.
|
|
223
|
+
return copilotHookCommand(eventName, workspaceRoot);
|
|
224
|
+
}
|
|
225
|
+
/** Returns a shell command that synthesises a hook event with no stdin payload.
|
|
226
|
+
* Writes the payload to a small temp JSON file in .autodev/scripts/ so that
|
|
227
|
+
* no shell quoting of JSON is required (avoids PowerShell stripping quotes).
|
|
228
|
+
* `workspaceRoot` controls which workspace's JSONL sink the hook writes to. */
|
|
229
|
+
function getManualHookCmd(provider, hookEvent, workspaceRoot, sessionName) {
|
|
230
|
+
ensureHookScripts(workspaceRoot);
|
|
231
|
+
const payload = { hook: hookEvent, provider, _session_name: sessionName ?? '' };
|
|
232
|
+
// Write payload to a temp file — avoids any shell quoting of JSON
|
|
233
|
+
const scriptsDir = hookScriptsDir(workspaceRoot);
|
|
234
|
+
fs.mkdirSync(scriptsDir, { recursive: true });
|
|
235
|
+
const payloadFile = path.join(scriptsDir, `evt-${Date.now()}-${Math.random().toString(36).slice(2)}.json`);
|
|
236
|
+
fs.writeFileSync(payloadFile, JSON.stringify(payload), 'utf8');
|
|
237
|
+
const script = path.join(scriptsDir, 'hook-event.mjs');
|
|
238
|
+
const jsonl = hooksJsonlPath(workspaceRoot);
|
|
239
|
+
return `${nodeExec()} ${shellQuotePath(script)} ${shellQuotePath(jsonl)} ${shellQuotePath(payloadFile)}`;
|
|
240
|
+
}
|
|
241
|
+
// ---------------------------------------------------------------------------
|
|
242
|
+
// Claude Code hooks (.claude/settings.json)
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
function claudeSettingsPath(workspaceRoot) {
|
|
245
|
+
return path.join(workspaceRoot, '.claude', 'settings.json');
|
|
246
|
+
}
|
|
247
|
+
function readJson(filePath) {
|
|
248
|
+
try {
|
|
249
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return {};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** Hook events that were once registered by autodev but have since been removed from Claude Code. */
|
|
256
|
+
const OBSOLETE_HOOK_EVENTS = ['PostToolBatch', 'UserPromptExpansion'];
|
|
257
|
+
/** Remove autodev entries for any obsolete or unrecognised hook events from a hooks object in-place. */
|
|
258
|
+
function purgeObsoleteHooks(hooks) {
|
|
259
|
+
for (const ev of OBSOLETE_HOOK_EVENTS) {
|
|
260
|
+
if (!hooks[ev]) {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
hooks[ev] = hooks[ev].filter((g) => !g[AUTODEV_MARKER]);
|
|
264
|
+
if (hooks[ev].length === 0) {
|
|
265
|
+
delete hooks[ev];
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* True if the entry's command writes to *this* workspace's JSONL sink.
|
|
271
|
+
* Legacy entries from <= v1.0.71 wrote to `os.homedir()/.autodev/...` (shared
|
|
272
|
+
* across every VS Code instance on the host) — we treat those as not
|
|
273
|
+
* installed so the install flow naturally migrates them on next call.
|
|
274
|
+
*/
|
|
275
|
+
function isCurrentClaudeEntry(group, workspaceRoot) {
|
|
276
|
+
if (!group || group[AUTODEV_MARKER] !== true)
|
|
277
|
+
return false;
|
|
278
|
+
const cmd = group.hooks?.[0]?.command;
|
|
279
|
+
if (typeof cmd !== 'string')
|
|
280
|
+
return false;
|
|
281
|
+
const expectedSink = hooksJsonlPath(workspaceRoot).replace(/\\/g, '/');
|
|
282
|
+
const expectedNode = process.execPath.replace(/\\/g, '/');
|
|
283
|
+
// Also require the .mjs extension so legacy .js installs are re-migrated.
|
|
284
|
+
return cmd.includes(JSON.stringify(expectedSink))
|
|
285
|
+
&& cmd.includes('hook-append.mjs')
|
|
286
|
+
&& cmd.includes(expectedNode);
|
|
287
|
+
}
|
|
288
|
+
function areClaudeHooksInstalled(workspaceRoot) {
|
|
289
|
+
const filePath = claudeSettingsPath(workspaceRoot);
|
|
290
|
+
const raw = readJson(filePath);
|
|
291
|
+
const hooks = raw?.hooks ?? {};
|
|
292
|
+
// Silently clean up obsolete entries whenever we check
|
|
293
|
+
const hadObsolete = OBSOLETE_HOOK_EVENTS.some(ev => (hooks[ev] ?? []).some((g) => g[AUTODEV_MARKER]));
|
|
294
|
+
if (hadObsolete && raw?.hooks) {
|
|
295
|
+
purgeObsoleteHooks(raw.hooks);
|
|
296
|
+
if (Object.keys(raw.hooks).length === 0) {
|
|
297
|
+
delete raw.hooks;
|
|
298
|
+
}
|
|
299
|
+
try {
|
|
300
|
+
fs.writeFileSync(filePath, JSON.stringify(raw, null, 2), 'utf8');
|
|
301
|
+
}
|
|
302
|
+
catch { /* ignore */ }
|
|
303
|
+
}
|
|
304
|
+
// Collect every autodev-marked group across all events
|
|
305
|
+
const allAutodev = CLAUDE_HOOK_EVENTS.flatMap(ev => (hooks[ev] ?? []).filter(g => g[AUTODEV_MARKER] === true));
|
|
306
|
+
if (allAutodev.length === 0)
|
|
307
|
+
return false;
|
|
308
|
+
// Treat as "not installed" if ANY autodev entry is stale (legacy
|
|
309
|
+
// homedir-pointing form, or any other shape) so the migration step
|
|
310
|
+
// re-runs and overwrites the lot with the current per-workspace form.
|
|
311
|
+
return allAutodev.every(g => isCurrentClaudeEntry(g, workspaceRoot));
|
|
312
|
+
}
|
|
313
|
+
function installClaudeHooks(workspaceRoot) {
|
|
314
|
+
ensureHookScripts(workspaceRoot);
|
|
315
|
+
const filePath = claudeSettingsPath(workspaceRoot);
|
|
316
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
317
|
+
const raw = readJson(filePath);
|
|
318
|
+
const hooks = raw.hooks ?? {};
|
|
319
|
+
purgeObsoleteHooks(hooks);
|
|
320
|
+
const claudeCmd = claudeHookCommand(workspaceRoot);
|
|
321
|
+
for (const ev of CLAUDE_HOOK_EVENTS) {
|
|
322
|
+
const groups = (hooks[ev] ?? []).filter(g => !g[AUTODEV_MARKER]);
|
|
323
|
+
groups.push({
|
|
324
|
+
[AUTODEV_MARKER]: true,
|
|
325
|
+
matcher: '',
|
|
326
|
+
hooks: [{ type: 'command', command: claudeCmd }],
|
|
327
|
+
});
|
|
328
|
+
hooks[ev] = groups;
|
|
329
|
+
}
|
|
330
|
+
raw.hooks = hooks;
|
|
331
|
+
fs.writeFileSync(filePath, JSON.stringify(raw, null, 2), 'utf8');
|
|
332
|
+
}
|
|
333
|
+
function uninstallClaudeHooks(workspaceRoot) {
|
|
334
|
+
const filePath = claudeSettingsPath(workspaceRoot);
|
|
335
|
+
const raw = readJson(filePath);
|
|
336
|
+
if (!raw.hooks) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
purgeObsoleteHooks(raw.hooks);
|
|
340
|
+
for (const ev of CLAUDE_HOOK_EVENTS) {
|
|
341
|
+
if (!raw.hooks[ev]) {
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
raw.hooks[ev] = raw.hooks[ev].filter(g => !g[AUTODEV_MARKER]);
|
|
345
|
+
if (raw.hooks[ev].length === 0) {
|
|
346
|
+
delete raw.hooks[ev];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (Object.keys(raw.hooks).length === 0) {
|
|
350
|
+
delete raw.hooks;
|
|
351
|
+
}
|
|
352
|
+
fs.writeFileSync(filePath, JSON.stringify(raw, null, 2), 'utf8');
|
|
353
|
+
}
|
|
354
|
+
// ---------------------------------------------------------------------------
|
|
355
|
+
// Copilot CLI hooks (.github/copilot/settings.json)
|
|
356
|
+
//
|
|
357
|
+
// Copilot CLI loads repo settings from `.github/copilot/settings.json` and
|
|
358
|
+
// `.github/copilot/settings.local.json`. The `hooks` field there has the
|
|
359
|
+
// shape:
|
|
360
|
+
// { "<eventName>": [ { type, bash, powershell?, cwd?, timeoutSec? }, ... ] }
|
|
361
|
+
// Copilot doesn't support a per-entry "marker" field like Claude does (it
|
|
362
|
+
// validates each command strictly), so we identify our own entries by
|
|
363
|
+
// inspecting the `bash` command for our HOOK_COMMAND fingerprint.
|
|
364
|
+
// ---------------------------------------------------------------------------
|
|
365
|
+
function copilotSettingsPath(workspaceRoot) {
|
|
366
|
+
return path.join(workspaceRoot, '.github', 'copilot', 'settings.json');
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* True if the entry was installed by autodev (matches our HOOK_COMMAND, in
|
|
370
|
+
* either the legacy homedir form or the per-workspace form). The legacy
|
|
371
|
+
* command built the path via `p.join(h,".autodev","hooks-events.jsonl")` —
|
|
372
|
+
* separate strings, no slash between them — so a literal `.autodev/...`
|
|
373
|
+
* substring check would miss it. We match on the basename instead, which
|
|
374
|
+
* appears in both forms (legacy as a separate quoted string, current as
|
|
375
|
+
* part of the JSON-stringified absolute path).
|
|
376
|
+
*/
|
|
377
|
+
function isAutodevCopilotEntry(entry) {
|
|
378
|
+
const cmd = entry?.bash ?? entry?.powershell ?? '';
|
|
379
|
+
return typeof cmd === 'string'
|
|
380
|
+
&& cmd.includes('hooks-events.jsonl')
|
|
381
|
+
&& cmd.includes('.autodev');
|
|
382
|
+
}
|
|
383
|
+
/** True if the entry's bash/powershell command writes to *this* workspace's JSONL sink. */
|
|
384
|
+
function isCurrentCopilotEntry(entry, workspaceRoot) {
|
|
385
|
+
if (!isAutodevCopilotEntry(entry))
|
|
386
|
+
return false;
|
|
387
|
+
const expectedSink = hooksJsonlPath(workspaceRoot).replace(/\\/g, '/');
|
|
388
|
+
const expectedNode = process.execPath.replace(/\\/g, '/');
|
|
389
|
+
const cmd = entry?.bash ?? entry?.powershell ?? '';
|
|
390
|
+
// Also require the .mjs extension so legacy .js installs are re-migrated.
|
|
391
|
+
// Also require the powershell field (added in v1.0.218) so Windows installs
|
|
392
|
+
// without it are treated as stale and re-installed with both fields.
|
|
393
|
+
return typeof cmd === 'string'
|
|
394
|
+
&& cmd.includes(JSON.stringify(expectedSink))
|
|
395
|
+
&& cmd.includes('hook-append.mjs')
|
|
396
|
+
&& cmd.includes(expectedNode)
|
|
397
|
+
&& typeof entry?.powershell === 'string';
|
|
398
|
+
}
|
|
399
|
+
function areCopilotHooksInstalled(workspaceRoot) {
|
|
400
|
+
const filePath = copilotSettingsPath(workspaceRoot);
|
|
401
|
+
const raw = readJson(filePath);
|
|
402
|
+
const hooks = raw?.hooks ?? {};
|
|
403
|
+
const allAutodev = COPILOT_HOOK_EVENTS.flatMap(ev => (hooks[ev] ?? []).filter(isAutodevCopilotEntry));
|
|
404
|
+
if (allAutodev.length === 0)
|
|
405
|
+
return false;
|
|
406
|
+
// Same migration trigger as Claude: any stale entry → reinstall.
|
|
407
|
+
return allAutodev.every(e => isCurrentCopilotEntry(e, workspaceRoot));
|
|
408
|
+
}
|
|
409
|
+
function installCopilotHooks(workspaceRoot) {
|
|
410
|
+
ensureHookScripts(workspaceRoot);
|
|
411
|
+
const filePath = copilotSettingsPath(workspaceRoot);
|
|
412
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
413
|
+
const raw = readJson(filePath);
|
|
414
|
+
const hooks = raw.hooks ?? {};
|
|
415
|
+
for (const ev of COPILOT_HOOK_EVENTS) {
|
|
416
|
+
const existing = (hooks[ev] ?? []).filter(e => !isAutodevCopilotEntry(e));
|
|
417
|
+
existing.push({
|
|
418
|
+
type: 'command',
|
|
419
|
+
// bash: used by copilot on Linux/macOS (and by Git Bash on Windows)
|
|
420
|
+
bash: copilotHookCommand(ev, workspaceRoot),
|
|
421
|
+
// powershell: used by copilot on Windows — WSL bash cannot resolve
|
|
422
|
+
// Windows drive-letter paths (h:/...) so we supply a native PS command.
|
|
423
|
+
powershell: copilotPowershellHookCommand(ev, workspaceRoot),
|
|
424
|
+
timeoutSec: 30,
|
|
425
|
+
});
|
|
426
|
+
hooks[ev] = existing;
|
|
427
|
+
}
|
|
428
|
+
raw.hooks = hooks;
|
|
429
|
+
fs.writeFileSync(filePath, JSON.stringify(raw, null, 2), 'utf8');
|
|
430
|
+
}
|
|
431
|
+
function uninstallCopilotHooks(workspaceRoot) {
|
|
432
|
+
const filePath = copilotSettingsPath(workspaceRoot);
|
|
433
|
+
const raw = readJson(filePath);
|
|
434
|
+
if (!raw.hooks) {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
for (const ev of COPILOT_HOOK_EVENTS) {
|
|
438
|
+
if (!raw.hooks[ev]) {
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
raw.hooks[ev] = raw.hooks[ev].filter(e => !isAutodevCopilotEntry(e));
|
|
442
|
+
if (raw.hooks[ev].length === 0) {
|
|
443
|
+
delete raw.hooks[ev];
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
if (Object.keys(raw.hooks).length === 0) {
|
|
447
|
+
delete raw.hooks;
|
|
448
|
+
}
|
|
449
|
+
fs.writeFileSync(filePath, JSON.stringify(raw, null, 2), 'utf8');
|
|
450
|
+
}
|
|
451
|
+
// ---------------------------------------------------------------------------
|
|
452
|
+
// Combined helpers — install/uninstall both Claude + Copilot in one call so
|
|
453
|
+
// the user doesn't have to think about which provider they're running.
|
|
454
|
+
// ---------------------------------------------------------------------------
|
|
455
|
+
function installHooks(scope, workspaceRoot) {
|
|
456
|
+
// Scope arg kept for backwards compatibility — always project now.
|
|
457
|
+
void scope;
|
|
458
|
+
installClaudeHooks(workspaceRoot);
|
|
459
|
+
installCopilotHooks(workspaceRoot);
|
|
460
|
+
}
|
|
461
|
+
function uninstallHooks(scope, workspaceRoot) {
|
|
462
|
+
void scope;
|
|
463
|
+
uninstallClaudeHooks(workspaceRoot);
|
|
464
|
+
uninstallCopilotHooks(workspaceRoot);
|
|
465
|
+
}
|
|
466
|
+
function areHooksInstalled(scope, workspaceRoot) {
|
|
467
|
+
void scope;
|
|
468
|
+
// Either side counts as "installed" — the UI shows a single combined state.
|
|
469
|
+
return areClaudeHooksInstalled(workspaceRoot) || areCopilotHooksInstalled(workspaceRoot);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=hooksManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooksManager.js","sourceRoot":"","sources":["../src/hooksManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type IdeId = 'vscode' | 'cursor';
|
|
2
|
+
export declare function isIdeId(value: string): value is IdeId;
|
|
3
|
+
/** Resolve an IDE launcher executable (the shim, e.g. `code.cmd` on Windows). */
|
|
4
|
+
export declare function resolveIdeExecutable(ide: IdeId): string | null;
|
|
5
|
+
/** Open the workspace folder in the chosen IDE. Detached so the CLI can exit. */
|
|
6
|
+
export declare function launchIde(ide: IdeId, cwd: string, opts?: {
|
|
7
|
+
newWindow?: boolean;
|
|
8
|
+
}): boolean;
|
|
9
|
+
/** Returns true if the autoaidev extension is already installed in the IDE. */
|
|
10
|
+
export declare function isAutodevExtensionInstalled(ide: IdeId): boolean;
|
|
11
|
+
/** Install the autoaidev extension into the IDE. Accepts a marketplace id or a .vsix path. */
|
|
12
|
+
export declare function installAutodevExtension(ide: IdeId, source?: string): boolean;
|
|
13
|
+
/** Look for a sibling autoaidev VSIX next to the CLI install (for local/dev installs). */
|
|
14
|
+
export declare function findBundledVsix(): string | null;
|
package/out/logger.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const log: {
|
|
2
|
+
info: (msg: string) => void;
|
|
3
|
+
success: (msg: string) => void;
|
|
4
|
+
warn: (msg: string) => void;
|
|
5
|
+
error: (msg: string) => void;
|
|
6
|
+
task: (msg: string) => void;
|
|
7
|
+
plain: (msg: string) => void;
|
|
8
|
+
gray: (msg: string) => void;
|
|
9
|
+
section: (msg: string) => void;
|
|
10
|
+
/** Routes based on message prefix (matches what taskLoop emits). */
|
|
11
|
+
auto: (msg: string) => void;
|
|
12
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface EmailTestEnv {
|
|
2
|
+
MCP_EMAIL_SERVER_ACCOUNT_NAME: string;
|
|
3
|
+
MCP_EMAIL_SERVER_FULL_NAME?: string;
|
|
4
|
+
MCP_EMAIL_SERVER_EMAIL_ADDRESS: string;
|
|
5
|
+
MCP_EMAIL_SERVER_USER_NAME?: string;
|
|
6
|
+
MCP_EMAIL_SERVER_PASSWORD: string;
|
|
7
|
+
MCP_EMAIL_SERVER_IMAP_HOST: string;
|
|
8
|
+
MCP_EMAIL_SERVER_IMAP_PORT: string;
|
|
9
|
+
MCP_EMAIL_SERVER_IMAP_SSL: string;
|
|
10
|
+
MCP_EMAIL_SERVER_IMAP_VERIFY_SSL: string;
|
|
11
|
+
MCP_EMAIL_SERVER_SMTP_HOST: string;
|
|
12
|
+
MCP_EMAIL_SERVER_SMTP_PORT: string;
|
|
13
|
+
MCP_EMAIL_SERVER_SMTP_SSL: string;
|
|
14
|
+
MCP_EMAIL_SERVER_SMTP_START_SSL: string;
|
|
15
|
+
MCP_EMAIL_SERVER_SMTP_VERIFY_SSL: string;
|
|
16
|
+
[k: string]: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface ServerTestResult {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
/** Top-level summary message shown in the UI. */
|
|
21
|
+
message: string;
|
|
22
|
+
/** Per-step lines: spawn, initialize, tools/list, IMAP read. */
|
|
23
|
+
steps: {
|
|
24
|
+
name: string;
|
|
25
|
+
ok: boolean;
|
|
26
|
+
detail?: string;
|
|
27
|
+
}[];
|
|
28
|
+
}
|
|
29
|
+
export declare function testEmailViaMcp(env: EmailTestEnv): Promise<ServerTestResult>;
|