@zonease/happy 0.6.43 → 0.6.45

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 (85) hide show
  1. package/dist/{api-B-PlVQY6.cjs → api-CPQUJQGJ.cjs} +19 -5
  2. package/dist/{api-BUCtd3cB.mjs → api-Cj4RF4ga.mjs} +18 -4
  3. package/dist/{auth-OL3nNcDX.cjs → auth-Bk9bRj3Q.cjs} +4 -4
  4. package/dist/{auth-qM2eojWx.mjs → auth-BxRfxsPn.mjs} +2 -2
  5. package/dist/{auth-DQH6q_q-.mjs → auth-Byjbkudh.mjs} +4 -4
  6. package/dist/{auth-BqGkUXvq.cjs → auth-Du-LmcLH.cjs} +2 -2
  7. package/dist/{browser-CY7VNU0C.cjs → browser-CBrNk2b6.cjs} +1 -1
  8. package/dist/{browser-D5RN_Axa.mjs → browser-CrNqwWO0.mjs} +1 -1
  9. package/dist/{claudeLocal-BXK_vQXS.mjs → claudeLocal-CR1aG4FT.mjs} +1 -1
  10. package/dist/{claudeLocal-HAXk0deK.cjs → claudeLocal-DMn1kiJq.cjs} +1 -1
  11. package/dist/codex/happyMcpStdioBridge.cjs +8 -0
  12. package/dist/codex/happyMcpStdioBridge.mjs +8 -0
  13. package/dist/{config-2wMjzcHl.mjs → config-DIUIjSc3.mjs} +1 -1
  14. package/dist/{config-CaKxWGVe.cjs → config-DfXlAE9f.cjs} +1 -1
  15. package/dist/{connect-BAunPyp_.mjs → connect-Blv2AOQ7.mjs} +4 -4
  16. package/dist/{connect-Dt1vY1BC.cjs → connect-DxKG4c89.cjs} +4 -4
  17. package/dist/{controlClient-yTkpwcOq.cjs → controlClient-Aga5KOuL.cjs} +1 -1
  18. package/dist/{controlClient-BzzTNSfl.mjs → controlClient-D-5BGcGC.mjs} +1 -1
  19. package/dist/{cursorApprovalHook-B2chnVni.cjs → cursorApprovalHook-DhdW7SxP.cjs} +2 -2
  20. package/dist/{cursorApprovalHook-BDLPzI5l.mjs → cursorApprovalHook-G462ilpH.mjs} +2 -2
  21. package/dist/{cursorApprovalServer-Ba1yOUCA.mjs → cursorApprovalServer-CajHEZIy.mjs} +1 -1
  22. package/dist/{cursorApprovalServer-xwxVGL3u.cjs → cursorApprovalServer-DJDjSGu1.cjs} +1 -1
  23. package/dist/{deviceKeys-CQyFFPtt.mjs → deviceKeys-DL_YhAVs.mjs} +2 -2
  24. package/dist/{deviceKeys-CdW-HPnz.cjs → deviceKeys-DjItabvw.cjs} +2 -2
  25. package/dist/{doctor-DDT2TXHH.mjs → doctor-DpCWRLts.mjs} +2 -2
  26. package/dist/{doctor-D4xWXiE7.cjs → doctor-s5r5tBV2.cjs} +2 -2
  27. package/dist/{downloadImage-3A6zY5AX.cjs → downloadImage-AYf-3ZYW.cjs} +1 -1
  28. package/dist/{downloadImage-BqNp0l7y.mjs → downloadImage-aU6-_LTd.mjs} +1 -1
  29. package/dist/{enroll-BlZ0giJI.mjs → enroll-AafyH7YB.mjs} +3 -3
  30. package/dist/{enroll-DeYs89Ic.cjs → enroll-DDmZIfwr.cjs} +3 -3
  31. package/dist/{evidence-Bn1JXtdz.cjs → evidence-BeL77p_3.cjs} +1 -1
  32. package/dist/{evidence-PUnN9yPK.mjs → evidence-s4HSdwJW.mjs} +1 -1
  33. package/dist/{formatImageMessage-bVFGFDJl.cjs → formatImageMessage-D09-zSuq.cjs} +1 -1
  34. package/dist/{formatImageMessage-BRHeLf0-.mjs → formatImageMessage-X7lBbNk9.mjs} +1 -1
  35. package/dist/index.cjs +46 -46
  36. package/dist/index.mjs +46 -46
  37. package/dist/{install-Q-YMwwwg.cjs → install-CUhg7JSa.cjs} +2 -2
  38. package/dist/{install-Jrs6YUu8.cjs → install-CV4tyU-f.cjs} +1 -1
  39. package/dist/{install-BLPNuSeM.mjs → install-D3-4H76L.mjs} +2 -2
  40. package/dist/{install-BOIcR_Wr.mjs → install-MLAZRCd1.mjs} +1 -1
  41. package/dist/lib.cjs +3 -3
  42. package/dist/lib.mjs +3 -3
  43. package/dist/{loadableToolOutput-DzReWITb.mjs → loadableToolOutput-B8h8vRAi.mjs} +2 -2
  44. package/dist/{loadableToolOutput-B3qpMqXT.cjs → loadableToolOutput-CyxrSX6o.cjs} +2 -2
  45. package/dist/{persistence-D7zNFI-d.cjs → persistence-C8YmO6e-.cjs} +1 -1
  46. package/dist/{persistence-DbLMvLvk.mjs → persistence-CIuIRPwE.mjs} +1 -1
  47. package/dist/{push-RT6Y0Hr3.cjs → push-C3zA8d8v.cjs} +6 -6
  48. package/dist/{push-z5wQ4Ki_.mjs → push-CmNOCsuP.mjs} +6 -6
  49. package/dist/{registerKillSessionHandler-DmfnJ0zq.mjs → registerKillSessionHandler-CH_7VXKc.mjs} +63 -5
  50. package/dist/{registerKillSessionHandler-MoLdSQxM.cjs → registerKillSessionHandler-LeIqHfbo.cjs} +63 -5
  51. package/dist/{run-C5StYRIB.cjs → run-0LQDK84Z.cjs} +8 -8
  52. package/dist/{run-BFnSUK1o.mjs → run-C4WAd7tO.mjs} +8 -8
  53. package/dist/{runClaude-ChRp6f5G.cjs → runClaude-C35zHmK5.cjs} +16 -16
  54. package/dist/{runClaude-CjENBdrX.mjs → runClaude-CUKs1uIM.mjs} +15 -15
  55. package/dist/{runCodex-DcQGyotH.cjs → runCodex-DqH5zG0r.cjs} +15 -15
  56. package/dist/{runCodex-BzQWlRoj.mjs → runCodex-DyZ2jjPq.mjs} +15 -15
  57. package/dist/{runCursor-BlPAxaTy.cjs → runCursor-CUYlNNzB.cjs} +14 -14
  58. package/dist/{runCursor-B73z6MCN.mjs → runCursor-DBJr4Grx.mjs} +14 -14
  59. package/dist/{runGemini-JFqaIC3u.cjs → runGemini-DR8URN73.cjs} +21 -17
  60. package/dist/{runGemini-BPv4UzuF.mjs → runGemini-wXzzfjlb.mjs} +21 -17
  61. package/dist/{runOneShot-DTukim2A.mjs → runOneShot-C7rpjuvK.mjs} +2 -2
  62. package/dist/{runOneShot-2iV11e9L.cjs → runOneShot-CyQgMHdu.cjs} +2 -2
  63. package/dist/{serve-BnlYj5ek.mjs → serve-9sPqPPfs.mjs} +6 -6
  64. package/dist/{serve-BDwuAIK4.cjs → serve-CLUZny1h.cjs} +6 -6
  65. package/dist/{session-Cp9LEESM.cjs → session-DsK6TYKl.cjs} +5 -5
  66. package/dist/{session-gfeFU8CA.mjs → session-DwFwW1If.mjs} +5 -5
  67. package/dist/{sessionKeyCache-3Pme04yL.cjs → sessionKeyCache-CCCCQahC.cjs} +1 -1
  68. package/dist/{sessionKeyCache-DtBS_Sb3.mjs → sessionKeyCache-Jman_FzK.mjs} +1 -1
  69. package/dist/{sessionList-B1w4BUdv.mjs → sessionList-CRAr1LIi.mjs} +2 -2
  70. package/dist/{sessionList-BR_5UDZJ.cjs → sessionList-jb1iwUO8.cjs} +2 -2
  71. package/dist/{sessionSummary-E-a2bg8W.mjs → sessionSummary-By9LYnr1.mjs} +3 -3
  72. package/dist/{sessionSummary-DLweYgHO.cjs → sessionSummary-C4ttdYkc.cjs} +3 -3
  73. package/dist/{setupOfflineReconnection-DHwthFtd.mjs → setupOfflineReconnection-B8LXjrYU.mjs} +3 -3
  74. package/dist/{setupOfflineReconnection-Dkp00dC9.cjs → setupOfflineReconnection-EeK8Zibv.cjs} +3 -3
  75. package/dist/{spawnHappyCLI-C2uY9WV-.cjs → spawnHappyCLI-DH1071fN.cjs} +1 -1
  76. package/dist/{spawnHappyCLI-Dt7fbmbk.mjs → spawnHappyCLI-ZuC3trh3.mjs} +1 -1
  77. package/dist/{ssh-CsnS89Lr.cjs → ssh-DsBRhE6K.cjs} +5 -5
  78. package/dist/{ssh-C-nEZiGP.mjs → ssh-bVM6-eHl.mjs} +5 -5
  79. package/dist/{task-B-8_QGGX.mjs → task-QsscHPOu.mjs} +6 -6
  80. package/dist/{task-lrLb4FCL.cjs → task-rXw2soeh.cjs} +6 -6
  81. package/dist/{uninstall-DMjUlEXT.cjs → uninstall-CFVmL2EA.cjs} +2 -2
  82. package/dist/{uninstall-CirMt_WC.mjs → uninstall-D-DMUz_6.mjs} +2 -2
  83. package/dist/{update-CfXbYshs.mjs → update-CS-sauOX.mjs} +3 -3
  84. package/dist/{update-mx2p28IP.cjs → update-lVVrNorG.cjs} +3 -3
  85. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var logger = require('./persistence-D7zNFI-d.cjs');
