very-happy-cli 0.2.158 → 0.2.160
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-DIDRig5G.cjs → AcpBackend-Bm2rdke8.cjs} +78 -76
- package/dist/{AcpBackend-vDVLHuYJ.mjs → AcpBackend-mzv8Dhba.mjs} +4 -2
- package/dist/{AcpSessionManager-C44U99CC.cjs → AcpSessionManager-BAY1Pggx.cjs} +9 -9
- package/dist/{AcpSessionManager-CmRjfhn3.mjs → AcpSessionManager-CoMWFVw3.mjs} +1 -1
- package/dist/BasePermissionHandler-CFHAxumV.cjs +157 -0
- package/dist/BasePermissionHandler-m3WVholL.mjs +155 -0
- package/dist/BaseReasoningProcessor-BFa9_rZA.cjs +200 -0
- package/dist/BaseReasoningProcessor-CYrKBXGm.mjs +198 -0
- package/dist/RemoteModeDisplay-D-HewyXg.mjs +150 -0
- package/dist/RemoteModeDisplay-NC1gPHtj.cjs +153 -0
- package/dist/agentAttachments-Dbw8iMCZ.cjs +20 -0
- package/dist/agentAttachments-M_B5qEF2.mjs +18 -0
- package/dist/agentGuidance-B5NATuFa.cjs +28 -0
- package/dist/agentGuidance-CQuNlNx8.mjs +20 -0
- package/dist/{agentHome-Dw8Jx_CJ.cjs → agentHome-CboCeKWq.cjs} +14 -28
- package/dist/{agentHome-CyLmGH5L.mjs → agentHome-Dj1C43aJ.mjs} +8 -22
- package/dist/api-CLMUr-SX.mjs +3339 -0
- package/dist/api-CgundNNX.cjs +3346 -0
- package/dist/{types-DIBF4U0Y.mjs → apiMachine-B9dLW_p5.mjs} +9116 -16015
- package/dist/{types-DnrPeN80.cjs → apiMachine-Bn8482VM.cjs} +9104 -16057
- package/dist/assistantTools-BTqPnlFl.cjs +380 -0
- package/dist/assistantTools-D6tuc6o4.mjs +376 -0
- package/dist/attachmentContent-DpiTJZb4.cjs +88 -0
- package/dist/attachmentContent-_kxRznNf.mjs +82 -0
- package/dist/attachmentLimits-CzVrqgLR.cjs +354 -0
- package/dist/attachmentLimits-yba1uHFO.mjs +348 -0
- package/dist/auth-BDOVh5h5.cjs +220 -0
- package/dist/auth-Cwutmdsa.mjs +225 -0
- package/dist/auth-PYHZQNPp.mjs +218 -0
- package/dist/auth-ba4WMYrN.cjs +227 -0
- package/dist/authRelay-BdYkC1Po.cjs +156 -0
- package/dist/authRelay-DSAvg1uv.mjs +143 -0
- package/dist/{auto-DZbNcTXx.cjs → auto-BOX_fgmR.cjs} +70 -79
- package/dist/{auto-BlMZPwOk.mjs → auto-BXu14yP_.mjs} +27 -36
- package/dist/backgroundTaskActivity-8PdPxrvy.mjs +149 -0
- package/dist/backgroundTaskActivity-CBvUdj39.cjs +157 -0
- package/dist/bootstrap-B5G1TijC.cjs +116 -0
- package/dist/bootstrap-hxXPCFMx.mjs +112 -0
- package/dist/browser-Y6Bl8L_O.cjs +22 -0
- package/dist/browser-jh2P0UVZ.mjs +20 -0
- package/dist/claudeCliPath-BqkaH2oR.mjs +8 -0
- package/dist/claudeCliPath-U4HHmV4r.cjs +10 -0
- package/dist/claudeLocal-BaY4fZKi.mjs +339 -0
- package/dist/claudeLocal-CRGG4Pea.cjs +343 -0
- package/dist/claudeLocalLauncher-D4T7MTqd.mjs +152 -0
- package/dist/claudeLocalLauncher-DyEbVzUN.cjs +154 -0
- package/dist/cliUpdate-DsKXPFYp.cjs +120 -0
- package/dist/cliUpdate-Y34VGe9Y.mjs +112 -0
- package/dist/client-3Ac-O4pw.cjs +104 -0
- package/dist/client-BPNbmtvO.cjs +119 -0
- package/dist/client-CeGKqqcJ.mjs +100 -0
- package/dist/client-ClR0K8zX.mjs +112 -0
- package/dist/codex/happyMcpStdioBridge.cjs +33 -14
- package/dist/codex/happyMcpStdioBridge.mjs +26 -7
- package/dist/codexAppServerClient-I3teiV-N.mjs +1088 -0
- package/dist/codexAppServerClient-q2FjnRcK.cjs +1090 -0
- package/dist/codexCommand-4zcccIoq.cjs +2088 -0
- package/dist/codexCommand-Cc9gcbdX.mjs +2086 -0
- package/dist/codexThreadFork-BH9IZPqD.cjs +350 -0
- package/dist/codexThreadFork-slzAseLx.mjs +338 -0
- package/dist/{config-BtPArqRH.mjs → config-CTx_jb-C.mjs} +7 -40
- package/dist/{config-DG84bjwF.cjs → config-Ci9Kpgwa.cjs} +26 -59
- package/dist/configuration-BSYpcPwE.cjs +181 -0
- package/dist/configuration-RfeNjFmd.mjs +170 -0
- package/dist/connect-BpOdzNbE.mjs +682 -0
- package/dist/connect-C2CiOUFs.cjs +684 -0
- package/dist/constants-BC4St0xd.mjs +11 -0
- package/dist/constants-VJ0N6WuG.cjs +17 -0
- package/dist/contentLogMetadata-BlWI0egu.mjs +51 -0
- package/dist/contentLogMetadata-ZSFk_NjQ.cjs +54 -0
- package/dist/context-DsDr6E2t.cjs +69 -0
- package/dist/context-H0Bcb9S_.mjs +65 -0
- package/dist/controlClient-BGbDcgWS.mjs +260 -0
- package/dist/controlClient-Bcwv3D21.cjs +279 -0
- package/dist/createSessionMetadata-BJxEnM-o.cjs +58 -0
- package/dist/createSessionMetadata-CVVkGjxV.mjs +54 -0
- package/dist/defaultPermissionMode-BnxJPVHT.mjs +4 -0
- package/dist/defaultPermissionMode-CxmTXUQR.cjs +7 -0
- package/dist/detectCLI-CSGMlV51.mjs +58 -0
- package/dist/detectCLI-DR9ZaN6B.cjs +61 -0
- package/dist/deterministicJson-C5CYTVpm.cjs +507 -0
- package/dist/deterministicJson-CzkFJWw1.mjs +502 -0
- package/dist/doctor-BPkYWSuq.mjs +75 -0
- package/dist/doctor-D2YJ-Yn2.cjs +395 -0
- package/dist/doctor-DOvByjbk.mjs +391 -0
- package/dist/doctor-u46qYYKX.cjs +79 -0
- package/dist/doctorReadiness-BCZGcN0a.cjs +151 -0
- package/dist/doctorReadiness-C208SMN9.mjs +142 -0
- package/dist/editPaths-BVfS_FFL.mjs +68 -0
- package/dist/editPaths-Bqp4OFPw.cjs +73 -0
- package/dist/ensureDaemonRunning-BCwNrMyv.cjs +64 -0
- package/dist/ensureDaemonRunning-Dqa2pOjY.mjs +61 -0
- package/dist/handleResumeCommand-BvXYf5El.mjs +240 -0
- package/dist/handleResumeCommand-C2cKchpX.cjs +245 -0
- package/dist/ids-B6ZC0HGt.cjs +13 -0
- package/dist/ids-DU6sLx4C.mjs +10 -0
- package/dist/index-B6UGRQ7h.mjs +102 -0
- package/dist/{index-DPCsWlWK.cjs → index-B6pAdvJx.cjs} +131 -91
- package/dist/index-Bu5Zi_a9.cjs +182 -0
- package/dist/index-D3kI0hDR.cjs +107 -0
- package/dist/index-DA7yINuk.cjs +994 -0
- package/dist/index-DDeHXrIX.cjs +71 -0
- package/dist/index-DKLU_fD0.mjs +158 -0
- package/dist/{index-ZChGsuB7.mjs → index-DMZqWwsP.mjs} +79 -39
- package/dist/index-DVkMGPyS.mjs +68 -0
- package/dist/index-qdS1friN.mjs +949 -0
- package/dist/index.cjs +5 -46
- package/dist/index.mjs +5 -46
- package/dist/{install-DarS_Wco.mjs → install-BO_W7VhL.mjs} +37 -37
- package/dist/install-BgoC2e_2.cjs +88 -0
- package/dist/install-CFY3tYtJ.mjs +86 -0
- package/dist/{install-wKQGgXvN.cjs → install-Cs5qAPrB.cjs} +38 -38
- package/dist/{installPiTools-DuZ6jZvX.cjs → installPiTools-BKnXjrVu.cjs} +2 -3
- package/dist/{installPiTools-Cj7yU9Fc.mjs → installPiTools-B_CdM5_2.mjs} +1 -2
- package/dist/{installTerminalHooks-DcQfee_O.cjs → installTerminalHooks-BQZbvxsZ.cjs} +5 -40
- package/dist/{installTerminalHooks-CpNbRFPz.mjs → installTerminalHooks-By7gBMEF.mjs} +3 -38
- package/dist/lib.cjs +28 -19
- package/dist/lib.d.cts +126 -2
- package/dist/lib.d.mts +126 -2
- package/dist/lib.mjs +23 -14
- package/dist/lidState-BeDfxxEX.cjs +305 -0
- package/dist/lidState-CeEt442o.mjs +297 -0
- package/dist/limits-C-a7gr04.cjs +43 -0
- package/dist/limits-DIo7rEBR.mjs +36 -0
- package/dist/localHappyAgentAuth-C-HQyiv6.mjs +82 -0
- package/dist/localHappyAgentAuth-D6rFhaoc.cjs +86 -0
- package/dist/logger-6HYUEXNk.mjs +271 -0
- package/dist/logger-CS0mw3fa.cjs +275 -0
- package/dist/loginShellEnv-BkuYtExZ.cjs +182 -0
- package/dist/loginShellEnv-Dw8M7tkI.mjs +167 -0
- package/dist/machineMetadata-DyDbODYd.cjs +41 -0
- package/dist/machineMetadata-oOzBfDfs.mjs +38 -0
- package/dist/main-BkxJP6JQ.cjs +941 -0
- package/dist/main-BwNIAI1A.mjs +939 -0
- package/dist/manager-BQ4flvQZ.mjs +101 -0
- package/dist/manager-Cly8xVIR.cjs +105 -0
- package/dist/{mcp-BN6bKIGb.mjs → mcp-B1A4I3TK.mjs} +27 -33
- package/dist/{mcp-DGdeUUDJ.cjs → mcp-Hszd7qpS.cjs} +42 -48
- package/dist/messageBuffer-BWlGgR3A.mjs +71 -0
- package/dist/messageBuffer-fJMH6uY8.cjs +73 -0
- package/dist/mirrorProtocol-BNLtoWjO.mjs +170 -0
- package/dist/mirrorProtocol-BUtmg1ws.cjs +186 -0
- package/dist/oneShotPrompts-CL0dip9C.cjs +16 -0
- package/dist/oneShotPrompts-DT4p6RNd.mjs +12 -0
- package/dist/package-BhaKlnxz.mjs +171 -0
- package/dist/package-BwMrPwqH.cjs +173 -0
- package/dist/path-B7zW-WwE.cjs +18 -0
- package/dist/path-D2wdaNSk.mjs +15 -0
- package/dist/peerTools-BTqw97Gb.mjs +272 -0
- package/dist/peerTools-BvKtHXj8.cjs +283 -0
- package/dist/permissionMode-Cr5JCbB7.mjs +80 -0
- package/dist/permissionMode-CrV-XuMs.cjs +87 -0
- package/dist/persistence-HGW_ZVs9.mjs +372 -0
- package/dist/persistence-yKTH3-5X.cjs +414 -0
- package/dist/piExtension.mjs +2 -1
- package/dist/piRunnerArgs-BNloJCCg.cjs +66 -0
- package/dist/piRunnerArgs-BuX1UFWy.mjs +59 -0
- package/dist/{piRuntime-bkw2NAZU.mjs → piRuntime-CSGkwCKQ.mjs} +2 -2
- package/dist/{piRuntime-3qtbKujX.cjs → piRuntime-C_H7MJCM.cjs} +4 -4
- package/dist/{piTerminal-DilKwM7B.mjs → piTerminal-C8a1OrNQ.mjs} +32 -35
- package/dist/{piTerminal-BYxp3LMr.cjs → piTerminal-DNCZ6yTM.cjs} +32 -35
- package/dist/previewPath-B0rBdhy1.cjs +83 -0
- package/dist/previewPath-CXN4Vag0.mjs +81 -0
- package/dist/projectPath-BTBIMB57.mjs +10 -0
- package/dist/projectPath-ChLhdOyt.cjs +13 -0
- package/dist/registerCommonHandlers-Ccvsz7Ou.mjs +536 -0
- package/dist/registerCommonHandlers-DskirN-_.cjs +538 -0
- package/dist/registerKillSessionHandler-DZeLXWcB.cjs +361 -0
- package/dist/registerKillSessionHandler-GYvHdipX.mjs +358 -0
- package/dist/remoteSessionClient-B0LraSB9.cjs +634 -0
- package/dist/remoteSessionClient-CYnXRynE.mjs +612 -0
- package/dist/resources-BdFBQi8r.mjs +117 -0
- package/dist/resources-JDPugcDq.cjs +120 -0
- package/dist/run-CJzxoHVh.cjs +5762 -0
- package/dist/run-D3ifupU3.mjs +5739 -0
- package/dist/runClaude-Ba01qT-u.mjs +848 -0
- package/dist/runClaude-Da3RirzE.cjs +850 -0
- package/dist/runClaudeDeps-DOt79DjU.mjs +3624 -0
- package/dist/runClaudeDeps-DOzEBMls.cjs +3649 -0
- package/dist/{runGemini-Cjii069p.mjs → runGemini-BGeTz57m.mjs} +58 -31
- package/dist/{runGemini-28O2sqyI.cjs → runGemini-DSr9LIxL.cjs} +202 -175
- package/dist/{runOpenClaw-CiMZad-H.cjs → runOpenClaw-B1mTxN35.cjs} +64 -65
- package/dist/{runOpenClaw-jaLr7KF1.mjs → runOpenClaw-CogSedIc.mjs} +31 -32
- package/dist/sandbox-CG7IyDTU.cjs +187 -0
- package/dist/sandbox-DTe6d54R.mjs +180 -0
- package/dist/selfCheck-C9mVrQwf.mjs +84 -0
- package/dist/selfCheck-Dc-mNSLb.cjs +87 -0
- package/dist/{send-D5ejHPXG.cjs → send-B7J_eaG3.cjs} +16 -9
- package/dist/{send-C9mOtChi.mjs → send-CBXJKc6O.mjs} +12 -5
- package/dist/server-CZTP_iOn.cjs +407 -0
- package/dist/server-DcVBv04l.mjs +404 -0
- package/dist/sessionLock-Bys1PNSo.cjs +205 -0
- package/dist/sessionLock-D-EG2CfG.mjs +197 -0
- package/dist/sessionModeFile-DMl3dw3r.mjs +32 -0
- package/dist/sessionModeFile-RSm0NQkH.cjs +36 -0
- package/dist/sessionOps-Dn8z85h_.cjs +783 -0
- package/dist/sessionOps-SuHW8Dfe.mjs +760 -0
- package/dist/sessionScanner-BOrGjMXL.cjs +209 -0
- package/dist/sessionScanner-CX3onqXh.mjs +206 -0
- package/dist/{sessions-W6771g3X.mjs → sessions-BEG_HTSi.mjs} +17 -8
- package/dist/{sessions-BNMPQoLE.cjs → sessions-D74aJbhL.cjs} +37 -28
- package/dist/setupOfflineReconnection-ByElY60m.cjs +74 -0
- package/dist/setupOfflineReconnection-DpvWTt69.mjs +72 -0
- package/dist/smallFastModel-BLNgMrwR.mjs +18 -0
- package/dist/smallFastModel-D_uxGMo3.cjs +21 -0
- package/dist/{spawn-D0QVhzRb.mjs → spawn-B7yro0b2.mjs} +26 -38
- package/dist/{spawn-Ddtom1cb.cjs → spawn-DgR0RKRs.cjs} +52 -64
- package/dist/spawnAgents-BGQiEF-w.cjs +52 -0
- package/dist/spawnAgents-DZzZ9jMI.mjs +45 -0
- package/dist/spawnHappyCLI-B2H5s4B_.mjs +64 -0
- package/dist/spawnHappyCLI-DBhwZT7O.cjs +66 -0
- package/dist/specialCommands-BSqhYg5X.mjs +52 -0
- package/dist/specialCommands-DSsTeRej.cjs +54 -0
- package/dist/startFileWatcher-B4VsLgjD.cjs +71 -0
- package/dist/startFileWatcher-DErVWZE4.mjs +69 -0
- package/dist/startupPlan-BLMbfQIH.cjs +12 -0
- package/dist/startupPlan-DFMyNgAs.mjs +10 -0
- package/dist/streamRelay-BiKw59Cc.cjs +233 -0
- package/dist/streamRelay-FPVbHpbM.mjs +231 -0
- package/dist/sync-C8gyQFMc.mjs +69 -0
- package/dist/sync-DccIKZ5_.cjs +71 -0
- package/dist/systemPrompt-BwTPWfMu.cjs +97 -0
- package/dist/systemPrompt-DX521JJz.mjs +94 -0
- package/dist/{teams-CqSwtw2O.mjs → teams-C32F1hqd.mjs} +9 -40
- package/dist/{teams-BZ1tayg_.cjs → teams-Dl8g8kTI.cjs} +14 -45
- package/dist/template-BaHAmH2K.cjs +129 -0
- package/dist/template-CiOPa2rd.mjs +121 -0
- package/dist/{terminalTitleSuggest-DKgX3osW.mjs → terminalTitleSuggest-CeKsX_V6.mjs} +1 -9
- package/dist/{terminalTitleSuggest-Dji8I0Jy.cjs → terminalTitleSuggest-DhvRFX3H.cjs} +0 -10
- package/dist/terminals-B_bfC9c2.cjs +250 -0
- package/dist/terminals-Dlg0x3nY.mjs +235 -0
- package/dist/time-D0XyHOid.mjs +38 -0
- package/dist/time-DCuTyook.cjs +42 -0
- package/dist/titleGenerator-CQ8CoGhg.mjs +166 -0
- package/dist/titleGenerator-ChzMJsyg.cjs +172 -0
- package/dist/tmuxSocket-B8Yx20sT.mjs +19 -0
- package/dist/tmuxSocket-D-Xt6Vn-.cjs +24 -0
- package/dist/{todo-BYMg0fR0.cjs → todo-BvUOTa8G.cjs} +15 -12
- package/dist/{todo-BbusB1zM.mjs → todo-CZ6cFrrn.mjs} +11 -8
- package/dist/tools-BZtHF_qQ.mjs +177 -0
- package/dist/tools-Be3AoAwu.cjs +63 -0
- package/dist/tools-DQj0AeLk.cjs +180 -0
- package/dist/tools-DkluDcG4.mjs +60 -0
- package/dist/trimIdent-4gvk9Wk6.cjs +22 -0
- package/dist/trimIdent-BAjmv_TG.mjs +20 -0
- package/dist/types-CRS-srZK.cjs +66 -0
- package/dist/types-CkqAACXx.mjs +64 -0
- package/dist/uninstall-BkLzaJ6I.mjs +47 -0
- package/dist/uninstall-x-TUtf5H.cjs +49 -0
- package/package.json +7 -7
- package/dist/agentGuidance-CrR9l62U.mjs +0 -2145
- package/dist/agentGuidance-DwOWbX55.cjs +0 -2217
- package/dist/index-BG932eCh.cjs +0 -19655
- package/dist/index-CVCt3kSt.mjs +0 -19591
- package/dist/index-D5ScEErM.cjs +0 -58
- package/dist/index-DgO0FHOx.mjs +0 -52
- package/dist/limits-D2uN090G.mjs +0 -2528
- package/dist/limits-kqFqhfsh.cjs +0 -2652
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BACKGROUND_TASKS_MAX = 50;
|
|
4
|
+
const BACKGROUND_TASK_DESCRIPTION_MAX = 200;
|
|
5
|
+
const text = (value) => typeof value === "string" && value.length > 0 && !value.includes("\0") ? value : null;
|
|
6
|
+
const clip = (value) => value.length <= BACKGROUND_TASK_DESCRIPTION_MAX ? value : `${value.slice(0, BACKGROUND_TASK_DESCRIPTION_MAX - 1)}\u2026`;
|
|
7
|
+
const SETTLED_STATUSES = /* @__PURE__ */ new Set(["completed", "failed", "killed"]);
|
|
8
|
+
function sameBackgroundTasks(a, b) {
|
|
9
|
+
if (a.length !== b.length) return false;
|
|
10
|
+
const byId = new Map(a.map((task) => [task.id, task]));
|
|
11
|
+
for (const task of b) {
|
|
12
|
+
const other = byId.get(task.id);
|
|
13
|
+
if (!other || other.description !== task.description || other.type !== task.type) return false;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
function createBackgroundTaskTracker() {
|
|
18
|
+
const background = /* @__PURE__ */ new Map();
|
|
19
|
+
const known = /* @__PURE__ */ new Map();
|
|
20
|
+
const add = (id, now, meta) => {
|
|
21
|
+
const existing = background.get(id);
|
|
22
|
+
const seen = known.get(id);
|
|
23
|
+
background.set(id, {
|
|
24
|
+
id,
|
|
25
|
+
type: meta?.type ?? existing?.type ?? seen?.type ?? "unknown",
|
|
26
|
+
description: clip(meta?.description ?? existing?.description ?? seen?.description ?? ""),
|
|
27
|
+
startedAt: existing?.startedAt ?? now
|
|
28
|
+
});
|
|
29
|
+
if (background.size > BACKGROUND_TASKS_MAX) background.delete(background.keys().next().value);
|
|
30
|
+
};
|
|
31
|
+
function observe(message, now = Date.now()) {
|
|
32
|
+
const m = message;
|
|
33
|
+
if (m.type === "system") {
|
|
34
|
+
if (m.subtype === "background_tasks_changed" && Array.isArray(m.tasks)) {
|
|
35
|
+
const next = /* @__PURE__ */ new Set();
|
|
36
|
+
for (const task of m.tasks) {
|
|
37
|
+
const id2 = text(task?.task_id);
|
|
38
|
+
if (!id2 || task.ambient === true) continue;
|
|
39
|
+
next.add(id2);
|
|
40
|
+
add(id2, now, { type: text(task.task_type) ?? void 0, description: text(task.description) ?? void 0 });
|
|
41
|
+
}
|
|
42
|
+
for (const id2 of [...background.keys()]) if (!next.has(id2)) background.delete(id2);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const id = text(m.task_id);
|
|
46
|
+
if (!id) return;
|
|
47
|
+
if (m.subtype === "task_started") {
|
|
48
|
+
if (m.ambient === true || m.skip_transcript === true) return;
|
|
49
|
+
const meta = { id, type: text(m.task_type) ?? "unknown", description: clip(text(m.description) ?? ""), toolUseId: text(m.tool_use_id) };
|
|
50
|
+
known.set(id, meta);
|
|
51
|
+
if (known.size > BACKGROUND_TASKS_MAX * 4) known.delete(known.keys().next().value);
|
|
52
|
+
if (m.is_backgrounded === true) add(id, now, meta);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (m.subtype === "task_updated" && m.patch && typeof m.patch === "object") {
|
|
56
|
+
if (SETTLED_STATUSES.has(String(m.patch.status))) {
|
|
57
|
+
background.delete(id);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (m.patch.is_backgrounded === true) add(id, now, { description: text(m.patch.description) ?? void 0 });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (m.subtype === "task_notification") {
|
|
64
|
+
background.delete(id);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (m.type === "user" && m.tool_use_result && typeof m.tool_use_result === "object" && m.tool_use_result.status === "async_launched" && Array.isArray(m.message?.content)) {
|
|
70
|
+
for (const block of m.message.content) {
|
|
71
|
+
const toolUseId = block?.type === "tool_result" ? text(block.tool_use_id) : null;
|
|
72
|
+
if (!toolUseId) continue;
|
|
73
|
+
for (const seen of known.values()) if (seen.toolUseId === toolUseId) add(seen.id, now, seen);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function reset() {
|
|
78
|
+
background.clear();
|
|
79
|
+
known.clear();
|
|
80
|
+
}
|
|
81
|
+
function list() {
|
|
82
|
+
return [...background.values()].sort((a, b) => a.startedAt - b.startedAt).map((task) => ({ ...task }));
|
|
83
|
+
}
|
|
84
|
+
return { observe, reset, list };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const BACKGROUND_TASKS_LEASE_MS = 6e4;
|
|
88
|
+
const BACKGROUND_TASKS_TTL_MS = 15e4;
|
|
89
|
+
const EMPTY_BACKGROUND_TASKS = Object.freeze({ count: 0, tasks: [] });
|
|
90
|
+
function backgroundTasksReport(stored, now, options = {}) {
|
|
91
|
+
const tasks = Array.isArray(stored?.tasks) ? stored.tasks.filter((task) => task && typeof task.id === "string") : [];
|
|
92
|
+
const reportedAt = typeof stored?.updatedAt === "number" ? stored.updatedAt : void 0;
|
|
93
|
+
if (tasks.length === 0) return reportedAt === void 0 ? { ...EMPTY_BACKGROUND_TASKS, tasks: [] } : { count: 0, tasks: [], reportedAt };
|
|
94
|
+
const fresh = options.active !== false && reportedAt !== void 0 && now - reportedAt <= (options.ttlMs ?? BACKGROUND_TASKS_TTL_MS);
|
|
95
|
+
if (!fresh) return { count: 0, tasks: [], ...reportedAt !== void 0 ? { reportedAt } : {}, stale: true };
|
|
96
|
+
return { count: tasks.length, tasks: tasks.map((task) => ({ ...task })), reportedAt };
|
|
97
|
+
}
|
|
98
|
+
class BackgroundTaskReporter {
|
|
99
|
+
constructor(publish, leaseMs = BACKGROUND_TASKS_LEASE_MS) {
|
|
100
|
+
this.publish = publish;
|
|
101
|
+
this.leaseMs = leaseMs;
|
|
102
|
+
}
|
|
103
|
+
last = [];
|
|
104
|
+
lastPublishedAt = 0;
|
|
105
|
+
/** Called on every keepAlive tick with the current set; publishes only on an edge or a due renewal. */
|
|
106
|
+
observe(tasks, now = Date.now()) {
|
|
107
|
+
const changed = !sameBackgroundTasks(this.last, tasks);
|
|
108
|
+
const due = tasks.length > 0 && now - this.lastPublishedAt >= this.leaseMs;
|
|
109
|
+
if (!changed && !due) return false;
|
|
110
|
+
this.last = tasks.map((task) => ({ ...task }));
|
|
111
|
+
this.lastPublishedAt = now;
|
|
112
|
+
this.publish(this.last, now);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
current() {
|
|
116
|
+
return this.last;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
class BackgroundTaskTracker {
|
|
120
|
+
constructor(ttlMs = BACKGROUND_TASKS_TTL_MS) {
|
|
121
|
+
this.ttlMs = ttlMs;
|
|
122
|
+
}
|
|
123
|
+
sets = /* @__PURE__ */ new Map();
|
|
124
|
+
apply(sessionId, tasks, now = Date.now()) {
|
|
125
|
+
if (tasks.length === 0) this.sets.delete(sessionId);
|
|
126
|
+
else this.sets.set(sessionId, { at: now, tasks: tasks.map((task) => ({ ...task })) });
|
|
127
|
+
}
|
|
128
|
+
/** The wrapper is gone: whatever it reported no longer holds. */
|
|
129
|
+
forget(sessionId) {
|
|
130
|
+
this.sets.delete(sessionId);
|
|
131
|
+
}
|
|
132
|
+
report(sessionId, now = Date.now()) {
|
|
133
|
+
const entry = this.sets.get(sessionId);
|
|
134
|
+
if (!entry) return { ...EMPTY_BACKGROUND_TASKS, tasks: [] };
|
|
135
|
+
const out = backgroundTasksReport({ updatedAt: entry.at, tasks: entry.tasks }, now, { ttlMs: this.ttlMs });
|
|
136
|
+
if (out.stale) this.sets.delete(sessionId);
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
count(sessionId, now = Date.now()) {
|
|
140
|
+
return this.report(sessionId, now).count;
|
|
141
|
+
}
|
|
142
|
+
/** Sessions whose published set is still inside the TTL. */
|
|
143
|
+
activeSessions(now = Date.now()) {
|
|
144
|
+
return [...this.sets.keys()].filter((id) => this.count(id, now) > 0);
|
|
145
|
+
}
|
|
146
|
+
hasAny(now = Date.now()) {
|
|
147
|
+
return this.activeSessions(now).length > 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
exports.BACKGROUND_TASKS_MAX = BACKGROUND_TASKS_MAX;
|
|
152
|
+
exports.BACKGROUND_TASK_DESCRIPTION_MAX = BACKGROUND_TASK_DESCRIPTION_MAX;
|
|
153
|
+
exports.BackgroundTaskReporter = BackgroundTaskReporter;
|
|
154
|
+
exports.BackgroundTaskTracker = BackgroundTaskTracker;
|
|
155
|
+
exports.backgroundTasksReport = backgroundTasksReport;
|
|
156
|
+
exports.createBackgroundTaskTracker = createBackgroundTaskTracker;
|
|
157
|
+
exports.sameBackgroundTasks = sameBackgroundTasks;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_fs = require('node:fs');
|
|
4
|
+
var promises = require('node:fs/promises');
|
|
5
|
+
var path = require('node:path');
|
|
6
|
+
var configuration = require('./configuration-BSYpcPwE.cjs');
|
|
7
|
+
require('node:os');
|
|
8
|
+
require('./package-BwMrPwqH.cjs');
|
|
9
|
+
|
|
10
|
+
const ASSISTANT_CLAUDE_MD = `# very-happy \u8C03\u5EA6\u4E2D\u5FC3\uFF08\u8BED\u97F3\u52A9\u624B\uFF09
|
|
11
|
+
|
|
12
|
+
\u4F60\u662F very-happy \u7684\u8C03\u5EA6\u4E2D\u5FC3\uFF0C\u8DD1\u5728\u7528\u6237\u81EA\u5DF1\u7684\u673A\u5668\u4E0A\u3002\u7528\u6237\u4E3B\u8981\u901A\u8FC7\u8BED\u97F3\u8DDF\u4F60\u8BF4\u8BDD\uFF0C
|
|
13
|
+
\u4F60\u7684\u56DE\u590D\u4F1A\u88AB TTS \u6717\u8BFB\u51FA\u6765\u3002
|
|
14
|
+
|
|
15
|
+
## \u8BF4\u8BDD\u65B9\u5F0F
|
|
16
|
+
|
|
17
|
+
- \u7B80\u77ED\u3001\u53E3\u8BED\u5316\uFF0C\u9ED8\u8BA4\u4E00\u4E24\u53E5\u8BDD\u8BF4\u5B8C\uFF1B\u7528\u6237\u660E\u786E\u8981\u6C42\u5C55\u5F00\u624D\u5C55\u5F00\u3002
|
|
18
|
+
- \u4E0D\u8981\u7528 markdown \u91CD\u6392\u7248\uFF08\u6807\u9898/\u5217\u8868/\u8868\u683C/\u4EE3\u7801\u5757\u90FD\u522B\u7528\uFF09\uFF0C\u4E0D\u8981\u8D34\u957F\u4EE3\u7801\u2014\u2014
|
|
19
|
+
\u8FD9\u4E9B\u5FF5\u51FA\u6765\u5168\u662F\u566A\u97F3\u3002
|
|
20
|
+
- \u4E0D\u786E\u5B9A\u5C31\u76F4\u63A5\u95EE\uFF0C\u4E0D\u66FF\u7528\u6237\u505A\u786C\u51B3\u5B9A\u3002
|
|
21
|
+
- **\u591A\u9009\u4E00\u7684\u95EE\u9898\u7528 options \u5757**\uFF08\u754C\u9762\u4F1A\u6E32\u67D3\u6210\u53EF\u70B9\u6309\u94AE\uFF0C\u4E14\u4E0D\u4F1A\u88AB\u6717\u8BFB\uFF09\u2014\u2014
|
|
22
|
+
\u95EE\u53E5\u6B63\u5E38\u8BF4\uFF0C\u9009\u9879\u5305\u5728\u5757\u91CC\uFF0C\u6BCF\u9879\u4E00\u884C\u77ED\u8BED\uFF1A
|
|
23
|
+
|
|
24
|
+
<options>
|
|
25
|
+
<option>\u9009\u9879\u4E00\u7684\u77ED\u8BED</option>
|
|
26
|
+
<option>\u9009\u9879\u4E8C\u7684\u77ED\u8BED</option>
|
|
27
|
+
</options>
|
|
28
|
+
|
|
29
|
+
- \u6D3E\u51FA\u53BB\u7684\u4EFB\u52A1\u6709\u7ED3\u679C\u65F6\uFF0C\u4E3B\u52A8\u6C47\u62A5\u4E00\u53E5\u7ED3\u8BBA\u3002
|
|
30
|
+
|
|
31
|
+
## \u4EFB\u52A1\u76D8\u70B9\u53E3\u5F84
|
|
32
|
+
|
|
33
|
+
\u300C\u73B0\u5728\u6709\u54EA\u4E9B\u4EFB\u52A1 / \u5728\u8DD1\u4EC0\u4E48\u300D\u8FD9\u7C7B\u95EE\u9898\uFF1A**sessions_list \u548C terminals_list
|
|
34
|
+
\u90FD\u8981\u67E5**\u2014\u2014\u6D3B\u7740\u7684\u7EC8\u7AEF\uFF08tmux \u4F1A\u8BDD\uFF09\u540C\u6837\u662F\u5B58\u5728\u7684\u4EFB\u52A1\uFF0C\u4E00\u5E76\u76D8\u70B9\u6C47\u62A5
|
|
35
|
+
\uFF08\u8BF4\u6E05\u54EA\u4E9B\u662F\u804A\u5929\u4F1A\u8BDD\u3001\u54EA\u4E9B\u662F\u7EC8\u7AEF\uFF0C\u4EE5\u53CA\u5404\u81EA\u72B6\u6001\uFF09\u3002
|
|
36
|
+
|
|
37
|
+
## \u6536\u5230 [\u7CFB\u7EDF\u901A\u62A5] \u7684\u5904\u7406\u65B9\u5F0F
|
|
38
|
+
|
|
39
|
+
\u4EE5 \`[\u7CFB\u7EDF\u901A\u62A5]\` \u5F00\u5934\u7684\u6D88\u606F\u662F\u7CFB\u7EDF\u81EA\u52A8\u53D1\u6765\u7684\uFF08\u4F60\u6D3E\u51FA\u53BB\u7684 session \u5B8C\u6210\u4E86
|
|
40
|
+
\u6216\u5728\u7B49\u8F93\u5165\uFF09\uFF0C\u4E0D\u662F\u7528\u6237\u8BF4\u7684\u8BDD\u3002\u5904\u7406\u65B9\u5F0F\uFF1A
|
|
41
|
+
|
|
42
|
+
- \u5148\u7528 session_read \u6838\u5B9E\u90A3\u4E2A session \u7684\u5B9E\u9645\u7ED3\u679C\uFF0C\u518D\u5411\u7528\u6237\u53E3\u5934\u6C47\u62A5
|
|
43
|
+
**\u4E00\u53E5\u7ED3\u8BBA**\uFF08\u505A\u6210\u4E86\u4EC0\u4E48 / \u5361\u5728\u54EA\u91CC / \u9700\u8981\u7528\u6237\u505A\u4EC0\u4E48\uFF09\u3002
|
|
44
|
+
- \u4E0D\u8981\u590D\u8BFB\u901A\u62A5\u539F\u6587\uFF0C\u4E5F\u4E0D\u8981\u5FF5 session id\u3002
|
|
45
|
+
- \u77ED\u65F6\u95F4\u5185\u6536\u5230\u591A\u6761\u901A\u62A5\u65F6\uFF0C\u5408\u5E76\u6210\u4E00\u6B21\u6C47\u62A5\uFF0C\u4E00\u8D77\u8BF4\u5B8C\u3002
|
|
46
|
+
|
|
47
|
+
## \u5DE5\u4F5C\u6A21\u5F0F\uFF1A\u6D3E\u6D3B\uFF0C\u4E0D\u81EA\u5DF1\u52A8\u624B
|
|
48
|
+
|
|
49
|
+
- \u4F60\u7684\u6838\u5FC3\u52A8\u4F5C\u662F **session_spawn**\uFF1A\u628A\u7F16\u7801/\u6392\u67E5/\u7814\u7A76\u4EFB\u52A1\u6D3E\u7ED9\u4E00\u4E2A\u72EC\u7ACB\u7684
|
|
50
|
+
Claude Code session \u53BB\u505A\uFF0C\u7136\u540E\u7528 sessions_list / session_read \u8DDF\u8FDB\u8FDB\u5EA6\u3001
|
|
51
|
+
\u7528 session_send \u8FFD\u52A0\u6307\u793A\u3002
|
|
52
|
+
- **\u5DE5\u5177\u8FB9\u754C\uFF08\u786C\u7EA6\u675F\uFF0C\u4E0D\u662F\u5EFA\u8BAE\uFF09**\uFF1A\u4F60\u6CA1\u6709 Bash / Edit / Write\u2014\u2014\u8C03\u5EA6\u5668
|
|
53
|
+
\u4E0D\u4EB2\u81EA\u52A8\u624B\u3002\u8BFB\u548C\u68C0\u7D22\u7528 Read / Grep / Glob\uFF1B\u4E2A\u4EBA\u8BB0\u5FC6\u5199 memory_update\uFF1B
|
|
54
|
+
\u5DE5\u4F5C\u65E5\u5FD7\u5199 journal_append\uFF1B\u4EFB\u4F55\u8981\u6539\u6587\u4EF6\u3001\u8DD1\u547D\u4EE4\u7684\u6D3B\uFF0C\u6D3E session\u3002
|
|
55
|
+
- \u4E0D\u8981\u81EA\u5DF1\u5728\u8FD9\u4E2A\u4F1A\u8BDD\u91CC\u5199\u4EE3\u7801\u3001\u6539\u4ED3\u5E93\u2014\u2014\u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\u53EA\u662F\u4F60\u81EA\u5DF1\u7684\u5BB6\u76EE\u5F55\u3002
|
|
56
|
+
- \u5982\u679C\u7528\u6237\u7ED9\u51FA\u4E86\u81EA\u5DF1\u7684 skills / \u64CD\u4F5C\u624B\u518C\u76EE\u5F55\uFF0C\u53EF\u4EE5\u8BFB\u5B83\u4E86\u89E3\u5404\u9886\u57DF\u4E0A\u4E0B\u6587\uFF1B
|
|
57
|
+
\u4E0D\u8981\u731C\u6D4B\u4E2A\u4EBA\u76EE\u5F55\u3002\u4F18\u5148\u628A\u4EFB\u52A1\uFF08\u8FDE\u540C\u7528\u6237\u660E\u786E\u63D0\u4F9B\u7684 skill \u8DEF\u5F84\uFF09\u6D3E\u7ED9\u65B0 session\u3002
|
|
58
|
+
- \u7EC8\u7AEF\u7C7B\u64CD\u4F5C\u7528 terminals_list / terminal_read / terminal_send \u89C2\u5BDF\u548C\u8F7B\u63A8
|
|
59
|
+
\u5DF2\u7ECF\u5F00\u7740\u7684\u7EC8\u7AEF\u3002
|
|
60
|
+
|
|
61
|
+
## \u8D35\u64CD\u4F5C\u5148\u786E\u8BA4
|
|
62
|
+
|
|
63
|
+
session_kill\u3001session_archive\u3001terminal_send\uFF08submit=true\uFF0C\u4F1A\u771F\u7684\u6309\u56DE\u8F66\u6267\u884C\uFF09
|
|
64
|
+
\u8FD9\u7C7B\u64CD\u4F5C\uFF0C\u5148\u590D\u8FF0\u4F60\u8981\u64CD\u4F5C\u7684\u5BF9\u8C61\uFF08title / cwd / id\uFF09\uFF0C\u7B49\u7528\u6237\u786E\u8BA4\u518D\u505A\u3002
|
|
65
|
+
|
|
66
|
+
## \u8BB0\u5FC6\u7EAA\u5F8B
|
|
67
|
+
|
|
68
|
+
- \u4E2A\u4EBA\u957F\u671F\u8BB0\u5FC6\u5728 \`memory/personal.md\`\uFF0C\u7528 memory_update \u6309\u6BB5\u843D\u7EF4\u62A4\u3002
|
|
69
|
+
- **\u9ED8\u8BA4\u4E0D\u5199**\uFF1A\u5927\u591A\u6570\u5BF9\u8BDD\u4E0D\u9700\u8981\u5199\u8BB0\u5FC6\u3002\u53EA\u6709\u7528\u6237\u7684\u957F\u671F\u504F\u597D\u3001\u8EAB\u4EFD\u4E8B\u5B9E\u3001
|
|
70
|
+
\u6216\u7528\u6237\u660E\u786E\u8BF4"\u8BB0\u4F4F"\u7684\u5185\u5BB9\u624D\u503C\u5F97\u5199\u3002
|
|
71
|
+
- \u4E0A\u9650\u7EA6 2000 \u5B57\u7B26\u3002\u6761\u76EE\u5E26\u65E5\u671F\uFF08\u5982 \`- [2026-08-13] \u559C\u6B22\u7B80\u77ED\u6C47\u62A5\`\uFF09\uFF1B
|
|
72
|
+
\u66F4\u65B0\u65F6\u6539\u5199\u5BF9\u5E94\u6761\u76EE\uFF0C\u4E0D\u8981\u65E0\u8111\u8FFD\u52A0\u3002
|
|
73
|
+
- \u5FEB compact\uFF08\u4E0A\u4E0B\u6587\u5FEB\u6EE1\uFF09\u65F6\uFF0C\u7528 journal_append \u628A\u8FD9\u6BB5\u65F6\u95F4\u7684\u8981\u7D27\u8FDB\u5C55
|
|
74
|
+
\u5199\u8FDB\u5F53\u5929\u5DE5\u4F5C\u65E5\u5FD7\uFF08journal \u53EA\u8FFD\u52A0\u4E0D\u6539\u5199\uFF09\u3002
|
|
75
|
+
`;
|
|
76
|
+
const ASSISTANT_PERSONAL_MD = `# \u4E2A\u4EBA\u8BB0\u5FC6
|
|
77
|
+
|
|
78
|
+
> \u7531 memory_update \u5DE5\u5177\u6309\u4E8C\u7EA7\u6807\u9898\u6BB5\u7EF4\u62A4\u3002\u4E0A\u9650\u7EA6 2000 \u5B57\u7B26\u3002
|
|
79
|
+
> \u9ED8\u8BA4\u4E0D\u5199\uFF1A\u53EA\u8BB0\u957F\u671F\u504F\u597D\u3001\u8EAB\u4EFD\u4E8B\u5B9E\u3001\u7528\u6237\u660E\u786E\u8981\u6C42\u8BB0\u4F4F\u7684\u5185\u5BB9\u3002
|
|
80
|
+
> \u6761\u76EE\u5E26\u65E5\u671F\uFF0C\u66F4\u65B0\u65F6\u6539\u5199\u5BF9\u5E94\u6761\u76EE\u800C\u4E0D\u662F\u8FFD\u52A0\u3002
|
|
81
|
+
|
|
82
|
+
## \u8EAB\u4EFD\u4E0E\u504F\u597D
|
|
83
|
+
|
|
84
|
+
\uFF08\u6682\u65E0\uFF09
|
|
85
|
+
|
|
86
|
+
## \u957F\u671F\u4E8B\u5B9E
|
|
87
|
+
|
|
88
|
+
\uFF08\u6682\u65E0\uFF09
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
function assistantHome() {
|
|
92
|
+
return path.join(configuration.configuration.happyHomeDir, "assistant");
|
|
93
|
+
}
|
|
94
|
+
function assistantPersonalMemoryPath(home = assistantHome()) {
|
|
95
|
+
return path.join(home, "memory", "personal.md");
|
|
96
|
+
}
|
|
97
|
+
async function bootstrapAssistantHome(home = assistantHome()) {
|
|
98
|
+
const created = [];
|
|
99
|
+
const journalDir = path.join(home, "memory", "journal");
|
|
100
|
+
await promises.mkdir(journalDir, { recursive: true });
|
|
101
|
+
const claudeMdPath = path.join(home, "CLAUDE.md");
|
|
102
|
+
if (!node_fs.existsSync(claudeMdPath)) {
|
|
103
|
+
await promises.writeFile(claudeMdPath, ASSISTANT_CLAUDE_MD, "utf8");
|
|
104
|
+
created.push(claudeMdPath);
|
|
105
|
+
}
|
|
106
|
+
const personalPath = assistantPersonalMemoryPath(home);
|
|
107
|
+
if (!node_fs.existsSync(personalPath)) {
|
|
108
|
+
await promises.writeFile(personalPath, ASSISTANT_PERSONAL_MD, "utf8");
|
|
109
|
+
created.push(personalPath);
|
|
110
|
+
}
|
|
111
|
+
return { home, created };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
exports.assistantHome = assistantHome;
|
|
115
|
+
exports.assistantPersonalMemoryPath = assistantPersonalMemoryPath;
|
|
116
|
+
exports.bootstrapAssistantHome = bootstrapAssistantHome;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { c as configuration } from './configuration-RfeNjFmd.mjs';
|
|
5
|
+
import 'node:os';
|
|
6
|
+
import './package-BhaKlnxz.mjs';
|
|
7
|
+
|
|
8
|
+
const ASSISTANT_CLAUDE_MD = `# very-happy \u8C03\u5EA6\u4E2D\u5FC3\uFF08\u8BED\u97F3\u52A9\u624B\uFF09
|
|
9
|
+
|
|
10
|
+
\u4F60\u662F very-happy \u7684\u8C03\u5EA6\u4E2D\u5FC3\uFF0C\u8DD1\u5728\u7528\u6237\u81EA\u5DF1\u7684\u673A\u5668\u4E0A\u3002\u7528\u6237\u4E3B\u8981\u901A\u8FC7\u8BED\u97F3\u8DDF\u4F60\u8BF4\u8BDD\uFF0C
|
|
11
|
+
\u4F60\u7684\u56DE\u590D\u4F1A\u88AB TTS \u6717\u8BFB\u51FA\u6765\u3002
|
|
12
|
+
|
|
13
|
+
## \u8BF4\u8BDD\u65B9\u5F0F
|
|
14
|
+
|
|
15
|
+
- \u7B80\u77ED\u3001\u53E3\u8BED\u5316\uFF0C\u9ED8\u8BA4\u4E00\u4E24\u53E5\u8BDD\u8BF4\u5B8C\uFF1B\u7528\u6237\u660E\u786E\u8981\u6C42\u5C55\u5F00\u624D\u5C55\u5F00\u3002
|
|
16
|
+
- \u4E0D\u8981\u7528 markdown \u91CD\u6392\u7248\uFF08\u6807\u9898/\u5217\u8868/\u8868\u683C/\u4EE3\u7801\u5757\u90FD\u522B\u7528\uFF09\uFF0C\u4E0D\u8981\u8D34\u957F\u4EE3\u7801\u2014\u2014
|
|
17
|
+
\u8FD9\u4E9B\u5FF5\u51FA\u6765\u5168\u662F\u566A\u97F3\u3002
|
|
18
|
+
- \u4E0D\u786E\u5B9A\u5C31\u76F4\u63A5\u95EE\uFF0C\u4E0D\u66FF\u7528\u6237\u505A\u786C\u51B3\u5B9A\u3002
|
|
19
|
+
- **\u591A\u9009\u4E00\u7684\u95EE\u9898\u7528 options \u5757**\uFF08\u754C\u9762\u4F1A\u6E32\u67D3\u6210\u53EF\u70B9\u6309\u94AE\uFF0C\u4E14\u4E0D\u4F1A\u88AB\u6717\u8BFB\uFF09\u2014\u2014
|
|
20
|
+
\u95EE\u53E5\u6B63\u5E38\u8BF4\uFF0C\u9009\u9879\u5305\u5728\u5757\u91CC\uFF0C\u6BCF\u9879\u4E00\u884C\u77ED\u8BED\uFF1A
|
|
21
|
+
|
|
22
|
+
<options>
|
|
23
|
+
<option>\u9009\u9879\u4E00\u7684\u77ED\u8BED</option>
|
|
24
|
+
<option>\u9009\u9879\u4E8C\u7684\u77ED\u8BED</option>
|
|
25
|
+
</options>
|
|
26
|
+
|
|
27
|
+
- \u6D3E\u51FA\u53BB\u7684\u4EFB\u52A1\u6709\u7ED3\u679C\u65F6\uFF0C\u4E3B\u52A8\u6C47\u62A5\u4E00\u53E5\u7ED3\u8BBA\u3002
|
|
28
|
+
|
|
29
|
+
## \u4EFB\u52A1\u76D8\u70B9\u53E3\u5F84
|
|
30
|
+
|
|
31
|
+
\u300C\u73B0\u5728\u6709\u54EA\u4E9B\u4EFB\u52A1 / \u5728\u8DD1\u4EC0\u4E48\u300D\u8FD9\u7C7B\u95EE\u9898\uFF1A**sessions_list \u548C terminals_list
|
|
32
|
+
\u90FD\u8981\u67E5**\u2014\u2014\u6D3B\u7740\u7684\u7EC8\u7AEF\uFF08tmux \u4F1A\u8BDD\uFF09\u540C\u6837\u662F\u5B58\u5728\u7684\u4EFB\u52A1\uFF0C\u4E00\u5E76\u76D8\u70B9\u6C47\u62A5
|
|
33
|
+
\uFF08\u8BF4\u6E05\u54EA\u4E9B\u662F\u804A\u5929\u4F1A\u8BDD\u3001\u54EA\u4E9B\u662F\u7EC8\u7AEF\uFF0C\u4EE5\u53CA\u5404\u81EA\u72B6\u6001\uFF09\u3002
|
|
34
|
+
|
|
35
|
+
## \u6536\u5230 [\u7CFB\u7EDF\u901A\u62A5] \u7684\u5904\u7406\u65B9\u5F0F
|
|
36
|
+
|
|
37
|
+
\u4EE5 \`[\u7CFB\u7EDF\u901A\u62A5]\` \u5F00\u5934\u7684\u6D88\u606F\u662F\u7CFB\u7EDF\u81EA\u52A8\u53D1\u6765\u7684\uFF08\u4F60\u6D3E\u51FA\u53BB\u7684 session \u5B8C\u6210\u4E86
|
|
38
|
+
\u6216\u5728\u7B49\u8F93\u5165\uFF09\uFF0C\u4E0D\u662F\u7528\u6237\u8BF4\u7684\u8BDD\u3002\u5904\u7406\u65B9\u5F0F\uFF1A
|
|
39
|
+
|
|
40
|
+
- \u5148\u7528 session_read \u6838\u5B9E\u90A3\u4E2A session \u7684\u5B9E\u9645\u7ED3\u679C\uFF0C\u518D\u5411\u7528\u6237\u53E3\u5934\u6C47\u62A5
|
|
41
|
+
**\u4E00\u53E5\u7ED3\u8BBA**\uFF08\u505A\u6210\u4E86\u4EC0\u4E48 / \u5361\u5728\u54EA\u91CC / \u9700\u8981\u7528\u6237\u505A\u4EC0\u4E48\uFF09\u3002
|
|
42
|
+
- \u4E0D\u8981\u590D\u8BFB\u901A\u62A5\u539F\u6587\uFF0C\u4E5F\u4E0D\u8981\u5FF5 session id\u3002
|
|
43
|
+
- \u77ED\u65F6\u95F4\u5185\u6536\u5230\u591A\u6761\u901A\u62A5\u65F6\uFF0C\u5408\u5E76\u6210\u4E00\u6B21\u6C47\u62A5\uFF0C\u4E00\u8D77\u8BF4\u5B8C\u3002
|
|
44
|
+
|
|
45
|
+
## \u5DE5\u4F5C\u6A21\u5F0F\uFF1A\u6D3E\u6D3B\uFF0C\u4E0D\u81EA\u5DF1\u52A8\u624B
|
|
46
|
+
|
|
47
|
+
- \u4F60\u7684\u6838\u5FC3\u52A8\u4F5C\u662F **session_spawn**\uFF1A\u628A\u7F16\u7801/\u6392\u67E5/\u7814\u7A76\u4EFB\u52A1\u6D3E\u7ED9\u4E00\u4E2A\u72EC\u7ACB\u7684
|
|
48
|
+
Claude Code session \u53BB\u505A\uFF0C\u7136\u540E\u7528 sessions_list / session_read \u8DDF\u8FDB\u8FDB\u5EA6\u3001
|
|
49
|
+
\u7528 session_send \u8FFD\u52A0\u6307\u793A\u3002
|
|
50
|
+
- **\u5DE5\u5177\u8FB9\u754C\uFF08\u786C\u7EA6\u675F\uFF0C\u4E0D\u662F\u5EFA\u8BAE\uFF09**\uFF1A\u4F60\u6CA1\u6709 Bash / Edit / Write\u2014\u2014\u8C03\u5EA6\u5668
|
|
51
|
+
\u4E0D\u4EB2\u81EA\u52A8\u624B\u3002\u8BFB\u548C\u68C0\u7D22\u7528 Read / Grep / Glob\uFF1B\u4E2A\u4EBA\u8BB0\u5FC6\u5199 memory_update\uFF1B
|
|
52
|
+
\u5DE5\u4F5C\u65E5\u5FD7\u5199 journal_append\uFF1B\u4EFB\u4F55\u8981\u6539\u6587\u4EF6\u3001\u8DD1\u547D\u4EE4\u7684\u6D3B\uFF0C\u6D3E session\u3002
|
|
53
|
+
- \u4E0D\u8981\u81EA\u5DF1\u5728\u8FD9\u4E2A\u4F1A\u8BDD\u91CC\u5199\u4EE3\u7801\u3001\u6539\u4ED3\u5E93\u2014\u2014\u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\u53EA\u662F\u4F60\u81EA\u5DF1\u7684\u5BB6\u76EE\u5F55\u3002
|
|
54
|
+
- \u5982\u679C\u7528\u6237\u7ED9\u51FA\u4E86\u81EA\u5DF1\u7684 skills / \u64CD\u4F5C\u624B\u518C\u76EE\u5F55\uFF0C\u53EF\u4EE5\u8BFB\u5B83\u4E86\u89E3\u5404\u9886\u57DF\u4E0A\u4E0B\u6587\uFF1B
|
|
55
|
+
\u4E0D\u8981\u731C\u6D4B\u4E2A\u4EBA\u76EE\u5F55\u3002\u4F18\u5148\u628A\u4EFB\u52A1\uFF08\u8FDE\u540C\u7528\u6237\u660E\u786E\u63D0\u4F9B\u7684 skill \u8DEF\u5F84\uFF09\u6D3E\u7ED9\u65B0 session\u3002
|
|
56
|
+
- \u7EC8\u7AEF\u7C7B\u64CD\u4F5C\u7528 terminals_list / terminal_read / terminal_send \u89C2\u5BDF\u548C\u8F7B\u63A8
|
|
57
|
+
\u5DF2\u7ECF\u5F00\u7740\u7684\u7EC8\u7AEF\u3002
|
|
58
|
+
|
|
59
|
+
## \u8D35\u64CD\u4F5C\u5148\u786E\u8BA4
|
|
60
|
+
|
|
61
|
+
session_kill\u3001session_archive\u3001terminal_send\uFF08submit=true\uFF0C\u4F1A\u771F\u7684\u6309\u56DE\u8F66\u6267\u884C\uFF09
|
|
62
|
+
\u8FD9\u7C7B\u64CD\u4F5C\uFF0C\u5148\u590D\u8FF0\u4F60\u8981\u64CD\u4F5C\u7684\u5BF9\u8C61\uFF08title / cwd / id\uFF09\uFF0C\u7B49\u7528\u6237\u786E\u8BA4\u518D\u505A\u3002
|
|
63
|
+
|
|
64
|
+
## \u8BB0\u5FC6\u7EAA\u5F8B
|
|
65
|
+
|
|
66
|
+
- \u4E2A\u4EBA\u957F\u671F\u8BB0\u5FC6\u5728 \`memory/personal.md\`\uFF0C\u7528 memory_update \u6309\u6BB5\u843D\u7EF4\u62A4\u3002
|
|
67
|
+
- **\u9ED8\u8BA4\u4E0D\u5199**\uFF1A\u5927\u591A\u6570\u5BF9\u8BDD\u4E0D\u9700\u8981\u5199\u8BB0\u5FC6\u3002\u53EA\u6709\u7528\u6237\u7684\u957F\u671F\u504F\u597D\u3001\u8EAB\u4EFD\u4E8B\u5B9E\u3001
|
|
68
|
+
\u6216\u7528\u6237\u660E\u786E\u8BF4"\u8BB0\u4F4F"\u7684\u5185\u5BB9\u624D\u503C\u5F97\u5199\u3002
|
|
69
|
+
- \u4E0A\u9650\u7EA6 2000 \u5B57\u7B26\u3002\u6761\u76EE\u5E26\u65E5\u671F\uFF08\u5982 \`- [2026-08-13] \u559C\u6B22\u7B80\u77ED\u6C47\u62A5\`\uFF09\uFF1B
|
|
70
|
+
\u66F4\u65B0\u65F6\u6539\u5199\u5BF9\u5E94\u6761\u76EE\uFF0C\u4E0D\u8981\u65E0\u8111\u8FFD\u52A0\u3002
|
|
71
|
+
- \u5FEB compact\uFF08\u4E0A\u4E0B\u6587\u5FEB\u6EE1\uFF09\u65F6\uFF0C\u7528 journal_append \u628A\u8FD9\u6BB5\u65F6\u95F4\u7684\u8981\u7D27\u8FDB\u5C55
|
|
72
|
+
\u5199\u8FDB\u5F53\u5929\u5DE5\u4F5C\u65E5\u5FD7\uFF08journal \u53EA\u8FFD\u52A0\u4E0D\u6539\u5199\uFF09\u3002
|
|
73
|
+
`;
|
|
74
|
+
const ASSISTANT_PERSONAL_MD = `# \u4E2A\u4EBA\u8BB0\u5FC6
|
|
75
|
+
|
|
76
|
+
> \u7531 memory_update \u5DE5\u5177\u6309\u4E8C\u7EA7\u6807\u9898\u6BB5\u7EF4\u62A4\u3002\u4E0A\u9650\u7EA6 2000 \u5B57\u7B26\u3002
|
|
77
|
+
> \u9ED8\u8BA4\u4E0D\u5199\uFF1A\u53EA\u8BB0\u957F\u671F\u504F\u597D\u3001\u8EAB\u4EFD\u4E8B\u5B9E\u3001\u7528\u6237\u660E\u786E\u8981\u6C42\u8BB0\u4F4F\u7684\u5185\u5BB9\u3002
|
|
78
|
+
> \u6761\u76EE\u5E26\u65E5\u671F\uFF0C\u66F4\u65B0\u65F6\u6539\u5199\u5BF9\u5E94\u6761\u76EE\u800C\u4E0D\u662F\u8FFD\u52A0\u3002
|
|
79
|
+
|
|
80
|
+
## \u8EAB\u4EFD\u4E0E\u504F\u597D
|
|
81
|
+
|
|
82
|
+
\uFF08\u6682\u65E0\uFF09
|
|
83
|
+
|
|
84
|
+
## \u957F\u671F\u4E8B\u5B9E
|
|
85
|
+
|
|
86
|
+
\uFF08\u6682\u65E0\uFF09
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
function assistantHome() {
|
|
90
|
+
return join(configuration.happyHomeDir, "assistant");
|
|
91
|
+
}
|
|
92
|
+
function assistantPersonalMemoryPath(home = assistantHome()) {
|
|
93
|
+
return join(home, "memory", "personal.md");
|
|
94
|
+
}
|
|
95
|
+
async function bootstrapAssistantHome(home = assistantHome()) {
|
|
96
|
+
const created = [];
|
|
97
|
+
const journalDir = join(home, "memory", "journal");
|
|
98
|
+
await mkdir(journalDir, { recursive: true });
|
|
99
|
+
const claudeMdPath = join(home, "CLAUDE.md");
|
|
100
|
+
if (!existsSync(claudeMdPath)) {
|
|
101
|
+
await writeFile(claudeMdPath, ASSISTANT_CLAUDE_MD, "utf8");
|
|
102
|
+
created.push(claudeMdPath);
|
|
103
|
+
}
|
|
104
|
+
const personalPath = assistantPersonalMemoryPath(home);
|
|
105
|
+
if (!existsSync(personalPath)) {
|
|
106
|
+
await writeFile(personalPath, ASSISTANT_PERSONAL_MD, "utf8");
|
|
107
|
+
created.push(personalPath);
|
|
108
|
+
}
|
|
109
|
+
return { home, created };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export { assistantHome, assistantPersonalMemoryPath, bootstrapAssistantHome };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var open = require('open');
|
|
4
|
+
var logger = require('./logger-CS0mw3fa.cjs');
|
|
5
|
+
|
|
6
|
+
async function openBrowser(url) {
|
|
7
|
+
try {
|
|
8
|
+
if (!process.stdout.isTTY || process.env.CI || process.env.HEADLESS) {
|
|
9
|
+
logger.logger.debug("[browser] Headless environment detected, skipping browser open");
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
logger.logger.debug(`[browser] Attempting to open URL: ${url}`);
|
|
13
|
+
await open(url);
|
|
14
|
+
logger.logger.debug("[browser] Browser opened successfully");
|
|
15
|
+
return true;
|
|
16
|
+
} catch (error) {
|
|
17
|
+
logger.logger.debug("[browser] Failed to open browser:", error);
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.openBrowser = openBrowser;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import open from 'open';
|
|
2
|
+
import { l as logger } from './logger-6HYUEXNk.mjs';
|
|
3
|
+
|
|
4
|
+
async function openBrowser(url) {
|
|
5
|
+
try {
|
|
6
|
+
if (!process.stdout.isTTY || process.env.CI || process.env.HEADLESS) {
|
|
7
|
+
logger.debug("[browser] Headless environment detected, skipping browser open");
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
logger.debug(`[browser] Attempting to open URL: ${url}`);
|
|
11
|
+
await open(url);
|
|
12
|
+
logger.debug("[browser] Browser opened successfully");
|
|
13
|
+
return true;
|
|
14
|
+
} catch (error) {
|
|
15
|
+
logger.debug("[browser] Failed to open browser:", error);
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { openBrowser as o };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
|
+
import { p as projectPath } from './projectPath-BTBIMB57.mjs';
|
|
3
|
+
import 'path';
|
|
4
|
+
import 'url';
|
|
5
|
+
|
|
6
|
+
const claudeCliPath = resolve(join(projectPath(), "scripts", "claude_local_launcher.cjs"));
|
|
7
|
+
|
|
8
|
+
export { claudeCliPath };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('node:path');
|
|
4
|
+
var projectPath = require('./projectPath-ChLhdOyt.cjs');
|
|
5
|
+
require('path');
|
|
6
|
+
require('url');
|
|
7
|
+
|
|
8
|
+
const claudeCliPath = path.resolve(path.join(projectPath.projectPath(), "scripts", "claude_local_launcher.cjs"));
|
|
9
|
+
|
|
10
|
+
exports.claudeCliPath = claudeCliPath;
|