@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.
- package/dist/bin/claude_test_cli.d.ts +2 -0
- package/dist/bin/claude_test_cli.js +83 -0
- package/dist/bin/claude_test_cli.js.map +1 -0
- package/dist/bin/copilot_test_cli.d.ts +2 -0
- package/dist/bin/copilot_test_cli.js +83 -0
- package/dist/bin/copilot_test_cli.js.map +1 -0
- package/dist/bin/cursor_test_cli.d.ts +2 -0
- package/dist/bin/cursor_test_cli.js +83 -0
- package/dist/bin/cursor_test_cli.js.map +1 -0
- package/dist/bin/tmates_test_cli.d.ts +2 -0
- package/dist/bin/tmates_test_cli.js +74 -0
- package/dist/bin/tmates_test_cli.js.map +1 -0
- package/dist/core/base.d.ts +31 -0
- package/dist/core/base.js +87 -0
- package/dist/core/base.js.map +1 -0
- package/dist/core/chat_session.d.ts +22 -0
- package/dist/core/chat_session.js +59 -0
- package/dist/core/chat_session.js.map +1 -0
- package/dist/core/router.d.ts +19 -0
- package/dist/core/router.js +119 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/stream.d.ts +9 -0
- package/dist/core/stream.js +56 -0
- package/dist/core/stream.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/claude.d.ts +6 -0
- package/dist/providers/claude.js +27 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex.d.ts +6 -0
- package/dist/providers/codex.js +87 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/copilot.d.ts +8 -0
- package/dist/providers/copilot.js +29 -0
- package/dist/providers/copilot.js.map +1 -0
- package/dist/providers/cursor.d.ts +8 -0
- package/dist/providers/cursor.js +53 -0
- package/dist/providers/cursor.js.map +1 -0
- package/dist/providers/gemini.d.ts +6 -0
- package/dist/providers/gemini.js +26 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/local_binary.d.ts +6 -0
- package/dist/providers/local_binary.js +27 -0
- package/dist/providers/local_binary.js.map +1 -0
- package/dist/providers/tmates.d.ts +10 -0
- package/dist/providers/tmates.js +36 -0
- package/dist/providers/tmates.js.map +1 -0
- package/dist/types/index.d.ts +56 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/message.d.ts +8 -0
- package/dist/types/message.js +2 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/provider.d.ts +53 -0
- package/dist/types/provider.js +2 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/result.d.ts +23 -0
- package/dist/types/result.js +2 -0
- package/dist/types/result.js.map +1 -0
- package/dist/utils/cache.d.ts +14 -0
- package/dist/utils/cache.js +47 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/shell.d.ts +21 -0
- package/dist/utils/shell.js +92 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import readline from "node:readline/promises";
|
|
4
|
+
import { cli2sdk } from "../index.js";
|
|
5
|
+
const parseArgs = (argv) => {
|
|
6
|
+
const args = [...argv];
|
|
7
|
+
const flags = new Set();
|
|
8
|
+
const promptParts = [];
|
|
9
|
+
for (const arg of args) {
|
|
10
|
+
if (arg.startsWith("--")) {
|
|
11
|
+
flags.add(arg);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
promptParts.push(arg);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return { prompt: promptParts.join(" ").trim(), flags };
|
|
18
|
+
};
|
|
19
|
+
const main = async () => {
|
|
20
|
+
const { prompt, flags } = parseArgs(process.argv.slice(2));
|
|
21
|
+
const streamMode = flags.has("--stream");
|
|
22
|
+
const interactive = flags.has("--interactive") || !prompt;
|
|
23
|
+
const claudeCommand = process.env.CLI2SDK_CLAUDE_BIN;
|
|
24
|
+
const claudeArgs = process.env.CLI2SDK_CLAUDE_ARGS
|
|
25
|
+
? process.env.CLI2SDK_CLAUDE_ARGS.split(" ").filter(Boolean)
|
|
26
|
+
: undefined;
|
|
27
|
+
const sdk = cli2sdk({
|
|
28
|
+
provider: "claude",
|
|
29
|
+
claude: {
|
|
30
|
+
command: claudeCommand,
|
|
31
|
+
args: claudeArgs,
|
|
32
|
+
env: process.env
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (!interactive) {
|
|
36
|
+
if (!prompt) {
|
|
37
|
+
console.error("No prompt provided.");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
if (streamMode) {
|
|
41
|
+
for await (const chunk of sdk.stream(prompt)) {
|
|
42
|
+
if (chunk.delta) {
|
|
43
|
+
process.stdout.write(chunk.delta);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
process.stdout.write("\n");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const result = await sdk.run(prompt);
|
|
50
|
+
console.log(result.text);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
55
|
+
const chat = sdk.session("cli2sdk-demo");
|
|
56
|
+
console.log("Entering interactive mode. Press Enter on empty line to exit.\n");
|
|
57
|
+
while (true) {
|
|
58
|
+
const question = (await rl.question("You> ")).trim();
|
|
59
|
+
if (!question) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (streamMode) {
|
|
63
|
+
process.stdout.write("Claude> ");
|
|
64
|
+
for await (const chunk of sdk.stream(question, { history: chat.getHistory() })) {
|
|
65
|
+
if (chunk.delta) {
|
|
66
|
+
process.stdout.write(chunk.delta);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
process.stdout.write("\n");
|
|
70
|
+
await chat.ask(question);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const answer = await chat.ask(question);
|
|
74
|
+
console.log(`Claude> ${answer.text}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
rl.close();
|
|
78
|
+
};
|
|
79
|
+
main().catch((error) => {
|
|
80
|
+
console.error("cli2sdk test CLI failed:", error);
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=claude_test_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude_test_cli.js","sourceRoot":"","sources":["../../src/bin/claude_test_cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import readline from "node:readline/promises";
|
|
4
|
+
import { cli2sdk } from "../index.js";
|
|
5
|
+
const parseArgs = (argv) => {
|
|
6
|
+
const args = [...argv];
|
|
7
|
+
const flags = new Set();
|
|
8
|
+
const promptParts = [];
|
|
9
|
+
for (const arg of args) {
|
|
10
|
+
if (arg.startsWith("--")) {
|
|
11
|
+
flags.add(arg);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
promptParts.push(arg);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return { prompt: promptParts.join(" ").trim(), flags };
|
|
18
|
+
};
|
|
19
|
+
const main = async () => {
|
|
20
|
+
const { prompt, flags } = parseArgs(process.argv.slice(2));
|
|
21
|
+
const streamMode = flags.has("--stream");
|
|
22
|
+
const interactive = flags.has("--interactive") || !prompt;
|
|
23
|
+
const copilotCommand = process.env.CLI2SDK_COPILOT_BIN;
|
|
24
|
+
const copilotArgs = process.env.CLI2SDK_COPILOT_ARGS
|
|
25
|
+
? process.env.CLI2SDK_COPILOT_ARGS.split(" ").filter(Boolean)
|
|
26
|
+
: undefined;
|
|
27
|
+
const sdk = cli2sdk({
|
|
28
|
+
provider: "copilot",
|
|
29
|
+
copilot: {
|
|
30
|
+
command: copilotCommand,
|
|
31
|
+
args: copilotArgs,
|
|
32
|
+
env: process.env
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (!interactive) {
|
|
36
|
+
if (!prompt) {
|
|
37
|
+
console.error("No prompt provided.");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
if (streamMode) {
|
|
41
|
+
for await (const chunk of sdk.stream(prompt)) {
|
|
42
|
+
if (chunk.delta) {
|
|
43
|
+
process.stdout.write(chunk.delta);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
process.stdout.write("\n");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const result = await sdk.run(prompt);
|
|
50
|
+
console.log(result.text);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
55
|
+
const chat = sdk.session("cli2sdk-demo");
|
|
56
|
+
console.log("Entering interactive mode. Press Enter on empty line to exit.\n");
|
|
57
|
+
while (true) {
|
|
58
|
+
const question = (await rl.question("You> ")).trim();
|
|
59
|
+
if (!question) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (streamMode) {
|
|
63
|
+
process.stdout.write("Copilot> ");
|
|
64
|
+
for await (const chunk of sdk.stream(question, { history: chat.getHistory() })) {
|
|
65
|
+
if (chunk.delta) {
|
|
66
|
+
process.stdout.write(chunk.delta);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
process.stdout.write("\n");
|
|
70
|
+
await chat.ask(question);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const answer = await chat.ask(question);
|
|
74
|
+
console.log(`Copilot> ${answer.text}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
rl.close();
|
|
78
|
+
};
|
|
79
|
+
main().catch((error) => {
|
|
80
|
+
console.error("cli2sdk test CLI failed:", error);
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=copilot_test_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot_test_cli.js","sourceRoot":"","sources":["../../src/bin/copilot_test_cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import readline from "node:readline/promises";
|
|
4
|
+
import { cli2sdk } from "../index.js";
|
|
5
|
+
const parseArgs = (argv) => {
|
|
6
|
+
const args = [...argv];
|
|
7
|
+
const flags = new Set();
|
|
8
|
+
const promptParts = [];
|
|
9
|
+
for (const arg of args) {
|
|
10
|
+
if (arg.startsWith("--")) {
|
|
11
|
+
flags.add(arg);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
promptParts.push(arg);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return { prompt: promptParts.join(" ").trim(), flags };
|
|
18
|
+
};
|
|
19
|
+
const main = async () => {
|
|
20
|
+
const { prompt, flags } = parseArgs(process.argv.slice(2));
|
|
21
|
+
const streamMode = flags.has("--stream");
|
|
22
|
+
const interactive = flags.has("--interactive") || !prompt;
|
|
23
|
+
const cursorCommand = process.env.CLI2SDK_CURSOR_BIN;
|
|
24
|
+
const cursorArgs = process.env.CLI2SDK_CURSOR_ARGS
|
|
25
|
+
? process.env.CLI2SDK_CURSOR_ARGS.split(" ").filter(Boolean)
|
|
26
|
+
: undefined;
|
|
27
|
+
const sdk = cli2sdk({
|
|
28
|
+
provider: "cursor",
|
|
29
|
+
cursor: {
|
|
30
|
+
command: cursorCommand,
|
|
31
|
+
args: cursorArgs,
|
|
32
|
+
env: process.env
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (!interactive) {
|
|
36
|
+
if (!prompt) {
|
|
37
|
+
console.error("No prompt provided.");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
if (streamMode) {
|
|
41
|
+
for await (const chunk of sdk.stream(prompt)) {
|
|
42
|
+
if (chunk.delta) {
|
|
43
|
+
process.stdout.write(chunk.delta);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
process.stdout.write("\n");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const result = await sdk.run(prompt);
|
|
50
|
+
console.log(result.text);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
55
|
+
const chat = sdk.session("cli2sdk-demo");
|
|
56
|
+
console.log("Entering interactive mode. Press Enter on empty line to exit.\n");
|
|
57
|
+
while (true) {
|
|
58
|
+
const question = (await rl.question("You> ")).trim();
|
|
59
|
+
if (!question) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (streamMode) {
|
|
63
|
+
process.stdout.write("Cursor> ");
|
|
64
|
+
for await (const chunk of sdk.stream(question, { history: chat.getHistory() })) {
|
|
65
|
+
if (chunk.delta) {
|
|
66
|
+
process.stdout.write(chunk.delta);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
process.stdout.write("\n");
|
|
70
|
+
await chat.ask(question);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const answer = await chat.ask(question);
|
|
74
|
+
console.log(`Cursor> ${answer.text}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
rl.close();
|
|
78
|
+
};
|
|
79
|
+
main().catch((error) => {
|
|
80
|
+
console.error("cli2sdk test CLI failed:", error);
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=cursor_test_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor_test_cli.js","sourceRoot":"","sources":["../../src/bin/cursor_test_cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import readline from "node:readline/promises";
|
|
4
|
+
import { cli2sdk } from "../index.js";
|
|
5
|
+
const parseArgs = (argv) => {
|
|
6
|
+
const args = [...argv];
|
|
7
|
+
const flags = new Set();
|
|
8
|
+
const promptParts = [];
|
|
9
|
+
for (const arg of args) {
|
|
10
|
+
if (arg.startsWith("--")) {
|
|
11
|
+
flags.add(arg);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
promptParts.push(arg);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return { prompt: promptParts.join(" ").trim(), flags };
|
|
18
|
+
};
|
|
19
|
+
const main = async () => {
|
|
20
|
+
const { prompt, flags } = parseArgs(process.argv.slice(2));
|
|
21
|
+
const streamMode = flags.has("--stream");
|
|
22
|
+
const interactive = flags.has("--interactive") || !prompt;
|
|
23
|
+
const tmatesCommand = process.env.CLI2SDK_TMATES_BIN;
|
|
24
|
+
const tmatesArgs = process.env.CLI2SDK_TMATES_ARGS
|
|
25
|
+
? process.env.CLI2SDK_TMATES_ARGS.split(" ").filter(Boolean)
|
|
26
|
+
: ["--one-shot", "--print", "--permission-mode", "bypassPermissions"];
|
|
27
|
+
const sdk = cli2sdk({
|
|
28
|
+
provider: "tmates",
|
|
29
|
+
tmates: {
|
|
30
|
+
command: tmatesCommand,
|
|
31
|
+
args: tmatesArgs,
|
|
32
|
+
env: process.env,
|
|
33
|
+
timeoutMs: 60000
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
if (!interactive) {
|
|
37
|
+
if (!prompt) {
|
|
38
|
+
console.error("No prompt provided.");
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (streamMode) {
|
|
42
|
+
console.error("Streaming mode is not supported for TMates provider.");
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const result = await sdk.run(prompt);
|
|
47
|
+
console.log(result.text);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
52
|
+
const chat = sdk.session("cli2sdk-demo");
|
|
53
|
+
console.log("Entering interactive mode. Press Enter on empty line to exit.\n");
|
|
54
|
+
while (true) {
|
|
55
|
+
const question = (await rl.question("You> ")).trim();
|
|
56
|
+
if (!question) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
if (streamMode) {
|
|
60
|
+
console.error("Streaming mode is not supported for TMates provider in interactive mode.");
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const answer = await chat.ask(question);
|
|
65
|
+
console.log(`TMates> ${answer.text}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
rl.close();
|
|
69
|
+
};
|
|
70
|
+
main().catch((error) => {
|
|
71
|
+
console.error("cli2sdk test CLI failed:", error);
|
|
72
|
+
process.exitCode = 1;
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=tmates_test_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmates_test_cli.js","sourceRoot":"","sources":["../../src/bin/tmates_test_cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MessageHistory } from "../types/message.js";
|
|
2
|
+
import { ProviderBinaryConfig, RunOptions } from "../types/provider.js";
|
|
3
|
+
import { ResultChunk, RunResult } from "../types/result.js";
|
|
4
|
+
import { Logger } from "../utils/logger.js";
|
|
5
|
+
import { CommandRequest } from "../utils/shell.js";
|
|
6
|
+
import { StreamDecoder } from "./stream.js";
|
|
7
|
+
export declare abstract class CodeProvider {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
protected readonly logger: Logger;
|
|
10
|
+
protected history: MessageHistory;
|
|
11
|
+
constructor(name: string, logger?: Logger);
|
|
12
|
+
abstract run(prompt: string, options?: RunOptions): Promise<RunResult>;
|
|
13
|
+
abstract stream(prompt: string, options?: RunOptions): AsyncGenerator<ResultChunk>;
|
|
14
|
+
protected resolveHistory(options?: RunOptions): MessageHistory;
|
|
15
|
+
}
|
|
16
|
+
export interface CliProviderOptions {
|
|
17
|
+
binary?: ProviderBinaryConfig;
|
|
18
|
+
streamDecoder?: () => StreamDecoder;
|
|
19
|
+
logger?: Logger;
|
|
20
|
+
}
|
|
21
|
+
export declare abstract class CliCommandProvider extends CodeProvider {
|
|
22
|
+
private readonly binary;
|
|
23
|
+
private readonly decoderFactory;
|
|
24
|
+
constructor(name: string, options?: CliProviderOptions);
|
|
25
|
+
protected buildPayload(prompt: string, history: MessageHistory): string;
|
|
26
|
+
protected abstract enrichArgs(prompt: string, options?: RunOptions): string[];
|
|
27
|
+
protected toCommandRequest(prompt: string, options?: RunOptions, stream?: boolean): CommandRequest;
|
|
28
|
+
run(prompt: string, options?: RunOptions): Promise<RunResult>;
|
|
29
|
+
stream(prompt: string, options?: RunOptions): AsyncGenerator<ResultChunk>;
|
|
30
|
+
protected renderTranscript(prompt: string, history: MessageHistory): string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { createLogger } from "../utils/logger.js";
|
|
2
|
+
import { runCommand, streamCommand } from "../utils/shell.js";
|
|
3
|
+
import { StreamDecoder } from "./stream.js";
|
|
4
|
+
export class CodeProvider {
|
|
5
|
+
name;
|
|
6
|
+
logger;
|
|
7
|
+
history = [];
|
|
8
|
+
constructor(name, logger = createLogger()) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
resolveHistory(options) {
|
|
13
|
+
if (options?.history && options.history.length) {
|
|
14
|
+
this.history = options.history;
|
|
15
|
+
}
|
|
16
|
+
return this.history;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class CliCommandProvider extends CodeProvider {
|
|
20
|
+
binary;
|
|
21
|
+
decoderFactory;
|
|
22
|
+
constructor(name, options = {}) {
|
|
23
|
+
super(name, options.logger ?? createLogger());
|
|
24
|
+
this.binary = options.binary ?? {};
|
|
25
|
+
this.decoderFactory = options.streamDecoder ?? (() => new StreamDecoder());
|
|
26
|
+
}
|
|
27
|
+
buildPayload(prompt, history) {
|
|
28
|
+
return JSON.stringify({ prompt, history });
|
|
29
|
+
}
|
|
30
|
+
toCommandRequest(prompt, options, stream = false) {
|
|
31
|
+
const history = this.resolveHistory(options);
|
|
32
|
+
const stdin = this.binary.inputFormat === "text"
|
|
33
|
+
? this.renderTranscript(prompt, history)
|
|
34
|
+
: this.buildPayload(prompt, history);
|
|
35
|
+
const args = [...(this.binary.args ?? []), ...this.enrichArgs(prompt, options)];
|
|
36
|
+
if (stream && this.binary.streamArgs?.length) {
|
|
37
|
+
args.push(...this.binary.streamArgs);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
command: this.binary.command ?? this.name,
|
|
41
|
+
args,
|
|
42
|
+
cwd: options?.cwd ?? this.binary.cwd,
|
|
43
|
+
env: { ...this.binary.env, ...options?.env },
|
|
44
|
+
stdin,
|
|
45
|
+
timeoutMs: options?.timeoutMs ?? this.binary.timeoutMs,
|
|
46
|
+
signal: options?.signal ?? this.binary.signal
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async run(prompt, options) {
|
|
50
|
+
const request = this.toCommandRequest(prompt, options);
|
|
51
|
+
const result = await runCommand(request, this.logger);
|
|
52
|
+
let text = result.stdout.trim();
|
|
53
|
+
// Filter out login check messages for TMates provider
|
|
54
|
+
if (this.name === "tmates") {
|
|
55
|
+
const lines = text.split('\n');
|
|
56
|
+
const filteredLines = lines.filter(line => !line.includes('- Check user login status...') &&
|
|
57
|
+
!line.includes('Check user login status...'));
|
|
58
|
+
text = filteredLines.join('\n').trim();
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
text,
|
|
62
|
+
chunks: [{ text, done: true }],
|
|
63
|
+
history: this.history,
|
|
64
|
+
provider: this.name,
|
|
65
|
+
metadata: { stderr: result.stderr }
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async *stream(prompt, options) {
|
|
69
|
+
const request = this.toCommandRequest(prompt, options, true);
|
|
70
|
+
const iterator = streamCommand(request, this.logger);
|
|
71
|
+
const decoder = this.decoderFactory();
|
|
72
|
+
for await (const raw of iterator) {
|
|
73
|
+
const tokens = decoder.push(raw);
|
|
74
|
+
for (const token of tokens) {
|
|
75
|
+
yield { ...token, provider: this.name };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const finalChunk of decoder.flush()) {
|
|
79
|
+
yield { ...finalChunk, done: true, provider: this.name };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
renderTranscript(prompt, history) {
|
|
83
|
+
const historyLines = history.map((msg) => `[${msg.role}] ${msg.content}`);
|
|
84
|
+
return [...historyLines, `[user] ${prompt}`].join("\n");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/core/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MessageHistory } from "../types/message.js";
|
|
2
|
+
import { ProviderRunner, RunOptions } from "../types/provider.js";
|
|
3
|
+
import { RunResult } from "../types/result.js";
|
|
4
|
+
import { LruCache } from "../utils/cache.js";
|
|
5
|
+
export interface ChatSessionOptions {
|
|
6
|
+
maxMessages?: number;
|
|
7
|
+
cacheKey?: string;
|
|
8
|
+
cache?: LruCache<string, MessageHistory>;
|
|
9
|
+
initialHistory?: MessageHistory;
|
|
10
|
+
}
|
|
11
|
+
export declare class ChatSession {
|
|
12
|
+
private readonly runner;
|
|
13
|
+
private readonly options;
|
|
14
|
+
private history;
|
|
15
|
+
constructor(runner: ProviderRunner, options?: ChatSessionOptions);
|
|
16
|
+
getHistory(): MessageHistory;
|
|
17
|
+
reset(history?: MessageHistory): void;
|
|
18
|
+
ask(prompt: string, options?: RunOptions): Promise<RunResult>;
|
|
19
|
+
load(history: MessageHistory): void;
|
|
20
|
+
private truncate;
|
|
21
|
+
private persist;
|
|
22
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export class ChatSession {
|
|
2
|
+
runner;
|
|
3
|
+
options;
|
|
4
|
+
history;
|
|
5
|
+
constructor(runner, options = {}) {
|
|
6
|
+
this.runner = runner;
|
|
7
|
+
this.options = options;
|
|
8
|
+
this.history = options.initialHistory ? [...options.initialHistory] : [];
|
|
9
|
+
if (options.cacheKey && options.cache) {
|
|
10
|
+
const cached = options.cache.get(options.cacheKey);
|
|
11
|
+
if (cached) {
|
|
12
|
+
this.history = [...cached];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
getHistory() {
|
|
17
|
+
return [...this.history];
|
|
18
|
+
}
|
|
19
|
+
reset(history) {
|
|
20
|
+
this.history = history ? [...history] : [];
|
|
21
|
+
this.persist();
|
|
22
|
+
}
|
|
23
|
+
async ask(prompt, options) {
|
|
24
|
+
const userMessage = {
|
|
25
|
+
role: "user",
|
|
26
|
+
content: prompt,
|
|
27
|
+
timestamp: Date.now()
|
|
28
|
+
};
|
|
29
|
+
const historyForProvider = [...this.history, userMessage];
|
|
30
|
+
const result = await this.runner.run(prompt, {
|
|
31
|
+
...options,
|
|
32
|
+
history: historyForProvider
|
|
33
|
+
});
|
|
34
|
+
this.history = this.truncate([...historyForProvider, {
|
|
35
|
+
role: "assistant",
|
|
36
|
+
content: result.text,
|
|
37
|
+
timestamp: Date.now()
|
|
38
|
+
}]);
|
|
39
|
+
this.persist();
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
load(history) {
|
|
43
|
+
this.history = [...history];
|
|
44
|
+
this.persist();
|
|
45
|
+
}
|
|
46
|
+
truncate(history) {
|
|
47
|
+
const maxMessages = this.options.maxMessages ?? 32;
|
|
48
|
+
if (history.length <= maxMessages) {
|
|
49
|
+
return history;
|
|
50
|
+
}
|
|
51
|
+
return history.slice(history.length - maxMessages);
|
|
52
|
+
}
|
|
53
|
+
persist() {
|
|
54
|
+
if (this.options.cacheKey && this.options.cache) {
|
|
55
|
+
this.options.cache.set(this.options.cacheKey, this.history);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=chat_session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat_session.js","sourceRoot":"","sources":["../../src/core/chat_session.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,WAAW;IAIH;IACA;IAJX,OAAO,CAAiB;IAEhC,YACmB,MAAsB,EACtB,UAA8B,EAAE;QADhC,WAAM,GAAN,MAAM,CAAgB;QACtB,YAAO,GAAP,OAAO,CAAyB;QAEjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAwB;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,OAAoB;QAC5C,MAAM,WAAW,GAAY;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;YAC3C,GAAG,OAAO;YACV,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,kBAAkB,EAAE;gBACnD,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,MAAM,CAAC,IAAI;gBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAuB;QAC1B,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,QAAQ,CAAC,OAAuB;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACrD,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ChatSession } from "./chat_session.js";
|
|
2
|
+
import { Cli2SdkConfig, ProviderRunner, RunOptions } from "../types/provider.js";
|
|
3
|
+
import { ResultChunk, RunResult } from "../types/result.js";
|
|
4
|
+
export declare class ProviderRouter implements ProviderRunner {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly cache;
|
|
8
|
+
private readonly sessionCache;
|
|
9
|
+
private readonly providers;
|
|
10
|
+
constructor(config?: Cli2SdkConfig);
|
|
11
|
+
run(prompt: string, options?: RunOptions): Promise<RunResult>;
|
|
12
|
+
stream(prompt: string, options?: RunOptions): AsyncGenerator<ResultChunk>;
|
|
13
|
+
session(cacheKey?: string): ChatSession;
|
|
14
|
+
private resolveProvider;
|
|
15
|
+
private pickFirstConfigured;
|
|
16
|
+
private getOrCreate;
|
|
17
|
+
private buildCacheKey;
|
|
18
|
+
}
|
|
19
|
+
export declare const createRouter: (config?: Cli2SdkConfig) => ProviderRouter;
|