@zonease/happy 0.6.47 → 0.6.49

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 (87) hide show
  1. package/dist/{api-L9jLLtI1.mjs → api-DgjBoynq.mjs} +2 -2
  2. package/dist/{api-mv48hjhj.cjs → api-OthK5iIu.cjs} +3 -3
  3. package/dist/{auth-InL7fBsz.mjs → auth-B1jRZqn6.mjs} +4 -4
  4. package/dist/{auth-BoWfky2q.mjs → auth-BCH_VzFY.mjs} +2 -2
  5. package/dist/{auth-DfQYhTlg.cjs → auth-BpoPI35K.cjs} +2 -2
  6. package/dist/{auth-0qbD9TEm.cjs → auth-jlHlPGoI.cjs} +4 -4
  7. package/dist/{browser-CF-r2ami.cjs → browser-BPhM1lYb.cjs} +1 -1
  8. package/dist/{browser-D9jMe1me.mjs → browser-oD4Fhplt.mjs} +1 -1
  9. package/dist/{claudeLocal-CFEXiYts.mjs → claudeLocal-BgGmploP.mjs} +1 -1
  10. package/dist/{claudeLocal-DOfhf6VK.cjs → claudeLocal-D1aqQU3U.cjs} +1 -1
  11. package/dist/codex/happyMcpStdioBridge.cjs +17 -1
  12. package/dist/codex/happyMcpStdioBridge.mjs +17 -1
  13. package/dist/{config-BBm54d_L.mjs → config-DxrAXlTx.mjs} +1 -1
  14. package/dist/{config-ByyclMMi.cjs → config-L19Onew4.cjs} +1 -1
  15. package/dist/{connect-B5JhnDTy.mjs → connect-BhvDYGh7.mjs} +4 -4
  16. package/dist/{connect-CIOfZYj-.cjs → connect-CcSN3IFE.cjs} +4 -4
  17. package/dist/{controlClient-P5wJhu1R.mjs → controlClient-BXUvvi9h.mjs} +1 -1
  18. package/dist/{controlClient-DMEMVw4Y.cjs → controlClient-DEk3NLK2.cjs} +1 -1
  19. package/dist/{cursorApprovalHook-C9mdmRIx.cjs → cursorApprovalHook-Bg8pIGZk.cjs} +2 -2
  20. package/dist/{cursorApprovalHook-DplHRbGK.mjs → cursorApprovalHook-YOYQPiFb.mjs} +2 -2
  21. package/dist/{cursorApprovalServer-C9y5dYDE.mjs → cursorApprovalServer-CU4HY7HJ.mjs} +1 -1
  22. package/dist/{cursorApprovalServer-BoI6qBTg.cjs → cursorApprovalServer-PWI0z_6u.cjs} +1 -1
  23. package/dist/{deviceKeys-tcvwm4KA.mjs → deviceKeys-BghZEVQM.mjs} +2 -2
  24. package/dist/{deviceKeys-CzqNNlG1.cjs → deviceKeys-CdzEV43E.cjs} +2 -2
  25. package/dist/{doctor-CXYhUN9A.mjs → doctor-36V4kFd8.mjs} +2 -2
  26. package/dist/{doctor-CBbj6YEl.cjs → doctor-BqwlWV1d.cjs} +2 -2
  27. package/dist/{downloadImage-CRkycWIl.cjs → downloadImage-CRORmK1A.cjs} +1 -1
  28. package/dist/{downloadImage-CpnQ3aS1.mjs → downloadImage-qav0UxBl.mjs} +1 -1
  29. package/dist/{enroll-CyikRwm7.cjs → enroll-Cb0zEeTI.cjs} +3 -3
  30. package/dist/{enroll-CYNDVSIH.mjs → enroll-DXtOuJIO.mjs} +3 -3
  31. package/dist/{evidence-DAu9vtgh.mjs → evidence-P6qtF1Rg.mjs} +1 -1
  32. package/dist/{evidence-CuGxhBQm.cjs → evidence-RbJyaUHb.cjs} +1 -1
  33. package/dist/{formatImageMessage-ZJZza9-9.mjs → formatImageMessage-Biyy3pJR.mjs} +1 -1
  34. package/dist/{formatImageMessage-CqonqpiB.cjs → formatImageMessage-D-tA2oNc.cjs} +1 -1
  35. package/dist/index.cjs +46 -46
  36. package/dist/index.mjs +46 -46
  37. package/dist/{install-_GiK-K1X.cjs → install-B8z_dWSt.cjs} +1 -1
  38. package/dist/{install-5H5Lh58Z.mjs → install-BcqdmvrF.mjs} +2 -2
  39. package/dist/{install-X4JLGAi3.cjs → install-C3C0NZfP.cjs} +2 -2
  40. package/dist/{install-Cma2vLWa.mjs → install-CdGqsOnL.mjs} +1 -1
  41. package/dist/lib.cjs +3 -3
  42. package/dist/lib.d.cts +24 -24
  43. package/dist/lib.d.mts +24 -24
  44. package/dist/lib.mjs +3 -3
  45. package/dist/{loadableToolOutput-sf6E72GE.cjs → loadableToolOutput-Bv22WdF2.cjs} +2 -2
  46. package/dist/{loadableToolOutput-4qF6EX0y.mjs → loadableToolOutput-DvlJj7PM.mjs} +2 -2
  47. package/dist/{persistence-B_w4o5z-.cjs → persistence-BJVrfFPM.cjs} +1 -1
  48. package/dist/{persistence-D2aRTiT1.mjs → persistence-CO8Q0Eh6.mjs} +1 -1
  49. package/dist/{push-BiBqn-pk.mjs → push-CCHjRbpg.mjs} +6 -6
  50. package/dist/{push-Df6QabEp.cjs → push-Dd-L84fo.cjs} +6 -6
  51. package/dist/{registerKillSessionHandler-DUrOhiGo.cjs → registerKillSessionHandler-Bdw4uNLH.cjs} +104 -5
  52. package/dist/{registerKillSessionHandler-AcpB6OSk.mjs → registerKillSessionHandler-OVE8Wm5b.mjs} +104 -5
  53. package/dist/{run-DclH1MRm.cjs → run-B5dg8uPo.cjs} +8 -8
  54. package/dist/{run-D6oXm1Jk.mjs → run-C-nwXCvH.mjs} +8 -8
  55. package/dist/{runClaude--M8lVtqr.mjs → runClaude-CIv33AyB.mjs} +15 -15
  56. package/dist/{runClaude-BfLi7f2N.cjs → runClaude-rkxGCTc2.cjs} +16 -16
  57. package/dist/{runCodex-DdcEe5bM.cjs → runCodex-4DUH4CWf.cjs} +17 -17
  58. package/dist/{runCodex-DatWk57y.mjs → runCodex-BCn2QxAJ.mjs} +17 -17
  59. package/dist/{runCursor-DxcT7Qtj.mjs → runCursor-PuI6WtK0.mjs} +15 -15
  60. package/dist/{runCursor-CszdTKDp.cjs → runCursor-tnmFljyu.cjs} +15 -15
  61. package/dist/{runGemini-41p6X_zo.mjs → runGemini-Bxfxy6t6.mjs} +28 -19
  62. package/dist/{runGemini-sAOJNh2V.cjs → runGemini-bhDI2ujI.cjs} +28 -19
  63. package/dist/{runOneShot-NBUWEobi.mjs → runOneShot-Cz0qgY3b.mjs} +2 -2
  64. package/dist/{runOneShot-m6HO3H5c.cjs → runOneShot-DZPmurJy.cjs} +2 -2
  65. package/dist/{serve-CUNdZ2ps.cjs → serve-BCRnyQ4F.cjs} +6 -6
  66. package/dist/{serve-B84oK7m-.mjs → serve-CoS-cmqV.mjs} +6 -6
  67. package/dist/{session-De8UTFFI.cjs → session-CaKRQ1bu.cjs} +5 -5
  68. package/dist/{session-9-fr4sTn.mjs → session-DzpncZby.mjs} +5 -5
  69. package/dist/{sessionKeyCache-DYuPkw5Z.cjs → sessionKeyCache-BOxbaLH3.cjs} +1 -1
  70. package/dist/{sessionKeyCache-CEJH5cHj.mjs → sessionKeyCache-D9_P4Mhm.mjs} +1 -1
  71. package/dist/{sessionList-KhgmL10v.cjs → sessionList-CZ1V-BWl.cjs} +2 -2
  72. package/dist/{sessionList-Dd4fyhNe.mjs → sessionList-M3ku4NEP.mjs} +2 -2
  73. package/dist/{sessionSummary-CYsvjLpK.mjs → sessionSummary-C_9HquPy.mjs} +3 -3
  74. package/dist/{sessionSummary-u-kSmPto.cjs → sessionSummary-PRYuMFfS.cjs} +3 -3
  75. package/dist/{setupOfflineReconnection-2m0GAIU5.mjs → setupOfflineReconnection-B1YuEpwl.mjs} +3 -3
  76. package/dist/{setupOfflineReconnection-BkAr6jAB.cjs → setupOfflineReconnection-BHuXHSbt.cjs} +3 -3
  77. package/dist/{spawnHappyCLI-T9EQFmAR.cjs → spawnHappyCLI-C6Peiy6h.cjs} +1 -1
  78. package/dist/{spawnHappyCLI-CG_S7LH1.mjs → spawnHappyCLI-C7Fu7xsF.mjs} +1 -1
  79. package/dist/{ssh-C4nI67Vq.cjs → ssh-C0ypGPrZ.cjs} +5 -5
  80. package/dist/{ssh-BTVqCokU.mjs → ssh-D7J3y8Sm.mjs} +5 -5
  81. package/dist/{task-DzqzVDDn.mjs → task-BN2-cCP5.mjs} +6 -6
  82. package/dist/{task-AWrQbs-h.cjs → task-DU_iFaZC.cjs} +6 -6
  83. package/dist/{uninstall-BRDV8214.cjs → uninstall-BnlnB4_5.cjs} +2 -2
  84. package/dist/{uninstall-394a0fgf.mjs → uninstall-Ct0m04sQ.mjs} +2 -2
  85. package/dist/{update-CZIaB80S.cjs → update-CyNRfAss.cjs} +3 -3
  86. package/dist/{update-DLqQQtYc.mjs → update-GmSUgswj.mjs} +3 -3
  87. package/package.json +1 -1
