10x-chat 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/README.md +168 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +24 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +3 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/lock.d.ts +14 -0
- package/dist/browser/lock.d.ts.map +1 -0
- package/dist/browser/lock.js +89 -0
- package/dist/browser/lock.js.map +1 -0
- package/dist/browser/manager.d.ts +21 -0
- package/dist/browser/manager.d.ts.map +1 -0
- package/dist/browser/manager.js +46 -0
- package/dist/browser/manager.js.map +1 -0
- package/dist/cli/chat.d.ts +3 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +74 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/config.d.ts +3 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +49 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/login.d.ts +3 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +89 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/skill.d.ts +3 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +51 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/status.d.ts +4 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +73 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +25 -0
- package/dist/config.js.map +1 -0
- package/dist/core/bundle.d.ts +12 -0
- package/dist/core/bundle.d.ts.map +1 -0
- package/dist/core/bundle.js +77 -0
- package/dist/core/bundle.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/orchestrator.d.ts +18 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +90 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +11 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +24 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/chatgpt.d.ts +4 -0
- package/dist/providers/chatgpt.d.ts.map +1 -0
- package/dist/providers/chatgpt.js +107 -0
- package/dist/providers/chatgpt.js.map +1 -0
- package/dist/providers/claude.d.ts +4 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +89 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/gemini.d.ts +4 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +89 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/registry.d.ts +8 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +26 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +2 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/store.d.ts +16 -0
- package/dist/session/store.d.ts.map +1 -0
- package/dist/session/store.js +95 -0
- package/dist/session/store.js.map +1 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +74 -0
- package/skills/10x-chat/SKILL.md +57 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { launchBrowser } from '../browser/index.js';
|
|
4
|
+
import { getProvider, isValidProvider, listProviders } from '../providers/index.js';
|
|
5
|
+
export function createLoginCommand() {
|
|
6
|
+
const cmd = new Command('login')
|
|
7
|
+
.description('Login to an AI provider (opens browser for authentication)')
|
|
8
|
+
.argument('[provider]', 'Provider to login to (chatgpt, gemini, claude)')
|
|
9
|
+
.option('--all', 'Login to all providers')
|
|
10
|
+
.option('--status', 'Check login status for all providers')
|
|
11
|
+
.action(async (providerArg, options) => {
|
|
12
|
+
if (options?.status) {
|
|
13
|
+
await checkLoginStatus();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (options?.all) {
|
|
17
|
+
for (const name of listProviders()) {
|
|
18
|
+
await loginToProvider(name);
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!providerArg) {
|
|
23
|
+
console.log(chalk.yellow('Usage: 10x-chat login <provider>'));
|
|
24
|
+
console.log(chalk.dim(`Available providers: ${listProviders().join(', ')}`));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!isValidProvider(providerArg)) {
|
|
28
|
+
console.log(chalk.red(`Unknown provider: ${providerArg}`));
|
|
29
|
+
console.log(chalk.dim(`Available: ${listProviders().join(', ')}`));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
await loginToProvider(providerArg);
|
|
33
|
+
});
|
|
34
|
+
return cmd;
|
|
35
|
+
}
|
|
36
|
+
async function loginToProvider(providerName) {
|
|
37
|
+
const provider = getProvider(providerName);
|
|
38
|
+
console.log(chalk.blue(`Opening ${provider.config.displayName} for login...`));
|
|
39
|
+
console.log(chalk.dim('Please login in the browser window. The session will be saved.'));
|
|
40
|
+
const browser = await launchBrowser({
|
|
41
|
+
provider: providerName,
|
|
42
|
+
headless: false, // Always headed for login
|
|
43
|
+
url: provider.config.loginUrl,
|
|
44
|
+
});
|
|
45
|
+
try {
|
|
46
|
+
// Wait for the user to login — poll until logged in or timeout
|
|
47
|
+
const timeoutMs = 5 * 60 * 1000; // 5 minutes to login
|
|
48
|
+
const startTime = Date.now();
|
|
49
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
50
|
+
const loggedIn = await provider.actions.isLoggedIn(browser.page);
|
|
51
|
+
if (loggedIn) {
|
|
52
|
+
console.log(chalk.green(`✓ Logged in to ${provider.config.displayName}`));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
await browser.page.waitForTimeout(2000);
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.yellow('Login timed out. You can try again.'));
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
await browser.close();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function checkLoginStatus() {
|
|
64
|
+
console.log(chalk.bold('Login Status\n'));
|
|
65
|
+
for (const name of listProviders()) {
|
|
66
|
+
const provider = getProvider(name);
|
|
67
|
+
try {
|
|
68
|
+
const browser = await launchBrowser({
|
|
69
|
+
provider: name,
|
|
70
|
+
headless: true,
|
|
71
|
+
url: provider.config.url,
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
// Give the page a moment to load
|
|
75
|
+
await browser.page.waitForTimeout(3000);
|
|
76
|
+
const loggedIn = await provider.actions.isLoggedIn(browser.page);
|
|
77
|
+
const status = loggedIn ? chalk.green('✓ logged in') : chalk.red('✗ not logged in');
|
|
78
|
+
console.log(` ${provider.config.displayName}: ${status}`);
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
await browser.close();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
console.log(` ${provider.config.displayName}: ${chalk.dim('unable to check')}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,kBAAkB,IAAI,OAAO,CAqC5C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { cp, mkdir, readFile } from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
function getSkillSourceDir() {
|
|
9
|
+
// Navigate from src/cli/ or dist/cli/ up to project root, then into skills/
|
|
10
|
+
return path.resolve(__dirname, '..', '..', 'skills', '10x-chat');
|
|
11
|
+
}
|
|
12
|
+
function getSkillTargetDir() {
|
|
13
|
+
return path.join(os.homedir(), '.codex', 'skills', '10x-chat');
|
|
14
|
+
}
|
|
15
|
+
export function createSkillCommand() {
|
|
16
|
+
const cmd = new Command('skill').description('Manage the 10x-chat agent skill');
|
|
17
|
+
cmd
|
|
18
|
+
.command('install')
|
|
19
|
+
.description('Install SKILL.md into the agent skills directory')
|
|
20
|
+
.action(async () => {
|
|
21
|
+
const sourceDir = getSkillSourceDir();
|
|
22
|
+
const targetDir = getSkillTargetDir();
|
|
23
|
+
try {
|
|
24
|
+
await mkdir(targetDir, { recursive: true });
|
|
25
|
+
await cp(sourceDir, targetDir, { recursive: true, force: true });
|
|
26
|
+
console.log(chalk.green(`✓ Skill installed to ${targetDir}`));
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
30
|
+
console.error(chalk.red(`Failed to install skill: ${message}`));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
cmd
|
|
35
|
+
.command('show')
|
|
36
|
+
.description('Display the SKILL.md content')
|
|
37
|
+
.action(async () => {
|
|
38
|
+
const sourceDir = getSkillSourceDir();
|
|
39
|
+
const skillPath = path.join(sourceDir, 'SKILL.md');
|
|
40
|
+
try {
|
|
41
|
+
const content = await readFile(skillPath, 'utf-8');
|
|
42
|
+
console.log(content);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
console.error(chalk.red('SKILL.md not found. Is the package installed correctly?'));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return cmd;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,iBAAiB;IACxB,4EAA4E;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAEhF,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,mBAAmB,IAAI,OAAO,CAqC7C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAmC9C"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { getSession, listSessions } from '../session/index.js';
|
|
5
|
+
export function createStatusCommand() {
|
|
6
|
+
return new Command('status')
|
|
7
|
+
.description('List recent chat sessions')
|
|
8
|
+
.option('--hours <n>', 'Show sessions from last N hours', '24')
|
|
9
|
+
.action(async (options) => {
|
|
10
|
+
const hours = Number.parseInt(options.hours, 10);
|
|
11
|
+
const sessions = await listSessions({ hours });
|
|
12
|
+
if (sessions.length === 0) {
|
|
13
|
+
console.log(chalk.dim(`No sessions in the last ${hours} hours.`));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.bold(`Sessions (last ${hours}h)\n`));
|
|
17
|
+
for (const session of sessions) {
|
|
18
|
+
const statusIcon = {
|
|
19
|
+
pending: '⏳',
|
|
20
|
+
running: '🔄',
|
|
21
|
+
completed: '✅',
|
|
22
|
+
failed: '❌',
|
|
23
|
+
timeout: '⏰',
|
|
24
|
+
}[session.status];
|
|
25
|
+
const duration = session.durationMs
|
|
26
|
+
? chalk.dim(` (${Math.round(session.durationMs / 1000)}s)`)
|
|
27
|
+
: '';
|
|
28
|
+
console.log(` ${statusIcon} ${chalk.cyan(session.id.slice(0, 8))} ` +
|
|
29
|
+
`${chalk.bold(session.provider)} ${duration}`);
|
|
30
|
+
console.log(` ${chalk.dim(session.promptPreview.slice(0, 80))}`);
|
|
31
|
+
console.log(` ${chalk.dim(new Date(session.createdAt).toLocaleString())}`);
|
|
32
|
+
console.log('');
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function createSessionCommand() {
|
|
37
|
+
return new Command('session')
|
|
38
|
+
.description('View details of a specific session')
|
|
39
|
+
.argument('<id>', 'Session ID (or prefix)')
|
|
40
|
+
.option('--render', 'Pretty-print the response')
|
|
41
|
+
.action(async (id, options) => {
|
|
42
|
+
try {
|
|
43
|
+
const result = await getSession(id);
|
|
44
|
+
const meta = result.meta;
|
|
45
|
+
console.log(chalk.bold('Session Details\n'));
|
|
46
|
+
console.log(` ID: ${meta.id}`);
|
|
47
|
+
console.log(` Provider: ${meta.provider}`);
|
|
48
|
+
console.log(` Model: ${meta.model ?? chalk.dim('(default)')}`);
|
|
49
|
+
console.log(` Status: ${meta.status}`);
|
|
50
|
+
console.log(` Created: ${new Date(meta.createdAt).toLocaleString()}`);
|
|
51
|
+
if (meta.durationMs) {
|
|
52
|
+
console.log(` Duration: ${Math.round(meta.durationMs / 1000)}s`);
|
|
53
|
+
}
|
|
54
|
+
console.log('');
|
|
55
|
+
if (options.render && result.responsePath) {
|
|
56
|
+
const response = await readFile(result.responsePath, 'utf-8');
|
|
57
|
+
console.log(chalk.bold('--- Response ---\n'));
|
|
58
|
+
console.log(response);
|
|
59
|
+
}
|
|
60
|
+
else if (result.responsePath) {
|
|
61
|
+
console.log(chalk.dim(`Response saved at: ${result.responsePath}`));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(chalk.dim('No response captured yet.'));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
console.error(chalk.red(`Session not found: ${id}`));
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type AppConfig } from './types.js';
|
|
2
|
+
/** Load config from disk, falling back to defaults for missing keys. */
|
|
3
|
+
export declare function loadConfig(): Promise<AppConfig>;
|
|
4
|
+
/** Save config to disk. */
|
|
5
|
+
export declare function saveConfig(config: AppConfig): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,YAAY,CAAC;AAE5D,wEAAwE;AACxE,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAWrD;AAED,2BAA2B;AAC3B,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getConfigPath } from './paths.js';
|
|
4
|
+
import { DEFAULT_CONFIG } from './types.js';
|
|
5
|
+
/** Load config from disk, falling back to defaults for missing keys. */
|
|
6
|
+
export async function loadConfig() {
|
|
7
|
+
const configPath = getConfigPath();
|
|
8
|
+
try {
|
|
9
|
+
const raw = await readFile(configPath, 'utf-8');
|
|
10
|
+
// Dynamic import JSON5 only when needed
|
|
11
|
+
const JSON5 = await import('json5');
|
|
12
|
+
const parsed = JSON5.parse(raw);
|
|
13
|
+
return { ...DEFAULT_CONFIG, ...parsed };
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return { ...DEFAULT_CONFIG };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Save config to disk. */
|
|
20
|
+
export async function saveConfig(config) {
|
|
21
|
+
const configPath = getConfigPath();
|
|
22
|
+
await mkdir(path.dirname(configPath), { recursive: true });
|
|
23
|
+
await writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,wCAAwC;QACxC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACtD,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface BundleOptions {
|
|
2
|
+
prompt: string;
|
|
3
|
+
files?: string[];
|
|
4
|
+
cwd?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Assemble a markdown bundle from a prompt and file paths/globs.
|
|
8
|
+
* Inspired by Oracle's bundle approach — one self-contained markdown document.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildBundle(opts: BundleOptions): Promise<string>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/core/bundle.ts"],"names":[],"mappings":"AAyBA,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA2DtE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fg from 'fast-glob';
|
|
4
|
+
const DEFAULT_EXCLUDES = [
|
|
5
|
+
'node_modules/**',
|
|
6
|
+
'dist/**',
|
|
7
|
+
'build/**',
|
|
8
|
+
'.git/**',
|
|
9
|
+
'.next/**',
|
|
10
|
+
'coverage/**',
|
|
11
|
+
'*.tgz',
|
|
12
|
+
'.DS_Store',
|
|
13
|
+
// Security: never bundle secrets
|
|
14
|
+
'.env*',
|
|
15
|
+
'*.pem',
|
|
16
|
+
'*.key',
|
|
17
|
+
'**/id_rsa',
|
|
18
|
+
'**/id_ed25519',
|
|
19
|
+
'**/.credentials/**',
|
|
20
|
+
'**/secrets/**',
|
|
21
|
+
];
|
|
22
|
+
const MAX_FILE_SIZE = 1024 * 1024; // 1 MB
|
|
23
|
+
/**
|
|
24
|
+
* Assemble a markdown bundle from a prompt and file paths/globs.
|
|
25
|
+
* Inspired by Oracle's bundle approach — one self-contained markdown document.
|
|
26
|
+
*/
|
|
27
|
+
export async function buildBundle(opts) {
|
|
28
|
+
const { prompt, files = [], cwd = process.cwd() } = opts;
|
|
29
|
+
const parts = [];
|
|
30
|
+
// Header
|
|
31
|
+
parts.push('# Prompt\n');
|
|
32
|
+
parts.push(prompt);
|
|
33
|
+
parts.push('');
|
|
34
|
+
if (files.length === 0) {
|
|
35
|
+
return parts.join('\n');
|
|
36
|
+
}
|
|
37
|
+
// Resolve file globs
|
|
38
|
+
const includes = [];
|
|
39
|
+
const excludes = [...DEFAULT_EXCLUDES];
|
|
40
|
+
for (const pattern of files) {
|
|
41
|
+
if (pattern.startsWith('!')) {
|
|
42
|
+
excludes.push(pattern.slice(1));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
includes.push(pattern);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const resolvedFiles = await fg(includes, {
|
|
49
|
+
cwd,
|
|
50
|
+
ignore: excludes,
|
|
51
|
+
absolute: true,
|
|
52
|
+
followSymbolicLinks: false,
|
|
53
|
+
onlyFiles: true,
|
|
54
|
+
dot: false,
|
|
55
|
+
});
|
|
56
|
+
if (resolvedFiles.length === 0) {
|
|
57
|
+
parts.push('> No files matched the provided patterns.\n');
|
|
58
|
+
return parts.join('\n');
|
|
59
|
+
}
|
|
60
|
+
parts.push(`# Context Files (${resolvedFiles.length})\n`);
|
|
61
|
+
for (const filePath of resolvedFiles.sort()) {
|
|
62
|
+
const fileStat = await stat(filePath);
|
|
63
|
+
if (fileStat.size > MAX_FILE_SIZE) {
|
|
64
|
+
parts.push(`## ${path.relative(cwd, filePath)} (SKIPPED — exceeds 1 MB)\n`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const content = await readFile(filePath, 'utf-8');
|
|
68
|
+
const ext = path.extname(filePath).slice(1) || 'txt';
|
|
69
|
+
const relativePath = path.relative(cwd, filePath);
|
|
70
|
+
parts.push(`## ${relativePath}\n`);
|
|
71
|
+
parts.push(`\`\`\`${ext}`);
|
|
72
|
+
parts.push(content);
|
|
73
|
+
parts.push('```\n');
|
|
74
|
+
}
|
|
75
|
+
return parts.join('\n');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/core/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAmB,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ChatOptions, ProviderName } from '../types.js';
|
|
2
|
+
export interface ChatResult {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
provider: ProviderName;
|
|
5
|
+
response: string;
|
|
6
|
+
truncated: boolean;
|
|
7
|
+
durationMs: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Execute a chat interaction with a provider:
|
|
11
|
+
* 1. Build the prompt bundle
|
|
12
|
+
* 2. Launch the browser
|
|
13
|
+
* 3. Submit the prompt
|
|
14
|
+
* 4. Capture the response
|
|
15
|
+
* 5. Save session
|
|
16
|
+
*/
|
|
17
|
+
export declare function runChat(options: ChatOptions): Promise<ChatResult>;
|
|
18
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoFvE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { launchBrowser } from '../browser/index.js';
|
|
3
|
+
import { loadConfig } from '../config.js';
|
|
4
|
+
import { getProvider } from '../providers/index.js';
|
|
5
|
+
import { createSession, saveBundle, saveResponse, updateSession } from '../session/index.js';
|
|
6
|
+
import { buildBundle } from './bundle.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute a chat interaction with a provider:
|
|
9
|
+
* 1. Build the prompt bundle
|
|
10
|
+
* 2. Launch the browser
|
|
11
|
+
* 3. Submit the prompt
|
|
12
|
+
* 4. Capture the response
|
|
13
|
+
* 5. Save session
|
|
14
|
+
*/
|
|
15
|
+
export async function runChat(options) {
|
|
16
|
+
const config = await loadConfig();
|
|
17
|
+
const providerName = options.provider ?? config.defaultProvider;
|
|
18
|
+
const provider = getProvider(providerName);
|
|
19
|
+
const timeoutMs = options.timeoutMs ?? config.defaultTimeoutMs;
|
|
20
|
+
const headless = options.headed === true ? false : config.headless;
|
|
21
|
+
// Build the bundle
|
|
22
|
+
const bundle = await buildBundle({
|
|
23
|
+
prompt: options.prompt,
|
|
24
|
+
files: options.file,
|
|
25
|
+
});
|
|
26
|
+
// Create session
|
|
27
|
+
const session = await createSession(providerName, options.prompt, options.model);
|
|
28
|
+
await saveBundle(session.id, bundle);
|
|
29
|
+
console.log(chalk.dim(`Session: ${session.id}`));
|
|
30
|
+
console.log(chalk.blue(`Provider: ${provider.config.displayName}`));
|
|
31
|
+
// Launch browser — if this fails, mark session as failed
|
|
32
|
+
let browser;
|
|
33
|
+
try {
|
|
34
|
+
await updateSession(session.id, { status: 'running' });
|
|
35
|
+
browser = await launchBrowser({
|
|
36
|
+
provider: providerName,
|
|
37
|
+
headless,
|
|
38
|
+
url: provider.config.url,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
await updateSession(session.id, { status: 'failed' });
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
const startTime = Date.now();
|
|
46
|
+
try {
|
|
47
|
+
// Check login
|
|
48
|
+
const loggedIn = await provider.actions.isLoggedIn(browser.page);
|
|
49
|
+
if (!loggedIn) {
|
|
50
|
+
throw new Error(`Not logged in to ${provider.config.displayName}. Run: 10x-chat login ${providerName}`);
|
|
51
|
+
}
|
|
52
|
+
// Submit prompt
|
|
53
|
+
console.log(chalk.dim('Submitting prompt...'));
|
|
54
|
+
await provider.actions.submitPrompt(browser.page, bundle);
|
|
55
|
+
// Capture response
|
|
56
|
+
console.log(chalk.dim('Waiting for response...'));
|
|
57
|
+
const captured = await provider.actions.captureResponse(browser.page, {
|
|
58
|
+
timeoutMs,
|
|
59
|
+
onChunk: (chunk) => process.stdout.write(chalk.dim(chunk)),
|
|
60
|
+
});
|
|
61
|
+
const durationMs = Date.now() - startTime;
|
|
62
|
+
// Save response
|
|
63
|
+
await saveResponse(session.id, captured.text);
|
|
64
|
+
await updateSession(session.id, {
|
|
65
|
+
status: captured.truncated ? 'timeout' : 'completed',
|
|
66
|
+
durationMs,
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
sessionId: session.id,
|
|
70
|
+
provider: providerName,
|
|
71
|
+
response: captured.text,
|
|
72
|
+
truncated: captured.truncated,
|
|
73
|
+
durationMs,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const durationMs = Date.now() - startTime;
|
|
78
|
+
// Distinguish timeout from other failures
|
|
79
|
+
const isTimeout = error instanceof Error && error.message.toLowerCase().includes('timeout');
|
|
80
|
+
await updateSession(session.id, {
|
|
81
|
+
status: isTimeout ? 'timeout' : 'failed',
|
|
82
|
+
durationMs,
|
|
83
|
+
});
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
await browser.close();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { type BrowserSession, launchBrowser } from './browser/index.js';
|
|
2
|
+
export { loadConfig, saveConfig } from './config.js';
|
|
3
|
+
export { buildBundle, type ChatResult, runChat } from './core/index.js';
|
|
4
|
+
export { getProvider, isValidProvider, listProviders } from './providers/index.js';
|
|
5
|
+
export { createSession, getSession, listSessions, } from './session/index.js';
|
|
6
|
+
export type { AppConfig, CapturedResponse, ChatOptions, Provider, ProviderActions, ProviderConfig, ProviderName, SessionMeta, SessionResult, } from './types.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { launchBrowser } from './browser/index.js';
|
|
2
|
+
export { loadConfig, saveConfig } from './config.js';
|
|
3
|
+
export { buildBundle, runChat } from './core/index.js';
|
|
4
|
+
export { getProvider, isValidProvider, listProviders } from './providers/index.js';
|
|
5
|
+
export { createSession, getSession, listSessions, } from './session/index.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAmB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Root directory for all 10x-chat data: ~/.10x-chat */
|
|
2
|
+
export declare function getAppDir(): string;
|
|
3
|
+
/** Profile directory for a specific provider: ~/.10x-chat/profiles/<provider> */
|
|
4
|
+
export declare function getProfileDir(provider: string): string;
|
|
5
|
+
/** Sessions root: ~/.10x-chat/sessions */
|
|
6
|
+
export declare function getSessionsDir(): string;
|
|
7
|
+
/** Session directory for a specific session: ~/.10x-chat/sessions/<id> */
|
|
8
|
+
export declare function getSessionDir(sessionId: string): string;
|
|
9
|
+
/** Config file path: ~/.10x-chat/config.json */
|
|
10
|
+
export declare function getConfigPath(): string;
|
|
11
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAKA,wDAAwD;AACxD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,gDAAgD;AAChD,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const APP_DIR_NAME = '.10x-chat';
|
|
4
|
+
/** Root directory for all 10x-chat data: ~/.10x-chat */
|
|
5
|
+
export function getAppDir() {
|
|
6
|
+
return process.env.TEN_X_CHAT_HOME ?? path.join(os.homedir(), APP_DIR_NAME);
|
|
7
|
+
}
|
|
8
|
+
/** Profile directory for a specific provider: ~/.10x-chat/profiles/<provider> */
|
|
9
|
+
export function getProfileDir(provider) {
|
|
10
|
+
return path.join(getAppDir(), 'profiles', provider);
|
|
11
|
+
}
|
|
12
|
+
/** Sessions root: ~/.10x-chat/sessions */
|
|
13
|
+
export function getSessionsDir() {
|
|
14
|
+
return path.join(getAppDir(), 'sessions');
|
|
15
|
+
}
|
|
16
|
+
/** Session directory for a specific session: ~/.10x-chat/sessions/<id> */
|
|
17
|
+
export function getSessionDir(sessionId) {
|
|
18
|
+
return path.join(getSessionsDir(), sessionId);
|
|
19
|
+
}
|
|
20
|
+
/** Config file path: ~/.10x-chat/config.json */
|
|
21
|
+
export function getConfigPath() {
|
|
22
|
+
return path.join(getAppDir(), 'config.json');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,YAAY,GAAG,WAAW,CAAC;AAEjC,wDAAwD;AACxD,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAC9E,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,eAAO,MAAM,cAAc,EAAE,cAQ5B,CAAC;AAUF,eAAO,MAAM,cAAc,EAAE,eA8G5B,CAAC"}
|