very-happy-cli 0.2.178 → 0.2.179
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/{AcpBackend-DCQXHRzT.mjs → AcpBackend-CHp3y7cb.mjs} +135 -16
- package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DFipFF7-.cjs} +135 -16
- package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-0zpvRJXc.cjs} +38 -4
- package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-d2-rKWWa.mjs} +38 -4
- package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-CH3zuEkA.cjs} +5 -2
- package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-DdZBYIR4.mjs} +5 -2
- package/dist/acpSessionResume-DTGmAPLt.mjs +67 -0
- package/dist/acpSessionResume-oiCBnAVA.cjs +74 -0
- package/dist/{agentHome-CEp9RMyK.cjs → agentHome-BWcz8mz0.cjs} +4 -4
- package/dist/{agentHome-C1xi37as.mjs → agentHome-CghLvL_1.mjs} +4 -4
- package/dist/{api-JANhFdZV.cjs → api-Cmjfr8Z7.cjs} +28 -260
- package/dist/{api-Dib0dmqC.mjs → api-CzwFpJQc.mjs} +21 -253
- package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-DJkTEiqy.mjs} +43 -15
- package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-G6OogT08.cjs} +43 -15
- package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-B2os4HbA.mjs} +2 -2
- package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-Bo0UAsSu.cjs} +4 -4
- package/dist/{auth-BRjd2esb.mjs → auth-BS6PaOOG.mjs} +5 -5
- package/dist/{auth-DgIV0Cvt.cjs → auth-D6bBUwZa.cjs} +5 -5
- package/dist/{auth-DNct7VUi.mjs → auth-DMX0xPNK.mjs} +8 -8
- package/dist/{auth-omWDtgR8.cjs → auth-HEhRaNgL.cjs} +8 -8
- package/dist/{auto-CI16FZmX.cjs → auto-C6I55iOh.cjs} +18 -17
- package/dist/{auto-DKGFOJBo.mjs → auto-Cl1SEDcD.mjs} +18 -17
- package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-exVucYav.cjs} +2 -2
- package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-iuyufnp3.mjs} +2 -2
- package/dist/{browser-CSKhc0Bl.cjs → browser-BohJK12g.cjs} +1 -1
- package/dist/{browser-Dj_DYQEh.mjs → browser-CSYum7xH.mjs} +1 -1
- package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-Dq_R3Ax_.mjs} +6 -5
- package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal-re4yjSTx.cjs} +6 -5
- package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-B4hJHpCA.cjs} +11 -10
- package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-CN67lN7-.mjs} +11 -10
- package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-BihfD0Ik.mjs} +1 -1
- package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-DiSMYerV.cjs} +1 -1
- package/dist/{client-Dnza1hgN.cjs → client-BKcK1Bi-.cjs} +3 -3
- package/dist/client-BhoEBnuN.mjs +71 -0
- package/dist/{client-C4zKGjiJ.cjs → client-CuVdN6PP.cjs} +2 -2
- package/dist/{client-BTX9hsbr.mjs → client-DuTDwWSQ.mjs} +3 -3
- package/dist/client-ZjOsn6nZ.cjs +76 -0
- package/dist/{client-CnlkkrZO.mjs → client-wo9nbxuf.mjs} +2 -2
- package/dist/codex/happyMcpStdioBridge.cjs +24 -15
- package/dist/codex/happyMcpStdioBridge.mjs +24 -15
- package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-BK3zra_1.mjs} +3 -3
- package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-Dt5zxrun.cjs} +3 -3
- package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B6pY7CMh.mjs} +65 -60
- package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-CAZ1SLjg.cjs} +88 -83
- package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Cd1Eon_4.mjs} +1 -1
- package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-DmGbHxcD.cjs} +1 -1
- package/dist/{config-DwfEpFr3.mjs → config-2oMG_fEI.mjs} +3 -3
- package/dist/{config-BFB5uJ4t.cjs → config-B0uK6K7n.cjs} +3 -3
- package/dist/{configuration-4TGMrjul.cjs → configuration-CMHZnp6G.cjs} +1 -1
- package/dist/{configuration-DVrb61aY.mjs → configuration-WMi4idBB.mjs} +1 -1
- package/dist/{connect-C7FPY0PI.mjs → connect-BLVHhHzA.mjs} +14 -14
- package/dist/{connect-QH2VJGBG.cjs → connect-uaglGrde.cjs} +14 -14
- package/dist/{context-JoKu0V54.cjs → context-DXzU5bFM.cjs} +1 -1
- package/dist/{context-B3XPVJlj.mjs → context-DploEcoN.mjs} +1 -1
- package/dist/{controlClient-BYKyGyxj.mjs → controlClient-BWUJrj3t.mjs} +3 -3
- package/dist/{controlClient-BTaZlbC6.cjs → controlClient-C-5qCt8W.cjs} +3 -3
- package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-3uXrJgOW.mjs} +2 -2
- package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-BkIzHALd.cjs} +2 -2
- package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-BzxLh20a.mjs} +2 -2
- package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-pS3vmiSg.cjs} +2 -2
- package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-B8z2GPi9.cjs} +220 -14
- package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-D_whDMFd.mjs} +217 -12
- package/dist/{doctor-BshRnjLi.cjs → doctor-Br1Kcy2J.cjs} +7 -7
- package/dist/{doctor-0BiGwJXk.mjs → doctor-CmtSsR2-.mjs} +7 -7
- package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-BQJK_6oH.cjs} +6 -6
- package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-BoNwTIH_.mjs} +6 -6
- package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-BRUmsq6J.cjs} +5 -5
- package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-Czo9IHJQ.mjs} +5 -5
- package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-C8thKjqf.mjs} +21 -5
- package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-tKD_Hpxc.cjs} +21 -5
- package/dist/{index-BYOZ_8WZ.cjs → index-B0UjHlAe.cjs} +4 -4
- package/dist/{index-BehVbAsA.mjs → index-BTxHphpV.mjs} +254 -49
- package/dist/index-BiyC7cZ3.mjs +18 -0
- package/dist/{index-_l1Sdmbi.cjs → index-C6O2vVjm.cjs} +154 -33
- package/dist/index-CUuc6iCn.cjs +24 -0
- package/dist/{index-Bvldtdny.mjs → index-CdQI0C9p.mjs} +4 -4
- package/dist/{index-BRClDe07.cjs → index-D09T1m8Y.cjs} +3 -3
- package/dist/{index-BYgfern_.mjs → index-D3bidoG8.mjs} +3 -3
- package/dist/{index-piJPsTsm.cjs → index-DMqDMT1Q.cjs} +256 -51
- package/dist/{index-Clqlu17M.mjs → index-DPOa4NhL.mjs} +153 -34
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
- package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
- package/dist/{install-TO4taKW7.cjs → install-CYRZxS87.cjs} +3 -3
- package/dist/{install-fYWHrPcC.mjs → install-hnve_9vq.mjs} +3 -3
- package/dist/lib.cjs +13 -13
- package/dist/lib.d.cts +62 -1
- package/dist/lib.d.mts +62 -1
- package/dist/lib.mjs +13 -13
- package/dist/{lidState-DNMlIhX0.mjs → lidState-Bb8fgXg3.mjs} +1 -1
- package/dist/{lidState-BeOwj6eW.cjs → lidState-Dv2wwFTj.cjs} +1 -1
- package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DjYvkXvV.cjs} +1 -1
- package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-NEU7fax7.mjs} +1 -1
- package/dist/{logger--vAVtXB_.mjs → logger-BtVhHnD8.mjs} +2 -2
- package/dist/{logger-DXTWlPzP.cjs → logger-C1GWx3gi.cjs} +2 -2
- package/dist/{machineMetadata-DcUupMje.cjs → machineMetadata-CLHS9sv_.cjs} +3 -3
- package/dist/{machineMetadata-B1H9gNbN.mjs → machineMetadata-D-g--oU_.mjs} +3 -3
- package/dist/{main-CshDb5-1.mjs → main-B2LWV8DI.mjs} +58 -45
- package/dist/{main-DoMFJ2Cl.cjs → main-CWhSsbtU.cjs} +58 -45
- package/dist/{mcp-pNc1EbQf.cjs → mcp-CARUsXHV.cjs} +14 -14
- package/dist/{mcp-DKT_lrvQ.mjs → mcp-ext92q3Y.mjs} +14 -14
- package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BwYibqry.mjs} +3 -3
- package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-DEy2g1CB.cjs} +3 -3
- package/dist/{package-B7B03ejW.mjs → package-BPPebGQF.mjs} +7 -7
- package/dist/{package-DY4zTbKS.cjs → package-SgqTYsjn.cjs} +7 -7
- package/dist/panels-BZ0_Tt7B.mjs +137 -0
- package/dist/panels-D1c7q2dD.cjs +142 -0
- package/dist/{peerTools-3R9RUARX.mjs → peerTools-CWKzcQ7u.mjs} +60 -10
- package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DRQETXaz.cjs} +60 -9
- package/dist/{persistence-BfX72dne.cjs → persistence-BegE7NPa.cjs} +2 -2
- package/dist/{persistence-DTk4sNpd.mjs → persistence-Cr-wutZ4.mjs} +3 -3
- package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-Cs-378Vz.cjs} +8 -2
- package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-DwvM_yWA.mjs} +7 -1
- package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-BG-1td_n.cjs} +2 -2
- package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-Bue5mnlc.mjs} +2 -2
- package/dist/{piTerminal-De8nbciM.mjs → piTerminal-B5x9X5yV.mjs} +17 -17
- package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-G4z-xVyy.cjs} +17 -17
- package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
- package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
- package/dist/prompt-BOouDaTM.mjs +99 -0
- package/dist/prompt-lgF9IE82.cjs +105 -0
- package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-BdFjDjQe.mjs} +303 -3
- package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DaLQUyi0.cjs} +304 -2
- package/dist/{index-DFPT4HOO.cjs → query-Ctfg-5gy.cjs} +25 -5
- package/dist/{index-CEjJnq05.mjs → query-DYP_W1wp.mjs} +26 -3
- package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-CuEqk_0g.mjs} +1 -1
- package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-Dj_8voBK.cjs} +1 -1
- package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-BAlP7SGc.mjs} +2 -2
- package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-Cj084Sg7.cjs} +2 -2
- package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-PD0jWtQo.mjs} +6 -6
- package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-qMju0ZfF.cjs} +6 -6
- package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-B7i7MkYV.cjs} +5 -5
- package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-Bn2qu5C5.mjs} +5 -5
- package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-CM1JFAHg.cjs} +84 -2
- package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-gHItlSzz.mjs} +82 -3
- package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
- package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
- package/dist/{run-BQ_FGaOL.mjs → run-BM4TxiyN.mjs} +177 -41
- package/dist/{run-CKe_WeLW.cjs → run-CNXwIe0A.cjs} +191 -55
- package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CWhj2V4Q.cjs} +36 -40
- package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C_3I8hvR.mjs} +36 -40
- package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B81cOKnH.cjs} +294 -156
- package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-QGrOeDe2.mjs} +294 -159
- package/dist/{runGemini-kipag2ag.mjs → runGemini-BEdWEZLR.mjs} +60 -54
- package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-CgRLYbt5.cjs} +60 -54
- package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-C1NVmzOL.cjs} +18 -18
- package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-DdQZAYj1.mjs} +18 -18
- package/dist/{sandbox-BSyXFVFp.mjs → sandbox-DjQUdCMG.mjs} +4 -4
- package/dist/{sandbox-dMwPTmjm.cjs → sandbox-nocIjliq.cjs} +4 -4
- package/dist/selfCheck-CjCF4C3v.mjs +85 -0
- package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-DCt4Uzbq.cjs} +36 -35
- package/dist/{send-C-k9nsd3.mjs → send-Ct7X4pPU.mjs} +8 -8
- package/dist/{send-dxC0miIA.cjs → send-Dydf_hwZ.cjs} +8 -8
- package/dist/{server-B-W6P7Qr.cjs → server-CosABFbd.cjs} +6 -6
- package/dist/{server-DxoTYNlw.mjs → server-DTQGZMxh.mjs} +4 -4
- package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DokGab2R.cjs} +16 -3
- package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-WYIyaVO4.mjs} +16 -4
- package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-BIGgRube.mjs} +10 -5
- package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-S-qPBLFf.cjs} +10 -5
- package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CIMM2hvZ.cjs} +3 -3
- package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-o5hnMi5e.mjs} +3 -3
- package/dist/{sessions-C3sZJkzI.mjs → sessions-BJHEZpi2.mjs} +39 -17
- package/dist/{sessions-hAitoN-m.cjs → sessions-JchI1w3z.cjs} +39 -16
- package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-CNiAt5ZP.cjs} +2 -2
- package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-DMiBO2y9.mjs} +2 -2
- package/dist/{spawn-Bc9v7pIf.cjs → spawn-6PD7nnoC.cjs} +48 -17
- package/dist/{spawn-qNrB2CD_.mjs → spawn-DgvUNYEo.mjs} +48 -17
- package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DsXgegHM.cjs} +37 -1
- package/dist/spawnAgents-P006Hqio.mjs +79 -0
- package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-CCOrEtf9.mjs} +1 -1
- package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-Dywezwk6.cjs} +1 -1
- package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-DPcd9edP.mjs} +3 -3
- package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-QxPpkGKf.cjs} +3 -3
- package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DghDOCO4.mjs} +1 -1
- package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-RECH5qY8.cjs} +1 -1
- package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DMV_TXfS.mjs} +1 -1
- package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-DlUWKUpo.cjs} +1 -1
- package/dist/{sync-DbW07iQS.mjs → sync-CSe0Rf45.mjs} +1 -1
- package/dist/{sync-Dhmtk66S.cjs → sync-D23jbqVa.cjs} +1 -1
- package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-BOy4kU4P.cjs} +4 -3
- package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CFNKnh65.mjs} +4 -3
- package/dist/{teams-CwF4Z2fA.mjs → teams-DyY669f0.mjs} +8 -8
- package/dist/{teams-DpxLcUU_.cjs → teams-Ov2BDT-A.cjs} +8 -8
- package/dist/{time-BuGWTVP6.mjs → time-65DcU6Jx.mjs} +1 -1
- package/dist/{time-A6zR3Iy6.cjs → time-CrwIMHta.cjs} +1 -1
- package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-CS_rh2_J.cjs} +9 -8
- package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-CiAMxf7s.mjs} +9 -8
- package/dist/{todo-DrZc76H5.mjs → todo-BDONw0sK.mjs} +6 -6
- package/dist/{todo-73g3NCIO.cjs → todo-KY-okGii.cjs} +6 -6
- package/dist/{tools-BtsrQnNS.mjs → tools-D8-PnZEG.mjs} +1 -1
- package/dist/{tools-CxJp4T1T.cjs → tools-_w52DZG6.cjs} +1 -1
- package/dist/{uninstall-DWNYvewQ.cjs → uninstall-8vnLN-IE.cjs} +3 -3
- package/dist/{uninstall-DOb2mTwV.mjs → uninstall-_fjGRP9b.mjs} +3 -3
- package/dist/webPanels-B2_C2-3g.mjs +49 -0
- package/dist/webPanels-FCgFKvVe.cjs +53 -0
- package/package.json +7 -7
- package/dist/selfCheck-CF7XGJPb.mjs +0 -84
- package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
- package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
- package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
3
|
+
var logger = require('./logger-C1GWx3gi.cjs');
|
|
4
4
|
var node_fs = require('node:fs');
|
|
5
5
|
var path$1 = require('node:path');
|
|
6
6
|
var path = require('./path-B7zW-WwE.cjs');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-C6O2vVjm.cjs');
|
|
8
8
|
var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
|
|
9
9
|
var os = require('node:os');
|
|
10
10
|
var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
|
|
11
|
+
var prompt = require('./prompt-lgF9IE82.cjs');
|
|
11
12
|
|
|
12
13
|
function claudeCheckSession(sessionId, path$2) {
|
|
13
14
|
const projectDir = path.getProjectPath(path$2);
|
|
@@ -71,7 +72,7 @@ function shouldIncludeCoAuthoredBy() {
|
|
|
71
72
|
|
|
72
73
|
const BASE_SYSTEM_PROMPT = (() => trimIdent.trimIdent(`
|
|
73
74
|
This chat is titled automatically from the user's first message. Call "mcp__happy__change_title" only when the topic has clearly moved on or the current title is too generic to find this chat later. Do not call it as a ritual at the start of a chat, and not for a quick question you can just answer.
|
|
74
|
-
`))() + "\n\n" + agentGuidance.AGENT_GUIDANCE + "\n\n" + index.BUILTIN_TODO_DISCOVERY;
|
|
75
|
+
`))() + "\n\n" + agentGuidance.AGENT_GUIDANCE + "\n\n" + index.BUILTIN_TODO_DISCOVERY + "\n\n" + prompt.PROJECT_HINT;
|
|
75
76
|
const CO_AUTHORED_CREDITS = (() => trimIdent.trimIdent(`
|
|
76
77
|
When you yourself create a git commit, instead of just giving co-credit to Claude, also give credit to Happy like so:
|
|
77
78
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { l as logger } from './logger
|
|
1
|
+
import { l as logger } from './logger-BtVhHnD8.mjs';
|
|
2
2
|
import { existsSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { g as getProjectPath } from './path-D2wdaNSk.mjs';
|
|
5
|
-
import {
|
|
5
|
+
import { f as BUILTIN_TODO_DISCOVERY } from './index-DPOa4NhL.mjs';
|
|
6
6
|
import { t as trimIdent } from './trimIdent-BAjmv_TG.mjs';
|
|
7
7
|
import { homedir } from 'node:os';
|
|
8
8
|
import { A as AGENT_GUIDANCE } from './agentGuidance-BDYt2Qy2.mjs';
|
|
9
|
+
import { P as PROJECT_HINT } from './prompt-BOouDaTM.mjs';
|
|
9
10
|
|
|
10
11
|
function claudeCheckSession(sessionId, path) {
|
|
11
12
|
const projectDir = getProjectPath(path);
|
|
@@ -69,7 +70,7 @@ function shouldIncludeCoAuthoredBy() {
|
|
|
69
70
|
|
|
70
71
|
const BASE_SYSTEM_PROMPT = (() => trimIdent(`
|
|
71
72
|
This chat is titled automatically from the user's first message. Call "mcp__happy__change_title" only when the topic has clearly moved on or the current title is too generic to find this chat later. Do not call it as a ritual at the start of a chat, and not for a quick question you can just answer.
|
|
72
|
-
`))() + "\n\n" + AGENT_GUIDANCE + "\n\n" + BUILTIN_TODO_DISCOVERY;
|
|
73
|
+
`))() + "\n\n" + AGENT_GUIDANCE + "\n\n" + BUILTIN_TODO_DISCOVERY + "\n\n" + PROJECT_HINT;
|
|
73
74
|
const CO_AUTHORED_CREDITS = (() => trimIdent(`
|
|
74
75
|
When you yourself create a git commit, instead of just giving co-credit to Claude, also give credit to Happy like so:
|
|
75
76
|
|
|
@@ -2,20 +2,20 @@ import { homedir } from 'node:os';
|
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
5
|
-
import { t as teamRequest, c as createTeamsClient } from './client-
|
|
6
|
-
import {
|
|
7
|
-
import { a as installTeamSkill, i as installAutomationSkill } from './install-
|
|
8
|
-
import './configuration-
|
|
5
|
+
import { t as teamRequest, c as createTeamsClient } from './client-DuTDwWSQ.mjs';
|
|
6
|
+
import { b as readCredentialsForConfiguredRelay } from './persistence-Cr-wutZ4.mjs';
|
|
7
|
+
import { a as installTeamSkill, i as installAutomationSkill } from './install-BX3lv3NO.mjs';
|
|
8
|
+
import './configuration-WMi4idBB.mjs';
|
|
9
9
|
import 'node:fs';
|
|
10
10
|
import 'node:path';
|
|
11
|
-
import './package-
|
|
12
|
-
import './context-
|
|
11
|
+
import './package-BPPebGQF.mjs';
|
|
12
|
+
import './context-DploEcoN.mjs';
|
|
13
13
|
import './authRelay-DhQhkBvX.mjs';
|
|
14
14
|
import 'tweetnacl';
|
|
15
|
-
import './logger
|
|
15
|
+
import './logger-BtVhHnD8.mjs';
|
|
16
16
|
import 'chalk';
|
|
17
17
|
import 'node:util';
|
|
18
|
-
import './resources-
|
|
18
|
+
import './resources-y9jfyO-_.mjs';
|
|
19
19
|
|
|
20
20
|
const legacyTask = z.object({
|
|
21
21
|
id: z.string().regex(/^T-\d{3,}$/),
|
|
@@ -4,20 +4,20 @@ var os = require('node:os');
|
|
|
4
4
|
var promises = require('node:fs/promises');
|
|
5
5
|
var z = require('zod');
|
|
6
6
|
var node_crypto = require('node:crypto');
|
|
7
|
-
var client = require('./client-
|
|
8
|
-
var persistence = require('./persistence-
|
|
9
|
-
var install = require('./install-
|
|
10
|
-
require('./configuration-
|
|
7
|
+
var client = require('./client-BKcK1Bi-.cjs');
|
|
8
|
+
var persistence = require('./persistence-BegE7NPa.cjs');
|
|
9
|
+
var install = require('./install-BXvf2E3o.cjs');
|
|
10
|
+
require('./configuration-CMHZnp6G.cjs');
|
|
11
11
|
require('node:fs');
|
|
12
12
|
require('node:path');
|
|
13
|
-
require('./package-
|
|
14
|
-
require('./context-
|
|
13
|
+
require('./package-SgqTYsjn.cjs');
|
|
14
|
+
require('./context-DXzU5bFM.cjs');
|
|
15
15
|
require('./authRelay-Dy1qU9td.cjs');
|
|
16
16
|
require('tweetnacl');
|
|
17
|
-
require('./logger-
|
|
17
|
+
require('./logger-C1GWx3gi.cjs');
|
|
18
18
|
require('chalk');
|
|
19
19
|
require('node:util');
|
|
20
|
-
require('./resources-
|
|
20
|
+
require('./resources-CvIlkzpP.cjs');
|
|
21
21
|
|
|
22
22
|
const legacyTask = z.z.object({
|
|
23
23
|
id: z.z.string().regex(/^T-\d{3,}$/),
|
|
@@ -5,22 +5,23 @@ var module$1 = require('node:module');
|
|
|
5
5
|
var oneShotPrompts = require('./oneShotPrompts-CL0dip9C.cjs');
|
|
6
6
|
var node_crypto = require('node:crypto');
|
|
7
7
|
var path = require('node:path');
|
|
8
|
-
var logger = require('./logger-
|
|
8
|
+
var logger = require('./logger-C1GWx3gi.cjs');
|
|
9
9
|
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
10
10
|
|
|
11
11
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
12
12
|
const MAX_PROMPT_SAMPLE_CHARS = 500;
|
|
13
13
|
const MAX_TITLE_CHARS = 60;
|
|
14
14
|
const GENERATION_TIMEOUT_MS = 3e4;
|
|
15
|
-
function
|
|
15
|
+
function loadClaudeVersionUtils() {
|
|
16
|
+
const require$1 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('titleGenerator-CS_rh2_J.cjs', document.baseURI).href)));
|
|
17
|
+
return require$1(path.resolve(path.join(projectPath.projectPath(), "scripts", "claude_version_utils.cjs")));
|
|
18
|
+
}
|
|
19
|
+
function resolveClaudeBinary(loadUtils = loadClaudeVersionUtils) {
|
|
16
20
|
try {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const { getClaudeCliPath } = require$1(utilsPath);
|
|
20
|
-
const path$1 = getClaudeCliPath();
|
|
21
|
-
if (typeof path$1 === "string" && path$1.length > 0) return path$1;
|
|
21
|
+
const found = loadUtils().findGlobalClaudeCliPath();
|
|
22
|
+
if (found && typeof found.path === "string" && found.path.length > 0) return found.path;
|
|
22
23
|
} catch (error) {
|
|
23
|
-
logger.logger.debug("[titleGenerator]
|
|
24
|
+
logger.logger.debug("[titleGenerator] findGlobalClaudeCliPath failed; falling back to PATH", { error: String(error) });
|
|
24
25
|
}
|
|
25
26
|
return process.env.HAPPY_CLAUDE_PATH || "claude";
|
|
26
27
|
}
|
|
@@ -3,21 +3,22 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { T as TITLE_PROMPT_PREFIX } from './oneShotPrompts-DT4p6RNd.mjs';
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
5
5
|
import { resolve, join } from 'node:path';
|
|
6
|
-
import { l as logger } from './logger
|
|
6
|
+
import { l as logger } from './logger-BtVhHnD8.mjs';
|
|
7
7
|
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
8
8
|
|
|
9
9
|
const MAX_PROMPT_SAMPLE_CHARS = 500;
|
|
10
10
|
const MAX_TITLE_CHARS = 60;
|
|
11
11
|
const GENERATION_TIMEOUT_MS = 3e4;
|
|
12
|
-
function
|
|
12
|
+
function loadClaudeVersionUtils() {
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
return require(resolve(join(projectPath(), "scripts", "claude_version_utils.cjs")));
|
|
15
|
+
}
|
|
16
|
+
function resolveClaudeBinary(loadUtils = loadClaudeVersionUtils) {
|
|
13
17
|
try {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const { getClaudeCliPath } = require(utilsPath);
|
|
17
|
-
const path = getClaudeCliPath();
|
|
18
|
-
if (typeof path === "string" && path.length > 0) return path;
|
|
18
|
+
const found = loadUtils().findGlobalClaudeCliPath();
|
|
19
|
+
if (found && typeof found.path === "string" && found.path.length > 0) return found.path;
|
|
19
20
|
} catch (error) {
|
|
20
|
-
logger.debug("[titleGenerator]
|
|
21
|
+
logger.debug("[titleGenerator] findGlobalClaudeCliPath failed; falling back to PATH", { error: String(error) });
|
|
21
22
|
}
|
|
22
23
|
return process.env.HAPPY_CLAUDE_PATH || "claude";
|
|
23
24
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { c as configuration } from './configuration-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { r as readTeamScope, t as teamScopePath } from './context-
|
|
1
|
+
import { c as configuration } from './configuration-WMi4idBB.mjs';
|
|
2
|
+
import { e as createBuiltinTodoClient, B as BUILTIN_TODO_SKILL } from './index-DPOa4NhL.mjs';
|
|
3
|
+
import { b as readCredentialsForConfiguredRelay } from './persistence-Cr-wutZ4.mjs';
|
|
4
|
+
import { r as readTeamScope, t as teamScopePath } from './context-DploEcoN.mjs';
|
|
5
5
|
import 'node:fs';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'node:path';
|
|
8
|
-
import './package-
|
|
8
|
+
import './package-BPPebGQF.mjs';
|
|
9
9
|
import 'node:fs/promises';
|
|
10
10
|
import 'zod';
|
|
11
11
|
import '@paralleldrive/cuid2';
|
|
12
12
|
import './authRelay-DhQhkBvX.mjs';
|
|
13
13
|
import 'node:crypto';
|
|
14
14
|
import 'tweetnacl';
|
|
15
|
-
import './logger
|
|
15
|
+
import './logger-BtVhHnD8.mjs';
|
|
16
16
|
import 'chalk';
|
|
17
17
|
import 'node:util';
|
|
18
18
|
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var configuration = require('./configuration-
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var persistence = require('./persistence-
|
|
6
|
-
var context = require('./context-
|
|
3
|
+
var configuration = require('./configuration-CMHZnp6G.cjs');
|
|
4
|
+
var index = require('./index-C6O2vVjm.cjs');
|
|
5
|
+
var persistence = require('./persistence-BegE7NPa.cjs');
|
|
6
|
+
var context = require('./context-DXzU5bFM.cjs');
|
|
7
7
|
require('node:fs');
|
|
8
8
|
require('node:os');
|
|
9
9
|
require('node:path');
|
|
10
|
-
require('./package-
|
|
10
|
+
require('./package-SgqTYsjn.cjs');
|
|
11
11
|
require('node:fs/promises');
|
|
12
12
|
require('zod');
|
|
13
13
|
require('@paralleldrive/cuid2');
|
|
14
14
|
require('./authRelay-Dy1qU9td.cjs');
|
|
15
15
|
require('node:crypto');
|
|
16
16
|
require('tweetnacl');
|
|
17
|
-
require('./logger-
|
|
17
|
+
require('./logger-C1GWx3gi.cjs');
|
|
18
18
|
require('chalk');
|
|
19
19
|
require('node:util');
|
|
20
20
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { c as createTeamsClient } from './client-
|
|
2
|
+
import { c as createTeamsClient } from './client-DuTDwWSQ.mjs';
|
|
3
3
|
|
|
4
4
|
const TEAM_TOOL_NAMES = ["team_create", "team_join", "team_inspect", "team_delegate", "team_message", "team_submit", "team_accept", "team_return", "team_cancel", "team_handoff", "team_schedule_create", "team_schedule_pause", "team_schedule_resume", "team_schedule_cancel"];
|
|
5
5
|
const id = z.string().min(1).max(128);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var z = require('zod');
|
|
4
|
-
var client = require('./client-
|
|
4
|
+
var client = require('./client-BKcK1Bi-.cjs');
|
|
5
5
|
|
|
6
6
|
const TEAM_TOOL_NAMES = ["team_create", "team_join", "team_inspect", "team_delegate", "team_message", "team_submit", "team_accept", "team_return", "team_cancel", "team_handoff", "team_schedule_create", "team_schedule_pause", "team_schedule_resume", "team_schedule_cancel"];
|
|
7
7
|
const id = z.z.string().min(1).max(128);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var logger = require('./logger-
|
|
3
|
+
var logger = require('./logger-C1GWx3gi.cjs');
|
|
4
4
|
var fs = require('fs');
|
|
5
5
|
var child_process = require('child_process');
|
|
6
6
|
require('chalk');
|
|
7
7
|
require('node:util');
|
|
8
|
-
require('./configuration-
|
|
8
|
+
require('./configuration-CMHZnp6G.cjs');
|
|
9
9
|
require('node:fs');
|
|
10
10
|
require('node:os');
|
|
11
11
|
require('node:path');
|
|
12
|
-
require('./package-
|
|
12
|
+
require('./package-SgqTYsjn.cjs');
|
|
13
13
|
require('node:fs/promises');
|
|
14
14
|
|
|
15
15
|
const PLIST_LABEL = "com.happy-cli.daemon";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { l as logger } from './logger
|
|
1
|
+
import { l as logger } from './logger-BtVhHnD8.mjs';
|
|
2
2
|
import { existsSync, unlinkSync } from 'fs';
|
|
3
3
|
import { execSync } from 'child_process';
|
|
4
4
|
import 'chalk';
|
|
5
5
|
import 'node:util';
|
|
6
|
-
import './configuration-
|
|
6
|
+
import './configuration-WMi4idBB.mjs';
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'node:os';
|
|
9
9
|
import 'node:path';
|
|
10
|
-
import './package-
|
|
10
|
+
import './package-BPPebGQF.mjs';
|
|
11
11
|
import 'node:fs/promises';
|
|
12
12
|
|
|
13
13
|
const PLIST_LABEL = "com.happy-cli.daemon";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const WEB_PANEL_LIMIT = 8;
|
|
2
|
+
const WEB_PANEL_TITLE_MAX = 40;
|
|
3
|
+
const ID_RE = /^[a-z0-9][a-z0-9-]{0,31}$/;
|
|
4
|
+
const LOOPBACK = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
5
|
+
function webPanelUrlProblem(raw) {
|
|
6
|
+
if (typeof raw !== "string" || !raw.trim()) return "url is required";
|
|
7
|
+
let url;
|
|
8
|
+
try {
|
|
9
|
+
url = new URL(raw.trim());
|
|
10
|
+
} catch {
|
|
11
|
+
return "url is not a valid URL";
|
|
12
|
+
}
|
|
13
|
+
if (url.username || url.password) return "url must not contain credentials";
|
|
14
|
+
if (url.protocol === "https:") return null;
|
|
15
|
+
if (url.protocol === "http:" && LOOPBACK.has(url.hostname)) return null;
|
|
16
|
+
return "url must be https:// (http:// only for localhost)";
|
|
17
|
+
}
|
|
18
|
+
function normalizeWebPanels(raw) {
|
|
19
|
+
const panels = [];
|
|
20
|
+
const problems = [];
|
|
21
|
+
if (raw === void 0 || raw === null) return { panels, problems };
|
|
22
|
+
if (!Array.isArray(raw)) return { panels, problems: [{ index: -1, reason: "webPanels must be an array" }] };
|
|
23
|
+
const seen = /* @__PURE__ */ new Set();
|
|
24
|
+
raw.forEach((entry, index) => {
|
|
25
|
+
const e = entry && typeof entry === "object" ? entry : {};
|
|
26
|
+
const id = typeof e.id === "string" ? e.id.trim() : "";
|
|
27
|
+
const skip = (reason) => {
|
|
28
|
+
problems.push({ index, ...id ? { id } : {}, reason });
|
|
29
|
+
};
|
|
30
|
+
if (!ID_RE.test(id)) return skip("id must match ^[a-z0-9][a-z0-9-]{0,31}$");
|
|
31
|
+
if (seen.has(id)) return skip("duplicate id");
|
|
32
|
+
const urlProblem = webPanelUrlProblem(e.url);
|
|
33
|
+
if (urlProblem) return skip(urlProblem);
|
|
34
|
+
if (panels.length >= WEB_PANEL_LIMIT) return skip(`more than ${WEB_PANEL_LIMIT} panels`);
|
|
35
|
+
const title = (typeof e.title === "string" && e.title.trim() ? e.title.trim() : id).slice(0, WEB_PANEL_TITLE_MAX);
|
|
36
|
+
seen.add(id);
|
|
37
|
+
panels.push({ id, title, url: new URL(e.url.trim()).href, embed: e.embed !== false });
|
|
38
|
+
return void 0;
|
|
39
|
+
});
|
|
40
|
+
return { panels, problems };
|
|
41
|
+
}
|
|
42
|
+
function webPanelsSignature(panels) {
|
|
43
|
+
return JSON.stringify(panels.map((p) => [p.id, p.title, p.url, p.embed]));
|
|
44
|
+
}
|
|
45
|
+
function webPanelPath(machineId, panelId) {
|
|
46
|
+
return `/machine/${encodeURIComponent(machineId)}/panel/${encodeURIComponent(panelId)}`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { webPanelsSignature as a, normalizeWebPanels as n, webPanelPath as w };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const WEB_PANEL_LIMIT = 8;
|
|
4
|
+
const WEB_PANEL_TITLE_MAX = 40;
|
|
5
|
+
const ID_RE = /^[a-z0-9][a-z0-9-]{0,31}$/;
|
|
6
|
+
const LOOPBACK = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
7
|
+
function webPanelUrlProblem(raw) {
|
|
8
|
+
if (typeof raw !== "string" || !raw.trim()) return "url is required";
|
|
9
|
+
let url;
|
|
10
|
+
try {
|
|
11
|
+
url = new URL(raw.trim());
|
|
12
|
+
} catch {
|
|
13
|
+
return "url is not a valid URL";
|
|
14
|
+
}
|
|
15
|
+
if (url.username || url.password) return "url must not contain credentials";
|
|
16
|
+
if (url.protocol === "https:") return null;
|
|
17
|
+
if (url.protocol === "http:" && LOOPBACK.has(url.hostname)) return null;
|
|
18
|
+
return "url must be https:// (http:// only for localhost)";
|
|
19
|
+
}
|
|
20
|
+
function normalizeWebPanels(raw) {
|
|
21
|
+
const panels = [];
|
|
22
|
+
const problems = [];
|
|
23
|
+
if (raw === void 0 || raw === null) return { panels, problems };
|
|
24
|
+
if (!Array.isArray(raw)) return { panels, problems: [{ index: -1, reason: "webPanels must be an array" }] };
|
|
25
|
+
const seen = /* @__PURE__ */ new Set();
|
|
26
|
+
raw.forEach((entry, index) => {
|
|
27
|
+
const e = entry && typeof entry === "object" ? entry : {};
|
|
28
|
+
const id = typeof e.id === "string" ? e.id.trim() : "";
|
|
29
|
+
const skip = (reason) => {
|
|
30
|
+
problems.push({ index, ...id ? { id } : {}, reason });
|
|
31
|
+
};
|
|
32
|
+
if (!ID_RE.test(id)) return skip("id must match ^[a-z0-9][a-z0-9-]{0,31}$");
|
|
33
|
+
if (seen.has(id)) return skip("duplicate id");
|
|
34
|
+
const urlProblem = webPanelUrlProblem(e.url);
|
|
35
|
+
if (urlProblem) return skip(urlProblem);
|
|
36
|
+
if (panels.length >= WEB_PANEL_LIMIT) return skip(`more than ${WEB_PANEL_LIMIT} panels`);
|
|
37
|
+
const title = (typeof e.title === "string" && e.title.trim() ? e.title.trim() : id).slice(0, WEB_PANEL_TITLE_MAX);
|
|
38
|
+
seen.add(id);
|
|
39
|
+
panels.push({ id, title, url: new URL(e.url.trim()).href, embed: e.embed !== false });
|
|
40
|
+
return void 0;
|
|
41
|
+
});
|
|
42
|
+
return { panels, problems };
|
|
43
|
+
}
|
|
44
|
+
function webPanelsSignature(panels) {
|
|
45
|
+
return JSON.stringify(panels.map((p) => [p.id, p.title, p.url, p.embed]));
|
|
46
|
+
}
|
|
47
|
+
function webPanelPath(machineId, panelId) {
|
|
48
|
+
return `/machine/${encodeURIComponent(machineId)}/panel/${encodeURIComponent(panelId)}`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.normalizeWebPanels = normalizeWebPanels;
|
|
52
|
+
exports.webPanelPath = webPanelPath;
|
|
53
|
+
exports.webPanelsSignature = webPanelsSignature;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "very-happy-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.179",
|
|
4
4
|
"description": "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.",
|
|
5
5
|
"author": "Kirill Dubovitskiy",
|
|
6
6
|
"contributors": [
|
|
@@ -117,12 +117,12 @@
|
|
|
117
117
|
"zod": "^4.0.0"
|
|
118
118
|
},
|
|
119
119
|
"optionalDependencies": {
|
|
120
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
121
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
122
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
123
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
124
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
125
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
120
|
+
"very-happy-tools-arm64-darwin": "0.2.179",
|
|
121
|
+
"very-happy-tools-x64-darwin": "0.2.179",
|
|
122
|
+
"very-happy-tools-arm64-linux": "0.2.179",
|
|
123
|
+
"very-happy-tools-x64-linux": "0.2.179",
|
|
124
|
+
"very-happy-tools-arm64-win32": "0.2.179",
|
|
125
|
+
"very-happy-tools-x64-win32": "0.2.179"
|
|
126
126
|
},
|
|
127
127
|
"devDependencies": {
|
|
128
128
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { p as packageJson } from './package-B7B03ejW.mjs';
|
|
2
|
-
|
|
3
|
-
const LAZY_MODULES = [
|
|
4
|
-
// Entry
|
|
5
|
-
["main", () => import('./main-CshDb5-1.mjs')],
|
|
6
|
-
["selfCheck", () => Promise.resolve().then(function () { return selfCheck; })],
|
|
7
|
-
// Subcommands (main.ts)
|
|
8
|
-
["api/api", () => import('./api-Dib0dmqC.mjs').then(function (n) { return n.b; })],
|
|
9
|
-
["claude/claudeCliPath", () => import('./claudeCliPath-BqkaH2oR.mjs')],
|
|
10
|
-
["claude/runClaude", () => import('./runClaude-zrrNcQC_.mjs')],
|
|
11
|
-
["commands/agentHome", () => import('./agentHome-C1xi37as.mjs')],
|
|
12
|
-
["commands/auth", () => import('./auth-DNct7VUi.mjs')],
|
|
13
|
-
["commands/auto", () => import('./auto-DKGFOJBo.mjs')],
|
|
14
|
-
["commands/codexCommand", () => import('./codexCommand-BxjogBzU.mjs')],
|
|
15
|
-
["commands/connect", () => import('./connect-C7FPY0PI.mjs')],
|
|
16
|
-
["commands/installPiTools", () => import('./installPiTools-B_CdM5_2.mjs')],
|
|
17
|
-
["commands/installTerminalHooks", () => import('./installTerminalHooks-By7gBMEF.mjs')],
|
|
18
|
-
["commands/mcp", () => import('./mcp-DKT_lrvQ.mjs')],
|
|
19
|
-
["commands/piTerminal", () => import('./piTerminal-De8nbciM.mjs')],
|
|
20
|
-
["commands/sandbox", () => import('./sandbox-BSyXFVFp.mjs')],
|
|
21
|
-
["commands/send", () => import('./send-C-k9nsd3.mjs')],
|
|
22
|
-
["commands/server", () => import('./server-DxoTYNlw.mjs')],
|
|
23
|
-
["commands/sessions", () => import('./sessions-C3sZJkzI.mjs')],
|
|
24
|
-
["commands/spawn", () => import('./spawn-qNrB2CD_.mjs')],
|
|
25
|
-
["commands/teams", () => import('./teams-CwF4Z2fA.mjs')],
|
|
26
|
-
["commands/todo", () => import('./todo-DrZc76H5.mjs')],
|
|
27
|
-
["daemon/doctor", () => import('./doctor-BPkYWSuq.mjs')],
|
|
28
|
-
["daemon/install", () => import('./install-fYWHrPcC.mjs')],
|
|
29
|
-
["daemon/run", () => import('./run-BQ_FGaOL.mjs')],
|
|
30
|
-
["daemon/uninstall", () => import('./uninstall-DOb2mTwV.mjs')],
|
|
31
|
-
["resume/handleResumeCommand", () => import('./handleResumeCommand-CgjpsdDe.mjs')],
|
|
32
|
-
["ui/doctor", () => import('./doctor-0BiGwJXk.mjs').then(function (n) { return n.d; })],
|
|
33
|
-
["agent/acp", () => import('./index-BehVbAsA.mjs')],
|
|
34
|
-
["gemini/runGemini", () => import('./runGemini-kipag2ag.mjs')],
|
|
35
|
-
["gemini/utils/config", () => import('./config-DwfEpFr3.mjs')],
|
|
36
|
-
["openclaw/runOpenClaw", () => import('./runOpenClaw-C_lRY3Do.mjs')],
|
|
37
|
-
["persistence", () => import('./persistence-DTk4sNpd.mjs').then(function (n) { return n.F; })],
|
|
38
|
-
// Deferred halves of the runners and clients
|
|
39
|
-
["api/apiMachine", () => import('./apiMachine-DNTJidYH.mjs')],
|
|
40
|
-
["claude/runClaudeDeps", () => import('./runClaudeDeps-CVBCokOS.mjs')],
|
|
41
|
-
["claude/claudeLocal", () => import('./claudeLocal-CCCvAeMd.mjs')],
|
|
42
|
-
["claude/claudeLocalLauncher", () => import('./claudeLocalLauncher-BmrpaRYJ.mjs')],
|
|
43
|
-
["claude/sdk", () => import('./index-CEjJnq05.mjs')],
|
|
44
|
-
["assistant/bootstrap", () => import('./bootstrap-BUagGC_-.mjs')],
|
|
45
|
-
["agentHome", () => import('./index-Bvldtdny.mjs')],
|
|
46
|
-
["ui/ink/RemoteModeDisplay", () => import('./RemoteModeDisplay-D-HewyXg.mjs')],
|
|
47
|
-
// External packages imported on demand
|
|
48
|
-
["expo-server-sdk", () => import('expo-server-sdk')],
|
|
49
|
-
["ink", () => import('ink')],
|
|
50
|
-
["react", () => import('react')]
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
async function runSelfCheck(modules = LAZY_MODULES) {
|
|
54
|
-
const failures = [];
|
|
55
|
-
for (const [name, load] of modules) {
|
|
56
|
-
try {
|
|
57
|
-
await load();
|
|
58
|
-
} catch (error) {
|
|
59
|
-
failures.push({ name, error: error instanceof Error ? error.message : String(error) });
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return failures;
|
|
63
|
-
}
|
|
64
|
-
async function selfCheckMain(opts = {}) {
|
|
65
|
-
const started = Date.now();
|
|
66
|
-
const failures = await runSelfCheck();
|
|
67
|
-
if (failures.length > 0) {
|
|
68
|
-
for (const failure of failures) {
|
|
69
|
-
console.error(`very-happy: failed to load ${failure.name}: ${failure.error}`);
|
|
70
|
-
}
|
|
71
|
-
return 1;
|
|
72
|
-
}
|
|
73
|
-
if (opts.verbose) console.log(`self-check: ${LAZY_MODULES.length} modules loaded in ${Date.now() - started}ms`);
|
|
74
|
-
console.log(`very-happy version: ${packageJson.version}`);
|
|
75
|
-
return 0;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
var selfCheck = /*#__PURE__*/Object.freeze({
|
|
79
|
-
__proto__: null,
|
|
80
|
-
runSelfCheck: runSelfCheck,
|
|
81
|
-
selfCheckMain: selfCheckMain
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
export { runSelfCheck, selfCheckMain };
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, renameSync, existsSync, unlinkSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { w as writePrivateFileSync, c as configuration } from './configuration-DVrb61aY.mjs';
|
|
4
|
-
|
|
5
|
-
const SESSION_MODE_DIR = "session-modes";
|
|
6
|
-
const ACP_PERMISSION_MODES = ["default", "acceptEdits", "plan", "bypassPermissions"];
|
|
7
|
-
function normalizeAcpPermissionMode(value) {
|
|
8
|
-
if (typeof value !== "string") return null;
|
|
9
|
-
if (value === "yolo") return "bypassPermissions";
|
|
10
|
-
return ACP_PERMISSION_MODES.includes(value) ? value : null;
|
|
11
|
-
}
|
|
12
|
-
function sessionModeFilePath(happySessionId, dir = join(configuration.happyHomeDir, SESSION_MODE_DIR)) {
|
|
13
|
-
return join(dir, `${happySessionId}.json`);
|
|
14
|
-
}
|
|
15
|
-
function sessionModeFilePayload(permissionMode, now = Date.now()) {
|
|
16
|
-
return { permissionMode, updatedAt: now };
|
|
17
|
-
}
|
|
18
|
-
function writeSessionModeFile(happySessionId, permissionMode, opts = {}) {
|
|
19
|
-
const path = sessionModeFilePath(happySessionId, opts.dir);
|
|
20
|
-
mkdirSync(join(path, ".."), { recursive: true, mode: 448 });
|
|
21
|
-
const payload = sessionModeFilePayload(permissionMode, opts.now);
|
|
22
|
-
const tmp = `${path}.${process.pid}.tmp`;
|
|
23
|
-
writePrivateFileSync(tmp, JSON.stringify(payload));
|
|
24
|
-
renameSync(tmp, path);
|
|
25
|
-
return payload;
|
|
26
|
-
}
|
|
27
|
-
function removeSessionModeFile(happySessionId, dir) {
|
|
28
|
-
const path = sessionModeFilePath(happySessionId, dir);
|
|
29
|
-
if (existsSync(path)) unlinkSync(path);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export { normalizeAcpPermissionMode as n, removeSessionModeFile as r, writeSessionModeFile as w };
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var node_fs = require('node:fs');
|
|
4
|
-
var path = require('node:path');
|
|
5
|
-
var configuration = require('./configuration-4TGMrjul.cjs');
|
|
6
|
-
|
|
7
|
-
const SESSION_MODE_DIR = "session-modes";
|
|
8
|
-
const ACP_PERMISSION_MODES = ["default", "acceptEdits", "plan", "bypassPermissions"];
|
|
9
|
-
function normalizeAcpPermissionMode(value) {
|
|
10
|
-
if (typeof value !== "string") return null;
|
|
11
|
-
if (value === "yolo") return "bypassPermissions";
|
|
12
|
-
return ACP_PERMISSION_MODES.includes(value) ? value : null;
|
|
13
|
-
}
|
|
14
|
-
function sessionModeFilePath(happySessionId, dir = path.join(configuration.configuration.happyHomeDir, SESSION_MODE_DIR)) {
|
|
15
|
-
return path.join(dir, `${happySessionId}.json`);
|
|
16
|
-
}
|
|
17
|
-
function sessionModeFilePayload(permissionMode, now = Date.now()) {
|
|
18
|
-
return { permissionMode, updatedAt: now };
|
|
19
|
-
}
|
|
20
|
-
function writeSessionModeFile(happySessionId, permissionMode, opts = {}) {
|
|
21
|
-
const path$1 = sessionModeFilePath(happySessionId, opts.dir);
|
|
22
|
-
node_fs.mkdirSync(path.join(path$1, ".."), { recursive: true, mode: 448 });
|
|
23
|
-
const payload = sessionModeFilePayload(permissionMode, opts.now);
|
|
24
|
-
const tmp = `${path$1}.${process.pid}.tmp`;
|
|
25
|
-
configuration.writePrivateFileSync(tmp, JSON.stringify(payload));
|
|
26
|
-
node_fs.renameSync(tmp, path$1);
|
|
27
|
-
return payload;
|
|
28
|
-
}
|
|
29
|
-
function removeSessionModeFile(happySessionId, dir) {
|
|
30
|
-
const path = sessionModeFilePath(happySessionId, dir);
|
|
31
|
-
if (node_fs.existsSync(path)) node_fs.unlinkSync(path);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
exports.normalizeAcpPermissionMode = normalizeAcpPermissionMode;
|
|
35
|
-
exports.removeSessionModeFile = removeSessionModeFile;
|
|
36
|
-
exports.writeSessionModeFile = writeSessionModeFile;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { g as getAgentCodeDefaults, n as normalizeAgentKey, e as isClaudeOpus55Model, f as supportsClaudeOpus55 } from './index-Clqlu17M.mjs';
|
|
2
|
-
|
|
3
|
-
function resolveSpawnPermissionMode(agent, explicit) {
|
|
4
|
-
return explicit ?? getAgentCodeDefaults(agent ?? "claude").permissionMode;
|
|
5
|
-
}
|
|
6
|
-
function outboundPermissionMode(agent, mode) {
|
|
7
|
-
const key = normalizeAgentKey(agent ?? "claude");
|
|
8
|
-
if ((key === "claude" || key === "pi") && mode === "yolo") return "bypassPermissions";
|
|
9
|
-
return mode;
|
|
10
|
-
}
|
|
11
|
-
function resolveFirstMessageMeta(input) {
|
|
12
|
-
const meta = {
|
|
13
|
-
permissionMode: outboundPermissionMode(input.agent, input.permissionMode)
|
|
14
|
-
};
|
|
15
|
-
if (input.explicitModel !== void 0) {
|
|
16
|
-
meta.model = input.explicitModel === "default" ? null : input.explicitModel;
|
|
17
|
-
}
|
|
18
|
-
if (normalizeAgentKey(input.agent ?? "claude") !== "claude") return meta;
|
|
19
|
-
if (meta.model === void 0) {
|
|
20
|
-
const model = getAgentCodeDefaults("claude").modelMode;
|
|
21
|
-
const runnable = !isClaudeOpus55Model(model) || supportsClaudeOpus55({ capabilities: input.capabilities ?? null });
|
|
22
|
-
meta.model = runnable && model !== "default" ? model : null;
|
|
23
|
-
}
|
|
24
|
-
meta.effort = null;
|
|
25
|
-
return meta;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const ALLOWED_SPAWN_PERMISSION_MODES = [
|
|
29
|
-
"default",
|
|
30
|
-
"acceptEdits",
|
|
31
|
-
"plan",
|
|
32
|
-
"yolo",
|
|
33
|
-
"bypassPermissions"
|
|
34
|
-
];
|
|
35
|
-
function sanitizeSpawnPermissionMode(value) {
|
|
36
|
-
if (typeof value !== "string") return null;
|
|
37
|
-
return ALLOWED_SPAWN_PERMISSION_MODES.includes(value) ? value : null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const SPAWN_AGENTS = ["claude", "codex", "gemini", "openclaw", "pi"];
|
|
41
|
-
function isSpawnAgent(value) {
|
|
42
|
-
return typeof value === "string" && SPAWN_AGENTS.includes(value);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export { ALLOWED_SPAWN_PERMISSION_MODES as A, SPAWN_AGENTS as S, resolveFirstMessageMeta as a, isSpawnAgent as i, resolveSpawnPermissionMode as r, sanitizeSpawnPermissionMode as s };
|