@@ -5,8 +5,8 @@ import { createServer } from 'node:http';
5
5
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
6
  import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
7
7
  import { z } from 'zod';
8
- import { c as configuration, l as logger, r as readCredentials } from './persistence-D2aRTiT1.mjs';
9
- import { l as listDevices, d as deviceExec } from './deviceKeys-tcvwm4KA.mjs';
8
+ import { c as configuration, l as logger, r as readCredentials } from './persistence-CO8Q0Eh6.mjs';
9
+ import { l as listDevices, d as deviceExec } from './deviceKeys-BghZEVQM.mjs';
10
10
  import axios from 'axios';
11
11
  import { stat, readFile } from 'node:fs/promises';
12
12
  import { randomUUID } from 'node:crypto';
@@ -16,7 +16,7 @@ import './index-DTV7drqs.mjs';
16
16
  import { execSync } from 'node:child_process';
17
17
  import 'node:events';
18
18
  import 'socket.io-client';
19
- import './api-L9jLLtI1.mjs';
19
+ import './api-DgjBoynq.mjs';
20
20
  import 'tweetnacl';
21
21
  import 'ws';
22
22
  import 'crypto';
@@ -38,6 +38,28 @@ const IMAGE_MIME_TYPES = {
38
38
  function authHeaders(credentials) {
39
39
  return { headers: { Authorization: `Bearer ${credentials.token}` }, timeout: 15e3 };
40
40
  }
41
+ async function listBugs(credentials, input = {}) {
42
+ const response = await axios.get(
43
+ `${configuration.serverUrl}/v1/bugs`,
44
+ {
45
+ params: {
46
+ ...input.status ? { status: input.status } : {},
47
+ ...input.query ? { query: input.query } : {},
48
+ limit: input.limit ?? 50
49
+ },
50
+ ...authHeaders(credentials)
51
+ }
52
+ );
53
+ return response.data;
54
+ }
55
+ async function getBug(credentials, reference) {
56
+ const bugId = await resolveBugId(credentials, reference);
57
+ const response = await axios.get(
58
+ `${configuration.serverUrl}/v1/bugs/${bugId}`,
59
+ authHeaders(credentials)
60
+ );
61
+ return response.data.bug;
62
+ }
41
63
  async function resolveBugId(credentials, reference) {
42
64
  const trimmed = reference.trim();
43
65
  const displayNumber = trimmed.replace(/^#/, "").match(/^(?:bug-)?(\d+)$/i)?.[1];
@@ -146,6 +168,36 @@ function toToolError(message, details) {
146
168
  isError: true
147
169
  };
148
170
  }
171
+ const asDate = (ms) => new Date(ms).toISOString().slice(0, 10);
172
+ function formatBugDetail(bug) {
173
+ const sections = [
174
+ `${bug.displayId} [${bug.status}] ${bug.visibility}`,
175
+ `${bug.title}`,
176
+ `filed by ${bug.createdByNickname ?? "unknown"}${bug.lastActivityAt ? `, last activity ${asDate(bug.lastActivityAt)}` : ""}`,
177
+ `
178
+ --- description ---
179
+ ${bug.description}`
180
+ ];
181
+ if (bug.attachments.length) {
182
+ sections.push(`
183
+ --- attachments (${bug.attachments.length}) ---
184
+ ${bug.attachments.map((a) => `${a.mimeType} ${a.width ?? "?"}x${a.height ?? "?"} ${a.url}`).join("\n")}`);
185
+ }
186
+ if (bug.comments.length) {
187
+ sections.push(`
188
+ --- comments (${bug.comments.length}) ---
189
+ ${bug.comments.map((c) => [
190
+ `[${asDate(c.createdAt)}] ${c.authorNickname ?? "unknown"}: ${c.body}`,
191
+ ...c.attachments.map((a) => ` + ${a.mimeType} ${a.url}`)
192
+ ].join("\n")).join("\n")}`);
193
+ }
194
+ if (bug.statusHistory.length) {
195
+ sections.push(`
196
+ --- history (${bug.statusHistory.length}) ---
197
+ ${bug.statusHistory.map((h) => `${asDate(h.createdAt)} ${h.fromStatus ? `${h.fromStatus} \u2192 ${h.toStatus}` : h.action} by ${h.actorNickname ?? "unknown"}${h.note ? ` (${h.note})` : ""}`).join("\n")}`);
198
+ }
199
+ return sections.join("\n");
200
+ }
149
201
  function createMcpServer(client, options) {
150
202
  const mcp = new McpServer({
151
203
  name: "Happy MCP",
@@ -296,12 +348,59 @@ ${result.stderr}`);
296
348
  return toToolError(`Failed to submit bug: ${error instanceof Error ? error.message : String(error)}`);
297
349
  }
298
350
  });
351
+ mcp.registerTool("list_bugs", {
352
+ description: "List bugs on the user's Happy bug board. Use to answer what is open, to find a bug the user is describing, or to get its number before editing or deleting it.",
353
+ title: "List Bugs",
354
+ inputSchema: {
355
+ status: z.enum(["pending", "in_progress", "verify", "closed"]).optional().describe("Only bugs in this state"),
356
+ query: z.string().describe("Free text matched against number, title, description, author and status").optional(),
357
+ limit: z.number().int().min(1).max(200).optional().describe("How many to return, 50 by default")
358
+ }
359
+ }, async (args) => {
360
+ const credentials = await readCredentials();
361
+ if (!credentials) {
362
+ return toToolError("No Happy credentials on this machine.");
363
+ }
364
+ try {
365
+ const { bugs, pendingCount } = await listBugs(credentials, args);
366
+ const lines = bugs.map((bug) => {
367
+ const counts = [
368
+ bug.attachmentCount ? `${bug.attachmentCount} images` : "",
369
+ bug.commentCount ? `${bug.commentCount} comments` : ""
370
+ ].filter(Boolean).join(", ");
371
+ const activity = bug.lastActivityAt ? new Date(bug.lastActivityAt).toISOString().slice(0, 10) : "";
372
+ return `${bug.displayId} [${bug.status}] ${bug.title}${bug.createdByNickname ? ` \u2014 ${bug.createdByNickname}` : ""}${counts ? ` (${counts})` : ""}${activity ? ` ${activity}` : ""}`;
373
+ });
374
+ const header = `${bugs.length} bugs shown, ${pendingCount} pending on the board`;
375
+ return { content: [{ type: "text", text: lines.length ? `${header}
376
+ ${lines.join("\n")}` : header }] };
377
+ } catch (error) {
378
+ return toToolError(`Failed to list bugs: ${error instanceof Error ? error.message : String(error)}`);
379
+ }
380
+ });
381
+ mcp.registerTool("get_bug", {
382
+ description: "Read one bug in full from the user's Happy bug board: its description, screenshots, every comment and how it moved between states. Use when the user asks about a specific bug, or before editing one so the rewrite keeps what is still true.",
383
+ title: "Get Bug",
384
+ inputSchema: {
385
+ bug: z.string().describe('Which bug, as the user refers to it: "BUG-236", "#236" or "236". An internal bug id also works.')
386
+ }
387
+ }, async (args) => {
388
+ const credentials = await readCredentials();
389
+ if (!credentials) {
390
+ return toToolError("No Happy credentials on this machine.");
391
+ }
392
+ try {
393
+ return { content: [{ type: "text", text: formatBugDetail(await getBug(credentials, args.bug)) }] };
394
+ } catch (error) {
395
+ return toToolError(`Failed to read bug: ${error instanceof Error ? error.message : String(error)}`);
396
+ }
397
+ });
299
398
  mcp.registerTool("edit_bug", {
300
399
  description: "Change a bug already on the user's Happy bug board: rewrite its description, add screenshots to it, or both. Use when the user wants to correct, expand or illustrate an existing bug.",
301
400
  title: "Edit Bug",
302
401
  inputSchema: {
303
402
  bug: z.string().describe('Which bug, as the user refers to it: "BUG-236", "#236" or "236". An internal bug id also works.'),
304
- description: z.string().optional().describe("The full replacement description. It replaces the old one outright, so carry over anything still true. Omit to leave the description alone."),
403
+ description: z.string().optional().describe("The full replacement description. It replaces the old one outright, so carry over anything still true \u2014 including any [[bug-image:N]] markers, which is where the Nth screenshot appears inline. Drop a marker and that image moves to the end. Omit this field to leave the description alone."),
305
404
  images: z.array(z.string()).optional().describe("Absolute paths to screenshots on this machine, added to any already on the bug. JPEG and PNG only, 10 per bug in total, 20MB each.")
306
405
  }
307
406
  }, async (args) => {
@@ -341,7 +440,7 @@ ${result.stderr}`);
341
440
  async function startHappyServer(client) {
342
441
  const transports = /* @__PURE__ */ new Map();
343
442
  const enableOrchestratorTools = shouldEnableOrchestratorTools();
344
- const toolNames = ["change_title", "preview_html", "device_list", "device_exec", "submit_bug", "edit_bug", "delete_bug"];
443
+ const toolNames = ["change_title", "preview_html", "device_list", "device_exec", "list_bugs", "get_bug", "submit_bug", "edit_bug", "delete_bug"];
345
444
  const originalConsoleError = console.error;
346
445
  console.error = (...args) => {
347
446
  logger.debug("[happyMCP] console.error:", ...args);
@@ -3,15 +3,15 @@
3
3
  var fs$1 = require('fs/promises');
4
4
  var os = require('os');
5
5
  var tmp = require('tmp');
6
- var api = require('./api-mv48hjhj.cjs');
7
- var logger = require('./persistence-B_w4o5z-.cjs');
8
- var auth = require('./auth-DfQYhTlg.cjs');
6
+ var api = require('./api-OthK5iIu.cjs');
7
+ var logger = require('./persistence-BJVrfFPM.cjs');
8
+ var auth = require('./auth-BpoPI35K.cjs');
9
9
  var child_process = require('child_process');
10
- var doctor = require('./doctor-CBbj6YEl.cjs');
11
- var spawnHappyCLI = require('./spawnHappyCLI-T9EQFmAR.cjs');
12
- var controlClient = require('./controlClient-DMEMVw4Y.cjs');
13
- var deviceKeys = require('./deviceKeys-CzqNNlG1.cjs');
14
- var install = require('./install-_GiK-K1X.cjs');
10
+ var doctor = require('./doctor-BqwlWV1d.cjs');
11
+ var spawnHappyCLI = require('./spawnHappyCLI-C6Peiy6h.cjs');
12
+ var controlClient = require('./controlClient-DEk3NLK2.cjs');
13
+ var deviceKeys = require('./deviceKeys-CdzEV43E.cjs');
14
+ var install = require('./install-B8z_dWSt.cjs');
15
15
  var fastify = require('fastify');
16
16
  var fs = require('node:fs');
17
17
  var promises = require('node:fs/promises');
@@ -1,15 +1,15 @@
1
1
  import fs from 'fs/promises';
2
2
  import os from 'os';
3
3
  import * as tmp from 'tmp';
4
- import { A as ApiClient } from './api-L9jLLtI1.mjs';
5
- import { c as configuration, l as logger, p as packageJson, v as acquireDaemonLock, a as readSettings, i as isDebug, e as encodeBase64, x as writeDaemonState, m as readDaemonState, y as releaseDaemonLock, z as validateProfileForAgent, A as getProfileEnvironmentVariables } from './persistence-D2aRTiT1.mjs';
6
- import { authAndSetupMachineIfNeeded } from './auth-BoWfky2q.mjs';
4
+ import { A as ApiClient } from './api-DgjBoynq.mjs';
5
+ import { c as configuration, l as logger, p as packageJson, v as acquireDaemonLock, a as readSettings, i as isDebug, e as encodeBase64, x as writeDaemonState, m as readDaemonState, y as releaseDaemonLock, z as validateProfileForAgent, A as getProfileEnvironmentVariables } from './persistence-CO8Q0Eh6.mjs';
6
+ import { authAndSetupMachineIfNeeded } from './auth-BCH_VzFY.mjs';
7
7
  import { spawn, execSync, exec } from 'child_process';
8
- import { getEnvironmentInfo } from './doctor-CXYhUN9A.mjs';
9
- import { s as spawnHappyCLI } from './spawnHappyCLI-CG_S7LH1.mjs';
10
- import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-P5wJhu1R.mjs';
11
- import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-tcvwm4KA.mjs';
12
- import { P as PLIST_LABEL } from './install-Cma2vLWa.mjs';
8
+ import { getEnvironmentInfo } from './doctor-36V4kFd8.mjs';
9
+ import { s as spawnHappyCLI } from './spawnHappyCLI-C7Fu7xsF.mjs';
10
+ import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-BXUvvi9h.mjs';
11
+ import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-BghZEVQM.mjs';
12
+ import { P as PLIST_LABEL } from './install-CdGqsOnL.mjs';
13
13
  import fastify from 'fastify';
14
14
  import { createReadStream } from 'node:fs';
15
15
  import { stat } from 'node:fs/promises';
@@ -2,20 +2,20 @@ import os, { homedir } from 'node:os';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { existsSync, mkdirSync, writeFileSync, unlinkSync, readdirSync } from 'node:fs';
4
4
  import { readFile, mkdir, writeFile, stat, copyFile } from 'node:fs/promises';
5
- import { I as InvalidateSync, k as AsyncLock, d as connectionState, A as ApiClient, r as resolveToolsDir, b as startOfflineReconnection, l as findClaudeProjectId } from './api-L9jLLtI1.mjs';
6
- import { l as logger, i as isDebug, c as configuration, a as readSettings, p as packageJson } from './persistence-D2aRTiT1.mjs';
7
- import { g as getProjectPath, a as claudeLocal, E as ExitCodeError, b as claudeCheckSession, s as systemPrompt } from './claudeLocal-CFEXiYts.mjs';
5
+ import { I as InvalidateSync, k as AsyncLock, d as connectionState, A as ApiClient, r as resolveToolsDir, b as startOfflineReconnection, l as findClaudeProjectId } from './api-DgjBoynq.mjs';
6
+ import { l as logger, i as isDebug, c as configuration, a as readSettings, p as packageJson } from './persistence-CO8Q0Eh6.mjs';
7
+ import { g as getProjectPath, a as claudeLocal, E as ExitCodeError, b as claudeCheckSession, s as systemPrompt } from './claudeLocal-BgGmploP.mjs';
8
8
  import { R as RawJSONLinesSchema } from './types-BoJh4Qfv.mjs';
9
9
  import { join, resolve } from 'node:path';
10
10
  import { d as delay } from './time-DgsBLJA_.mjs';
11
11
  import { watch, access } from 'fs/promises';
12
12
  import { useStdout, useInput, Box, Text, render } from 'ink';
13
- import { b as parseSpecialCommand, a as MessageBuffer, M as MessageQueue2, h as hashObject } from './downloadImage-CpnQ3aS1.mjs';
13
+ import { b as parseSpecialCommand, a as MessageBuffer, M as MessageQueue2, h as hashObject } from './downloadImage-qav0UxBl.mjs';
14
14
  import React, { useState, useRef, useEffect, useCallback } from 'react';
15
15
  import { execSync, spawn } from 'node:child_process';
16
16
  import { createInterface } from 'node:readline';
17
17
  import { fileURLToPath } from 'node:url';
18
- import { i as isBun } from './spawnHappyCLI-CG_S7LH1.mjs';
18
+ import { i as isBun } from './spawnHappyCLI-C7Fu7xsF.mjs';
19
19
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
20
20
  import 'axios';
21
21
  import 'node:events';
@@ -26,12 +26,12 @@ import 'crypto';
26
26
  import '@stablelib/base64';
27
27
  import 'expo-server-sdk';
28
28
  import 'chalk';
29
- import { a as formatMessageForClaude } from './formatImageMessage-ZJZza9-9.mjs';
29
+ import { a as formatMessageForClaude } from './formatImageMessage-Biyy3pJR.mjs';
30
30
  import { isDeepStrictEqual } from 'node:util';
31
- import { i as initialMachineMetadata, s as stopCaffeinate, a as startCaffeinate } from './run-D6oXm1Jk.mjs';
32
- import { getEnvironmentInfo } from './doctor-CXYhUN9A.mjs';
33
- import { notifyDaemonSessionStarted } from './controlClient-P5wJhu1R.mjs';
34
- import { c as createMcpContext, r as registerKillSessionHandler, d as detectGitWorktree } from './registerKillSessionHandler-AcpB6OSk.mjs';
31
+ import { i as initialMachineMetadata, s as stopCaffeinate, a as startCaffeinate } from './run-C-nwXCvH.mjs';
32
+ import { getEnvironmentInfo } from './doctor-36V4kFd8.mjs';
33
+ import { notifyDaemonSessionStarted } from './controlClient-BXUvvi9h.mjs';
34
+ import { c as createMcpContext, r as registerKillSessionHandler, d as detectGitWorktree } from './registerKillSessionHandler-OVE8Wm5b.mjs';
35
35
  import { createServer } from 'node:http';
36
36
  import 'zod';
37
37
  import './index-DTV7drqs.mjs';
@@ -40,7 +40,7 @@ import 'child_process';
40
40
  import 'util';
41
41
  import 'path';
42
42
  import 'node:module';
43
- import './sessionKeyCache-CEJH5cHj.mjs';
43
+ import './sessionKeyCache-D9_P4Mhm.mjs';
44
44
  import 'fs';
45
45
  import './prompt-BsAZsPbo.mjs';
46
46
  import './trimIdent-BAjmv_TG.mjs';
@@ -48,12 +48,12 @@ import './common-BdNgghUJ.mjs';
48
48
  import 'url';
49
49
  import 'os';
50
50
  import 'tmp';
51
- import './auth-BoWfky2q.mjs';
51
+ import './auth-BCH_VzFY.mjs';
52
52
  import 'qrcode-terminal';
53
- import './browser-D9jMe1me.mjs';
53
+ import './browser-oD4Fhplt.mjs';
54
54
  import 'open';
55
- import './deviceKeys-tcvwm4KA.mjs';
56
- import './install-Cma2vLWa.mjs';
55
+ import './deviceKeys-BghZEVQM.mjs';
56
+ import './install-CdGqsOnL.mjs';
57
57
  import 'fastify';
58
58
  import 'fastify-type-provider-zod';
59
59
  import './doctor-ON7pN5G5.mjs';
@@ -4,20 +4,20 @@ var os = require('node:os');
4
4
  var node_crypto = require('node:crypto');
5
5
  var fs$1 = require('node:fs');
6
6
  var promises = require('node:fs/promises');
7
- var api = require('./api-mv48hjhj.cjs');
8
- var logger = require('./persistence-B_w4o5z-.cjs');
9
- var claudeLocal = require('./claudeLocal-DOfhf6VK.cjs');
7
+ var api = require('./api-OthK5iIu.cjs');
8
+ var logger = require('./persistence-BJVrfFPM.cjs');
9
+ var claudeLocal = require('./claudeLocal-D1aqQU3U.cjs');
10
10
  var types = require('./types-DWeB7aqh.cjs');
11
11
  var path = require('node:path');
12
12
  var time = require('./time-Bj2HRkKH.cjs');
13
13
  var fs = require('fs/promises');
14
14
  var ink = require('ink');
15
- var downloadImage = require('./downloadImage-CRkycWIl.cjs');
15
+ var downloadImage = require('./downloadImage-CRORmK1A.cjs');
16
16
  var React = require('react');
17
17
  var node_child_process = require('node:child_process');
18
18
  var node_readline = require('node:readline');
19
19
  var node_url = require('node:url');
20
- var spawnHappyCLI = require('./spawnHappyCLI-T9EQFmAR.cjs');
20
+ var spawnHappyCLI = require('./spawnHappyCLI-C6Peiy6h.cjs');
21
21
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
22
22
  require('axios');
23
23
  require('node:events');
@@ -28,12 +28,12 @@ require('crypto');
28
28
  require('@stablelib/base64');
29
29
  require('expo-server-sdk');
30
30
  require('chalk');
31
- var formatImageMessage = require('./formatImageMessage-CqonqpiB.cjs');
31
+ var formatImageMessage = require('./formatImageMessage-D-tA2oNc.cjs');
32
32
  var node_util = require('node:util');
33
- var run = require('./run-DclH1MRm.cjs');
34
- var doctor = require('./doctor-CBbj6YEl.cjs');
35
- var controlClient = require('./controlClient-DMEMVw4Y.cjs');
36
- var registerKillSessionHandler = require('./registerKillSessionHandler-DUrOhiGo.cjs');
33
+ var run = require('./run-B5dg8uPo.cjs');
34
+ var doctor = require('./doctor-BqwlWV1d.cjs');
35
+ var controlClient = require('./controlClient-DEk3NLK2.cjs');
36
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Bdw4uNLH.cjs');
37
37
  var node_http = require('node:http');
38
38
  require('zod');
39
39
  require('./index-BeKrqPYR.cjs');
@@ -42,7 +42,7 @@ require('child_process');
42
42
  require('util');
43
43
  require('path');
44
44
  require('node:module');
45
- require('./sessionKeyCache-DYuPkw5Z.cjs');
45
+ require('./sessionKeyCache-BOxbaLH3.cjs');
46
46
  require('fs');
47
47
  require('./prompt-BTWDZZO0.cjs');
48
48
  require('./trimIdent-4gvk9Wk6.cjs');
@@ -50,12 +50,12 @@ require('./common-CZvSRU4p.cjs');
50
50
  require('url');
51
51
  require('os');
52
52
  require('tmp');
53
- require('./auth-DfQYhTlg.cjs');
53
+ require('./auth-BpoPI35K.cjs');
54
54
  require('qrcode-terminal');
55
- require('./browser-CF-r2ami.cjs');
55
+ require('./browser-BPhM1lYb.cjs');
56
56
  require('open');
57
- require('./deviceKeys-CzqNNlG1.cjs');
58
- require('./install-_GiK-K1X.cjs');
57
+ require('./deviceKeys-CdzEV43E.cjs');
58
+ require('./install-B8z_dWSt.cjs');
59
59
  require('fastify');
60
60
  require('fastify-type-provider-zod');
61
61
  require('./doctor-C08m5Z9f.cjs');
@@ -732,7 +732,7 @@ class AbortError extends Error {
732
732
  }
733
733
  }
734
734
 
735
- const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('runClaude-BfLi7f2N.cjs', document.baseURI).href)));
735
+ const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('runClaude-rkxGCTc2.cjs', document.baseURI).href)));
736
736
  const __dirname$1 = path.join(__filename$1, "..");