4
+ var logger = require('./persistence-C8YmO6e-.cjs');
5
5
  var node_events = require('node:events');
6
6
  var socket_ioClient = require('socket.io-client');
7
7
  var z = require('zod');
@@ -26,7 +26,7 @@ var tweetnacl = require('tweetnacl');
26
26
  var base64 = require('@stablelib/base64');
27
27
  var node_readline = require('node:readline');
28
28
  var expoServerSdk = require('expo-server-sdk');
29
- var sessionKeyCache = require('./sessionKeyCache-3Pme04yL.cjs');
29
+ var sessionKeyCache = require('./sessionKeyCache-CCCCQahC.cjs');
30
30
  var chalk = require('chalk');
31
31
 
32
32
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
@@ -1395,7 +1395,7 @@ function resolveToolsDir() {
1395
1395
  }
1396
1396
  function findToolsDir() {
1397
1397
  try {
1398
- const manifest = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('api-B-PlVQY6.cjs', document.baseURI).href))).resolve(`${toolsPackageName()}/package.json`);
1398
+ const manifest = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('api-CPQUJQGJ.cjs', document.baseURI).href))).resolve(`${toolsPackageName()}/package.json`);
1399
1399
  return path.dirname(manifest);
1400
1400
  } catch {
1401
1401
  }
