very-happy-cli 0.2.132 → 0.2.134

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 (45) hide show
  1. package/dist/{AcpBackend-BNMLGtST.mjs → AcpBackend-B8KEjDwF.mjs} +3 -3
  2. package/dist/{AcpBackend--EnHZRC4.cjs → AcpBackend-CeNp7tgD.cjs} +3 -3
  3. package/dist/{AcpSessionManager-RoOyx5KI.cjs → AcpSessionManager-Bu1d05bx.cjs} +1 -1
  4. package/dist/{AcpSessionManager-BF5JZYCC.mjs → AcpSessionManager-KlDZbEmZ.mjs} +1 -1
  5. package/dist/{agentGuidance-DeOIgOhh.mjs → agentGuidance-CPG5Cr5T.mjs} +1 -1
  6. package/dist/{agentGuidance-R9MH5Cd5.cjs → agentGuidance-Cg8Lha39.cjs} +1 -1
  7. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  8. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  9. package/dist/{config-CkmssSRu.cjs → config-C3e90AIH.cjs} +4 -4
  10. package/dist/{config-ClCkJ1a_.mjs → config-C4gWfnJX.mjs} +4 -4
  11. package/dist/{index-Dn7s2iaT.cjs → index-B1plzL9M.cjs} +85 -36
  12. package/dist/{index-DdbU8FmA.mjs → index-B6UvB88K.mjs} +16 -10
  13. package/dist/{index-D1gHXtkw.mjs → index-BqUOj1zK.mjs} +81 -32
  14. package/dist/{index-DK0qz1y7.mjs → index-CEDPokKf.mjs} +4 -4
  15. package/dist/{index-Bqg6yo5s.cjs → index-CX-zp3FH.cjs} +4 -4
  16. package/dist/{index-CjopZZg3.cjs → index-jqG8CV0c.cjs} +15 -9
  17. package/dist/index.cjs +4 -4
  18. package/dist/index.mjs +4 -4
  19. package/dist/{installTerminalHooks-CRWWmonO.mjs → installTerminalHooks-BT4Dq28Y.mjs} +4 -4
  20. package/dist/{installTerminalHooks-CPZ3vVn8.cjs → installTerminalHooks-DPmEaHg2.cjs} +4 -4
  21. package/dist/lib.cjs +2 -2
  22. package/dist/lib.d.cts +15 -60
  23. package/dist/lib.d.mts +15 -60
  24. package/dist/lib.mjs +2 -2
  25. package/dist/{limits-C9aXkP7U.mjs → limits-BGeIBBE3.mjs} +7 -7
  26. package/dist/{limits-DLlsV71c.cjs → limits-D6kiAfXJ.cjs} +7 -7
  27. package/dist/{mcp-DkoXvc07.mjs → mcp-BGu_dUaJ.mjs} +4 -4
  28. package/dist/{mcp-DHkYfENQ.cjs → mcp-DGZmUpuZ.cjs} +4 -4
  29. package/dist/{runGemini-Cx1YcK2o.cjs → runGemini-BPPnulIk.cjs} +6 -6
  30. package/dist/{runGemini-BjEl7syj.mjs → runGemini-DGTNwiLo.mjs} +6 -6
  31. package/dist/{runOpenClaw-I4sGAQf1.cjs → runOpenClaw-BB3Ivt1S.cjs} +5 -5
  32. package/dist/{runOpenClaw-ByHu69K5.mjs → runOpenClaw-CxgTFOSM.mjs} +5 -5
  33. package/dist/{send-gH1vJ0iv.cjs → send-Bo6iKuXr.cjs} +4 -4
  34. package/dist/{send-CSOeUlQC.mjs → send-DHShoBeq.mjs} +4 -4
  35. package/dist/{sessions-CP9FlcJ6.mjs → sessions-CJuwvEr0.mjs} +4 -4
  36. package/dist/{sessions-BBc8L8qf.cjs → sessions-DyC5Attg.cjs} +4 -4
  37. package/dist/{spawn-DrQo81MW.mjs → spawn-QtKlr8Ig.mjs} +4 -4
  38. package/dist/{spawn-Dmfbot5k.cjs → spawn-gha6nGx-.cjs} +4 -4
  39. package/dist/{teams-Bbvo1G6y.mjs → teams-BF-GxUZc.mjs} +4 -4
  40. package/dist/{teams-DtXQYmEK.cjs → teams-BbzWNV9e.cjs} +4 -4
  41. package/dist/{todo-DOi6svw9.cjs → todo-BaNaNZ8c.cjs} +3 -3
  42. package/dist/{todo-BAwevRyb.mjs → todo-CkJ5UjWs.mjs} +3 -3
  43. package/dist/{types-CA-c2NH7.mjs → types-Cq-tvv9t.mjs} +89 -27
  44. package/dist/{types-B15E2OVy.cjs → types-Dabm17Ln.cjs} +90 -28
  45. package/package.json +7 -7
