swellai 1.0.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 +711 -0
- package/dist/agents/linear-agent.d.ts +32 -0
- package/dist/agents/linear-agent.d.ts.map +1 -0
- package/dist/agents/linear-agent.js +263 -0
- package/dist/agents/linear-agent.js.map +1 -0
- package/dist/agents/planning-agent.d.ts +36 -0
- package/dist/agents/planning-agent.d.ts.map +1 -0
- package/dist/agents/planning-agent.js +248 -0
- package/dist/agents/planning-agent.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +102 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.d.ts +11 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +257 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/manifest.d.ts +27 -0
- package/dist/cli/manifest.d.ts.map +1 -0
- package/dist/cli/manifest.js +65 -0
- package/dist/cli/manifest.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/claude-agent-sdk.d.ts +73 -0
- package/dist/lib/claude-agent-sdk.d.ts.map +1 -0
- package/dist/lib/claude-agent-sdk.js +114 -0
- package/dist/lib/claude-agent-sdk.js.map +1 -0
- package/dist/lib/conversation-logger.d.ts +66 -0
- package/dist/lib/conversation-logger.d.ts.map +1 -0
- package/dist/lib/conversation-logger.js +159 -0
- package/dist/lib/conversation-logger.js.map +1 -0
- package/dist/lib/opencode.d.ts +68 -0
- package/dist/lib/opencode.d.ts.map +1 -0
- package/dist/lib/opencode.js +151 -0
- package/dist/lib/opencode.js.map +1 -0
- package/dist/lib/turso-schema.d.ts +13 -0
- package/dist/lib/turso-schema.d.ts.map +1 -0
- package/dist/lib/turso-schema.js +69 -0
- package/dist/lib/turso-schema.js.map +1 -0
- package/dist/lib/turso.d.ts +56 -0
- package/dist/lib/turso.d.ts.map +1 -0
- package/dist/lib/turso.js +144 -0
- package/dist/lib/turso.js.map +1 -0
- package/dist/lib/types.d.ts +31 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +20 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +34 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +72 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/scripts/build-templates.d.ts +17 -0
- package/dist/scripts/build-templates.d.ts.map +1 -0
- package/dist/scripts/build-templates.js +132 -0
- package/dist/scripts/build-templates.js.map +1 -0
- package/dist/scripts/claude-agent-runner.d.ts +28 -0
- package/dist/scripts/claude-agent-runner.d.ts.map +1 -0
- package/dist/scripts/claude-agent-runner.js +278 -0
- package/dist/scripts/claude-agent-runner.js.map +1 -0
- package/dist/src/agents/linear-agent.d.ts +32 -0
- package/dist/src/agents/linear-agent.d.ts.map +1 -0
- package/dist/src/agents/linear-agent.js +285 -0
- package/dist/src/agents/linear-agent.js.map +1 -0
- package/dist/src/agents/planning-agent.d.ts +36 -0
- package/dist/src/agents/planning-agent.d.ts.map +1 -0
- package/dist/src/agents/planning-agent.js +248 -0
- package/dist/src/agents/planning-agent.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +102 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/install.d.ts +11 -0
- package/dist/src/cli/install.d.ts.map +1 -0
- package/dist/src/cli/install.js +257 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/cli/manifest.d.ts +27 -0
- package/dist/src/cli/manifest.d.ts.map +1 -0
- package/dist/src/cli/manifest.js +65 -0
- package/dist/src/cli/manifest.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/claude-agent-sdk.d.ts +73 -0
- package/dist/src/lib/claude-agent-sdk.d.ts.map +1 -0
- package/dist/src/lib/claude-agent-sdk.js +114 -0
- package/dist/src/lib/claude-agent-sdk.js.map +1 -0
- package/dist/src/lib/conversation-logger.d.ts +66 -0
- package/dist/src/lib/conversation-logger.d.ts.map +1 -0
- package/dist/src/lib/conversation-logger.js +159 -0
- package/dist/src/lib/conversation-logger.js.map +1 -0
- package/dist/src/lib/opencode.d.ts +153 -0
- package/dist/src/lib/opencode.d.ts.map +1 -0
- package/dist/src/lib/opencode.js +153 -0
- package/dist/src/lib/opencode.js.map +1 -0
- package/dist/src/lib/turso-schema.d.ts +13 -0
- package/dist/src/lib/turso-schema.d.ts.map +1 -0
- package/dist/src/lib/turso-schema.js +69 -0
- package/dist/src/lib/turso-schema.js.map +1 -0
- package/dist/src/lib/turso.d.ts +56 -0
- package/dist/src/lib/turso.d.ts.map +1 -0
- package/dist/src/lib/turso.js +144 -0
- package/dist/src/lib/turso.js.map +1 -0
- package/dist/src/lib/types.d.ts +31 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +20 -0
- package/dist/src/lib/types.js.map +1 -0
- package/dist/src/lib/utils.d.ts +34 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +72 -0
- package/dist/src/lib/utils.js.map +1 -0
- package/package.json +63 -0
- package/templates/.env.example +51 -0
- package/templates/agents/codebase-analyzer.md +121 -0
- package/templates/agents/codebase-locator.md +105 -0
- package/templates/agents/coding-agent.md +187 -0
- package/templates/agents/debug-agent.md +300 -0
- package/templates/prompts/consolidate-and-create-linear.md +282 -0
- package/templates/prompts/implementation.md +94 -0
- package/templates/prompts/plan-generation.md +171 -0
- package/templates/prompts/review.md +39 -0
- package/templates/prompts/verify.md +80 -0
- package/templates/scripts/claude-agent-runner.js +12887 -0
- package/templates/scripts/detect-runtime.sh +95 -0
- package/templates/scripts/linear-agent.js +1753 -0
- package/templates/scripts/planning-agent.js +1738 -0
- package/templates/workflows/claude-implement.yml +931 -0
- package/templates/workflows/claude-plan.yml +301 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface Manifest {
|
|
2
|
+
version: string;
|
|
3
|
+
installedAt: string;
|
|
4
|
+
files: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Calculate SHA256 hash of file contents
|
|
8
|
+
*/
|
|
9
|
+
export declare function calculateFileHash(content: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Read the manifest file from the target directory
|
|
12
|
+
*/
|
|
13
|
+
export declare function readManifest(targetDir: string): Manifest | null;
|
|
14
|
+
/**
|
|
15
|
+
* Write the manifest file to the target directory
|
|
16
|
+
*/
|
|
17
|
+
export declare function writeManifest(targetDir: string, manifest: Manifest): void;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new manifest with current timestamp and version
|
|
20
|
+
*/
|
|
21
|
+
export declare function createManifest(version: string, files: Record<string, string>): Manifest;
|
|
22
|
+
/**
|
|
23
|
+
* Check if a file has been modified by the user since installation
|
|
24
|
+
* Returns true if the file was modified, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
export declare function isFileModified(filePath: string, currentContent: string, manifest: Manifest | null): boolean;
|
|
27
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/cli/manifest.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAc/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAQzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,CAMvF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,QAAQ,GAAG,IAAI,GACxB,OAAO,CAYT"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const MANIFEST_PATH = ".github/claude-parallel/.install-manifest.json";
|
|
5
|
+
/**
|
|
6
|
+
* Calculate SHA256 hash of file contents
|
|
7
|
+
*/
|
|
8
|
+
export function calculateFileHash(content) {
|
|
9
|
+
return createHash("sha256").update(content).digest("hex");
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Read the manifest file from the target directory
|
|
13
|
+
*/
|
|
14
|
+
export function readManifest(targetDir) {
|
|
15
|
+
const manifestPath = join(targetDir, MANIFEST_PATH);
|
|
16
|
+
if (!existsSync(manifestPath)) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const content = readFileSync(manifestPath, "utf-8");
|
|
21
|
+
return JSON.parse(content);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.warn(`Warning: Could not read manifest at ${manifestPath}:`, error);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Write the manifest file to the target directory
|
|
30
|
+
*/
|
|
31
|
+
export function writeManifest(targetDir, manifest) {
|
|
32
|
+
const manifestPath = join(targetDir, MANIFEST_PATH);
|
|
33
|
+
try {
|
|
34
|
+
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new Error(`Failed to write manifest to ${manifestPath}: ${error}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a new manifest with current timestamp and version
|
|
42
|
+
*/
|
|
43
|
+
export function createManifest(version, files) {
|
|
44
|
+
return {
|
|
45
|
+
version,
|
|
46
|
+
installedAt: new Date().toISOString(),
|
|
47
|
+
files,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if a file has been modified by the user since installation
|
|
52
|
+
* Returns true if the file was modified, false otherwise
|
|
53
|
+
*/
|
|
54
|
+
export function isFileModified(filePath, currentContent, manifest) {
|
|
55
|
+
if (!manifest) {
|
|
56
|
+
return false; // No manifest means fresh install, not modified
|
|
57
|
+
}
|
|
58
|
+
const recordedHash = manifest.files[filePath];
|
|
59
|
+
if (!recordedHash) {
|
|
60
|
+
return false; // File not in manifest, treat as new
|
|
61
|
+
}
|
|
62
|
+
const currentHash = calculateFileHash(currentContent);
|
|
63
|
+
return currentHash !== recordedHash;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/cli/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,aAAa,GAAG,gDAAgD,CAAC;AAEvE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,QAAkB;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,KAA6B;IAC3E,OAAO;QACL,OAAO;QACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,cAAsB,EACtB,QAAyB;IAEzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC,CAAC,gDAAgD;IAChE,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,CAAC,qCAAqC;IACrD,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACtD,OAAO,WAAW,KAAK,YAAY,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API exports for the multi-provider plan generation system.
|
|
3
|
+
*
|
|
4
|
+
* This module provides programmatic access to the planning and linear agents,
|
|
5
|
+
* as well as shared utilities and types.
|
|
6
|
+
*/
|
|
7
|
+
export type { AuthConfig, ClaudeQueryOptions } from "./lib/claude-agent-sdk.js";
|
|
8
|
+
export { getAuthentication, runClaudeQuery, } from "./lib/claude-agent-sdk.js";
|
|
9
|
+
export * from "./lib/conversation-logger.js";
|
|
10
|
+
export type { OpencodeServerOptions } from "./lib/opencode.js";
|
|
11
|
+
export { createOpencodeServer, setupEventMonitoring, } from "./lib/opencode.js";
|
|
12
|
+
export * from "./lib/turso.js";
|
|
13
|
+
export * from "./lib/turso-schema.js";
|
|
14
|
+
export type { Part, Provider, ProviderConfig } from "./lib/types.js";
|
|
15
|
+
export { API_KEY_ENV_VARS, DEFAULT_MODELS } from "./lib/types.js";
|
|
16
|
+
export { extractTextFromParts, getApiKey, validateEnvVars, validateProvider, } from "./lib/utils.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,cAAc,8BAA8B,CAAC;AAE7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AAEtC,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API exports for the multi-provider plan generation system.
|
|
3
|
+
*
|
|
4
|
+
* This module provides programmatic access to the planning and linear agents,
|
|
5
|
+
* as well as shared utilities and types.
|
|
6
|
+
*/
|
|
7
|
+
export { getAuthentication, runClaudeQuery, } from "./lib/claude-agent-sdk.js";
|
|
8
|
+
// Export conversation logging utilities
|
|
9
|
+
export * from "./lib/conversation-logger.js";
|
|
10
|
+
export { createOpencodeServer, setupEventMonitoring, } from "./lib/opencode.js";
|
|
11
|
+
// Export Turso client and schema utilities
|
|
12
|
+
export * from "./lib/turso.js";
|
|
13
|
+
export * from "./lib/turso-schema.js";
|
|
14
|
+
export { API_KEY_ENV_VARS, DEFAULT_MODELS } from "./lib/types.js";
|
|
15
|
+
// Export all utility functions
|
|
16
|
+
export { extractTextFromParts, getApiKey, validateEnvVars, validateProvider, } from "./lib/utils.js";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,iBAAiB,EACjB,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,wCAAwC;AACxC,cAAc,8BAA8B,CAAC;AAG7C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,2CAA2C;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAClE,+BAA+B;AAC/B,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK helper module for authentication and query configuration.
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for running Claude Code-style queries using the
|
|
5
|
+
* @anthropic-ai/claude-agent-sdk package, mimicking the behavior of the CLI.
|
|
6
|
+
*/
|
|
7
|
+
import { type McpServerConfig, type Options } from "@anthropic-ai/claude-agent-sdk";
|
|
8
|
+
import type { ConversationLogger } from "./conversation-logger.js";
|
|
9
|
+
/**
|
|
10
|
+
* Authentication configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface AuthConfig {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
source: "oauth" | "api_key";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Options for running a Claude query
|
|
18
|
+
*/
|
|
19
|
+
export interface ClaudeQueryOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Working directory for the agent
|
|
22
|
+
*/
|
|
23
|
+
cwd: string;
|
|
24
|
+
/**
|
|
25
|
+
* Model to use (e.g., 'claude-opus-4-5-20251101')
|
|
26
|
+
*/
|
|
27
|
+
model?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Execution mode: implementation or review
|
|
30
|
+
*/
|
|
31
|
+
mode?: "implementation" | "review";
|
|
32
|
+
/**
|
|
33
|
+
* JSON schema for structured output (used in review mode)
|
|
34
|
+
*/
|
|
35
|
+
outputSchema?: Record<string, unknown>;
|
|
36
|
+
/**
|
|
37
|
+
* MCP (Model Context Protocol) servers configuration
|
|
38
|
+
*/
|
|
39
|
+
mcpServers?: Record<string, McpServerConfig>;
|
|
40
|
+
/**
|
|
41
|
+
* Additional SDK options to override defaults
|
|
42
|
+
*/
|
|
43
|
+
additionalOptions?: Partial<Options>;
|
|
44
|
+
/**
|
|
45
|
+
* Optional conversation logger for storing interactions
|
|
46
|
+
*/
|
|
47
|
+
logger?: ConversationLogger | null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get authentication credentials from environment variables.
|
|
51
|
+
*
|
|
52
|
+
* Checks for CLAUDE_CODE_OAUTH_TOKEN first, then falls back to ANTHROPIC_API_KEY.
|
|
53
|
+
* Sets ANTHROPIC_API_KEY in the environment if OAuth token is found (SDK expects this).
|
|
54
|
+
*
|
|
55
|
+
* @returns Authentication configuration with API key and source
|
|
56
|
+
* @throws Error if neither authentication method is available
|
|
57
|
+
*/
|
|
58
|
+
export declare function getAuthentication(): AuthConfig;
|
|
59
|
+
/**
|
|
60
|
+
* Run a Claude query with configuration matching the CLI behavior.
|
|
61
|
+
*
|
|
62
|
+
* This function configures the SDK to mimic how the Claude Code CLI works:
|
|
63
|
+
* - Uses the 'claude_code' system prompt preset
|
|
64
|
+
* - Loads project settings (CLAUDE.md files)
|
|
65
|
+
* - Bypasses permission prompts (for automation)
|
|
66
|
+
* - Supports structured output for review mode
|
|
67
|
+
*
|
|
68
|
+
* @param prompt - The prompt to send to Claude
|
|
69
|
+
* @param options - Configuration options for the query
|
|
70
|
+
* @returns AsyncGenerator that yields SDK messages
|
|
71
|
+
*/
|
|
72
|
+
export declare function runClaudeQuery(prompt: string, options: ClaudeQueryOptions): AsyncGenerator<import("@anthropic-ai/claude-agent-sdk").SDKMessage, void, unknown>;
|
|
73
|
+
//# sourceMappingURL=claude-agent-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent-sdk.d.ts","sourceRoot":"","sources":["../../../src/lib/claude-agent-sdk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAS,MAAM,gCAAgC,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IAEnC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE7C;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC;;OAEG;IACH,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,CA+B9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAuB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,sFAsEhF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK helper module for authentication and query configuration.
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for running Claude Code-style queries using the
|
|
5
|
+
* @anthropic-ai/claude-agent-sdk package, mimicking the behavior of the CLI.
|
|
6
|
+
*/
|
|
7
|
+
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
8
|
+
/**
|
|
9
|
+
* Get authentication credentials from environment variables.
|
|
10
|
+
*
|
|
11
|
+
* Checks for CLAUDE_CODE_OAUTH_TOKEN first, then falls back to ANTHROPIC_API_KEY.
|
|
12
|
+
* Sets ANTHROPIC_API_KEY in the environment if OAuth token is found (SDK expects this).
|
|
13
|
+
*
|
|
14
|
+
* @returns Authentication configuration with API key and source
|
|
15
|
+
* @throws Error if neither authentication method is available
|
|
16
|
+
*/
|
|
17
|
+
export function getAuthentication() {
|
|
18
|
+
// Check for OAuth token first (preferred)
|
|
19
|
+
const oauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
20
|
+
if (oauthToken) {
|
|
21
|
+
console.warn("[Auth] Using CLAUDE_CODE_OAUTH_TOKEN for authentication");
|
|
22
|
+
// SDK handles CLAUDE_CODE_OAUTH_TOKEN automatically - don't modify env
|
|
23
|
+
return {
|
|
24
|
+
apiKey: oauthToken,
|
|
25
|
+
source: "oauth",
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Fall back to API key
|
|
29
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
30
|
+
if (apiKey) {
|
|
31
|
+
console.warn("[Auth] ⚠️ Using ANTHROPIC_API_KEY for authentication");
|
|
32
|
+
console.warn("[Auth] ⚠️ Consider using CLAUDE_CODE_OAUTH_TOKEN for better integration");
|
|
33
|
+
return {
|
|
34
|
+
apiKey,
|
|
35
|
+
source: "api_key",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// No authentication found
|
|
39
|
+
throw new Error("No authentication found. Please set either:\n" +
|
|
40
|
+
" - CLAUDE_CODE_OAUTH_TOKEN (preferred), or\n" +
|
|
41
|
+
" - ANTHROPIC_API_KEY (fallback)\n");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run a Claude query with configuration matching the CLI behavior.
|
|
45
|
+
*
|
|
46
|
+
* This function configures the SDK to mimic how the Claude Code CLI works:
|
|
47
|
+
* - Uses the 'claude_code' system prompt preset
|
|
48
|
+
* - Loads project settings (CLAUDE.md files)
|
|
49
|
+
* - Bypasses permission prompts (for automation)
|
|
50
|
+
* - Supports structured output for review mode
|
|
51
|
+
*
|
|
52
|
+
* @param prompt - The prompt to send to Claude
|
|
53
|
+
* @param options - Configuration options for the query
|
|
54
|
+
* @returns AsyncGenerator that yields SDK messages
|
|
55
|
+
*/
|
|
56
|
+
export async function* runClaudeQuery(prompt, options) {
|
|
57
|
+
// Get authentication (also sets ANTHROPIC_API_KEY in process.env)
|
|
58
|
+
getAuthentication();
|
|
59
|
+
// Build SDK options
|
|
60
|
+
const sdkOptions = {
|
|
61
|
+
// Working directory
|
|
62
|
+
cwd: options.cwd,
|
|
63
|
+
// Model configuration
|
|
64
|
+
model: options.model || "claude-opus-4-5-20251101",
|
|
65
|
+
// Use Claude Code preset system prompt
|
|
66
|
+
systemPrompt: {
|
|
67
|
+
type: "preset",
|
|
68
|
+
preset: "claude_code",
|
|
69
|
+
},
|
|
70
|
+
// Load project settings (CLAUDE.md files)
|
|
71
|
+
settingSources: ["project"],
|
|
72
|
+
// Bypass permissions for automation
|
|
73
|
+
permissionMode: "bypassPermissions",
|
|
74
|
+
allowDangerouslySkipPermissions: true,
|
|
75
|
+
// Configure MCP servers if provided
|
|
76
|
+
...(options.mcpServers ? { mcpServers: options.mcpServers } : {}),
|
|
77
|
+
// Configure output format based on mode
|
|
78
|
+
...(options.mode === "review" && options.outputSchema
|
|
79
|
+
? {
|
|
80
|
+
outputFormat: {
|
|
81
|
+
type: "json_schema",
|
|
82
|
+
schema: options.outputSchema,
|
|
83
|
+
},
|
|
84
|
+
}
|
|
85
|
+
: {}),
|
|
86
|
+
// Merge any additional options
|
|
87
|
+
...options.additionalOptions,
|
|
88
|
+
};
|
|
89
|
+
// Log configuration
|
|
90
|
+
console.error("[Query] Starting Claude query");
|
|
91
|
+
console.error(`[Query] Model: ${sdkOptions.model}`);
|
|
92
|
+
console.error(`[Query] CWD: ${sdkOptions.cwd}`);
|
|
93
|
+
console.error(`[Query] Mode: ${options.mode || "implementation"}`);
|
|
94
|
+
console.error(`[Query] Permission Mode: ${sdkOptions.permissionMode}`);
|
|
95
|
+
if (options.mcpServers) {
|
|
96
|
+
console.error(`[Query] MCP Servers: ${Object.keys(options.mcpServers).join(", ")}`);
|
|
97
|
+
}
|
|
98
|
+
// Create and yield from the query
|
|
99
|
+
const queryGenerator = query({
|
|
100
|
+
prompt,
|
|
101
|
+
options: sdkOptions,
|
|
102
|
+
});
|
|
103
|
+
// Stream all messages
|
|
104
|
+
for await (const message of queryGenerator) {
|
|
105
|
+
// Log the message if logger is provided
|
|
106
|
+
if (options.logger && message.type === "assistant") {
|
|
107
|
+
// Log assistant messages
|
|
108
|
+
const content = typeof message.message === "string" ? message.message : JSON.stringify(message.message);
|
|
109
|
+
options.logger.logMessage("assistant", content);
|
|
110
|
+
}
|
|
111
|
+
yield message;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=claude-agent-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent-sdk.js","sourceRoot":"","sources":["../../../src/lib/claude-agent-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation logger for storing agent interactions in Turso.
|
|
3
|
+
*
|
|
4
|
+
* This class provides methods for logging sessions, messages, and tool
|
|
5
|
+
* executions to a Turso database. All operations are fire-and-forget
|
|
6
|
+
* to avoid impacting agent performance.
|
|
7
|
+
*/
|
|
8
|
+
import type { Client } from "@libsql/client";
|
|
9
|
+
export interface SessionInfo {
|
|
10
|
+
id: string;
|
|
11
|
+
agentType: string;
|
|
12
|
+
model: string;
|
|
13
|
+
provider?: string;
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface ToolExecutionInfo {
|
|
17
|
+
toolName: string;
|
|
18
|
+
status: "running" | "completed" | "error";
|
|
19
|
+
input?: unknown;
|
|
20
|
+
output?: unknown;
|
|
21
|
+
error?: string;
|
|
22
|
+
startedAt?: Date;
|
|
23
|
+
endedAt?: Date;
|
|
24
|
+
}
|
|
25
|
+
export declare class ConversationLogger {
|
|
26
|
+
private client;
|
|
27
|
+
private sessionId;
|
|
28
|
+
private messageSequence;
|
|
29
|
+
constructor(client: Client);
|
|
30
|
+
/**
|
|
31
|
+
* Start a new logging session.
|
|
32
|
+
*/
|
|
33
|
+
startSession(info: SessionInfo): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Log a conversation message (user prompt or assistant response).
|
|
36
|
+
*/
|
|
37
|
+
logMessage(role: "user" | "assistant" | "tool", content: string, options?: {
|
|
38
|
+
toolName?: string;
|
|
39
|
+
toolInput?: unknown;
|
|
40
|
+
toolOutput?: unknown;
|
|
41
|
+
tokenCount?: number;
|
|
42
|
+
}): Promise<string | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Log a tool execution event.
|
|
45
|
+
*/
|
|
46
|
+
logToolExecution(info: ToolExecutionInfo): Promise<string | null>;
|
|
47
|
+
/**
|
|
48
|
+
* End the current session.
|
|
49
|
+
*/
|
|
50
|
+
endSession(status: "completed" | "error", errorMessage?: string): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Sync local embedded replica to cloud.
|
|
53
|
+
* Should be called at the end of each session to persist data.
|
|
54
|
+
*/
|
|
55
|
+
syncToCloud(): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Get the current session ID.
|
|
58
|
+
*/
|
|
59
|
+
getSessionId(): string | null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create a conversation logger if Turso is configured.
|
|
63
|
+
* Returns null if logging is disabled.
|
|
64
|
+
*/
|
|
65
|
+
export declare function createConversationLogger(): Promise<ConversationLogger | null>;
|
|
66
|
+
//# sourceMappingURL=conversation-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-logger.d.ts","sourceRoot":"","sources":["../../../src/lib/conversation-logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpD;;OAEG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,EACnC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9F,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA8BzB;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkCvE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrF;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAWrC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;CAG9B;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAanF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation logger for storing agent interactions in Turso.
|
|
3
|
+
*
|
|
4
|
+
* This class provides methods for logging sessions, messages, and tool
|
|
5
|
+
* executions to a Turso database. All operations are fire-and-forget
|
|
6
|
+
* to avoid impacting agent performance.
|
|
7
|
+
*/
|
|
8
|
+
export class ConversationLogger {
|
|
9
|
+
client;
|
|
10
|
+
sessionId = null;
|
|
11
|
+
messageSequence = 0;
|
|
12
|
+
constructor(client) {
|
|
13
|
+
this.client = client;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Start a new logging session.
|
|
17
|
+
*/
|
|
18
|
+
async startSession(info) {
|
|
19
|
+
this.sessionId = info.id;
|
|
20
|
+
this.messageSequence = 0;
|
|
21
|
+
try {
|
|
22
|
+
await this.client.execute({
|
|
23
|
+
sql: `INSERT INTO sessions (id, agent_type, model, provider, metadata)
|
|
24
|
+
VALUES (?, ?, ?, ?, ?)`,
|
|
25
|
+
args: [
|
|
26
|
+
info.id,
|
|
27
|
+
info.agentType,
|
|
28
|
+
info.model,
|
|
29
|
+
info.provider || null,
|
|
30
|
+
info.metadata ? JSON.stringify(info.metadata) : null,
|
|
31
|
+
],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("[ConversationLogger] Failed to start session:", error);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Log a conversation message (user prompt or assistant response).
|
|
40
|
+
*/
|
|
41
|
+
async logMessage(role, content, options) {
|
|
42
|
+
if (!this.sessionId) {
|
|
43
|
+
console.error("[ConversationLogger] No active session");
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const id = crypto.randomUUID();
|
|
47
|
+
try {
|
|
48
|
+
await this.client.execute({
|
|
49
|
+
sql: `INSERT INTO messages (id, session_id, sequence, role, content, tool_name, tool_input, tool_output, token_count)
|
|
50
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
51
|
+
args: [
|
|
52
|
+
id,
|
|
53
|
+
this.sessionId,
|
|
54
|
+
++this.messageSequence,
|
|
55
|
+
role,
|
|
56
|
+
content,
|
|
57
|
+
options?.toolName || null,
|
|
58
|
+
options?.toolInput ? JSON.stringify(options.toolInput) : null,
|
|
59
|
+
options?.toolOutput ? JSON.stringify(options.toolOutput) : null,
|
|
60
|
+
options?.tokenCount || null,
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
return id;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error("[ConversationLogger] Failed to log message:", error);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Log a tool execution event.
|
|
72
|
+
*/
|
|
73
|
+
async logToolExecution(info) {
|
|
74
|
+
if (!this.sessionId) {
|
|
75
|
+
console.error("[ConversationLogger] No active session");
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const id = crypto.randomUUID();
|
|
79
|
+
const durationMs = info.startedAt && info.endedAt ? info.endedAt.getTime() - info.startedAt.getTime() : null;
|
|
80
|
+
try {
|
|
81
|
+
await this.client.execute({
|
|
82
|
+
sql: `INSERT INTO tool_executions (id, session_id, tool_name, status, input, output, error, started_at, ended_at, duration_ms)
|
|
83
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
84
|
+
args: [
|
|
85
|
+
id,
|
|
86
|
+
this.sessionId,
|
|
87
|
+
info.toolName,
|
|
88
|
+
info.status,
|
|
89
|
+
info.input ? JSON.stringify(info.input) : null,
|
|
90
|
+
info.output ? JSON.stringify(info.output) : null,
|
|
91
|
+
info.error || null,
|
|
92
|
+
info.startedAt?.toISOString() || new Date().toISOString(),
|
|
93
|
+
info.endedAt?.toISOString() || null,
|
|
94
|
+
durationMs,
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
return id;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error("[ConversationLogger] Failed to log tool execution:", error);
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* End the current session.
|
|
106
|
+
*/
|
|
107
|
+
async endSession(status, errorMessage) {
|
|
108
|
+
if (!this.sessionId) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
await this.client.execute({
|
|
113
|
+
sql: `UPDATE sessions SET status = ?, error_message = ?, ended_at = datetime('now')
|
|
114
|
+
WHERE id = ?`,
|
|
115
|
+
args: [status, errorMessage || null, this.sessionId],
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error("[ConversationLogger] Failed to end session:", error);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Sync local embedded replica to cloud.
|
|
124
|
+
* Should be called at the end of each session to persist data.
|
|
125
|
+
*/
|
|
126
|
+
async syncToCloud() {
|
|
127
|
+
try {
|
|
128
|
+
await this.client.sync();
|
|
129
|
+
console.error("[ConversationLogger] Synced session data to cloud");
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error("[ConversationLogger] Failed to sync to cloud:", error);
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the current session ID.
|
|
139
|
+
*/
|
|
140
|
+
getSessionId() {
|
|
141
|
+
return this.sessionId;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a conversation logger if Turso is configured.
|
|
146
|
+
* Returns null if logging is disabled.
|
|
147
|
+
*/
|
|
148
|
+
export async function createConversationLogger() {
|
|
149
|
+
// Import dynamically to avoid circular dependencies
|
|
150
|
+
const { getTursoClient, initializeSchema } = await import("./turso.js");
|
|
151
|
+
const client = await getTursoClient();
|
|
152
|
+
if (!client) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
// Ensure schema is initialized
|
|
156
|
+
await initializeSchema();
|
|
157
|
+
return new ConversationLogger(client);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=conversation-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-logger.js","sourceRoot":"","sources":["../../../src/lib/conversation-logger.ts"],"names":[],"mappings":"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"}
|