@kraki/tentacle 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/base.d.ts +107 -0
  3. package/dist/adapters/base.js +32 -0
  4. package/dist/adapters/base.js.map +1 -0
  5. package/dist/adapters/copilot.d.ts +57 -0
  6. package/dist/adapters/copilot.js +489 -0
  7. package/dist/adapters/copilot.js.map +1 -0
  8. package/dist/adapters/index.d.ts +5 -0
  9. package/dist/adapters/index.js +4 -0
  10. package/dist/adapters/index.js.map +1 -0
  11. package/dist/banner-data.json +1 -0
  12. package/dist/banner.d.ts +7 -0
  13. package/dist/banner.js +187 -0
  14. package/dist/banner.js.map +1 -0
  15. package/dist/checks.d.ts +26 -0
  16. package/dist/checks.js +74 -0
  17. package/dist/checks.js.map +1 -0
  18. package/dist/cli.d.ts +15 -0
  19. package/dist/cli.js +306 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/config.d.ts +38 -0
  22. package/dist/config.js +113 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/daemon-worker.d.ts +21 -0
  25. package/dist/daemon-worker.js +127 -0
  26. package/dist/daemon-worker.js.map +1 -0
  27. package/dist/daemon.d.ts +24 -0
  28. package/dist/daemon.js +163 -0
  29. package/dist/daemon.js.map +1 -0
  30. package/dist/index.d.ts +8 -0
  31. package/dist/index.js +11 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/key-manager.d.ts +28 -0
  34. package/dist/key-manager.js +61 -0
  35. package/dist/key-manager.js.map +1 -0
  36. package/dist/logger.d.ts +8 -0
  37. package/dist/logger.js +30 -0
  38. package/dist/logger.js.map +1 -0
  39. package/dist/pair.d.ts +32 -0
  40. package/dist/pair.js +131 -0
  41. package/dist/pair.js.map +1 -0
  42. package/dist/parse-permission.d.ts +25 -0
  43. package/dist/parse-permission.js +67 -0
  44. package/dist/parse-permission.js.map +1 -0
  45. package/dist/relay-client.d.ts +90 -0
  46. package/dist/relay-client.js +525 -0
  47. package/dist/relay-client.js.map +1 -0
  48. package/dist/session-manager.d.ts +85 -0
  49. package/dist/session-manager.js +218 -0
  50. package/dist/session-manager.js.map +1 -0
  51. package/dist/setup.d.ts +13 -0
  52. package/dist/setup.js +234 -0
  53. package/dist/setup.js.map +1 -0
  54. package/package.json +48 -0
