@zonease/happy 0.6.47 → 0.6.48
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/{api-L9jLLtI1.mjs → api-BQORFd9R.mjs} +2 -2
- package/dist/{api-mv48hjhj.cjs → api-lxlaOAan.cjs} +3 -3
- package/dist/{auth-InL7fBsz.mjs → auth-Cch5XGgf.mjs} +4 -4
- package/dist/{auth-0qbD9TEm.cjs → auth-D3n2c6ef.cjs} +4 -4
- package/dist/{auth-BoWfky2q.mjs → auth-DEvweBty.mjs} +2 -2
- package/dist/{auth-DfQYhTlg.cjs → auth-DO429YIh.cjs} +2 -2
- package/dist/{browser-D9jMe1me.mjs → browser-C6JpWqen.mjs} +1 -1
- package/dist/{browser-CF-r2ami.cjs → browser-ChToh76t.cjs} +1 -1
- package/dist/{claudeLocal-DOfhf6VK.cjs → claudeLocal-BRkqm7Dv.cjs} +1 -1
- package/dist/{claudeLocal-CFEXiYts.mjs → claudeLocal-D7uEQO2e.mjs} +1 -1
- package/dist/codex/happyMcpStdioBridge.cjs +9 -0
- package/dist/codex/happyMcpStdioBridge.mjs +9 -0
- package/dist/{config-ByyclMMi.cjs → config-D1pd0h7A.cjs} +1 -1
- package/dist/{config-BBm54d_L.mjs → config-oC3LtNiN.mjs} +1 -1
- package/dist/{connect-B5JhnDTy.mjs → connect-CyFpNr11.mjs} +4 -4
- package/dist/{connect-CIOfZYj-.cjs → connect-OAvNEIm0.cjs} +4 -4
- package/dist/{controlClient-DMEMVw4Y.cjs → controlClient-BAJAvvWO.cjs} +1 -1
- package/dist/{controlClient-P5wJhu1R.mjs → controlClient-CEliu-dY.mjs} +1 -1
- package/dist/{cursorApprovalHook-C9mdmRIx.cjs → cursorApprovalHook-BWYkdy2I.cjs} +2 -2
- package/dist/{cursorApprovalHook-DplHRbGK.mjs → cursorApprovalHook-P8q2-Ot5.mjs} +2 -2
- package/dist/{cursorApprovalServer-C9y5dYDE.mjs → cursorApprovalServer-DNOUUpbJ.mjs} +1 -1
- package/dist/{cursorApprovalServer-BoI6qBTg.cjs → cursorApprovalServer-VR5ZdRqZ.cjs} +1 -1
- package/dist/{deviceKeys-CzqNNlG1.cjs → deviceKeys-CFpY68YY.cjs} +2 -2
- package/dist/{deviceKeys-tcvwm4KA.mjs → deviceKeys-CxID9XkJ.mjs} +2 -2
- package/dist/{doctor-CXYhUN9A.mjs → doctor-CrBPDAJR.mjs} +2 -2
- package/dist/{doctor-CBbj6YEl.cjs → doctor-qquYvrNu.cjs} +2 -2
- package/dist/{downloadImage-CRkycWIl.cjs → downloadImage-Cqy7ZDq9.cjs} +1 -1
- package/dist/{downloadImage-CpnQ3aS1.mjs → downloadImage-DFwUJ1-t.mjs} +1 -1
- package/dist/{enroll-CYNDVSIH.mjs → enroll-BS4x3OUQ.mjs} +3 -3
- package/dist/{enroll-CyikRwm7.cjs → enroll-CPhX2YYW.cjs} +3 -3
- package/dist/{evidence-DAu9vtgh.mjs → evidence-HQhiWcci.mjs} +1 -1
- package/dist/{evidence-CuGxhBQm.cjs → evidence-mn6vjFpr.cjs} +1 -1
- package/dist/{formatImageMessage-CqonqpiB.cjs → formatImageMessage-DFfcusj_.cjs} +1 -1
- package/dist/{formatImageMessage-ZJZza9-9.mjs → formatImageMessage-cI_AEqo1.mjs} +1 -1
- package/dist/index.cjs +46 -46
- package/dist/index.mjs +46 -46
- package/dist/{install-_GiK-K1X.cjs → install-Bm5eNojk.cjs} +1 -1
- package/dist/{install-5H5Lh58Z.mjs → install-Bn2199Kq.mjs} +2 -2
- package/dist/{install-Cma2vLWa.mjs → install-sbpQfY_l.mjs} +1 -1
- package/dist/{install-X4JLGAi3.cjs → install-tBBR7NUn.cjs} +2 -2
- package/dist/lib.cjs +3 -3
- package/dist/lib.mjs +3 -3
- package/dist/{loadableToolOutput-sf6E72GE.cjs → loadableToolOutput-BzTaDndK.cjs} +2 -2
- package/dist/{loadableToolOutput-4qF6EX0y.mjs → loadableToolOutput-DbXbVycg.mjs} +2 -2
- package/dist/{persistence-B_w4o5z-.cjs → persistence-ACqGUEtH.cjs} +1 -1
- package/dist/{persistence-D2aRTiT1.mjs → persistence-YyHJPrEJ.mjs} +1 -1
- package/dist/{push-BiBqn-pk.mjs → push-CICE33Pk.mjs} +6 -6
- package/dist/{push-Df6QabEp.cjs → push-DN6X8puN.cjs} +6 -6
- package/dist/{registerKillSessionHandler-DUrOhiGo.cjs → registerKillSessionHandler-BvYc-FOQ.cjs} +48 -4
- package/dist/{registerKillSessionHandler-AcpB6OSk.mjs → registerKillSessionHandler-CaFN7Ti_.mjs} +48 -4
- package/dist/{run-D6oXm1Jk.mjs → run-DEIpQXCf.mjs} +8 -8
- package/dist/{run-DclH1MRm.cjs → run-Djrrraug.cjs} +8 -8
- package/dist/{runClaude--M8lVtqr.mjs → runClaude-BuXbk4Hk.mjs} +15 -15
- package/dist/{runClaude-BfLi7f2N.cjs → runClaude-DEnJA94E.cjs} +16 -16
- package/dist/{runCodex-DatWk57y.mjs → runCodex-DDJ4ld9g.mjs} +17 -17
- package/dist/{runCodex-DdcEe5bM.cjs → runCodex-xfey8ybA.cjs} +17 -17
- package/dist/{runCursor-DxcT7Qtj.mjs → runCursor-Ea-0SqPz.mjs} +15 -15
- package/dist/{runCursor-CszdTKDp.cjs → runCursor-HDQXcY5a.cjs} +15 -15
- package/dist/{runGemini-41p6X_zo.mjs → runGemini-DNXknLIG.mjs} +24 -19
- package/dist/{runGemini-sAOJNh2V.cjs → runGemini-DupL8lXI.cjs} +24 -19
- package/dist/{runOneShot-NBUWEobi.mjs → runOneShot-C3adjQdt.mjs} +2 -2
- package/dist/{runOneShot-m6HO3H5c.cjs → runOneShot-ncBtn_Gm.cjs} +2 -2
- package/dist/{serve-B84oK7m-.mjs → serve-B8J5nW6c.mjs} +6 -6
- package/dist/{serve-CUNdZ2ps.cjs → serve-DS7_dJ2V.cjs} +6 -6
- package/dist/{session-9-fr4sTn.mjs → session-DLX5ZdxL.mjs} +5 -5
- package/dist/{session-De8UTFFI.cjs → session-DqtoNEcE.cjs} +5 -5
- package/dist/{sessionKeyCache-DYuPkw5Z.cjs → sessionKeyCache-BnR0ARqZ.cjs} +1 -1
- package/dist/{sessionKeyCache-CEJH5cHj.mjs → sessionKeyCache-D0Y_V05P.mjs} +1 -1
- package/dist/{sessionList-KhgmL10v.cjs → sessionList-B20S2H2v.cjs} +2 -2
- package/dist/{sessionList-Dd4fyhNe.mjs → sessionList-D1jByB-c.mjs} +2 -2
- package/dist/{sessionSummary-u-kSmPto.cjs → sessionSummary-BfkUnQew.cjs} +3 -3
- package/dist/{sessionSummary-CYsvjLpK.mjs → sessionSummary-HZWtQ6mW.mjs} +3 -3
- package/dist/{setupOfflineReconnection-BkAr6jAB.cjs → setupOfflineReconnection-C8Ll2khg.cjs} +3 -3
- package/dist/{setupOfflineReconnection-2m0GAIU5.mjs → setupOfflineReconnection-E5sAFKRm.mjs} +3 -3
- package/dist/{spawnHappyCLI-T9EQFmAR.cjs → spawnHappyCLI-BabByXDO.cjs} +1 -1
- package/dist/{spawnHappyCLI-CG_S7LH1.mjs → spawnHappyCLI-iEcKfItK.mjs} +1 -1
- package/dist/{ssh-BTVqCokU.mjs → ssh-BMawo5IG.mjs} +5 -5
- package/dist/{ssh-C4nI67Vq.cjs → ssh-BWLfu_Bu.cjs} +5 -5
- package/dist/{task-AWrQbs-h.cjs → task-CmzA8KBB.cjs} +6 -6
- package/dist/{task-DzqzVDDn.mjs → task-JIXYT6Ut.mjs} +6 -6
- package/dist/{uninstall-BRDV8214.cjs → uninstall-CRICQerq.cjs} +2 -2
- package/dist/{uninstall-394a0fgf.mjs → uninstall-DE2hMEa8.mjs} +2 -2
- package/dist/{update-DLqQQtYc.mjs → update-Bo6YcGpg.mjs} +3 -3
- package/dist/{update-CZIaB80S.cjs → update-DYLwPQB5.cjs} +3 -3
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { stat, readFile } from 'node:fs/promises';
|
|
2
2
|
import { io } from 'socket.io-client';
|
|
3
|
-
import { c as configuration, e as encodeBase64, f as encrypt, g as decrypt, h as decodeBase64 } from './persistence-
|
|
4
|
-
import { resolveDeviceForCommand } from './ssh-
|
|
3
|
+
import { c as configuration, e as encodeBase64, f as encrypt, g as decrypt, h as decodeBase64 } from './persistence-YyHJPrEJ.mjs';
|
|
4
|
+
import { resolveDeviceForCommand } from './ssh-BMawo5IG.mjs';
|
|
5
5
|
import 'node:fs';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'node:path';
|
|
@@ -10,16 +10,16 @@ import 'node:crypto';
|
|
|
10
10
|
import 'tweetnacl';
|
|
11
11
|
import 'chalk';
|
|
12
12
|
import 'fs';
|
|
13
|
-
import './deviceKeys-
|
|
13
|
+
import './deviceKeys-CxID9XkJ.mjs';
|
|
14
14
|
import 'axios';
|
|
15
|
-
import './auth-
|
|
15
|
+
import './auth-DEvweBty.mjs';
|
|
16
16
|
import 'qrcode-terminal';
|
|
17
17
|
import './time-DgsBLJA_.mjs';
|
|
18
|
-
import './browser-
|
|
18
|
+
import './browser-C6JpWqen.mjs';
|
|
19
19
|
import 'open';
|
|
20
20
|
import 'react';
|
|
21
21
|
import 'ink';
|
|
22
|
-
import './controlClient-
|
|
22
|
+
import './controlClient-CEliu-dY.mjs';
|
|
23
23
|
import './projectPath-BTBIMB57.mjs';
|
|
24
24
|
import 'path';
|
|
25
25
|
import 'url';
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
4
|
var socket_ioClient = require('socket.io-client');
|
|
5
|
-
var logger = require('./persistence-
|
|
6
|
-
var ssh = require('./ssh-
|
|
5
|
+
var logger = require('./persistence-ACqGUEtH.cjs');
|
|
6
|
+
var ssh = require('./ssh-BWLfu_Bu.cjs');
|
|
7
7
|
require('node:fs');
|
|
8
8
|
require('node:os');
|
|
9
9
|
require('node:path');
|
|
@@ -12,16 +12,16 @@ require('node:crypto');
|
|
|
12
12
|
require('tweetnacl');
|
|
13
13
|
require('chalk');
|
|
14
14
|
require('fs');
|
|
15
|
-
require('./deviceKeys-
|
|
15
|
+
require('./deviceKeys-CFpY68YY.cjs');
|
|
16
16
|
require('axios');
|
|
17
|
-
require('./auth-
|
|
17
|
+
require('./auth-DO429YIh.cjs');
|
|
18
18
|
require('qrcode-terminal');
|
|
19
19
|
require('./time-Bj2HRkKH.cjs');
|
|
20
|
-
require('./browser-
|
|
20
|
+
require('./browser-ChToh76t.cjs');
|
|
21
21
|
require('open');
|
|
22
22
|
require('react');
|
|
23
23
|
require('ink');
|
|
24
|
-
require('./controlClient-
|
|
24
|
+
require('./controlClient-BAJAvvWO.cjs');
|
|
25
25
|
require('./projectPath-ChLhdOyt.cjs');
|
|
26
26
|
require('path');
|
|
27
27
|
require('url');
|
package/dist/{registerKillSessionHandler-DUrOhiGo.cjs → registerKillSessionHandler-BvYc-FOQ.cjs}
RENAMED
|
@@ -7,8 +7,8 @@ var node_http = require('node:http');
|
|
|
7
7
|
var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
8
8
|
var types_js = require('@modelcontextprotocol/sdk/types.js');
|
|
9
9
|
var z = require('zod');
|
|
10
|
-
var logger = require('./persistence-
|
|
11
|
-
var deviceKeys = require('./deviceKeys-
|
|
10
|
+
var logger = require('./persistence-ACqGUEtH.cjs');
|
|
11
|
+
var deviceKeys = require('./deviceKeys-CFpY68YY.cjs');
|
|
12
12
|
var axios = require('axios');
|
|
13
13
|
var promises = require('node:fs/promises');
|
|
14
14
|
var node_crypto = require('node:crypto');
|
|
@@ -18,7 +18,7 @@ require('./index-BeKrqPYR.cjs');
|
|
|
18
18
|
var node_child_process = require('node:child_process');
|
|
19
19
|
require('node:events');
|
|
20
20
|
require('socket.io-client');
|
|
21
|
-
require('./api-
|
|
21
|
+
require('./api-lxlaOAan.cjs');
|
|
22
22
|
require('tweetnacl');
|
|
23
23
|
require('ws');
|
|
24
24
|
require('crypto');
|
|
@@ -40,6 +40,20 @@ const IMAGE_MIME_TYPES = {
|
|
|
40
40
|
function authHeaders(credentials) {
|
|
41
41
|
return { headers: { Authorization: `Bearer ${credentials.token}` }, timeout: 15e3 };
|
|
42
42
|
}
|
|
43
|
+
async function listBugs(credentials, input = {}) {
|
|
44
|
+
const response = await axios.get(
|
|
45
|
+
`${logger.configuration.serverUrl}/v1/bugs`,
|
|
46
|
+
{
|
|
47
|
+
params: {
|
|
48
|
+
...input.status ? { status: input.status } : {},
|
|
49
|
+
...input.query ? { query: input.query } : {},
|
|
50
|
+
limit: input.limit ?? 50
|
|
51
|
+
},
|
|
52
|
+
...authHeaders(credentials)
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
return response.data;
|
|
56
|
+
}
|
|
43
57
|
async function resolveBugId(credentials, reference) {
|
|
44
58
|
const trimmed = reference.trim();
|
|
45
59
|
const displayNumber = trimmed.replace(/^#/, "").match(/^(?:bug-)?(\d+)$/i)?.[1];
|
|
@@ -298,6 +312,36 @@ ${result.stderr}`);
|
|
|
298
312
|
return toToolError(`Failed to submit bug: ${error instanceof Error ? error.message : String(error)}`);
|
|
299
313
|
}
|
|
300
314
|
});
|
|
315
|
+
mcp.registerTool("list_bugs", {
|
|
316
|
+
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.",
|
|
317
|
+
title: "List Bugs",
|
|
318
|
+
inputSchema: {
|
|
319
|
+
status: z.z.enum(["pending", "in_progress", "verify", "closed"]).optional().describe("Only bugs in this state"),
|
|
320
|
+
query: z.z.string().describe("Free text matched against number, title, description, author and status").optional(),
|
|
321
|
+
limit: z.z.number().int().min(1).max(200).optional().describe("How many to return, 50 by default")
|
|
322
|
+
}
|
|
323
|
+
}, async (args) => {
|
|
324
|
+
const credentials = await logger.readCredentials();
|
|
325
|
+
if (!credentials) {
|
|
326
|
+
return toToolError("No Happy credentials on this machine.");
|
|
327
|
+
}
|
|
328
|
+
try {
|
|
329
|
+
const { bugs, pendingCount } = await listBugs(credentials, args);
|
|
330
|
+
const lines = bugs.map((bug) => {
|
|
331
|
+
const counts = [
|
|
332
|
+
bug.attachmentCount ? `${bug.attachmentCount} images` : "",
|
|
333
|
+
bug.commentCount ? `${bug.commentCount} comments` : ""
|
|
334
|
+
].filter(Boolean).join(", ");
|
|
335
|
+
const activity = bug.lastActivityAt ? new Date(bug.lastActivityAt).toISOString().slice(0, 10) : "";
|
|
336
|
+
return `${bug.displayId} [${bug.status}] ${bug.title}${bug.createdByNickname ? ` \u2014 ${bug.createdByNickname}` : ""}${counts ? ` (${counts})` : ""}${activity ? ` ${activity}` : ""}`;
|
|
337
|
+
});
|
|
338
|
+
const header = `${bugs.length} bugs shown, ${pendingCount} pending on the board`;
|
|
339
|
+
return { content: [{ type: "text", text: lines.length ? `${header}
|
|
340
|
+
${lines.join("\n")}` : header }] };
|
|
341
|
+
} catch (error) {
|
|
342
|
+
return toToolError(`Failed to list bugs: ${error instanceof Error ? error.message : String(error)}`);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
301
345
|
mcp.registerTool("edit_bug", {
|
|
302
346
|
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.",
|
|
303
347
|
title: "Edit Bug",
|
|
@@ -343,7 +387,7 @@ ${result.stderr}`);
|
|
|
343
387
|
async function startHappyServer(client) {
|
|
344
388
|
const transports = /* @__PURE__ */ new Map();
|
|
345
389
|
const enableOrchestratorTools = prompt.shouldEnableOrchestratorTools();
|
|
346
|
-
const toolNames = ["change_title", "preview_html", "device_list", "device_exec", "submit_bug", "edit_bug", "delete_bug"];
|
|
390
|
+
const toolNames = ["change_title", "preview_html", "device_list", "device_exec", "list_bugs", "submit_bug", "edit_bug", "delete_bug"];
|
|
347
391
|
const originalConsoleError = console.error;
|
|
348
392
|
console.error = (...args) => {
|
|
349
393
|
logger.logger.debug("[happyMCP] console.error:", ...args);
|
package/dist/{registerKillSessionHandler-AcpB6OSk.mjs → registerKillSessionHandler-CaFN7Ti_.mjs}
RENAMED
|
@@ -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-
|
|
9
|
-
import { l as listDevices, d as deviceExec } from './deviceKeys-
|
|
8
|
+
import { c as configuration, l as logger, r as readCredentials } from './persistence-YyHJPrEJ.mjs';
|
|
9
|
+
import { l as listDevices, d as deviceExec } from './deviceKeys-CxID9XkJ.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-
|
|
19
|
+
import './api-BQORFd9R.mjs';
|
|
20
20
|
import 'tweetnacl';
|
|
21
21
|
import 'ws';
|
|
22
22
|
import 'crypto';
|
|
@@ -38,6 +38,20 @@ 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
|
+
}
|
|
41
55
|
async function resolveBugId(credentials, reference) {
|
|
42
56
|
const trimmed = reference.trim();
|
|
43
57
|
const displayNumber = trimmed.replace(/^#/, "").match(/^(?:bug-)?(\d+)$/i)?.[1];
|
|
@@ -296,6 +310,36 @@ ${result.stderr}`);
|
|
|
296
310
|
return toToolError(`Failed to submit bug: ${error instanceof Error ? error.message : String(error)}`);
|
|
297
311
|
}
|
|
298
312
|
});
|
|
313
|
+
mcp.registerTool("list_bugs", {
|
|
314
|
+
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.",
|
|
315
|
+
title: "List Bugs",
|
|
316
|
+
inputSchema: {
|
|
317
|
+
status: z.enum(["pending", "in_progress", "verify", "closed"]).optional().describe("Only bugs in this state"),
|
|
318
|
+
query: z.string().describe("Free text matched against number, title, description, author and status").optional(),
|
|
319
|
+
limit: z.number().int().min(1).max(200).optional().describe("How many to return, 50 by default")
|
|
320
|
+
}
|
|
321
|
+
}, async (args) => {
|
|
322
|
+
const credentials = await readCredentials();
|
|
323
|
+
if (!credentials) {
|
|
324
|
+
return toToolError("No Happy credentials on this machine.");
|
|
325
|
+
}
|
|
326
|
+
try {
|
|
327
|
+
const { bugs, pendingCount } = await listBugs(credentials, args);
|
|
328
|
+
const lines = bugs.map((bug) => {
|
|
329
|
+
const counts = [
|
|
330
|
+
bug.attachmentCount ? `${bug.attachmentCount} images` : "",
|
|
331
|
+
bug.commentCount ? `${bug.commentCount} comments` : ""
|
|
332
|
+
].filter(Boolean).join(", ");
|
|
333
|
+
const activity = bug.lastActivityAt ? new Date(bug.lastActivityAt).toISOString().slice(0, 10) : "";
|
|
334
|
+
return `${bug.displayId} [${bug.status}] ${bug.title}${bug.createdByNickname ? ` \u2014 ${bug.createdByNickname}` : ""}${counts ? ` (${counts})` : ""}${activity ? ` ${activity}` : ""}`;
|
|
335
|
+
});
|
|
336
|
+
const header = `${bugs.length} bugs shown, ${pendingCount} pending on the board`;
|
|
337
|
+
return { content: [{ type: "text", text: lines.length ? `${header}
|
|
338
|
+
${lines.join("\n")}` : header }] };
|
|
339
|
+
} catch (error) {
|
|
340
|
+
return toToolError(`Failed to list bugs: ${error instanceof Error ? error.message : String(error)}`);
|
|
341
|
+
}
|
|
342
|
+
});
|
|
299
343
|
mcp.registerTool("edit_bug", {
|
|
300
344
|
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
345
|
title: "Edit Bug",
|
|
@@ -341,7 +385,7 @@ ${result.stderr}`);
|
|
|
341
385
|
async function startHappyServer(client) {
|
|
342
386
|
const transports = /* @__PURE__ */ new Map();
|
|
343
387
|
const enableOrchestratorTools = shouldEnableOrchestratorTools();
|
|
344
|
-
const toolNames = ["change_title", "preview_html", "device_list", "device_exec", "submit_bug", "edit_bug", "delete_bug"];
|
|
388
|
+
const toolNames = ["change_title", "preview_html", "device_list", "device_exec", "list_bugs", "submit_bug", "edit_bug", "delete_bug"];
|
|
345
389
|
const originalConsoleError = console.error;
|
|
346
390
|
console.error = (...args) => {
|
|
347
391
|
logger.debug("[happyMCP] console.error:", ...args);
|
|
@@ -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-
|
|
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-
|
|
6
|
-
import { authAndSetupMachineIfNeeded } from './auth-
|
|
4
|
+
import { A as ApiClient } from './api-BQORFd9R.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-YyHJPrEJ.mjs';
|
|
6
|
+
import { authAndSetupMachineIfNeeded } from './auth-DEvweBty.mjs';
|
|
7
7
|
import { spawn, execSync, exec } from 'child_process';
|
|
8
|
-
import { getEnvironmentInfo } from './doctor-
|
|
9
|
-
import { s as spawnHappyCLI } from './spawnHappyCLI-
|
|
10
|
-
import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-
|
|
11
|
-
import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-
|
|
12
|
-
import { P as PLIST_LABEL } from './install-
|
|
8
|
+
import { getEnvironmentInfo } from './doctor-CrBPDAJR.mjs';
|
|
9
|
+
import { s as spawnHappyCLI } from './spawnHappyCLI-iEcKfItK.mjs';
|
|
10
|
+
import { isDaemonRunningCurrentlyInstalledHappyVersion, stopDaemon, cleanupDaemonState } from './controlClient-CEliu-dY.mjs';
|
|
11
|
+
import { a as readCachedDeviceKey, d as deviceExec } from './deviceKeys-CxID9XkJ.mjs';
|
|
12
|
+
import { P as PLIST_LABEL } from './install-sbpQfY_l.mjs';
|
|
13
13
|
import fastify from 'fastify';
|
|
14
14
|
import { createReadStream } from 'node:fs';
|
|
15
15
|
import { stat } from 'node:fs/promises';
|
|
@@ -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-
|
|
7
|
-
var logger = require('./persistence-
|
|
8
|
-
var auth = require('./auth-
|
|
6
|
+
var api = require('./api-lxlaOAan.cjs');
|
|
7
|
+
var logger = require('./persistence-ACqGUEtH.cjs');
|
|
8
|
+
var auth = require('./auth-DO429YIh.cjs');
|
|
9
9
|
var child_process = require('child_process');
|
|
10
|
-
var doctor = require('./doctor-
|
|
11
|
-
var spawnHappyCLI = require('./spawnHappyCLI-
|
|
12
|
-
var controlClient = require('./controlClient-
|
|
13
|
-
var deviceKeys = require('./deviceKeys-
|
|
14
|
-
var install = require('./install-
|
|
10
|
+
var doctor = require('./doctor-qquYvrNu.cjs');
|
|
11
|
+
var spawnHappyCLI = require('./spawnHappyCLI-BabByXDO.cjs');
|
|
12
|
+
var controlClient = require('./controlClient-BAJAvvWO.cjs');
|
|
13
|
+
var deviceKeys = require('./deviceKeys-CFpY68YY.cjs');
|
|
14
|
+
var install = require('./install-Bm5eNojk.cjs');
|
|
15
15
|
var fastify = require('fastify');
|
|
16
16
|
var fs = require('node:fs');
|
|
17
17
|
var promises = require('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-
|
|
6
|
-
import { l as logger, i as isDebug, c as configuration, a as readSettings, p as packageJson } from './persistence-
|
|
7
|
-
import { g as getProjectPath, a as claudeLocal, E as ExitCodeError, b as claudeCheckSession, s as systemPrompt } from './claudeLocal-
|
|
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-BQORFd9R.mjs';
|
|
6
|
+
import { l as logger, i as isDebug, c as configuration, a as readSettings, p as packageJson } from './persistence-YyHJPrEJ.mjs';
|
|
7
|
+
import { g as getProjectPath, a as claudeLocal, E as ExitCodeError, b as claudeCheckSession, s as systemPrompt } from './claudeLocal-D7uEQO2e.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-
|
|
13
|
+
import { b as parseSpecialCommand, a as MessageBuffer, M as MessageQueue2, h as hashObject } from './downloadImage-DFwUJ1-t.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-
|
|
18
|
+
import { i as isBun } from './spawnHappyCLI-iEcKfItK.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-
|
|
29
|
+
import { a as formatMessageForClaude } from './formatImageMessage-cI_AEqo1.mjs';
|
|
30
30
|
import { isDeepStrictEqual } from 'node:util';
|
|
31
|
-
import { i as initialMachineMetadata, s as stopCaffeinate, a as startCaffeinate } from './run-
|
|
32
|
-
import { getEnvironmentInfo } from './doctor-
|
|
33
|
-
import { notifyDaemonSessionStarted } from './controlClient-
|
|
34
|
-
import { c as createMcpContext, r as registerKillSessionHandler, d as detectGitWorktree } from './registerKillSessionHandler-
|
|
31
|
+
import { i as initialMachineMetadata, s as stopCaffeinate, a as startCaffeinate } from './run-DEIpQXCf.mjs';
|
|
32
|
+
import { getEnvironmentInfo } from './doctor-CrBPDAJR.mjs';
|
|
33
|
+
import { notifyDaemonSessionStarted } from './controlClient-CEliu-dY.mjs';
|
|
34
|
+
import { c as createMcpContext, r as registerKillSessionHandler, d as detectGitWorktree } from './registerKillSessionHandler-CaFN7Ti_.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-
|
|
43
|
+
import './sessionKeyCache-D0Y_V05P.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-
|
|
51
|
+
import './auth-DEvweBty.mjs';
|
|
52
52
|
import 'qrcode-terminal';
|
|
53
|
-
import './browser-
|
|
53
|
+
import './browser-C6JpWqen.mjs';
|
|
54
54
|
import 'open';
|
|
55
|
-
import './deviceKeys-
|
|
56
|
-
import './install-
|
|
55
|
+
import './deviceKeys-CxID9XkJ.mjs';
|
|
56
|
+
import './install-sbpQfY_l.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-
|
|
8
|
-
var logger = require('./persistence-
|
|
9
|
-
var claudeLocal = require('./claudeLocal-
|
|
7
|
+
var api = require('./api-lxlaOAan.cjs');
|
|
8
|
+
var logger = require('./persistence-ACqGUEtH.cjs');
|
|
9
|
+
var claudeLocal = require('./claudeLocal-BRkqm7Dv.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-
|
|
15
|
+
var downloadImage = require('./downloadImage-Cqy7ZDq9.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-
|
|
20
|
+
var spawnHappyCLI = require('./spawnHappyCLI-BabByXDO.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-
|
|
31
|
+
var formatImageMessage = require('./formatImageMessage-DFfcusj_.cjs');
|
|
32
32
|
var node_util = require('node:util');
|
|
33
|
-
var run = require('./run-
|
|
34
|
-
var doctor = require('./doctor-
|
|
35
|
-
var controlClient = require('./controlClient-
|
|
36
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
33
|
+
var run = require('./run-Djrrraug.cjs');
|
|
34
|
+
var doctor = require('./doctor-qquYvrNu.cjs');
|
|
35
|
+
var controlClient = require('./controlClient-BAJAvvWO.cjs');
|
|
36
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-BvYc-FOQ.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-
|
|
45
|
+
require('./sessionKeyCache-BnR0ARqZ.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-
|
|
53
|
+
require('./auth-DO429YIh.cjs');
|
|
54
54
|
require('qrcode-terminal');
|
|
55
|
-
require('./browser-
|
|
55
|
+
require('./browser-ChToh76t.cjs');
|
|
56
56
|
require('open');
|
|
57
|
-
require('./deviceKeys-
|
|
58
|
-
require('./install-
|
|
57
|
+
require('./deviceKeys-CFpY68YY.cjs');
|
|
58
|
+
require('./install-Bm5eNojk.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-
|
|
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-DEnJA94E.cjs', document.baseURI).href)));
|
|
736
736
|
const __dirname$1 = path.join(__filename$1, "..");
|
|
737
737
|
function getGlobalClaudeVersion() {
|
|
738
738
|
try {
|
|
@@ -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-
|
|
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-BQORFd9R.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-
|
|
7
|
-
import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-
|
|
8
|
-
import { B as BaseReasoningProcessor, h as handleConfigMetadataEvent, s as summarizeBashToolOutput } from './loadableToolOutput-
|
|
6
|
+
import { l as logger, i as isDebug, a as readSettings } from './persistence-YyHJPrEJ.mjs';
|
|
7
|
+
import { B as BasePermissionHandler, c as createSessionMetadata, s as setupOfflineReconnection } from './setupOfflineReconnection-E5sAFKRm.mjs';
|
|
8
|
+
import { B as BaseReasoningProcessor, h as handleConfigMetadataEvent, s as summarizeBashToolOutput } from './loadableToolOutput-DbXbVycg.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-
|
|
11
|
-
import { i as initialMachineMetadata, s as stopCaffeinate } from './run-
|
|
12
|
-
import { c as createMcpContext, r as registerKillSessionHandler } from './registerKillSessionHandler-
|
|
10
|
+
import { M as MessageQueue2, h as hashObject, a as MessageBuffer, p as parseClear, d as downloadImage } from './downloadImage-DFwUJ1-t.mjs';
|
|
11
|
+
import { i as initialMachineMetadata, s as stopCaffeinate } from './run-DEIpQXCf.mjs';
|
|
12
|
+
import { c as createMcpContext, r as registerKillSessionHandler } from './registerKillSessionHandler-CaFN7Ti_.mjs';
|
|
13
13
|
import { g as getFirstTurnInstruction } from './constants-pmXZGibX.mjs';
|
|
14
|
-
import { notifyDaemonSessionStarted } from './controlClient-
|
|
14
|
+
import { notifyDaemonSessionStarted } from './controlClient-CEliu-dY.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-
|
|
39
|
+
import './sessionKeyCache-D0Y_V05P.mjs';
|
|
40
40
|
import 'chalk';
|
|
41
41
|
import 'fs';
|
|
42
42
|
import 'os';
|
|
43
43
|
import 'tmp';
|
|
44
|
-
import './auth-
|
|
44
|
+
import './auth-DEvweBty.mjs';
|
|
45
45
|
import 'qrcode-terminal';
|
|
46
|
-
import './browser-
|
|
46
|
+
import './browser-C6JpWqen.mjs';
|
|
47
47
|
import 'open';
|
|
48
|
-
import './doctor-
|
|
48
|
+
import './doctor-CrBPDAJR.mjs';
|
|
49
49
|
import './doctor-ON7pN5G5.mjs';
|
|
50
50
|
import 'ps-list';
|
|
51
51
|
import 'cross-spawn';
|
|
52
|
-
import './spawnHappyCLI-
|
|
53
|
-
import './deviceKeys-
|
|
54
|
-
import './install-
|
|
52
|
+
import './spawnHappyCLI-iEcKfItK.mjs';
|
|
53
|
+
import './deviceKeys-CxID9XkJ.mjs';
|
|
54
|
+
import './install-sbpQfY_l.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", "CodexReasoning", "think", "save_memory"];
|
|
1343
|
+
const alwaysAutoApproveIds = ["change_title", "preview_html", "list_bugs", "save_memory"];
|
|
1344
1344
|
if (alwaysAutoApproveNames.some((name) => toolName.toLowerCase().includes(name.toLowerCase()))) {
|
|
1345
1345
|
return true;
|
|
1346
1346
|
}
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
var ink = require('ink');
|
|
4
4
|
var React = require('react');
|
|
5
|
-
var api = require('./api-
|
|
5
|
+
var api = require('./api-lxlaOAan.cjs');
|
|
6
6
|
var node_child_process = require('node:child_process');
|
|
7
7
|
var node_readline = require('node:readline');
|
|
8
|
-
var logger = require('./persistence-
|
|
9
|
-
var setupOfflineReconnection = require('./setupOfflineReconnection-
|
|
10
|
-
var loadableToolOutput = require('./loadableToolOutput-
|
|
8
|
+
var logger = require('./persistence-ACqGUEtH.cjs');
|
|
9
|
+
var setupOfflineReconnection = require('./setupOfflineReconnection-C8Ll2khg.cjs');
|
|
10
|
+
var loadableToolOutput = require('./loadableToolOutput-BzTaDndK.cjs');
|
|
11
11
|
var node_crypto = require('node:crypto');
|
|
12
|
-
var downloadImage = require('./downloadImage-
|
|
13
|
-
var run = require('./run-
|
|
14
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
12
|
+
var downloadImage = require('./downloadImage-Cqy7ZDq9.cjs');
|
|
13
|
+
var run = require('./run-Djrrraug.cjs');
|
|
14
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-BvYc-FOQ.cjs');
|
|
15
15
|
var constants = require('./constants-E_UWYTo3.cjs');
|
|
16
|
-
var controlClient = require('./controlClient-
|
|
16
|
+
var controlClient = require('./controlClient-BAJAvvWO.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-
|
|
41
|
+
require('./sessionKeyCache-BnR0ARqZ.cjs');
|
|
42
42
|
require('chalk');
|
|
43
43
|
require('fs');
|
|
44
44
|
require('os');
|
|
45
45
|
require('tmp');
|
|
46
|
-
require('./auth-
|
|
46
|
+
require('./auth-DO429YIh.cjs');
|
|
47
47
|
require('qrcode-terminal');
|
|
48
|
-
require('./browser-
|
|
48
|
+
require('./browser-ChToh76t.cjs');
|
|
49
49
|
require('open');
|
|
50
|
-
require('./doctor-
|
|
50
|
+
require('./doctor-qquYvrNu.cjs');
|
|
51
51
|
require('./doctor-C08m5Z9f.cjs');
|
|
52
52
|
require('ps-list');
|
|
53
53
|
require('cross-spawn');
|
|
54
|
-
require('./spawnHappyCLI-
|
|
55
|
-
require('./deviceKeys-
|
|
56
|
-
require('./install-
|
|
54
|
+
require('./spawnHappyCLI-BabByXDO.cjs');
|
|
55
|
+
require('./deviceKeys-CFpY68YY.cjs');
|
|
56
|
+
require('./install-Bm5eNojk.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", "CodexReasoning", "think", "save_memory"];
|
|
1345
|
+
const alwaysAutoApproveIds = ["change_title", "preview_html", "list_bugs", "save_memory"];
|
|
1346
1346
|
if (alwaysAutoApproveNames.some((name) => toolName.toLowerCase().includes(name.toLowerCase()))) {
|
|
1347
1347
|
return true;
|
|
1348
1348
|
}
|