@kraki/tentacle 0.11.19 → 0.12.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/dist/banner.js +1 -1
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/history-parser.d.ts +37 -0
- package/dist/history-parser.js +190 -0
- package/dist/history-parser.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/relay-client.d.ts +2 -0
- package/dist/relay-client.js +161 -0
- package/dist/relay-client.js.map +1 -1
- package/dist/session-manager.d.ts +31 -0
- package/dist/session-manager.js +75 -0
- package/dist/session-manager.js.map +1 -1
- package/dist/session-scanner.d.ts +27 -0
- package/dist/session-scanner.js +205 -0
- package/dist/session-scanner.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session scanner — discovers local Copilot sessions for the import picker.
|
|
3
|
+
*
|
|
4
|
+
* Two data sources:
|
|
5
|
+
* 1. SDK's CopilotClient.listSessions() — sessions the running CLI server knows about
|
|
6
|
+
* 2. Filesystem scan of ~/.copilot/session-state/ — all sessions including historical
|
|
7
|
+
*
|
|
8
|
+
* Outputs a flat LocalSession[] catalog. The arm groups client-side by gitRoot/cwd.
|
|
9
|
+
*/
|
|
10
|
+
import { readdirSync, readFileSync, existsSync, statSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { createLogger } from './logger.js';
|
|
14
|
+
const logger = createLogger('session-scanner');
|
|
15
|
+
const SESSION_STATE_DIR = join(homedir(), '.copilot', 'session-state');
|
|
16
|
+
function parseWorkspaceYaml(raw) {
|
|
17
|
+
const data = {};
|
|
18
|
+
const lines = raw.split('\n');
|
|
19
|
+
let inMultiline = false;
|
|
20
|
+
let multilineKey = '';
|
|
21
|
+
const multilineLines = [];
|
|
22
|
+
for (const line of lines) {
|
|
23
|
+
if (inMultiline) {
|
|
24
|
+
if (line.startsWith(' ')) {
|
|
25
|
+
multilineLines.push(line.trim());
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
data[multilineKey] = multilineLines.join(' ').slice(0, 200);
|
|
29
|
+
inMultiline = false;
|
|
30
|
+
multilineLines.length = 0;
|
|
31
|
+
}
|
|
32
|
+
if (!line.includes(':') || line.startsWith(' '))
|
|
33
|
+
continue;
|
|
34
|
+
const idx = line.indexOf(':');
|
|
35
|
+
const key = line.slice(0, idx).trim();
|
|
36
|
+
const value = line.slice(idx + 1).trim();
|
|
37
|
+
if (!value && (key === 'summary')) {
|
|
38
|
+
inMultiline = true;
|
|
39
|
+
multilineKey = key;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// Strip YAML block scalar indicators
|
|
43
|
+
if (value === '|-' || value === '|' || value === '>') {
|
|
44
|
+
inMultiline = true;
|
|
45
|
+
multilineKey = key;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
data[key] = value;
|
|
49
|
+
}
|
|
50
|
+
if (inMultiline && multilineLines.length > 0) {
|
|
51
|
+
data[multilineKey] = multilineLines.join(' ').slice(0, 200);
|
|
52
|
+
}
|
|
53
|
+
return data;
|
|
54
|
+
}
|
|
55
|
+
// ── Lock file / PID liveness check ──────────────────────
|
|
56
|
+
function isSessionLive(sessionDir) {
|
|
57
|
+
try {
|
|
58
|
+
const files = readdirSync(sessionDir);
|
|
59
|
+
const lockFile = files.find(f => f.startsWith('inuse.') && f.endsWith('.lock'));
|
|
60
|
+
if (!lockFile)
|
|
61
|
+
return false;
|
|
62
|
+
const pidStr = lockFile.replace('inuse.', '').replace('.lock', '');
|
|
63
|
+
const pid = parseInt(pidStr, 10);
|
|
64
|
+
if (isNaN(pid))
|
|
65
|
+
return false;
|
|
66
|
+
// Check if PID is alive (signal 0 = check existence)
|
|
67
|
+
try {
|
|
68
|
+
process.kill(pid, 0);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
// ESRCH = process doesn't exist → dead
|
|
73
|
+
// EPERM = process exists but different owner → alive
|
|
74
|
+
return err.code !== 'ESRCH';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ── Session source detection ────────────────────────────
|
|
82
|
+
function detectSource(sessionDir) {
|
|
83
|
+
const metaPath = join(sessionDir, 'vscode.metadata.json');
|
|
84
|
+
if (existsSync(metaPath)) {
|
|
85
|
+
try {
|
|
86
|
+
const content = readFileSync(metaPath, 'utf8').trim();
|
|
87
|
+
// Non-empty object means VS Code created it
|
|
88
|
+
if (content && content !== '{}')
|
|
89
|
+
return 'vscode';
|
|
90
|
+
}
|
|
91
|
+
catch { /* ignore */ }
|
|
92
|
+
}
|
|
93
|
+
return 'copilot-cli';
|
|
94
|
+
}
|
|
95
|
+
// ── Model extraction from events.jsonl first line ───────
|
|
96
|
+
function extractModelFromEvents(sessionDir) {
|
|
97
|
+
const eventsPath = join(sessionDir, 'events.jsonl');
|
|
98
|
+
if (!existsSync(eventsPath))
|
|
99
|
+
return undefined;
|
|
100
|
+
try {
|
|
101
|
+
// Read only the first line (session.start event) without loading entire file
|
|
102
|
+
const fd = require('node:fs').openSync(eventsPath, 'r');
|
|
103
|
+
const buf = Buffer.alloc(2048);
|
|
104
|
+
const bytesRead = require('node:fs').readSync(fd, buf, 0, 2048, 0);
|
|
105
|
+
require('node:fs').closeSync(fd);
|
|
106
|
+
const firstLine = buf.toString('utf8', 0, bytesRead).split('\n')[0];
|
|
107
|
+
if (!firstLine)
|
|
108
|
+
return undefined;
|
|
109
|
+
const event = JSON.parse(firstLine);
|
|
110
|
+
if (event.type === 'session.start') {
|
|
111
|
+
return event.data?.selectedModel ?? undefined;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch { /* ignore parse errors */ }
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Scan local filesystem for Copilot sessions.
|
|
119
|
+
* Returns a flat array of LocalSession descriptors.
|
|
120
|
+
*/
|
|
121
|
+
export function scanLocalSessions(options = {}) {
|
|
122
|
+
const sessions = [];
|
|
123
|
+
const scanDirs = [SESSION_STATE_DIR, ...(options.extraDirs ?? [])];
|
|
124
|
+
for (const baseDir of scanDirs) {
|
|
125
|
+
if (!existsSync(baseDir))
|
|
126
|
+
continue;
|
|
127
|
+
let entries;
|
|
128
|
+
try {
|
|
129
|
+
entries = readdirSync(baseDir);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
const sessionDir = join(baseDir, entry);
|
|
136
|
+
const wsPath = join(sessionDir, 'workspace.yaml');
|
|
137
|
+
if (!existsSync(wsPath))
|
|
138
|
+
continue;
|
|
139
|
+
try {
|
|
140
|
+
const raw = readFileSync(wsPath, 'utf8');
|
|
141
|
+
const ws = parseWorkspaceYaml(raw);
|
|
142
|
+
// Use modifiedTime from filesystem if workspace.yaml doesn't have it
|
|
143
|
+
let modifiedTime = ws.updated_at ?? ws.created_at ?? '';
|
|
144
|
+
if (!modifiedTime) {
|
|
145
|
+
try {
|
|
146
|
+
const stat = statSync(join(sessionDir, 'events.jsonl'));
|
|
147
|
+
modifiedTime = stat.mtime.toISOString();
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
modifiedTime = new Date().toISOString();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const session = {
|
|
154
|
+
sessionId: ws.id ?? entry,
|
|
155
|
+
cwd: ws.cwd ?? '/',
|
|
156
|
+
startTime: ws.created_at ?? modifiedTime,
|
|
157
|
+
modifiedTime,
|
|
158
|
+
isLive: isSessionLive(sessionDir),
|
|
159
|
+
source: detectSource(sessionDir),
|
|
160
|
+
};
|
|
161
|
+
if (ws.git_root)
|
|
162
|
+
session.gitRoot = ws.git_root;
|
|
163
|
+
if (ws.repository)
|
|
164
|
+
session.repository = ws.repository;
|
|
165
|
+
if (ws.branch)
|
|
166
|
+
session.branch = ws.branch;
|
|
167
|
+
if (ws.summary)
|
|
168
|
+
session.summary = ws.summary.slice(0, 200);
|
|
169
|
+
// Skip Kraki daemon sessions (cwd: "/" with no git context)
|
|
170
|
+
if (session.cwd === '/' && !session.gitRoot)
|
|
171
|
+
continue;
|
|
172
|
+
if (options.includeModel) {
|
|
173
|
+
const model = extractModelFromEvents(sessionDir);
|
|
174
|
+
if (model)
|
|
175
|
+
session.model = model;
|
|
176
|
+
}
|
|
177
|
+
sessions.push(session);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
logger.debug({ sessionDir, err: err.message }, 'Skipping unparseable session');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Sort by modifiedTime descending (most recent first)
|
|
185
|
+
sessions.sort((a, b) => b.modifiedTime.localeCompare(a.modifiedTime));
|
|
186
|
+
return sessions;
|
|
187
|
+
}
|
|
188
|
+
export function filterSessions(sessions, filter, linkedIds) {
|
|
189
|
+
return sessions.filter(s => {
|
|
190
|
+
if (filter.liveOnly && !s.isLive)
|
|
191
|
+
return false;
|
|
192
|
+
if (!filter.includeLinked && linkedIds.has(s.sessionId))
|
|
193
|
+
return false;
|
|
194
|
+
if (filter.search) {
|
|
195
|
+
const q = filter.search.toLowerCase();
|
|
196
|
+
const haystack = [
|
|
197
|
+
s.cwd, s.gitRoot, s.repository, s.branch, s.summary, s.sessionId,
|
|
198
|
+
].filter(Boolean).join(' ').toLowerCase();
|
|
199
|
+
if (!haystack.includes(q))
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=session-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-scanner.js","sourceRoot":"","sources":["../src/session-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAevE,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,WAAW,GAAG,KAAK,CAAC;YACpB,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEzC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;YAClC,WAAW,GAAG,IAAI,CAAC;YACnB,YAAY,GAAG,GAAG,CAAC;YACnB,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACrD,WAAW,GAAG,IAAI,CAAC;YACnB,YAAY,GAAG,GAAG,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,WAAW,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAqB,CAAC;AAC/B,CAAC;AAED,2DAA2D;AAE3D,SAAS,aAAa,CAAC,UAAkB;IACvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAE7B,qDAAqD;QACrD,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uCAAuC;YACvC,qDAAqD;YACrD,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC;QACzD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,2DAA2D;AAE3D,SAAS,YAAY,CAAC,UAAkB;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,4CAA4C;YAC5C,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,QAAQ,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,2DAA2D;AAE3D,SAAS,sBAAsB,CAAC,UAAkB;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9C,IAAI,CAAC;QACH,6EAA6E;QAC7E,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC,IAAI,EAAE,aAAa,IAAI,SAAS,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAErC,OAAO,SAAS,CAAC;AACnB,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAuB,EAAE;IACzD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAEnC,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YAElD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAElC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACzC,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBAEnC,qEAAqE;gBACrE,IAAI,YAAY,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC;gBACxD,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;wBACxD,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC1C,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAiB;oBAC5B,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,KAAK;oBACzB,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG;oBAClB,SAAS,EAAE,EAAE,CAAC,UAAU,IAAI,YAAY;oBACxC,YAAY;oBACZ,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC;oBACjC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC;iBACjC,CAAC;gBAEF,IAAI,EAAE,CAAC,QAAQ;oBAAE,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC;gBAC/C,IAAI,EAAE,CAAC,UAAU;oBAAE,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;gBACtD,IAAI,EAAE,CAAC,MAAM;oBAAE,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;gBAC1C,IAAI,EAAE,CAAC,OAAO;oBAAE,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAE3D,4DAA4D;gBAC5D,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;oBAAE,SAAS;gBAEtD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;oBACjD,IAAI,KAAK;wBAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAUD,MAAM,UAAU,cAAc,CAC5B,QAAwB,EACxB,MAAqB,EACrB,SAAsB;IAEtB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG;gBACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;aACjE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kraki/tentacle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Kraki agent bridge — the arm that connects your coding agent to the head",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"uuid": "^13.0.0",
|
|
35
35
|
"ws": "^8.19.0",
|
|
36
36
|
"@kraki/crypto": "0.2.0",
|
|
37
|
-
"@kraki/protocol": "0.
|
|
37
|
+
"@kraki/protocol": "0.10.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/pino": "^7.0.5",
|