package/dist/lib.d.cts CHANGED
@@ -355,12 +355,14 @@ declare const CliUpdateStateSchema: z$1.ZodObject<{
355
355
  }>;
356
356
  autoUpdateVersion: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
357
357
  retrySupported: z$1.ZodOptional<z$1.ZodBoolean>;
358
+ manualUpdateSupported: z$1.ZodOptional<z$1.ZodBoolean>;
358
359
  checkedAt: z$1.ZodNumber;
359
360
  handoverHold: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
360
361
  reason: z$1.ZodString;
361
362
  at: z$1.ZodNumber;
362
363
  }, z$1.core.$strip>>>;
363
364
  autoUpdate: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
365
+ source: z$1.ZodOptional<z$1.ZodString>;
364
366
  state: z$1.ZodUnion<readonly [z$1.ZodEnum<{
365
367
  installing: "installing";
366
368
  installed: "installed";
@@ -406,6 +408,8 @@ declare const DaemonStateSchema: z$1.ZodObject<{
406
408
  idle: "idle";
407
409
  shell: "shell";
408
410
  }>>;
411
+ agentKind: z$1.ZodOptional<z$1.ZodString>;
412
+ agentObservedAt: z$1.ZodOptional<z$1.ZodNumber>;
409
413
  mirrorSessionId: z$1.ZodOptional<z$1.ZodString>;
410
414
  restoredAt: z$1.ZodOptional<z$1.ZodNumber>;
411
415
  manual: z$1.ZodOptional<z$1.ZodBoolean>;
@@ -451,12 +455,14 @@ declare const DaemonStateSchema: z$1.ZodObject<{
451
455
  }>;
452
456
  autoUpdateVersion: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
453
457
  retrySupported: z$1.ZodOptional<z$1.ZodBoolean>;
458
+ manualUpdateSupported: z$1.ZodOptional<z$1.ZodBoolean>;
454
459
  checkedAt: z$1.ZodNumber;
455
460
  handoverHold: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
456
461
  reason: z$1.ZodString;
457
462
  at: z$1.ZodNumber;
458
463
  }, z$1.core.$strip>>>;
459
464
  autoUpdate: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
465
+ source: z$1.ZodOptional<z$1.ZodString>;
460
466
  state: z$1.ZodUnion<readonly [z$1.ZodEnum<{
461
467
  installing: "installing";
462
468
  installed: "installed";
@@ -1180,66 +1186,8 @@ type SpawnSessionResult = {
1180
1186
  errorMessage: string;
1181
1187
  };
1182
1188
 
1183
- /**
1184
- * Web terminal manager (daemon side).
1185
- *
1186
- * ── Architecture (Stage 1: daemon-authoritative screen) ──────────────────────
1187
- * Each web terminal is a long-lived daemon session object that owns the screen
1188
- * state, so client reconnect/redraw no longer relies on tmux redrawing on
1189
- * re-attach. A session holds:
1190
- * 1. a node-pty attached to a BACKGROUND tmux session `vh-<id>` (the pty is
1191
- * just tmux's single stable client; the tmux session holds the process);
1192
- * 2. an `@xterm/headless` Terminal — every pty output chunk is `.write()` into
1193
- * it, so the daemon always has the authoritative screen + scrollback;
1194
- * 3. a monotonic output `seq` (incremented per emitted chunk);
1195
- * 4. a bounded ring buffer of recent `{ seq, data }` chunks, used to replay
1196
- * only the gap after a brief client disconnect instead of a full snapshot.
1197
- *
1198
- * On (re)subscribe (`open`), the daemon returns either a REPLAY (the client's
1199
- * `fromSeq..now` is still covered by the ring → send just the missing chunks) or
1200
- * a SNAPSHOT (serialize the headless screen, bounded scrollback). The pty is NOT
1201
- * recreated on re-subscribe — the browser connecting/disconnecting is pure
1202
- * subscribe/unsubscribe against the daemon buffer. This is what kills the old
1203
- * single-client redraw jitter: the daemon keeps exactly one steady tmux client;
1204
- * it no longer creates/destroys a tmux client on every browser open/close.
1205
- *
1206
- * Cross-browser survival: closing the web view only marks the session as having
1207
- * no subscribers; the pty (and headless buffer) live on. An idle reaper detaches
1208
- * the pty only when it has no subscribers AND has been idle past the timeout
1209
- * (tmux stays alive → reopening reattaches instantly). MAX_LIVE_SESSIONS still
1210
- * LRU-evicts to protect the system PTY pool.
1211
- *
1212
- * Transport: raw bytes are relayed base64 over the (TLS) socket through the
1213
- * server, consistent with the server-trusted model. open/input/resize/close are
1214
- * driven from apiMachine; live output is pushed via the injected emit callback.
1215
- * If tmux isn't installed we fall back to the login shell directly (no local
1216
- * attach / no background survival, but the terminal still works).
1217
- *
1218
- * ── List push (Stage 2: daemon-driven terminal list) ─────────────────────────
1219
- * The manager also runs ONE internal list-tracking loop (startListTracking):
1220
- * every tick it rebuilds the cross-device list (tmux membership + @vh_title
1221
- * follow + agent classification + activity) and fires the callback only when
1222
- * the list SIGNATURE changed (terminalListSignature — activityAt quantized so
1223
- * raw output alone can't turn it into a metronome). Event kicks (open / kill /
1224
- * exit / rename / live OSC title via headless onTitleChange) refresh within
1225
- * LIST_KICK_DEBOUNCE_MS instead of waiting for the tick. apiMachine writes each
1226
- * changed list into daemonState.webTerminals, which the server persists and
1227
- * broadcasts — clients consume the push instead of polling `list-terminals`
1228
- * (the RPC remains for old clients; both return the same item shape).
1229
- *
1230
- * ── Realtime activity (Stage 3: ephemeral `terminal-activity`) ───────────────
1231
- * The list push above is the DURABLE lane and is deliberately coarse: one push
1232
- * costs a full daemonState encrypt + CAS + DB write + broadcast, so activity
1233
- * only participates in its signature at 60s granularity — which meant a
1234
- * terminal that was merely PRINTING could take up to a minute to float to the
1235
- * top of the sidebar. Stage 3 adds a second, ephemeral lane for exactly that
1236
- * one number: `terminal-activity` frames carrying `[{ id, activityAt }]`,
1237
- * relayed by the server to the account's web clients and stored nowhere. Fed
1238
- * by the live pty stream (leading-edge throttled to ~1s) and by the tracking
1239
- * tick (which is the only observer of COLD sessions' tmux activity). Emitted
1240
- * only when a value actually moved, so an idle machine sends nothing at all.
1241
- * The 60s bucket stays exactly as it is — the two lanes have different jobs.
1242
- */
1189
+ /** Agent-specific visible-screen adapters. Unknown is deliberately not idle. */
1190
+ type CodingAgentKind = 'claude' | 'codex' | 'pi';
1243
1191
 
1244
1192
  /**
1245
1193
  * Coarse state of the agent (Claude Code) inside a web terminal, surfaced in
@@ -1263,6 +1211,8 @@ interface TerminalListItem {
1263
1211
  createdAt?: number;
1264
1212
  activityAt?: number;
1265
1213
  agentState?: AgentState;
1214
+ agentKind?: CodingAgentKind;
1215
+ agentObservedAt?: number;
1266
1216
  /** Mirror reconcile (design v3): stricter "claude is really here" gate (its
1267
1217
  * own TUI footer/dialog present) — daemon-internal, NOT pushed to web and
1268
1218
  * NOT part of the list signature. Only this may trigger mirror adopt (which
@@ -1386,6 +1336,11 @@ declare class ApiMachineClient {
1386
1336
  * and the open-terminal snapshot/replay payloads. */
1387
1337
  private encTerminalData;
1388
1338
  constructor(token: string, machine: Machine);
1339
+ setCliUpdateRequestHandler(handler: (version: unknown) => Promise<{
1340
+ accepted: true;
1341
+ } | {
1342
+ error: string;
1343
+ }>): void;
1389
1344
  setCliUpdateRetryHandler(handler: (version: unknown) => Promise<{
1390
1345
  accepted: true;
1391
1346
  } | {
package/dist/lib.d.mts CHANGED
@@ -355,12 +355,14 @@ declare const CliUpdateStateSchema: z$1.ZodObject<{
355
355
  }>;
356
356
  autoUpdateVersion: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
357
357
  retrySupported: z$1.ZodOptional<z$1.ZodBoolean>;
358
+ manualUpdateSupported: z$1.ZodOptional<z$1.ZodBoolean>;
358
359
  checkedAt: z$1.ZodNumber;
359
360
  handoverHold: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
360
361
  reason: z$1.ZodString;
361
362
  at: z$1.ZodNumber;
362
363
  }, z$1.core.$strip>>>;
363
364
  autoUpdate: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
365
+ source: z$1.ZodOptional<z$1.ZodString>;
364
366
  state: z$1.ZodUnion<readonly [z$1.ZodEnum<{
365
367
  installing: "installing";
366
368
  installed: "installed";
@@ -406,6 +408,8 @@ declare const DaemonStateSchema: z$1.ZodObject<{
406
408
  idle: "idle";
407
409
  shell: "shell";
408
410
  }>>;
411
+ agentKind: z$1.ZodOptional<z$1.ZodString>;
412
+ agentObservedAt: z$1.ZodOptional<z$1.ZodNumber>;
409
413
  mirrorSessionId: z$1.ZodOptional<z$1.ZodString>;
410
414
  restoredAt: z$1.ZodOptional<z$1.ZodNumber>;
411
415
  manual: z$1.ZodOptional<z$1.ZodBoolean>;
@@ -451,12 +455,14 @@ declare const DaemonStateSchema: z$1.ZodObject<{
451
455
  }>;
452
456
  autoUpdateVersion: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;
453
457
  retrySupported: z$1.ZodOptional<z$1.ZodBoolean>;
458
+ manualUpdateSupported: z$1.ZodOptional<z$1.ZodBoolean>;
454
459
  checkedAt: z$1.ZodNumber;
455
460
  handoverHold: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
456
461
  reason: z$1.ZodString;
457
462
  at: z$1.ZodNumber;
458
463
  }, z$1.core.$strip>>>;
459
464
  autoUpdate: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{
465
+ source: z$1.ZodOptional<z$1.ZodString>;
460
466
  state: z$1.ZodUnion<readonly [z$1.ZodEnum<{
461
467
  installing: "installing";
462
468
  installed: "installed";
@@ -1180,66 +1186,8 @@ type SpawnSessionResult = {
1180
1186
  errorMessage: string;
1181
1187
  };
1182
1188
 
1183
- /**
1184
- * Web terminal manager (daemon side).
1185
- *
1186
- * ── Architecture (Stage 1: daemon-authoritative screen) ──────────────────────
1187
- * Each web terminal is a long-lived daemon session object that owns the screen
1188
- * state, so client reconnect/redraw no longer relies on tmux redrawing on
1189
- * re-attach. A session holds:
1190
- * 1. a node-pty attached to a BACKGROUND tmux session `vh-<id>` (the pty is
1191
- * just tmux's single stable client; the tmux session holds the process);
1192
- * 2. an `@xterm/headless` Terminal — every pty output chunk is `.write()` into
1193
- * it, so the daemon always has the authoritative screen + scrollback;
1194
- * 3. a monotonic output `seq` (incremented per emitted chunk);
1195
- * 4. a bounded ring buffer of recent `{ seq, data }` chunks, used to replay
1196
- * only the gap after a brief client disconnect instead of a full snapshot.
1197
- *
1198
- * On (re)subscribe (`open`), the daemon returns either a REPLAY (the client's
1199
- * `fromSeq..now` is still covered by the ring → send just the missing chunks) or
1200
- * a SNAPSHOT (serialize the headless screen, bounded scrollback). The pty is NOT
1201
- * recreated on re-subscribe — the browser connecting/disconnecting is pure
1202
- * subscribe/unsubscribe against the daemon buffer. This is what kills the old
1203
- * single-client redraw jitter: the daemon keeps exactly one steady tmux client;
1204
- * it no longer creates/destroys a tmux client on every browser open/close.
1205
- *
1206
- * Cross-browser survival: closing the web view only marks the session as having
1207
- * no subscribers; the pty (and headless buffer) live on. An idle reaper detaches
1208
- * the pty only when it has no subscribers AND has been idle past the timeout
1209
- * (tmux stays alive → reopening reattaches instantly). MAX_LIVE_SESSIONS still
1210
- * LRU-evicts to protect the system PTY pool.
1211
- *
1212
- * Transport: raw bytes are relayed base64 over the (TLS) socket through the
1213
- * server, consistent with the server-trusted model. open/input/resize/close are
1214
- * driven from apiMachine; live output is pushed via the injected emit callback.
1215
- * If tmux isn't installed we fall back to the login shell directly (no local
1216
- * attach / no background survival, but the terminal still works).
1217
- *
1218
- * ── List push (Stage 2: daemon-driven terminal list) ─────────────────────────
1219
- * The manager also runs ONE internal list-tracking loop (startListTracking):
1220
- * every tick it rebuilds the cross-device list (tmux membership + @vh_title
1221
- * follow + agent classification + activity) and fires the callback only when
1222
- * the list SIGNATURE changed (terminalListSignature — activityAt quantized so
1223
- * raw output alone can't turn it into a metronome). Event kicks (open / kill /
1224
- * exit / rename / live OSC title via headless onTitleChange) refresh within
1225
- * LIST_KICK_DEBOUNCE_MS instead of waiting for the tick. apiMachine writes each
1226
- * changed list into daemonState.webTerminals, which the server persists and
1227
- * broadcasts — clients consume the push instead of polling `list-terminals`
1228
- * (the RPC remains for old clients; both return the same item shape).
1229
- *
1230
- * ── Realtime activity (Stage 3: ephemeral `terminal-activity`) ───────────────
1231
- * The list push above is the DURABLE lane and is deliberately coarse: one push
1232
- * costs a full daemonState encrypt + CAS + DB write + broadcast, so activity
1233
- * only participates in its signature at 60s granularity — which meant a
1234
- * terminal that was merely PRINTING could take up to a minute to float to the
1235
- * top of the sidebar. Stage 3 adds a second, ephemeral lane for exactly that
1236
- * one number: `terminal-activity` frames carrying `[{ id, activityAt }]`,
1237
- * relayed by the server to the account's web clients and stored nowhere. Fed
1238
- * by the live pty stream (leading-edge throttled to ~1s) and by the tracking
1239
- * tick (which is the only observer of COLD sessions' tmux activity). Emitted
1240
- * only when a value actually moved, so an idle machine sends nothing at all.
1241
- * The 60s bucket stays exactly as it is — the two lanes have different jobs.
1242
- */
1189
+ /** Agent-specific visible-screen adapters. Unknown is deliberately not idle. */
1190
+ type CodingAgentKind = 'claude' | 'codex' | 'pi';
1243
1191
 
1244
1192
  /**
1245
1193
  * Coarse state of the agent (Claude Code) inside a web terminal, surfaced in
@@ -1263,6 +1211,8 @@ interface TerminalListItem {
1263
1211
  createdAt?: number;
1264
1212
  activityAt?: number;
1265
1213
  agentState?: AgentState;
1214
+ agentKind?: CodingAgentKind;
1215
+ agentObservedAt?: number;
1266
1216
  /** Mirror reconcile (design v3): stricter "claude is really here" gate (its
1267
1217
  * own TUI footer/dialog present) — daemon-internal, NOT pushed to web and
1268
1218
  * NOT part of the list signature. Only this may trigger mirror adopt (which
@@ -1386,6 +1336,11 @@ declare class ApiMachineClient {
1386
1336
  * and the open-terminal snapshot/replay payloads. */
1387
1337
  private encTerminalData;
1388
1338
  constructor(token: string, machine: Machine);
1339
+ setCliUpdateRequestHandler(handler: (version: unknown) => Promise<{
1340
+ accepted: true;
1341
+ } | {
1342
+ error: string;
1343
+ }>): void;
1389
1344
  setCliUpdateRetryHandler(handler: (version: unknown) => Promise<{
1390
1345
  accepted: true;
1391
1346
  } | {
package/dist/lib.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-CA-c2NH7.mjs';
2
- export { c as configuration, l as logger } from './limits-C9aXkP7U.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-Cq-tvv9t.mjs';
2
+ export { c as configuration, l as logger } from './limits-BGeIBBE3.mjs';
3
3
  import 'axios';
4
4
  import 'node:events';
5
5
  import 'socket.io-client';
@@ -9,7 +9,7 @@ import chalk from 'chalk';
9
9
  import { inspect } from 'node:util';
10
10
 
11
11
  var name = "very-happy-cli";
12
- var version = "0.2.132";
12
+ var version = "0.2.134";
13
13
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
14
14
  var author = "Kirill Dubovitskiy";
15
15
  var contributors = [
@@ -122,12 +122,12 @@ var dependencies = {
122
122
  zod: "^4.0.0"
123
123
  };
124
124
  var optionalDependencies = {
125
- "very-happy-tools-arm64-darwin": "0.2.132",
126
- "very-happy-tools-x64-darwin": "0.2.132",
127
- "very-happy-tools-arm64-linux": "0.2.132",
128
- "very-happy-tools-x64-linux": "0.2.132",
129
- "very-happy-tools-arm64-win32": "0.2.132",
130
- "very-happy-tools-x64-win32": "0.2.132"
125
+ "very-happy-tools-arm64-darwin": "0.2.134",
126
+ "very-happy-tools-x64-darwin": "0.2.134",
127
+ "very-happy-tools-arm64-linux": "0.2.134",
128
+ "very-happy-tools-x64-linux": "0.2.134",
129
+ "very-happy-tools-arm64-win32": "0.2.134",
130
+ "very-happy-tools-x64-win32": "0.2.134"
131
131
  };
132
132
  var devDependencies = {
133
133
  "@slopus/happy-wire": "workspace:*",
@@ -30,7 +30,7 @@ function _interopNamespaceDefault(e) {
30
30
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
31
31
 
32
32
  var name = "very-happy-cli";
33
- var version = "0.2.132";
33
+ var version = "0.2.134";
34
34
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
35
35
  var author = "Kirill Dubovitskiy";
36
36
  var contributors = [
@@ -143,12 +143,12 @@ var dependencies = {
143
143
  zod: "^4.0.0"
144
144
  };
145
145
  var optionalDependencies = {
146
- "very-happy-tools-arm64-darwin": "0.2.132",
147
- "very-happy-tools-x64-darwin": "0.2.132",
148
- "very-happy-tools-arm64-linux": "0.2.132",
149
- "very-happy-tools-x64-linux": "0.2.132",
150
- "very-happy-tools-arm64-win32": "0.2.132",
151
- "very-happy-tools-x64-win32": "0.2.132"
146
+ "very-happy-tools-arm64-darwin": "0.2.134",
147
+ "very-happy-tools-x64-darwin": "0.2.134",
148
+ "very-happy-tools-arm64-linux": "0.2.134",
149
+ "very-happy-tools-x64-linux": "0.2.134",
150
+ "very-happy-tools-arm64-win32": "0.2.134",
151
+ "very-happy-tools-x64-win32": "0.2.134"
152
152
  };
153
153
  var devDependencies = {
154
154
  "@slopus/happy-wire": "workspace:*",
@@ -1,9 +1,9 @@
1
- import { r as registerTeamsTools } from './agentGuidance-DeOIgOhh.mjs';
1
+ import { r as registerTeamsTools } from './agentGuidance-CPG5Cr5T.mjs';
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { z } from 'zod';
5
- import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-D1gHXtkw.mjs';
6
- import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES } from './limits-C9aXkP7U.mjs';
5
+ import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-BqUOj1zK.mjs';
6
+ import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES } from './limits-BGeIBBE3.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:os';
9
9
  import 'node:crypto';
@@ -11,7 +11,7 @@ import 'axios';
11
11
  import 'tweetnacl';
12
12
  import 'socket.io-client';
13
13
  import 'node:child_process';
14
- import './types-CA-c2NH7.mjs';
14
+ import './types-Cq-tvv9t.mjs';
15
15
  import 'node:fs';
16
16
  import 'node:path';
17
17
  import 'chalk';
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var agentGuidance = require('./agentGuidance-R9MH5Cd5.cjs');
3
+ var agentGuidance = require('./agentGuidance-Cg8Lha39.cjs');
4
4
  var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
5
5
  var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
6
6
  var z = require('zod');
7
- var index = require('./index-Dn7s2iaT.cjs');
8
- var persistence = require('./limits-DLlsV71c.cjs');
7
+ var index = require('./index-B1plzL9M.cjs');
8
+ var persistence = require('./limits-D6kiAfXJ.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -13,7 +13,7 @@ require('axios');
13
13
  require('tweetnacl');
14
14
  require('socket.io-client');
15
15
  require('node:child_process');
16
- require('./types-B15E2OVy.cjs');
16
+ require('./types-Dabm17Ln.cjs');
17
17
  require('node:fs');
18
18
  require('node:path');
19
19
  require('chalk');
@@ -4,11 +4,11 @@ var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var api = require('./types-B15E2OVy.cjs');
8
- var persistence = require('./limits-DLlsV71c.cjs');
9
- var index = require('./index-Dn7s2iaT.cjs');
10
- var AcpBackend = require('./AcpBackend--EnHZRC4.cjs');
11
- var config = require('./config-CkmssSRu.cjs');
7
+ var api = require('./types-Dabm17Ln.cjs');
8
+ var persistence = require('./limits-D6kiAfXJ.cjs');
9
+ var index = require('./index-B1plzL9M.cjs');
10
+ var AcpBackend = require('./AcpBackend-CeNp7tgD.cjs');
11
+ var config = require('./config-C3e90AIH.cjs');
12
12
  require('axios');
13
13
  require('node:events');
14
14
  require('socket.io-client');
@@ -34,7 +34,7 @@ require('@anthropic-ai/sandbox-runtime');
34
34
  require('expo-server-sdk');
35
35
  require('chalk');
36
36
  require('node:util');
37
- require('./agentGuidance-R9MH5Cd5.cjs');
37
+ require('./agentGuidance-Cg8Lha39.cjs');
38
38
  require('@anthropic-ai/claude-agent-sdk');
39
39
  require('ps-list');
40
40
  require('tmp');
@@ -2,11 +2,11 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { join } from 'node:path';
5
- import { f as connectionState, A as ApiClient, e as errorLogMetadata, p as projectPath, d as contentLogMetadata } from './types-CA-c2NH7.mjs';
6
- import { l as logger, g as readSettings, i as encodeBase64 } from './limits-C9aXkP7U.mjs';
7
- import { Q as GEMINI_API_KEY_ENV, R as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, K as BasePermissionHandler, U as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as hashObject, V as MessageBuffer, W as CHANGE_TITLE_INSTRUCTION, y as registerKillSessionHandler, C as startHappyServer } from './index-D1gHXtkw.mjs';
8
- import { A as AcpBackend } from './AcpBackend-BNMLGtST.mjs';
9
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-ClCkJ1a_.mjs';
5
+ import { f as connectionState, A as ApiClient, e as errorLogMetadata, p as projectPath, d as contentLogMetadata } from './types-Cq-tvv9t.mjs';
6
+ import { l as logger, g as readSettings, i as encodeBase64 } from './limits-BGeIBBE3.mjs';
7
+ import { Q as GEMINI_API_KEY_ENV, R as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, K as BasePermissionHandler, U as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as hashObject, V as MessageBuffer, W as CHANGE_TITLE_INSTRUCTION, y as registerKillSessionHandler, C as startHappyServer } from './index-BqUOj1zK.mjs';
8
+ import { A as AcpBackend } from './AcpBackend-B8KEjDwF.mjs';
9
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-C4gWfnJX.mjs';
10
10
  import 'axios';
11
11
  import 'node:events';
12
12
  import 'socket.io-client';
@@ -32,7 +32,7 @@ import '@anthropic-ai/sandbox-runtime';
32
32
  import 'expo-server-sdk';
33
33
  import 'chalk';
34
34
  import 'node:util';
35
- import './agentGuidance-DeOIgOhh.mjs';
35
+ import './agentGuidance-CPG5Cr5T.mjs';
36
36
  import '@anthropic-ai/claude-agent-sdk';
37
37
  import 'ps-list';
38
38
  import 'tmp';
@@ -5,10 +5,10 @@ var node_child_process = require('node:child_process');
5
5
  var os = require('node:os');
6
6
  var node_fs = require('node:fs');
7
7
  var path = require('node:path');
8
- var api = require('./types-B15E2OVy.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-RoOyx5KI.cjs');
10
- var persistence = require('./limits-DLlsV71c.cjs');
11
- var index = require('./index-Dn7s2iaT.cjs');
8
+ var api = require('./types-Dabm17Ln.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-Bu1d05bx.cjs');
10
+ var persistence = require('./limits-D6kiAfXJ.cjs');
11
+ var index = require('./index-B1plzL9M.cjs');
12
12
  var WebSocket = require('ws');
13
13
  var ed = require('@noble/ed25519');
14
14
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -34,7 +34,7 @@ require('@anthropic-ai/sandbox-runtime');
34
34
  require('expo-server-sdk');
35
35
  require('chalk');
36
36
  require('node:util');
37
- require('./agentGuidance-R9MH5Cd5.cjs');
37
+ require('./agentGuidance-Cg8Lha39.cjs');
38
38
  require('ink');
39
39
  require('react');
40
40
  require('@anthropic-ai/claude-agent-sdk');
@@ -3,10 +3,10 @@ import { execFileSync } from 'node:child_process';
3
3
  import os from 'node:os';
4
4
  import { existsSync, readFileSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { e as errorLogMetadata, d as contentLogMetadata, f as connectionState, A as ApiClient } from './types-CA-c2NH7.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-BF5JZYCC.mjs';
8
- import { f as ensurePrivateDirectorySync, h as hardenPrivateFileSync, w as writePrivateFileSync, g as readSettings, i as encodeBase64, l as logger, c as configuration } from './limits-C9aXkP7U.mjs';
9
- import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as registerKillSessionHandler } from './index-D1gHXtkw.mjs';
6
+ import { e as errorLogMetadata, d as contentLogMetadata, f as connectionState, A as ApiClient } from './types-Cq-tvv9t.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-KlDZbEmZ.mjs';
8
+ import { f as ensurePrivateDirectorySync, h as hardenPrivateFileSync, w as writePrivateFileSync, g as readSettings, i as encodeBase64, l as logger, c as configuration } from './limits-BGeIBBE3.mjs';
9
+ import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as registerKillSessionHandler } from './index-BqUOj1zK.mjs';
10
10
  import WebSocket from 'ws';
11
11
  import * as ed from '@noble/ed25519';
12
12
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -32,7 +32,7 @@ import '@anthropic-ai/sandbox-runtime';
32
32
  import 'expo-server-sdk';
33
33
  import 'chalk';
34
34
  import 'node:util';
35
- import './agentGuidance-DeOIgOhh.mjs';
35
+ import './agentGuidance-CPG5Cr5T.mjs';
36
36
  import 'ink';
37
37
  import 'react';
38
38
  import '@anthropic-ai/claude-agent-sdk';
@@ -3,15 +3,15 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var persistence = require('./limits-DLlsV71c.cjs');
7
- var index = require('./index-Dn7s2iaT.cjs');
6
+ var persistence = require('./limits-D6kiAfXJ.cjs');
7
+ var index = require('./index-B1plzL9M.cjs');
8
8
  require('node:fs/promises');
9
9
  require('node:os');
10
10
  require('zod');
11
11
  require('node:crypto');
12
12
  require('tweetnacl');
13
13
  require('node:util');
14
- require('./types-B15E2OVy.cjs');
14
+ require('./types-Dabm17Ln.cjs');
15
15
  require('axios');
16
16
  require('node:events');
17
17
  require('socket.io-client');
@@ -30,7 +30,7 @@ require('fs');
30
30
  require('node:readline');
31
31
  require('@anthropic-ai/sandbox-runtime');
32
32
  require('expo-server-sdk');
33
- require('./agentGuidance-R9MH5Cd5.cjs');
33
+ require('./agentGuidance-Cg8Lha39.cjs');
34
34
  require('ink');
35
35
  require('react');
36
36
  require('@anthropic-ai/claude-agent-sdk');
@@ -1,15 +1,15 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { r as readPersistedSessions, c as configuration } from './limits-C9aXkP7U.mjs';
5
- import { d as sendUserMessage, a as sessionWebUrl } from './index-D1gHXtkw.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './limits-BGeIBBE3.mjs';
5
+ import { d as sendUserMessage, a as sessionWebUrl } from './index-BqUOj1zK.mjs';
6
6
  import 'node:fs/promises';
7
7
  import 'node:os';
8
8
  import 'zod';
9
9
  import 'node:crypto';
10
10
  import 'tweetnacl';
11
11
  import 'node:util';
12
- import './types-CA-c2NH7.mjs';
12
+ import './types-Cq-tvv9t.mjs';
13
13
  import 'axios';
14
14
  import 'node:events';
15
15
  import 'socket.io-client';
@@ -28,7 +28,7 @@ import 'fs';
28
28
  import 'node:readline';
29
29
  import '@anthropic-ai/sandbox-runtime';
30
30
  import 'expo-server-sdk';
31
- import './agentGuidance-DeOIgOhh.mjs';
31
+ import './agentGuidance-CPG5Cr5T.mjs';
32
32
  import 'ink';
33
33
  import 'react';
34
34
  import '@anthropic-ai/claude-agent-sdk';
@@ -1,9 +1,9 @@
1
1
  import chalk from 'chalk';
2
- import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, e as listSessions, r as readSessionTranscript, f as stopSession, g as resolvePermissionRequest, h as archiveSession } from './index-D1gHXtkw.mjs';
3
- import { i as isValidSessionId } from './types-CA-c2NH7.mjs';
2
+ import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, e as listSessions, r as readSessionTranscript, f as stopSession, g as resolvePermissionRequest, h as archiveSession } from './index-BqUOj1zK.mjs';
3
+ import { i as isValidSessionId } from './types-Cq-tvv9t.mjs';
4
4
  import 'node:os';
5
5
  import 'node:crypto';
6
- import './limits-C9aXkP7U.mjs';
6
+ import './limits-BGeIBBE3.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:fs';
9
9
  import 'node:path';
@@ -12,7 +12,7 @@ import 'tweetnacl';
12
12
  import 'node:util';
13
13
  import 'cross-spawn';
14
14
  import 'node:readline';
15
- import './agentGuidance-DeOIgOhh.mjs';
15
+ import './agentGuidance-CPG5Cr5T.mjs';
16
16
  import 'fs/promises';
17
17
  import 'ink';
18
18
  import 'react';
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var index = require('./index-Dn7s2iaT.cjs');
5
- var api = require('./types-B15E2OVy.cjs');
4
+ var index = require('./index-B1plzL9M.cjs');
5
+ var api = require('./types-Dabm17Ln.cjs');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
- require('./limits-DLlsV71c.cjs');
8
+ require('./limits-D6kiAfXJ.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:fs');
11
11
  require('node:path');
@@ -14,7 +14,7 @@ require('tweetnacl');
14
14
  require('node:util');
15
15
  require('cross-spawn');
16
16
  require('node:readline');
17
- require('./agentGuidance-R9MH5Cd5.cjs');
17
+ require('./agentGuidance-Cg8Lha39.cjs');
18
18
  require('fs/promises');
19
19
  require('ink');
20
20
  require('react');
@@ -1,11 +1,11 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync, statSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, b as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, w as waitForSessionKey, d as sendUserMessage } from './index-D1gHXtkw.mjs';
5
- import { l as logger } from './limits-C9aXkP7U.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, b as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, w as waitForSessionKey, d as sendUserMessage } from './index-BqUOj1zK.mjs';
5
+ import { l as logger } from './limits-BGeIBBE3.mjs';
6
6
  import 'node:os';
7
7
  import 'node:crypto';
8
- import './types-CA-c2NH7.mjs';
8
+ import './types-Cq-tvv9t.mjs';
9
9
  import 'axios';
10
10
  import 'node:events';
11
11
  import 'socket.io-client';
@@ -27,7 +27,7 @@ import 'tweetnacl';
27
27
  import 'node:readline';
28
28
  import '@anthropic-ai/sandbox-runtime';
29
29
  import 'expo-server-sdk';
30
- import './agentGuidance-DeOIgOhh.mjs';
30
+ import './agentGuidance-CPG5Cr5T.mjs';
31
31
  import 'ink';
32
32
  import 'react';
33
33
  import '@anthropic-ai/claude-agent-sdk';
@@ -3,11 +3,11 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var index = require('./index-Dn7s2iaT.cjs');
7
- var persistence = require('./limits-DLlsV71c.cjs');
6
+ var index = require('./index-B1plzL9M.cjs');
7
+ var persistence = require('./limits-D6kiAfXJ.cjs');
8
8
  require('node:os');
9
9
  require('node:crypto');
10
- require('./types-B15E2OVy.cjs');
10
+ require('./types-Dabm17Ln.cjs');
11
11
  require('axios');
12
12
  require('node:events');
13
13
  require('socket.io-client');
@@ -29,7 +29,7 @@ require('tweetnacl');
29
29
  require('node:readline');
30
30
  require('@anthropic-ai/sandbox-runtime');
31
31
  require('expo-server-sdk');
32
- require('./agentGuidance-R9MH5Cd5.cjs');
32
+ require('./agentGuidance-Cg8Lha39.cjs');
33
33
  require('ink');
34
34
  require('react');
35
35
  require('@anthropic-ai/claude-agent-sdk');