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,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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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * OpenCode SDK helpers for server setup and event monitoring.
3
+ */
4
+ import type { ConversationLogger } from "./conversation-logger.js";
5
+ import type { Provider } from "./types.js";
6
+ /**
7
+ * OpenCode client interface for event monitoring
8
+ */
9
+ export interface OpencodeClient {
10
+ event: {
11
+ subscribe(): Promise<{
12
+ stream: AsyncIterable<{
13
+ type: string;
14
+ properties: Record<string, unknown>;
15
+ }>;
16
+ }>;
17
+ };
18
+ }
19
+ /**
20
+ * Options for creating an OpenCode server
21
+ */
22
+ export interface OpencodeServerOptions {
23
+ provider: Provider;
24
+ apiKey: string;
25
+ model: string;
26
+ agentName: string;
27
+ agentDescription: string;
28
+ agentPrompt: string;
29
+ agentTools?: {
30
+ write?: boolean;
31
+ edit?: boolean;
32
+ bash?: boolean;
33
+ read?: boolean;
34
+ list?: boolean;
35
+ glob?: boolean;
36
+ grep?: boolean;
37
+ webfetch?: boolean;
38
+ [key: string]: boolean | undefined;
39
+ };
40
+ agentPermissions?: {
41
+ edit?: string;
42
+ bash?: string;
43
+ webfetch?: string;
44
+ [key: string]: string | undefined;
45
+ };
46
+ maxSteps?: number;
47
+ linearApiKey?: string;
48
+ }
49
+ /**
50
+ * Create and configure an OpenCode server instance
51
+ *
52
+ * @param options - Configuration options for the OpenCode server
53
+ * @returns OpenCode client and server instances
54
+ */
55
+ export declare function createOpencodeServer(options: OpencodeServerOptions): Promise<{
56
+ client: OpencodeClient;
57
+ server: {
58
+ url: string;
59
+ };
60
+ }>;
61
+ /**
62
+ * Setup event monitoring for an OpenCode session
63
+ *
64
+ * @param client - OpenCode client instance
65
+ * @param logger - Optional conversation logger for storing tool executions
66
+ */
67
+ export declare function setupEventMonitoring(client: OpencodeClient, logger?: ConversationLogger | null): void;
68
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/lib/opencode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE;QACL,SAAS,IAAI,OAAO,CAAC;YACnB,MAAM,EAAE,aAAa,CAAC;gBACpB,IAAI,EAAE,MAAM,CAAC;gBACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aACrC,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KACpC,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CA0D9D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACjC,IAAI,CA6FN"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * OpenCode SDK helpers for server setup and event monitoring.
3
+ */
4
+ import { createOpencode } from "@opencode-ai/sdk";
5
+ /**
6
+ * Create and configure an OpenCode server instance
7
+ *
8
+ * @param options - Configuration options for the OpenCode server
9
+ * @returns OpenCode client and server instances
10
+ */
11
+ export async function createOpencodeServer(options) {
12
+ const { provider, apiKey, model, agentName, agentDescription, agentPrompt, agentTools = {}, agentPermissions = {}, maxSteps = 30, linearApiKey, } = options;
13
+ // Build OpenCode configuration
14
+ const opcodeConfig = {
15
+ provider: {
16
+ [provider]: {
17
+ options: {
18
+ apiKey,
19
+ timeout: false, // Disable timeout
20
+ },
21
+ },
22
+ },
23
+ ...(linearApiKey && {
24
+ mcp: {
25
+ linear: {
26
+ type: "remote",
27
+ url: "https://mcp.linear.app/mcp",
28
+ headers: {
29
+ Authorization: `Bearer ${linearApiKey}`,
30
+ },
31
+ },
32
+ },
33
+ }),
34
+ agent: {
35
+ [agentName]: {
36
+ description: agentDescription,
37
+ mode: "subagent",
38
+ model,
39
+ prompt: agentPrompt,
40
+ tools: agentTools,
41
+ maxSteps,
42
+ permission: agentPermissions,
43
+ },
44
+ },
45
+ };
46
+ console.error("Starting OpenCode server...");
47
+ const { client, server } = await createOpencode({
48
+ hostname: "127.0.0.1",
49
+ port: 0, // Auto-assign port
50
+ config: opcodeConfig,
51
+ });
52
+ console.error(`✓ OpenCode server started at ${server.url}`);
53
+ return { client: client, server };
54
+ }
55
+ /**
56
+ * Setup event monitoring for an OpenCode session
57
+ *
58
+ * @param client - OpenCode client instance
59
+ * @param logger - Optional conversation logger for storing tool executions
60
+ */
61
+ export function setupEventMonitoring(client, logger) {
62
+ console.error("Setting up event monitoring...");
63
+ (async () => {
64
+ try {
65
+ const events = await client.event.subscribe();
66
+ for await (const event of events.stream) {
67
+ // Monitor tool execution
68
+ if (event.type === "message.part.updated") {
69
+ const part = event.properties.part;
70
+ if (part.type === "tool") {
71
+ const status = part.state.status;
72
+ const toolName = part.tool;
73
+ if (status === "running") {
74
+ const input = JSON.stringify(part.state.input || {}, null, 2);
75
+ console.error(`\n[TOOL] ${toolName} - RUNNING`);
76
+ console.error(` Input: ${input}`);
77
+ // Log to database if logger is available
78
+ if (logger) {
79
+ logger.logToolExecution({
80
+ toolName,
81
+ status: "running",
82
+ input: part.state.input,
83
+ startedAt: new Date(),
84
+ });
85
+ }
86
+ }
87
+ else if (status === "completed") {
88
+ const output = part.state.output?.slice(0, 200) || "(no output)";
89
+ const duration = part.state.time?.end && part.state.time?.start
90
+ ? `${((part.state.time.end - part.state.time.start) / 1000).toFixed(2)}s`
91
+ : "unknown";
92
+ console.error(`\n[TOOL] ${toolName} - COMPLETED (${duration})`);
93
+ console.error(` Output preview: ${output}${part.state.output && part.state.output.length > 200 ? "..." : ""}`);
94
+ // Log to database if logger is available
95
+ if (logger) {
96
+ logger.logToolExecution({
97
+ toolName,
98
+ status: "completed",
99
+ input: part.state.input,
100
+ output: part.state.output,
101
+ startedAt: part.state.time?.start ? new Date(part.state.time.start) : undefined,
102
+ endedAt: part.state.time?.end ? new Date(part.state.time.end) : undefined,
103
+ });
104
+ }
105
+ }
106
+ else if (status === "error") {
107
+ console.error(`\n[TOOL] ${toolName} - ERROR`);
108
+ console.error(` Error: ${part.state.error}`);
109
+ // Log to database if logger is available
110
+ if (logger) {
111
+ logger.logToolExecution({
112
+ toolName,
113
+ status: "error",
114
+ input: part.state.input,
115
+ error: part.state.error,
116
+ });
117
+ }
118
+ }
119
+ }
120
+ }
121
+ // Monitor session status
122
+ if (event.type === "session.status") {
123
+ const status = event.properties.status;
124
+ if (String(status) === "idle") {
125
+ console.error(`\n[STATUS] Session idle`);
126
+ }
127
+ else if (String(status) === "busy") {
128
+ console.error(`\n[STATUS] Session busy (processing)`);
129
+ }
130
+ else if (typeof status === "object" && "attempt" in status) {
131
+ // Retry status
132
+ console.error(`\n[STATUS] Session retrying (attempt ${status.attempt})`);
133
+ if ("message" in status)
134
+ console.error(` Reason: ${status.message}`);
135
+ if ("next" in status)
136
+ console.error(` Next retry in: ${status.next}ms`);
137
+ }
138
+ }
139
+ // Monitor session errors
140
+ if (event.type === "session.error") {
141
+ const error = event.properties.error;
142
+ console.error(`\n[ERROR] Session error:`, error);
143
+ }
144
+ }
145
+ }
146
+ catch (err) {
147
+ console.error("Event monitoring subscription error:", err);
148
+ }
149
+ })();
150
+ }
151
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/lib/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Turso database schema definitions and migration logic.
3
+ *
4
+ * This module defines the database schema for conversation logging
5
+ * and provides idempotent migration functions.
6
+ */
7
+ export declare const SCHEMA_VERSION = 1;
8
+ /**
9
+ * SQL statements for creating the conversation logging schema.
10
+ * All statements use IF NOT EXISTS for idempotent execution.
11
+ */
12
+ export declare const SCHEMA_STATEMENTS: string[];
13
+ //# sourceMappingURL=turso-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-schema.d.ts","sourceRoot":"","sources":["../../src/lib/turso-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,UA4D7B,CAAC"}