@yu_robotics/remote-cli 1.1.8 → 1.1.10
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/client/MessageHandler.d.ts +17 -2
- package/dist/client/MessageHandler.d.ts.map +1 -1
- package/dist/client/MessageHandler.js +99 -5
- package/dist/client/MessageHandler.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +2 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.d.ts +13 -0
- package/dist/executor/ClaudePersistentExecutor.d.ts.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.js +64 -0
- package/dist/executor/ClaudePersistentExecutor.js.map +1 -1
- package/dist/executor/GeminiExecutor.d.ts +51 -0
- package/dist/executor/GeminiExecutor.d.ts.map +1 -0
- package/dist/executor/GeminiExecutor.js +167 -0
- package/dist/executor/GeminiExecutor.js.map +1 -0
- package/dist/executor/IExecutor.d.ts +34 -0
- package/dist/executor/IExecutor.d.ts.map +1 -0
- package/dist/executor/IExecutor.js +3 -0
- package/dist/executor/IExecutor.js.map +1 -0
- package/dist/executor/acp/AcpClient.d.ts +47 -0
- package/dist/executor/acp/AcpClient.d.ts.map +1 -0
- package/dist/executor/acp/AcpClient.js +245 -0
- package/dist/executor/acp/AcpClient.js.map +1 -0
- package/dist/executor/acp/AcpTypes.d.ts +91 -0
- package/dist/executor/acp/AcpTypes.d.ts.map +1 -0
- package/dist/executor/acp/AcpTypes.js +8 -0
- package/dist/executor/acp/AcpTypes.js.map +1 -0
- package/dist/executor/acp/SessionManager.d.ts +28 -0
- package/dist/executor/acp/SessionManager.d.ts.map +1 -0
- package/dist/executor/acp/SessionManager.js +93 -0
- package/dist/executor/acp/SessionManager.js.map +1 -0
- package/dist/executor/index.d.ts +15 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +42 -2
- package/dist/executor/index.js.map +1 -1
- package/dist/types/config.d.ts +21 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP wire format type definitions (subset needed for our client role).
|
|
3
|
+
* Gemini CLI exposes Agent Client Protocol (ACP) via --experimental-acp.
|
|
4
|
+
* ACP is JSON-RPC 2.0 over stdio (newline-delimited).
|
|
5
|
+
*/
|
|
6
|
+
export interface JsonRpcRequest {
|
|
7
|
+
jsonrpc: '2.0';
|
|
8
|
+
id: number;
|
|
9
|
+
method: string;
|
|
10
|
+
params: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface JsonRpcNotification {
|
|
13
|
+
jsonrpc: '2.0';
|
|
14
|
+
method: string;
|
|
15
|
+
params: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface JsonRpcSuccessResponse {
|
|
18
|
+
jsonrpc: '2.0';
|
|
19
|
+
id: number;
|
|
20
|
+
result: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface JsonRpcErrorResponse {
|
|
23
|
+
jsonrpc: '2.0';
|
|
24
|
+
id: number;
|
|
25
|
+
error: {
|
|
26
|
+
code: number;
|
|
27
|
+
message: string;
|
|
28
|
+
data?: unknown;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;
|
|
32
|
+
export interface AcpContentBlock {
|
|
33
|
+
type: 'text' | 'image' | 'resource_link' | 'resource';
|
|
34
|
+
text?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface AcpUpdateAgentMessageChunk {
|
|
37
|
+
sessionUpdate: 'agent_message_chunk';
|
|
38
|
+
content: AcpContentBlock;
|
|
39
|
+
}
|
|
40
|
+
export interface AcpUpdateAgentThoughtChunk {
|
|
41
|
+
sessionUpdate: 'agent_thought_chunk';
|
|
42
|
+
content: AcpContentBlock;
|
|
43
|
+
}
|
|
44
|
+
export interface AcpUpdateToolCall {
|
|
45
|
+
sessionUpdate: 'tool_call';
|
|
46
|
+
toolCallId: string;
|
|
47
|
+
title: string;
|
|
48
|
+
kind?: string;
|
|
49
|
+
status?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface AcpUpdateToolCallUpdate {
|
|
52
|
+
sessionUpdate: 'tool_call_update';
|
|
53
|
+
toolCallId: string;
|
|
54
|
+
status: string;
|
|
55
|
+
rawOutput?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface AcpUpdatePlan {
|
|
58
|
+
sessionUpdate: 'plan';
|
|
59
|
+
content: AcpContentBlock[];
|
|
60
|
+
}
|
|
61
|
+
export interface AcpUpdateUnknown {
|
|
62
|
+
sessionUpdate: string;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}
|
|
65
|
+
export type AcpSessionUpdate = AcpUpdateAgentMessageChunk | AcpUpdateAgentThoughtChunk | AcpUpdateToolCall | AcpUpdateToolCallUpdate | AcpUpdatePlan | AcpUpdateUnknown;
|
|
66
|
+
export interface AcpSessionUpdateParams {
|
|
67
|
+
sessionId: string;
|
|
68
|
+
update: AcpSessionUpdate;
|
|
69
|
+
}
|
|
70
|
+
export interface AcpPermissionOption {
|
|
71
|
+
kind: 'allow_once' | 'allow_always' | 'reject_once' | 'reject_always';
|
|
72
|
+
}
|
|
73
|
+
export interface AcpRequestPermissionParams {
|
|
74
|
+
sessionId: string;
|
|
75
|
+
toolCall: {
|
|
76
|
+
toolCallId: string;
|
|
77
|
+
title: string;
|
|
78
|
+
};
|
|
79
|
+
options: AcpPermissionOption[];
|
|
80
|
+
}
|
|
81
|
+
export interface AcpInitializeResult {
|
|
82
|
+
protocolVersion: number;
|
|
83
|
+
}
|
|
84
|
+
export interface AcpNewSessionResult {
|
|
85
|
+
sessionId: string;
|
|
86
|
+
}
|
|
87
|
+
export interface AcpPromptResult {
|
|
88
|
+
sessionId: string;
|
|
89
|
+
stopReason: 'end_turn' | 'max_tokens' | 'cancelled' | 'refusal' | 'max_turn_requests';
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=AcpTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcpTypes.d.ts","sourceRoot":"","sources":["../../../src/executor/acp/AcpTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CAEjB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1D;AAED,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAI5E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,eAAe,GAAG,UAAU,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,qBAAqB,CAAC;IACrC,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,qBAAqB,CAAC;IACrC,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,WAAW,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,0BAA0B,GAC1B,iBAAiB,GACjB,uBAAuB,GACvB,aAAa,GACb,gBAAgB,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,eAAe,CAAC;CACvE;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAID,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,mBAAmB,CAAC;CACvF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ACP wire format type definitions (subset needed for our client role).
|
|
4
|
+
* Gemini CLI exposes Agent Client Protocol (ACP) via --experimental-acp.
|
|
5
|
+
* ACP is JSON-RPC 2.0 over stdio (newline-delimited).
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=AcpTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcpTypes.js","sourceRoot":"","sources":["../../../src/executor/acp/AcpTypes.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface SessionEntry {
|
|
2
|
+
role: 'user' | 'assistant';
|
|
3
|
+
text: string;
|
|
4
|
+
ts: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Persists Gemini conversation history as JSONL files for multi-turn context replay.
|
|
8
|
+
*
|
|
9
|
+
* Storage: ~/.remote-cli/gemini-sessions/{sessionId}.jsonl
|
|
10
|
+
* Each line: {"role":"user"|"assistant","text":"...","ts":1234567890}
|
|
11
|
+
*
|
|
12
|
+
* ACP's session/resume is experimental, so we use history replay instead —
|
|
13
|
+
* the same approach used by vibe-kanban.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SessionManager {
|
|
16
|
+
private baseDir;
|
|
17
|
+
constructor(baseDir?: string);
|
|
18
|
+
private filePath;
|
|
19
|
+
append(sessionId: string, role: 'user' | 'assistant', text: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Build a context prefix that replays prior conversation history.
|
|
22
|
+
* Returns empty string if no history exists yet.
|
|
23
|
+
*/
|
|
24
|
+
buildResumeContext(sessionId: string): string;
|
|
25
|
+
clear(sessionId: string): void;
|
|
26
|
+
remove(sessionId: string): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=SessionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../../src/executor/acp/SessionManager.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAK5B,OAAO,CAAC,QAAQ;IAIhB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzE;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAgB7C,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAO9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAMhC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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.SessionManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
/**
|
|
41
|
+
* Persists Gemini conversation history as JSONL files for multi-turn context replay.
|
|
42
|
+
*
|
|
43
|
+
* Storage: ~/.remote-cli/gemini-sessions/{sessionId}.jsonl
|
|
44
|
+
* Each line: {"role":"user"|"assistant","text":"...","ts":1234567890}
|
|
45
|
+
*
|
|
46
|
+
* ACP's session/resume is experimental, so we use history replay instead —
|
|
47
|
+
* the same approach used by vibe-kanban.
|
|
48
|
+
*/
|
|
49
|
+
class SessionManager {
|
|
50
|
+
baseDir;
|
|
51
|
+
constructor(baseDir) {
|
|
52
|
+
this.baseDir = baseDir ?? path.join(os.homedir(), '.remote-cli', 'gemini-sessions');
|
|
53
|
+
fs.mkdirSync(this.baseDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
filePath(sessionId) {
|
|
56
|
+
return path.join(this.baseDir, `${sessionId}.jsonl`);
|
|
57
|
+
}
|
|
58
|
+
append(sessionId, role, text) {
|
|
59
|
+
const entry = { role, text, ts: Date.now() };
|
|
60
|
+
fs.appendFileSync(this.filePath(sessionId), JSON.stringify(entry) + '\n', 'utf8');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Build a context prefix that replays prior conversation history.
|
|
64
|
+
* Returns empty string if no history exists yet.
|
|
65
|
+
*/
|
|
66
|
+
buildResumeContext(sessionId) {
|
|
67
|
+
const file = this.filePath(sessionId);
|
|
68
|
+
if (!fs.existsSync(file))
|
|
69
|
+
return '';
|
|
70
|
+
const lines = fs.readFileSync(file, 'utf8').trim().split('\n').filter(Boolean);
|
|
71
|
+
if (lines.length === 0)
|
|
72
|
+
return '';
|
|
73
|
+
const entries = lines.map((l) => JSON.parse(l));
|
|
74
|
+
const formatted = entries
|
|
75
|
+
.map((e) => (e.role === 'user' ? `[User]: ${e.text}` : `[Assistant]: ${e.text}`))
|
|
76
|
+
.join('\n');
|
|
77
|
+
return `=== PREVIOUS CONVERSATION ===\n${formatted}\n=== NEW REQUEST ===\n`;
|
|
78
|
+
}
|
|
79
|
+
clear(sessionId) {
|
|
80
|
+
const file = this.filePath(sessionId);
|
|
81
|
+
if (fs.existsSync(file)) {
|
|
82
|
+
fs.writeFileSync(file, '', 'utf8');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
remove(sessionId) {
|
|
86
|
+
const file = this.filePath(sessionId);
|
|
87
|
+
if (fs.existsSync(file)) {
|
|
88
|
+
fs.unlinkSync(file);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.SessionManager = SessionManager;
|
|
93
|
+
//# sourceMappingURL=SessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/executor/acp/SessionManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAQzB;;;;;;;;GAQG;AACH,MAAa,cAAc;IACjB,OAAO,CAAS;IAExB,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACpF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAEO,QAAQ,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,IAA0B,EAAE,IAAY;QAChE,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3D,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,SAAiB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAmB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAiB,CAAC,CAAC;QAEhF,MAAM,SAAS,GAAG,OAAO;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAChF,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,kCAAkC,SAAS,yBAAyB,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAlDD,wCAkDC"}
|
package/dist/executor/index.d.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { DirectoryGuard } from '../security/DirectoryGuard';
|
|
2
2
|
import { ClaudeExecutor } from './ClaudeExecutor';
|
|
3
3
|
import { ClaudePersistentExecutor } from './ClaudePersistentExecutor';
|
|
4
|
+
import type { IExecutor } from './IExecutor';
|
|
5
|
+
import type { ExecutorConfig } from '../types/config';
|
|
4
6
|
export type { ClaudeExecuteOptions, ClaudeExecuteResult } from './ClaudeExecutor';
|
|
5
7
|
export type { PersistentClaudeOptions, PersistentClaudeResult } from './ClaudePersistentExecutor';
|
|
6
8
|
export { ClaudeExecutor } from './ClaudeExecutor';
|
|
7
9
|
export { ClaudePersistentExecutor } from './ClaudePersistentExecutor';
|
|
10
|
+
export { GeminiExecutor } from './GeminiExecutor';
|
|
11
|
+
export type { IExecutor } from './IExecutor';
|
|
8
12
|
/**
|
|
9
13
|
* Executor type
|
|
10
14
|
*/
|
|
11
15
|
export type ExecutorType = 'persistent' | 'spawn' | 'auto';
|
|
12
16
|
/**
|
|
13
|
-
* Create an appropriate Claude executor
|
|
17
|
+
* Create an appropriate Claude executor (legacy API — preserved for backward compatibility)
|
|
14
18
|
*
|
|
15
19
|
* @param directoryGuard Directory guard instance
|
|
16
20
|
* @param type Executor type: 'persistent' (long-running process), 'spawn' (one-shot process), or 'auto' (choose based on environment)
|
|
@@ -18,4 +22,14 @@ export type ExecutorType = 'persistent' | 'spawn' | 'auto';
|
|
|
18
22
|
* @returns Executor instance
|
|
19
23
|
*/
|
|
20
24
|
export declare function createClaudeExecutor(directoryGuard: DirectoryGuard, type?: ExecutorType, initialWorkingDirectory?: string): ClaudeExecutor | ClaudePersistentExecutor;
|
|
25
|
+
/**
|
|
26
|
+
* Create an executor based on the executor config.
|
|
27
|
+
* Supports Claude (persistent / spawn / auto) and Gemini (via ACP).
|
|
28
|
+
*
|
|
29
|
+
* @param directoryGuard Directory guard instance
|
|
30
|
+
* @param executorConfig Executor config from remote-cli config (defaults to auto)
|
|
31
|
+
* @param initialWorkingDirectory Optional initial working directory
|
|
32
|
+
* @returns IExecutor instance
|
|
33
|
+
*/
|
|
34
|
+
export declare function createExecutor(directoryGuard: DirectoryGuard, executorConfig?: ExecutorConfig, initialWorkingDirectory?: string): IExecutor;
|
|
21
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAmB7C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,IAAI,GAAE,YAAqB,EAC3B,uBAAuB,CAAC,EAAE,MAAM,GAC/B,cAAc,GAAG,wBAAwB,CAiB3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,cAAc,GAAE,cAAiC,EACjD,uBAAuB,CAAC,EAAE,MAAM,GAC/B,SAAS,CA6BX"}
|
package/dist/executor/index.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ClaudePersistentExecutor = exports.ClaudeExecutor = void 0;
|
|
3
|
+
exports.GeminiExecutor = exports.ClaudePersistentExecutor = exports.ClaudeExecutor = void 0;
|
|
4
4
|
exports.createClaudeExecutor = createClaudeExecutor;
|
|
5
|
+
exports.createExecutor = createExecutor;
|
|
5
6
|
const ClaudeExecutor_1 = require("./ClaudeExecutor");
|
|
6
7
|
const ClaudePersistentExecutor_1 = require("./ClaudePersistentExecutor");
|
|
8
|
+
const GeminiExecutor_1 = require("./GeminiExecutor");
|
|
7
9
|
var ClaudeExecutor_2 = require("./ClaudeExecutor");
|
|
8
10
|
Object.defineProperty(exports, "ClaudeExecutor", { enumerable: true, get: function () { return ClaudeExecutor_2.ClaudeExecutor; } });
|
|
9
11
|
var ClaudePersistentExecutor_2 = require("./ClaudePersistentExecutor");
|
|
10
12
|
Object.defineProperty(exports, "ClaudePersistentExecutor", { enumerable: true, get: function () { return ClaudePersistentExecutor_2.ClaudePersistentExecutor; } });
|
|
13
|
+
var GeminiExecutor_2 = require("./GeminiExecutor");
|
|
14
|
+
Object.defineProperty(exports, "GeminiExecutor", { enumerable: true, get: function () { return GeminiExecutor_2.GeminiExecutor; } });
|
|
11
15
|
/**
|
|
12
16
|
* Check if we're running inside a Claude Code session
|
|
13
17
|
*/
|
|
@@ -23,7 +27,7 @@ function isRunningInsideClaudeCode() {
|
|
|
23
27
|
return false;
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
|
-
* Create an appropriate Claude executor
|
|
30
|
+
* Create an appropriate Claude executor (legacy API — preserved for backward compatibility)
|
|
27
31
|
*
|
|
28
32
|
* @param directoryGuard Directory guard instance
|
|
29
33
|
* @param type Executor type: 'persistent' (long-running process), 'spawn' (one-shot process), or 'auto' (choose based on environment)
|
|
@@ -46,4 +50,40 @@ function createClaudeExecutor(directoryGuard, type = 'auto', initialWorkingDirec
|
|
|
46
50
|
}
|
|
47
51
|
return new ClaudeExecutor_1.ClaudeExecutor(directoryGuard);
|
|
48
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Create an executor based on the executor config.
|
|
55
|
+
* Supports Claude (persistent / spawn / auto) and Gemini (via ACP).
|
|
56
|
+
*
|
|
57
|
+
* @param directoryGuard Directory guard instance
|
|
58
|
+
* @param executorConfig Executor config from remote-cli config (defaults to auto)
|
|
59
|
+
* @param initialWorkingDirectory Optional initial working directory
|
|
60
|
+
* @returns IExecutor instance
|
|
61
|
+
*/
|
|
62
|
+
function createExecutor(directoryGuard, executorConfig = { type: 'auto' }, initialWorkingDirectory) {
|
|
63
|
+
switch (executorConfig.type) {
|
|
64
|
+
case 'gemini':
|
|
65
|
+
console.log('[ExecutorFactory] Using Gemini CLI executor (ACP)');
|
|
66
|
+
return new GeminiExecutor_1.GeminiExecutor(directoryGuard, {
|
|
67
|
+
model: executorConfig.gemini?.model,
|
|
68
|
+
autoApprove: executorConfig.gemini?.autoApprove ?? true,
|
|
69
|
+
initialWorkingDirectory,
|
|
70
|
+
geminiCommand: executorConfig.gemini?.command,
|
|
71
|
+
geminiVersion: executorConfig.gemini?.version,
|
|
72
|
+
});
|
|
73
|
+
case 'claude-persistent':
|
|
74
|
+
console.log('[ExecutorFactory] Using Claude persistent executor');
|
|
75
|
+
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory);
|
|
76
|
+
case 'claude-spawn':
|
|
77
|
+
console.log('[ExecutorFactory] Using Claude spawn executor');
|
|
78
|
+
return new ClaudeExecutor_1.ClaudeExecutor(directoryGuard);
|
|
79
|
+
case 'auto':
|
|
80
|
+
default:
|
|
81
|
+
if (isRunningInsideClaudeCode()) {
|
|
82
|
+
console.log('[ExecutorFactory] Detected nested Claude Code session, using spawn mode');
|
|
83
|
+
return new ClaudeExecutor_1.ClaudeExecutor(directoryGuard);
|
|
84
|
+
}
|
|
85
|
+
console.log('[ExecutorFactory] Using Claude persistent executor (auto)');
|
|
86
|
+
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
49
89
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":";;;AA4CA,oDAqBC;AAWD,wCAiCC;AA5GD,qDAAkD;AAClD,yEAAsE;AACtE,qDAAkD;AAMlD,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAGvB;;GAEG;AACH,SAAS,yBAAyB;IAChC,4CAA4C;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAOD;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAClC,cAA8B,EAC9B,OAAqB,MAAM,EAC3B,uBAAgC;IAEhC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,0FAA0F;QAC1F,IAAI,yBAAyB,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;YACvF,OAAO,IAAI,+BAAc,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;QACD,gCAAgC;QAChC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,IAAI,mDAAwB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,mDAAwB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,IAAI,+BAAc,CAAC,cAAc,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAC5B,cAA8B,EAC9B,iBAAiC,EAAE,IAAI,EAAE,MAAM,EAAE,EACjD,uBAAgC;IAEhC,QAAQ,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,IAAI,+BAAc,CAAC,cAAc,EAAE;gBACxC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK;gBACnC,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI;gBACvD,uBAAuB;gBACvB,aAAa,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO;gBAC7C,aAAa,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO;aAC9C,CAAC,CAAC;QAEL,KAAK,mBAAmB;YACtB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,IAAI,mDAAwB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QAE/E,KAAK,cAAc;YACjB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,IAAI,+BAAc,CAAC,cAAc,CAAC,CAAC;QAE5C,KAAK,MAAM,CAAC;QACZ;YACE,IAAI,yBAAyB,EAAE,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;gBACvF,OAAO,IAAI,+BAAc,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YACzE,OAAO,IAAI,mDAAwB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;IACjF,CAAC;AACH,CAAC"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -23,6 +23,25 @@ export interface ServerConfig {
|
|
|
23
23
|
/** Heartbeat interval (milliseconds) */
|
|
24
24
|
heartbeatInterval: number;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Gemini executor configuration
|
|
28
|
+
*/
|
|
29
|
+
export interface GeminiExecutorConfig {
|
|
30
|
+
model?: string;
|
|
31
|
+
/** Auto-approve all tool permissions. Default: true. False = future Feishu approval flow. */
|
|
32
|
+
autoApprove?: boolean;
|
|
33
|
+
/** Override CLI command (default: 'npx') */
|
|
34
|
+
command?: string;
|
|
35
|
+
/** Pin gemini-cli version (default: '@google/gemini-cli@latest') */
|
|
36
|
+
version?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Executor configuration — controls which AI CLI backend is used
|
|
40
|
+
*/
|
|
41
|
+
export interface ExecutorConfig {
|
|
42
|
+
type: 'auto' | 'claude-persistent' | 'claude-spawn' | 'gemini';
|
|
43
|
+
gemini?: GeminiExecutorConfig;
|
|
44
|
+
}
|
|
26
45
|
/**
|
|
27
46
|
* Complete configuration
|
|
28
47
|
*/
|
|
@@ -39,6 +58,8 @@ export interface Config {
|
|
|
39
58
|
stoppedAt?: number;
|
|
40
59
|
pid?: number;
|
|
41
60
|
};
|
|
61
|
+
/** Executor backend selection. Defaults to 'auto' (Claude persistent or spawn). */
|
|
62
|
+
executor?: ExecutorConfig;
|
|
42
63
|
}
|
|
43
64
|
/**
|
|
44
65
|
* Default configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+BAA+B;IAC/B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+BAA+B;IAC/B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC/D,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,mFAAmF;IACnF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAW5B,CAAC"}
|
package/dist/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAmEH;;GAEG;AACU,QAAA,cAAc,GAAW;IACpC,QAAQ,EAAE;QACR,kBAAkB,EAAE,EAAE;QACtB,cAAc,EAAE,EAAE;QAClB,kBAAkB,EAAE,CAAC;KACtB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,sBAAsB;QAC3B,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;KACzB;CACF,CAAC"}
|