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.
Files changed (130) hide show
  1. package/README.md +711 -0
  2. package/dist/agents/linear-agent.d.ts +32 -0
  3. package/dist/agents/linear-agent.d.ts.map +1 -0
  4. package/dist/agents/linear-agent.js +263 -0
  5. package/dist/agents/linear-agent.js.map +1 -0
  6. package/dist/agents/planning-agent.d.ts +36 -0
  7. package/dist/agents/planning-agent.d.ts.map +1 -0
  8. package/dist/agents/planning-agent.js +248 -0
  9. package/dist/agents/planning-agent.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +102 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli/install.d.ts +11 -0
  15. package/dist/cli/install.d.ts.map +1 -0
  16. package/dist/cli/install.js +257 -0
  17. package/dist/cli/install.js.map +1 -0
  18. package/dist/cli/manifest.d.ts +27 -0
  19. package/dist/cli/manifest.d.ts.map +1 -0
  20. package/dist/cli/manifest.js +65 -0
  21. package/dist/cli/manifest.js.map +1 -0
  22. package/dist/index.d.ts +17 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +17 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lib/claude-agent-sdk.d.ts +73 -0
  27. package/dist/lib/claude-agent-sdk.d.ts.map +1 -0
  28. package/dist/lib/claude-agent-sdk.js +114 -0
  29. package/dist/lib/claude-agent-sdk.js.map +1 -0
  30. package/dist/lib/conversation-logger.d.ts +66 -0
  31. package/dist/lib/conversation-logger.d.ts.map +1 -0
  32. package/dist/lib/conversation-logger.js +159 -0
  33. package/dist/lib/conversation-logger.js.map +1 -0
  34. package/dist/lib/opencode.d.ts +68 -0
  35. package/dist/lib/opencode.d.ts.map +1 -0
  36. package/dist/lib/opencode.js +151 -0
  37. package/dist/lib/opencode.js.map +1 -0
  38. package/dist/lib/turso-schema.d.ts +13 -0
  39. package/dist/lib/turso-schema.d.ts.map +1 -0
  40. package/dist/lib/turso-schema.js +69 -0
  41. package/dist/lib/turso-schema.js.map +1 -0
  42. package/dist/lib/turso.d.ts +56 -0
  43. package/dist/lib/turso.d.ts.map +1 -0
  44. package/dist/lib/turso.js +144 -0
  45. package/dist/lib/turso.js.map +1 -0
  46. package/dist/lib/types.d.ts +31 -0
  47. package/dist/lib/types.d.ts.map +1 -0
  48. package/dist/lib/types.js +20 -0
  49. package/dist/lib/types.js.map +1 -0
  50. package/dist/lib/utils.d.ts +34 -0
  51. package/dist/lib/utils.d.ts.map +1 -0
  52. package/dist/lib/utils.js +72 -0
  53. package/dist/lib/utils.js.map +1 -0
  54. package/dist/scripts/build-templates.d.ts +17 -0
  55. package/dist/scripts/build-templates.d.ts.map +1 -0
  56. package/dist/scripts/build-templates.js +132 -0
  57. package/dist/scripts/build-templates.js.map +1 -0
  58. package/dist/scripts/claude-agent-runner.d.ts +28 -0
  59. package/dist/scripts/claude-agent-runner.d.ts.map +1 -0
  60. package/dist/scripts/claude-agent-runner.js +278 -0
  61. package/dist/scripts/claude-agent-runner.js.map +1 -0
  62. package/dist/src/agents/linear-agent.d.ts +32 -0
  63. package/dist/src/agents/linear-agent.d.ts.map +1 -0
  64. package/dist/src/agents/linear-agent.js +285 -0
  65. package/dist/src/agents/linear-agent.js.map +1 -0
  66. package/dist/src/agents/planning-agent.d.ts +36 -0
  67. package/dist/src/agents/planning-agent.d.ts.map +1 -0
  68. package/dist/src/agents/planning-agent.js +248 -0
  69. package/dist/src/agents/planning-agent.js.map +1 -0
  70. package/dist/src/cli/index.d.ts +3 -0
  71. package/dist/src/cli/index.d.ts.map +1 -0
  72. package/dist/src/cli/index.js +102 -0
  73. package/dist/src/cli/index.js.map +1 -0
  74. package/dist/src/cli/install.d.ts +11 -0
  75. package/dist/src/cli/install.d.ts.map +1 -0
  76. package/dist/src/cli/install.js +257 -0
  77. package/dist/src/cli/install.js.map +1 -0
  78. package/dist/src/cli/manifest.d.ts +27 -0
  79. package/dist/src/cli/manifest.d.ts.map +1 -0
  80. package/dist/src/cli/manifest.js +65 -0
  81. package/dist/src/cli/manifest.js.map +1 -0
  82. package/dist/src/index.d.ts +17 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/dist/src/index.js +17 -0
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/lib/claude-agent-sdk.d.ts +73 -0
  87. package/dist/src/lib/claude-agent-sdk.d.ts.map +1 -0
  88. package/dist/src/lib/claude-agent-sdk.js +114 -0
  89. package/dist/src/lib/claude-agent-sdk.js.map +1 -0
  90. package/dist/src/lib/conversation-logger.d.ts +66 -0
  91. package/dist/src/lib/conversation-logger.d.ts.map +1 -0
  92. package/dist/src/lib/conversation-logger.js +159 -0
  93. package/dist/src/lib/conversation-logger.js.map +1 -0
  94. package/dist/src/lib/opencode.d.ts +153 -0
  95. package/dist/src/lib/opencode.d.ts.map +1 -0
  96. package/dist/src/lib/opencode.js +153 -0
  97. package/dist/src/lib/opencode.js.map +1 -0
  98. package/dist/src/lib/turso-schema.d.ts +13 -0
  99. package/dist/src/lib/turso-schema.d.ts.map +1 -0
  100. package/dist/src/lib/turso-schema.js +69 -0
  101. package/dist/src/lib/turso-schema.js.map +1 -0
  102. package/dist/src/lib/turso.d.ts +56 -0
  103. package/dist/src/lib/turso.d.ts.map +1 -0
  104. package/dist/src/lib/turso.js +144 -0
  105. package/dist/src/lib/turso.js.map +1 -0
  106. package/dist/src/lib/types.d.ts +31 -0
  107. package/dist/src/lib/types.d.ts.map +1 -0
  108. package/dist/src/lib/types.js +20 -0
  109. package/dist/src/lib/types.js.map +1 -0
  110. package/dist/src/lib/utils.d.ts +34 -0
  111. package/dist/src/lib/utils.d.ts.map +1 -0
  112. package/dist/src/lib/utils.js +72 -0
  113. package/dist/src/lib/utils.js.map +1 -0
  114. package/package.json +63 -0
  115. package/templates/.env.example +51 -0
  116. package/templates/agents/codebase-analyzer.md +121 -0
  117. package/templates/agents/codebase-locator.md +105 -0
  118. package/templates/agents/coding-agent.md +187 -0
  119. package/templates/agents/debug-agent.md +300 -0
  120. package/templates/prompts/consolidate-and-create-linear.md +282 -0
  121. package/templates/prompts/implementation.md +94 -0
  122. package/templates/prompts/plan-generation.md +171 -0
  123. package/templates/prompts/review.md +39 -0
  124. package/templates/prompts/verify.md +80 -0
  125. package/templates/scripts/claude-agent-runner.js +12887 -0
  126. package/templates/scripts/detect-runtime.sh +95 -0
  127. package/templates/scripts/linear-agent.js +1753 -0
  128. package/templates/scripts/planning-agent.js +1738 -0
  129. package/templates/workflows/claude-implement.yml +931 -0
  130. 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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"}