@pennyfarthing/cyclist 9.3.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/hook-request.d.ts +11 -0
- package/dist/api/hook-request.d.ts.map +1 -1
- package/dist/api/hook-request.js +126 -28
- package/dist/api/hook-request.js.map +1 -1
- package/dist/api/hotspots.d.ts +3 -0
- package/dist/api/hotspots.d.ts.map +1 -0
- package/dist/api/hotspots.js +54 -0
- package/dist/api/hotspots.js.map +1 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/permissions.d.ts +16 -0
- package/dist/api/permissions.d.ts.map +1 -0
- package/dist/api/permissions.js +67 -0
- package/dist/api/permissions.js.map +1 -0
- package/dist/api/settings.d.ts +1 -1
- package/dist/api/settings.d.ts.map +1 -1
- package/dist/api/settings.js +44 -17
- package/dist/api/settings.js.map +1 -1
- package/dist/api/theme-agents.d.ts +4 -0
- package/dist/api/theme-agents.d.ts.map +1 -1
- package/dist/api/theme-agents.js +3 -0
- package/dist/api/theme-agents.js.map +1 -1
- package/dist/approval-gate.d.ts +3 -75
- package/dist/approval-gate.d.ts.map +1 -1
- package/dist/approval-gate.js +4 -121
- package/dist/approval-gate.js.map +1 -1
- package/dist/hooks/cyclist-pretooluse-hook.d.ts +60 -0
- package/dist/hooks/cyclist-pretooluse-hook.d.ts.map +1 -0
- package/dist/hooks/cyclist-pretooluse-hook.js +57 -0
- package/dist/hooks/cyclist-pretooluse-hook.js.map +1 -0
- package/dist/hooks/pretooluse-hook.d.ts +89 -0
- package/dist/hooks/pretooluse-hook.d.ts.map +1 -0
- package/dist/hooks/pretooluse-hook.js +235 -0
- package/dist/hooks/pretooluse-hook.js.map +1 -0
- package/dist/main.d.ts +1 -134
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +42 -373
- package/dist/main.js.map +1 -1
- package/dist/menu-builder.d.ts +7 -1
- package/dist/menu-builder.d.ts.map +1 -1
- package/dist/menu-builder.js +36 -1
- package/dist/menu-builder.js.map +1 -1
- package/dist/otlp-receiver.d.ts.map +1 -1
- package/dist/otlp-receiver.js +6 -0
- package/dist/otlp-receiver.js.map +1 -1
- package/dist/public/css/react.css +1 -1
- package/dist/public/js/react/react.js +42 -42
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -3
- package/dist/server.js.map +1 -1
- package/dist/settings-store.d.ts +3 -1
- package/dist/settings-store.d.ts.map +1 -1
- package/dist/settings-store.js +18 -9
- package/dist/settings-store.js.map +1 -1
- package/dist/story-parser.d.ts +17 -0
- package/dist/story-parser.d.ts.map +1 -1
- package/dist/story-parser.js +183 -13
- package/dist/story-parser.js.map +1 -1
- package/dist/websocket.d.ts +1 -0
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +48 -5
- package/dist/websocket.js.map +1 -1
- package/dist/workflow-presets.d.ts +72 -0
- package/dist/workflow-presets.d.ts.map +1 -0
- package/dist/workflow-presets.js +93 -0
- package/dist/workflow-presets.js.map +1 -0
- package/package.json +2 -2
- package/src/public/App.tsx +61 -1
- package/src/public/components/ApprovalModal/index.tsx +31 -1
- package/src/public/components/ControlBar.tsx +19 -20
- package/src/public/components/DockviewWorkspace.tsx +39 -5
- package/src/public/components/FontPicker/index.tsx +118 -33
- package/src/public/components/FullFileTree.tsx +223 -0
- package/src/public/components/Message.tsx +89 -11
- package/src/public/components/MessageView.tsx +206 -93
- package/src/public/components/PersonaHeader.tsx +47 -15
- package/src/public/components/SubagentSpan.tsx +15 -8
- package/src/public/components/panels/BackgroundPanel.tsx +1 -1
- package/src/public/components/panels/ChangedPanel.tsx +30 -44
- package/src/public/components/panels/HotspotsPanel.tsx +365 -0
- package/src/public/components/panels/MessagePanel.tsx +79 -5
- package/src/public/components/panels/SettingsPanel.tsx +3 -28
- package/src/public/components/panels/WorkflowPanel.tsx +108 -13
- package/src/public/components/panels/index.ts +1 -0
- package/src/public/contexts/ClaudeContext.tsx +16 -1
- package/src/public/css/theme-system.css +46 -38
- package/src/public/hooks/useColorScheme.ts +27 -0
- package/src/public/hooks/useFileBrowser.ts +71 -0
- package/src/public/hooks/useHotspots.ts +113 -0
- package/src/public/hooks/usePlanModeExit.ts +105 -0
- package/src/public/hooks/useStory.ts +12 -3
- package/src/public/images/cyclist-dark.png +0 -0
- package/src/public/images/cyclist-light.png +0 -0
- package/src/public/styles/dockview-theme.css +31 -33
- package/src/public/styles/tailwind.css +417 -58
- package/src/public/types/message.ts +6 -1
- package/src/public/utils/markdown.ts +2 -2
- package/src/public/utils/slash-commands.ts +1 -1
- package/src/public/utils/toolStackGrouper.ts +5 -6
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cyclist PreToolUse Hook - Core Logic
|
|
3
|
+
*
|
|
4
|
+
* Testable module containing all hook logic. The companion runner script
|
|
5
|
+
* (cyclist-pretooluse-hook.js) imports from the compiled output and invokes main().
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Claude Code calls the runner script with tool info via stdin (JSON)
|
|
9
|
+
* 2. Script reads port from .cyclist-port in project directory
|
|
10
|
+
* 3. Script sends request to WheelHub's /api/hook-request endpoint
|
|
11
|
+
* 4. WheelHub checks grants / shows approval modal, user decides
|
|
12
|
+
* 5. Script receives response, outputs JSON decision to stdout
|
|
13
|
+
* 6. Claude Code proceeds or blocks based on decision
|
|
14
|
+
*
|
|
15
|
+
* Per ADR-0004: All communication converges through WheelHub.
|
|
16
|
+
*
|
|
17
|
+
* Story: MSSCI-14320 - Update and register PreToolUse hook
|
|
18
|
+
*/
|
|
19
|
+
import http from 'node:http';
|
|
20
|
+
import fs from 'node:fs';
|
|
21
|
+
import path from 'node:path';
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Constants
|
|
24
|
+
// =============================================================================
|
|
25
|
+
export const DEFAULT_PORT = 7432;
|
|
26
|
+
export const HOST = '127.0.0.1';
|
|
27
|
+
export const TIMEOUT_MS = 120_000; // 2 minutes for user to decide
|
|
28
|
+
export const PORT_FILE = '.cyclist-port';
|
|
29
|
+
export const LEGACY_PORT_FILE = '.cyclist-approval-port';
|
|
30
|
+
export const ENDPOINT = '/api/hook-request';
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Project Root Detection
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Find the project root by looking for port files or .claude directory.
|
|
36
|
+
* Walks up from startDir (defaults to cwd) until found or reaches filesystem root.
|
|
37
|
+
*/
|
|
38
|
+
export function findProjectRoot(startDir) {
|
|
39
|
+
let dir = startDir ?? process.cwd();
|
|
40
|
+
const root = path.parse(dir).root;
|
|
41
|
+
while (dir !== root) {
|
|
42
|
+
if (fs.existsSync(path.join(dir, PORT_FILE))) {
|
|
43
|
+
return dir;
|
|
44
|
+
}
|
|
45
|
+
if (fs.existsSync(path.join(dir, LEGACY_PORT_FILE))) {
|
|
46
|
+
return dir;
|
|
47
|
+
}
|
|
48
|
+
if (fs.existsSync(path.join(dir, '.claude'))) {
|
|
49
|
+
return dir;
|
|
50
|
+
}
|
|
51
|
+
dir = path.dirname(dir);
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
// =============================================================================
|
|
56
|
+
// Port Discovery
|
|
57
|
+
// =============================================================================
|
|
58
|
+
/**
|
|
59
|
+
* Read the WheelHub server port. Prefers .cyclist-port, falls back to
|
|
60
|
+
* .cyclist-approval-port for migration compatibility, then default port.
|
|
61
|
+
*
|
|
62
|
+
* Mirrors hooks.py:get_cyclist_port() behavior.
|
|
63
|
+
*/
|
|
64
|
+
export function getPort(projectRoot) {
|
|
65
|
+
const root = projectRoot ?? findProjectRoot();
|
|
66
|
+
if (!root) {
|
|
67
|
+
return DEFAULT_PORT;
|
|
68
|
+
}
|
|
69
|
+
// Try canonical port file first
|
|
70
|
+
const port = readPortFile(path.join(root, PORT_FILE));
|
|
71
|
+
if (port !== null) {
|
|
72
|
+
return port;
|
|
73
|
+
}
|
|
74
|
+
// Fall back to legacy port file
|
|
75
|
+
const legacyPort = readPortFile(path.join(root, LEGACY_PORT_FILE));
|
|
76
|
+
if (legacyPort !== null) {
|
|
77
|
+
return legacyPort;
|
|
78
|
+
}
|
|
79
|
+
return DEFAULT_PORT;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Read a port number from a file. Returns null if file doesn't exist or is invalid.
|
|
83
|
+
*/
|
|
84
|
+
export function readPortFile(filePath) {
|
|
85
|
+
if (!fs.existsSync(filePath)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const content = fs.readFileSync(filePath, 'utf-8').trim();
|
|
90
|
+
const port = parseInt(content, 10);
|
|
91
|
+
if (!isNaN(port) && port > 0 && port < 65536) {
|
|
92
|
+
return port;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Fall through
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
// =============================================================================
|
|
101
|
+
// Stdin Reading
|
|
102
|
+
// =============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Read all stdin as JSON.
|
|
105
|
+
*/
|
|
106
|
+
export async function readStdin() {
|
|
107
|
+
return new Promise((resolve, reject) => {
|
|
108
|
+
let data = '';
|
|
109
|
+
process.stdin.setEncoding('utf8');
|
|
110
|
+
process.stdin.on('data', (chunk) => { data += chunk; });
|
|
111
|
+
process.stdin.on('end', () => {
|
|
112
|
+
try {
|
|
113
|
+
resolve(JSON.parse(data));
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
reject(new Error(`Invalid JSON input: ${e.message}`));
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
process.stdin.on('error', reject);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// =============================================================================
|
|
123
|
+
// HTTP Request
|
|
124
|
+
// =============================================================================
|
|
125
|
+
/**
|
|
126
|
+
* Send approval request to WheelHub and wait for response.
|
|
127
|
+
* Returns { decision: "ask" } when WheelHub is unreachable (ECONNREFUSED).
|
|
128
|
+
*/
|
|
129
|
+
export async function requestApproval(toolData, port) {
|
|
130
|
+
const resolvedPort = port ?? getPort();
|
|
131
|
+
const postData = JSON.stringify(toolData);
|
|
132
|
+
return new Promise((resolve, reject) => {
|
|
133
|
+
const options = {
|
|
134
|
+
hostname: HOST,
|
|
135
|
+
port: resolvedPort,
|
|
136
|
+
path: ENDPOINT,
|
|
137
|
+
method: 'POST',
|
|
138
|
+
headers: {
|
|
139
|
+
'Content-Type': 'application/json',
|
|
140
|
+
'Content-Length': Buffer.byteLength(postData),
|
|
141
|
+
},
|
|
142
|
+
timeout: TIMEOUT_MS,
|
|
143
|
+
};
|
|
144
|
+
const req = http.request(options, (res) => {
|
|
145
|
+
let data = '';
|
|
146
|
+
res.on('data', (chunk) => { data += chunk; });
|
|
147
|
+
res.on('end', () => {
|
|
148
|
+
try {
|
|
149
|
+
resolve(JSON.parse(data));
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
reject(new Error(`Invalid response from WheelHub: ${e.message}`));
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
req.on('error', (e) => {
|
|
157
|
+
if (e.code === 'ECONNREFUSED') {
|
|
158
|
+
resolve({ decision: 'ask', reason: 'WheelHub not running, deferring to Claude Code' });
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
reject(e);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
req.on('timeout', () => {
|
|
165
|
+
req.destroy();
|
|
166
|
+
reject(new Error('Approval request timed out'));
|
|
167
|
+
});
|
|
168
|
+
req.write(postData);
|
|
169
|
+
req.end();
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// =============================================================================
|
|
173
|
+
// Output Formatting
|
|
174
|
+
// =============================================================================
|
|
175
|
+
/**
|
|
176
|
+
* Build the Claude Code hook output object.
|
|
177
|
+
* MSSCI-11947: Supports updatedInput passthrough for interactive tools.
|
|
178
|
+
*/
|
|
179
|
+
export function buildOutput(decision, reason, updatedInput) {
|
|
180
|
+
const output = {
|
|
181
|
+
hookSpecificOutput: {
|
|
182
|
+
hookEventName: 'PreToolUse',
|
|
183
|
+
permissionDecision: decision,
|
|
184
|
+
permissionDecisionReason: reason,
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
if (updatedInput) {
|
|
188
|
+
output.hookSpecificOutput.updatedInput = updatedInput;
|
|
189
|
+
}
|
|
190
|
+
return output;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Output decision to stdout in Claude Code hook format.
|
|
194
|
+
*/
|
|
195
|
+
export function outputDecision(decision, reason, updatedInput) {
|
|
196
|
+
console.log(JSON.stringify(buildOutput(decision, reason, updatedInput)));
|
|
197
|
+
}
|
|
198
|
+
// =============================================================================
|
|
199
|
+
// Main Entry Point
|
|
200
|
+
// =============================================================================
|
|
201
|
+
/**
|
|
202
|
+
* Main hook logic. Reads stdin, sends to WheelHub, outputs decision.
|
|
203
|
+
* MSSCI-11947: Handles data field passthrough for interactive tools.
|
|
204
|
+
*/
|
|
205
|
+
export async function main() {
|
|
206
|
+
try {
|
|
207
|
+
const toolData = await readStdin();
|
|
208
|
+
const { tool_name, tool_input, tool_use_id, session_id } = toolData;
|
|
209
|
+
const response = await requestApproval({
|
|
210
|
+
toolName: tool_name,
|
|
211
|
+
toolId: tool_use_id,
|
|
212
|
+
input: tool_input,
|
|
213
|
+
sessionId: session_id,
|
|
214
|
+
});
|
|
215
|
+
if (response.decision === 'allow') {
|
|
216
|
+
outputDecision('allow', response.reason || 'Approved by user', response.data || null);
|
|
217
|
+
}
|
|
218
|
+
else if (response.decision === 'deny') {
|
|
219
|
+
outputDecision('deny', response.reason || 'Rejected by user', response.data || null);
|
|
220
|
+
}
|
|
221
|
+
else if (response.decision === 'ask') {
|
|
222
|
+
outputDecision('ask', response.reason || 'Deferred to Claude Code');
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// Unknown decision - defer to Claude Code rather than silently allowing
|
|
226
|
+
outputDecision('ask', 'Unknown response from WheelHub');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error(`[cyclist-hook] Error: ${error.message}`);
|
|
231
|
+
// Output ask so Claude Code shows its built-in dialog, don't silently allow
|
|
232
|
+
outputDecision('ask', 'Hook error, deferring to Claude Code');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=pretooluse-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretooluse-hook.js","sourceRoot":"","sources":["../../src/hooks/pretooluse-hook.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
CHANGED
|
@@ -14,10 +14,9 @@ import { type TodoItem } from './todos.js';
|
|
|
14
14
|
import { getProjectDirectory, setProjectDirectory, isValidProjectDirectory } from './paths.js';
|
|
15
15
|
import { ContextInfo } from './api/context.js';
|
|
16
16
|
import { type CyclistSettings, type SettingsInput } from './settings.js';
|
|
17
|
-
import { type ToolUseMessage, type SDKToolResultError } from './approval-gate.js';
|
|
18
17
|
export { getProjectDirectory, setProjectDirectory, isValidProjectDirectory };
|
|
19
18
|
export { IPC_DATA_CHANNELS, IPC_CLAUDE_CHANNELS, IPC_AGENT_CHANNELS, IPC_DIFF_CHANNELS, IPC_SETTINGS_CHANNELS, IPC_AUDIT_LOG_CHANNELS, IPC_FILE_BROWSER_CHANNELS, IPC_COMMAND_CHANNELS, IPC_BACKGROUND_TASK_CHANNELS, IPC_SKILL_CHANNELS, IPC_CONTEXT_CLEAR_CHANNELS, IPC_LAYOUT_CHANNELS, IPC_AVATAR_CHANNELS, } from './ipc-channels.js';
|
|
20
|
-
export { AgentDefinition, WorkflowDefinition, AGENT_DEFINITIONS, WORKFLOW_DEFINITIONS, buildAgentMenu, buildWorkflowMenu, buildToolsMenu, buildViewMenu, getMenuTemplate, } from './menu-builder.js';
|
|
19
|
+
export { AgentDefinition, WorkflowDefinition, AGENT_DEFINITIONS, WORKFLOW_DEFINITIONS, buildAgentMenu, buildWorkflowMenu, buildToolsMenu, buildViewMenu, getMenuTemplate, setPanelToggleBroadcast, } from './menu-builder.js';
|
|
21
20
|
/**
|
|
22
21
|
* Get list of registered data IPC channels (for testing)
|
|
23
22
|
* Returns the data channels that setupDataIPCHandlers will register
|
|
@@ -329,138 +328,6 @@ export declare function getCommandChannels(): string[];
|
|
|
329
328
|
export declare function setupCommandIPCHandlers(ipcMain: {
|
|
330
329
|
handle: (channel: string, handler: (event: unknown, ...args: unknown[]) => Promise<unknown>) => void;
|
|
331
330
|
}): void;
|
|
332
|
-
/**
|
|
333
|
-
* Result from processToolUseWithApproval
|
|
334
|
-
*/
|
|
335
|
-
export interface ApprovalResult {
|
|
336
|
-
needsApproval: boolean;
|
|
337
|
-
passThrough: boolean;
|
|
338
|
-
approved?: boolean;
|
|
339
|
-
rejected?: boolean;
|
|
340
|
-
errorMessage?: SDKToolResultError;
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Set the IPC sender function (for testing)
|
|
344
|
-
*/
|
|
345
|
-
export declare function setIPCSender(sender: ((channel: string, data: unknown) => void) | null): void;
|
|
346
|
-
/**
|
|
347
|
-
* Set the tool executor function (for testing)
|
|
348
|
-
*/
|
|
349
|
-
export declare function setToolExecutor(executor: ((message: ToolUseMessage) => void) | null): void;
|
|
350
|
-
/**
|
|
351
|
-
* Set the error injector function (for testing)
|
|
352
|
-
*/
|
|
353
|
-
export declare function setErrorInjector(injector: ((error: SDKToolResultError) => void) | null): void;
|
|
354
|
-
/**
|
|
355
|
-
* Send an approval request to the renderer via IPC
|
|
356
|
-
*/
|
|
357
|
-
export declare function sendApprovalRequest(toolId: string, toolName: string, context: Record<string, unknown>): void;
|
|
358
|
-
/**
|
|
359
|
-
* Handle permission response from renderer
|
|
360
|
-
* Called by IPC handler when user responds to approval modal
|
|
361
|
-
*/
|
|
362
|
-
export declare function handlePermissionResponse(response: {
|
|
363
|
-
toolId: string;
|
|
364
|
-
approved: boolean;
|
|
365
|
-
grantScope?: 'once' | 'session' | 'always';
|
|
366
|
-
}): void;
|
|
367
|
-
/**
|
|
368
|
-
* Process a tool_use message with approval gate check
|
|
369
|
-
* This is the main integration point for story 33-7
|
|
370
|
-
*
|
|
371
|
-
* @param message - The tool_use message to process
|
|
372
|
-
* @returns ApprovalResult indicating whether approval is needed and outcome
|
|
373
|
-
*/
|
|
374
|
-
export declare function processToolUseWithApproval(message: ToolUseMessage): Promise<ApprovalResult>;
|
|
375
|
-
/**
|
|
376
|
-
* Set up IPC handlers for approval gate
|
|
377
|
-
* Story 33-7: Handles permission request/response flow
|
|
378
|
-
*/
|
|
379
|
-
export declare function setupApprovalIPCHandlers(ipcMain: {
|
|
380
|
-
handle?: (channel: string, handler: (event: unknown, ...args: unknown[]) => Promise<unknown>) => void;
|
|
381
|
-
on?: (channel: string, handler: (event: unknown, ...args: unknown[]) => void) => void;
|
|
382
|
-
}): void;
|
|
383
|
-
/**
|
|
384
|
-
* Resolve a pending hook approval (called when user responds to modal)
|
|
385
|
-
*/
|
|
386
|
-
export declare function resolveHookApproval(toolId: string, approved: boolean, grantScope?: 'once' | 'session' | 'always'): void;
|
|
387
|
-
/**
|
|
388
|
-
* Check if a tool_use is an interactive tool that needs data return
|
|
389
|
-
* MSSCI-11947: AC1 - Detect AskUserQuestion and ExitPlanMode
|
|
390
|
-
*/
|
|
391
|
-
export declare function isInteractiveToolUse(toolUse: {
|
|
392
|
-
tool_name?: string;
|
|
393
|
-
type?: string;
|
|
394
|
-
}): boolean;
|
|
395
|
-
/**
|
|
396
|
-
* Process an interactive tool_use and wait for user response with data
|
|
397
|
-
* MSSCI-11947: AC1 - Handle interactive tool approval flow
|
|
398
|
-
*/
|
|
399
|
-
export declare function processInteractiveToolUse(toolUse: {
|
|
400
|
-
tool_name?: string;
|
|
401
|
-
tool_id?: string;
|
|
402
|
-
input?: Record<string, unknown>;
|
|
403
|
-
}): Promise<{
|
|
404
|
-
decision: string;
|
|
405
|
-
reason: string;
|
|
406
|
-
data?: Record<string, unknown>;
|
|
407
|
-
}>;
|
|
408
|
-
/**
|
|
409
|
-
* Resolve a pending hook approval with data (for interactive tools)
|
|
410
|
-
* MSSCI-11947: AC1 - Extended resolve that includes data field
|
|
411
|
-
*/
|
|
412
|
-
export declare function resolveHookApprovalWithData(toolId: string, approved: boolean, grantScope?: 'once' | 'session' | 'always', data?: Record<string, unknown>): void;
|
|
413
|
-
/**
|
|
414
|
-
* Format hook response with optional data field
|
|
415
|
-
* MSSCI-11947: AC4 - Format response for hook output
|
|
416
|
-
*/
|
|
417
|
-
export declare function formatHookResponseWithData(decision: 'allow' | 'deny', reason: string, data?: Record<string, unknown>): {
|
|
418
|
-
decision: string;
|
|
419
|
-
reason: string;
|
|
420
|
-
data?: Record<string, unknown>;
|
|
421
|
-
};
|
|
422
|
-
/**
|
|
423
|
-
* Format answers as updatedInput for AskUserQuestion
|
|
424
|
-
* MSSCI-11947: AC4 - Format for hook updatedInput
|
|
425
|
-
*/
|
|
426
|
-
export declare function formatUpdatedInputForAskUserQuestion(answers: Record<string, string | string[]>): {
|
|
427
|
-
answers: Record<string, string | string[]>;
|
|
428
|
-
};
|
|
429
|
-
/**
|
|
430
|
-
* Format plan response as updatedInput for ExitPlanMode
|
|
431
|
-
* MSSCI-11947: AC4 - Format for hook updatedInput
|
|
432
|
-
*/
|
|
433
|
-
export declare function formatUpdatedInputForExitPlanMode(response: {
|
|
434
|
-
approved: boolean;
|
|
435
|
-
feedback?: string;
|
|
436
|
-
}): {
|
|
437
|
-
approved: boolean;
|
|
438
|
-
feedback?: string;
|
|
439
|
-
};
|
|
440
|
-
/**
|
|
441
|
-
* Serialize approval data for transmission
|
|
442
|
-
* MSSCI-11947: AC1 - JSON serialization helper
|
|
443
|
-
*/
|
|
444
|
-
export declare function serializeApprovalData(data: Record<string, unknown>): string;
|
|
445
|
-
/**
|
|
446
|
-
* Deserialize approval data from transmission
|
|
447
|
-
* MSSCI-11947: AC1 - JSON deserialization helper
|
|
448
|
-
*/
|
|
449
|
-
export declare function deserializeApprovalData(data: string): Record<string, unknown>;
|
|
450
|
-
/**
|
|
451
|
-
* Start the approval hook server with dynamic port selection
|
|
452
|
-
* Uses port 0 to let OS assign an available port (avoids race conditions)
|
|
453
|
-
* Writes port to .cyclist-approval-port for hook discovery
|
|
454
|
-
*/
|
|
455
|
-
export declare function startApprovalServer(): Promise<void>;
|
|
456
|
-
/**
|
|
457
|
-
* Stop the approval hook server and clean up port file
|
|
458
|
-
*/
|
|
459
|
-
export declare function stopApprovalServer(): void;
|
|
460
|
-
/**
|
|
461
|
-
* Get the current approval server port (for testing)
|
|
462
|
-
*/
|
|
463
|
-
export declare function getApprovalServerPort(): number | null;
|
|
464
331
|
/**
|
|
465
332
|
* Save session ID to file for persistence across app restarts
|
|
466
333
|
* E7-3: Session persistence support
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAkB,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAyB9E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI7E,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EAExB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAmB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|