737
737
  function getGlobalClaudeVersion() {
738
738
  try {
@@ -2,18 +2,18 @@
2
2
 
3
3
  var ink = require('ink');
4
4
  var React = require('react');
5
- var api = require('./api-mv48hjhj.cjs');
5
+ var api = require('./api-OthK5iIu.cjs');
6
6
  var node_child_process = require('node:child_process');
7
7
  var node_readline = require('node:readline');
8
- var logger = require('./persistence-B_w4o5z-.cjs');
9
- var setupOfflineReconnection = require('./setupOfflineReconnection-BkAr6jAB.cjs');
10
- var loadableToolOutput = require('./loadableToolOutput-sf6E72GE.cjs');
8
+ var logger = require('./persistence-BJVrfFPM.cjs');
9
+ var setupOfflineReconnection = require('./setupOfflineReconnection-BHuXHSbt.cjs');
10
+ var loadableToolOutput = require('./loadableToolOutput-Bv22WdF2.cjs');
11
11
  var node_crypto = require('node:crypto');
12
- var downloadImage = require('./downloadImage-CRkycWIl.cjs');
13
- var run = require('./run-DclH1MRm.cjs');
14
- var registerKillSessionHandler = require('./registerKillSessionHandler-DUrOhiGo.cjs');
12
+ var downloadImage = require('./downloadImage-CRORmK1A.cjs');
13
+ var run = require('./run-B5dg8uPo.cjs');
14
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Bdw4uNLH.cjs');
15
15
  var constants = require('./constants-E_UWYTo3.cjs');
16
- var controlClient = require('./controlClient-DMEMVw4Y.cjs');
16
+ var controlClient = require('./controlClient-DEk3NLK2.cjs');
17
17
  var node_util = require('node:util');
18
18
  var promises = require('node:fs/promises');
19
19
  var path = require('node:path');
@@ -38,22 +38,22 @@ require('crypto');
38
38
  require('tweetnacl');
39
39
  require('@stablelib/base64');
40
40
  require('expo-server-sdk');
41
- require('./sessionKeyCache-DYuPkw5Z.cjs');
41
+ require('./sessionKeyCache-BOxbaLH3.cjs');
42
42
  require('chalk');
43
43
  require('fs');
44
44
  require('os');
45
45
  require('tmp');
46
- require('./auth-DfQYhTlg.cjs');
46
+ require('./auth-BpoPI35K.cjs');
47
47
  require('qrcode-terminal');
48
- require('./browser-CF-r2ami.cjs');
48
+ require('./browser-BPhM1lYb.cjs');
49
49
  require('open');
50
- require('./doctor-CBbj6YEl.cjs');
50
+ require('./doctor-BqwlWV1d.cjs');
51
51
  require('./doctor-C08m5Z9f.cjs');
52
52
  require('ps-list');
53
53
  require('cross-spawn');
54
- require('./spawnHappyCLI-T9EQFmAR.cjs');
55
- require('./deviceKeys-CzqNNlG1.cjs');
56
- require('./install-_GiK-K1X.cjs');
54
+ require('./spawnHappyCLI-C6Peiy6h.cjs');
55
+ require('./deviceKeys-CdzEV43E.cjs');
56
+ require('./install-B8z_dWSt.cjs');
57
57
  require('./trimIdent-4gvk9Wk6.cjs');
58
58
  require('fastify');
59
59
  require('fastify-type-provider-zod');
@@ -1341,8 +1341,8 @@ class CodexPermissionHandler extends setupOfflineReconnection.BasePermissionHand
1341
1341
  logger.logger.debug(`${this.getLogPrefix()} Permission mode set to: ${mode}`);
1342
1342
  }
1343
1343
  shouldAutoApprove(toolName, toolCallId) {
1344
- const alwaysAutoApproveNames = ["change_title", "happy__change_title", "preview_html", "happy__preview_html", "CodexReasoning", "think", "save_memory"];
1345
- const alwaysAutoApproveIds = ["change_title", "preview_html", "save_memory"];
1344
+ const alwaysAutoApproveNames = ["change_title", "happy__change_title", "preview_html", "happy__preview_html", "list_bugs", "happy__list_bugs", "get_bug", "happy__get_bug", "CodexReasoning", "think", "save_memory"];
1345
+ const alwaysAutoApproveIds = ["change_title", "preview_html", "list_bugs", "get_bug", "save_memory"];
1346
1346
  if (alwaysAutoApproveNames.some((name) => toolName.toLowerCase().includes(name.toLowerCase()))) {
1347
1347
  return true;
1348
1348
  }
@@ -1,17 +1,17 @@
1
1
  import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
- import { c as saveDiffRecords, e as extractUserText, i as isSystemMessage, g as generateStableUuid, f as findCodexSessionFile, d as connectionState, A as ApiClient } from './api-L9jLLtI1.mjs';
3
+ import { c as saveDiffRecords, e as extractUserText, i as isSystemMessage, g as generateStableUuid, f as findCodexSessionFile, d as connectionState, A as ApiClient } from './api-DgjBoynq.mjs';
4
4
  import { spawn, execSync } from 'node:child_process';
5
5
  import { createInterface } from 'node:readline';
6
- import { l as logger, i as isDebug, a as readSettings } from './persistence-D2aRTiT1.mjs';
7
- import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-2m0GAIU5.mjs';
8
- import { B as BaseReasoningProcessor, h as handleConfigMetadataEvent, s as summarizeBashToolOutput } from './loadableToolOutput-4qF6EX0y.mjs';
6
+ import { l as logger, i as isDebug, a as readSettings } from './persistence-CO8Q0Eh6.mjs';
7
+ import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-B1YuEpwl.mjs';
8
+ import { B as BaseReasoningProcessor, h as handleConfigMetadataEvent, s as summarizeBashToolOutput } from './loadableToolOutput-DvlJj7PM.mjs';
9
9
  import { randomUUID } from 'node:crypto';
10
- import { M as MessageQueue2, h as hashObject, a as MessageBuffer, p as parseClear, d as downloadImage } from './downloadImage-CpnQ3aS1.mjs';
11
- import { i as initialMachineMetadata, s as stopCaffeinate } from './run-D6oXm1Jk.mjs';
12
- import { c as createMcpContext, r as registerKillSessionHandler } from './registerKillSessionHandler-AcpB6OSk.mjs';
10
+ import { M as MessageQueue2, h as hashObject, a as MessageBuffer, p as parseClear, d as downloadImage } from './downloadImage-qav0UxBl.mjs';
11
+ import { i as initialMachineMetadata, s as stopCaffeinate } from './run-C-nwXCvH.mjs';
12
+ import { c as createMcpContext, r as registerKillSessionHandler } from './registerKillSessionHandler-OVE8Wm5b.mjs';
13
13
  import { g as getFirstTurnInstruction } from './constants-pmXZGibX.mjs';
14
- import { notifyDaemonSessionStarted } from './controlClient-P5wJhu1R.mjs';
14
+ import { notifyDaemonSessionStarted } from './controlClient-BXUvvi9h.mjs';
15
15
  import { inspect } from 'node:util';
16
16
  import { readFile } from 'node:fs/promises';
17
17
  import { basename, isAbsolute } from 'node:path';
@@ -36,22 +36,22 @@ import 'crypto';
36
36
  import 'tweetnacl';
37
37
  import '@stablelib/base64';
38
38
  import 'expo-server-sdk';
39
- import './sessionKeyCache-CEJH5cHj.mjs';
39
+ import './sessionKeyCache-D9_P4Mhm.mjs';
40
40
  import 'chalk';
41
41
  import 'fs';
42
42
  import 'os';
43
43
  import 'tmp';
44
- import './auth-BoWfky2q.mjs';
44
+ import './auth-BCH_VzFY.mjs';
45
45
  import 'qrcode-terminal';
46
- import './browser-D9jMe1me.mjs';
46
+ import './browser-oD4Fhplt.mjs';
47
47
  import 'open';
48
- import './doctor-CXYhUN9A.mjs';
48
+ import './doctor-36V4kFd8.mjs';
49
49
  import './doctor-ON7pN5G5.mjs';
50
50
  import 'ps-list';
51
51
  import 'cross-spawn';
52
- import './spawnHappyCLI-CG_S7LH1.mjs';
53
- import './deviceKeys-tcvwm4KA.mjs';
54
- import './install-Cma2vLWa.mjs';
52
+ import './spawnHappyCLI-C7Fu7xsF.mjs';
53
+ import './deviceKeys-BghZEVQM.mjs';
54
+ import './install-CdGqsOnL.mjs';
55
55
  import './trimIdent-BAjmv_TG.mjs';
56
56
  import 'fastify';
57
57
  import 'fastify-type-provider-zod';
@@ -1339,8 +1339,8 @@ class CodexPermissionHandler extends BasePermissionHandler {
1339
1339
  logger.debug(`${this.getLogPrefix()} Permission mode set to: ${mode}`);
1340
1340
  }
1341
1341
  shouldAutoApprove(toolName, toolCallId) {
1342
- const alwaysAutoApproveNames = ["change_title", "happy__change_title", "preview_html", "happy__preview_html", "CodexReasoning", "think", "save_memory"];
1343
- const alwaysAutoApproveIds = ["change_title", "preview_html", "save_memory"];
1342
+ const alwaysAutoApproveNames = ["change_title", "happy__change_title", "preview_html", "happy__preview_html", "list_bugs", "happy__list_bugs", "get_bug", "happy__get_bug", "CodexReasoning", "think", "save_memory"];
1343
+ const alwaysAutoApproveIds = ["change_title", "preview_html", "list_bugs", "get_bug", "save_memory"];
1344
1344
  if (alwaysAutoApproveNames.some((name) => toolName.toLowerCase().includes(name.toLowerCase()))) {
1345
1345
  return true;
1346
1346
  }
@@ -1,13 +1,13 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import chalk from 'chalk';
3
- import { A as ApiClient } from './api-L9jLLtI1.mjs';
4
- import { l as logger, a as readSettings } from './persistence-D2aRTiT1.mjs';
5
- import { i as initialMachineMetadata } from './run-D6oXm1Jk.mjs';
6
- import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-2m0GAIU5.mjs';
7
- import { notifyDaemonSessionStarted } from './controlClient-P5wJhu1R.mjs';
8
- import { c as createMcpContext, r as registerKillSessionHandler } from './registerKillSessionHandler-AcpB6OSk.mjs';
3
+ import { A as ApiClient } from './api-DgjBoynq.mjs';
4
+ import { l as logger, a as readSettings } from './persistence-CO8Q0Eh6.mjs';
5
+ import { i as initialMachineMetadata } from './run-C-nwXCvH.mjs';
6
+ import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-B1YuEpwl.mjs';
7
+ import { notifyDaemonSessionStarted } from './controlClient-BXUvvi9h.mjs';
8
+ import { c as createMcpContext, r as registerKillSessionHandler } from './registerKillSessionHandler-OVE8Wm5b.mjs';
9
9
  import { spawn } from 'node:child_process';
10
- import { n as normalizeCursorTool, C as CursorApprovalBridge } from './cursorApprovalServer-C9y5dYDE.mjs';
10
+ import { n as normalizeCursorTool, C as CursorApprovalBridge } from './cursorApprovalServer-CU4HY7HJ.mjs';
11
11
  import 'axios';
12
12
  import 'node:events';
13
13
  import 'socket.io-client';
@@ -33,23 +33,23 @@ import 'tweetnacl';
33
33
  import '@stablelib/base64';
34
34
  import 'node:readline';
35
35
  import 'expo-server-sdk';
36
- import './sessionKeyCache-CEJH5cHj.mjs';
36
+ import './sessionKeyCache-D9_P4Mhm.mjs';
37
37
  import 'fs';
38
38
  import 'os';
39
39
  import 'tmp';
40
- import './auth-BoWfky2q.mjs';
40
+ import './auth-BCH_VzFY.mjs';
41
41
  import 'qrcode-terminal';
42
- import './browser-D9jMe1me.mjs';
42
+ import './browser-oD4Fhplt.mjs';
43
43
  import 'open';
44
44
  import 'react';
45
45
  import 'ink';
46
- import './doctor-CXYhUN9A.mjs';
46
+ import './doctor-36V4kFd8.mjs';
47
47
  import './doctor-ON7pN5G5.mjs';
48
48
  import 'ps-list';
49
49
  import 'cross-spawn';
50
- import './spawnHappyCLI-CG_S7LH1.mjs';
51
- import './deviceKeys-tcvwm4KA.mjs';
52
- import './install-Cma2vLWa.mjs';
50
+ import './spawnHappyCLI-C7Fu7xsF.mjs';
51
+ import './deviceKeys-BghZEVQM.mjs';
52
+ import './install-CdGqsOnL.mjs';
53
53
  import './trimIdent-BAjmv_TG.mjs';
54
54
  import 'fastify';
55
55
  import 'fastify-type-provider-zod';
@@ -464,7 +464,7 @@ function agentMessageToAcp(message, newId) {
464
464
  }
465
465
  }
466
466
 
467
- const ALWAYS_ALLOWED_TOOLS = ["change_title", "happy__change_title", "preview_html", "happy__preview_html"];
467
+ const ALWAYS_ALLOWED_TOOLS = ["change_title", "happy__change_title", "preview_html", "happy__preview_html", "list_bugs", "happy__list_bugs", "get_bug", "happy__get_bug"];
468
468
  const UNATTENDED_MODES = ["yolo", "safe-yolo", "bypassPermissions"];
469
469
  class CursorPermissionHandler extends BasePermissionHandler {
470
470
  /** Set by "allow all tools for this session", or by an unattended mode. */
@@ -2,14 +2,14 @@
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
4
  var chalk = require('chalk');
5
- var api = require('./api-mv48hjhj.cjs');
6
- var logger = require('./persistence-B_w4o5z-.cjs');
7
- var run = require('./run-DclH1MRm.cjs');
8
- var setupOfflineReconnection = require('./setupOfflineReconnection-BkAr6jAB.cjs');
9
- var controlClient = require('./controlClient-DMEMVw4Y.cjs');
10
- var registerKillSessionHandler = require('./registerKillSessionHandler-DUrOhiGo.cjs');
5
+ var api = require('./api-OthK5iIu.cjs');
6
+ var logger = require('./persistence-BJVrfFPM.cjs');
7
+ var run = require('./run-B5dg8uPo.cjs');
8
+ var setupOfflineReconnection = require('./setupOfflineReconnection-BHuXHSbt.cjs');
9
+ var controlClient = require('./controlClient-DEk3NLK2.cjs');
10
+ var registerKillSessionHandler = require('./registerKillSessionHandler-Bdw4uNLH.cjs');
11
11
  var node_child_process = require('node:child_process');
12
- var cursorApprovalServer = require('./cursorApprovalServer-BoI6qBTg.cjs');
12
+ var cursorApprovalServer = require('./cursorApprovalServer-PWI0z_6u.cjs');
13
13
  require('axios');
14
14
  require('node:events');
15
15
  require('socket.io-client');
@@ -35,23 +35,23 @@ require('tweetnacl');
35
35
  require('@stablelib/base64');
36
36
  require('node:readline');
37
37
  require('expo-server-sdk');
38
- require('./sessionKeyCache-DYuPkw5Z.cjs');
38
+ require('./sessionKeyCache-BOxbaLH3.cjs');
39
39
  require('fs');
40
40
  require('os');
41
41
  require('tmp');
42
- require('./auth-DfQYhTlg.cjs');
42
+ require('./auth-BpoPI35K.cjs');
43
43
  require('qrcode-terminal');
44
- require('./browser-CF-r2ami.cjs');
44
+ require('./browser-BPhM1lYb.cjs');
45
45
  require('open');
46
46
  require('react');
47
47
  require('ink');
48
- require('./doctor-CBbj6YEl.cjs');
48
+ require('./doctor-BqwlWV1d.cjs');
49
49
  require('./doctor-C08m5Z9f.cjs');
50
50
  require('ps-list');
51
51
  require('cross-spawn');
52
- require('./spawnHappyCLI-T9EQFmAR.cjs');
53
- require('./deviceKeys-CzqNNlG1.cjs');
54
- require('./install-_GiK-K1X.cjs');
52
+ require('./spawnHappyCLI-C6Peiy6h.cjs');
53
+ require('./deviceKeys-CdzEV43E.cjs');
54
+ require('./install-B8z_dWSt.cjs');
55
55
  require('./trimIdent-4gvk9Wk6.cjs');
56
56
  require('fastify');
57
57
  require('fastify-type-provider-zod');
@@ -466,7 +466,7 @@ function agentMessageToAcp(message, newId) {
466
466
  }
467
467
  }
468
468
 
469
- const ALWAYS_ALLOWED_TOOLS = ["change_title", "happy__change_title", "preview_html", "happy__preview_html"];
469
+ const ALWAYS_ALLOWED_TOOLS = ["change_title", "happy__change_title", "preview_html", "happy__preview_html", "list_bugs", "happy__list_bugs", "get_bug", "happy__get_bug"];
470
470
  const UNATTENDED_MODES = ["yolo", "safe-yolo", "bypassPermissions"];
471
471
  class CursorPermissionHandler extends setupOfflineReconnection.BasePermissionHandler {
472
472
  /** Set by "allow all tools for this session", or by an unattended mode. */