codevf 1.0.0 → 1.0.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/LICENSE +30 -21
- package/README.md +6 -1
- package/bin/codevf-mcp.js +11 -0
- package/dist/commands/fix.d.ts +5 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +170 -13
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +72 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-tools.d.ts +17 -0
- package/dist/commands/mcp-tools.d.ts.map +1 -0
- package/dist/commands/mcp-tools.js +237 -0
- package/dist/commands/mcp-tools.js.map +1 -0
- package/dist/commands/setup.d.ts +8 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +250 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/welcome.d.ts +9 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +175 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/index.js +194 -149
- package/dist/index.js.map +1 -1
- package/dist/lib/api/client.d.ts +28 -0
- package/dist/lib/api/client.d.ts.map +1 -0
- package/dist/lib/api/client.js +66 -0
- package/dist/lib/api/client.js.map +1 -0
- package/dist/lib/api/tasks.d.ts +36 -0
- package/dist/lib/api/tasks.d.ts.map +1 -0
- package/dist/lib/api/tasks.js +62 -0
- package/dist/lib/api/tasks.js.map +1 -0
- package/dist/lib/api/websocket.d.ts +50 -0
- package/dist/lib/api/websocket.d.ts.map +1 -0
- package/dist/lib/api/websocket.js +153 -0
- package/dist/lib/api/websocket.js.map +1 -0
- package/dist/lib/auth/oauth-flow.d.ts +37 -0
- package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
- package/dist/lib/auth/oauth-flow.js +119 -0
- package/dist/lib/auth/oauth-flow.js.map +1 -0
- package/dist/lib/auth/token-manager.d.ts +26 -0
- package/dist/lib/auth/token-manager.d.ts.map +1 -0
- package/dist/lib/auth/token-manager.js +87 -0
- package/dist/lib/auth/token-manager.js.map +1 -0
- package/dist/lib/config/manager.d.ts +50 -0
- package/dist/lib/config/manager.d.ts.map +1 -0
- package/dist/lib/config/manager.js +84 -0
- package/dist/lib/config/manager.js.map +1 -0
- package/dist/lib/utils/errors.d.ts +28 -0
- package/dist/lib/utils/errors.d.ts.map +1 -0
- package/dist/lib/utils/errors.js +44 -0
- package/dist/lib/utils/errors.js.map +1 -0
- package/dist/lib/utils/logger.d.ts +20 -0
- package/dist/lib/utils/logger.d.ts.map +1 -0
- package/dist/lib/utils/logger.js +40 -0
- package/dist/lib/utils/logger.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +158 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools/chat.d.ts +30 -0
- package/dist/mcp/tools/chat.d.ts.map +1 -0
- package/dist/mcp/tools/chat.js +82 -0
- package/dist/mcp/tools/chat.js.map +1 -0
- package/dist/mcp/tools/instant.d.ts +36 -0
- package/dist/mcp/tools/instant.d.ts.map +1 -0
- package/dist/mcp/tools/instant.js +100 -0
- package/dist/mcp/tools/instant.js.map +1 -0
- package/dist/modules/aiAgent.d.ts +75 -0
- package/dist/modules/aiAgent.d.ts.map +1 -0
- package/dist/modules/aiAgent.js +707 -0
- package/dist/modules/aiAgent.js.map +1 -0
- package/dist/modules/api.d.ts +7 -0
- package/dist/modules/api.d.ts.map +1 -1
- package/dist/modules/api.js +13 -4
- package/dist/modules/api.js.map +1 -1
- package/dist/modules/commandHandler.d.ts +40 -0
- package/dist/modules/commandHandler.d.ts.map +1 -0
- package/dist/modules/commandHandler.js +345 -0
- package/dist/modules/commandHandler.js.map +1 -0
- package/dist/modules/config.d.ts +2 -0
- package/dist/modules/config.d.ts.map +1 -1
- package/dist/modules/config.js +9 -0
- package/dist/modules/config.js.map +1 -1
- package/dist/modules/constants.d.ts +83 -0
- package/dist/modules/constants.d.ts.map +1 -0
- package/dist/modules/constants.js +75 -0
- package/dist/modules/constants.js.map +1 -0
- package/dist/modules/permissions.d.ts +14 -0
- package/dist/modules/permissions.d.ts.map +1 -1
- package/dist/modules/permissions.js +94 -0
- package/dist/modules/permissions.js.map +1 -1
- package/dist/modules/toolRegistry.d.ts +50 -0
- package/dist/modules/toolRegistry.d.ts.map +1 -0
- package/dist/modules/toolRegistry.js +114 -0
- package/dist/modules/toolRegistry.js.map +1 -0
- package/dist/modules/tunnel.d.ts +33 -0
- package/dist/modules/tunnel.d.ts.map +1 -0
- package/dist/modules/tunnel.js +79 -0
- package/dist/modules/tunnel.js.map +1 -0
- package/dist/modules/vibeHelper.d.ts +16 -0
- package/dist/modules/vibeHelper.d.ts.map +1 -0
- package/dist/modules/vibeHelper.js +38 -0
- package/dist/modules/vibeHelper.js.map +1 -0
- package/dist/modules/websocket.d.ts +9 -0
- package/dist/modules/websocket.d.ts.map +1 -1
- package/dist/modules/websocket.js +70 -0
- package/dist/modules/websocket.js.map +1 -1
- package/dist/tools/consultEngineer.d.ts +13 -0
- package/dist/tools/consultEngineer.d.ts.map +1 -0
- package/dist/tools/consultEngineer.js +161 -0
- package/dist/tools/consultEngineer.js.map +1 -0
- package/dist/tools/realtimeChat.d.ts +9 -0
- package/dist/tools/realtimeChat.d.ts.map +1 -0
- package/dist/tools/realtimeChat.js +101 -0
- package/dist/tools/realtimeChat.js.map +1 -0
- package/dist/types/index.d.ts +183 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/InteractiveApp.d.ts +13 -0
- package/dist/ui/InteractiveApp.d.ts.map +1 -0
- package/dist/ui/InteractiveApp.js +84 -0
- package/dist/ui/InteractiveApp.js.map +1 -0
- package/dist/ui/InteractivePrompt.d.ts +53 -0
- package/dist/ui/InteractivePrompt.d.ts.map +1 -0
- package/dist/ui/InteractivePrompt.js +422 -0
- package/dist/ui/InteractivePrompt.js.map +1 -0
- package/dist/ui/LiveSession.d.ts +2 -0
- package/dist/ui/LiveSession.d.ts.map +1 -1
- package/dist/ui/LiveSession.js +461 -180
- package/dist/ui/LiveSession.js.map +1 -1
- package/dist/ui/PromptInput.d.ts +14 -0
- package/dist/ui/PromptInput.d.ts.map +1 -0
- package/dist/ui/PromptInput.js +206 -0
- package/dist/ui/PromptInput.js.map +1 -0
- package/dist/ui/SessionUI.d.ts +40 -0
- package/dist/ui/SessionUI.d.ts.map +1 -0
- package/dist/ui/SessionUI.js +227 -0
- package/dist/ui/SessionUI.js.map +1 -0
- package/dist/ui/input/Command.d.ts +22 -0
- package/dist/ui/input/Command.d.ts.map +1 -0
- package/dist/ui/input/Command.js +30 -0
- package/dist/ui/input/Command.js.map +1 -0
- package/dist/ui/input/CustomInput.d.ts +15 -0
- package/dist/ui/input/CustomInput.d.ts.map +1 -0
- package/dist/ui/input/CustomInput.js +182 -0
- package/dist/ui/input/CustomInput.js.map +1 -0
- package/dist/ui/input/handlers/handleCursor.d.ts +22 -0
- package/dist/ui/input/handlers/handleCursor.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleCursor.js +53 -0
- package/dist/ui/input/handlers/handleCursor.js.map +1 -0
- package/dist/ui/input/handlers/handleEdit.d.ts +18 -0
- package/dist/ui/input/handlers/handleEdit.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleEdit.js +55 -0
- package/dist/ui/input/handlers/handleEdit.js.map +1 -0
- package/dist/ui/input/handlers/handleHistory.d.ts +18 -0
- package/dist/ui/input/handlers/handleHistory.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleHistory.js +85 -0
- package/dist/ui/input/handlers/handleHistory.js.map +1 -0
- package/dist/ui/input/handlers/handlePaste.d.ts +19 -0
- package/dist/ui/input/handlers/handlePaste.d.ts.map +1 -0
- package/dist/ui/input/handlers/handlePaste.js +49 -0
- package/dist/ui/input/handlers/handlePaste.js.map +1 -0
- package/dist/ui/input/handlers/handleSubmit.d.ts +18 -0
- package/dist/ui/input/handlers/handleSubmit.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleSubmit.js +39 -0
- package/dist/ui/input/handlers/handleSubmit.js.map +1 -0
- package/dist/ui/input/helpers.d.ts +4 -0
- package/dist/ui/input/helpers.d.ts.map +1 -0
- package/dist/ui/input/helpers.js +13 -0
- package/dist/ui/input/helpers.js.map +1 -0
- package/dist/ui/input/keyMatchers.d.ts +14 -0
- package/dist/ui/input/keyMatchers.d.ts.map +1 -0
- package/dist/ui/input/keyMatchers.js +49 -0
- package/dist/ui/input/keyMatchers.js.map +1 -0
- package/dist/ui/input/types.d.ts +33 -0
- package/dist/ui/input/types.d.ts.map +1 -0
- package/dist/ui/input/types.js +2 -0
- package/dist/ui/input/types.js.map +1 -0
- package/dist/ui/promptWithModes.d.ts +12 -0
- package/dist/ui/promptWithModes.d.ts.map +1 -0
- package/dist/ui/promptWithModes.js +24 -0
- package/dist/ui/promptWithModes.js.map +1 -0
- package/dist/ui/renderPrompt.d.ts +12 -0
- package/dist/ui/renderPrompt.d.ts.map +1 -0
- package/dist/ui/renderPrompt.js +14 -0
- package/dist/ui/renderPrompt.js.map +1 -0
- package/dist/ui/simplePrompt.d.ts +7 -0
- package/dist/ui/simplePrompt.d.ts.map +1 -0
- package/dist/ui/simplePrompt.js +38 -0
- package/dist/ui/simplePrompt.js.map +1 -0
- package/dist/ui/spinner.d.ts +7 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +13 -0
- package/dist/ui/spinner.js.map +1 -0
- package/package.json +36 -25
- package/ARCHITECTURE.md +0 -285
- package/BUILD_SUMMARY.md +0 -340
- package/QUICKSTART.md +0 -180
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application-wide constants and configuration values
|
|
3
|
+
*/
|
|
4
|
+
export declare const CLI_VERSION = "1.0.0";
|
|
5
|
+
/**
|
|
6
|
+
* Paste detection configuration
|
|
7
|
+
*/
|
|
8
|
+
export declare const PASTE_DETECTION: {
|
|
9
|
+
/** Keys arriving faster than this threshold (ms) are likely pasted */
|
|
10
|
+
readonly THRESHOLD_MS: 10;
|
|
11
|
+
/** Gap to treat paste as ended for non-bracketed paste mode (ms) */
|
|
12
|
+
readonly GAP_MS: 500;
|
|
13
|
+
/** Block return key processing for this duration after text input (ms) */
|
|
14
|
+
readonly BLOCK_RETURNS_MS: 100;
|
|
15
|
+
/** Extended block period for paste mode (ms) */
|
|
16
|
+
readonly EXTENDED_BLOCK_MS: 1000;
|
|
17
|
+
/** Additional block period after paste end (ms) */
|
|
18
|
+
readonly POST_PASTE_BLOCK_MS: 200;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Keyboard input configuration
|
|
22
|
+
*/
|
|
23
|
+
export declare const KEYBOARD: {
|
|
24
|
+
/** Double Ctrl+C timeout window (ms) */
|
|
25
|
+
readonly CTRL_C_TIMEOUT_MS: 1000;
|
|
26
|
+
/** Rapid key detection threshold for paste (ms) */
|
|
27
|
+
readonly RAPID_KEY_THRESHOLD_MS: 30;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Credit and billing configuration
|
|
31
|
+
*/
|
|
32
|
+
export declare const CREDITS: {
|
|
33
|
+
/** Human engineer rate (credits per minute) */
|
|
34
|
+
readonly HUMAN_RATE_PER_MIN: 2;
|
|
35
|
+
/** Default max credits for hybrid fallback */
|
|
36
|
+
readonly DEFAULT_HYBRID_MAX: 10;
|
|
37
|
+
/** Vibe mode consultation credits */
|
|
38
|
+
readonly VIBE_CONSULTATION: 3;
|
|
39
|
+
/** Minimum allowed max credits */
|
|
40
|
+
readonly MIN_MAX_CREDITS: 1;
|
|
41
|
+
/** Maximum allowed max credits */
|
|
42
|
+
readonly MAX_MAX_CREDITS: 100;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* UI rendering configuration
|
|
46
|
+
*/
|
|
47
|
+
export declare const UI: {
|
|
48
|
+
/** Mode indicator text width calculation offset */
|
|
49
|
+
readonly MODE_INDICATOR_WIDTH: 2;
|
|
50
|
+
/** Prompt separator width */
|
|
51
|
+
readonly PROMPT_SEPARATOR_WIDTH: 3;
|
|
52
|
+
/** Box drawing width for headers */
|
|
53
|
+
readonly BOX_WIDTH: 60;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Mode labels for display
|
|
57
|
+
*/
|
|
58
|
+
export declare const MODE_LABELS: {
|
|
59
|
+
readonly hybrid: "[Hybrid]";
|
|
60
|
+
readonly ai: "[AI]";
|
|
61
|
+
readonly human: "[Human]";
|
|
62
|
+
readonly build: "[Build]";
|
|
63
|
+
readonly plan: "[Plan]";
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Command prefixes
|
|
67
|
+
*/
|
|
68
|
+
export declare const COMMAND_PREFIXES: {
|
|
69
|
+
readonly SLASH: "/";
|
|
70
|
+
readonly HELP_COMMANDS: readonly ["/?", "/help", "/commands"];
|
|
71
|
+
readonly MODE_COMMANDS: readonly ["/hybrid", "/ai", "/human", "/build", "/plan"];
|
|
72
|
+
readonly EXIT_COMMANDS: readonly ["/exit", "/quit"];
|
|
73
|
+
readonly SHELL_RESUME_COMMANDS: readonly ["/resume", "/session", "/codevf"];
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Agent mode types
|
|
77
|
+
*/
|
|
78
|
+
export type AgentMode = 'build' | 'plan';
|
|
79
|
+
/**
|
|
80
|
+
* Routing mode types
|
|
81
|
+
*/
|
|
82
|
+
export type RoutingMode = 'ai' | 'human' | 'hybrid';
|
|
83
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/modules/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,sEAAsE;;IAEtE,oEAAoE;;IAEpE,0EAA0E;;IAE1E,gDAAgD;;IAEhD,mDAAmD;;CAE3C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB,wCAAwC;;IAExC,mDAAmD;;CAE3C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO;IAClB,+CAA+C;;IAE/C,8CAA8C;;IAE9C,qCAAqC;;IAErC,kCAAkC;;IAElC,kCAAkC;;CAE1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,EAAE;IACb,mDAAmD;;IAEnD,6BAA6B;;IAE7B,oCAAoC;;CAE5B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;CAMnB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application-wide constants and configuration values
|
|
3
|
+
*/
|
|
4
|
+
export const CLI_VERSION = '1.0.0';
|
|
5
|
+
/**
|
|
6
|
+
* Paste detection configuration
|
|
7
|
+
*/
|
|
8
|
+
export const PASTE_DETECTION = {
|
|
9
|
+
/** Keys arriving faster than this threshold (ms) are likely pasted */
|
|
10
|
+
THRESHOLD_MS: 10,
|
|
11
|
+
/** Gap to treat paste as ended for non-bracketed paste mode (ms) */
|
|
12
|
+
GAP_MS: 500,
|
|
13
|
+
/** Block return key processing for this duration after text input (ms) */
|
|
14
|
+
BLOCK_RETURNS_MS: 100,
|
|
15
|
+
/** Extended block period for paste mode (ms) */
|
|
16
|
+
EXTENDED_BLOCK_MS: 1000,
|
|
17
|
+
/** Additional block period after paste end (ms) */
|
|
18
|
+
POST_PASTE_BLOCK_MS: 200,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Keyboard input configuration
|
|
22
|
+
*/
|
|
23
|
+
export const KEYBOARD = {
|
|
24
|
+
/** Double Ctrl+C timeout window (ms) */
|
|
25
|
+
CTRL_C_TIMEOUT_MS: 1000,
|
|
26
|
+
/** Rapid key detection threshold for paste (ms) */
|
|
27
|
+
RAPID_KEY_THRESHOLD_MS: 30,
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Credit and billing configuration
|
|
31
|
+
*/
|
|
32
|
+
export const CREDITS = {
|
|
33
|
+
/** Human engineer rate (credits per minute) */
|
|
34
|
+
HUMAN_RATE_PER_MIN: 2,
|
|
35
|
+
/** Default max credits for hybrid fallback */
|
|
36
|
+
DEFAULT_HYBRID_MAX: 10,
|
|
37
|
+
/** Vibe mode consultation credits */
|
|
38
|
+
VIBE_CONSULTATION: 3,
|
|
39
|
+
/** Minimum allowed max credits */
|
|
40
|
+
MIN_MAX_CREDITS: 1,
|
|
41
|
+
/** Maximum allowed max credits */
|
|
42
|
+
MAX_MAX_CREDITS: 100,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* UI rendering configuration
|
|
46
|
+
*/
|
|
47
|
+
export const UI = {
|
|
48
|
+
/** Mode indicator text width calculation offset */
|
|
49
|
+
MODE_INDICATOR_WIDTH: 2,
|
|
50
|
+
/** Prompt separator width */
|
|
51
|
+
PROMPT_SEPARATOR_WIDTH: 3,
|
|
52
|
+
/** Box drawing width for headers */
|
|
53
|
+
BOX_WIDTH: 60,
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Mode labels for display
|
|
57
|
+
*/
|
|
58
|
+
export const MODE_LABELS = {
|
|
59
|
+
hybrid: '[Hybrid]',
|
|
60
|
+
ai: '[AI]',
|
|
61
|
+
human: '[Human]',
|
|
62
|
+
build: '[Build]',
|
|
63
|
+
plan: '[Plan]',
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Command prefixes
|
|
67
|
+
*/
|
|
68
|
+
export const COMMAND_PREFIXES = {
|
|
69
|
+
SLASH: '/',
|
|
70
|
+
HELP_COMMANDS: ['/?', '/help', '/commands'],
|
|
71
|
+
MODE_COMMANDS: ['/hybrid', '/ai', '/human', '/build', '/plan'],
|
|
72
|
+
EXIT_COMMANDS: ['/exit', '/quit'],
|
|
73
|
+
SHELL_RESUME_COMMANDS: ['/resume', '/session', '/codevf'],
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/modules/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,sEAAsE;IACtE,YAAY,EAAE,EAAE;IAChB,oEAAoE;IACpE,MAAM,EAAE,GAAG;IACX,0EAA0E;IAC1E,gBAAgB,EAAE,GAAG;IACrB,gDAAgD;IAChD,iBAAiB,EAAE,IAAI;IACvB,mDAAmD;IACnD,mBAAmB,EAAE,GAAG;CAChB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wCAAwC;IACxC,iBAAiB,EAAE,IAAI;IACvB,mDAAmD;IACnD,sBAAsB,EAAE,EAAE;CAClB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,+CAA+C;IAC/C,kBAAkB,EAAE,CAAC;IACrB,8CAA8C;IAC9C,kBAAkB,EAAE,EAAE;IACtB,qCAAqC;IACrC,iBAAiB,EAAE,CAAC;IACpB,kCAAkC;IAClC,eAAe,EAAE,CAAC;IAClB,kCAAkC;IAClC,eAAe,EAAE,GAAG;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,mDAAmD;IACnD,oBAAoB,EAAE,CAAC;IACvB,6BAA6B;IAC7B,sBAAsB,EAAE,CAAC;IACzB,oCAAoC;IACpC,SAAS,EAAE,EAAE;CACL,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,UAAU;IAClB,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,QAAQ;CACN,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,GAAG;IACV,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC;IAC3C,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC9D,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;IACjC,qBAAqB,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;CACjD,CAAC"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
+
import { TunnelManager } from './tunnel.js';
|
|
1
2
|
export declare class PermissionManager {
|
|
2
3
|
requestCommandPermission(command: string, reason?: string): Promise<boolean>;
|
|
3
4
|
requestFilePermission(filePath: string, reason?: string): Promise<boolean>;
|
|
5
|
+
requestTunnelPermission(port: number, reason?: string): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Handle tunnel request with full lifecycle management
|
|
8
|
+
*/
|
|
9
|
+
handleTunnelRequest(port: number, reason: string, taskId: string, tunnelManager: TunnelManager): Promise<{
|
|
10
|
+
approved: boolean;
|
|
11
|
+
tunnelUrl?: string;
|
|
12
|
+
error?: string;
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* Check if a port is available/accessible
|
|
16
|
+
*/
|
|
17
|
+
private checkPortAvailable;
|
|
4
18
|
}
|
|
5
19
|
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,qBAAa,iBAAiB;IACtB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB5E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B1E,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9E;;OAEG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA2DrE;;OAEG;YACW,kBAAkB;CAsBjC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import prompts from 'prompts';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { shouldWarnAboutFile } from '../utils/upload.js';
|
|
4
|
+
import net from 'net';
|
|
4
5
|
export class PermissionManager {
|
|
5
6
|
async requestCommandPermission(command, reason) {
|
|
6
7
|
console.log('\n' + chalk.yellow('━'.repeat(60)));
|
|
@@ -38,5 +39,98 @@ export class PermissionManager {
|
|
|
38
39
|
});
|
|
39
40
|
return response.approved ?? false;
|
|
40
41
|
}
|
|
42
|
+
async requestTunnelPermission(port, reason) {
|
|
43
|
+
console.log('\n' + chalk.yellow('━'.repeat(60)));
|
|
44
|
+
console.log(chalk.bold.yellow('Engineer requests to open a tunnel'));
|
|
45
|
+
console.log(chalk.white(` Local port: ${port}`));
|
|
46
|
+
if (reason) {
|
|
47
|
+
console.log(chalk.dim(` Reason: ${reason}`));
|
|
48
|
+
}
|
|
49
|
+
console.log(chalk.yellow('━'.repeat(60)));
|
|
50
|
+
const response = await prompts({
|
|
51
|
+
type: 'confirm',
|
|
52
|
+
name: 'approved',
|
|
53
|
+
message: `Expose port ${port} over the internet?`,
|
|
54
|
+
initial: false,
|
|
55
|
+
});
|
|
56
|
+
return response.approved ?? false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Handle tunnel request with full lifecycle management
|
|
60
|
+
*/
|
|
61
|
+
async handleTunnelRequest(port, reason, taskId, tunnelManager) {
|
|
62
|
+
// Display permission prompt
|
|
63
|
+
console.log('\n' + chalk.yellow('┌─────────────────────────────────────────┐'));
|
|
64
|
+
console.log(chalk.yellow('│ Engineer requests tunnel access: │'));
|
|
65
|
+
console.log(chalk.white(`│ Port: ${port} │`));
|
|
66
|
+
console.log(chalk.dim(`│ Reason: ${reason.padEnd(34)}│`));
|
|
67
|
+
console.log(chalk.yellow('│ Duration: Until session ends │'));
|
|
68
|
+
console.log(chalk.yellow('│ Allow? (y/n): │'));
|
|
69
|
+
console.log(chalk.yellow('└─────────────────────────────────────────┘\n'));
|
|
70
|
+
const response = await prompts({
|
|
71
|
+
type: 'confirm',
|
|
72
|
+
name: 'approved',
|
|
73
|
+
message: `Expose port ${port} over the internet?`,
|
|
74
|
+
initial: false,
|
|
75
|
+
});
|
|
76
|
+
if (!response.approved) {
|
|
77
|
+
console.log(chalk.red('✗ Tunnel access denied\n'));
|
|
78
|
+
return { approved: false };
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
// Check if port is available
|
|
82
|
+
const portAvailable = await this.checkPortAvailable(port);
|
|
83
|
+
if (!portAvailable) {
|
|
84
|
+
const error = `Port ${port} is not accessible or not running`;
|
|
85
|
+
console.log(chalk.red(`✗ ${error}\n`));
|
|
86
|
+
return {
|
|
87
|
+
approved: false,
|
|
88
|
+
error,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Create tunnel
|
|
92
|
+
console.log(chalk.dim('Creating tunnel...'));
|
|
93
|
+
const tunnel = await tunnelManager.createTunnel({
|
|
94
|
+
port,
|
|
95
|
+
taskId,
|
|
96
|
+
onError: (err) => console.error('Tunnel error:', err),
|
|
97
|
+
onClose: () => console.log('Tunnel closed'),
|
|
98
|
+
});
|
|
99
|
+
console.log(chalk.green(`✓ Tunnel created: ${chalk.cyan(tunnel.url)}\n`));
|
|
100
|
+
return {
|
|
101
|
+
approved: true,
|
|
102
|
+
tunnelUrl: tunnel.url,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const errorMsg = error.message || 'Failed to create tunnel';
|
|
107
|
+
console.log(chalk.red(`✗ ${errorMsg}\n`));
|
|
108
|
+
return {
|
|
109
|
+
approved: false,
|
|
110
|
+
error: errorMsg,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if a port is available/accessible
|
|
116
|
+
*/
|
|
117
|
+
async checkPortAvailable(port) {
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
const socket = new net.Socket();
|
|
120
|
+
socket.setTimeout(1000);
|
|
121
|
+
socket.on('connect', () => {
|
|
122
|
+
socket.destroy();
|
|
123
|
+
resolve(true); // Port is accessible
|
|
124
|
+
});
|
|
125
|
+
socket.on('timeout', () => {
|
|
126
|
+
socket.destroy();
|
|
127
|
+
resolve(false);
|
|
128
|
+
});
|
|
129
|
+
socket.on('error', () => {
|
|
130
|
+
resolve(false);
|
|
131
|
+
});
|
|
132
|
+
socket.connect(port, 'localhost');
|
|
133
|
+
});
|
|
134
|
+
}
|
|
41
135
|
}
|
|
42
136
|
//# sourceMappingURL=permissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AiTool, ToolResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tool Registry for AI Agent
|
|
4
|
+
*
|
|
5
|
+
* Manages registration and execution of tools that the AI agent can call.
|
|
6
|
+
* Tools are functions that extend the AI's capabilities by allowing it to
|
|
7
|
+
* interact with external systems, APIs, or services.
|
|
8
|
+
*/
|
|
9
|
+
declare class ToolRegistry {
|
|
10
|
+
private tools;
|
|
11
|
+
/**
|
|
12
|
+
* Register a tool for use by the AI agent
|
|
13
|
+
*/
|
|
14
|
+
registerTool(tool: AiTool): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get a specific tool by name
|
|
17
|
+
*/
|
|
18
|
+
getTool(name: string): AiTool | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Get all registered tools
|
|
21
|
+
*/
|
|
22
|
+
getAllTools(): AiTool[];
|
|
23
|
+
/**
|
|
24
|
+
* Check if a tool is registered
|
|
25
|
+
*/
|
|
26
|
+
hasTool(name: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Execute a tool by name with given parameters
|
|
29
|
+
*/
|
|
30
|
+
executeTool(toolName: string, params: any): Promise<ToolResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Validate parameters against tool schema
|
|
33
|
+
*/
|
|
34
|
+
private validateParameters;
|
|
35
|
+
/**
|
|
36
|
+
* Unregister a tool
|
|
37
|
+
*/
|
|
38
|
+
unregisterTool(name: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Clear all registered tools
|
|
41
|
+
*/
|
|
42
|
+
clearAll(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get tool count
|
|
45
|
+
*/
|
|
46
|
+
get count(): number;
|
|
47
|
+
}
|
|
48
|
+
export declare const toolRegistry: ToolRegistry;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=toolRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../src/modules/toolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;GAMG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAkC;IAE/C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IA+BrE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;CACF;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry for AI Agent
|
|
3
|
+
*
|
|
4
|
+
* Manages registration and execution of tools that the AI agent can call.
|
|
5
|
+
* Tools are functions that extend the AI's capabilities by allowing it to
|
|
6
|
+
* interact with external systems, APIs, or services.
|
|
7
|
+
*/
|
|
8
|
+
class ToolRegistry {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.tools = new Map();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Register a tool for use by the AI agent
|
|
14
|
+
*/
|
|
15
|
+
registerTool(tool) {
|
|
16
|
+
if (this.tools.has(tool.name)) {
|
|
17
|
+
console.warn(`Tool "${tool.name}" is already registered. Overwriting.`);
|
|
18
|
+
}
|
|
19
|
+
this.tools.set(tool.name, tool);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get a specific tool by name
|
|
23
|
+
*/
|
|
24
|
+
getTool(name) {
|
|
25
|
+
return this.tools.get(name);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get all registered tools
|
|
29
|
+
*/
|
|
30
|
+
getAllTools() {
|
|
31
|
+
return Array.from(this.tools.values());
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if a tool is registered
|
|
35
|
+
*/
|
|
36
|
+
hasTool(name) {
|
|
37
|
+
return this.tools.has(name);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Execute a tool by name with given parameters
|
|
41
|
+
*/
|
|
42
|
+
async executeTool(toolName, params) {
|
|
43
|
+
const tool = this.getTool(toolName);
|
|
44
|
+
if (!tool) {
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
error: `Tool "${toolName}" not found. Available tools: ${Array.from(this.tools.keys()).join(', ')}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
// Validate parameters against tool schema
|
|
52
|
+
const validationError = this.validateParameters(tool, params);
|
|
53
|
+
if (validationError) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
error: validationError,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Execute the tool
|
|
60
|
+
return await tool.execute(params);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error(`Error executing tool "${toolName}":`, error);
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
error: `Tool execution failed: ${error.message}`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate parameters against tool schema
|
|
72
|
+
*/
|
|
73
|
+
validateParameters(tool, params) {
|
|
74
|
+
// Check if all required parameters are present
|
|
75
|
+
for (const requiredParam of tool.parameters.required) {
|
|
76
|
+
if (!(requiredParam in params)) {
|
|
77
|
+
return `Missing required parameter: ${requiredParam}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Type check parameters
|
|
81
|
+
for (const [paramName, paramValue] of Object.entries(params)) {
|
|
82
|
+
const paramSchema = tool.parameters.properties[paramName];
|
|
83
|
+
if (!paramSchema) {
|
|
84
|
+
return `Unknown parameter: ${paramName}`;
|
|
85
|
+
}
|
|
86
|
+
// Check enum values if specified
|
|
87
|
+
if (paramSchema.enum && !paramSchema.enum.includes(paramValue)) {
|
|
88
|
+
return `Invalid value for ${paramName}. Expected one of: ${paramSchema.enum.join(', ')}`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Unregister a tool
|
|
95
|
+
*/
|
|
96
|
+
unregisterTool(name) {
|
|
97
|
+
return this.tools.delete(name);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Clear all registered tools
|
|
101
|
+
*/
|
|
102
|
+
clearAll() {
|
|
103
|
+
this.tools.clear();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get tool count
|
|
107
|
+
*/
|
|
108
|
+
get count() {
|
|
109
|
+
return this.tools.size;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Export singleton instance
|
|
113
|
+
export const toolRegistry = new ToolRegistry();
|
|
114
|
+
//# sourceMappingURL=toolRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../src/modules/toolRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunnel manager for creating and managing localtunnel connections
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'events';
|
|
5
|
+
import { ActiveTunnel } from '../types/index.js';
|
|
6
|
+
export interface TunnelOptions {
|
|
7
|
+
port: number;
|
|
8
|
+
subdomain?: string;
|
|
9
|
+
taskId: string;
|
|
10
|
+
onError?: (error: Error) => void;
|
|
11
|
+
onClose?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare class TunnelManager extends EventEmitter {
|
|
14
|
+
private tunnel;
|
|
15
|
+
private activeTunnel;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new localtunnel for a task session
|
|
18
|
+
*/
|
|
19
|
+
createTunnel(options: TunnelOptions): Promise<ActiveTunnel>;
|
|
20
|
+
/**
|
|
21
|
+
* Close the active tunnel
|
|
22
|
+
*/
|
|
23
|
+
closeTunnel(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get the currently active tunnel
|
|
26
|
+
*/
|
|
27
|
+
getActiveTunnel(): ActiveTunnel | null;
|
|
28
|
+
/**
|
|
29
|
+
* Check if tunnel is active
|
|
30
|
+
*/
|
|
31
|
+
isActive(): boolean;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/modules/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAA6B;IAEjD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA6CjE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunnel manager for creating and managing localtunnel connections
|
|
3
|
+
*/
|
|
4
|
+
import localtunnel from 'localtunnel';
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
export class TunnelManager extends EventEmitter {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.tunnel = null;
|
|
10
|
+
this.activeTunnel = null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a new localtunnel for a task session
|
|
14
|
+
*/
|
|
15
|
+
async createTunnel(options) {
|
|
16
|
+
// Close existing tunnel if any
|
|
17
|
+
if (this.tunnel) {
|
|
18
|
+
await this.closeTunnel();
|
|
19
|
+
}
|
|
20
|
+
const tunnelOptions = { port: options.port };
|
|
21
|
+
if (options.subdomain) {
|
|
22
|
+
tunnelOptions.subdomain = options.subdomain;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
this.tunnel = await localtunnel(tunnelOptions);
|
|
26
|
+
this.activeTunnel = {
|
|
27
|
+
url: this.tunnel.url,
|
|
28
|
+
port: options.port,
|
|
29
|
+
subdomain: options.subdomain,
|
|
30
|
+
createdAt: new Date(),
|
|
31
|
+
taskId: options.taskId,
|
|
32
|
+
};
|
|
33
|
+
// Handle tunnel errors
|
|
34
|
+
this.tunnel.on('error', (err) => {
|
|
35
|
+
console.error('Tunnel error:', err);
|
|
36
|
+
this.emit('error', err);
|
|
37
|
+
options.onError?.(err);
|
|
38
|
+
});
|
|
39
|
+
// Handle tunnel close
|
|
40
|
+
this.tunnel.on('close', () => {
|
|
41
|
+
console.log('Tunnel closed');
|
|
42
|
+
this.emit('close');
|
|
43
|
+
options.onClose?.();
|
|
44
|
+
this.activeTunnel = null;
|
|
45
|
+
});
|
|
46
|
+
this.emit('created', this.activeTunnel);
|
|
47
|
+
return this.activeTunnel;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error('Failed to create tunnel:', error);
|
|
51
|
+
throw new Error(`Tunnel creation failed: ${error.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Close the active tunnel
|
|
56
|
+
*/
|
|
57
|
+
async closeTunnel() {
|
|
58
|
+
if (this.tunnel) {
|
|
59
|
+
this.tunnel.close();
|
|
60
|
+
this.tunnel = null;
|
|
61
|
+
const prevTunnel = this.activeTunnel;
|
|
62
|
+
this.activeTunnel = null;
|
|
63
|
+
this.emit('closed', prevTunnel);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the currently active tunnel
|
|
68
|
+
*/
|
|
69
|
+
getActiveTunnel() {
|
|
70
|
+
return this.activeTunnel;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if tunnel is active
|
|
74
|
+
*/
|
|
75
|
+
isActive() {
|
|
76
|
+
return this.activeTunnel !== null && this.tunnel !== null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/modules/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,WAAW,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,MAAM,OAAO,aAAc,SAAQ,YAAY;IAA/C;;QACU,WAAM,GAAkB,IAAI,CAAC;QAC7B,iBAAY,GAAwB,IAAI,CAAC;IA4EnD,CAAC;IA1EC;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAsB;QACvC,+BAA+B;QAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,aAAa,GAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;YAE/C,IAAI,CAAC,YAAY,GAAG;gBAClB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YAEF,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick engineer consultation for vibe mode
|
|
3
|
+
* Engineer provides context to help AI, not take over the task
|
|
4
|
+
*/
|
|
5
|
+
export declare function consultEngineer(aiQuestion: string, context: {
|
|
6
|
+
userQuery: string;
|
|
7
|
+
aiAttempt: string;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
engineerContext: string;
|
|
10
|
+
credits: number;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Ask if user wants to use vibe mode for this request
|
|
14
|
+
*/
|
|
15
|
+
export declare function promptForVibeMode(): Promise<boolean>;
|
|
16
|
+
//# sourceMappingURL=vibeHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibeHelper.d.ts","sourceRoot":"","sources":["../../src/modules/vibeHelper.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBvD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS1D"}
|