@@ -5975,6 +5975,17 @@ async function getCodexSessionPreview(codexSessionId, limit = 10) {
5975
5975
  return messages.slice(-limit);
5976
5976
  }
5977
5977
 
5978
+ function rewriteSessionMetaId(line, newId) {
5979
+ try {
5980
+ const parsed = JSON.parse(line);
5981
+ if (parsed.type !== "session_meta" || !parsed.payload) return line;
5982
+ parsed.payload.session_id = newId;
5983
+ parsed.payload.id = newId;
5984
+ return JSON.stringify(parsed);
5985
+ } catch {
5986
+ return line;
5987
+ }
5988
+ }
5978
5989
  async function forkCodexSession(codexSessionId) {
5979
5990
  return forkAndTruncateCodexSession(codexSessionId);
5980
5991
  }
@@ -5990,7 +6001,10 @@ async function forkAndTruncateCodexSession(codexSessionId, truncateBeforeUuid) {
5990
6001
  const newPath = path.join(dir, `rollout-${dateStr}-${newUUID}.jsonl`);
5991
6002
  try {
5992
6003
  if (!truncateBeforeUuid) {
5993
- await promises.copyFile(originalPath, newPath);
6004
+ const content = await promises.readFile(originalPath, "utf-8");
6005
+ const lines = content.split("\n");
6006
+ const outputLines = lines.map((line, index) => index === 0 ? rewriteSessionMetaId(line, newUUID) : line);
6007
+ await promises.writeFile(newPath, outputLines.join("\n"), "utf-8");
5994
6008
  } else {
5995
6009
  const content = await promises.readFile(originalPath, "utf-8");
5996
6010
  const lines = content.split("\n");
@@ -6017,7 +6031,7 @@ async function forkAndTruncateCodexSession(codexSessionId, truncateBeforeUuid) {
6017
6031
  } catch {
6018
6032
  }
6019
6033
  if (!foundTruncationPoint) {
6020
- outputLines.push(line);
6034
+ outputLines.push(outputLines.length === 0 ? rewriteSessionMetaId(line, newUUID) : line);
6021
6035
  }
6022
6036
  }
6023
6037
  await promises.writeFile(newPath, outputLines.join("\n") + "\n", "utf-8");
@@ -1,5 +1,5 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import axios from 'axios';
2
- import { l as logger, c as configuration, e as encodeBase64, f as encrypt, g as decrypt, h as decodeBase64, i as isDebug, B as encryptLegacy, a as readSettings, C as getRandomBytes, D as libsodiumEncryptForPublicKey } from './persistence-DbLMvLvk.mjs';
2
+ import { l as logger, c as configuration, e as encodeBase64, f as encrypt, g as decrypt, h as decodeBase64, i as isDebug, B as encryptLegacy, a as readSettings, C as getRandomBytes, D as libsodiumEncryptForPublicKey } from './persistence-CIuIRPwE.mjs';
3
3
  import { EventEmitter } from 'node:events';
4
4
  import { io } from 'socket.io-client';
5
5
  import { z } from 'zod';
@@ -24,7 +24,7 @@ import tweetnacl from 'tweetnacl';
24
24
  import { encode, decode } from '@stablelib/base64';
25
25
  import { createInterface } from 'node:readline';
26
26
  import { Expo } from 'expo-server-sdk';
27
- import { c as cacheSessionKey } from './sessionKeyCache-DtBS_Sb3.mjs';
27
+ import { c as cacheSessionKey } from './sessionKeyCache-Jman_FzK.mjs';
28
28
  import chalk from 'chalk';
29
29
 
30
30
  z.object({
@@ -5972,6 +5972,17 @@ async function getCodexSessionPreview(codexSessionId, limit = 10) {
5972
5972
  return messages.slice(-limit);
5973
5973
  }
5974
5974
 
5975
+ function rewriteSessionMetaId(line, newId) {
5976
+ try {
5977
+ const parsed = JSON.parse(line);
5978
+ if (parsed.type !== "session_meta" || !parsed.payload) return line;
5979
+ parsed.payload.session_id = newId;
5980
+ parsed.payload.id = newId;
5981
+ return JSON.stringify(parsed);
5982
+ } catch {
5983
+ return line;
5984
+ }
5985
+ }
5975
5986
  async function forkCodexSession(codexSessionId) {
5976
5987
  return forkAndTruncateCodexSession(codexSessionId);
5977
5988
  }
@@ -5987,7 +5998,10 @@ async function forkAndTruncateCodexSession(codexSessionId, truncateBeforeUuid) {
5987
5998
  const newPath = join(dir, `rollout-${dateStr}-${newUUID}.jsonl`);
5988
5999
  try {
5989
6000
  if (!truncateBeforeUuid) {
5990
- await copyFile(originalPath, newPath);
6001
+ const content = await readFile(originalPath, "utf-8");
6002
+ const lines = content.split("\n");
6003
+ const outputLines = lines.map((line, index) => index === 0 ? rewriteSessionMetaId(line, newUUID) : line);
6004
+ await writeFile$1(newPath, outputLines.join("\n"), "utf-8");
5991
6005
  } else {
5992
6006
  const content = await readFile(originalPath, "utf-8");
5993
6007
  const lines = content.split("\n");
@@ -6014,7 +6028,7 @@ async function forkAndTruncateCodexSession(codexSessionId, truncateBeforeUuid) {
6014
6028
  } catch {
6015
6029
  }
6016
6030
  if (!foundTruncationPoint) {
6017
- outputLines.push(line);
6031
+ outputLines.push(outputLines.length === 0 ? rewriteSessionMetaId(line, newUUID) : line);
6018
6032
  }
6019
6033
  }
6020
6034
  await writeFile$1(newPath, outputLines.join("\n") + "\n", "utf-8");
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var logger = require('./persistence-D7zNFI-d.cjs');
5
- var auth = require('./auth-BqGkUXvq.cjs');
4
+ var logger = require('./persistence-C8YmO6e-.cjs');
5
+ var auth = require('./auth-Du-LmcLH.cjs');
6
6
  var fs = require('node:fs');
7
7
  var node_readline = require('node:readline');
8
- var controlClient = require('./controlClient-yTkpwcOq.cjs');
8
+ var controlClient = require('./controlClient-Aga5KOuL.cjs');
9
9
  var os = require('node:os');
10
10
  require('node:fs/promises');
11
11
  require('node:path');
@@ -16,7 +16,7 @@ require('fs');
16
16
  require('axios');
17
17
  require('qrcode-terminal');
18
18
  require('./time-Bj2HRkKH.cjs');
19
- require('./browser-CY7VNU0C.cjs');
19
+ require('./browser-CBrNk2b6.cjs');
20
20
  require('open');
21
21
  require('react');
22
22
  require('ink');
@@ -1,10 +1,10 @@
1
- import { e as encodeBase64, c as configuration, l as logger, r as readCredentials, u as updateSettings, i as isDebug, s as encodeBase64Url, h as decodeBase64, t as writeCredentialsLegacy, w as writeCredentialsDataKey } from './persistence-DbLMvLvk.mjs';
1
+ import { e as encodeBase64, c as configuration, l as logger, r as readCredentials, u as updateSettings, i as isDebug, s as encodeBase64Url, h as decodeBase64, t as writeCredentialsLegacy, w as writeCredentialsDataKey } from './persistence-CIuIRPwE.mjs';
2
2
  import { randomBytes, randomUUID } from 'node:crypto';
3
3
  import tweetnacl from 'tweetnacl';
4
4
  import axios from 'axios';
5
5
  import qrcode from 'qrcode-terminal';
6
6
  import { d as delay } from './time-DgsBLJA_.mjs';
7
- import { o as openBrowser } from './browser-D5RN_Axa.mjs';
7
+ import { o as openBrowser } from './browser-CrNqwWO0.mjs';
8
8
  import React, { useState } from 'react';
9
9
  import { useInput, Box, Text, render } from 'ink';
10
10
  import 'node:fs/promises';
@@ -1,9 +1,9 @@
1
1
  import chalk from 'chalk';
2
- import { r as readCredentials, a as readSettings, c as configuration, l as logger, b as clearCredentials, d as clearMachineId } from './persistence-DbLMvLvk.mjs';
3
- import { authAndSetupMachineIfNeeded } from './auth-qM2eojWx.mjs';
2
+ import { r as readCredentials, a as readSettings, c as configuration, l as logger, b as clearCredentials, d as clearMachineId } from './persistence-CIuIRPwE.mjs';
3
+ import { authAndSetupMachineIfNeeded } from './auth-BxRfxsPn.mjs';
4
4
  import { existsSync, rmSync } from 'node:fs';
5
5
  import { createInterface } from 'node:readline';
6
- import { checkIfDaemonRunningAndCleanupStaleState, stopDaemon } from './controlClient-BzzTNSfl.mjs';
6
+ import { checkIfDaemonRunningAndCleanupStaleState, stopDaemon } from './controlClient-D-5BGcGC.mjs';
7
7
  import os from 'node:os';
8
8
  import 'node:fs/promises';
9
9
  import 'node:path';
@@ -14,7 +14,7 @@ import 'fs';
14
14
  import 'axios';
15
15
  import 'qrcode-terminal';
16
16
  import './time-DgsBLJA_.mjs';
17
- import './browser-D5RN_Axa.mjs';
17
+ import './browser-CrNqwWO0.mjs';
18
18
  import 'open';
19
19
  import 'react';
20
20
  import 'ink';
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./persistence-D7zNFI-d.cjs');
3
+ var logger = require('./persistence-C8YmO6e-.cjs');
4
4
  var node_crypto = require('node:crypto');
5
5
  var tweetnacl = require('tweetnacl');
6
6
  var axios = require('axios');
7
7
  var qrcode = require('qrcode-terminal');
8
8
  var time = require('./time-Bj2HRkKH.cjs');
9
- var browser = require('./browser-CY7VNU0C.cjs');
9
+ var browser = require('./browser-CBrNk2b6.cjs');
10
10
  var React = require('react');
11
11
  var ink = require('ink');
12
12
  require('node:fs/promises');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var open = require('open');
4
- var logger = require('./persistence-D7zNFI-d.cjs');
4
+ var logger = require('./persistence-C8YmO6e-.cjs');
5
5
 
6
6
  async function openBrowser(url) {
7
7
  try {
@@ -1,5 +1,5 @@
1
1
  import open from 'open';
2
- import { l as logger } from './persistence-DbLMvLvk.mjs';
2
+ import { l as logger } from './persistence-CIuIRPwE.mjs';
3
3
 
4
4
  async function openBrowser(url) {
5
5
  try {
@@ -3,7 +3,7 @@ import { resolve, join } from 'node:path';
3
3
  import { createInterface } from 'node:readline';
4
4
  import { existsSync, readFileSync, readdirSync, statSync, mkdirSync } from 'node:fs';
5
5
  import { randomUUID } from 'node:crypto';
6
- import { l as logger } from './persistence-DbLMvLvk.mjs';
6
+ import { l as logger } from './persistence-CIuIRPwE.mjs';
7
7
  import { homedir } from 'node:os';
8
8
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
9
9
  import { g as getBaseSystemPrompt } from './prompt-BsAZsPbo.mjs';
@@ -5,7 +5,7 @@ var path = require('node:path');
5
5
  var node_readline = require('node:readline');
6
6
  var fs = require('node:fs');
7
7
  var node_crypto = require('node:crypto');
8
- var logger = require('./persistence-D7zNFI-d.cjs');
8
+ var logger = require('./persistence-C8YmO6e-.cjs');
9
9
  var os = require('node:os');
10
10
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
11
11
  var prompt = require('./prompt-BTWDZZO0.cjs');
@@ -77,6 +77,14 @@ async function main() {
77
77
  title: z.z.string().optional().describe("Display title for the preview")
78
78
  }
79
79
  });
80
+ registerForwardedTool("submit_bug", {
81
+ description: "File a bug report on the user's Happy bug board. Use when the user asks to report or file a bug. Write the description yourself from the conversation: what went wrong, what was expected, and the steps to reproduce it.",
82
+ title: "Submit Bug",
83
+ inputSchema: {
84
+ description: z.z.string().describe("What went wrong, what was expected, and how to reproduce it. The title is derived from the first line."),
85
+ visibility: z.z.enum(["shared", "private"]).optional().describe("shared (default) puts it on the shared board; private keeps it to the owner")
86
+ }
87
+ });
80
88
  const stdio = new stdio_js.StdioServerTransport();
81
89
  await server.connect(stdio);
82
90
  }
@@ -75,6 +75,14 @@ async function main() {
75
75
  title: z.string().optional().describe("Display title for the preview")
76
76
  }
77
77
  });
78
+ registerForwardedTool("submit_bug", {
79
+ description: "File a bug report on the user's Happy bug board. Use when the user asks to report or file a bug. Write the description yourself from the conversation: what went wrong, what was expected, and the steps to reproduce it.",
80
+ title: "Submit Bug",
81
+ inputSchema: {
82
+ description: z.string().describe("What went wrong, what was expected, and how to reproduce it. The title is derived from the first line."),
83
+ visibility: z.enum(["shared", "private"]).optional().describe("shared (default) puts it on the shared board; private keeps it to the owner")
84
+ }
85
+ });
78
86
  const stdio = new StdioServerTransport();
79
87
  await server.connect(stdio);
80
88
  }
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { execSync } from 'child_process';
5
- import { l as logger } from './persistence-DbLMvLvk.mjs';
5
+ import { l as logger } from './persistence-CIuIRPwE.mjs';
6
6
  import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './constants-pmXZGibX.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:fs';
@@ -4,7 +4,7 @@ var fs = require('fs');
4
4
  var path = require('path');
5
5
  var os = require('os');
6
6
  var child_process = require('child_process');
7
- var logger = require('./persistence-D7zNFI-d.cjs');
7
+ var logger = require('./persistence-C8YmO6e-.cjs');
8
8
  var constants = require('./constants-E_UWYTo3.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:fs');
@@ -2,11 +2,11 @@ import chalk from 'chalk';
2
2
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
3
3
  import { homedir } from 'os';
4
4
  import { join } from 'path';
5
- import { r as readCredentials } from './persistence-DbLMvLvk.mjs';
6
- import { A as ApiClient } from './api-BUCtd3cB.mjs';
5
+ import { r as readCredentials } from './persistence-CIuIRPwE.mjs';
6
+ import { A as ApiClient } from './api-Cj4RF4ga.mjs';
7
7
  import { createServer } from 'http';
8
8
  import { randomBytes, createHash } from 'crypto';
9
- import { o as openBrowser } from './browser-D5RN_Axa.mjs';
9
+ import { o as openBrowser } from './browser-CrNqwWO0.mjs';
10
10
  import { exec } from 'child_process';
11
11
  import { promisify } from 'util';
12
12
  import 'node:fs/promises';
@@ -32,7 +32,7 @@ import 'ws';
32
32
  import '@stablelib/base64';
33
33
  import 'node:readline';
34
34
  import 'expo-server-sdk';
35
- import './sessionKeyCache-DtBS_Sb3.mjs';
35
+ import './sessionKeyCache-Jman_FzK.mjs';
36
36
  import 'open';
37
37
 
38
38
  const CLIENT_ID$2 = "app_EMoamEEZ73f0CkXaXp7hrann";
@@ -4,11 +4,11 @@ var chalk = require('chalk');
4
4
  var fs = require('fs');
5
5
  var os = require('os');
6
6
  var path = require('path');
7
- var logger = require('./persistence-D7zNFI-d.cjs');
8
- var api = require('./api-B-PlVQY6.cjs');
7
+ var logger = require('./persistence-C8YmO6e-.cjs');
8
+ var api = require('./api-CPQUJQGJ.cjs');
9
9
  var http = require('http');
10
10
  var crypto = require('crypto');
11
- var browser = require('./browser-CY7VNU0C.cjs');
11
+ var browser = require('./browser-CBrNk2b6.cjs');
12
12
  var child_process = require('child_process');
13
13
  var util = require('util');
14
14
  require('node:fs/promises');
@@ -34,7 +34,7 @@ require('ws');
34
34
  require('@stablelib/base64');
35
35
  require('node:readline');
36
36
  require('expo-server-sdk');
37
- require('./sessionKeyCache-3Pme04yL.cjs');
37
+ require('./sessionKeyCache-CCCCQahC.cjs');
38
38
  require('open');
39
39
 
40
40
  const CLIENT_ID$2 = "app_EMoamEEZ73f0CkXaXp7hrann";
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./persistence-D7zNFI-d.cjs');
3
+ var logger = require('./persistence-C8YmO6e-.cjs');
4
4
  var projectPath = require('./projectPath-ChLhdOyt.cjs');
5
5
  var fs = require('fs');
6
6
  var path = require('path');
@@ -1,4 +1,4 @@
1
- import { l as logger, m as readDaemonState, n as clearDaemonState } from './persistence-DbLMvLvk.mjs';
1
+ import { l as logger, m as readDaemonState, n as clearDaemonState } from './persistence-CIuIRPwE.mjs';
2
2
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
3
3
  import { readFileSync } from 'fs';
4
4
  import { join } from 'path';
@@ -2,12 +2,12 @@
2
2
 
3
3
  var fs = require('node:fs');
4
4
  var path = require('node:path');
5
- var cursorApprovalServer = require('./cursorApprovalServer-xwxVGL3u.cjs');
5
+ var cursorApprovalServer = require('./cursorApprovalServer-DJDjSGu1.cjs');
6
6
  require('node:http');
7
7
  require('node:crypto');
8
8
  require('node:fs/promises');
9
9
  require('node:os');
10
- require('./persistence-D7zNFI-d.cjs');
10
+ require('./persistence-C8YmO6e-.cjs');
11
11
  require('zod');
12
12
  require('tweetnacl');
13
13
  require('chalk');
@@ -1,11 +1,11 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { a as approvalRegistryDir, A as APPROVAL_ENDPOINT_FILE } from './cursorApprovalServer-Ba1yOUCA.mjs';
3
+ import { a as approvalRegistryDir, A as APPROVAL_ENDPOINT_FILE } from './cursorApprovalServer-CajHEZIy.mjs';
4
4
  import 'node:http';
5
5
  import 'node:crypto';
6
6
  import 'node:fs/promises';
7
7
  import 'node:os';
8
- import './persistence-DbLMvLvk.mjs';
8
+ import './persistence-CIuIRPwE.mjs';
9
9
  import 'zod';
10
10
  import 'tweetnacl';
11
11
  import 'chalk';
@@ -4,7 +4,7 @@ import { mkdir, writeFile, rename, readFile, rm, readdir, rmdir } from 'node:fs/
4
4
  import { existsSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
6
  import { homedir } from 'node:os';
7
- import { l as logger } from './persistence-DbLMvLvk.mjs';
7
+ import { l as logger } from './persistence-CIuIRPwE.mjs';
8
8
 
9
9
  const TOOL_NAME_MAP = {
10
10
  read: "Read",
@@ -6,7 +6,7 @@ var promises = require('node:fs/promises');
6
6
  var fs = require('node:fs');
7
7
  var path = require('node:path');
8
8
  var os = require('node:os');
9
- var logger = require('./persistence-D7zNFI-d.cjs');
9
+ var logger = require('./persistence-C8YmO6e-.cjs');
10
10
 
11
11
  const TOOL_NAME_MAP = {
12
12
  read: "Read",
@@ -1,6 +1,6 @@
1
1
  import axios from 'axios';
2
- import { h as decodeBase64, e as encodeBase64, f as encrypt, g as decrypt, c as configuration } from './persistence-DbLMvLvk.mjs';
3
- import { decryptWithEphemeralKey } from './auth-qM2eojWx.mjs';
2
+ import { h as decodeBase64, e as encodeBase64, f as encrypt, g as decrypt, c as configuration } from './persistence-CIuIRPwE.mjs';
3
+ import { decryptWithEphemeralKey } from './auth-BxRfxsPn.mjs';
4
4
  import tweetnacl from 'tweetnacl';
5
5
  import { existsSync } from 'node:fs';
6
6
  import { writeFile, mkdir, readFile } from 'node:fs/promises';
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var axios = require('axios');
4
- var logger = require('./persistence-D7zNFI-d.cjs');
5
- var auth = require('./auth-BqGkUXvq.cjs');
4
+ var logger = require('./persistence-C8YmO6e-.cjs');
5
+ var auth = require('./auth-Du-LmcLH.cjs');
6
6
  var tweetnacl = require('tweetnacl');
7
7
  var fs = require('node:fs');
8
8
  var promises = require('node:fs/promises');
@@ -1,6 +1,6 @@
1
1
  import chalk from 'chalk';
2
- import { p as packageJson, c as configuration, a as readSettings, r as readCredentials, m as readDaemonState } from './persistence-DbLMvLvk.mjs';
3
- import { checkIfDaemonRunningAndCleanupStaleState } from './controlClient-BzzTNSfl.mjs';
2
+ import { p as packageJson, c as configuration, a as readSettings, r as readCredentials, m as readDaemonState } from './persistence-CIuIRPwE.mjs';
3
+ import { checkIfDaemonRunningAndCleanupStaleState } from './controlClient-D-5BGcGC.mjs';
4
4
  import { findAllHappyProcesses } from './doctor-ON7pN5G5.mjs';
5
5
  import { existsSync, readdirSync, statSync } from 'node:fs';
6
6
  import { join } from 'node:path';
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var logger = require('./persistence-D7zNFI-d.cjs');
5
- var controlClient = require('./controlClient-yTkpwcOq.cjs');
4
+ var logger = require('./persistence-C8YmO6e-.cjs');
5
+ var controlClient = require('./controlClient-Aga5KOuL.cjs');
6
6
  var doctor = require('./doctor-C08m5Z9f.cjs');
7
7
  var fs = require('node:fs');
8
8
  var path = require('node:path');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./persistence-D7zNFI-d.cjs');
3
+ var logger = require('./persistence-C8YmO6e-.cjs');
4
4
  var crypto = require('crypto');
5
5
  var axios = require('axios');
6
6
 
@@ -1,4 +1,4 @@
1
- import { l as logger } from './persistence-DbLMvLvk.mjs';
1
+ import { l as logger } from './persistence-CIuIRPwE.mjs';
2
2
  import { createHash } from 'crypto';
3
3
  import axios from 'axios';
4
4
 
@@ -1,8 +1,8 @@
1
1
  import axios from 'axios';
2
2
  import tweetnacl from 'tweetnacl';
3
3
  import { createHmac, randomBytes } from 'node:crypto';
4
- import { r as readCredentials, c as configuration, h as decodeBase64, u as updateSettings, w as writeCredentialsDataKey, o as libsodiumPublicKeyFromSecretKey } from './persistence-DbLMvLvk.mjs';
5
- import { decryptWithEphemeralKey } from './auth-qM2eojWx.mjs';
4
+ import { r as readCredentials, c as configuration, h as decodeBase64, u as updateSettings, w as writeCredentialsDataKey, o as libsodiumPublicKeyFromSecretKey } from './persistence-CIuIRPwE.mjs';
5
+ import { decryptWithEphemeralKey } from './auth-BxRfxsPn.mjs';
6
6
  import 'node:fs/promises';
7
7
  import 'node:fs';
8
8
  import 'node:os';
@@ -12,7 +12,7 @@ import 'chalk';
12
12
  import 'fs';
13
13
  import 'qrcode-terminal';
14
14
  import './time-DgsBLJA_.mjs';
15
- import './browser-D5RN_Axa.mjs';
15
+ import './browser-CrNqwWO0.mjs';
16
16
  import 'open';
17
17
  import 'react';
18
18
  import 'ink';
@@ -3,8 +3,8 @@
3
3
  var axios = require('axios');
4
4
  var tweetnacl = require('tweetnacl');
5
5
  var node_crypto = require('node:crypto');
6
- var logger = require('./persistence-D7zNFI-d.cjs');
7
- var auth = require('./auth-BqGkUXvq.cjs');
6
+ var logger = require('./persistence-C8YmO6e-.cjs');
7
+ var auth = require('./auth-Du-LmcLH.cjs');
8
8
  require('node:fs/promises');
9
9
  require('node:fs');
10
10
  require('node:os');
@@ -14,7 +14,7 @@ require('chalk');
14
14
  require('fs');
15
15
  require('qrcode-terminal');
16
16
  require('./time-Bj2HRkKH.cjs');
17
- require('./browser-CY7VNU0C.cjs');
17
+ require('./browser-CBrNk2b6.cjs');
18
18
  require('open');
19
19
  require('react');
20
20
  require('ink');
@@ -5,7 +5,7 @@ var fs = require('node:fs');
5
5
  var promises = require('node:fs/promises');
6
6
  var node_crypto = require('node:crypto');
7
7
  var path = require('node:path');
8
- var logger = require('./persistence-D7zNFI-d.cjs');
8
+ var logger = require('./persistence-C8YmO6e-.cjs');
9
9
  var workflowReports = require('./workflowReports-BEWuQesA.cjs');
10
10
  var workflowCommon = require('./workflowCommon-Bl568-rt.cjs');
11
11
  require('node:os');
@@ -3,7 +3,7 @@ import { constants } from 'node:fs';
3
3
  import { mkdir, appendFile, access, readFile } from 'node:fs/promises';
4
4
  import { randomUUID } from 'node:crypto';
5
5
  import { basename, dirname, resolve } from 'node:path';
6
- import { c as configuration } from './persistence-DbLMvLvk.mjs';
6
+ import { c as configuration } from './persistence-CIuIRPwE.mjs';
7
7
  import { r as renderEvidenceReport, i as inferEvidenceKind } from './workflowReports-Dd8-4-8f.mjs';
8
8
  import { p as parseWorkflowArgs, s as stringFlag, b as booleanFlag, a as printOrWriteOutput } from './workflowCommon-B0d01Y_a.mjs';
9
9
  import 'node:os';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var downloadImage = require('./downloadImage-3A6zY5AX.cjs');
3
+ var downloadImage = require('./downloadImage-AYf-3ZYW.cjs');
4
4
 
5
5
  async function formatMessageForClaude(text, images) {
6
6
  const content = [];
@@ -1,4 +1,4 @@
1
- import { d as downloadImage } from './downloadImage-BqNp0l7y.mjs';
1
+ import { d as downloadImage } from './downloadImage-aU6-_LTd.mjs';
2
2
 
3
3
  async function formatMessageForClaude(text, images) {
4
4
  const content = [];