@@ -0,0 +1,489 @@
1
+ /**
2
+ * Copilot SDK adapter for Kraki.
3
+ *
4
+ * Wraps `@github/copilot-sdk` and normalises Copilot CLI events
5
+ * into the abstract `AgentAdapter` callback interface.
6
+ *
7
+ * Key responsibilities:
8
+ * - Manage the CopilotClient lifecycle (start/stop the CLI server)
9
+ * - Create/resume/kill sessions via the SDK
10
+ * - Wire SDK streaming events → `on*` callbacks
11
+ * - Implement the permission-request / question blocking pattern:
12
+ * the SDK handler returns a Promise that resolves when the
13
+ * remote user approves/denies/answers via the tentacle runtime.
14
+ */
15
+ import { execSync } from 'node:child_process';
16
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
17
+ import * as moduleApi from 'node:module';
18
+ import { dirname, join } from 'node:path';
19
+ import { fileURLToPath } from 'node:url';
20
+ import { AgentAdapter, } from './base.js';
21
+ import { parsePermission } from '../parse-permission.js';
22
+ import { createLogger } from '../logger.js';
23
+ const logger = createLogger('copilot-adapter');
24
+ let copilotClientCtorPromise = null;
25
+ const VSCODE_JSONRPC_NODE_SPECIFIER = 'vscode-jsonrpc/node';
26
+ const VSCODE_JSONRPC_NODE_JS_SPECIFIER = 'vscode-jsonrpc/node.js';
27
+ const COPILOT_SDK_COMPATIBILITY_LOADER_SOURCE = `
28
+ export async function resolve(specifier, context, nextResolve) {
29
+ if (specifier === ${JSON.stringify(VSCODE_JSONRPC_NODE_SPECIFIER)}) {
30
+ return nextResolve(${JSON.stringify(VSCODE_JSONRPC_NODE_JS_SPECIFIER)}, context);
31
+ }
32
+ return nextResolve(specifier, context);
33
+ }
34
+ `.trim();
35
+ const moduleCompat = moduleApi;
36
+ // ── Helpers ─────────────────────────────────────────────
37
+ function makeId(prefix) {
38
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
39
+ }
40
+ function getErrorMessage(err) {
41
+ if (err instanceof Error)
42
+ return err.message;
43
+ return String(err);
44
+ }
45
+ function isRecoverableSessionError(err) {
46
+ const message = getErrorMessage(err);
47
+ return message.includes('Session not found:') || message.includes('Connection is disposed');
48
+ }
49
+ export function patchCopilotSdkSessionImport(currentUrl = import.meta.url) {
50
+ const sessionPath = resolveCopilotSdkSessionPath(currentUrl);
51
+ if (!sessionPath) {
52
+ return false;
53
+ }
54
+ const source = readFileSync(sessionPath, 'utf8');
55
+ const patched = source.replace(/from ['"]vscode-jsonrpc\/node['"]/g, `from "${VSCODE_JSONRPC_NODE_JS_SPECIFIER}"`);
56
+ if (patched === source) {
57
+ return false;
58
+ }
59
+ writeFileSync(sessionPath, patched, 'utf8');
60
+ return true;
61
+ }
62
+ export function resolveCopilotSdkSessionPath(currentUrl = import.meta.url) {
63
+ let dir = dirname(fileURLToPath(currentUrl));
64
+ while (true) {
65
+ const candidate = join(dir, 'node_modules', '@github', 'copilot-sdk', 'dist', 'session.js');
66
+ if (existsSync(candidate)) {
67
+ return candidate;
68
+ }
69
+ const parent = dirname(dir);
70
+ if (parent === dir) {
71
+ return null;
72
+ }
73
+ dir = parent;
74
+ }
75
+ }
76
+ export function installCopilotSdkImportCompatibility(currentUrl = import.meta.url) {
77
+ if (typeof moduleCompat.registerHooks === 'function') {
78
+ moduleCompat.registerHooks({
79
+ resolve(specifier, context, nextResolve) {
80
+ if (specifier === VSCODE_JSONRPC_NODE_SPECIFIER) {
81
+ return nextResolve(VSCODE_JSONRPC_NODE_JS_SPECIFIER, context);
82
+ }
83
+ return nextResolve(specifier, context);
84
+ },
85
+ });
86
+ return 'hook';
87
+ }
88
+ if (typeof moduleCompat.register === 'function') {
89
+ moduleCompat.register(`data:text/javascript,${encodeURIComponent(COPILOT_SDK_COMPATIBILITY_LOADER_SOURCE)}`, currentUrl);
90
+ return 'hook';
91
+ }
92
+ if (patchCopilotSdkSessionImport(currentUrl)) {
93
+ return 'patch';
94
+ }
95
+ return null;
96
+ }
97
+ async function loadCopilotClient() {
98
+ if (!copilotClientCtorPromise) {
99
+ copilotClientCtorPromise = (async () => {
100
+ const compatibility = installCopilotSdkImportCompatibility();
101
+ if (compatibility === 'hook') {
102
+ logger.debug('Installed @github/copilot-sdk ESM import compatibility hook');
103
+ }
104
+ else if (compatibility === 'patch') {
105
+ logger.debug('Patched @github/copilot-sdk ESM import compatibility');
106
+ }
107
+ try {
108
+ const mod = await import('@github/copilot-sdk');
109
+ return mod.CopilotClient;
110
+ }
111
+ catch (err) {
112
+ copilotClientCtorPromise = null;
113
+ throw err;
114
+ }
115
+ })();
116
+ }
117
+ return copilotClientCtorPromise;
118
+ }
119
+ // ── Adapter ─────────────────────────────────────────────
120
+ export class CopilotAdapter extends AgentAdapter {
121
+ client = null;
122
+ sessions = new Map();
123
+ cliPath;
124
+ /** Per-session auto-approve sets (populated by "Always Allow" clicks) */
125
+ sessionAllowSets = new Map();
126
+ /** Session permission mode: 'ask' (default) or 'auto' */
127
+ sessionModes = new Map();
128
+ constructor(options = {}) {
129
+ super();
130
+ this.cliPath = options.cliPath;
131
+ }
132
+ // ── Lifecycle ───────────────────────────────────────
133
+ async start() {
134
+ // Resolve GitHub token from `gh` CLI to bypass macOS Keychain prompts.
135
+ let githubToken = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;
136
+ if (!githubToken) {
137
+ try {
138
+ githubToken = execSync('gh auth token 2>/dev/null', { encoding: 'utf8' }).trim() || undefined;
139
+ if (githubToken)
140
+ logger.debug('Using GitHub token from `gh auth token`');
141
+ }
142
+ catch {
143
+ // gh CLI unavailable — SDK will use its own auth chain
144
+ }
145
+ }
146
+ const opts = {
147
+ useLoggedInUser: false,
148
+ ...(githubToken && { githubToken }),
149
+ ...(this.cliPath && { cliPath: this.cliPath }),
150
+ };
151
+ const CopilotClient = await loadCopilotClient();
152
+ this.client = new CopilotClient(opts);
153
+ await this.client.start();
154
+ logger.debug('started');
155
+ }
156
+ async stop() {
157
+ if (this.client) {
158
+ await this.client.stop();
159
+ this.client = null;
160
+ }
161
+ this.sessions.clear();
162
+ logger.debug('stopped');
163
+ }
164
+ // ── Session management ──────────────────────────────
165
+ async createSession(config) {
166
+ this.ensureClient();
167
+ const pendingPermissions = new Map();
168
+ const pendingQuestions = new Map();
169
+ const sessionConfig = {
170
+ ...(config.sessionId && { sessionId: config.sessionId }),
171
+ ...(config.model && { model: config.model }),
172
+ ...(config.cwd && { workingDirectory: config.cwd }),
173
+ streaming: true,
174
+ onPermissionRequest: this.makePermissionHandler(pendingPermissions),
175
+ onUserInputRequest: this.makeQuestionHandler(pendingQuestions),
176
+ };
177
+ const session = await this.client.createSession(sessionConfig);
178
+ const sid = session.sessionId;
179
+ this.sessions.set(sid, { session, pendingPermissions, pendingQuestions });
180
+ this.wireEvents(sid, session);
181
+ logger.info(`session created: ${sid} (model: ${config.model ?? 'default'})`);
182
+ this.onSessionCreated?.({
183
+ sessionId: sid,
184
+ agent: 'copilot',
185
+ model: config.model,
186
+ });
187
+ return { sessionId: sid };
188
+ }
189
+ async resumeSession(sessionId) {
190
+ await this.resumeTrackedSession(sessionId);
191
+ return { sessionId };
192
+ }
193
+ async sendMessage(sessionId, text, attachments) {
194
+ const opts = { prompt: text };
195
+ if (attachments?.length) {
196
+ opts.attachments = attachments.map((path) => ({ type: 'file', path }));
197
+ }
198
+ let entry = this.getSession(sessionId);
199
+ try {
200
+ await entry.session.send(opts);
201
+ return;
202
+ }
203
+ catch (err) {
204
+ if (!isRecoverableSessionError(err)) {
205
+ this.onError?.(sessionId, { message: getErrorMessage(err) });
206
+ throw err;
207
+ }
208
+ logger.warn({ err, sessionId }, 'Session send failed; attempting resume');
209
+ try {
210
+ entry = await this.resumeTrackedSession(sessionId);
211
+ }
212
+ catch (resumeErr) {
213
+ this.handleUnavailableSession(sessionId, resumeErr);
214
+ throw resumeErr;
215
+ }
216
+ try {
217
+ await entry.session.send(opts);
218
+ }
219
+ catch (retryErr) {
220
+ if (isRecoverableSessionError(retryErr)) {
221
+ this.handleUnavailableSession(sessionId, retryErr);
222
+ }
223
+ else {
224
+ this.onError?.(sessionId, { message: getErrorMessage(retryErr) });
225
+ }
226
+ throw retryErr;
227
+ }
228
+ }
229
+ }
230
+ async respondToPermission(sessionId, permissionId, decision) {
231
+ const entry = this.sessions.get(sessionId);
232
+ if (!entry) {
233
+ logger.warn(`respondToPermission: session not found: ${sessionId}`);
234
+ return;
235
+ }
236
+ const pending = entry.pendingPermissions.get(permissionId);
237
+ if (!pending) {
238
+ logger.warn(`respondToPermission: no pending permission: ${permissionId} (already resolved or timed out)`);
239
+ return;
240
+ }
241
+ // For always_allow: add tool kind to session-scope allow set
242
+ if (decision === 'always_allow' && pending.toolKind) {
243
+ if (!this.sessionAllowSets.has(sessionId)) {
244
+ this.sessionAllowSets.set(sessionId, new Set());
245
+ }
246
+ this.sessionAllowSets.get(sessionId).add(pending.toolKind);
247
+ logger.debug({ sessionId, toolKind: pending.toolKind }, 'Always allow enabled for tool kind');
248
+ // Auto-approve any OTHER pending permissions of the same tool kind in this session
249
+ for (const [otherId, otherPending] of entry.pendingPermissions) {
250
+ if (otherId !== permissionId && otherPending.toolKind === pending.toolKind) {
251
+ otherPending.resolve({ kind: 'approved' });
252
+ entry.pendingPermissions.delete(otherId);
253
+ this.onPermissionAutoResolved?.(sessionId, otherId);
254
+ logger.debug({ permissionId: otherId, sessionId, toolKind: pending.toolKind }, 'permission auto-approved');
255
+ }
256
+ }
257
+ }
258
+ const kindMap = {
259
+ approve: { kind: 'approved' },
260
+ deny: { kind: 'denied-interactively-by-user' },
261
+ always_allow: { kind: 'approved' },
262
+ };
263
+ pending.resolve(kindMap[decision] ?? { kind: 'denied-interactively-by-user' });
264
+ entry.pendingPermissions.delete(permissionId);
265
+ logger.debug({ permissionId, sessionId, decision }, 'permission resolved');
266
+ }
267
+ async respondToQuestion(sessionId, questionId, answer, wasFreeform) {
268
+ const entry = this.sessions.get(sessionId);
269
+ if (!entry) {
270
+ logger.warn(`respondToQuestion: session not found: ${sessionId}`);
271
+ return;
272
+ }
273
+ const pending = entry.pendingQuestions.get(questionId);
274
+ if (!pending) {
275
+ logger.warn(`respondToQuestion: no pending question: ${questionId}`);
276
+ return;
277
+ }
278
+ pending.resolve({ answer, wasFreeform });
279
+ entry.pendingQuestions.delete(questionId);
280
+ }
281
+ async killSession(sessionId) {
282
+ const entry = this.sessions.get(sessionId);
283
+ if (entry) {
284
+ for (const [, p] of entry.pendingPermissions)
285
+ p.resolve({ kind: 'denied-interactively-by-user' });
286
+ for (const [, q] of entry.pendingQuestions)
287
+ q.resolve({ answer: '', wasFreeform: true });
288
+ await entry.session.abort().catch(() => { });
289
+ await entry.session.disconnect();
290
+ this.sessions.delete(sessionId);
291
+ }
292
+ this.cleanupSessionPermissions(sessionId);
293
+ this.onSessionEnded?.(sessionId, { reason: 'killed' });
294
+ logger.info(`session killed: ${sessionId}`);
295
+ }
296
+ async abortSession(sessionId) {
297
+ const entry = this.sessions.get(sessionId);
298
+ if (entry) {
299
+ for (const [, p] of entry.pendingPermissions)
300
+ p.resolve({ kind: 'denied-interactively-by-user' });
301
+ for (const [, q] of entry.pendingQuestions)
302
+ q.resolve({ answer: '', wasFreeform: true });
303
+ entry.pendingPermissions.clear();
304
+ entry.pendingQuestions.clear();
305
+ await entry.session.abort();
306
+ logger.debug({ sessionId }, 'session aborted');
307
+ }
308
+ }
309
+ async listSessions() {
310
+ if (!this.client)
311
+ return [];
312
+ const list = await this.client.listSessions();
313
+ return list.map((s) => ({
314
+ id: s.sessionId,
315
+ state: this.sessions.has(s.sessionId) ? 'active' : 'ended',
316
+ model: undefined,
317
+ cwd: s.context?.cwd,
318
+ summary: s.summary ?? '',
319
+ }));
320
+ }
321
+ async listModels() {
322
+ if (!this.client)
323
+ return [];
324
+ try {
325
+ const models = await this.client.listModels();
326
+ return models.map((m) => m.id);
327
+ }
328
+ catch {
329
+ return [];
330
+ }
331
+ }
332
+ /** Set permission mode for a session ('ask' or 'auto') */
333
+ setSessionMode(sessionId, mode) {
334
+ this.sessionModes.set(sessionId, mode);
335
+ logger.debug({ sessionId, mode }, 'Session permission mode changed');
336
+ }
337
+ /** Clean up session-scoped permission state */
338
+ cleanupSessionPermissions(sessionId) {
339
+ this.sessionAllowSets.delete(sessionId);
340
+ this.sessionModes.delete(sessionId);
341
+ }
342
+ makeResumeConfig(pendingPermissions, pendingQuestions) {
343
+ return {
344
+ onPermissionRequest: this.makePermissionHandler(pendingPermissions),
345
+ onUserInputRequest: this.makeQuestionHandler(pendingQuestions),
346
+ };
347
+ }
348
+ async resumeTrackedSession(sessionId) {
349
+ this.ensureClient();
350
+ const pendingPermissions = new Map();
351
+ const pendingQuestions = new Map();
352
+ const session = await this.client.resumeSession(sessionId, this.makeResumeConfig(pendingPermissions, pendingQuestions));
353
+ const entry = { session, pendingPermissions, pendingQuestions };
354
+ this.sessions.set(sessionId, entry);
355
+ this.wireEvents(sessionId, session);
356
+ logger.debug({ sessionId }, 'session resumed');
357
+ return entry;
358
+ }
359
+ handleUnavailableSession(sessionId, err) {
360
+ const entry = this.sessions.get(sessionId);
361
+ if (entry) {
362
+ for (const [, p] of entry.pendingPermissions)
363
+ p.resolve({ kind: 'denied-interactively-by-user' });
364
+ for (const [, q] of entry.pendingQuestions)
365
+ q.resolve({ answer: '', wasFreeform: true });
366
+ entry.pendingPermissions.clear();
367
+ entry.pendingQuestions.clear();
368
+ }
369
+ this.sessions.delete(sessionId);
370
+ this.cleanupSessionPermissions(sessionId);
371
+ logger.warn({ err, sessionId }, 'Session became unavailable');
372
+ this.onError?.(sessionId, {
373
+ message: 'Session is no longer active in Copilot. Please start a new session.',
374
+ });
375
+ this.onSessionEnded?.(sessionId, { reason: 'session unavailable' });
376
+ }
377
+ // ── SDK → callback wiring ─────────────────────────
378
+ wireEvents(sessionId, session) {
379
+ session.on('assistant.message_delta', (event) => {
380
+ this.onMessageDelta?.(sessionId, { content: event.data.deltaContent });
381
+ });
382
+ session.on('assistant.message', (event) => {
383
+ // Skip empty messages (SDK sends these before tool calls)
384
+ if (event.data.content) {
385
+ this.onMessage?.(sessionId, { content: event.data.content });
386
+ }
387
+ });
388
+ session.on('tool.execution_start', (event) => {
389
+ const data = event.data;
390
+ this.onToolStart?.(sessionId, {
391
+ toolName: data.toolName,
392
+ args: (data.args ?? data.arguments ?? {}),
393
+ toolCallId: data.toolCallId,
394
+ });
395
+ });
396
+ session.on('tool.execution_complete', (event) => {
397
+ const data = event.data;
398
+ const rawResult = data.result;
399
+ // SDK sends result as { content: string } or as a plain string
400
+ const result = typeof rawResult === 'object' && rawResult !== null
401
+ ? rawResult.content ?? ''
402
+ : (rawResult ?? data.output ?? '');
403
+ this.onToolComplete?.(sessionId, {
404
+ toolName: data.toolName,
405
+ result,
406
+ toolCallId: data.toolCallId,
407
+ });
408
+ });
409
+ session.on('session.idle', () => {
410
+ this.onIdle?.(sessionId);
411
+ });
412
+ session.on('assistant.turn_end', (event) => {
413
+ const data = event.data;
414
+ const reason = data?.reason;
415
+ if (reason === 'error') {
416
+ this.onError?.(sessionId, {
417
+ message: data?.error ?? 'Unknown agent error',
418
+ });
419
+ }
420
+ });
421
+ }
422
+ // ── Permission handler factory ────────────────────
423
+ makePermissionHandler(pending) {
424
+ return (req, invocation) => {
425
+ const sessionId = invocation.sessionId;
426
+ const toolKind = req.kind; // e.g. 'shell', 'write', 'read', 'url', 'mcp'
427
+ // Layer 1: Auto mode — approve everything in this session
428
+ if (this.sessionModes.get(sessionId) === 'auto') {
429
+ logger.debug({ sessionId, toolKind }, 'permission auto-approved');
430
+ return { kind: 'approved' };
431
+ }
432
+ // Layer 3: Session allow set — auto-approve if previously "Always Allowed"
433
+ if (this.sessionAllowSets.get(sessionId)?.has(toolKind)) {
434
+ logger.debug({ sessionId, toolKind }, 'permission auto-approved');
435
+ return { kind: 'approved' };
436
+ }
437
+ // Not auto-approved — send to relay for user decision
438
+ const permId = makeId('perm');
439
+ const parsed = parsePermission(req);
440
+ logger.debug({
441
+ permissionId: permId,
442
+ sessionId,
443
+ toolKind,
444
+ toolName: parsed.toolArgs.toolName,
445
+ }, 'permission requested');
446
+ this.onPermissionRequest?.(sessionId, {
447
+ id: permId,
448
+ ...parsed,
449
+ });
450
+ const promise = new Promise((resolve) => {
451
+ pending.set(permId, { resolve, toolKind });
452
+ });
453
+ return promise;
454
+ };
455
+ }
456
+ // ── Question handler factory ──────────────────────
457
+ makeQuestionHandler(pending) {
458
+ return (req, invocation) => {
459
+ const qId = makeId('q');
460
+ logger.debug({
461
+ questionId: qId,
462
+ sessionId: invocation.sessionId,
463
+ choicesCount: req.choices?.length ?? 0,
464
+ allowFreeform: req.allowFreeform !== false,
465
+ }, 'question requested');
466
+ this.onQuestionRequest?.(invocation.sessionId, {
467
+ id: qId,
468
+ question: req.question ?? '',
469
+ choices: req.choices ?? undefined,
470
+ allowFreeform: req.allowFreeform !== false,
471
+ });
472
+ return new Promise((resolve) => {
473
+ pending.set(qId, { resolve });
474
+ });
475
+ };
476
+ }
477
+ // ── Guards ────────────────────────────────────────
478
+ ensureClient() {
479
+ if (!this.client)
480
+ throw new Error('Adapter not started — call start() first');
481
+ }
482
+ getSession(sessionId) {
483
+ const entry = this.sessions.get(sessionId);
484
+ if (!entry)
485
+ throw new Error(`Session not found: ${sessionId}`);
486
+ return entry;
487
+ }
488
+ }
489
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/adapters/copilot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { AgentAdapter } from './base.js';
2
+ export { CopilotAdapter } from './copilot.js';
3
+ export type { CreateSessionConfig, SessionInfo, PermissionDecision, SessionCreatedEvent, MessageEvent, MessageDeltaEvent, PermissionRequestEvent, QuestionRequestEvent, ToolStartEvent, ToolCompleteEvent, SessionEndedEvent, ErrorEvent, } from './base.js';
4
+ export { parsePermission } from '../parse-permission.js';
5
+ export type { ParsedPermission } from '../parse-permission.js';
@@ -0,0 +1,4 @@
1
+ export { AgentAdapter } from './base.js';
2
+ export { CopilotAdapter } from './copilot.js';
3
+ export { parsePermission } from '../parse-permission.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAkB9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1 @@
1
+ {"lines": [" .:--:. ", " .:-========-:. ", " .:-================-: ", " =+===================- ", " =++++----=====---====- ", " =+++= ==== :===- ", " =++++-::-+===:..:====- ", " .:. -++++++++++++========: .:. ", ".#%@%- =*+++++++++++===+= -%@%#.", ":@@@@+ =+**+++++++++++++= +@@@@:", " *@@@%*==+##**+:====+**+:+**##+==*%@@@+ ", " -#%@@@@@@@%+ ====+*** +%@@@@@@@%#- ", " .-=++**+=-.:====****-:-**##++=-. ", " .-========:-+*******+. ", " .::--:. :-===-. "], "colors": [[[17, 4, 67, 66], [18, 7, 112, 110], [19, 7, 132, 130], [20, 7, 132, 130], [21, 7, 112, 110], [22, 4, 67, 65]], [[13, 4, 65, 64], [14, 6, 108, 106], [15, 8, 147, 145], [16, 9, 174, 171], [17, 10, 187, 184], [18, 9, 189, 186], [19, 9, 188, 185], [20, 9, 188, 185], [21, 10, 189, 186], [22, 10, 187, 184], [23, 10, 174, 171], [24, 8, 147, 144], [25, 6, 107, 106], [26, 4, 64, 63]], [[9, 3, 43, 42], [10, 7, 112, 110], [11, 9, 150, 148], [12, 9, 178, 175], [13, 10, 190, 187], [14, 9, 191, 188], [15, 9, 188, 185], [16, 9, 186, 183], [17, 9, 184, 181], [18, 9, 184, 181], [19, 9, 184, 181], [20, 9, 184, 181], [21, 9, 184, 181], [22, 9, 184, 181], [23, 9, 186, 183], [24, 9, 189, 185], [25, 10, 191, 188], [26, 10, 190, 187], [27, 9, 178, 175], [28, 8, 152, 149], [29, 7, 113, 111], [30, 3, 40, 40]], [[9, 4, 200, 190], [10, 5, 237, 230], [11, 8, 205, 199], [12, 9, 186, 183], [13, 9, 182, 179], [14, 9, 187, 184], [15, 9, 190, 187], [16, 9, 190, 187], [17, 9, 187, 184], [18, 9, 184, 181], [19, 9, 184, 181], [20, 9, 184, 181], [21, 9, 184, 181], [22, 9, 186, 183], [23, 9, 190, 187], [24, 9, 190, 187], [25, 9, 188, 185], [26, 9, 185, 182], [27, 9, 185, 182], [28, 9, 188, 185], [29, 10, 196, 192], [30, 9, 148, 146]], [[9, 3, 210, 199], [10, 0, 255, 251], [11, 0, 255, 243], [12, 2, 241, 230], [13, 6, 215, 208], [14, 9, 158, 155], [15, 8, 126, 124], [16, 8, 130, 129], [17, 9, 166, 164], [18, 10, 186, 183], [19, 10, 184, 181], [20, 9, 184, 181], [21, 10, 186, 182], [22, 10, 170, 168], [23, 8, 132, 131], [24, 8, 125, 123], [25, 9, 150, 148], [26, 9, 183, 180], [27, 9, 184, 181], [28, 9, 184, 181], [29, 10, 188, 185], [30, 9, 150, 148]], [[9, 3, 208, 198], [10, 0, 255, 249], [11, 0, 255, 243], [12, 0, 255, 251], [13, 2, 192, 182], [18, 10, 171, 168], [19, 9, 184, 181], [20, 9, 185, 182], [21, 10, 180, 178], [22, 3, 36, 36], [26, 7, 116, 114], [27, 9, 191, 187], [28, 9, 184, 181], [29, 10, 188, 185], [30, 9, 149, 147]], [[9, 3, 214, 203], [10, 0, 255, 251], [11, 0, 255, 243], [12, 0, 255, 245], [13, 1, 240, 229], [14, 2, 150, 141], [15, 1, 98, 92], [16, 1, 93, 88], [17, 2, 138, 131], [18, 5, 223, 214], [19, 8, 202, 196], [20, 9, 185, 182], [21, 10, 181, 179], [22, 7, 111, 110], [23, 4, 69, 67], [24, 4, 69, 68], [25, 6, 100, 99], [26, 9, 168, 165], [27, 9, 186, 183], [28, 9, 184, 181], [29, 9, 190, 187], [30, 9, 153, 151]], [[2, 49, 49, 49], [3, 59, 60, 60], [4, 31, 32, 32], [9, 3, 144, 137], [10, 1, 244, 238], [11, 0, 255, 247], [12, 0, 255, 246], [13, 0, 255, 247], [14, 0, 255, 253], [15, 0, 255, 252], [16, 0, 255, 251], [17, 0, 255, 252], [18, 0, 255, 246], [19, 0, 255, 243], [20, 2, 241, 230], [21, 5, 217, 209], [22, 9, 200, 195], [23, 10, 189, 186], [24, 10, 188, 185], [25, 10, 190, 187], [26, 9, 184, 181], [27, 10, 181, 178], [28, 10, 184, 181], [29, 10, 180, 177], [30, 7, 103, 102], [35, 32, 32, 33], [36, 59, 60, 60], [37, 49, 49, 49]], [[0, 32, 32, 32], [1, 204, 204, 204], [2, 253, 253, 253], [3, 255, 255, 255], [4, 241, 241, 241], [5, 96, 97, 97], [11, 113, 133, 148], [12, 115, 194, 209], [13, 56, 223, 224], [14, 15, 247, 238], [15, 0, 255, 246], [16, 0, 255, 246], [17, 0, 255, 245], [18, 0, 255, 244], [19, 0, 255, 244], [20, 0, 255, 245], [21, 0, 255, 246], [22, 0, 255, 241], [23, 0, 240, 228], [24, 4, 211, 204], [25, 9, 191, 187], [26, 8, 200, 195], [27, 6, 219, 215], [28, 7, 177, 170], [34, 96, 97, 97], [35, 241, 241, 241], [36, 255, 255, 255], [37, 253, 253, 253], [38, 205, 206, 206], [39, 32, 33, 33]], [[0, 61, 62, 62], [1, 255, 255, 255], [2, 255, 255, 255], [3, 255, 255, 255], [4, 255, 255, 255], [5, 166, 167, 167], [11, 217, 80, 119], [12, 255, 102, 151], [13, 254, 107, 153], [14, 229, 126, 167], [15, 143, 151, 172], [16, 2, 216, 208], [17, 2, 238, 229], [18, 1, 249, 238], [19, 1, 253, 241], [20, 7, 251, 240], [21, 20, 244, 236], [22, 61, 221, 222], [23, 118, 185, 198], [24, 34, 220, 214], [25, 1, 254, 245], [26, 0, 255, 243], [27, 0, 255, 250], [28, 0, 216, 205], [34, 165, 166, 166], [35, 255, 255, 255], [36, 255, 255, 255], [37, 255, 255, 255], [38, 255, 255, 255], [39, 60, 60, 61]], [[1, 171, 172, 172], [2, 255, 255, 255], [3, 255, 255, 255], [4, 255, 255, 255], [5, 250, 251, 251], [6, 182, 183, 183], [7, 125, 125, 125], [8, 114, 114, 114], [9, 145, 146, 146], [10, 217, 189, 197], [11, 255, 172, 198], [12, 255, 138, 174], [13, 255, 122, 166], [14, 244, 99, 143], [15, 82, 51, 64], [16, 4, 171, 167], [17, 9, 185, 182], [18, 6, 191, 186], [19, 22, 191, 188], [20, 198, 137, 168], [21, 232, 122, 162], [22, 255, 108, 154], [23, 255, 96, 143], [24, 53, 79, 85], [25, 1, 233, 224], [26, 20, 255, 253], [27, 55, 255, 247], [28, 114, 255, 252], [29, 174, 222, 219], [30, 150, 149, 149], [31, 114, 115, 115], [32, 123, 124, 124], [33, 180, 180, 180], [34, 250, 250, 250], [35, 255, 255, 255], [36, 255, 255, 255], [37, 255, 255, 255], [38, 169, 170, 170]], [[2, 112, 112, 112], [3, 212, 212, 212], [4, 254, 254, 254], [5, 255, 255, 255], [6, 255, 255, 255], [7, 255, 255, 255], [8, 255, 255, 255], [9, 255, 255, 255], [10, 255, 255, 255], [11, 255, 255, 255], [12, 234, 249, 249], [13, 162, 154, 161], [14, 46, 16, 22], [16, 10, 175, 173], [17, 9, 186, 183], [18, 6, 184, 180], [19, 26, 178, 178], [20, 237, 113, 154], [21, 255, 105, 153], [22, 255, 108, 155], [23, 251, 108, 151], [26, 135, 163, 164], [27, 254, 244, 247], [28, 255, 255, 255], [29, 255, 255, 255], [30, 255, 255, 255], [31, 255, 255, 255], [32, 255, 255, 255], [33, 255, 255, 255], [34, 255, 255, 255], [35, 253, 253, 253], [36, 210, 211, 211], [37, 110, 110, 111]], [[4, 54, 54, 54], [5, 102, 103, 103], [6, 137, 138, 138], [7, 155, 156, 156], [8, 158, 161, 161], [9, 148, 218, 217], [10, 120, 222, 220], [11, 77, 205, 202], [12, 31, 195, 191], [13, 1, 129, 126], [14, 0, 72, 70], [15, 6, 104, 102], [16, 10, 182, 179], [17, 9, 185, 182], [18, 6, 187, 183], [19, 26, 184, 184], [20, 240, 119, 160], [21, 255, 109, 156], [22, 255, 109, 154], [23, 253, 108, 154], [24, 153, 66, 92], [25, 102, 40, 57], [26, 170, 67, 97], [27, 255, 124, 165], [28, 255, 150, 182], [29, 255, 178, 203], [30, 249, 189, 207], [31, 164, 161, 162], [32, 155, 155, 156], [33, 137, 137, 137], [34, 102, 102, 102], [35, 53, 54, 54]], [[9, 0, 57, 56], [10, 0, 156, 153], [11, 2, 184, 181], [12, 6, 188, 185], [13, 9, 193, 190], [14, 10, 195, 192], [15, 10, 195, 192], [16, 9, 190, 187], [17, 10, 188, 185], [18, 9, 173, 171], [19, 7, 95, 94], [20, 126, 56, 77], [21, 232, 100, 142], [22, 255, 110, 157], [23, 255, 111, 159], [24, 255, 115, 163], [25, 255, 115, 163], [26, 255, 114, 162], [27, 255, 109, 157], [28, 255, 105, 152], [29, 215, 88, 128], [30, 88, 33, 49]], [[11, 4, 57, 57], [12, 6, 98, 98], [13, 8, 123, 122], [14, 8, 132, 131], [15, 8, 128, 126], [16, 7, 109, 107], [17, 5, 73, 72], [22, 94, 41, 57], [23, 144, 63, 88], [24, 173, 75, 105], [25, 180, 78, 109], [26, 168, 72, 102], [27, 133, 58, 81], [28, 77, 34, 47]]], "w": 40, "h": 15}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Animated ASCII banner for Kraki CLI.
3
+ * Renders a colored octopus logo with radial reveal + title animation.
4
+ */
5
+ export declare function printAnimatedBanner(): Promise<void>;
6
+ /** Static (non-animated) banner for quick display */
7
+ export declare function printStaticBanner(): void;