@love-moon/cli2sdk 0.1.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.
Files changed (70) hide show
  1. package/dist/bin/claude_test_cli.d.ts +2 -0
  2. package/dist/bin/claude_test_cli.js +83 -0
  3. package/dist/bin/claude_test_cli.js.map +1 -0
  4. package/dist/bin/copilot_test_cli.d.ts +2 -0
  5. package/dist/bin/copilot_test_cli.js +83 -0
  6. package/dist/bin/copilot_test_cli.js.map +1 -0
  7. package/dist/bin/cursor_test_cli.d.ts +2 -0
  8. package/dist/bin/cursor_test_cli.js +83 -0
  9. package/dist/bin/cursor_test_cli.js.map +1 -0
  10. package/dist/bin/tmates_test_cli.d.ts +2 -0
  11. package/dist/bin/tmates_test_cli.js +74 -0
  12. package/dist/bin/tmates_test_cli.js.map +1 -0
  13. package/dist/core/base.d.ts +31 -0
  14. package/dist/core/base.js +87 -0
  15. package/dist/core/base.js.map +1 -0
  16. package/dist/core/chat_session.d.ts +22 -0
  17. package/dist/core/chat_session.js +59 -0
  18. package/dist/core/chat_session.js.map +1 -0
  19. package/dist/core/router.d.ts +19 -0
  20. package/dist/core/router.js +119 -0
  21. package/dist/core/router.js.map +1 -0
  22. package/dist/core/stream.d.ts +9 -0
  23. package/dist/core/stream.js +56 -0
  24. package/dist/core/stream.js.map +1 -0
  25. package/dist/index.d.ts +14 -0
  26. package/dist/index.js +13 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/providers/claude.d.ts +6 -0
  29. package/dist/providers/claude.js +27 -0
  30. package/dist/providers/claude.js.map +1 -0
  31. package/dist/providers/codex.d.ts +6 -0
  32. package/dist/providers/codex.js +87 -0
  33. package/dist/providers/codex.js.map +1 -0
  34. package/dist/providers/copilot.d.ts +8 -0
  35. package/dist/providers/copilot.js +29 -0
  36. package/dist/providers/copilot.js.map +1 -0
  37. package/dist/providers/cursor.d.ts +8 -0
  38. package/dist/providers/cursor.js +53 -0
  39. package/dist/providers/cursor.js.map +1 -0
  40. package/dist/providers/gemini.d.ts +6 -0
  41. package/dist/providers/gemini.js +26 -0
  42. package/dist/providers/gemini.js.map +1 -0
  43. package/dist/providers/local_binary.d.ts +6 -0
  44. package/dist/providers/local_binary.js +27 -0
  45. package/dist/providers/local_binary.js.map +1 -0
  46. package/dist/providers/tmates.d.ts +10 -0
  47. package/dist/providers/tmates.js +36 -0
  48. package/dist/providers/tmates.js.map +1 -0
  49. package/dist/types/index.d.ts +56 -0
  50. package/dist/types/index.js +2 -0
  51. package/dist/types/index.js.map +1 -0
  52. package/dist/types/message.d.ts +8 -0
  53. package/dist/types/message.js +2 -0
  54. package/dist/types/message.js.map +1 -0
  55. package/dist/types/provider.d.ts +53 -0
  56. package/dist/types/provider.js +2 -0
  57. package/dist/types/provider.js.map +1 -0
  58. package/dist/types/result.d.ts +23 -0
  59. package/dist/types/result.js +2 -0
  60. package/dist/types/result.js.map +1 -0
  61. package/dist/utils/cache.d.ts +14 -0
  62. package/dist/utils/cache.js +47 -0
  63. package/dist/utils/cache.js.map +1 -0
  64. package/dist/utils/logger.d.ts +16 -0
  65. package/dist/utils/logger.js +39 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/shell.d.ts +21 -0
  68. package/dist/utils/shell.js +92 -0
  69. package/dist/utils/shell.js.map +1 -0
  70. package/package.json +47 -0
