@sudocode-ai/types 0.1.3 → 0.1.4
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/dist/claude-to-ag-ui.d.ts +90 -0
- package/dist/claude-to-ag-ui.d.ts.map +1 -0
- package/dist/claude-to-ag-ui.js +153 -0
- package/dist/claude-to-ag-ui.js.map +1 -0
- package/dist/schema.d.ts +2 -2
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +3 -1
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
- package/src/index.d.ts +1 -4
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude to AG-UI Transformation Logic
|
|
3
|
+
*
|
|
4
|
+
* Shared transformation functions for converting raw Claude stream-json messages
|
|
5
|
+
* to AG-UI events. Used by both:
|
|
6
|
+
* - Backend: Real-time transformation for SSE streaming
|
|
7
|
+
* - Frontend: Historical transformation for log replay
|
|
8
|
+
*
|
|
9
|
+
* @module claude-to-ag-ui
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Claude stream-json message format
|
|
13
|
+
* Based on Claude Code CLI output structure
|
|
14
|
+
*/
|
|
15
|
+
export interface ClaudeStreamMessage {
|
|
16
|
+
type: "assistant" | "tool_result" | "result" | "error";
|
|
17
|
+
message?: {
|
|
18
|
+
id?: string;
|
|
19
|
+
model?: string;
|
|
20
|
+
role?: string;
|
|
21
|
+
content?: Array<{
|
|
22
|
+
type: "text" | "tool_use";
|
|
23
|
+
text?: string;
|
|
24
|
+
id?: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
input?: any;
|
|
27
|
+
}>;
|
|
28
|
+
stop_reason?: string;
|
|
29
|
+
stop_sequence?: string | null;
|
|
30
|
+
};
|
|
31
|
+
result?: {
|
|
32
|
+
tool_use_id?: string;
|
|
33
|
+
content?: Array<{
|
|
34
|
+
type: string;
|
|
35
|
+
text?: string;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
usage?: {
|
|
39
|
+
input_tokens?: number;
|
|
40
|
+
output_tokens?: number;
|
|
41
|
+
cache_read_input_tokens?: number;
|
|
42
|
+
cache_creation_input_tokens?: number;
|
|
43
|
+
};
|
|
44
|
+
error?: {
|
|
45
|
+
message: string;
|
|
46
|
+
type?: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* AG-UI Event types
|
|
51
|
+
* Minimal interface needed for transformation
|
|
52
|
+
*/
|
|
53
|
+
export interface AgUiEvent {
|
|
54
|
+
type: string;
|
|
55
|
+
timestamp: number;
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Transform a single Claude stream-json message to AG-UI events
|
|
60
|
+
*
|
|
61
|
+
* @param message - Raw Claude message from stream-json output
|
|
62
|
+
* @param startSequence - Starting sequence number for events
|
|
63
|
+
* @returns Array of AG-UI events (may be empty for unhandled message types)
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const message = JSON.parse(line);
|
|
68
|
+
* const events = transformClaudeMessageToAgUi(message, 0);
|
|
69
|
+
* events.forEach(event => console.log(event));
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function transformClaudeMessageToAgUi(message: ClaudeStreamMessage, startSequence: number): AgUiEvent[];
|
|
73
|
+
/**
|
|
74
|
+
* Parse array of raw execution logs (NDJSON format) to AG-UI events
|
|
75
|
+
*
|
|
76
|
+
* Processes each line as a separate Claude message and transforms to AG-UI events.
|
|
77
|
+
* Handles parse errors gracefully by logging warnings and continuing.
|
|
78
|
+
*
|
|
79
|
+
* @param rawLogs - Array of NDJSON log lines
|
|
80
|
+
* @returns Promise resolving to array of AG-UI events
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const logs = await fetch('/api/executions/123/logs').then(r => r.json());
|
|
85
|
+
* const events = await parseExecutionLogs(logs.logs);
|
|
86
|
+
* console.log(`Parsed ${events.length} events`);
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export declare function parseExecutionLogs(rawLogs: string[]): Promise<AgUiEvent[]>;
|
|
90
|
+
//# sourceMappingURL=claude-to-ag-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-to-ag-ui.d.ts","sourceRoot":"","sources":["../src/claude-to-ag-ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvD,OAAO,CAAC,EAAE;QACR,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;YAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,KAAK,CAAC,EAAE,GAAG,CAAC;SACb,CAAC,CAAC;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;IACF,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClD,CAAC;IACF,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,MAAM,GACpB,SAAS,EAAE,CAoGb;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,SAAS,EAAE,CAAC,CAiCtB"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude to AG-UI Transformation Logic
|
|
3
|
+
*
|
|
4
|
+
* Shared transformation functions for converting raw Claude stream-json messages
|
|
5
|
+
* to AG-UI events. Used by both:
|
|
6
|
+
* - Backend: Real-time transformation for SSE streaming
|
|
7
|
+
* - Frontend: Historical transformation for log replay
|
|
8
|
+
*
|
|
9
|
+
* @module claude-to-ag-ui
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Transform a single Claude stream-json message to AG-UI events
|
|
13
|
+
*
|
|
14
|
+
* @param message - Raw Claude message from stream-json output
|
|
15
|
+
* @param startSequence - Starting sequence number for events
|
|
16
|
+
* @returns Array of AG-UI events (may be empty for unhandled message types)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const message = JSON.parse(line);
|
|
21
|
+
* const events = transformClaudeMessageToAgUi(message, 0);
|
|
22
|
+
* events.forEach(event => console.log(event));
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function transformClaudeMessageToAgUi(message, startSequence) {
|
|
26
|
+
const events = [];
|
|
27
|
+
const timestamp = Date.now();
|
|
28
|
+
switch (message.type) {
|
|
29
|
+
case "assistant": {
|
|
30
|
+
// Extract content blocks from assistant message
|
|
31
|
+
const content = message.message?.content || [];
|
|
32
|
+
for (const block of content) {
|
|
33
|
+
if (block.type === "text" && block.text) {
|
|
34
|
+
// Text message → TEXT_MESSAGE_CONTENT event
|
|
35
|
+
events.push({
|
|
36
|
+
type: "CUSTOM",
|
|
37
|
+
timestamp,
|
|
38
|
+
name: "TEXT_MESSAGE_CONTENT",
|
|
39
|
+
value: {
|
|
40
|
+
content: block.text,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (block.type === "tool_use") {
|
|
45
|
+
// Tool use → TOOL_CALL_START + TOOL_CALL_ARGS events
|
|
46
|
+
const toolId = block.id || `tool-${Date.now()}`;
|
|
47
|
+
events.push({
|
|
48
|
+
type: "TOOL_CALL_START",
|
|
49
|
+
timestamp,
|
|
50
|
+
toolCallId: toolId,
|
|
51
|
+
toolCallName: block.name || "unknown",
|
|
52
|
+
}, {
|
|
53
|
+
type: "TOOL_CALL_ARGS",
|
|
54
|
+
timestamp,
|
|
55
|
+
toolCallId: toolId,
|
|
56
|
+
delta: JSON.stringify(block.input || {}),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "tool_result": {
|
|
63
|
+
// Tool result → TOOL_CALL_END + TOOL_CALL_RESULT events
|
|
64
|
+
const toolUseId = message.result?.tool_use_id || "unknown";
|
|
65
|
+
const resultContent = message.result?.content || [];
|
|
66
|
+
const resultText = resultContent.find((c) => c.type === "text")?.text || "";
|
|
67
|
+
events.push({
|
|
68
|
+
type: "TOOL_CALL_END",
|
|
69
|
+
timestamp,
|
|
70
|
+
toolCallId: toolUseId,
|
|
71
|
+
}, {
|
|
72
|
+
type: "TOOL_CALL_RESULT",
|
|
73
|
+
timestamp,
|
|
74
|
+
messageId: `msg-${toolUseId}`,
|
|
75
|
+
toolCallId: toolUseId,
|
|
76
|
+
content: resultText,
|
|
77
|
+
});
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "result": {
|
|
81
|
+
// Result message with usage → USAGE_UPDATE event
|
|
82
|
+
if (message.usage) {
|
|
83
|
+
const usage = message.usage;
|
|
84
|
+
events.push({
|
|
85
|
+
type: "CUSTOM",
|
|
86
|
+
timestamp,
|
|
87
|
+
name: "USAGE_UPDATE",
|
|
88
|
+
value: {
|
|
89
|
+
inputTokens: usage.input_tokens || 0,
|
|
90
|
+
outputTokens: usage.output_tokens || 0,
|
|
91
|
+
cacheTokens: usage.cache_read_input_tokens || 0,
|
|
92
|
+
totalTokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case "error": {
|
|
99
|
+
// Error message → RUN_ERROR event
|
|
100
|
+
events.push({
|
|
101
|
+
type: "RUN_ERROR",
|
|
102
|
+
timestamp,
|
|
103
|
+
message: message.error?.message || "Unknown error",
|
|
104
|
+
errorType: message.error?.type,
|
|
105
|
+
});
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return events;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Parse array of raw execution logs (NDJSON format) to AG-UI events
|
|
113
|
+
*
|
|
114
|
+
* Processes each line as a separate Claude message and transforms to AG-UI events.
|
|
115
|
+
* Handles parse errors gracefully by logging warnings and continuing.
|
|
116
|
+
*
|
|
117
|
+
* @param rawLogs - Array of NDJSON log lines
|
|
118
|
+
* @returns Promise resolving to array of AG-UI events
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const logs = await fetch('/api/executions/123/logs').then(r => r.json());
|
|
123
|
+
* const events = await parseExecutionLogs(logs.logs);
|
|
124
|
+
* console.log(`Parsed ${events.length} events`);
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export async function parseExecutionLogs(rawLogs) {
|
|
128
|
+
const events = [];
|
|
129
|
+
let sequence = 0;
|
|
130
|
+
for (let i = 0; i < rawLogs.length; i++) {
|
|
131
|
+
const line = rawLogs[i].trim();
|
|
132
|
+
// Skip empty lines
|
|
133
|
+
if (!line) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
// Parse JSON line
|
|
138
|
+
const message = JSON.parse(line);
|
|
139
|
+
// Transform to AG-UI events
|
|
140
|
+
const agUiEvents = transformClaudeMessageToAgUi(message, sequence);
|
|
141
|
+
// Accumulate events
|
|
142
|
+
events.push(...agUiEvents);
|
|
143
|
+
sequence += agUiEvents.length;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
// Log warning but continue processing
|
|
147
|
+
console.warn(`[parseExecutionLogs] Failed to parse log line ${i + 1}:`, error instanceof Error ? error.message : String(error));
|
|
148
|
+
// Don't throw - continue with remaining logs
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return events;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=claude-to-ag-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-to-ag-ui.js","sourceRoot":"","sources":["../src/claude-to-ag-ui.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare const EVENTS_TABLE = "\nCREATE TABLE IF NOT EXISTS events (\n
|
|
|
18
18
|
export declare const ISSUE_FEEDBACK_TABLE = "\nCREATE TABLE IF NOT EXISTS issue_feedback (\n id TEXT PRIMARY KEY,\n issue_id TEXT NOT NULL,\n issue_uuid TEXT NOT NULL,\n spec_id TEXT NOT NULL,\n spec_uuid TEXT NOT NULL,\n feedback_type TEXT NOT NULL CHECK(feedback_type IN ('comment', 'suggestion', 'request')),\n content TEXT NOT NULL,\n agent TEXT,\n anchor TEXT,\n dismissed INTEGER NOT NULL DEFAULT 0 CHECK(dismissed IN (0, 1)),\n created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE,\n FOREIGN KEY (issue_uuid) REFERENCES issues(uuid) ON DELETE CASCADE,\n FOREIGN KEY (spec_id) REFERENCES specs(id) ON DELETE CASCADE,\n FOREIGN KEY (spec_uuid) REFERENCES specs(uuid) ON DELETE CASCADE\n);\n";
|
|
19
19
|
export declare const EXECUTIONS_TABLE = "\nCREATE TABLE IF NOT EXISTS executions (\n id TEXT PRIMARY KEY,\n issue_id TEXT,\n issue_uuid TEXT,\n\n -- Execution mode and configuration\n mode TEXT CHECK(mode IN ('worktree', 'local')),\n prompt TEXT,\n config TEXT,\n\n -- Process information (legacy + new)\n agent_type TEXT CHECK(agent_type IN ('claude-code', 'codex')),\n session_id TEXT,\n workflow_execution_id TEXT,\n\n -- Git/branch information\n target_branch TEXT NOT NULL,\n branch_name TEXT NOT NULL,\n before_commit TEXT,\n after_commit TEXT,\n worktree_path TEXT,\n\n -- Status (unified - supports both old and new statuses)\n status TEXT NOT NULL CHECK(status IN (\n 'preparing', 'pending', 'running', 'paused',\n 'completed', 'failed', 'cancelled', 'stopped'\n )),\n\n -- Timing (consistent with other tables)\n created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n started_at DATETIME,\n completed_at DATETIME,\n cancelled_at DATETIME,\n\n -- Results and metadata\n exit_code INTEGER,\n error_message TEXT,\n error TEXT,\n model TEXT,\n summary TEXT,\n files_changed TEXT,\n\n -- Relationships\n parent_execution_id TEXT,\n\n -- Multi-step workflow support (future extension)\n step_type TEXT,\n step_index INTEGER,\n step_config TEXT,\n\n FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE SET NULL,\n FOREIGN KEY (issue_uuid) REFERENCES issues(uuid) ON DELETE SET NULL,\n FOREIGN KEY (parent_execution_id) REFERENCES executions(id) ON DELETE SET NULL\n);\n";
|
|
20
20
|
export declare const PROMPT_TEMPLATES_TABLE = "\nCREATE TABLE IF NOT EXISTS prompt_templates (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n description TEXT,\n type TEXT NOT NULL CHECK(type IN ('issue', 'spec', 'custom')),\n template TEXT NOT NULL,\n variables TEXT NOT NULL,\n is_default INTEGER NOT NULL DEFAULT 0 CHECK(is_default IN (0, 1)),\n created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n";
|
|
21
|
-
export declare const EXECUTION_LOGS_TABLE = "\nCREATE TABLE IF NOT EXISTS execution_logs (\n execution_id TEXT PRIMARY KEY,\n
|
|
21
|
+
export declare const EXECUTION_LOGS_TABLE = "\nCREATE TABLE IF NOT EXISTS execution_logs (\n execution_id TEXT PRIMARY KEY,\n raw_logs TEXT NOT NULL DEFAULT '',\n byte_size INTEGER NOT NULL DEFAULT 0,\n line_count INTEGER NOT NULL DEFAULT 0,\n created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (execution_id) REFERENCES executions(id) ON DELETE CASCADE\n);\n";
|
|
22
22
|
/**
|
|
23
23
|
* Index definitions
|
|
24
24
|
*/
|
|
@@ -30,7 +30,7 @@ export declare const EVENTS_INDEXES = "\nCREATE INDEX IF NOT EXISTS idx_events_e
|
|
|
30
30
|
export declare const ISSUE_FEEDBACK_INDEXES = "\nCREATE INDEX IF NOT EXISTS idx_feedback_issue_id ON issue_feedback(issue_id);\nCREATE INDEX IF NOT EXISTS idx_feedback_issue_uuid ON issue_feedback(issue_uuid);\nCREATE INDEX IF NOT EXISTS idx_feedback_spec_id ON issue_feedback(spec_id);\nCREATE INDEX IF NOT EXISTS idx_feedback_spec_uuid ON issue_feedback(spec_uuid);\nCREATE INDEX IF NOT EXISTS idx_feedback_dismissed ON issue_feedback(dismissed);\nCREATE INDEX IF NOT EXISTS idx_feedback_type ON issue_feedback(feedback_type);\nCREATE INDEX IF NOT EXISTS idx_feedback_created_at ON issue_feedback(created_at);\n";
|
|
31
31
|
export declare const EXECUTIONS_INDEXES = "\nCREATE INDEX IF NOT EXISTS idx_executions_issue_id ON executions(issue_id);\nCREATE INDEX IF NOT EXISTS idx_executions_issue_uuid ON executions(issue_uuid);\nCREATE INDEX IF NOT EXISTS idx_executions_status ON executions(status);\nCREATE INDEX IF NOT EXISTS idx_executions_session_id ON executions(session_id);\nCREATE INDEX IF NOT EXISTS idx_executions_parent ON executions(parent_execution_id);\nCREATE INDEX IF NOT EXISTS idx_executions_created_at ON executions(created_at);\nCREATE INDEX IF NOT EXISTS idx_executions_workflow ON executions(workflow_execution_id);\nCREATE INDEX IF NOT EXISTS idx_executions_workflow_step ON executions(workflow_execution_id, step_index);\nCREATE INDEX IF NOT EXISTS idx_executions_step_type ON executions(step_type);\n";
|
|
32
32
|
export declare const PROMPT_TEMPLATES_INDEXES = "\nCREATE INDEX IF NOT EXISTS idx_templates_type ON prompt_templates(type);\nCREATE INDEX IF NOT EXISTS idx_templates_default ON prompt_templates(is_default);\n";
|
|
33
|
-
export declare const EXECUTION_LOGS_INDEXES = "\nCREATE INDEX IF NOT EXISTS idx_execution_logs_updated_at ON execution_logs(updated_at);\nCREATE INDEX IF NOT EXISTS idx_execution_logs_byte_size ON execution_logs(byte_size);\n";
|
|
33
|
+
export declare const EXECUTION_LOGS_INDEXES = "\nCREATE INDEX IF NOT EXISTS idx_execution_logs_updated_at ON execution_logs(updated_at);\nCREATE INDEX IF NOT EXISTS idx_execution_logs_byte_size ON execution_logs(byte_size);\nCREATE INDEX IF NOT EXISTS idx_execution_logs_line_count ON execution_logs(line_count);\n";
|
|
34
34
|
/**
|
|
35
35
|
* View definitions
|
|
36
36
|
*/
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,SAAS,uSAarB,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,WAAW,ysBAiBvB,CAAC;AAEF,eAAO,MAAM,YAAY,qwBAmBxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,iaAa/B,CAAC;AAEF,eAAO,MAAM,UAAU,mNAQtB,CAAC;AAEF,eAAO,MAAM,YAAY,uZAexB,CAAC;AAEF,eAAO,MAAM,oBAAoB,6zBAmBhC,CAAC;AAEF,eAAO,MAAM,gBAAgB,wmDAwD5B,CAAC;AAGF,eAAO,MAAM,sBAAsB,ocAYlC,CAAC;AAIF,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,SAAS,uSAarB,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,WAAW,ysBAiBvB,CAAC;AAEF,eAAO,MAAM,YAAY,qwBAmBxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,iaAa/B,CAAC;AAEF,eAAO,MAAM,UAAU,mNAQtB,CAAC;AAEF,eAAO,MAAM,YAAY,uZAexB,CAAC;AAEF,eAAO,MAAM,oBAAoB,6zBAmBhC,CAAC;AAEF,eAAO,MAAM,gBAAgB,wmDAwD5B,CAAC;AAGF,eAAO,MAAM,sBAAsB,ocAYlC,CAAC;AAIF,eAAO,MAAM,oBAAoB,iaAUhC,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,aAAa,oeAQzB,CAAC;AAEF,eAAO,MAAM,cAAc,+rBAW1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,seAOjC,CAAC;AAEF,eAAO,MAAM,YAAY,kOAIxB,CAAC;AAEF,eAAO,MAAM,cAAc,2cAO1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,2jBAQlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,0vBAU9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,oKAGpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gRAIlC,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,iBAAiB,yaAc7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,kfAc/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,UAUtB,CAAC;AAEF,eAAO,MAAM,WAAW,UAUvB,CAAC;AAEF,eAAO,MAAM,SAAS,UAA2C,CAAC"}
|
package/dist/schema.js
CHANGED
|
@@ -196,8 +196,9 @@ CREATE TABLE IF NOT EXISTS prompt_templates (
|
|
|
196
196
|
export const EXECUTION_LOGS_TABLE = `
|
|
197
197
|
CREATE TABLE IF NOT EXISTS execution_logs (
|
|
198
198
|
execution_id TEXT PRIMARY KEY,
|
|
199
|
-
|
|
199
|
+
raw_logs TEXT NOT NULL DEFAULT '',
|
|
200
200
|
byte_size INTEGER NOT NULL DEFAULT 0,
|
|
201
|
+
line_count INTEGER NOT NULL DEFAULT 0,
|
|
201
202
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
202
203
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
203
204
|
FOREIGN KEY (execution_id) REFERENCES executions(id) ON DELETE CASCADE
|
|
@@ -275,6 +276,7 @@ CREATE INDEX IF NOT EXISTS idx_templates_default ON prompt_templates(is_default)
|
|
|
275
276
|
export const EXECUTION_LOGS_INDEXES = `
|
|
276
277
|
CREATE INDEX IF NOT EXISTS idx_execution_logs_updated_at ON execution_logs(updated_at);
|
|
277
278
|
CREATE INDEX IF NOT EXISTS idx_execution_logs_byte_size ON execution_logs(byte_size);
|
|
279
|
+
CREATE INDEX IF NOT EXISTS idx_execution_logs_line_count ON execution_logs(line_count);
|
|
278
280
|
`;
|
|
279
281
|
/**
|
|
280
282
|
* View definitions
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;CAaxB,CAAC;AAEF;;GAEG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiB1B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;CAmB3B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;CAalC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;CAQzB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;CAe3B,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD/B,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;CAYrC,CAAC;AAEF,0DAA0D;AAC1D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;CAaxB,CAAC;AAEF;;GAEG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;CAiB1B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;CAmB3B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;CAalC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;CAQzB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;CAe3B,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD/B,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;CAYrC,CAAC;AAEF,0DAA0D;AAC1D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;CAUnC,CAAC;AAEF;;GAEG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;CAQ5B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;CAW7B,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;CAOpC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;CAI3B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;CAO7B,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;CAQrC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;CAUjC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;CAGvC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;CAIrC,CAAC;AAEF;;GAEG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;CAchC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;CAclC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,UAAU;IACV,YAAY;IACZ,oBAAoB;IACpB,gBAAgB;IAChB,sBAAsB;IACtB,oBAAoB;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa;IACb,cAAc;IACd,qBAAqB;IACrB,YAAY;IACZ,cAAc;IACd,sBAAsB;IACtB,kBAAkB;IAClB,wBAAwB;IACxB,sBAAsB;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -198,11 +198,8 @@ export interface WorktreeConfig {
|
|
|
198
198
|
* Config metadata file structure (.sudocode/config.json)
|
|
199
199
|
*/
|
|
200
200
|
export interface Config {
|
|
201
|
+
// TODO: Deprecate version field.
|
|
201
202
|
version: string;
|
|
202
|
-
id_prefix: {
|
|
203
|
-
spec: string;
|
|
204
|
-
issue: string;
|
|
205
|
-
};
|
|
206
203
|
/** Worktree configuration (optional) */
|
|
207
204
|
worktree?: WorktreeConfig;
|
|
208
205
|
}
|