@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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -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;