codekin 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -2
- package/bin/codekin.mjs +2 -1
- package/dist/assets/index-BAdQqYEY.js +182 -0
- package/dist/assets/index-CeZYNLWt.css +1 -0
- package/dist/index.html +2 -2
- package/package.json +8 -2
- package/server/dist/approval-manager.d.ts +44 -8
- package/server/dist/approval-manager.js +262 -23
- package/server/dist/approval-manager.js.map +1 -1
- package/server/dist/claude-process.d.ts +16 -1
- package/server/dist/claude-process.js +36 -12
- package/server/dist/claude-process.js.map +1 -1
- package/server/dist/commit-event-handler.d.ts +41 -0
- package/server/dist/commit-event-handler.js +99 -0
- package/server/dist/commit-event-handler.js.map +1 -0
- package/server/dist/commit-event-hooks.d.ts +35 -0
- package/server/dist/commit-event-hooks.js +177 -0
- package/server/dist/commit-event-hooks.js.map +1 -0
- package/server/dist/crypto-utils.js +10 -5
- package/server/dist/crypto-utils.js.map +1 -1
- package/server/dist/diff-parser.d.ts +23 -0
- package/server/dist/diff-parser.js +236 -0
- package/server/dist/diff-parser.js.map +1 -0
- package/server/dist/session-archive.js +6 -1
- package/server/dist/session-archive.js.map +1 -1
- package/server/dist/session-manager.d.ts +25 -8
- package/server/dist/session-manager.js +370 -30
- package/server/dist/session-manager.js.map +1 -1
- package/server/dist/session-routes.js +101 -4
- package/server/dist/session-routes.js.map +1 -1
- package/server/dist/stepflow-handler.js +19 -5
- package/server/dist/stepflow-handler.js.map +1 -1
- package/server/dist/tsconfig.tsbuildinfo +1 -1
- package/server/dist/types.d.ts +63 -8
- package/server/dist/upload-routes.d.ts +1 -1
- package/server/dist/upload-routes.js +40 -13
- package/server/dist/upload-routes.js.map +1 -1
- package/server/dist/webhook-handler.js +2 -2
- package/server/dist/webhook-handler.js.map +1 -1
- package/server/dist/webhook-workspace.js +5 -2
- package/server/dist/webhook-workspace.js.map +1 -1
- package/server/dist/workflow-loader.d.ts +6 -0
- package/server/dist/workflow-loader.js +11 -0
- package/server/dist/workflow-loader.js.map +1 -1
- package/server/dist/workflow-routes.d.ts +5 -1
- package/server/dist/workflow-routes.js +49 -8
- package/server/dist/workflow-routes.js.map +1 -1
- package/server/dist/ws-message-handler.js +19 -2
- package/server/dist/ws-message-handler.js.map +1 -1
- package/server/dist/ws-server.js +37 -9
- package/server/dist/ws-server.js.map +1 -1
- package/server/workflows/commit-review.md +22 -0
- package/server/workflows/docs-audit.weekly.md +97 -0
- package/dist/assets/index-Cp27uOZO.js +0 -174
- package/dist/assets/index-D3SqBuHB.css +0 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses raw `git diff` output into structured DiffFile[] objects.
|
|
3
|
+
*
|
|
4
|
+
* Handles unified diff format with rename detection, binary files,
|
|
5
|
+
* and optional size-based truncation.
|
|
6
|
+
*/
|
|
7
|
+
/** 2 MB default cap on raw diff output before truncation. */
|
|
8
|
+
const DEFAULT_MAX_BYTES = 2 * 1024 * 1024;
|
|
9
|
+
/**
|
|
10
|
+
* Parse raw unified diff output into structured file/hunk/line objects.
|
|
11
|
+
* If `maxBytes` is provided and the input exceeds it, parsing stops early
|
|
12
|
+
* and `truncated` is set to true.
|
|
13
|
+
*/
|
|
14
|
+
export function parseDiff(raw, maxBytes = DEFAULT_MAX_BYTES) {
|
|
15
|
+
let truncated = false;
|
|
16
|
+
let truncationReason;
|
|
17
|
+
let input = raw;
|
|
18
|
+
if (Buffer.byteLength(raw, 'utf-8') > maxBytes) {
|
|
19
|
+
truncated = true;
|
|
20
|
+
truncationReason = `Diff output exceeded ${Math.round(maxBytes / (1024 * 1024))} MB limit`;
|
|
21
|
+
// Truncate to roughly maxBytes — cut at last newline before limit
|
|
22
|
+
const buf = Buffer.from(raw, 'utf-8');
|
|
23
|
+
const sliced = buf.subarray(0, maxBytes).toString('utf-8');
|
|
24
|
+
const lastNewline = sliced.lastIndexOf('\n');
|
|
25
|
+
input = lastNewline > 0 ? sliced.slice(0, lastNewline) : sliced;
|
|
26
|
+
}
|
|
27
|
+
const files = [];
|
|
28
|
+
// Split on diff headers: "diff --git a/... b/..."
|
|
29
|
+
const fileSections = input.split(/^diff --git /m);
|
|
30
|
+
for (let i = 1; i < fileSections.length; i++) {
|
|
31
|
+
const section = fileSections[i];
|
|
32
|
+
const file = parseFileSection(section);
|
|
33
|
+
if (file)
|
|
34
|
+
files.push(file);
|
|
35
|
+
}
|
|
36
|
+
return { files, truncated, truncationReason };
|
|
37
|
+
}
|
|
38
|
+
function parseFileSection(section) {
|
|
39
|
+
const lines = section.split('\n');
|
|
40
|
+
if (lines.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
// First line: "a/path b/path"
|
|
43
|
+
const headerLine = lines[0];
|
|
44
|
+
const pathMatch = headerLine.match(/^a\/(.+?) b\/(.+?)$/);
|
|
45
|
+
if (!pathMatch)
|
|
46
|
+
return null;
|
|
47
|
+
const bPath = pathMatch[2];
|
|
48
|
+
let status = 'modified';
|
|
49
|
+
let oldPath;
|
|
50
|
+
let isBinary = false;
|
|
51
|
+
const hunks = [];
|
|
52
|
+
let additions = 0;
|
|
53
|
+
let deletions = 0;
|
|
54
|
+
let lineIdx = 1;
|
|
55
|
+
// Parse extended header lines (new file, deleted file, rename, binary, etc.)
|
|
56
|
+
while (lineIdx < lines.length) {
|
|
57
|
+
const line = lines[lineIdx];
|
|
58
|
+
if (line.startsWith('new file mode')) {
|
|
59
|
+
status = 'added';
|
|
60
|
+
}
|
|
61
|
+
else if (line.startsWith('deleted file mode')) {
|
|
62
|
+
status = 'deleted';
|
|
63
|
+
}
|
|
64
|
+
else if (line.startsWith('rename from ')) {
|
|
65
|
+
status = 'renamed';
|
|
66
|
+
oldPath = line.slice('rename from '.length);
|
|
67
|
+
}
|
|
68
|
+
else if (line.startsWith('similarity index') || line.startsWith('dissimilarity index')) {
|
|
69
|
+
// part of rename/copy header, skip
|
|
70
|
+
}
|
|
71
|
+
else if (line.startsWith('rename to ')) {
|
|
72
|
+
// already captured via bPath
|
|
73
|
+
}
|
|
74
|
+
else if (line.startsWith('index ')) {
|
|
75
|
+
// index line, skip
|
|
76
|
+
}
|
|
77
|
+
else if (line === 'GIT binary patch' || line.startsWith('Binary files ')) {
|
|
78
|
+
isBinary = true;
|
|
79
|
+
}
|
|
80
|
+
else if (line.startsWith('--- ') || line.startsWith('+++ ')) {
|
|
81
|
+
// file marker lines — skip but keep going for hunks
|
|
82
|
+
}
|
|
83
|
+
else if (line.startsWith('@@')) {
|
|
84
|
+
// Start of hunks — break out to hunk parsing
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
else if (line.startsWith('old mode') || line.startsWith('new mode')) {
|
|
88
|
+
// mode change, skip
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Unknown header line or empty — if we hit content, stop
|
|
92
|
+
if (!line.startsWith('\\') && line !== '') {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
lineIdx++;
|
|
97
|
+
}
|
|
98
|
+
// Parse hunks
|
|
99
|
+
if (!isBinary) {
|
|
100
|
+
while (lineIdx < lines.length) {
|
|
101
|
+
const line = lines[lineIdx];
|
|
102
|
+
if (line.startsWith('@@')) {
|
|
103
|
+
const hunkResult = parseHunk(lines, lineIdx);
|
|
104
|
+
if (hunkResult) {
|
|
105
|
+
hunks.push(hunkResult.hunk);
|
|
106
|
+
additions += hunkResult.additions;
|
|
107
|
+
deletions += hunkResult.deletions;
|
|
108
|
+
lineIdx = hunkResult.nextIdx;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
lineIdx++;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
lineIdx++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
path: bPath,
|
|
121
|
+
status,
|
|
122
|
+
oldPath: status === 'renamed' ? oldPath : undefined,
|
|
123
|
+
isBinary,
|
|
124
|
+
additions,
|
|
125
|
+
deletions,
|
|
126
|
+
hunks,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function parseHunk(lines, startIdx) {
|
|
130
|
+
const headerLine = lines[startIdx];
|
|
131
|
+
// Parse "@@ -10,7 +10,8 @@ optional context"
|
|
132
|
+
const hunkMatch = headerLine.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)$/);
|
|
133
|
+
if (!hunkMatch)
|
|
134
|
+
return null;
|
|
135
|
+
const oldStart = parseInt(hunkMatch[1], 10);
|
|
136
|
+
const oldLines = hunkMatch[2] !== undefined ? parseInt(hunkMatch[2], 10) : 1;
|
|
137
|
+
const newStart = parseInt(hunkMatch[3], 10);
|
|
138
|
+
const newLines = hunkMatch[4] !== undefined ? parseInt(hunkMatch[4], 10) : 1;
|
|
139
|
+
const diffLines = [];
|
|
140
|
+
let additions = 0;
|
|
141
|
+
let deletions = 0;
|
|
142
|
+
let oldLineNo = oldStart;
|
|
143
|
+
let newLineNo = newStart;
|
|
144
|
+
let idx = startIdx + 1;
|
|
145
|
+
while (idx < lines.length) {
|
|
146
|
+
const line = lines[idx];
|
|
147
|
+
// Next hunk or next file
|
|
148
|
+
if (line.startsWith('@@') || line.startsWith('diff --git '))
|
|
149
|
+
break;
|
|
150
|
+
if (line.startsWith('+')) {
|
|
151
|
+
diffLines.push({
|
|
152
|
+
type: 'add',
|
|
153
|
+
content: line.slice(1),
|
|
154
|
+
newLineNo: newLineNo,
|
|
155
|
+
});
|
|
156
|
+
additions++;
|
|
157
|
+
newLineNo++;
|
|
158
|
+
}
|
|
159
|
+
else if (line.startsWith('-')) {
|
|
160
|
+
diffLines.push({
|
|
161
|
+
type: 'delete',
|
|
162
|
+
content: line.slice(1),
|
|
163
|
+
oldLineNo: oldLineNo,
|
|
164
|
+
});
|
|
165
|
+
deletions++;
|
|
166
|
+
oldLineNo++;
|
|
167
|
+
}
|
|
168
|
+
else if (line.startsWith(' ')) {
|
|
169
|
+
diffLines.push({
|
|
170
|
+
type: 'context',
|
|
171
|
+
content: line.slice(1),
|
|
172
|
+
oldLineNo: oldLineNo,
|
|
173
|
+
newLineNo: newLineNo,
|
|
174
|
+
});
|
|
175
|
+
oldLineNo++;
|
|
176
|
+
newLineNo++;
|
|
177
|
+
}
|
|
178
|
+
else if (line.startsWith('\\')) {
|
|
179
|
+
// "" — skip
|
|
180
|
+
}
|
|
181
|
+
else if (line === '') {
|
|
182
|
+
// Unified diff always prefixes lines with ' ', '+', or '-'.
|
|
183
|
+
// An empty string means end-of-section (from split at file boundaries).
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
idx++;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
hunk: {
|
|
193
|
+
header: headerLine,
|
|
194
|
+
oldStart,
|
|
195
|
+
oldLines,
|
|
196
|
+
newStart,
|
|
197
|
+
newLines,
|
|
198
|
+
lines: diffLines,
|
|
199
|
+
},
|
|
200
|
+
additions,
|
|
201
|
+
deletions,
|
|
202
|
+
nextIdx: idx,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Generate a synthetic diff for an untracked file, treating it as fully added.
|
|
207
|
+
* Reads the file content and produces a single hunk with all lines as additions.
|
|
208
|
+
*/
|
|
209
|
+
export function createUntrackedFileDiff(relativePath, content) {
|
|
210
|
+
const fileLines = content.split('\n');
|
|
211
|
+
// Remove trailing empty line from split if file ends with newline
|
|
212
|
+
if (fileLines.length > 0 && fileLines[fileLines.length - 1] === '') {
|
|
213
|
+
fileLines.pop();
|
|
214
|
+
}
|
|
215
|
+
const diffLines = fileLines.map((line, i) => ({
|
|
216
|
+
type: 'add',
|
|
217
|
+
content: line,
|
|
218
|
+
newLineNo: i + 1,
|
|
219
|
+
}));
|
|
220
|
+
return {
|
|
221
|
+
path: relativePath,
|
|
222
|
+
status: 'added',
|
|
223
|
+
isBinary: false,
|
|
224
|
+
additions: fileLines.length,
|
|
225
|
+
deletions: 0,
|
|
226
|
+
hunks: fileLines.length > 0 ? [{
|
|
227
|
+
header: `@@ -0,0 +1,${fileLines.length} @@`,
|
|
228
|
+
oldStart: 0,
|
|
229
|
+
oldLines: 0,
|
|
230
|
+
newStart: 1,
|
|
231
|
+
newLines: fileLines.length,
|
|
232
|
+
lines: diffLines,
|
|
233
|
+
}] : [],
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=diff-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-parser.js","sourceRoot":"","sources":["../diff-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAQzC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,WAAmB,iBAAiB;IACzE,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,gBAAoC,CAAA;IACxC,IAAI,KAAK,GAAG,GAAG,CAAA;IAEf,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC;QAC/C,SAAS,GAAG,IAAI,CAAA;QAChB,gBAAgB,GAAG,wBAAwB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,CAAA;QAC1F,kEAAkE;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAC5C,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACjE,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAA;IAE5B,kDAAkD;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnC,8BAA8B;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACzD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAE3B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAE1B,IAAI,MAAM,GAAmB,UAAU,CAAA;IACvC,IAAI,OAA2B,CAAA;IAC/B,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,6EAA6E;IAC7E,OAAO,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;QAE3B,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,OAAO,CAAA;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,SAAS,CAAA;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,SAAS,CAAA;YAClB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACzF,mCAAmC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,6BAA6B;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,mBAAmB;QACrB,CAAC;aAAM,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3E,QAAQ,GAAG,IAAI,CAAA;QACjB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,oDAAoD;QACtD,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,6CAA6C;YAC7C,MAAK;QACP,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,oBAAoB;QACtB,CAAC;aAAM,CAAC;YACN,yDAAyD;YACzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAC1C,MAAK;YACP,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,cAAc;IACd,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;oBAC3B,SAAS,IAAI,UAAU,CAAC,SAAS,CAAA;oBACjC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAA;oBACjC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;gBAC9B,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAA;gBACX,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK;QACX,MAAM;QACN,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACnD,QAAQ;QACR,SAAS;QACT,SAAS;QACT,KAAK;KACN,CAAA;AACH,CAAC;AASD,SAAS,SAAS,CAAC,KAAe,EAAE,QAAgB;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClC,6CAA6C;IAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACtF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5E,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5E,MAAM,SAAS,GAAe,EAAE,CAAA;IAChC,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,SAAS,GAAG,QAAQ,CAAA;IACxB,IAAI,SAAS,GAAG,QAAQ,CAAA;IACxB,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAA;IAEtB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;QAEvB,yBAAyB;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,MAAK;QAElE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,SAAS;aACrB,CAAC,CAAA;YACF,SAAS,EAAE,CAAA;YACX,SAAS,EAAE,CAAA;QACb,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,SAAS;aACrB,CAAC,CAAA;YACF,SAAS,EAAE,CAAA;YACX,SAAS,EAAE,CAAA;QACb,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,SAAS;aACrB,CAAC,CAAA;YACF,SAAS,EAAE,CAAA;YACX,SAAS,EAAE,CAAA;QACb,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,uCAAuC;QACzC,CAAC;aAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACvB,4DAA4D;YAC5D,wEAAwE;YACxE,MAAK;QACP,CAAC;aAAM,CAAC;YACN,MAAK;QACP,CAAC;QACD,GAAG,EAAE,CAAA;IACP,CAAC;IAED,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,UAAU;YAClB,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,KAAK,EAAE,SAAS;SACjB;QACD,SAAS;QACT,SAAS;QACT,OAAO,EAAE,GAAG;KACb,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAAoB,EAAE,OAAe;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,kEAAkE;IAClE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACnE,SAAS,CAAC,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,MAAM,SAAS,GAAe,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,EAAE,KAAc;QACpB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,CAAC,GAAG,CAAC;KACjB,CAAC,CAAC,CAAA;IAEH,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,EAAE,cAAc,SAAS,CAAC,MAAM,KAAK;gBAC3C,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,SAAS,CAAC,MAAM;gBAC1B,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC,CAAC,CAAC,EAAE;KACR,CAAA;AACH,CAAC"}
|
|
@@ -107,7 +107,12 @@ export class SessionArchive {
|
|
|
107
107
|
created: row.created,
|
|
108
108
|
archivedAt: row.archived_at,
|
|
109
109
|
messageCount: row.message_count,
|
|
110
|
-
outputHistory:
|
|
110
|
+
outputHistory: (() => { try {
|
|
111
|
+
return JSON.parse(row.output_history);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return [];
|
|
115
|
+
} })(),
|
|
111
116
|
};
|
|
112
117
|
}
|
|
113
118
|
/** Delete an archived session permanently. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-archive.js","sourceRoot":"","sources":["../session-archive.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-archive.js","sourceRoot":"","sources":["../session-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { WebSocket } from 'ws';
|
|
19
19
|
import { SessionArchive } from './session-archive.js';
|
|
20
|
-
import type { Session, SessionInfo, WsServerMessage } from './types.js';
|
|
20
|
+
import type { DiffFileStatus, DiffScope, Session, SessionInfo, WsServerMessage } from './types.js';
|
|
21
21
|
export interface CreateSessionOptions {
|
|
22
22
|
source?: 'manual' | 'webhook' | 'workflow' | 'stepflow';
|
|
23
23
|
id?: string;
|
|
@@ -25,22 +25,23 @@ export interface CreateSessionOptions {
|
|
|
25
25
|
model?: string;
|
|
26
26
|
}
|
|
27
27
|
export declare class SessionManager {
|
|
28
|
+
/** All active (non-archived) sessions, keyed by session UUID. */
|
|
28
29
|
private sessions;
|
|
29
|
-
/** SQLite archive for closed sessions. */
|
|
30
|
+
/** SQLite archive for closed sessions (persists conversation summaries across restarts). */
|
|
30
31
|
readonly archive: SessionArchive;
|
|
31
32
|
/** Exposed so ws-server can pass its port to child Claude processes. */
|
|
32
33
|
_serverPort: number;
|
|
33
34
|
/** Exposed so ws-server can pass the auth token to child Claude processes. */
|
|
34
35
|
_authToken: string;
|
|
35
|
-
/** Callback to broadcast a message to ALL connected WebSocket clients (set by ws-server). */
|
|
36
|
+
/** Callback to broadcast a message to ALL connected WebSocket clients (set by ws-server on startup). */
|
|
36
37
|
_globalBroadcast: ((msg: WsServerMessage) => void) | null;
|
|
37
|
-
/** Registered listeners notified when a session's Claude process exits. */
|
|
38
|
+
/** Registered listeners notified when a session's Claude process exits (used by webhook-handler for chained workflows). */
|
|
38
39
|
private _exitListeners;
|
|
39
|
-
/** Delegated approval logic. */
|
|
40
|
+
/** Delegated approval logic (auto-approve patterns, deny-lists, pattern management). */
|
|
40
41
|
private approvalManager;
|
|
41
|
-
/** Delegated naming logic. */
|
|
42
|
+
/** Delegated auto-naming logic (generates session names from first user message via Claude API). */
|
|
42
43
|
private sessionNaming;
|
|
43
|
-
/** Delegated persistence logic. */
|
|
44
|
+
/** Delegated persistence logic (saves/restores session metadata to disk across server restarts). */
|
|
44
45
|
private sessionPersistence;
|
|
45
46
|
constructor();
|
|
46
47
|
/** Check if a tool/command is auto-approved for a repo. */
|
|
@@ -53,6 +54,12 @@ export declare class SessionManager {
|
|
|
53
54
|
commands: string[];
|
|
54
55
|
patterns: string[];
|
|
55
56
|
};
|
|
57
|
+
/** Return approvals effective globally via cross-repo inference. */
|
|
58
|
+
getGlobalApprovals(): {
|
|
59
|
+
tools: Record<string, string[]>;
|
|
60
|
+
commands: Record<string, string[]>;
|
|
61
|
+
patterns: Record<string, string[]>;
|
|
62
|
+
};
|
|
56
63
|
/** Remove an auto-approval rule for a repo (workingDir) and persist to disk. */
|
|
57
64
|
removeApproval(workingDir: string, opts: {
|
|
58
65
|
tool?: string;
|
|
@@ -81,7 +88,7 @@ export declare class SessionManager {
|
|
|
81
88
|
/** Add a WebSocket client to a session. Returns the session or undefined if not found.
|
|
82
89
|
* Re-broadcasts any pending approval/control prompts so the joining client sees them. */
|
|
83
90
|
join(sessionId: string, ws: WebSocket): Session | undefined;
|
|
84
|
-
/** Remove a WebSocket client from a session. Auto-denies pending prompts if last client leaves. */
|
|
91
|
+
/** Remove a WebSocket client from a session. Auto-denies pending prompts if last client leaves (after grace period). */
|
|
85
92
|
leave(sessionId: string, ws: WebSocket): void;
|
|
86
93
|
/** Delete a session: kill its process, notify clients, remove from memory and disk. */
|
|
87
94
|
delete(sessionId: string): boolean;
|
|
@@ -183,6 +190,16 @@ export declare class SessionManager {
|
|
|
183
190
|
broadcast(session: Session, msg: WsServerMessage): void;
|
|
184
191
|
findSessionForClient(ws: WebSocket): Session | undefined;
|
|
185
192
|
removeClient(ws: WebSocket): void;
|
|
193
|
+
/**
|
|
194
|
+
* Run git diff in a session's workingDir and return structured results.
|
|
195
|
+
* Includes untracked file discovery for 'unstaged' and 'all' scopes.
|
|
196
|
+
*/
|
|
197
|
+
getDiff(sessionId: string, scope?: DiffScope): Promise<WsServerMessage>;
|
|
198
|
+
/**
|
|
199
|
+
* Discard changes in a session's workingDir per the given scope and paths.
|
|
200
|
+
* Returns a fresh diff_result after discarding.
|
|
201
|
+
*/
|
|
202
|
+
discardChanges(sessionId: string, scope: DiffScope, paths?: string[], statuses?: Record<string, DiffFileStatus>): Promise<WsServerMessage>;
|
|
186
203
|
/** Graceful shutdown: complete in-progress tasks, persist state, kill all processes. */
|
|
187
204
|
shutdown(): void;
|
|
188
205
|
/**
|