@octo-cyber/ai 0.5.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/ai.module.d.ts +3 -0
- package/dist/ai.module.d.ts.map +1 -0
- package/dist/ai.module.js +40 -0
- package/dist/ai.module.js.map +1 -0
- package/dist/cli/adapters/antigravity.adapter.d.ts +29 -0
- package/dist/cli/adapters/antigravity.adapter.d.ts.map +1 -0
- package/dist/cli/adapters/antigravity.adapter.js +170 -0
- package/dist/cli/adapters/antigravity.adapter.js.map +1 -0
- package/dist/cli/adapters/claude-cli.adapter.d.ts +23 -0
- package/dist/cli/adapters/claude-cli.adapter.d.ts.map +1 -0
- package/dist/cli/adapters/claude-cli.adapter.js +79 -0
- package/dist/cli/adapters/claude-cli.adapter.js.map +1 -0
- package/dist/cli/adapters/codex-cli.adapter.d.ts +22 -0
- package/dist/cli/adapters/codex-cli.adapter.d.ts.map +1 -0
- package/dist/cli/adapters/codex-cli.adapter.js +76 -0
- package/dist/cli/adapters/codex-cli.adapter.js.map +1 -0
- package/dist/cli/adapters/detect-cli.d.ts +11 -0
- package/dist/cli/adapters/detect-cli.d.ts.map +1 -0
- package/dist/cli/adapters/detect-cli.js +40 -0
- package/dist/cli/adapters/detect-cli.js.map +1 -0
- package/dist/cli/adapters/gemini-cli.adapter.d.ts +21 -0
- package/dist/cli/adapters/gemini-cli.adapter.d.ts.map +1 -0
- package/dist/cli/adapters/gemini-cli.adapter.js +72 -0
- package/dist/cli/adapters/gemini-cli.adapter.js.map +1 -0
- package/dist/cli/adapters/index.d.ts +4 -0
- package/dist/cli/adapters/index.d.ts.map +1 -0
- package/dist/cli/adapters/index.js +10 -0
- package/dist/cli/adapters/index.js.map +1 -0
- package/dist/cli/cli-executor.service.d.ts +23 -0
- package/dist/cli/cli-executor.service.d.ts.map +1 -0
- package/dist/cli/cli-executor.service.js +150 -0
- package/dist/cli/cli-executor.service.js.map +1 -0
- package/dist/cli/cli-registry.service.d.ts +38 -0
- package/dist/cli/cli-registry.service.d.ts.map +1 -0
- package/dist/cli/cli-registry.service.js +112 -0
- package/dist/cli/cli-registry.service.js.map +1 -0
- package/dist/cli/controllers/ai-cli.controller.d.ts +36 -0
- package/dist/cli/controllers/ai-cli.controller.d.ts.map +1 -0
- package/dist/cli/controllers/ai-cli.controller.js +179 -0
- package/dist/cli/controllers/ai-cli.controller.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/types.d.ts +131 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +9 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/workspace.service.d.ts +34 -0
- package/dist/cli/workspace.service.d.ts.map +1 -0
- package/dist/cli/workspace.service.js +194 -0
- package/dist/cli/workspace.service.js.map +1 -0
- package/dist/controllers/agent.controller.d.ts +13 -0
- package/dist/controllers/agent.controller.d.ts.map +1 -0
- package/dist/controllers/agent.controller.js +117 -0
- package/dist/controllers/agent.controller.js.map +1 -0
- package/dist/controllers/capability.controller.d.ts +16 -0
- package/dist/controllers/capability.controller.d.ts.map +1 -0
- package/dist/controllers/capability.controller.js +108 -0
- package/dist/controllers/capability.controller.js.map +1 -0
- package/dist/controllers/client.controller.d.ts +10 -0
- package/dist/controllers/client.controller.d.ts.map +1 -0
- package/dist/controllers/client.controller.js +79 -0
- package/dist/controllers/client.controller.js.map +1 -0
- package/dist/controllers/execution.controller.d.ts +11 -0
- package/dist/controllers/execution.controller.d.ts.map +1 -0
- package/dist/controllers/execution.controller.js +50 -0
- package/dist/controllers/execution.controller.js.map +1 -0
- package/dist/controllers/index.d.ts +5 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/index.js +12 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/entities/agent-binding.entity.d.ts +17 -0
- package/dist/entities/agent-binding.entity.d.ts.map +1 -0
- package/dist/entities/agent-binding.entity.js +64 -0
- package/dist/entities/agent-binding.entity.js.map +1 -0
- package/dist/entities/agent-definition.entity.d.ts +17 -0
- package/dist/entities/agent-definition.entity.d.ts.map +1 -0
- package/dist/entities/agent-definition.entity.js +70 -0
- package/dist/entities/agent-definition.entity.js.map +1 -0
- package/dist/entities/agent-execution.entity.d.ts +23 -0
- package/dist/entities/agent-execution.entity.d.ts.map +1 -0
- package/dist/entities/agent-execution.entity.js +93 -0
- package/dist/entities/agent-execution.entity.js.map +1 -0
- package/dist/entities/agent-instance.entity.d.ts +19 -0
- package/dist/entities/agent-instance.entity.d.ts.map +1 -0
- package/dist/entities/agent-instance.entity.js +76 -0
- package/dist/entities/agent-instance.entity.js.map +1 -0
- package/dist/entities/capability-definition.entity.d.ts +20 -0
- package/dist/entities/capability-definition.entity.d.ts.map +1 -0
- package/dist/entities/capability-definition.entity.js +77 -0
- package/dist/entities/capability-definition.entity.js.map +1 -0
- package/dist/entities/client-registration.entity.d.ts +19 -0
- package/dist/entities/client-registration.entity.d.ts.map +1 -0
- package/dist/entities/client-registration.entity.js +79 -0
- package/dist/entities/client-registration.entity.js.map +1 -0
- package/dist/entities/index.d.ts +7 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +16 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/services/agent.service.d.ts +23 -0
- package/dist/services/agent.service.d.ts.map +1 -0
- package/dist/services/agent.service.js +76 -0
- package/dist/services/agent.service.js.map +1 -0
- package/dist/services/capability-router.service.d.ts +45 -0
- package/dist/services/capability-router.service.d.ts.map +1 -0
- package/dist/services/capability-router.service.js +120 -0
- package/dist/services/capability-router.service.js.map +1 -0
- package/dist/services/client-registration.service.d.ts +27 -0
- package/dist/services/client-registration.service.d.ts.map +1 -0
- package/dist/services/client-registration.service.js +83 -0
- package/dist/services/client-registration.service.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/sync-bridge.service.d.ts +41 -0
- package/dist/services/sync-bridge.service.d.ts.map +1 -0
- package/dist/services/sync-bridge.service.js +118 -0
- package/dist/services/sync-bridge.service.js.map +1 -0
- package/package.json +94 -0
- package/web/components/CliTestDialog.tsx +158 -0
- package/web/index.ts +19 -0
- package/web/manifest.ts +14 -0
- package/web/messages/en-US.json +81 -0
- package/web/messages/zh-CN.json +81 -0
- package/web/pages/AiCliToolsPage.tsx +223 -0
- package/web/pages/WorkspaceSection.tsx +260 -0
- package/web/pages/WorkspacesPage.tsx +397 -0
- package/web/services/ai-cli-service.ts +129 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.module.d.ts","sourceRoot":"","sources":["../src/ai.module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,YAAY,CAAC;AAW1D,eAAO,MAAM,QAAQ,EAAE,OAgCtB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiModule = void 0;
|
|
4
|
+
const core_1 = require("@octo/core");
|
|
5
|
+
// CLI integration
|
|
6
|
+
const cli_registry_service_js_1 = require("./cli/cli-registry.service.js");
|
|
7
|
+
const workspace_service_js_1 = require("./cli/workspace.service.js");
|
|
8
|
+
const claude_cli_adapter_js_1 = require("./cli/adapters/claude-cli.adapter.js");
|
|
9
|
+
const gemini_cli_adapter_js_1 = require("./cli/adapters/gemini-cli.adapter.js");
|
|
10
|
+
const codex_cli_adapter_js_1 = require("./cli/adapters/codex-cli.adapter.js");
|
|
11
|
+
const antigravity_adapter_js_1 = require("./cli/adapters/antigravity.adapter.js");
|
|
12
|
+
const ai_cli_controller_js_1 = require("./cli/controllers/ai-cli.controller.js");
|
|
13
|
+
exports.AiModule = {
|
|
14
|
+
name: 'ai',
|
|
15
|
+
entities: [],
|
|
16
|
+
async initialize(_ctx) {
|
|
17
|
+
// Initialize CLI registry with built-in adapters
|
|
18
|
+
const cliRegistry = core_1.Container.get(cli_registry_service_js_1.CliRegistryService);
|
|
19
|
+
cliRegistry.registerAdapter(new claude_cli_adapter_js_1.ClaudeCliAdapter());
|
|
20
|
+
cliRegistry.registerAdapter(new gemini_cli_adapter_js_1.GeminiCliAdapter());
|
|
21
|
+
cliRegistry.registerAdapter(new codex_cli_adapter_js_1.CodexCliAdapter());
|
|
22
|
+
cliRegistry.registerAdapter(new antigravity_adapter_js_1.AntigravityAdapter());
|
|
23
|
+
// Initialize workspace service
|
|
24
|
+
const dataDir = process.env.DATA_DIR || './data';
|
|
25
|
+
const workspaceService = core_1.Container.get(workspace_service_js_1.WorkspaceService);
|
|
26
|
+
workspaceService.initialize(dataDir);
|
|
27
|
+
const logger = core_1.Container.get(core_1.LoggerService);
|
|
28
|
+
logger.info('[AiModule] CLI registry and workspace service initialized');
|
|
29
|
+
},
|
|
30
|
+
registerRoutes(app, _ctx) {
|
|
31
|
+
const controllers = [
|
|
32
|
+
core_1.Container.get(ai_cli_controller_js_1.AiCliController),
|
|
33
|
+
];
|
|
34
|
+
(0, core_1.registerControllers)(app, controllers);
|
|
35
|
+
},
|
|
36
|
+
async destroy() {
|
|
37
|
+
// No cleanup needed
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=ai.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.module.js","sourceRoot":"","sources":["../src/ai.module.ts"],"names":[],"mappings":";;;AAAA,qCAA2E;AAG3E,kBAAkB;AAClB,2EAAmE;AACnE,qEAA8D;AAC9D,gFAAwE;AACxE,gFAAwE;AACxE,8EAAsE;AACtE,kFAA2E;AAC3E,iFAAyE;AAE5D,QAAA,QAAQ,GAAY;IAC/B,IAAI,EAAE,IAAI;IAEV,QAAQ,EAAE,EAAE;IAEZ,KAAK,CAAC,UAAU,CAAC,IAAoB;QACnC,iDAAiD;QACjD,MAAM,WAAW,GAAG,gBAAS,CAAC,GAAG,CAAC,4CAAkB,CAAC,CAAC;QACtD,WAAW,CAAC,eAAe,CAAC,IAAI,wCAAgB,EAAE,CAAC,CAAC;QACpD,WAAW,CAAC,eAAe,CAAC,IAAI,wCAAgB,EAAE,CAAC,CAAC;QACpD,WAAW,CAAC,eAAe,CAAC,IAAI,sCAAe,EAAE,CAAC,CAAC;QACnD,WAAW,CAAC,eAAe,CAAC,IAAI,2CAAkB,EAAE,CAAC,CAAC;QAEtD,+BAA+B;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACjD,MAAM,gBAAgB,GAAG,gBAAS,CAAC,GAAG,CAAC,uCAAgB,CAAC,CAAC;QACzD,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,gBAAS,CAAC,GAAG,CAAC,oBAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;IAED,cAAc,CAAC,GAAG,EAAE,IAAI;QACtB,MAAM,WAAW,GAAG;YAClB,gBAAS,CAAC,GAAG,CAAC,sCAAe,CAAC;SAC/B,CAAC;QACF,IAAA,0BAAmB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,oBAAoB;IACtB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ICliAdapter, CliToolInfo, CliExecuteOptions, CliExecuteResult, AdapterExecutionType } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter for Antigravity Tools (local OpenAI-compatible HTTP proxy).
|
|
4
|
+
*
|
|
5
|
+
* Unlike CLI adapters, this adapter communicates via HTTP:
|
|
6
|
+
* - POST /v1/chat/completions — execute prompt
|
|
7
|
+
* - GET /v1/models — list available models
|
|
8
|
+
*
|
|
9
|
+
* Config read from ~/.antigravity_tools/gui_config.json
|
|
10
|
+
*/
|
|
11
|
+
export declare class AntigravityAdapter implements ICliAdapter {
|
|
12
|
+
readonly toolName: "antigravity";
|
|
13
|
+
readonly displayName = "Antigravity Tools";
|
|
14
|
+
readonly executionType: AdapterExecutionType;
|
|
15
|
+
private port;
|
|
16
|
+
private apiKey;
|
|
17
|
+
private get baseUrl();
|
|
18
|
+
buildArgs(_options: CliExecuteOptions): string[];
|
|
19
|
+
buildEnv(_options: CliExecuteOptions): Record<string, string>;
|
|
20
|
+
parseOutput(stdout: string, _stderr: string, exitCode: number, durationMs: number): CliExecuteResult;
|
|
21
|
+
detectInstallation(): Promise<CliToolInfo | null>;
|
|
22
|
+
executeHttp(options: CliExecuteOptions): Promise<CliExecuteResult>;
|
|
23
|
+
listModels(): Promise<string[]>;
|
|
24
|
+
getDefaultModel(): string;
|
|
25
|
+
private loadConfig;
|
|
26
|
+
private checkHealth;
|
|
27
|
+
private fetchModels;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=antigravity.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.adapter.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/antigravity.adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAcrB;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,WAAW,uBAAuB;IAC3C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAU;IAEtD,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAmB;IAEjC,OAAO,KAAK,OAAO,GAElB;IAID,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAIhD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI7D,WAAW,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,gBAAgB;IAYb,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmBjD,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmElE,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKrC,eAAe,IAAI,MAAM;YAMX,UAAU;YAYV,WAAW;YAYX,WAAW;CAkB1B"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AntigravityAdapter = void 0;
|
|
4
|
+
const promises_1 = require("node:fs/promises");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const CONFIG_PATH = (0, node_path_1.join)((0, node_os_1.homedir)(), '.antigravity_tools', 'gui_config.json');
|
|
8
|
+
const DEFAULT_PORT = 8045;
|
|
9
|
+
const DEFAULT_API_KEY = 'sk-antigravity';
|
|
10
|
+
const DEFAULT_MODEL = 'gemini-2.5-flash';
|
|
11
|
+
/**
|
|
12
|
+
* Adapter for Antigravity Tools (local OpenAI-compatible HTTP proxy).
|
|
13
|
+
*
|
|
14
|
+
* Unlike CLI adapters, this adapter communicates via HTTP:
|
|
15
|
+
* - POST /v1/chat/completions — execute prompt
|
|
16
|
+
* - GET /v1/models — list available models
|
|
17
|
+
*
|
|
18
|
+
* Config read from ~/.antigravity_tools/gui_config.json
|
|
19
|
+
*/
|
|
20
|
+
class AntigravityAdapter {
|
|
21
|
+
toolName = 'antigravity';
|
|
22
|
+
displayName = 'Antigravity Tools';
|
|
23
|
+
executionType = 'http';
|
|
24
|
+
port = DEFAULT_PORT;
|
|
25
|
+
apiKey = DEFAULT_API_KEY;
|
|
26
|
+
get baseUrl() {
|
|
27
|
+
return `http://127.0.0.1:${this.port}`;
|
|
28
|
+
}
|
|
29
|
+
// ─── CLI interface stubs (not used for HTTP adapters) ──────
|
|
30
|
+
buildArgs(_options) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
buildEnv(_options) {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
parseOutput(stdout, _stderr, exitCode, durationMs) {
|
|
37
|
+
return {
|
|
38
|
+
success: exitCode === 0,
|
|
39
|
+
output: stdout,
|
|
40
|
+
exitCode,
|
|
41
|
+
durationMs,
|
|
42
|
+
tool: this.toolName,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// ─── Detection ─────────────────────────────────────────────
|
|
46
|
+
async detectInstallation() {
|
|
47
|
+
await this.loadConfig();
|
|
48
|
+
const isAvailable = await this.checkHealth();
|
|
49
|
+
const models = isAvailable ? await this.fetchModels() : [];
|
|
50
|
+
return {
|
|
51
|
+
name: this.toolName,
|
|
52
|
+
displayName: this.displayName,
|
|
53
|
+
version: '',
|
|
54
|
+
executablePath: this.baseUrl,
|
|
55
|
+
isAvailable,
|
|
56
|
+
models,
|
|
57
|
+
defaultModel: DEFAULT_MODEL,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ─── HTTP execution ────────────────────────────────────────
|
|
61
|
+
async executeHttp(options) {
|
|
62
|
+
const model = options.model || DEFAULT_MODEL;
|
|
63
|
+
const startTime = Date.now();
|
|
64
|
+
const timeoutMs = options.timeoutMs ?? 300_000;
|
|
65
|
+
try {
|
|
66
|
+
const controller = new AbortController();
|
|
67
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
68
|
+
const res = await fetch(`${this.baseUrl}/v1/chat/completions`, {
|
|
69
|
+
method: 'POST',
|
|
70
|
+
headers: {
|
|
71
|
+
'Content-Type': 'application/json',
|
|
72
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
73
|
+
},
|
|
74
|
+
body: JSON.stringify({
|
|
75
|
+
model,
|
|
76
|
+
messages: [{ role: 'user', content: options.prompt }],
|
|
77
|
+
}),
|
|
78
|
+
signal: controller.signal,
|
|
79
|
+
});
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
const durationMs = Date.now() - startTime;
|
|
82
|
+
if (!res.ok) {
|
|
83
|
+
const text = await res.text();
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
output: '',
|
|
87
|
+
error: `HTTP ${res.status}: ${text}`,
|
|
88
|
+
exitCode: 1,
|
|
89
|
+
durationMs,
|
|
90
|
+
tool: this.toolName,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const data = await res.json();
|
|
94
|
+
const content = data.choices?.[0]?.message?.content ?? '';
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
output: content,
|
|
98
|
+
exitCode: 0,
|
|
99
|
+
durationMs,
|
|
100
|
+
tool: this.toolName,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const durationMs = Date.now() - startTime;
|
|
105
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
output: '',
|
|
109
|
+
error: message.includes('abort')
|
|
110
|
+
? `Execution timed out after ${timeoutMs}ms`
|
|
111
|
+
: `Request failed: ${message}`,
|
|
112
|
+
exitCode: 1,
|
|
113
|
+
durationMs,
|
|
114
|
+
tool: this.toolName,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ─── Model management ──────────────────────────────────────
|
|
119
|
+
async listModels() {
|
|
120
|
+
await this.loadConfig();
|
|
121
|
+
return this.fetchModels();
|
|
122
|
+
}
|
|
123
|
+
getDefaultModel() {
|
|
124
|
+
return DEFAULT_MODEL;
|
|
125
|
+
}
|
|
126
|
+
// ─── Private helpers ───────────────────────────────────────
|
|
127
|
+
async loadConfig() {
|
|
128
|
+
try {
|
|
129
|
+
const raw = await (0, promises_1.readFile)(CONFIG_PATH, 'utf-8');
|
|
130
|
+
const config = JSON.parse(raw);
|
|
131
|
+
this.port = config.proxy?.port ?? DEFAULT_PORT;
|
|
132
|
+
this.apiKey = config.proxy?.api_key ?? DEFAULT_API_KEY;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
this.port = DEFAULT_PORT;
|
|
136
|
+
this.apiKey = DEFAULT_API_KEY;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async checkHealth() {
|
|
140
|
+
try {
|
|
141
|
+
const res = await fetch(`${this.baseUrl}/v1/models`, {
|
|
142
|
+
headers: { Authorization: `Bearer ${this.apiKey}` },
|
|
143
|
+
signal: AbortSignal.timeout(5000),
|
|
144
|
+
});
|
|
145
|
+
return res.ok;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async fetchModels() {
|
|
152
|
+
try {
|
|
153
|
+
const res = await fetch(`${this.baseUrl}/v1/models`, {
|
|
154
|
+
headers: { Authorization: `Bearer ${this.apiKey}` },
|
|
155
|
+
signal: AbortSignal.timeout(5000),
|
|
156
|
+
});
|
|
157
|
+
if (!res.ok)
|
|
158
|
+
return [];
|
|
159
|
+
const data = await res.json();
|
|
160
|
+
return (data.data ?? [])
|
|
161
|
+
.map((m) => m.id)
|
|
162
|
+
.filter((id) => typeof id === 'string');
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.AntigravityAdapter = AntigravityAdapter;
|
|
170
|
+
//# sourceMappingURL=antigravity.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.adapter.js","sourceRoot":"","sources":["../../../src/cli/adapters/antigravity.adapter.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAC5C,qCAAkC;AAClC,yCAAiC;AASjC,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;AAC7E,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AASzC;;;;;;;;GAQG;AACH,MAAa,kBAAkB;IACpB,QAAQ,GAAG,aAAsB,CAAC;IAClC,WAAW,GAAG,mBAAmB,CAAC;IAClC,aAAa,GAAyB,MAAM,CAAC;IAE9C,IAAI,GAAG,YAAY,CAAC;IACpB,MAAM,GAAG,eAAe,CAAC;IAEjC,IAAY,OAAO;QACjB,OAAO,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,8DAA8D;IAE9D,SAAS,CAAC,QAA2B;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,QAAQ,CAAC,QAA2B;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,CACT,MAAc,EACd,OAAe,EACf,QAAgB,EAChB,UAAkB;QAElB,OAAO;YACL,OAAO,EAAE,QAAQ,KAAK,CAAC;YACvB,MAAM,EAAE,MAAM;YACd,QAAQ;YACR,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAC;IACJ,CAAC;IAED,8DAA8D;IAE9D,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,EAAE;YACX,cAAc,EAAE,IAAI,CAAC,OAAO;YAC5B,WAAW;YACX,MAAM;YACN,YAAY,EAAE,aAAa;SAC5B,CAAC;IACJ,CAAC;IAED,8DAA8D;IAE9D,KAAK,CAAC,WAAW,CAAC,OAA0B;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,sBAAsB,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK;oBACL,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;iBACtD,CAAC;gBACF,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE;oBACpC,QAAQ,EAAE,CAAC;oBACX,UAAU;oBACV,IAAI,EAAE,IAAI,CAAC,QAAQ;iBACpB,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAE1B,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YAE1D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,CAAC;gBACX,UAAU;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ;aACpB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC1C,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC9B,CAAC,CAAC,6BAA6B,SAAS,IAAI;oBAC5C,CAAC,CAAC,mBAAmB,OAAO,EAAE;gBAChC,QAAQ,EAAE,CAAC;gBACX,UAAU;gBACV,IAAI,EAAE,IAAI,CAAC,QAAQ;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8DAA8D;IAE9D,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,eAAe;QACb,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,8DAA8D;IAEtD,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;YACpD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,YAAY,CAAC;YAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,YAAY,EAAE;gBACnD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;gBACnD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,YAAY,EAAE;gBACnD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;gBACnD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YAEvB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAE1B,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;iBACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAlLD,gDAkLC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ICliAdapter, CliToolInfo, CliExecuteOptions, CliExecuteResult, AdapterExecutionType } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter for Claude CLI (Anthropic).
|
|
4
|
+
*
|
|
5
|
+
* Claude CLI supports:
|
|
6
|
+
* - `-p` / `--print`: Single-shot print mode (non-interactive)
|
|
7
|
+
* - `--output-format json`: JSON structured output
|
|
8
|
+
* - `--max-turns N`: Limit agentic turns
|
|
9
|
+
* - stdin: Accepts prompt via stdin
|
|
10
|
+
*/
|
|
11
|
+
export declare class ClaudeCliAdapter implements ICliAdapter {
|
|
12
|
+
readonly toolName: "claude";
|
|
13
|
+
readonly displayName = "Claude CLI";
|
|
14
|
+
readonly executionType: AdapterExecutionType;
|
|
15
|
+
private static readonly MODELS;
|
|
16
|
+
buildArgs(options: CliExecuteOptions): string[];
|
|
17
|
+
buildEnv(_options: CliExecuteOptions): Record<string, string>;
|
|
18
|
+
parseOutput(stdout: string, stderr: string, exitCode: number, durationMs: number): CliExecuteResult;
|
|
19
|
+
detectInstallation(): Promise<CliToolInfo | null>;
|
|
20
|
+
listModels(): Promise<string[]>;
|
|
21
|
+
getDefaultModel(): string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=claude-cli.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.adapter.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/claude-cli.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,QAAQ,CAAC,WAAW,gBAAgB;IACpC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAW;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAI5B;IAEF,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAsB/C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAK7D,WAAW,CACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,gBAAgB;IAcb,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiBjD,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,eAAe,IAAI,MAAM;CAG1B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClaudeCliAdapter = void 0;
|
|
4
|
+
const detect_cli_js_1 = require("./detect-cli.js");
|
|
5
|
+
/**
|
|
6
|
+
* Adapter for Claude CLI (Anthropic).
|
|
7
|
+
*
|
|
8
|
+
* Claude CLI supports:
|
|
9
|
+
* - `-p` / `--print`: Single-shot print mode (non-interactive)
|
|
10
|
+
* - `--output-format json`: JSON structured output
|
|
11
|
+
* - `--max-turns N`: Limit agentic turns
|
|
12
|
+
* - stdin: Accepts prompt via stdin
|
|
13
|
+
*/
|
|
14
|
+
class ClaudeCliAdapter {
|
|
15
|
+
toolName = 'claude';
|
|
16
|
+
displayName = 'Claude CLI';
|
|
17
|
+
executionType = 'spawn';
|
|
18
|
+
static MODELS = [
|
|
19
|
+
'sonnet',
|
|
20
|
+
'opus',
|
|
21
|
+
'haiku',
|
|
22
|
+
];
|
|
23
|
+
buildArgs(options) {
|
|
24
|
+
const args = ['-p'];
|
|
25
|
+
if (options.model) {
|
|
26
|
+
args.push('--model', options.model);
|
|
27
|
+
}
|
|
28
|
+
if (options.jsonOutput) {
|
|
29
|
+
args.push('--output-format', 'json');
|
|
30
|
+
}
|
|
31
|
+
// Prompt is passed via stdin in CliExecutorService,
|
|
32
|
+
// but Claude CLI also accepts it as the last positional argument
|
|
33
|
+
args.push(options.prompt);
|
|
34
|
+
if (options.args) {
|
|
35
|
+
args.push(...options.args);
|
|
36
|
+
}
|
|
37
|
+
return args;
|
|
38
|
+
}
|
|
39
|
+
buildEnv(_options) {
|
|
40
|
+
// Claude CLI uses ANTHROPIC_API_KEY from system env
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
parseOutput(stdout, stderr, exitCode, durationMs) {
|
|
44
|
+
const isSuccess = exitCode === 0;
|
|
45
|
+
// CLI tools may output informational messages to stderr even on success
|
|
46
|
+
// Only treat stderr as error when exitCode !== 0
|
|
47
|
+
return {
|
|
48
|
+
success: isSuccess,
|
|
49
|
+
output: stdout.trim(),
|
|
50
|
+
error: isSuccess ? undefined : (stderr.trim() || undefined),
|
|
51
|
+
exitCode,
|
|
52
|
+
durationMs,
|
|
53
|
+
tool: this.toolName,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async detectInstallation() {
|
|
57
|
+
const executablePath = await (0, detect_cli_js_1.findExecutable)('claude');
|
|
58
|
+
if (!executablePath)
|
|
59
|
+
return null;
|
|
60
|
+
const version = await (0, detect_cli_js_1.getCliVersion)(executablePath);
|
|
61
|
+
return {
|
|
62
|
+
name: this.toolName,
|
|
63
|
+
displayName: this.displayName,
|
|
64
|
+
version,
|
|
65
|
+
executablePath,
|
|
66
|
+
isAvailable: true,
|
|
67
|
+
models: ClaudeCliAdapter.MODELS,
|
|
68
|
+
defaultModel: this.getDefaultModel(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async listModels() {
|
|
72
|
+
return ClaudeCliAdapter.MODELS;
|
|
73
|
+
}
|
|
74
|
+
getDefaultModel() {
|
|
75
|
+
return 'sonnet';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.ClaudeCliAdapter = ClaudeCliAdapter;
|
|
79
|
+
//# sourceMappingURL=claude-cli.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.adapter.js","sourceRoot":"","sources":["../../../src/cli/adapters/claude-cli.adapter.ts"],"names":[],"mappings":";;;AAOA,mDAAgE;AAEhE;;;;;;;;GAQG;AACH,MAAa,gBAAgB;IAClB,QAAQ,GAAG,QAAiB,CAAC;IAC7B,WAAW,GAAG,YAAY,CAAC;IAC3B,aAAa,GAAyB,OAAO,CAAC;IAE/C,MAAM,CAAU,MAAM,GAAG;QAC/B,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAC;IAEF,SAAS,CAAC,OAA0B;QAClC,MAAM,IAAI,GAAa,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,oDAAoD;QACpD,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,QAA2B;QAClC,oDAAoD;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,CACT,MAAc,EACd,MAAc,EACd,QAAgB,EAChB,UAAkB;QAElB,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC;QACjC,wEAAwE;QACxE,iDAAiD;QACjD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAC3D,QAAQ;YACR,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,cAAc,GAAG,MAAM,IAAA,8BAAc,EAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAa,EAAC,cAAc,CAAC,CAAC;QAEpD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO;YACP,cAAc;YACd,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,gBAAgB,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,eAAe;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;;AAhFH,4CAiFC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ICliAdapter, CliToolInfo, CliExecuteOptions, CliExecuteResult, AdapterExecutionType } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter for Codex CLI (OpenAI).
|
|
4
|
+
*
|
|
5
|
+
* Codex CLI supports:
|
|
6
|
+
* - `-p`: Single-shot print mode (non-interactive)
|
|
7
|
+
* - `--json`: JSON output
|
|
8
|
+
* - stdin: Accepts prompt via stdin
|
|
9
|
+
*/
|
|
10
|
+
export declare class CodexCliAdapter implements ICliAdapter {
|
|
11
|
+
readonly toolName: "codex";
|
|
12
|
+
readonly displayName = "Codex CLI";
|
|
13
|
+
readonly executionType: AdapterExecutionType;
|
|
14
|
+
private static readonly MODELS;
|
|
15
|
+
buildArgs(options: CliExecuteOptions): string[];
|
|
16
|
+
buildEnv(_options: CliExecuteOptions): Record<string, string>;
|
|
17
|
+
parseOutput(stdout: string, stderr: string, exitCode: number, durationMs: number): CliExecuteResult;
|
|
18
|
+
detectInstallation(): Promise<CliToolInfo | null>;
|
|
19
|
+
listModels(): Promise<string[]>;
|
|
20
|
+
getDefaultModel(): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=codex-cli.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli.adapter.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/codex-cli.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAGrB;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IACrC,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAW;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAI5B;IAEF,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAoB/C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAK7D,WAAW,CACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,gBAAgB;IAcb,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiBjD,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,eAAe,IAAI,MAAM;CAG1B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodexCliAdapter = void 0;
|
|
4
|
+
const detect_cli_js_1 = require("./detect-cli.js");
|
|
5
|
+
/**
|
|
6
|
+
* Adapter for Codex CLI (OpenAI).
|
|
7
|
+
*
|
|
8
|
+
* Codex CLI supports:
|
|
9
|
+
* - `-p`: Single-shot print mode (non-interactive)
|
|
10
|
+
* - `--json`: JSON output
|
|
11
|
+
* - stdin: Accepts prompt via stdin
|
|
12
|
+
*/
|
|
13
|
+
class CodexCliAdapter {
|
|
14
|
+
toolName = 'codex';
|
|
15
|
+
displayName = 'Codex CLI';
|
|
16
|
+
executionType = 'spawn';
|
|
17
|
+
static MODELS = [
|
|
18
|
+
'o4-mini',
|
|
19
|
+
'o3',
|
|
20
|
+
'gpt-4.1',
|
|
21
|
+
];
|
|
22
|
+
buildArgs(options) {
|
|
23
|
+
const args = [];
|
|
24
|
+
if (options.model) {
|
|
25
|
+
args.push('--model', options.model);
|
|
26
|
+
}
|
|
27
|
+
args.push('-p', options.prompt);
|
|
28
|
+
if (options.jsonOutput) {
|
|
29
|
+
args.push('--json');
|
|
30
|
+
}
|
|
31
|
+
if (options.args) {
|
|
32
|
+
args.push(...options.args);
|
|
33
|
+
}
|
|
34
|
+
return args;
|
|
35
|
+
}
|
|
36
|
+
buildEnv(_options) {
|
|
37
|
+
// Codex CLI uses OPENAI_API_KEY from system env
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
parseOutput(stdout, stderr, exitCode, durationMs) {
|
|
41
|
+
const isSuccess = exitCode === 0;
|
|
42
|
+
// CLI tools may output informational messages to stderr even on success
|
|
43
|
+
// Only treat stderr as error when exitCode !== 0
|
|
44
|
+
return {
|
|
45
|
+
success: isSuccess,
|
|
46
|
+
output: stdout.trim(),
|
|
47
|
+
error: isSuccess ? undefined : (stderr.trim() || undefined),
|
|
48
|
+
exitCode,
|
|
49
|
+
durationMs,
|
|
50
|
+
tool: this.toolName,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async detectInstallation() {
|
|
54
|
+
const executablePath = await (0, detect_cli_js_1.findExecutable)('codex');
|
|
55
|
+
if (!executablePath)
|
|
56
|
+
return null;
|
|
57
|
+
const version = await (0, detect_cli_js_1.getCliVersion)(executablePath);
|
|
58
|
+
return {
|
|
59
|
+
name: this.toolName,
|
|
60
|
+
displayName: this.displayName,
|
|
61
|
+
version,
|
|
62
|
+
executablePath,
|
|
63
|
+
isAvailable: true,
|
|
64
|
+
models: CodexCliAdapter.MODELS,
|
|
65
|
+
defaultModel: this.getDefaultModel(),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async listModels() {
|
|
69
|
+
return CodexCliAdapter.MODELS;
|
|
70
|
+
}
|
|
71
|
+
getDefaultModel() {
|
|
72
|
+
return 'o4-mini';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.CodexCliAdapter = CodexCliAdapter;
|
|
76
|
+
//# sourceMappingURL=codex-cli.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli.adapter.js","sourceRoot":"","sources":["../../../src/cli/adapters/codex-cli.adapter.ts"],"names":[],"mappings":";;;AAOA,mDAAgE;AAEhE;;;;;;;GAOG;AACH,MAAa,eAAe;IACjB,QAAQ,GAAG,OAAgB,CAAC;IAC5B,WAAW,GAAG,WAAW,CAAC;IAC1B,aAAa,GAAyB,OAAO,CAAC;IAE/C,MAAM,CAAU,MAAM,GAAG;QAC/B,SAAS;QACT,IAAI;QACJ,SAAS;KACV,CAAC;IAEF,SAAS,CAAC,OAA0B;QAClC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,QAA2B;QAClC,gDAAgD;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,CACT,MAAc,EACd,MAAc,EACd,QAAgB,EAChB,UAAkB;QAElB,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC;QACjC,wEAAwE;QACxE,iDAAiD;QACjD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAC3D,QAAQ;YACR,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,cAAc,GAAG,MAAM,IAAA,8BAAc,EAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAa,EAAC,cAAc,CAAC,CAAC;QAEpD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO;YACP,cAAc;YACd,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,eAAe,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,eAAe;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;;AA9EH,0CA+EC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect if a CLI command is available by running `which` (unix) or `where` (windows).
|
|
3
|
+
* Returns the executable path or null.
|
|
4
|
+
*/
|
|
5
|
+
export declare function findExecutable(command: string): Promise<string | null>;
|
|
6
|
+
/**
|
|
7
|
+
* Get CLI version by running `command --version`.
|
|
8
|
+
* Returns the version string or empty string.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getCliVersion(executablePath: string, versionFlag?: string): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=detect-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-cli.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/detect-cli.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,cAAc,EAAE,MAAM,EACtB,WAAW,SAAc,GACxB,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findExecutable = findExecutable;
|
|
4
|
+
exports.getCliVersion = getCliVersion;
|
|
5
|
+
const node_child_process_1 = require("node:child_process");
|
|
6
|
+
const node_util_1 = require("node:util");
|
|
7
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
8
|
+
/**
|
|
9
|
+
* Detect if a CLI command is available by running `which` (unix) or `where` (windows).
|
|
10
|
+
* Returns the executable path or null.
|
|
11
|
+
*/
|
|
12
|
+
async function findExecutable(command) {
|
|
13
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
14
|
+
try {
|
|
15
|
+
const { stdout } = await execFileAsync(cmd, [command], { timeout: 5000 });
|
|
16
|
+
const path = stdout.trim().split('\n')[0];
|
|
17
|
+
return path || null;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get CLI version by running `command --version`.
|
|
25
|
+
* Returns the version string or empty string.
|
|
26
|
+
*/
|
|
27
|
+
async function getCliVersion(executablePath, versionFlag = '--version') {
|
|
28
|
+
try {
|
|
29
|
+
const { stdout, stderr } = await execFileAsync(executablePath, [versionFlag], { timeout: 10000 });
|
|
30
|
+
// Some CLIs output version to stderr
|
|
31
|
+
const output = (stdout || stderr).trim();
|
|
32
|
+
// Extract version number pattern (e.g., "1.2.3" or "v1.2.3")
|
|
33
|
+
const match = output.match(/v?(\d+\.\d+\.\d+[\w.-]*)/);
|
|
34
|
+
return match ? match[1] : output.split('\n')[0];
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=detect-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-cli.js","sourceRoot":"","sources":["../../../src/cli/adapters/detect-cli.ts"],"names":[],"mappings":";;AASA,wCAWC;AAMD,sCAkBC;AA5CD,2DAA8C;AAC9C,yCAAsC;AAEtC,MAAM,aAAa,GAAG,IAAA,qBAAS,EAAC,6BAAQ,CAAC,CAAC;AAE1C;;;GAGG;AACI,KAAK,UAAU,cAAc,CAClC,OAAe;IAEf,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,aAAa,CACjC,cAAsB,EACtB,WAAW,GAAG,WAAW;IAEzB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAC5C,cAAc,EACd,CAAC,WAAW,CAAC,EACb,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAC;QACF,qCAAqC;QACrC,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,6DAA6D;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ICliAdapter, CliToolInfo, CliExecuteOptions, CliExecuteResult, AdapterExecutionType } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter for Gemini CLI (Google).
|
|
4
|
+
*
|
|
5
|
+
* Gemini CLI supports:
|
|
6
|
+
* - `-p`: Single-shot print mode (non-interactive)
|
|
7
|
+
* - stdin: Accepts prompt via stdin
|
|
8
|
+
*/
|
|
9
|
+
export declare class GeminiCliAdapter implements ICliAdapter {
|
|
10
|
+
readonly toolName: "gemini";
|
|
11
|
+
readonly displayName = "Gemini CLI";
|
|
12
|
+
readonly executionType: AdapterExecutionType;
|
|
13
|
+
private static readonly MODELS;
|
|
14
|
+
buildArgs(options: CliExecuteOptions): string[];
|
|
15
|
+
buildEnv(_options: CliExecuteOptions): Record<string, string>;
|
|
16
|
+
parseOutput(stdout: string, stderr: string, exitCode: number, durationMs: number): CliExecuteResult;
|
|
17
|
+
detectInstallation(): Promise<CliToolInfo | null>;
|
|
18
|
+
listModels(): Promise<string[]>;
|
|
19
|
+
getDefaultModel(): string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=gemini-cli.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-cli.adapter.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/gemini-cli.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAGrB;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,QAAQ,CAAC,WAAW,gBAAgB;IACpC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAW;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAG5B;IAEF,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAgB/C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAK7D,WAAW,CACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,gBAAgB;IAeb,kBAAkB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiBjD,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,eAAe,IAAI,MAAM;CAG1B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GeminiCliAdapter = void 0;
|
|
4
|
+
const detect_cli_js_1 = require("./detect-cli.js");
|
|
5
|
+
/**
|
|
6
|
+
* Adapter for Gemini CLI (Google).
|
|
7
|
+
*
|
|
8
|
+
* Gemini CLI supports:
|
|
9
|
+
* - `-p`: Single-shot print mode (non-interactive)
|
|
10
|
+
* - stdin: Accepts prompt via stdin
|
|
11
|
+
*/
|
|
12
|
+
class GeminiCliAdapter {
|
|
13
|
+
toolName = 'gemini';
|
|
14
|
+
displayName = 'Gemini CLI';
|
|
15
|
+
executionType = 'spawn';
|
|
16
|
+
static MODELS = [
|
|
17
|
+
'gemini-2.5-flash',
|
|
18
|
+
'gemini-2.5-pro',
|
|
19
|
+
];
|
|
20
|
+
buildArgs(options) {
|
|
21
|
+
const args = [];
|
|
22
|
+
if (options.model) {
|
|
23
|
+
args.push('--model', options.model);
|
|
24
|
+
}
|
|
25
|
+
args.push('-p', options.prompt);
|
|
26
|
+
if (options.args) {
|
|
27
|
+
args.push(...options.args);
|
|
28
|
+
}
|
|
29
|
+
return args;
|
|
30
|
+
}
|
|
31
|
+
buildEnv(_options) {
|
|
32
|
+
// Gemini CLI uses GEMINI_API_KEY from system env
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
parseOutput(stdout, stderr, exitCode, durationMs) {
|
|
36
|
+
const isSuccess = exitCode === 0;
|
|
37
|
+
// Gemini CLI outputs informational messages to stderr even on success
|
|
38
|
+
// (e.g. "Loaded cached credentials.", "Loading extension: conductor")
|
|
39
|
+
// Only treat stderr as error when exitCode !== 0
|
|
40
|
+
return {
|
|
41
|
+
success: isSuccess,
|
|
42
|
+
output: stdout.trim(),
|
|
43
|
+
error: isSuccess ? undefined : (stderr.trim() || undefined),
|
|
44
|
+
exitCode,
|
|
45
|
+
durationMs,
|
|
46
|
+
tool: this.toolName,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async detectInstallation() {
|
|
50
|
+
const executablePath = await (0, detect_cli_js_1.findExecutable)('gemini');
|
|
51
|
+
if (!executablePath)
|
|
52
|
+
return null;
|
|
53
|
+
const version = await (0, detect_cli_js_1.getCliVersion)(executablePath);
|
|
54
|
+
return {
|
|
55
|
+
name: this.toolName,
|
|
56
|
+
displayName: this.displayName,
|
|
57
|
+
version,
|
|
58
|
+
executablePath,
|
|
59
|
+
isAvailable: true,
|
|
60
|
+
models: GeminiCliAdapter.MODELS,
|
|
61
|
+
defaultModel: this.getDefaultModel(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async listModels() {
|
|
65
|
+
return GeminiCliAdapter.MODELS;
|
|
66
|
+
}
|
|
67
|
+
getDefaultModel() {
|
|
68
|
+
return 'gemini-2.5-flash';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.GeminiCliAdapter = GeminiCliAdapter;
|
|
72
|
+
//# sourceMappingURL=gemini-cli.adapter.js.map
|