@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":"gemini-cli.adapter.js","sourceRoot":"","sources":["../../../src/cli/adapters/gemini-cli.adapter.ts"],"names":[],"mappings":";;;AAOA,mDAAgE;AAEhE;;;;;;GAMG;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,kBAAkB;QAClB,gBAAgB;KACjB,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,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,iDAAiD;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,CACT,MAAc,EACd,MAAc,EACd,QAAgB,EAChB,UAAkB;QAElB,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC;QACjC,sEAAsE;QACtE,sEAAsE;QACtE,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,kBAAkB,CAAC;IAC5B,CAAC;;AA1EH,4CA2EC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodexCliAdapter = exports.GeminiCliAdapter = exports.ClaudeCliAdapter = void 0;
|
|
4
|
+
var claude_cli_adapter_js_1 = require("./claude-cli.adapter.js");
|
|
5
|
+
Object.defineProperty(exports, "ClaudeCliAdapter", { enumerable: true, get: function () { return claude_cli_adapter_js_1.ClaudeCliAdapter; } });
|
|
6
|
+
var gemini_cli_adapter_js_1 = require("./gemini-cli.adapter.js");
|
|
7
|
+
Object.defineProperty(exports, "GeminiCliAdapter", { enumerable: true, get: function () { return gemini_cli_adapter_js_1.GeminiCliAdapter; } });
|
|
8
|
+
var codex_cli_adapter_js_1 = require("./codex-cli.adapter.js");
|
|
9
|
+
Object.defineProperty(exports, "CodexCliAdapter", { enumerable: true, get: function () { return codex_cli_adapter_js_1.CodexCliAdapter; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/adapters/index.ts"],"names":[],"mappings":";;;AAAA,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,+DAAyD;AAAhD,uHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CliExecuteOptions, CliExecuteResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Unified CLI executor service.
|
|
4
|
+
*
|
|
5
|
+
* Spawns AI CLI processes, captures output, enforces timeouts,
|
|
6
|
+
* and limits concurrency. Uses registered adapters via CliRegistryService
|
|
7
|
+
* to build tool-specific arguments and parse output.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CliExecutorService {
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly registry;
|
|
12
|
+
private activeCount;
|
|
13
|
+
private readonly waitQueue;
|
|
14
|
+
/** Execute an AI CLI tool */
|
|
15
|
+
execute(options: CliExecuteOptions): Promise<CliExecuteResult>;
|
|
16
|
+
/** Current number of active executions */
|
|
17
|
+
get activeExecutions(): number;
|
|
18
|
+
private executeInternal;
|
|
19
|
+
private createErrorResult;
|
|
20
|
+
private acquireSlot;
|
|
21
|
+
private releaseSlot;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=cli-executor.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-executor.service.d.ts","sourceRoot":"","sources":["../../src/cli/cli-executor.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMtE;;;;;;GAMG;AACH,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,6BAA6B;IACvB,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4BpE,0CAA0C;IAC1C,IAAI,gBAAgB,IAAI,MAAM,CAE7B;YAIa,eAAe;IAgH7B,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CliExecutorService = void 0;
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const core_1 = require("@octo/core");
|
|
12
|
+
const cli_registry_service_js_1 = require("./cli-registry.service.js");
|
|
13
|
+
const DEFAULT_TIMEOUT_MS = 300_000;
|
|
14
|
+
const MAX_TIMEOUT_MS = 600_000;
|
|
15
|
+
const MAX_CONCURRENT = 3;
|
|
16
|
+
/**
|
|
17
|
+
* Unified CLI executor service.
|
|
18
|
+
*
|
|
19
|
+
* Spawns AI CLI processes, captures output, enforces timeouts,
|
|
20
|
+
* and limits concurrency. Uses registered adapters via CliRegistryService
|
|
21
|
+
* to build tool-specific arguments and parse output.
|
|
22
|
+
*/
|
|
23
|
+
let CliExecutorService = class CliExecutorService {
|
|
24
|
+
logger = core_1.Container.get(core_1.LoggerService);
|
|
25
|
+
registry = core_1.Container.get(cli_registry_service_js_1.CliRegistryService);
|
|
26
|
+
activeCount = 0;
|
|
27
|
+
waitQueue = [];
|
|
28
|
+
/** Execute an AI CLI tool */
|
|
29
|
+
async execute(options) {
|
|
30
|
+
const adapter = this.registry.getAdapter(options.tool);
|
|
31
|
+
if (!adapter) {
|
|
32
|
+
return this.createErrorResult(options.tool, `No adapter registered for tool: ${options.tool}`);
|
|
33
|
+
}
|
|
34
|
+
const toolInfo = await this.registry.getToolInfo(options.tool);
|
|
35
|
+
if (!toolInfo?.isAvailable) {
|
|
36
|
+
return this.createErrorResult(options.tool, `Tool not available: ${options.tool}. Is it installed?`);
|
|
37
|
+
}
|
|
38
|
+
await this.acquireSlot();
|
|
39
|
+
try {
|
|
40
|
+
if (adapter.executionType === 'http' && adapter.executeHttp) {
|
|
41
|
+
return await adapter.executeHttp(options);
|
|
42
|
+
}
|
|
43
|
+
return await this.executeInternal(options, toolInfo.executablePath);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
this.releaseSlot();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Current number of active executions */
|
|
50
|
+
get activeExecutions() {
|
|
51
|
+
return this.activeCount;
|
|
52
|
+
}
|
|
53
|
+
// ─── Private ────────────────────────────────────────────────
|
|
54
|
+
async executeInternal(options, executablePath) {
|
|
55
|
+
const adapter = this.registry.getAdapter(options.tool);
|
|
56
|
+
const args = adapter.buildArgs(options);
|
|
57
|
+
const env = {
|
|
58
|
+
...process.env,
|
|
59
|
+
...adapter.buildEnv(options),
|
|
60
|
+
...options.env,
|
|
61
|
+
};
|
|
62
|
+
const timeoutMs = Math.min(options.timeoutMs ?? DEFAULT_TIMEOUT_MS, MAX_TIMEOUT_MS);
|
|
63
|
+
const workingDir = options.workingDir ?? process.cwd();
|
|
64
|
+
this.logger.info(`[CliExecutor] Executing ${options.tool}: ${executablePath} (timeout: ${timeoutMs}ms)`);
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
const child = (0, node_child_process_1.spawn)(executablePath, args, {
|
|
68
|
+
cwd: workingDir,
|
|
69
|
+
env,
|
|
70
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
71
|
+
});
|
|
72
|
+
let stdout = '';
|
|
73
|
+
let stderr = '';
|
|
74
|
+
let isTimedOut = false;
|
|
75
|
+
child.stdout.on('data', (data) => {
|
|
76
|
+
stdout += data.toString();
|
|
77
|
+
});
|
|
78
|
+
child.stderr.on('data', (data) => {
|
|
79
|
+
stderr += data.toString();
|
|
80
|
+
});
|
|
81
|
+
// Send prompt via stdin for security (avoid shell injection)
|
|
82
|
+
if (options.prompt) {
|
|
83
|
+
child.stdin.write(options.prompt);
|
|
84
|
+
child.stdin.end();
|
|
85
|
+
}
|
|
86
|
+
const timer = setTimeout(() => {
|
|
87
|
+
isTimedOut = true;
|
|
88
|
+
child.kill('SIGTERM');
|
|
89
|
+
// Force kill after 5 seconds if SIGTERM is ignored
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
if (!child.killed) {
|
|
92
|
+
child.kill('SIGKILL');
|
|
93
|
+
}
|
|
94
|
+
}, 5000);
|
|
95
|
+
}, timeoutMs);
|
|
96
|
+
child.on('close', (exitCode) => {
|
|
97
|
+
clearTimeout(timer);
|
|
98
|
+
const durationMs = Date.now() - startTime;
|
|
99
|
+
if (isTimedOut) {
|
|
100
|
+
this.logger.warn(`[CliExecutor] ${options.tool} timed out after ${durationMs}ms`);
|
|
101
|
+
resolve(this.createErrorResult(options.tool, `Execution timed out after ${timeoutMs}ms`, exitCode ?? 124, durationMs));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const result = adapter.parseOutput(stdout, stderr, exitCode ?? 1, durationMs);
|
|
105
|
+
this.logger.info(`[CliExecutor] ${options.tool} completed in ${durationMs}ms (exit: ${exitCode})`);
|
|
106
|
+
resolve(result);
|
|
107
|
+
});
|
|
108
|
+
child.on('error', (err) => {
|
|
109
|
+
clearTimeout(timer);
|
|
110
|
+
const durationMs = Date.now() - startTime;
|
|
111
|
+
this.logger.error(`[CliExecutor] ${options.tool} process error: ${err.message}`);
|
|
112
|
+
resolve(this.createErrorResult(options.tool, `Process error: ${err.message}`, 1, durationMs));
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
createErrorResult(tool, error, exitCode = 1, durationMs = 0) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
output: '',
|
|
120
|
+
error,
|
|
121
|
+
exitCode,
|
|
122
|
+
durationMs,
|
|
123
|
+
tool,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// ─── Concurrency control (simple semaphore) ─────────────────
|
|
127
|
+
acquireSlot() {
|
|
128
|
+
if (this.activeCount < MAX_CONCURRENT) {
|
|
129
|
+
this.activeCount++;
|
|
130
|
+
return Promise.resolve();
|
|
131
|
+
}
|
|
132
|
+
return new Promise((resolve) => {
|
|
133
|
+
this.waitQueue.push(() => {
|
|
134
|
+
this.activeCount++;
|
|
135
|
+
resolve();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
releaseSlot() {
|
|
140
|
+
this.activeCount--;
|
|
141
|
+
const next = this.waitQueue.shift();
|
|
142
|
+
if (next)
|
|
143
|
+
next();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
exports.CliExecutorService = CliExecutorService;
|
|
147
|
+
exports.CliExecutorService = CliExecutorService = __decorate([
|
|
148
|
+
(0, core_1.Service)()
|
|
149
|
+
], CliExecutorService);
|
|
150
|
+
//# sourceMappingURL=cli-executor.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-executor.service.js","sourceRoot":"","sources":["../../src/cli/cli-executor.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ICliAdapter, CliToolInfo, CliToolName } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry of available AI CLI tools.
|
|
4
|
+
*
|
|
5
|
+
* Manages CLI adapter registration, tool detection, and health checks.
|
|
6
|
+
* Adapters are registered at module initialization time;
|
|
7
|
+
* detection runs lazily on first query or explicitly via refresh().
|
|
8
|
+
*/
|
|
9
|
+
export declare class CliRegistryService {
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly adapters;
|
|
12
|
+
private readonly toolInfoCache;
|
|
13
|
+
private hasDetected;
|
|
14
|
+
/** Register a CLI adapter */
|
|
15
|
+
registerAdapter(adapter: ICliAdapter): void;
|
|
16
|
+
/** Get adapter by tool name */
|
|
17
|
+
getAdapter(name: CliToolName): ICliAdapter | undefined;
|
|
18
|
+
/** Get all registered adapter names */
|
|
19
|
+
getRegisteredTools(): CliToolName[];
|
|
20
|
+
/** Check if a specific tool is available (installed and detected) */
|
|
21
|
+
isToolAvailable(name: CliToolName): Promise<boolean>;
|
|
22
|
+
/** Get info for a specific tool */
|
|
23
|
+
getToolInfo(name: CliToolName): Promise<CliToolInfo | null>;
|
|
24
|
+
/** Get info for all registered tools */
|
|
25
|
+
getAvailableTools(): Promise<CliToolInfo[]>;
|
|
26
|
+
/** Force re-detection of all tools */
|
|
27
|
+
refresh(): Promise<CliToolInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Health check for a specific tool.
|
|
30
|
+
* Re-detects the tool regardless of cache.
|
|
31
|
+
*/
|
|
32
|
+
healthCheck(name: CliToolName): Promise<CliToolInfo | null>;
|
|
33
|
+
/** Get available models for a specific tool */
|
|
34
|
+
getModels(name: CliToolName): Promise<string[]>;
|
|
35
|
+
private ensureDetected;
|
|
36
|
+
private detectSingleTool;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cli-registry.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-registry.service.d.ts","sourceRoot":"","sources":["../../src/cli/cli-registry.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExE;;;;;;GAMG;AACH,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,WAAW,CAAS;IAE5B,6BAA6B;IAC7B,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAO3C,+BAA+B;IAC/B,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IAItD,uCAAuC;IACvC,kBAAkB,IAAI,WAAW,EAAE;IAInC,qEAAqE;IAC/D,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAM1D,mCAAmC;IAC7B,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKjE,wCAAwC;IAClC,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKjD,sCAAsC;IAChC,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAMvC;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IASjE,+CAA+C;IACzC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAQvC,cAAc;YAmBd,gBAAgB;CAkB/B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CliRegistryService = void 0;
|
|
10
|
+
const core_1 = require("@octo/core");
|
|
11
|
+
/**
|
|
12
|
+
* Registry of available AI CLI tools.
|
|
13
|
+
*
|
|
14
|
+
* Manages CLI adapter registration, tool detection, and health checks.
|
|
15
|
+
* Adapters are registered at module initialization time;
|
|
16
|
+
* detection runs lazily on first query or explicitly via refresh().
|
|
17
|
+
*/
|
|
18
|
+
let CliRegistryService = class CliRegistryService {
|
|
19
|
+
logger = core_1.Container.get(core_1.LoggerService);
|
|
20
|
+
adapters = new Map();
|
|
21
|
+
toolInfoCache = new Map();
|
|
22
|
+
hasDetected = false;
|
|
23
|
+
/** Register a CLI adapter */
|
|
24
|
+
registerAdapter(adapter) {
|
|
25
|
+
this.adapters.set(adapter.toolName, adapter);
|
|
26
|
+
this.logger.info(`[CliRegistry] Registered adapter: ${adapter.displayName}`);
|
|
27
|
+
}
|
|
28
|
+
/** Get adapter by tool name */
|
|
29
|
+
getAdapter(name) {
|
|
30
|
+
return this.adapters.get(name);
|
|
31
|
+
}
|
|
32
|
+
/** Get all registered adapter names */
|
|
33
|
+
getRegisteredTools() {
|
|
34
|
+
return [...this.adapters.keys()];
|
|
35
|
+
}
|
|
36
|
+
/** Check if a specific tool is available (installed and detected) */
|
|
37
|
+
async isToolAvailable(name) {
|
|
38
|
+
await this.ensureDetected();
|
|
39
|
+
const info = this.toolInfoCache.get(name);
|
|
40
|
+
return info?.isAvailable ?? false;
|
|
41
|
+
}
|
|
42
|
+
/** Get info for a specific tool */
|
|
43
|
+
async getToolInfo(name) {
|
|
44
|
+
await this.ensureDetected();
|
|
45
|
+
return this.toolInfoCache.get(name) ?? null;
|
|
46
|
+
}
|
|
47
|
+
/** Get info for all registered tools */
|
|
48
|
+
async getAvailableTools() {
|
|
49
|
+
await this.ensureDetected();
|
|
50
|
+
return [...this.toolInfoCache.values()];
|
|
51
|
+
}
|
|
52
|
+
/** Force re-detection of all tools */
|
|
53
|
+
async refresh() {
|
|
54
|
+
this.hasDetected = false;
|
|
55
|
+
this.toolInfoCache.clear();
|
|
56
|
+
return this.getAvailableTools();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Health check for a specific tool.
|
|
60
|
+
* Re-detects the tool regardless of cache.
|
|
61
|
+
*/
|
|
62
|
+
async healthCheck(name) {
|
|
63
|
+
const adapter = this.adapters.get(name);
|
|
64
|
+
if (!adapter)
|
|
65
|
+
return null;
|
|
66
|
+
const info = await this.detectSingleTool(adapter);
|
|
67
|
+
this.toolInfoCache.set(name, info);
|
|
68
|
+
return info;
|
|
69
|
+
}
|
|
70
|
+
/** Get available models for a specific tool */
|
|
71
|
+
async getModels(name) {
|
|
72
|
+
const adapter = this.adapters.get(name);
|
|
73
|
+
if (!adapter?.listModels)
|
|
74
|
+
return [];
|
|
75
|
+
return adapter.listModels();
|
|
76
|
+
}
|
|
77
|
+
// ─── Private ────────────────────────────────────────────────
|
|
78
|
+
async ensureDetected() {
|
|
79
|
+
if (this.hasDetected)
|
|
80
|
+
return;
|
|
81
|
+
const detectionPromises = [...this.adapters.values()].map((adapter) => this.detectSingleTool(adapter));
|
|
82
|
+
const results = await Promise.all(detectionPromises);
|
|
83
|
+
for (const info of results) {
|
|
84
|
+
this.toolInfoCache.set(info.name, info);
|
|
85
|
+
}
|
|
86
|
+
this.hasDetected = true;
|
|
87
|
+
const available = results.filter((r) => r.isAvailable);
|
|
88
|
+
this.logger.info(`[CliRegistry] Detection complete: ${available.length}/${results.length} tools available`);
|
|
89
|
+
}
|
|
90
|
+
async detectSingleTool(adapter) {
|
|
91
|
+
try {
|
|
92
|
+
const info = await adapter.detectInstallation();
|
|
93
|
+
if (info)
|
|
94
|
+
return info;
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
this.logger.warn(`[CliRegistry] Detection failed for ${adapter.toolName}: ${err}`);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
name: adapter.toolName,
|
|
101
|
+
displayName: adapter.displayName,
|
|
102
|
+
version: '',
|
|
103
|
+
executablePath: '',
|
|
104
|
+
isAvailable: false,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
exports.CliRegistryService = CliRegistryService;
|
|
109
|
+
exports.CliRegistryService = CliRegistryService = __decorate([
|
|
110
|
+
(0, core_1.Service)()
|
|
111
|
+
], CliRegistryService);
|
|
112
|
+
//# sourceMappingURL=cli-registry.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-registry.service.js","sourceRoot":"","sources":["../../src/cli/cli-registry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Request, Response } from '@octo/core';
|
|
2
|
+
/**
|
|
3
|
+
* REST API controller for AI CLI operations.
|
|
4
|
+
*
|
|
5
|
+
* Endpoints:
|
|
6
|
+
* - GET /api/v1/ai-cli/tools — List available CLI tools
|
|
7
|
+
* - GET /api/v1/ai-cli/tools/:name/health — Health check for a tool
|
|
8
|
+
* - GET /api/v1/ai-cli/tools/:name/models — List models for a tool
|
|
9
|
+
* - POST /api/v1/ai-cli/execute — Execute a CLI tool
|
|
10
|
+
* - GET /api/v1/ai-cli/workspaces — List workspaces
|
|
11
|
+
* - POST /api/v1/ai-cli/workspaces — Create workspace (local or github)
|
|
12
|
+
* - POST /api/v1/ai-cli/workspaces/:id/pull — Pull latest for github workspace
|
|
13
|
+
* - POST /api/v1/ai-cli/workspaces/:id/delete — Delete workspace
|
|
14
|
+
*/
|
|
15
|
+
export declare class AiCliController {
|
|
16
|
+
private registry;
|
|
17
|
+
private executor;
|
|
18
|
+
private workspace;
|
|
19
|
+
/** List all registered CLI tools with availability status */
|
|
20
|
+
listTools(_req: Request, res: Response): Promise<void>;
|
|
21
|
+
/** Health check for a specific CLI tool */
|
|
22
|
+
healthCheck(req: Request, res: Response): Promise<void>;
|
|
23
|
+
/** List available models for a specific tool */
|
|
24
|
+
listModels(req: Request, res: Response): Promise<void>;
|
|
25
|
+
/** Execute an AI CLI tool */
|
|
26
|
+
execute(req: Request, res: Response): Promise<void>;
|
|
27
|
+
/** List all workspaces */
|
|
28
|
+
listWorkspaces(_req: Request, res: Response): Promise<void>;
|
|
29
|
+
/** Create a new workspace (local or github) */
|
|
30
|
+
createWorkspace(req: Request, res: Response): Promise<void>;
|
|
31
|
+
/** Pull latest changes for a github workspace */
|
|
32
|
+
pullWorkspace(req: Request, res: Response): Promise<void>;
|
|
33
|
+
/** Delete a workspace */
|
|
34
|
+
deleteWorkspace(req: Request, res: Response): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ai-cli.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-cli.controller.d.ts","sourceRoot":"","sources":["../../../src/cli/controllers/ai-cli.controller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQpD;;;;;;;;;;;;GAYG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,SAAS,CAAmC;IAEpD,6DAA6D;IAEvD,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,2CAA2C;IAErC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7D,gDAAgD;IAE1C,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5D,6BAA6B;IAEvB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BzD,0BAA0B;IAEpB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,+CAA+C;IAEzC,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjE,iDAAiD;IAE3C,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/D,yBAAyB;IAEnB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlE"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AiCliController = void 0;
|
|
13
|
+
const node_os_1 = require("node:os");
|
|
14
|
+
const core_1 = require("@octo/core");
|
|
15
|
+
const cli_registry_service_js_1 = require("../cli-registry.service.js");
|
|
16
|
+
const cli_executor_service_js_1 = require("../cli-executor.service.js");
|
|
17
|
+
const workspace_service_js_1 = require("../workspace.service.js");
|
|
18
|
+
const VALID_TOOLS = new Set(['claude', 'gemini', 'codex', 'antigravity']);
|
|
19
|
+
/**
|
|
20
|
+
* REST API controller for AI CLI operations.
|
|
21
|
+
*
|
|
22
|
+
* Endpoints:
|
|
23
|
+
* - GET /api/v1/ai-cli/tools — List available CLI tools
|
|
24
|
+
* - GET /api/v1/ai-cli/tools/:name/health — Health check for a tool
|
|
25
|
+
* - GET /api/v1/ai-cli/tools/:name/models — List models for a tool
|
|
26
|
+
* - POST /api/v1/ai-cli/execute — Execute a CLI tool
|
|
27
|
+
* - GET /api/v1/ai-cli/workspaces — List workspaces
|
|
28
|
+
* - POST /api/v1/ai-cli/workspaces — Create workspace (local or github)
|
|
29
|
+
* - POST /api/v1/ai-cli/workspaces/:id/pull — Pull latest for github workspace
|
|
30
|
+
* - POST /api/v1/ai-cli/workspaces/:id/delete — Delete workspace
|
|
31
|
+
*/
|
|
32
|
+
let AiCliController = class AiCliController {
|
|
33
|
+
registry = core_1.Container.get(cli_registry_service_js_1.CliRegistryService);
|
|
34
|
+
executor = core_1.Container.get(cli_executor_service_js_1.CliExecutorService);
|
|
35
|
+
workspace = core_1.Container.get(workspace_service_js_1.WorkspaceService);
|
|
36
|
+
/** List all registered CLI tools with availability status */
|
|
37
|
+
async listTools(_req, res) {
|
|
38
|
+
const tools = await this.registry.getAvailableTools();
|
|
39
|
+
res.json(core_1.ApiResponse.ok(tools));
|
|
40
|
+
}
|
|
41
|
+
/** Health check for a specific CLI tool */
|
|
42
|
+
async healthCheck(req, res) {
|
|
43
|
+
const name = req.params.name;
|
|
44
|
+
if (!VALID_TOOLS.has(name)) {
|
|
45
|
+
throw core_1.AppError.badRequest(`Invalid tool name: ${name}`);
|
|
46
|
+
}
|
|
47
|
+
const info = await this.registry.healthCheck(name);
|
|
48
|
+
if (!info) {
|
|
49
|
+
throw core_1.AppError.notFound(`Tool not registered: ${name}`);
|
|
50
|
+
}
|
|
51
|
+
res.json(core_1.ApiResponse.ok(info));
|
|
52
|
+
}
|
|
53
|
+
/** List available models for a specific tool */
|
|
54
|
+
async listModels(req, res) {
|
|
55
|
+
const name = req.params.name;
|
|
56
|
+
if (!VALID_TOOLS.has(name)) {
|
|
57
|
+
throw core_1.AppError.badRequest(`Invalid tool name: ${name}`);
|
|
58
|
+
}
|
|
59
|
+
const models = await this.registry.getModels(name);
|
|
60
|
+
res.json(core_1.ApiResponse.ok(models));
|
|
61
|
+
}
|
|
62
|
+
/** Execute an AI CLI tool */
|
|
63
|
+
async execute(req, res) {
|
|
64
|
+
const { tool, prompt, model, workingDir, timeoutMs, args, jsonOutput } = req.body;
|
|
65
|
+
if (!tool || !VALID_TOOLS.has(tool)) {
|
|
66
|
+
throw core_1.AppError.badRequest(`Invalid or missing tool. Must be one of: ${[...VALID_TOOLS].join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
if (!prompt || typeof prompt !== 'string') {
|
|
69
|
+
throw core_1.AppError.badRequest('Missing or invalid prompt');
|
|
70
|
+
}
|
|
71
|
+
const result = await this.executor.execute({
|
|
72
|
+
tool: tool,
|
|
73
|
+
prompt,
|
|
74
|
+
model: model && typeof model === 'string' ? model : undefined,
|
|
75
|
+
workingDir: workingDir || (0, node_os_1.tmpdir)(),
|
|
76
|
+
timeoutMs: timeoutMs ? Number(timeoutMs) : undefined,
|
|
77
|
+
args: Array.isArray(args) ? args : undefined,
|
|
78
|
+
jsonOutput: Boolean(jsonOutput),
|
|
79
|
+
});
|
|
80
|
+
res.json(core_1.ApiResponse.ok(result));
|
|
81
|
+
}
|
|
82
|
+
/** List all workspaces */
|
|
83
|
+
async listWorkspaces(_req, res) {
|
|
84
|
+
const workspaces = await this.workspace.listWorkspaces();
|
|
85
|
+
res.json(core_1.ApiResponse.ok(workspaces));
|
|
86
|
+
}
|
|
87
|
+
/** Create a new workspace (local or github) */
|
|
88
|
+
async createWorkspace(req, res) {
|
|
89
|
+
const { type, name, localPath, repoUrl, branch } = req.body;
|
|
90
|
+
if (!name || typeof name !== 'string') {
|
|
91
|
+
throw core_1.AppError.badRequest('Workspace name is required');
|
|
92
|
+
}
|
|
93
|
+
if (type === 'local') {
|
|
94
|
+
if (!localPath || typeof localPath !== 'string') {
|
|
95
|
+
throw core_1.AppError.badRequest('Local workspace requires a localPath');
|
|
96
|
+
}
|
|
97
|
+
const ws = await this.workspace.createLocalWorkspace(name, localPath);
|
|
98
|
+
res.status(201).json(core_1.ApiResponse.ok(ws, 'Workspace created'));
|
|
99
|
+
}
|
|
100
|
+
else if (type === 'github') {
|
|
101
|
+
if (!repoUrl || typeof repoUrl !== 'string') {
|
|
102
|
+
throw core_1.AppError.badRequest('GitHub workspace requires a repoUrl');
|
|
103
|
+
}
|
|
104
|
+
if (!branch || typeof branch !== 'string') {
|
|
105
|
+
throw core_1.AppError.badRequest('GitHub workspace requires a branch');
|
|
106
|
+
}
|
|
107
|
+
const ws = await this.workspace.createGithubWorkspace(name, repoUrl, branch);
|
|
108
|
+
res.status(201).json(core_1.ApiResponse.ok(ws, 'Workspace created'));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw core_1.AppError.badRequest('Invalid workspace type. Must be "local" or "github"');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Pull latest changes for a github workspace */
|
|
115
|
+
async pullWorkspace(req, res) {
|
|
116
|
+
const id = req.params.id;
|
|
117
|
+
await this.workspace.pullWorkspace(id);
|
|
118
|
+
res.json(core_1.ApiResponse.ok(null, 'Workspace pulled'));
|
|
119
|
+
}
|
|
120
|
+
/** Delete a workspace */
|
|
121
|
+
async deleteWorkspace(req, res) {
|
|
122
|
+
const id = req.params.id;
|
|
123
|
+
await this.workspace.deleteWorkspace(id);
|
|
124
|
+
res.json(core_1.ApiResponse.ok(null, 'Workspace deleted'));
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
exports.AiCliController = AiCliController;
|
|
128
|
+
__decorate([
|
|
129
|
+
(0, core_1.Get)('/tools'),
|
|
130
|
+
__metadata("design:type", Function),
|
|
131
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
132
|
+
__metadata("design:returntype", Promise)
|
|
133
|
+
], AiCliController.prototype, "listTools", null);
|
|
134
|
+
__decorate([
|
|
135
|
+
(0, core_1.Get)('/tools/:name/health'),
|
|
136
|
+
__metadata("design:type", Function),
|
|
137
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
138
|
+
__metadata("design:returntype", Promise)
|
|
139
|
+
], AiCliController.prototype, "healthCheck", null);
|
|
140
|
+
__decorate([
|
|
141
|
+
(0, core_1.Get)('/tools/:name/models'),
|
|
142
|
+
__metadata("design:type", Function),
|
|
143
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
144
|
+
__metadata("design:returntype", Promise)
|
|
145
|
+
], AiCliController.prototype, "listModels", null);
|
|
146
|
+
__decorate([
|
|
147
|
+
(0, core_1.Post)('/execute'),
|
|
148
|
+
__metadata("design:type", Function),
|
|
149
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
150
|
+
__metadata("design:returntype", Promise)
|
|
151
|
+
], AiCliController.prototype, "execute", null);
|
|
152
|
+
__decorate([
|
|
153
|
+
(0, core_1.Get)('/workspaces'),
|
|
154
|
+
__metadata("design:type", Function),
|
|
155
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
156
|
+
__metadata("design:returntype", Promise)
|
|
157
|
+
], AiCliController.prototype, "listWorkspaces", null);
|
|
158
|
+
__decorate([
|
|
159
|
+
(0, core_1.Post)('/workspaces'),
|
|
160
|
+
__metadata("design:type", Function),
|
|
161
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
162
|
+
__metadata("design:returntype", Promise)
|
|
163
|
+
], AiCliController.prototype, "createWorkspace", null);
|
|
164
|
+
__decorate([
|
|
165
|
+
(0, core_1.Post)('/workspaces/:id/pull'),
|
|
166
|
+
__metadata("design:type", Function),
|
|
167
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
168
|
+
__metadata("design:returntype", Promise)
|
|
169
|
+
], AiCliController.prototype, "pullWorkspace", null);
|
|
170
|
+
__decorate([
|
|
171
|
+
(0, core_1.Post)('/workspaces/:id/delete'),
|
|
172
|
+
__metadata("design:type", Function),
|
|
173
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
174
|
+
__metadata("design:returntype", Promise)
|
|
175
|
+
], AiCliController.prototype, "deleteWorkspace", null);
|
|
176
|
+
exports.AiCliController = AiCliController = __decorate([
|
|
177
|
+
(0, core_1.Controller)('/api/v1/ai-cli')
|
|
178
|
+
], AiCliController);
|
|
179
|
+
//# sourceMappingURL=ai-cli.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-cli.controller.js","sourceRoot":"","sources":["../../../src/cli/controllers/ai-cli.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAiC;AACjC,qCAAqF;AAErF,wEAAgE;AAChE,wEAAgE;AAChE,kEAA2D;AAG3D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAElF;;;;;;;;;;;;GAYG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAe;IAClB,QAAQ,GAAG,gBAAS,CAAC,GAAG,CAAC,4CAAkB,CAAC,CAAC;IAC7C,QAAQ,GAAG,gBAAS,CAAC,GAAG,CAAC,4CAAkB,CAAC,CAAC;IAC7C,SAAS,GAAG,gBAAS,CAAC,GAAG,CAAC,uCAAgB,CAAC,CAAC;IAEpD,6DAA6D;IAEvD,AAAN,KAAK,CAAC,SAAS,CAAC,IAAa,EAAE,GAAa;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACtD,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,2CAA2C;IAErC,AAAN,KAAK,CAAC,WAAW,CAAC,GAAY,EAAE,GAAa;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAc,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,eAAQ,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAmB,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,eAAQ,CAAC,QAAQ,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,gDAAgD;IAE1C,AAAN,KAAK,CAAC,UAAU,CAAC,GAAY,EAAE,GAAa;QAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAc,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,eAAQ,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAmB,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,6BAA6B;IAEvB,AAAN,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,GAAa;QACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAElF,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,eAAQ,CAAC,UAAU,CACvB,4CAA4C,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,eAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzC,IAAI,EAAE,IAAmB;YACzB,MAAM;YACN,KAAK,EAAE,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC7D,UAAU,EAAE,UAAU,IAAI,IAAA,gBAAM,GAAE;YAClC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACpD,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC5C,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;SAChC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,0BAA0B;IAEpB,AAAN,KAAK,CAAC,cAAc,CAAC,IAAa,EAAE,GAAa;QAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACzD,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,+CAA+C;IAEzC,AAAN,KAAK,CAAC,eAAe,CAAC,GAAY,EAAE,GAAa;QAC/C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAE5D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,eAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAChD,MAAM,eAAQ,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,eAAQ,CAAC,UAAU,CAAC,qCAAqC,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,eAAQ,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,eAAQ,CAAC,UAAU,CAAC,qDAAqD,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,iDAAiD;IAE3C,AAAN,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,GAAa;QAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QACnC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,yBAAyB;IAEnB,AAAN,KAAK,CAAC,eAAe,CAAC,GAAY,EAAE,GAAa;QAC/C,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QACnC,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,kBAAW,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACtD,CAAC;CACF,CAAA;AAvHY,0CAAe;AAOpB;IADL,IAAA,UAAG,EAAC,QAAQ,CAAC;;;;gDAIb;AAIK;IADL,IAAA,UAAG,EAAC,qBAAqB,CAAC;;;;kDAa1B;AAIK;IADL,IAAA,UAAG,EAAC,qBAAqB,CAAC;;;;iDAS1B;AAIK;IADL,IAAA,WAAI,EAAC,UAAU,CAAC;;;;8CAyBhB;AAIK;IADL,IAAA,UAAG,EAAC,aAAa,CAAC;;;;qDAIlB;AAIK;IADL,IAAA,WAAI,EAAC,aAAa,CAAC;;;;sDA0BnB;AAIK;IADL,IAAA,WAAI,EAAC,sBAAsB,CAAC;;;;oDAK5B;AAIK;IADL,IAAA,WAAI,EAAC,wBAAwB,CAAC;;;;sDAK9B;0BAtHU,eAAe;IAD3B,IAAA,iBAAU,EAAC,gBAAgB,CAAC;GAChB,eAAe,CAuH3B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { CliToolName, CliToolInfo, CliExecuteOptions, CliExecuteResult, ICliAdapter, FileInput, FileOutput, WorkspaceType, WorkspaceMetadata, Workspace, } from './types.js';
|
|
2
|
+
export { CliRegistryService } from './cli-registry.service.js';
|
|
3
|
+
export { CliExecutorService } from './cli-executor.service.js';
|
|
4
|
+
export { WorkspaceService } from './workspace.service.js';
|
|
5
|
+
export { ClaudeCliAdapter } from './adapters/claude-cli.adapter.js';
|
|
6
|
+
export { GeminiCliAdapter } from './adapters/gemini-cli.adapter.js';
|
|
7
|
+
export { CodexCliAdapter } from './adapters/codex-cli.adapter.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC"}
|