@sudocode-ai/types 0.1.14 → 0.1.15
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/crdt.d.ts +117 -0
- package/dist/crdt.d.ts.map +1 -0
- package/dist/crdt.js +8 -0
- package/dist/crdt.js.map +1 -0
- package/dist/history.d.ts +72 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +7 -0
- package/dist/history.js.map +1 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +117 -0
- package/dist/migrations.js.map +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +3 -5
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
- package/src/index.d.ts +21 -3
- package/src/integrations.d.ts +109 -1
|
@@ -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/crdt.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRDT Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Shared type definitions for CRDT state synchronization between
|
|
5
|
+
* the coordinator and agents.
|
|
6
|
+
*/
|
|
7
|
+
import { IssueStatus } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Issue state in CRDT
|
|
10
|
+
*/
|
|
11
|
+
export interface IssueState {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
content: string;
|
|
15
|
+
status: IssueStatus;
|
|
16
|
+
priority: number;
|
|
17
|
+
parent?: string;
|
|
18
|
+
archived: boolean;
|
|
19
|
+
createdAt: number;
|
|
20
|
+
updatedAt: number;
|
|
21
|
+
lastModifiedBy: string;
|
|
22
|
+
version: number;
|
|
23
|
+
tempStatus?: string;
|
|
24
|
+
tempProgress?: {
|
|
25
|
+
current: number;
|
|
26
|
+
total: number;
|
|
27
|
+
message?: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Spec state in CRDT
|
|
32
|
+
*/
|
|
33
|
+
export interface SpecState {
|
|
34
|
+
id: string;
|
|
35
|
+
title: string;
|
|
36
|
+
content: string;
|
|
37
|
+
priority: number;
|
|
38
|
+
parent?: string;
|
|
39
|
+
createdAt: number;
|
|
40
|
+
updatedAt: number;
|
|
41
|
+
lastModifiedBy: string;
|
|
42
|
+
version: number;
|
|
43
|
+
tempSections?: Record<string, string>;
|
|
44
|
+
tempDiff?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Execution state in CRDT
|
|
48
|
+
*/
|
|
49
|
+
export interface ExecutionState {
|
|
50
|
+
id: string;
|
|
51
|
+
issueId?: string;
|
|
52
|
+
specId?: string;
|
|
53
|
+
status: 'preparing' | 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
|
|
54
|
+
phase?: string;
|
|
55
|
+
progress?: {
|
|
56
|
+
current: number;
|
|
57
|
+
total: number;
|
|
58
|
+
message?: string;
|
|
59
|
+
};
|
|
60
|
+
startedAt: number;
|
|
61
|
+
updatedAt: number;
|
|
62
|
+
completedAt?: number;
|
|
63
|
+
agentId: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Agent metadata in CRDT
|
|
67
|
+
*/
|
|
68
|
+
export interface AgentMetadata {
|
|
69
|
+
id: string;
|
|
70
|
+
executionId?: string;
|
|
71
|
+
status: 'initializing' | 'idle' | 'working' | 'disconnected';
|
|
72
|
+
lastHeartbeat: number;
|
|
73
|
+
connectedAt: number;
|
|
74
|
+
disconnectedAt?: number;
|
|
75
|
+
worktreePath?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Feedback state in CRDT
|
|
79
|
+
*/
|
|
80
|
+
export interface FeedbackState {
|
|
81
|
+
id: string;
|
|
82
|
+
specId: string;
|
|
83
|
+
issueId: string;
|
|
84
|
+
type: 'comment' | 'suggestion' | 'request';
|
|
85
|
+
content: string;
|
|
86
|
+
anchorLine?: number;
|
|
87
|
+
anchorText?: string;
|
|
88
|
+
createdAt: number;
|
|
89
|
+
updatedAt: number;
|
|
90
|
+
lastModifiedBy: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* CRDT Agent configuration
|
|
94
|
+
*/
|
|
95
|
+
export interface CRDTAgentConfig {
|
|
96
|
+
agentId: string;
|
|
97
|
+
coordinatorUrl?: string;
|
|
98
|
+
coordinatorHost?: string;
|
|
99
|
+
coordinatorPort?: number;
|
|
100
|
+
heartbeatInterval?: number;
|
|
101
|
+
maxReconnectAttempts?: number;
|
|
102
|
+
reconnectBaseDelay?: number;
|
|
103
|
+
reconnectMaxDelay?: number;
|
|
104
|
+
connectionTimeout?: number;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* CRDT Coordinator configuration
|
|
108
|
+
*/
|
|
109
|
+
export interface CRDTCoordinatorConfig {
|
|
110
|
+
port?: number;
|
|
111
|
+
host?: string;
|
|
112
|
+
persistInterval?: number;
|
|
113
|
+
gcInterval?: number;
|
|
114
|
+
executionTTL?: number;
|
|
115
|
+
agentTTL?: number;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=crdt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crdt.d.ts","sourceRoot":"","sources":["../src/crdt.ts"],"names":[],"mappings":"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"}
|
package/dist/crdt.js
ADDED
package/dist/crdt.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crdt.js","sourceRoot":"","sources":["../src/crdt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRDT History Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Types for in-memory CRDT update history tracking.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Record of a single CRDT update with metadata
|
|
8
|
+
*/
|
|
9
|
+
export interface CRDTUpdateRecord {
|
|
10
|
+
id: string;
|
|
11
|
+
entityType: 'issue' | 'spec' | 'feedback';
|
|
12
|
+
entityId: string;
|
|
13
|
+
updateData: Uint8Array;
|
|
14
|
+
clientId: string;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
contentSnapshot?: {
|
|
17
|
+
title: string;
|
|
18
|
+
content: string;
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* In-memory history storage structure
|
|
24
|
+
*/
|
|
25
|
+
export interface UpdateHistory {
|
|
26
|
+
updates: CRDTUpdateRecord[];
|
|
27
|
+
entityIndex: Map<string, number[]>;
|
|
28
|
+
clientIndex: Map<string, number[]>;
|
|
29
|
+
oldestTimestamp: number;
|
|
30
|
+
newestTimestamp: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Metadata about the history state
|
|
34
|
+
*/
|
|
35
|
+
export interface HistoryMetadata {
|
|
36
|
+
oldestTimestamp: number;
|
|
37
|
+
newestTimestamp: number;
|
|
38
|
+
totalUpdates: number;
|
|
39
|
+
retentionWindowMs: number;
|
|
40
|
+
entitiesTracked: number;
|
|
41
|
+
memoryUsageMB: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Document version at a specific timestamp
|
|
45
|
+
*/
|
|
46
|
+
export interface VersionInfo {
|
|
47
|
+
timestamp: number;
|
|
48
|
+
title: string;
|
|
49
|
+
content: string;
|
|
50
|
+
lastModifiedBy: string;
|
|
51
|
+
[key: string]: any;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Diff chunk between two versions
|
|
55
|
+
*/
|
|
56
|
+
export interface DiffChunk {
|
|
57
|
+
type: 'added' | 'removed' | 'unchanged';
|
|
58
|
+
value: string;
|
|
59
|
+
count: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Line-by-line blame/attribution information
|
|
63
|
+
*/
|
|
64
|
+
export interface BlameInfo {
|
|
65
|
+
lines: Array<{
|
|
66
|
+
lineNumber: number;
|
|
67
|
+
author: string;
|
|
68
|
+
timestamp: number;
|
|
69
|
+
line: string;
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,KAAK,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/migrations.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;CACxC;
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;CACxC;AAsmBD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAaxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,SAAS,GACnB,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAwBzD"}
|
package/dist/migrations.js
CHANGED
|
@@ -386,6 +386,123 @@ const MIGRATIONS = [
|
|
|
386
386
|
console.log(" Note: external_links column cannot be removed (SQLite limitation)");
|
|
387
387
|
},
|
|
388
388
|
},
|
|
389
|
+
{
|
|
390
|
+
version: 5,
|
|
391
|
+
name: "make-feedback-from-id-nullable",
|
|
392
|
+
up: (db) => {
|
|
393
|
+
// Check if issue_feedback table exists
|
|
394
|
+
const tables = db
|
|
395
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='issue_feedback'")
|
|
396
|
+
.all();
|
|
397
|
+
if (tables.length === 0) {
|
|
398
|
+
// Table doesn't exist yet, will be created with new schema
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
// Check if from_id is already nullable (already migrated)
|
|
402
|
+
const tableInfo = db.pragma("table_info(issue_feedback)");
|
|
403
|
+
const fromIdColumn = tableInfo.find((col) => col.name === "from_id");
|
|
404
|
+
if (fromIdColumn && fromIdColumn.notnull === 0) {
|
|
405
|
+
// Already migrated (from_id is nullable)
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
// SQLite doesn't support ALTER COLUMN or DROP CONSTRAINT
|
|
409
|
+
// We need to recreate the table to make from_id/from_uuid nullable
|
|
410
|
+
db.exec(`PRAGMA foreign_keys = OFF;`);
|
|
411
|
+
// Create new table with nullable from_id/from_uuid and no FK constraints
|
|
412
|
+
db.exec(`
|
|
413
|
+
CREATE TABLE IF NOT EXISTS issue_feedback_new (
|
|
414
|
+
id TEXT PRIMARY KEY,
|
|
415
|
+
from_id TEXT,
|
|
416
|
+
from_uuid TEXT,
|
|
417
|
+
to_id TEXT NOT NULL,
|
|
418
|
+
to_uuid TEXT NOT NULL,
|
|
419
|
+
feedback_type TEXT NOT NULL CHECK(feedback_type IN ('comment', 'suggestion', 'request')),
|
|
420
|
+
content TEXT NOT NULL,
|
|
421
|
+
agent TEXT,
|
|
422
|
+
anchor TEXT,
|
|
423
|
+
dismissed INTEGER NOT NULL DEFAULT 0 CHECK(dismissed IN (0, 1)),
|
|
424
|
+
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
425
|
+
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
426
|
+
);
|
|
427
|
+
`);
|
|
428
|
+
// Copy data from old table
|
|
429
|
+
db.exec(`
|
|
430
|
+
INSERT INTO issue_feedback_new (
|
|
431
|
+
id, from_id, from_uuid, to_id, to_uuid, feedback_type,
|
|
432
|
+
content, agent, anchor, dismissed, created_at, updated_at
|
|
433
|
+
)
|
|
434
|
+
SELECT
|
|
435
|
+
id, from_id, from_uuid, to_id, to_uuid, feedback_type,
|
|
436
|
+
content, agent, anchor, dismissed, created_at, updated_at
|
|
437
|
+
FROM issue_feedback;
|
|
438
|
+
`);
|
|
439
|
+
// Drop old table
|
|
440
|
+
db.exec(`DROP TABLE issue_feedback;`);
|
|
441
|
+
// Rename new table
|
|
442
|
+
db.exec(`ALTER TABLE issue_feedback_new RENAME TO issue_feedback;`);
|
|
443
|
+
// Recreate indexes
|
|
444
|
+
db.exec(`
|
|
445
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_from_id ON issue_feedback(from_id);
|
|
446
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_from_uuid ON issue_feedback(from_uuid);
|
|
447
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_to_id ON issue_feedback(to_id);
|
|
448
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_to_uuid ON issue_feedback(to_uuid);
|
|
449
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_dismissed ON issue_feedback(dismissed);
|
|
450
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_type ON issue_feedback(feedback_type);
|
|
451
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_created_at ON issue_feedback(created_at);
|
|
452
|
+
`);
|
|
453
|
+
db.exec(`PRAGMA foreign_keys = ON;`);
|
|
454
|
+
console.log(" ✓ Made from_id/from_uuid nullable in issue_feedback");
|
|
455
|
+
},
|
|
456
|
+
down: (db) => {
|
|
457
|
+
// Rollback: restore required from_id/from_uuid
|
|
458
|
+
// Note: This will fail if there's feedback without from_id
|
|
459
|
+
db.exec(`PRAGMA foreign_keys = OFF;`);
|
|
460
|
+
db.exec(`
|
|
461
|
+
CREATE TABLE IF NOT EXISTS issue_feedback_old (
|
|
462
|
+
id TEXT PRIMARY KEY,
|
|
463
|
+
from_id TEXT NOT NULL,
|
|
464
|
+
from_uuid TEXT NOT NULL,
|
|
465
|
+
to_id TEXT NOT NULL,
|
|
466
|
+
to_uuid TEXT NOT NULL,
|
|
467
|
+
feedback_type TEXT NOT NULL CHECK(feedback_type IN ('comment', 'suggestion', 'request')),
|
|
468
|
+
content TEXT NOT NULL,
|
|
469
|
+
agent TEXT,
|
|
470
|
+
anchor TEXT,
|
|
471
|
+
dismissed INTEGER NOT NULL DEFAULT 0 CHECK(dismissed IN (0, 1)),
|
|
472
|
+
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
473
|
+
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
474
|
+
FOREIGN KEY (from_id) REFERENCES issues(id) ON DELETE CASCADE,
|
|
475
|
+
FOREIGN KEY (from_uuid) REFERENCES issues(uuid) ON DELETE CASCADE
|
|
476
|
+
);
|
|
477
|
+
`);
|
|
478
|
+
// Only copy feedback that has from_id (anonymous feedback would be lost)
|
|
479
|
+
db.exec(`
|
|
480
|
+
INSERT INTO issue_feedback_old (
|
|
481
|
+
id, from_id, from_uuid, to_id, to_uuid, feedback_type,
|
|
482
|
+
content, agent, anchor, dismissed, created_at, updated_at
|
|
483
|
+
)
|
|
484
|
+
SELECT
|
|
485
|
+
id, from_id, from_uuid, to_id, to_uuid, feedback_type,
|
|
486
|
+
content, agent, anchor, dismissed, created_at, updated_at
|
|
487
|
+
FROM issue_feedback
|
|
488
|
+
WHERE from_id IS NOT NULL;
|
|
489
|
+
`);
|
|
490
|
+
db.exec(`DROP TABLE issue_feedback;`);
|
|
491
|
+
db.exec(`ALTER TABLE issue_feedback_old RENAME TO issue_feedback;`);
|
|
492
|
+
// Recreate indexes
|
|
493
|
+
db.exec(`
|
|
494
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_from_id ON issue_feedback(from_id);
|
|
495
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_from_uuid ON issue_feedback(from_uuid);
|
|
496
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_to_id ON issue_feedback(to_id);
|
|
497
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_to_uuid ON issue_feedback(to_uuid);
|
|
498
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_dismissed ON issue_feedback(dismissed);
|
|
499
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_type ON issue_feedback(feedback_type);
|
|
500
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_created_at ON issue_feedback(created_at);
|
|
501
|
+
`);
|
|
502
|
+
db.exec(`PRAGMA foreign_keys = ON;`);
|
|
503
|
+
console.log(" Note: Anonymous feedback (without from_id) was removed during rollback");
|
|
504
|
+
},
|
|
505
|
+
},
|
|
389
506
|
];
|
|
390
507
|
/**
|
|
391
508
|
* Get the current migration version from the database
|
package/dist/migrations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare const ISSUES_TABLE = "\nCREATE TABLE IF NOT EXISTS issues (\n
|
|
|
15
15
|
export declare const RELATIONSHIPS_TABLE = "\nCREATE TABLE IF NOT EXISTS relationships (\n from_id TEXT NOT NULL,\n from_uuid TEXT NOT NULL,\n from_type TEXT NOT NULL,\n to_id TEXT NOT NULL,\n to_uuid TEXT NOT NULL,\n to_type TEXT NOT NULL,\n relationship_type TEXT NOT NULL,\n created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n metadata TEXT,\n PRIMARY KEY (from_id, from_type, to_id, to_type, relationship_type)\n);\n";
|
|
16
16
|
export declare const TAGS_TABLE = "\nCREATE TABLE IF NOT EXISTS tags (\n entity_id TEXT NOT NULL,\n entity_uuid TEXT NOT NULL,\n entity_type TEXT NOT NULL,\n tag TEXT NOT NULL,\n PRIMARY KEY (entity_id, entity_type, tag)\n);\n";
|
|
17
17
|
export declare const EVENTS_TABLE = "\nCREATE TABLE IF NOT EXISTS events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n entity_id TEXT NOT NULL,\n entity_uuid TEXT NOT NULL,\n entity_type TEXT NOT NULL,\n event_type TEXT NOT NULL,\n actor TEXT NOT NULL,\n old_value TEXT,\n new_value TEXT,\n comment TEXT,\n created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n git_commit_sha TEXT,\n source TEXT\n);\n";
|
|
18
|
-
export declare const ISSUE_FEEDBACK_TABLE = "\nCREATE TABLE IF NOT EXISTS issue_feedback (\n id TEXT PRIMARY KEY,\n from_id TEXT
|
|
18
|
+
export declare const ISSUE_FEEDBACK_TABLE = "\nCREATE TABLE IF NOT EXISTS issue_feedback (\n id TEXT PRIMARY KEY,\n from_id TEXT,\n from_uuid TEXT,\n to_id TEXT NOT NULL,\n to_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);\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,\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
21
|
export declare const EXECUTION_LOGS_TABLE = "\nCREATE TABLE IF NOT EXISTS execution_logs (\n execution_id TEXT PRIMARY KEY,\n raw_logs TEXT,\n normalized_entry TEXT,\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 CHECK (raw_logs IS NOT NULL OR normalized_entry IS NOT NULL)\n);\n";
|
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,muBAkBvB,CAAC;AAEF,eAAO,MAAM,YAAY,+xBAoBxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,iaAa/B,CAAC;AAEF,eAAO,MAAM,UAAU,mNAQtB,CAAC;AAEF,eAAO,MAAM,YAAY,uZAexB,CAAC;AAEF,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,muBAkBvB,CAAC;AAEF,eAAO,MAAM,YAAY,+xBAoBxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,iaAa/B,CAAC;AAEF,eAAO,MAAM,UAAU,mNAQtB,CAAC;AAEF,eAAO,MAAM,YAAY,uZAexB,CAAC;AAEF,eAAO,MAAM,oBAAoB,6gBAehC,CAAC;AAEF,eAAO,MAAM,gBAAgB,0jDAwD5B,CAAC;AAGF,eAAO,MAAM,sBAAsB,ocAYlC,CAAC;AAOF,eAAO,MAAM,oBAAoB,4eAYhC,CAAC;AAIF,eAAO,MAAM,eAAe,67BAuB3B,CAAC;AAGF,eAAO,MAAM,qBAAqB,0mBAajC,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,+iBAQlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,0vBAU9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,oKAGpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gRAIlC,CAAC;AAEF,eAAO,MAAM,iBAAiB,6ZAM7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,+kBAOnC,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,iBAAiB,gqBAkB7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,ovBAmB/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,UAYtB,CAAC;AAEF,eAAO,MAAM,WAAW,UAYvB,CAAC;AAEF,eAAO,MAAM,SAAS,UAA2C,CAAC"}
|
package/dist/schema.js
CHANGED
|
@@ -105,8 +105,8 @@ CREATE TABLE IF NOT EXISTS events (
|
|
|
105
105
|
export const ISSUE_FEEDBACK_TABLE = `
|
|
106
106
|
CREATE TABLE IF NOT EXISTS issue_feedback (
|
|
107
107
|
id TEXT PRIMARY KEY,
|
|
108
|
-
from_id TEXT
|
|
109
|
-
from_uuid TEXT
|
|
108
|
+
from_id TEXT,
|
|
109
|
+
from_uuid TEXT,
|
|
110
110
|
to_id TEXT NOT NULL,
|
|
111
111
|
to_uuid TEXT NOT NULL,
|
|
112
112
|
feedback_type TEXT NOT NULL CHECK(feedback_type IN ('comment', 'suggestion', 'request')),
|
|
@@ -115,9 +115,7 @@ CREATE TABLE IF NOT EXISTS issue_feedback (
|
|
|
115
115
|
anchor TEXT,
|
|
116
116
|
dismissed INTEGER NOT NULL DEFAULT 0 CHECK(dismissed IN (0, 1)),
|
|
117
117
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
118
|
-
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
119
|
-
FOREIGN KEY (from_id) REFERENCES issues(id) ON DELETE CASCADE,
|
|
120
|
-
FOREIGN KEY (from_uuid) REFERENCES issues(uuid) ON DELETE CASCADE
|
|
118
|
+
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
121
119
|
);
|
|
122
120
|
`;
|
|
123
121
|
export const EXECUTIONS_TABLE = `
|
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;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;CAoB3B,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
|
|
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;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;CAoB3B,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;;;;;;;;;;;;;;;CAenC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD/B,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;CAYrC,CAAC;AAEF,0DAA0D;AAC1D,wBAAwB;AACxB,mFAAmF;AACnF,8FAA8F;AAC9F,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;CAYnC,CAAC;AAEF,uDAAuD;AACvD,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB9B,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;CAapC,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,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;CAMhC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;CAOtC,CAAC;AAEF;;GAEG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;CAkBhC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;CAmBlC,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;IACpB,eAAe;IACf,qBAAqB;CACtB,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;IACtB,iBAAiB;IACjB,uBAAuB;CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -49,6 +49,12 @@ export interface ExternalLink {
|
|
|
49
49
|
external_updated_at?: string;
|
|
50
50
|
/** Provider-specific metadata */
|
|
51
51
|
metadata?: Record<string, unknown>;
|
|
52
|
+
/** When this entity was initially imported (ISO 8601) */
|
|
53
|
+
imported_at?: string;
|
|
54
|
+
/** Hash of external content for change detection */
|
|
55
|
+
content_hash?: string;
|
|
56
|
+
/** Metadata captured during import (separate from sync metadata) */
|
|
57
|
+
import_metadata?: Record<string, unknown>;
|
|
52
58
|
}
|
|
53
59
|
|
|
54
60
|
// =============================================================================
|
|
@@ -152,11 +158,16 @@ export type EventType =
|
|
|
152
158
|
/**
|
|
153
159
|
* Issue-based feedback types
|
|
154
160
|
* Feedback can target either a spec or another issue (type inferred from ID prefix)
|
|
161
|
+
*
|
|
162
|
+
* When from_id is set, feedback originates from a sudocode issue.
|
|
163
|
+
* When from_id is null/undefined, feedback is anonymous/external.
|
|
155
164
|
*/
|
|
156
165
|
export interface IssueFeedback {
|
|
157
166
|
id: string;
|
|
158
|
-
|
|
159
|
-
|
|
167
|
+
/** Issue ID that provided the feedback (optional for anonymous/external feedback) */
|
|
168
|
+
from_id?: string;
|
|
169
|
+
/** Issue UUID that provided the feedback (optional for anonymous/external feedback) */
|
|
170
|
+
from_uuid?: string;
|
|
160
171
|
to_id: string;
|
|
161
172
|
to_uuid: string;
|
|
162
173
|
feedback_type: FeedbackType;
|
|
@@ -212,7 +223,8 @@ export interface IssueJSONL extends Issue {
|
|
|
212
223
|
|
|
213
224
|
export interface FeedbackJSONL {
|
|
214
225
|
id: string;
|
|
215
|
-
|
|
226
|
+
/** Issue ID that provided the feedback (optional for anonymous/external feedback) */
|
|
227
|
+
from_id?: string;
|
|
216
228
|
to_id: string;
|
|
217
229
|
feedback_type: FeedbackType;
|
|
218
230
|
content: string;
|
|
@@ -431,4 +443,10 @@ export type {
|
|
|
431
443
|
ExternalChange,
|
|
432
444
|
SyncResult,
|
|
433
445
|
SyncConflict,
|
|
446
|
+
// On-demand import types
|
|
447
|
+
OnDemandImportCapable,
|
|
448
|
+
ExternalComment,
|
|
449
|
+
// Search types
|
|
450
|
+
SearchOptions,
|
|
451
|
+
SearchResult,
|
|
434
452
|
} from "./integrations.js";
|
package/src/integrations.d.ts
CHANGED
|
@@ -194,6 +194,18 @@ export interface IntegrationPlugin {
|
|
|
194
194
|
* Represents an entity from an external system
|
|
195
195
|
* Normalized structure for cross-provider compatibility
|
|
196
196
|
*/
|
|
197
|
+
/**
|
|
198
|
+
* Represents a relationship from this entity to another
|
|
199
|
+
*/
|
|
200
|
+
export interface ExternalRelationship {
|
|
201
|
+
/** Target entity ID in the external system */
|
|
202
|
+
targetId: string;
|
|
203
|
+
/** Target entity type */
|
|
204
|
+
targetType: "spec" | "issue";
|
|
205
|
+
/** Relationship type */
|
|
206
|
+
relationshipType: "implements" | "blocks" | "depends-on" | "references" | "related" | "discovered-from";
|
|
207
|
+
}
|
|
208
|
+
|
|
197
209
|
export interface ExternalEntity {
|
|
198
210
|
/** Unique identifier in the external system */
|
|
199
211
|
id: string;
|
|
@@ -213,10 +225,97 @@ export interface ExternalEntity {
|
|
|
213
225
|
created_at?: string;
|
|
214
226
|
/** When last updated in external system (optional, ISO 8601) */
|
|
215
227
|
updated_at?: string;
|
|
228
|
+
/** Relationships from this entity to other entities (optional) */
|
|
229
|
+
relationships?: ExternalRelationship[];
|
|
216
230
|
/** Raw data from external system (for provider-specific handling) */
|
|
217
231
|
raw?: unknown;
|
|
218
232
|
}
|
|
219
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Options for searching entities
|
|
236
|
+
*/
|
|
237
|
+
export interface SearchOptions {
|
|
238
|
+
/** Repository to search in (e.g., "owner/repo") */
|
|
239
|
+
repo?: string;
|
|
240
|
+
/** Page number for pagination (1-indexed) */
|
|
241
|
+
page?: number;
|
|
242
|
+
/** Number of results per page */
|
|
243
|
+
perPage?: number;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Result of a search operation with pagination info
|
|
248
|
+
*/
|
|
249
|
+
export interface SearchResult {
|
|
250
|
+
/** List of matching entities */
|
|
251
|
+
results: ExternalEntity[];
|
|
252
|
+
/** Pagination info */
|
|
253
|
+
pagination?: {
|
|
254
|
+
page: number;
|
|
255
|
+
perPage: number;
|
|
256
|
+
hasMore: boolean;
|
|
257
|
+
totalCount?: number;
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Represents a comment from an external system
|
|
263
|
+
* Used for importing discussion threads alongside entities
|
|
264
|
+
*/
|
|
265
|
+
export interface ExternalComment {
|
|
266
|
+
/** Unique identifier in the external system */
|
|
267
|
+
id: string;
|
|
268
|
+
/** Comment author (username or display name) */
|
|
269
|
+
author: string;
|
|
270
|
+
/** Comment body/content */
|
|
271
|
+
body: string;
|
|
272
|
+
/** When the comment was created (ISO 8601) */
|
|
273
|
+
created_at: string;
|
|
274
|
+
/** URL to view the comment in external system (optional) */
|
|
275
|
+
url?: string;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Interface for providers that support on-demand import
|
|
280
|
+
* Implement this interface to enable URL-based import capabilities
|
|
281
|
+
*/
|
|
282
|
+
export interface OnDemandImportCapable {
|
|
283
|
+
/**
|
|
284
|
+
* Check if this provider can handle the given URL
|
|
285
|
+
* @param url - URL to check
|
|
286
|
+
* @returns true if this provider can import from this URL
|
|
287
|
+
*/
|
|
288
|
+
canHandleUrl?(url: string): boolean;
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Parse a URL to extract entity information
|
|
292
|
+
* @param url - URL to parse
|
|
293
|
+
* @returns Parsed entity info or null if URL cannot be parsed
|
|
294
|
+
*/
|
|
295
|
+
parseUrl?(url: string): { externalId: string; metadata?: Record<string, unknown> } | null;
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Fetch an entity by its URL
|
|
299
|
+
* @param url - URL to fetch from
|
|
300
|
+
* @returns The external entity or null if not found
|
|
301
|
+
*/
|
|
302
|
+
fetchByUrl?(url: string): Promise<ExternalEntity | null>;
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Refresh multiple entities by their external IDs
|
|
306
|
+
* @param externalIds - Array of external IDs to refresh
|
|
307
|
+
* @returns Array of entities (null for any that couldn't be fetched)
|
|
308
|
+
*/
|
|
309
|
+
refreshEntities?(externalIds: string[]): Promise<(ExternalEntity | null)[]>;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Fetch comments for an entity
|
|
313
|
+
* @param externalId - External ID of the entity
|
|
314
|
+
* @returns Array of comments
|
|
315
|
+
*/
|
|
316
|
+
fetchComments?(externalId: string): Promise<ExternalComment[]>;
|
|
317
|
+
}
|
|
318
|
+
|
|
220
319
|
/**
|
|
221
320
|
* Represents a change detected in an external system
|
|
222
321
|
* Used for incremental sync operations
|
|
@@ -278,6 +377,12 @@ export interface IntegrationProvider {
|
|
|
278
377
|
readonly supportsWatch: boolean;
|
|
279
378
|
/** Whether this provider supports polling for changes */
|
|
280
379
|
readonly supportsPolling: boolean;
|
|
380
|
+
/** Whether this provider supports on-demand import via URL */
|
|
381
|
+
readonly supportsOnDemandImport: boolean;
|
|
382
|
+
/** Whether this provider supports search operations */
|
|
383
|
+
readonly supportsSearch: boolean;
|
|
384
|
+
/** Whether this provider supports pushing changes to external system */
|
|
385
|
+
readonly supportsPush: boolean;
|
|
281
386
|
|
|
282
387
|
// ===========================================================================
|
|
283
388
|
// Lifecycle
|
|
@@ -297,7 +402,10 @@ export interface IntegrationProvider {
|
|
|
297
402
|
fetchEntity(externalId: string): Promise<ExternalEntity | null>;
|
|
298
403
|
|
|
299
404
|
/** Search for entities in the external system */
|
|
300
|
-
searchEntities(
|
|
405
|
+
searchEntities(
|
|
406
|
+
query?: string,
|
|
407
|
+
options?: SearchOptions
|
|
408
|
+
): Promise<ExternalEntity[] | SearchResult>;
|
|
301
409
|
|
|
302
410
|
/** Create a new entity in the external system */
|
|
303
411
|
createEntity(entity: Partial<Spec | Issue>): Promise<string>;
|