@@ -0,0 +1,119 @@
1
+ import { ChatSession } from "./chat_session.js";
2
+ import { createLogger } from "../utils/logger.js";
3
+ import { LruCache } from "../utils/cache.js";
4
+ import { ClaudeProvider } from "../providers/claude.js";
5
+ import { GeminiProvider } from "../providers/gemini.js";
6
+ import { CursorProvider } from "../providers/cursor.js";
7
+ import { LocalBinaryProvider } from "../providers/local_binary.js";
8
+ import { TmatesProvider } from "../providers/tmates.js";
9
+ import { CopilotProvider } from "../providers/copilot.js";
10
+ import { CodexProvider } from "../providers/codex.js";
11
+ const PROVIDER_ORDER = ["codex", "claude", "gemini", "cursor", "local", "tmates", "copilot"];
12
+ const providerFactories = {
13
+ claude: (options) => new ClaudeProvider(options),
14
+ gemini: (options) => new GeminiProvider(options),
15
+ cursor: (options) => new CursorProvider(options),
16
+ local: (options) => new LocalBinaryProvider(options),
17
+ tmates: (options) => new TmatesProvider(options),
18
+ copilot: (options) => new CopilotProvider(options),
19
+ codex: (options) => new CodexProvider(options)
20
+ };
21
+ const configFor = (name, config) => {
22
+ switch (name) {
23
+ case "claude":
24
+ return config.claude;
25
+ case "gemini":
26
+ return config.gemini;
27
+ case "cursor":
28
+ return config.cursor;
29
+ case "local":
30
+ return config.local;
31
+ case "tmates":
32
+ return config.tmates;
33
+ case "copilot":
34
+ return config.copilot;
35
+ case "codex":
36
+ return config.codex;
37
+ default:
38
+ return undefined;
39
+ }
40
+ };
41
+ export class ProviderRouter {
42
+ config;
43
+ logger;
44
+ cache;
45
+ sessionCache;
46
+ providers = new Map();
47
+ constructor(config = {}) {
48
+ this.config = config;
49
+ this.logger = createLogger(config.logger);
50
+ this.cache = new LruCache({ max: 32, ...config.cache });
51
+ this.sessionCache = new LruCache({ max: 16, ttlMs: config.cache?.ttlMs });
52
+ }
53
+ async run(prompt, options) {
54
+ const provider = this.resolveProvider(options?.provider);
55
+ const cacheKey = this.buildCacheKey(provider.name, prompt, options);
56
+ const cached = cacheKey ? this.cache.get(cacheKey) : undefined;
57
+ if (cached) {
58
+ return { ...cached, metadata: { ...cached.metadata, cache: "hit" } };
59
+ }
60
+ const result = await provider.run(prompt, options);
61
+ if (cacheKey) {
62
+ this.cache.set(cacheKey, result);
63
+ }
64
+ return result;
65
+ }
66
+ async *stream(prompt, options) {
67
+ const provider = this.resolveProvider(options?.provider);
68
+ yield* provider.stream(prompt, options);
69
+ }
70
+ session(cacheKey) {
71
+ return new ChatSession(this, {
72
+ cacheKey,
73
+ cache: cacheKey ? this.sessionCache : undefined
74
+ });
75
+ }
76
+ resolveProvider(name) {
77
+ const requested = name && name !== "auto" ? name : this.config.provider ?? "codex";
78
+ if (requested === "auto") {
79
+ return this.pickFirstConfigured();
80
+ }
81
+ return this.getOrCreate(requested);
82
+ }
83
+ pickFirstConfigured() {
84
+ for (const candidate of PROVIDER_ORDER) {
85
+ const cfg = configFor(candidate, this.config);
86
+ if (cfg) {
87
+ return this.getOrCreate(candidate);
88
+ }
89
+ }
90
+ return this.getOrCreate("codex");
91
+ }
92
+ getOrCreate(name) {
93
+ if (!this.providers.has(name)) {
94
+ const binary = {
95
+ ...this.config.shell,
96
+ ...configFor(name, this.config)
97
+ };
98
+ const factory = providerFactories[name];
99
+ if (!factory) {
100
+ throw new Error(`Provider ${name} is not registered`);
101
+ }
102
+ const provider = factory({
103
+ binary,
104
+ logger: this.logger
105
+ });
106
+ this.providers.set(name, provider);
107
+ }
108
+ return this.providers.get(name);
109
+ }
110
+ buildCacheKey(provider, prompt, options) {
111
+ if (!this.config.cache?.max) {
112
+ return undefined;
113
+ }
114
+ const historyHash = options?.history?.map((msg) => `${msg.role}:${msg.content}`).join("|") ?? "";
115
+ return `${provider}:${historyHash}:${prompt}`;
116
+ }
117
+ }
118
+ export const createRouter = (config = {}) => new ProviderRouter(config);
119
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ResultChunk } from "../types/result.js";
2
+ export declare class StreamDecoder {
3
+ private readonly parser;
4
+ private buffer;
5
+ constructor(parser?: (payload: string) => ResultChunk);
6
+ push(chunk: string): ResultChunk[];
7
+ flush(): ResultChunk[];
8
+ }
9
+ export declare const collectStream: (iterable: AsyncIterable<string>, decoder?: StreamDecoder) => Promise<ResultChunk[]>;
@@ -0,0 +1,56 @@
1
+ const DATA_PREFIX = "data:";
2
+ const defaultParser = (payload) => {
3
+ const trimmed = payload.trim();
4
+ if (!trimmed) {
5
+ return { delta: "" };
6
+ }
7
+ if (trimmed.startsWith("{")) {
8
+ try {
9
+ return JSON.parse(trimmed);
10
+ }
11
+ catch {
12
+ return { delta: trimmed };
13
+ }
14
+ }
15
+ return { delta: trimmed };
16
+ };
17
+ export class StreamDecoder {
18
+ parser;
19
+ buffer = "";
20
+ constructor(parser = defaultParser) {
21
+ this.parser = parser;
22
+ }
23
+ push(chunk) {
24
+ this.buffer += chunk;
25
+ const emitted = [];
26
+ while (true) {
27
+ const newlineIndex = this.buffer.indexOf("\n");
28
+ if (newlineIndex === -1) {
29
+ break;
30
+ }
31
+ const line = this.buffer.slice(0, newlineIndex).trimEnd();
32
+ this.buffer = this.buffer.slice(newlineIndex + 1);
33
+ if (!line)
34
+ continue;
35
+ const payload = line.startsWith(DATA_PREFIX) ? line.slice(DATA_PREFIX.length) : line;
36
+ emitted.push(this.parser(payload));
37
+ }
38
+ return emitted;
39
+ }
40
+ flush() {
41
+ if (!this.buffer)
42
+ return [];
43
+ const payload = this.buffer;
44
+ this.buffer = "";
45
+ return [this.parser(payload)];
46
+ }
47
+ }
48
+ export const collectStream = async (iterable, decoder = new StreamDecoder()) => {
49
+ const chunks = [];
50
+ for await (const piece of iterable) {
51
+ chunks.push(...decoder.push(piece));
52
+ }
53
+ chunks.push(...decoder.flush());
54
+ return chunks;
55
+ };
56
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/core/stream.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,aAAa,GAAG,CAAC,OAAe,EAAe,EAAE;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,OAAO,aAAa;IAGK;IAFrB,MAAM,GAAG,EAAE,CAAC;IAEpB,YAA6B,SAA2C,aAAa;QAAxD,WAAM,GAAN,MAAM,CAAkD;IAAG,CAAC;IAEzF,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACrB,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,QAA+B,EAC/B,OAAO,GAAG,IAAI,aAAa,EAAE,EACL,EAAE;IAC1B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { ChatSession } from "./core/chat_session.js";
2
+ import { Cli2SdkConfig, RunOptions } from "./types/provider.js";
3
+ import { ResultChunk, RunResult } from "./types/result.js";
4
+ export declare const cli2sdk: (config?: Cli2SdkConfig) => {
5
+ run: (prompt: string, options?: RunOptions) => Promise<RunResult>;
6
+ stream: (prompt: string, options?: RunOptions) => AsyncGenerator<ResultChunk>;
7
+ session: (cacheKey?: string) => ChatSession;
8
+ router: import("./core/router.js").ProviderRouter;
9
+ };
10
+ export type { Cli2SdkConfig, RunOptions } from "./types/provider.js";
11
+ export type { ResultChunk, RunResult } from "./types/result.js";
12
+ export type { Message, MessageHistory } from "./types/message.js";
13
+ export { ChatSession } from "./core/chat_session.js";
14
+ export { ProviderRouter } from "./core/router.js";
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ import { createRouter } from "./core/router.js";
2
+ export const cli2sdk = (config = {}) => {
3
+ const router = createRouter(config);
4
+ return {
5
+ run: (prompt, options) => router.run(prompt, options),
6
+ stream: (prompt, options) => router.stream(prompt, options),
7
+ session: (cacheKey) => router.session(cacheKey),
8
+ router
9
+ };
10
+ };
11
+ export { ChatSession } from "./core/chat_session.js";
12
+ export { ProviderRouter } from "./core/router.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAwB,EAAE,EAAE,EAAE;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO;QACL,GAAG,EAAE,CAAC,MAAc,EAAE,OAAoB,EAAsB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;QAC9F,MAAM,EAAE,CAAC,MAAc,EAAE,OAAoB,EAA+B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAC7G,OAAO,EAAE,CAAC,QAAiB,EAAe,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrE,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAKF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ export declare class ClaudeProvider extends CliCommandProvider {
4
+ constructor(options?: CliProviderOptions);
5
+ protected enrichArgs(_prompt: string, options?: RunOptions): string[];
6
+ }
@@ -0,0 +1,27 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ const DEFAULT_ARGS = ["--output-format", "json"];
3
+ export class ClaudeProvider extends CliCommandProvider {
4
+ constructor(options = {}) {
5
+ super("claude", {
6
+ ...options,
7
+ binary: {
8
+ command: options.binary?.command ?? "claude",
9
+ args: options.binary?.args ?? DEFAULT_ARGS,
10
+ streamArgs: options.binary?.streamArgs ?? ["--stream"],
11
+ inputFormat: options.binary?.inputFormat ?? "json",
12
+ cwd: options.binary?.cwd,
13
+ env: options.binary?.env,
14
+ timeoutMs: options.binary?.timeoutMs,
15
+ supportsStreaming: true
16
+ }
17
+ });
18
+ }
19
+ enrichArgs(_prompt, options) {
20
+ const args = [];
21
+ if (options?.quiet) {
22
+ args.push("--quiet");
23
+ }
24
+ return args;
25
+ }
26
+ }
27
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAGzE,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD,YAAY,UAA8B,EAAE;QAC1C,KAAK,CACH,QAAQ,EACR;YACE,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,QAAQ;gBAC5C,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,YAAY;gBAC1C,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,UAAU,CAAC;gBACtD,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM;gBAClD,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS;gBACpC,iBAAiB,EAAE,IAAI;aACxB;SACF,CACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,OAAoB;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ export declare class CodexProvider extends CliCommandProvider {
4
+ constructor(options?: CliProviderOptions);
5
+ protected enrichArgs(_prompt: string, options?: RunOptions): string[];
6
+ }
@@ -0,0 +1,87 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ const FLAG_ALIASES = {
3
+ sandboxMode: "sandbox",
4
+ approvalPolicy: "ask-for-approval",
5
+ workingDirectory: "cd",
6
+ webSearchEnabled: "search",
7
+ networkAccessEnabled: "network"
8
+ };
9
+ function toKebabCase(value) {
10
+ return value
11
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
12
+ .replace(/[\s_]+/g, "-")
13
+ .toLowerCase();
14
+ }
15
+ function normalizeCodexArgs(config) {
16
+ const args = [];
17
+ const allowedKeys = new Set([
18
+ "model",
19
+ "sandboxMode",
20
+ "workingDirectory",
21
+ "skipGitRepoCheck",
22
+ "image"
23
+ ]);
24
+ for (const [key, rawValue] of Object.entries(config)) {
25
+ if (rawValue === undefined || rawValue === null) {
26
+ continue;
27
+ }
28
+ if (!allowedKeys.has(key)) {
29
+ continue;
30
+ }
31
+ if (key === "workingDirectory") {
32
+ continue;
33
+ }
34
+ const flagKey = FLAG_ALIASES[key] ?? toKebabCase(key);
35
+ const flag = `--${flagKey}`;
36
+ if (Array.isArray(rawValue)) {
37
+ for (const value of rawValue) {
38
+ args.push(flag, String(value));
39
+ }
40
+ continue;
41
+ }
42
+ if (typeof rawValue === "boolean") {
43
+ if (rawValue) {
44
+ args.push(flag);
45
+ }
46
+ continue;
47
+ }
48
+ args.push(flag, String(rawValue));
49
+ }
50
+ return args;
51
+ }
52
+ function buildBinaryConfig(binary) {
53
+ const config = binary ?? {};
54
+ const { command, args, streamArgs, inputFormat, supportsStreaming, name, cwd, env, timeoutMs, stdin, signal, ...extra } = config;
55
+ const codexArgs = normalizeCodexArgs(extra);
56
+ const baseArgs = Array.isArray(args) ? args : [];
57
+ const normalizedBaseArgs = baseArgs.length ? baseArgs : ["exec"];
58
+ return {
59
+ command: command ?? "codex",
60
+ args: [...normalizedBaseArgs, ...codexArgs],
61
+ streamArgs: Array.isArray(streamArgs) ? streamArgs : [],
62
+ inputFormat: inputFormat ?? "text",
63
+ supportsStreaming: typeof supportsStreaming === "boolean" ? supportsStreaming : false,
64
+ name: name,
65
+ cwd: cwd,
66
+ env: env,
67
+ timeoutMs: typeof timeoutMs === "number" ? timeoutMs : undefined,
68
+ stdin: stdin,
69
+ signal: signal
70
+ };
71
+ }
72
+ export class CodexProvider extends CliCommandProvider {
73
+ constructor(options = {}) {
74
+ super("codex", {
75
+ ...options,
76
+ binary: buildBinaryConfig(options.binary)
77
+ });
78
+ }
79
+ enrichArgs(_prompt, options) {
80
+ const args = [];
81
+ if (options?.quiet) {
82
+ args.push("--quiet");
83
+ }
84
+ return args;
85
+ }
86
+ }
87
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/providers/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ import { CommandRequest } from "../utils/shell.js";
4
+ export declare class CopilotProvider extends CliCommandProvider {
5
+ constructor(options?: CliProviderOptions);
6
+ protected enrichArgs(_prompt: string, _options?: RunOptions): string[];
7
+ protected toCommandRequest(prompt: string, options?: RunOptions, stream?: boolean): CommandRequest;
8
+ }
@@ -0,0 +1,29 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ export class CopilotProvider extends CliCommandProvider {
3
+ constructor(options = {}) {
4
+ super("copilot", {
5
+ ...options,
6
+ binary: {
7
+ command: options.binary?.command ?? "copilot",
8
+ args: options.binary?.args ?? ["--allow-all-paths", "--allow-all-tools", "--prompt"],
9
+ streamArgs: options.binary?.streamArgs ?? [],
10
+ inputFormat: "text",
11
+ supportsStreaming: false
12
+ }
13
+ });
14
+ }
15
+ enrichArgs(_prompt, _options) {
16
+ return [];
17
+ }
18
+ toCommandRequest(prompt, options, stream = false) {
19
+ const request = super.toCommandRequest(prompt, options, stream);
20
+ // gh copilot takes prompt as argument, not stdin
21
+ request.stdin = undefined;
22
+ if (!request.args) {
23
+ request.args = [];
24
+ }
25
+ request.args.push(prompt);
26
+ return request;
27
+ }
28
+ }
29
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/providers/copilot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAIzE,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IACrD,YAAY,UAA8B,EAAE;QAC1C,KAAK,CACH,SAAS,EACT;YACE,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,SAAS;gBAC7C,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,CAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,CAAC;gBACrF,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;gBAC5C,WAAW,EAAE,MAAM;gBACnB,iBAAiB,EAAE,KAAK;aACzB;SACF,CACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,QAAqB;QACzD,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,gBAAgB,CACxB,MAAc,EACd,OAAoB,EACpB,MAAM,GAAG,KAAK;QAEd,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChE,iDAAiD;QACjD,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ import { RunResult } from "../types/result.js";
4
+ export declare class CursorProvider extends CliCommandProvider {
5
+ constructor(options?: CliProviderOptions);
6
+ run(prompt: string, options?: RunOptions): Promise<RunResult>;
7
+ protected enrichArgs(_prompt: string, options?: RunOptions): string[];
8
+ }
@@ -0,0 +1,53 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ import { runCommand } from "../utils/shell.js";
3
+ export class CursorProvider extends CliCommandProvider {
4
+ constructor(options = {}) {
5
+ super("cursor", {
6
+ ...options,
7
+ binary: {
8
+ command: options.binary?.command ?? "cursor-agent",
9
+ args: options.binary?.args ?? ["--print", "--output-format", "json"],
10
+ streamArgs: options.binary?.streamArgs ?? ["--output-format", "stream-json", "--stream-partial-output"],
11
+ inputFormat: options.binary?.inputFormat ?? "json",
12
+ cwd: options.binary?.cwd,
13
+ env: options.binary?.env,
14
+ timeoutMs: options.binary?.timeoutMs,
15
+ supportsStreaming: true
16
+ }
17
+ });
18
+ }
19
+ async run(prompt, options) {
20
+ const request = this.toCommandRequest(prompt, options);
21
+ const result = await runCommand(request, this.logger);
22
+ const stdout = result.stdout.trim();
23
+ // Parse JSON output from cursor-agent
24
+ let text = stdout;
25
+ try {
26
+ const json = JSON.parse(stdout);
27
+ if (json.result !== undefined) {
28
+ text = String(json.result);
29
+ }
30
+ }
31
+ catch {
32
+ // If not JSON, use stdout as-is
33
+ }
34
+ return {
35
+ text,
36
+ chunks: [{ text, done: true }],
37
+ history: this.history,
38
+ provider: this.name,
39
+ metadata: { stderr: result.stderr }
40
+ };
41
+ }
42
+ enrichArgs(_prompt, options) {
43
+ const args = [];
44
+ if (options?.quiet) {
45
+ args.push("--quiet");
46
+ }
47
+ if (options?.metadata?.projectPath) {
48
+ args.push("--project", String(options.metadata.projectPath));
49
+ }
50
+ return args;
51
+ }
52
+ }
53
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/providers/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD,YAAY,UAA8B,EAAE;QAC1C,KAAK,CACH,QAAQ,EACR;YACE,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,cAAc;gBAClD,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC;gBACpE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,yBAAyB,CAAC;gBACvG,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM;gBAClD,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS;gBACpC,iBAAiB,EAAE,IAAI;aACxB;SACF,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,OAAoB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpC,sCAAsC;QACtC,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;QAED,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SACpC,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,OAAoB;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ export declare class GeminiProvider extends CliCommandProvider {
4
+ constructor(options?: CliProviderOptions);
5
+ protected enrichArgs(_prompt: string, options?: RunOptions): string[];
6
+ }
@@ -0,0 +1,26 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ export class GeminiProvider extends CliCommandProvider {
3
+ constructor(options = {}) {
4
+ super("gemini", {
5
+ ...options,
6
+ binary: {
7
+ command: options.binary?.command ?? "gemini",
8
+ args: options.binary?.args ?? ["--json"],
9
+ streamArgs: options.binary?.streamArgs ?? ["--stream"],
10
+ inputFormat: options.binary?.inputFormat ?? "json",
11
+ cwd: options.binary?.cwd,
12
+ env: options.binary?.env,
13
+ timeoutMs: options.binary?.timeoutMs,
14
+ supportsStreaming: true
15
+ }
16
+ });
17
+ }
18
+ enrichArgs(_prompt, options) {
19
+ const args = [];
20
+ if (options?.quiet) {
21
+ args.push("--quiet");
22
+ }
23
+ return args;
24
+ }
25
+ }
26
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAGzE,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD,YAAY,UAA8B,EAAE;QAC1C,KAAK,CACH,QAAQ,EACR;YACE,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,QAAQ;gBAC5C,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;gBACxC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,UAAU,CAAC;gBACtD,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM;gBAClD,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS;gBACpC,iBAAiB,EAAE,IAAI;aACxB;SACF,CACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,OAAoB;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ export declare class LocalBinaryProvider extends CliCommandProvider {
4
+ constructor(options?: CliProviderOptions);
5
+ protected enrichArgs(_prompt: string, options?: RunOptions): string[];
6
+ }
@@ -0,0 +1,27 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ const FALLBACK_COMMAND = process.env.CLI2SDK_LOCAL_COMMAND ?? "bash";
3
+ export class LocalBinaryProvider extends CliCommandProvider {
4
+ constructor(options = {}) {
5
+ super("local", {
6
+ ...options,
7
+ binary: {
8
+ command: options.binary?.command ?? FALLBACK_COMMAND,
9
+ args: options.binary?.args ?? [],
10
+ streamArgs: options.binary?.streamArgs ?? [],
11
+ inputFormat: options.binary?.inputFormat ?? "json",
12
+ cwd: options.binary?.cwd,
13
+ env: options.binary?.env,
14
+ timeoutMs: options.binary?.timeoutMs,
15
+ supportsStreaming: options.binary?.supportsStreaming ?? false
16
+ }
17
+ });
18
+ }
19
+ enrichArgs(_prompt, options) {
20
+ const args = [];
21
+ if (options?.metadata) {
22
+ args.push("--metadata", JSON.stringify(options.metadata));
23
+ }
24
+ return args;
25
+ }
26
+ }
27
+ //# sourceMappingURL=local_binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local_binary.js","sourceRoot":"","sources":["../../src/providers/local_binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAGzE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,MAAM,CAAC;AAErE,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IACzD,YAAY,UAA8B,EAAE;QAC1C,KAAK,CACH,OAAO,EACP;YACE,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,gBAAgB;gBACpD,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;gBAChC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;gBAC5C,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM;gBAClD,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS;gBACpC,iBAAiB,EAAE,OAAO,CAAC,MAAM,EAAE,iBAAiB,IAAI,KAAK;aAC9D;SACF,CACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,OAAoB;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { CliCommandProvider, CliProviderOptions } from "../core/base.js";
2
+ import { RunOptions } from "../types/provider.js";
3
+ import { MessageHistory } from "../types/message.js";
4
+ import { CommandRequest } from "../utils/shell.js";
5
+ export declare class TmatesProvider extends CliCommandProvider {
6
+ constructor(options?: CliProviderOptions);
7
+ protected enrichArgs(_prompt: string, _options?: RunOptions): string[];
8
+ protected renderTranscript(prompt: string, _history: MessageHistory): string;
9
+ protected toCommandRequest(prompt: string, options?: RunOptions, stream?: boolean): CommandRequest;
10
+ }
@@ -0,0 +1,36 @@
1
+ import { CliCommandProvider } from "../core/base.js";
2
+ const DEFAULT_ARGS = ["--one-shot", "--print", "--permission-mode", "agentFull"];
3
+ export class TmatesProvider extends CliCommandProvider {
4
+ constructor(options = {}) {
5
+ super("tmates", {
6
+ ...options,
7
+ binary: {
8
+ command: options.binary?.command ?? "tmates",
9
+ args: options.binary?.args ?? DEFAULT_ARGS,
10
+ streamArgs: options.binary?.streamArgs ?? [],
11
+ inputFormat: options.binary?.inputFormat ?? "text",
12
+ cwd: options.binary?.cwd,
13
+ env: options.binary?.env,
14
+ timeoutMs: options.binary?.timeoutMs ?? 60000,
15
+ supportsStreaming: false
16
+ }
17
+ });
18
+ }
19
+ enrichArgs(_prompt, _options) {
20
+ return [];
21
+ }
22
+ renderTranscript(prompt, _history) {
23
+ return prompt;
24
+ }
25
+ toCommandRequest(prompt, options, stream = false) {
26
+ const request = super.toCommandRequest(prompt, options, stream);
27
+ // tmates takes prompt as argument, not stdin
28
+ request.stdin = undefined;
29
+ if (!request.args) {
30
+ request.args = [];
31
+ }
32
+ request.args.push(prompt);
33
+ return request;
34
+ }
35
+ }
36
+ //# sourceMappingURL=tmates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmates.js","sourceRoot":"","sources":["../../src/providers/tmates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,MAAM,iBAAiB,CAAC;AAKzE,MAAM,YAAY,GAAa,CAAC,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAE3F,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD,YAAY,UAA8B,EAAE;QAC1C,KAAK,CACH,QAAQ,EACR;YACE,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,QAAQ;gBAC5C,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,YAAY;gBAC1C,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;gBAC5C,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM;gBAClD,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG;gBACxB,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK;gBAC7C,iBAAiB,EAAE,KAAK;aACzB;SACF,CACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,QAAqB;QACzD,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,gBAAgB,CAAC,MAAc,EAAE,QAAwB;QACjE,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,gBAAgB,CACxB,MAAc,EACd,OAAoB,EACpB,MAAM,GAAG,KAAK;QAEd,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChE,6CAA6C;QAC7C,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}