very-happy-cli 0.2.155 → 0.2.157
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-DmFcRh54.cjs → AcpBackend-BymWX-LI.cjs} +2 -2
- package/dist/{AcpBackend-DVB0nzgR.mjs → AcpBackend-Cy18U7yw.mjs} +2 -2
- package/dist/{AcpSessionManager-CWaSYTnT.cjs → AcpSessionManager-BF7zBGAi.cjs} +1 -1
- package/dist/{AcpSessionManager-dGDgNb-p.mjs → AcpSessionManager-Ds8rcp95.mjs} +1 -1
- package/dist/{agentGuidance-BWxFC6UL.mjs → agentGuidance-CU6YD_Ms.mjs} +560 -29
- package/dist/{agentGuidance-un7YPryB.cjs → agentGuidance-Db76O1kw.cjs} +579 -28
- package/dist/{agentHome-aucT8BHw.cjs → agentHome-B0CLy0Qx.cjs} +2 -2
- package/dist/{agentHome-ByLb2HFg.mjs → agentHome-BaJ9xtxB.mjs} +2 -2
- package/dist/{auto-BQnD6gVx.mjs → auto-B1YAwaeU.mjs} +6 -6
- package/dist/{auto-P9RoJaY0.cjs → auto-DqKGFq8U.cjs} +6 -6
- package/dist/codex/happyMcpStdioBridge.cjs +2 -2
- package/dist/codex/happyMcpStdioBridge.mjs +2 -2
- package/dist/{config-BoePh9PX.cjs → config-CzkBjZnV.cjs} +4 -4
- package/dist/{config-BPZ2Y6o8.mjs → config-aAbhJllb.mjs} +4 -4
- package/dist/{index-BjzdXb9x.mjs → index-BVu8Cufk.mjs} +8 -8
- package/dist/{index-B4oXnbYw.mjs → index-BYU1e81k.mjs} +372 -65
- package/dist/{index-D_fYUxVg.cjs → index-C9QzZsUQ.cjs} +375 -68
- package/dist/{index-DRrLaljt.cjs → index-CTbGqVFY.cjs} +7 -7
- package/dist/{index--KCpVs1c.cjs → index-Cz-uqnJk.cjs} +4 -4
- package/dist/{index-DVVRqaVG.mjs → index-DQcRkI9r.mjs} +4 -4
- package/dist/index.cjs +4 -4
- package/dist/index.mjs +4 -4
- package/dist/{install-CGigiocs.cjs → install-BMlV0Tnr.cjs} +1 -1
- package/dist/{install-DP5aPNEX.mjs → install-BuYnqtVa.mjs} +1 -1
- package/dist/{installTerminalHooks-XrcPvfBs.cjs → installTerminalHooks-BVVOEGhG.cjs} +4 -4
- package/dist/{installTerminalHooks-tIg7mANc.mjs → installTerminalHooks-ELDoqh0A.mjs} +4 -4
- package/dist/lib.cjs +2 -2
- package/dist/lib.d.cts +101 -9
- package/dist/lib.d.mts +101 -9
- package/dist/lib.mjs +2 -2
- package/dist/{limits-C_DW0M0q.mjs → limits-A2c-3M-_.mjs} +162 -11
- package/dist/{limits-DkfHJ3nS.cjs → limits-CyuIt-Vl.cjs} +169 -10
- package/dist/{mcp-o7QglAQM.mjs → mcp-Bo934Kpy.mjs} +4 -4
- package/dist/{mcp-BqlXl10F.cjs → mcp-CXkvnztT.cjs} +4 -4
- package/dist/{piRuntime-BxP4B_zY.cjs → piRuntime-CJjA26oD.cjs} +2 -2
- package/dist/{piRuntime-MjiJI-nV.mjs → piRuntime-DdEY2mE9.mjs} +2 -2
- package/dist/{piTerminal-DYzRcwgb.cjs → piTerminal-CpU3hzrX.cjs} +6 -6
- package/dist/{piTerminal-Dpq6yqKU.mjs → piTerminal-DwWmgumi.mjs} +6 -6
- package/dist/{runGemini-CDlcQ-OA.mjs → runGemini-Cj6oJQ-I.mjs} +6 -6
- package/dist/{runGemini-8Pxh94Fm.cjs → runGemini-DS-0qm0L.cjs} +6 -6
- package/dist/{runOpenClaw-B5FSZIbK.cjs → runOpenClaw-CvSm8oTc.cjs} +5 -5
- package/dist/{runOpenClaw-YkhsgPs0.mjs → runOpenClaw-DUCQxkI-.mjs} +5 -5
- package/dist/{send-CwrYXTPr.cjs → send-CHxobaoI.cjs} +43 -31
- package/dist/{send-DJStmLBv.mjs → send-D5CyRyZ_.mjs} +43 -31
- package/dist/{sessions-MX21NJXd.cjs → sessions-BFlIrKCY.cjs} +133 -49
- package/dist/{sessions-JaVXlSqj.mjs → sessions-DsE01xKc.mjs} +133 -49
- package/dist/{spawn-BaPnjClT.mjs → spawn-CdihhwHs.mjs} +4 -4
- package/dist/{spawn-cIoglKVf.cjs → spawn-HV345RN-.cjs} +4 -4
- package/dist/{teams-DXV5Pwwt.mjs → teams-BE8nMB6O.mjs} +5 -5
- package/dist/{teams-Dqk7F3D-.cjs → teams-BahinMnH.cjs} +5 -5
- package/dist/{todo-Buuqn9gm.cjs → todo-CMMQ6yhU.cjs} +2 -2
- package/dist/{todo-2Z1REhfx.mjs → todo-CuQAkSp2.mjs} +2 -2
- package/dist/{types-a2xsH2UI.cjs → types-B0sSi6eM.cjs} +125 -13
- package/dist/{types-CkbfdRzq.mjs → types-BrGJ7PJz.mjs} +125 -13
- package/package.json +7 -7
|
@@ -11,7 +11,7 @@ import { homedir } from 'node:os';
|
|
|
11
11
|
import { join, basename } from 'node:path';
|
|
12
12
|
|
|
13
13
|
var name = "very-happy-cli";
|
|
14
|
-
var version = "0.2.
|
|
14
|
+
var version = "0.2.157";
|
|
15
15
|
var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
|
|
16
16
|
var author = "Kirill Dubovitskiy";
|
|
17
17
|
var contributors = [
|
|
@@ -128,12 +128,12 @@ var dependencies = {
|
|
|
128
128
|
zod: "^4.0.0"
|
|
129
129
|
};
|
|
130
130
|
var optionalDependencies = {
|
|
131
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
132
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
133
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
134
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
135
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
136
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
131
|
+
"very-happy-tools-arm64-darwin": "0.2.157",
|
|
132
|
+
"very-happy-tools-x64-darwin": "0.2.157",
|
|
133
|
+
"very-happy-tools-arm64-linux": "0.2.157",
|
|
134
|
+
"very-happy-tools-x64-linux": "0.2.157",
|
|
135
|
+
"very-happy-tools-arm64-win32": "0.2.157",
|
|
136
|
+
"very-happy-tools-x64-win32": "0.2.157"
|
|
137
137
|
};
|
|
138
138
|
var devDependencies = {
|
|
139
139
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1571,7 +1571,7 @@ const TeamActionSchema = z$1.discriminatedUnion("type", [
|
|
|
1571
1571
|
z$1.object({ requestId: id$1, action: TeamActionSchema });
|
|
1572
1572
|
z$1.object({ name: id$1, machineId: id$1, requestId: id$1.optional(), launch: TeamLaunchSchema.optional() });
|
|
1573
1573
|
const id = z$1.string().min(1).max(128);
|
|
1574
|
-
const text = z$1.string().min(1).max(32e3);
|
|
1574
|
+
const text$2 = z$1.string().min(1).max(32e3);
|
|
1575
1575
|
const AUTOMATION_NAME_PATTERN = /^[a-z0-9][a-z0-9-_.]{0,63}$/;
|
|
1576
1576
|
const AutomationNameSchema = z$1.string().regex(AUTOMATION_NAME_PATTERN, "automation name must match [a-z0-9][a-z0-9-_.]{0,63}");
|
|
1577
1577
|
const AUTOMATION_MIN_INTERVAL_MS = 6e4;
|
|
@@ -1599,13 +1599,13 @@ const AutomationActionSchema = z$1.discriminatedUnion("kind", [
|
|
|
1599
1599
|
kind: z$1.literal("spawn"),
|
|
1600
1600
|
agent: z$1.string().trim().min(1).max(64),
|
|
1601
1601
|
directory: z$1.string().min(1).max(4096),
|
|
1602
|
-
prompt: text,
|
|
1602
|
+
prompt: text$2,
|
|
1603
1603
|
model: z$1.string().trim().min(1).max(256).nullable().optional(),
|
|
1604
1604
|
permissionMode: z$1.string().trim().min(1).max(64).nullable().optional(),
|
|
1605
1605
|
worktree: z$1.boolean().optional(),
|
|
1606
1606
|
sticky: AutomationStickySchema.optional()
|
|
1607
1607
|
}),
|
|
1608
|
-
z$1.object({ kind: z$1.literal("send"), sessionId: id, prompt: text }),
|
|
1608
|
+
z$1.object({ kind: z$1.literal("send"), sessionId: id, prompt: text$2 }),
|
|
1609
1609
|
z$1.object({
|
|
1610
1610
|
kind: z$1.literal("script"),
|
|
1611
1611
|
command: z$1.array(z$1.string().min(1).max(4096)).min(1).max(256),
|
|
@@ -2169,6 +2169,9 @@ async function notifyDaemonClaudeAuthFailed(sessionId) {
|
|
|
2169
2169
|
async function notifyDaemonTurnEvent(sessionId, event) {
|
|
2170
2170
|
return daemonPost("/session-event", { sessionId, event });
|
|
2171
2171
|
}
|
|
2172
|
+
async function notifyDaemonBackgroundTasks(sessionId, backgroundTasks) {
|
|
2173
|
+
return daemonPost("/session-event", { sessionId, event: "background_tasks", backgroundTasks });
|
|
2174
|
+
}
|
|
2172
2175
|
function reportSessionEditToDaemon(edit) {
|
|
2173
2176
|
void daemonPost("/session-edit", edit).then((result) => {
|
|
2174
2177
|
if (result?.error) logger.debug(`[CONTROL CLIENT] session-edit not recorded: ${result.error}`);
|
|
@@ -2338,6 +2341,154 @@ let backoff = createBackoff({
|
|
|
2338
2341
|
}
|
|
2339
2342
|
});
|
|
2340
2343
|
|
|
2344
|
+
const BACKGROUND_TASKS_MAX = 50;
|
|
2345
|
+
const BACKGROUND_TASK_DESCRIPTION_MAX = 200;
|
|
2346
|
+
const text = (value) => typeof value === "string" && value.length > 0 && !value.includes("\0") ? value : null;
|
|
2347
|
+
const clip = (value) => value.length <= BACKGROUND_TASK_DESCRIPTION_MAX ? value : `${value.slice(0, BACKGROUND_TASK_DESCRIPTION_MAX - 1)}\u2026`;
|
|
2348
|
+
const SETTLED_STATUSES = /* @__PURE__ */ new Set(["completed", "failed", "killed"]);
|
|
2349
|
+
function sameBackgroundTasks(a, b) {
|
|
2350
|
+
if (a.length !== b.length) return false;
|
|
2351
|
+
const byId = new Map(a.map((task) => [task.id, task]));
|
|
2352
|
+
for (const task of b) {
|
|
2353
|
+
const other = byId.get(task.id);
|
|
2354
|
+
if (!other || other.description !== task.description || other.type !== task.type) return false;
|
|
2355
|
+
}
|
|
2356
|
+
return true;
|
|
2357
|
+
}
|
|
2358
|
+
function createBackgroundTaskTracker() {
|
|
2359
|
+
const background = /* @__PURE__ */ new Map();
|
|
2360
|
+
const known = /* @__PURE__ */ new Map();
|
|
2361
|
+
const add = (id, now, meta) => {
|
|
2362
|
+
const existing = background.get(id);
|
|
2363
|
+
const seen = known.get(id);
|
|
2364
|
+
background.set(id, {
|
|
2365
|
+
id,
|
|
2366
|
+
type: meta?.type ?? existing?.type ?? seen?.type ?? "unknown",
|
|
2367
|
+
description: clip(meta?.description ?? existing?.description ?? seen?.description ?? ""),
|
|
2368
|
+
startedAt: existing?.startedAt ?? now
|
|
2369
|
+
});
|
|
2370
|
+
if (background.size > BACKGROUND_TASKS_MAX) background.delete(background.keys().next().value);
|
|
2371
|
+
};
|
|
2372
|
+
function observe(message, now = Date.now()) {
|
|
2373
|
+
const m = message;
|
|
2374
|
+
if (m.type === "system") {
|
|
2375
|
+
if (m.subtype === "background_tasks_changed" && Array.isArray(m.tasks)) {
|
|
2376
|
+
const next = /* @__PURE__ */ new Set();
|
|
2377
|
+
for (const task of m.tasks) {
|
|
2378
|
+
const id2 = text(task?.task_id);
|
|
2379
|
+
if (!id2 || task.ambient === true) continue;
|
|
2380
|
+
next.add(id2);
|
|
2381
|
+
add(id2, now, { type: text(task.task_type) ?? void 0, description: text(task.description) ?? void 0 });
|
|
2382
|
+
}
|
|
2383
|
+
for (const id2 of [...background.keys()]) if (!next.has(id2)) background.delete(id2);
|
|
2384
|
+
return;
|
|
2385
|
+
}
|
|
2386
|
+
const id = text(m.task_id);
|
|
2387
|
+
if (!id) return;
|
|
2388
|
+
if (m.subtype === "task_started") {
|
|
2389
|
+
if (m.ambient === true || m.skip_transcript === true) return;
|
|
2390
|
+
const meta = { id, type: text(m.task_type) ?? "unknown", description: clip(text(m.description) ?? ""), toolUseId: text(m.tool_use_id) };
|
|
2391
|
+
known.set(id, meta);
|
|
2392
|
+
if (known.size > BACKGROUND_TASKS_MAX * 4) known.delete(known.keys().next().value);
|
|
2393
|
+
if (m.is_backgrounded === true) add(id, now, meta);
|
|
2394
|
+
return;
|
|
2395
|
+
}
|
|
2396
|
+
if (m.subtype === "task_updated" && m.patch && typeof m.patch === "object") {
|
|
2397
|
+
if (SETTLED_STATUSES.has(String(m.patch.status))) {
|
|
2398
|
+
background.delete(id);
|
|
2399
|
+
return;
|
|
2400
|
+
}
|
|
2401
|
+
if (m.patch.is_backgrounded === true) add(id, now, { description: text(m.patch.description) ?? void 0 });
|
|
2402
|
+
return;
|
|
2403
|
+
}
|
|
2404
|
+
if (m.subtype === "task_notification") {
|
|
2405
|
+
background.delete(id);
|
|
2406
|
+
return;
|
|
2407
|
+
}
|
|
2408
|
+
return;
|
|
2409
|
+
}
|
|
2410
|
+
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)) {
|
|
2411
|
+
for (const block of m.message.content) {
|
|
2412
|
+
const toolUseId = block?.type === "tool_result" ? text(block.tool_use_id) : null;
|
|
2413
|
+
if (!toolUseId) continue;
|
|
2414
|
+
for (const seen of known.values()) if (seen.toolUseId === toolUseId) add(seen.id, now, seen);
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
}
|
|
2418
|
+
function reset() {
|
|
2419
|
+
background.clear();
|
|
2420
|
+
known.clear();
|
|
2421
|
+
}
|
|
2422
|
+
function list() {
|
|
2423
|
+
return [...background.values()].sort((a, b) => a.startedAt - b.startedAt).map((task) => ({ ...task }));
|
|
2424
|
+
}
|
|
2425
|
+
return { observe, reset, list };
|
|
2426
|
+
}
|
|
2427
|
+
|
|
2428
|
+
const BACKGROUND_TASKS_LEASE_MS = 6e4;
|
|
2429
|
+
const BACKGROUND_TASKS_TTL_MS = 15e4;
|
|
2430
|
+
const EMPTY_BACKGROUND_TASKS = Object.freeze({ count: 0, tasks: [] });
|
|
2431
|
+
function backgroundTasksReport(stored, now, options = {}) {
|
|
2432
|
+
const tasks = Array.isArray(stored?.tasks) ? stored.tasks.filter((task) => task && typeof task.id === "string") : [];
|
|
2433
|
+
const reportedAt = typeof stored?.updatedAt === "number" ? stored.updatedAt : void 0;
|
|
2434
|
+
if (tasks.length === 0) return reportedAt === void 0 ? { ...EMPTY_BACKGROUND_TASKS, tasks: [] } : { count: 0, tasks: [], reportedAt };
|
|
2435
|
+
const fresh = options.active !== false && reportedAt !== void 0 && now - reportedAt <= (options.ttlMs ?? BACKGROUND_TASKS_TTL_MS);
|
|
2436
|
+
if (!fresh) return { count: 0, tasks: [], ...reportedAt !== void 0 ? { reportedAt } : {}, stale: true };
|
|
2437
|
+
return { count: tasks.length, tasks: tasks.map((task) => ({ ...task })), reportedAt };
|
|
2438
|
+
}
|
|
2439
|
+
class BackgroundTaskReporter {
|
|
2440
|
+
constructor(publish, leaseMs = BACKGROUND_TASKS_LEASE_MS) {
|
|
2441
|
+
this.publish = publish;
|
|
2442
|
+
this.leaseMs = leaseMs;
|
|
2443
|
+
}
|
|
2444
|
+
last = [];
|
|
2445
|
+
lastPublishedAt = 0;
|
|
2446
|
+
/** Called on every keepAlive tick with the current set; publishes only on an edge or a due renewal. */
|
|
2447
|
+
observe(tasks, now = Date.now()) {
|
|
2448
|
+
const changed = !sameBackgroundTasks(this.last, tasks);
|
|
2449
|
+
const due = tasks.length > 0 && now - this.lastPublishedAt >= this.leaseMs;
|
|
2450
|
+
if (!changed && !due) return false;
|
|
2451
|
+
this.last = tasks.map((task) => ({ ...task }));
|
|
2452
|
+
this.lastPublishedAt = now;
|
|
2453
|
+
this.publish(this.last, now);
|
|
2454
|
+
return true;
|
|
2455
|
+
}
|
|
2456
|
+
current() {
|
|
2457
|
+
return this.last;
|
|
2458
|
+
}
|
|
2459
|
+
}
|
|
2460
|
+
class BackgroundTaskTracker {
|
|
2461
|
+
constructor(ttlMs = BACKGROUND_TASKS_TTL_MS) {
|
|
2462
|
+
this.ttlMs = ttlMs;
|
|
2463
|
+
}
|
|
2464
|
+
sets = /* @__PURE__ */ new Map();
|
|
2465
|
+
apply(sessionId, tasks, now = Date.now()) {
|
|
2466
|
+
if (tasks.length === 0) this.sets.delete(sessionId);
|
|
2467
|
+
else this.sets.set(sessionId, { at: now, tasks: tasks.map((task) => ({ ...task })) });
|
|
2468
|
+
}
|
|
2469
|
+
/** The wrapper is gone: whatever it reported no longer holds. */
|
|
2470
|
+
forget(sessionId) {
|
|
2471
|
+
this.sets.delete(sessionId);
|
|
2472
|
+
}
|
|
2473
|
+
report(sessionId, now = Date.now()) {
|
|
2474
|
+
const entry = this.sets.get(sessionId);
|
|
2475
|
+
if (!entry) return { ...EMPTY_BACKGROUND_TASKS, tasks: [] };
|
|
2476
|
+
const out = backgroundTasksReport({ updatedAt: entry.at, tasks: entry.tasks }, now, { ttlMs: this.ttlMs });
|
|
2477
|
+
if (out.stale) this.sets.delete(sessionId);
|
|
2478
|
+
return out;
|
|
2479
|
+
}
|
|
2480
|
+
count(sessionId, now = Date.now()) {
|
|
2481
|
+
return this.report(sessionId, now).count;
|
|
2482
|
+
}
|
|
2483
|
+
/** Sessions whose published set is still inside the TTL. */
|
|
2484
|
+
activeSessions(now = Date.now()) {
|
|
2485
|
+
return [...this.sets.keys()].filter((id) => this.count(id, now) > 0);
|
|
2486
|
+
}
|
|
2487
|
+
hasAny(now = Date.now()) {
|
|
2488
|
+
return this.activeSessions(now).length > 0;
|
|
2489
|
+
}
|
|
2490
|
+
}
|
|
2491
|
+
|
|
2341
2492
|
const CLIPBOARD_MAX_BYTES = 256 * 1024;
|
|
2342
2493
|
const CLIPBOARD_HISTORY_MAX_BYTES = 32 * 1024;
|
|
2343
2494
|
const CLIPBOARD_TOOL_NAME = "copy_to_clipboard";
|
|
@@ -2373,4 +2524,4 @@ function prepareClipboardHistoryText(input) {
|
|
|
2373
2524
|
return { text, truncated: true, totalBytes: prepared.totalBytes };
|
|
2374
2525
|
}
|
|
2375
2526
|
|
|
2376
|
-
export {
|
|
2527
|
+
export { prepareClipboardHistoryText as $, AUTOMATION_NAME_PATTERN as A, BUILTIN_TODO_SKILL as B, CLIPBOARD_TOOL_NAME as C, hardenPrivateFileSync as D, writePrivateFileSync as E, packageJson as F, normalizeHttpEndpoint as G, AutomationNameSchema as H, AutomationConcurrencySchema as I, AutomationActionSchema as J, AutomationTriggerSchema as K, encrypt as L, decodeBase64 as M, decrypt as N, listDaemonSessions as O, backgroundTasksReport as P, resumeDaemonSession as Q, listDaemonPeers as R, AgentVersionsSchema as S, backoff as T, ReleaseDrainNoticeSchema as U, decryptBlob as V, RelayAssignmentResponseSchema as W, notifyDaemonTurnEvent as X, BackgroundTaskReporter as Y, notifyDaemonBackgroundTasks as Z, prepareClipboardText as _, CLIPBOARD_TOOL_TITLE as a, credentialRelayProblem as a0, RelayCandidatesResponseSchema as a1, readTrackedClaudeSessionIds as a2, readTrackedCodexThreadIds as a3, isValidTerminalId as a4, exponentialBackoffDelay as a5, libsodiumEncryptForPublicKey as a6, libsodiumPublicKeyFromSecretKey as a7, getRandomBytes as a8, redactLogValue as a9, isDaemonRunningCurrentlyInstalledHappyVersion as aA, stopDaemon as aB, acquireDaemonLock as aC, BackgroundTaskTracker as aD, deletePersistedSessions as aE, writeDaemonState as aF, writeSettings as aG, cleanupDaemonState as aH, releaseDaemonLock as aI, ContextUsageSchema as aJ, clearCredentials as aK, clearMachineId as aL, SandboxConfigSchema as aM, getLatestDaemonLog as aN, persistence as aO, sameBackgroundTasks as aa, notifyDaemonSessionEvent as ab, STREAM_DELTA_MAX_CHARS as ac, ensurePrivateDirectory as ad, hardenPrivateFile as ae, notifyDaemonClaudeAuthFailed as af, createBackgroundTaskTracker as ag, readCredentials as ah, readDaemonState as ai, AGENT_VERSION_SOURCES as aj, readSettingsOutcome as ak, encodeBase64Url as al, writeCredentialsLegacy as am, writeCredentialsDataKey as an, BACKGROUND_TASK_DESCRIPTION_MAX as ao, BACKGROUND_TASKS_MAX as ap, decryptWithDataKey as aq, decryptLegacy as ar, persistSession as as, getAgentCodeDefaults as at, normalizeAgentKey as au, isClaudeOpus55Model as av, supportsClaudeOpus55 as aw, AUTOMATION_SUMMARY_MAX_CHARS as ax, AUTOMATION_CLAIM_MAX_RUNS as ay, AUTOMATION_DEFAULT_LEASE_MS as az, CLIPBOARD_TOOL_DESCRIPTION as b, configuration as c, readPersistedSessions as d, createEnvelope as e, isAutomationRunTerminal as f, delay as g, readCredentialsForConfiguredRelay as h, isValidSessionId as i, createBuiltinTodoClient as j, checkIfDaemonRunningAndCleanupStaleState as k, logger as l, spawnDaemonSession as m, stopDaemonSession as n, CLIPBOARD_MAX_BYTES as o, pushClipboardViaDaemon as p, pushFilePreviewViaDaemon as q, readSettings as r, streamKeyOf as s, setTerminalTitleViaDaemon as t, updateSettings as u, notifyDaemonSessionStarted as v, encodeBase64 as w, BUILTIN_TODO_DISCOVERY as x, reportSessionEditToDaemon as y, ensurePrivateDirectorySync as z };
|
|
@@ -31,7 +31,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
31
|
var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
32
32
|
|
|
33
33
|
var name = "very-happy-cli";
|
|
34
|
-
var version = "0.2.
|
|
34
|
+
var version = "0.2.157";
|
|
35
35
|
var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
|
|
36
36
|
var author = "Kirill Dubovitskiy";
|
|
37
37
|
var contributors = [
|
|
@@ -148,12 +148,12 @@ var dependencies = {
|
|
|
148
148
|
zod: "^4.0.0"
|
|
149
149
|
};
|
|
150
150
|
var optionalDependencies = {
|
|
151
|
-
"very-happy-tools-arm64-darwin": "0.2.
|
|
152
|
-
"very-happy-tools-x64-darwin": "0.2.
|
|
153
|
-
"very-happy-tools-arm64-linux": "0.2.
|
|
154
|
-
"very-happy-tools-x64-linux": "0.2.
|
|
155
|
-
"very-happy-tools-arm64-win32": "0.2.
|
|
156
|
-
"very-happy-tools-x64-win32": "0.2.
|
|
151
|
+
"very-happy-tools-arm64-darwin": "0.2.157",
|
|
152
|
+
"very-happy-tools-x64-darwin": "0.2.157",
|
|
153
|
+
"very-happy-tools-arm64-linux": "0.2.157",
|
|
154
|
+
"very-happy-tools-x64-linux": "0.2.157",
|
|
155
|
+
"very-happy-tools-arm64-win32": "0.2.157",
|
|
156
|
+
"very-happy-tools-x64-win32": "0.2.157"
|
|
157
157
|
};
|
|
158
158
|
var devDependencies = {
|
|
159
159
|
"@slopus/happy-wire": "workspace:*",
|
|
@@ -1591,7 +1591,7 @@ const TeamActionSchema = z.z.discriminatedUnion("type", [
|
|
|
1591
1591
|
z.z.object({ requestId: id$1, action: TeamActionSchema });
|
|
1592
1592
|
z.z.object({ name: id$1, machineId: id$1, requestId: id$1.optional(), launch: TeamLaunchSchema.optional() });
|
|
1593
1593
|
const id = z.z.string().min(1).max(128);
|
|
1594
|
-
const text = z.z.string().min(1).max(32e3);
|
|
1594
|
+
const text$2 = z.z.string().min(1).max(32e3);
|
|
1595
1595
|
const AUTOMATION_NAME_PATTERN = /^[a-z0-9][a-z0-9-_.]{0,63}$/;
|
|
1596
1596
|
const AutomationNameSchema = z.z.string().regex(AUTOMATION_NAME_PATTERN, "automation name must match [a-z0-9][a-z0-9-_.]{0,63}");
|
|
1597
1597
|
const AUTOMATION_MIN_INTERVAL_MS = 6e4;
|
|
@@ -1619,13 +1619,13 @@ const AutomationActionSchema = z.z.discriminatedUnion("kind", [
|
|
|
1619
1619
|
kind: z.z.literal("spawn"),
|
|
1620
1620
|
agent: z.z.string().trim().min(1).max(64),
|
|
1621
1621
|
directory: z.z.string().min(1).max(4096),
|
|
1622
|
-
prompt: text,
|
|
1622
|
+
prompt: text$2,
|
|
1623
1623
|
model: z.z.string().trim().min(1).max(256).nullable().optional(),
|
|
1624
1624
|
permissionMode: z.z.string().trim().min(1).max(64).nullable().optional(),
|
|
1625
1625
|
worktree: z.z.boolean().optional(),
|
|
1626
1626
|
sticky: AutomationStickySchema.optional()
|
|
1627
1627
|
}),
|
|
1628
|
-
z.z.object({ kind: z.z.literal("send"), sessionId: id, prompt: text }),
|
|
1628
|
+
z.z.object({ kind: z.z.literal("send"), sessionId: id, prompt: text$2 }),
|
|
1629
1629
|
z.z.object({
|
|
1630
1630
|
kind: z.z.literal("script"),
|
|
1631
1631
|
command: z.z.array(z.z.string().min(1).max(4096)).min(1).max(256),
|
|
@@ -2189,6 +2189,9 @@ async function notifyDaemonClaudeAuthFailed(sessionId) {
|
|
|
2189
2189
|
async function notifyDaemonTurnEvent(sessionId, event) {
|
|
2190
2190
|
return daemonPost("/session-event", { sessionId, event });
|
|
2191
2191
|
}
|
|
2192
|
+
async function notifyDaemonBackgroundTasks(sessionId, backgroundTasks) {
|
|
2193
|
+
return daemonPost("/session-event", { sessionId, event: "background_tasks", backgroundTasks });
|
|
2194
|
+
}
|
|
2192
2195
|
function reportSessionEditToDaemon(edit) {
|
|
2193
2196
|
void daemonPost("/session-edit", edit).then((result) => {
|
|
2194
2197
|
if (result?.error) logger.debug(`[CONTROL CLIENT] session-edit not recorded: ${result.error}`);
|
|
@@ -2358,6 +2361,154 @@ let backoff = createBackoff({
|
|
|
2358
2361
|
}
|
|
2359
2362
|
});
|
|
2360
2363
|
|
|
2364
|
+
const BACKGROUND_TASKS_MAX = 50;
|
|
2365
|
+
const BACKGROUND_TASK_DESCRIPTION_MAX = 200;
|
|
2366
|
+
const text = (value) => typeof value === "string" && value.length > 0 && !value.includes("\0") ? value : null;
|
|
2367
|
+
const clip = (value) => value.length <= BACKGROUND_TASK_DESCRIPTION_MAX ? value : `${value.slice(0, BACKGROUND_TASK_DESCRIPTION_MAX - 1)}\u2026`;
|
|
2368
|
+
const SETTLED_STATUSES = /* @__PURE__ */ new Set(["completed", "failed", "killed"]);
|
|
2369
|
+
function sameBackgroundTasks(a, b) {
|
|
2370
|
+
if (a.length !== b.length) return false;
|
|
2371
|
+
const byId = new Map(a.map((task) => [task.id, task]));
|
|
2372
|
+
for (const task of b) {
|
|
2373
|
+
const other = byId.get(task.id);
|
|
2374
|
+
if (!other || other.description !== task.description || other.type !== task.type) return false;
|
|
2375
|
+
}
|
|
2376
|
+
return true;
|
|
2377
|
+
}
|
|
2378
|
+
function createBackgroundTaskTracker() {
|
|
2379
|
+
const background = /* @__PURE__ */ new Map();
|
|
2380
|
+
const known = /* @__PURE__ */ new Map();
|
|
2381
|
+
const add = (id, now, meta) => {
|
|
2382
|
+
const existing = background.get(id);
|
|
2383
|
+
const seen = known.get(id);
|
|
2384
|
+
background.set(id, {
|
|
2385
|
+
id,
|
|
2386
|
+
type: meta?.type ?? existing?.type ?? seen?.type ?? "unknown",
|
|
2387
|
+
description: clip(meta?.description ?? existing?.description ?? seen?.description ?? ""),
|
|
2388
|
+
startedAt: existing?.startedAt ?? now
|
|
2389
|
+
});
|
|
2390
|
+
if (background.size > BACKGROUND_TASKS_MAX) background.delete(background.keys().next().value);
|
|
2391
|
+
};
|
|
2392
|
+
function observe(message, now = Date.now()) {
|
|
2393
|
+
const m = message;
|
|
2394
|
+
if (m.type === "system") {
|
|
2395
|
+
if (m.subtype === "background_tasks_changed" && Array.isArray(m.tasks)) {
|
|
2396
|
+
const next = /* @__PURE__ */ new Set();
|
|
2397
|
+
for (const task of m.tasks) {
|
|
2398
|
+
const id2 = text(task?.task_id);
|
|
2399
|
+
if (!id2 || task.ambient === true) continue;
|
|
2400
|
+
next.add(id2);
|
|
2401
|
+
add(id2, now, { type: text(task.task_type) ?? void 0, description: text(task.description) ?? void 0 });
|
|
2402
|
+
}
|
|
2403
|
+
for (const id2 of [...background.keys()]) if (!next.has(id2)) background.delete(id2);
|
|
2404
|
+
return;
|
|
2405
|
+
}
|
|
2406
|
+
const id = text(m.task_id);
|
|
2407
|
+
if (!id) return;
|
|
2408
|
+
if (m.subtype === "task_started") {
|
|
2409
|
+
if (m.ambient === true || m.skip_transcript === true) return;
|
|
2410
|
+
const meta = { id, type: text(m.task_type) ?? "unknown", description: clip(text(m.description) ?? ""), toolUseId: text(m.tool_use_id) };
|
|
2411
|
+
known.set(id, meta);
|
|
2412
|
+
if (known.size > BACKGROUND_TASKS_MAX * 4) known.delete(known.keys().next().value);
|
|
2413
|
+
if (m.is_backgrounded === true) add(id, now, meta);
|
|
2414
|
+
return;
|
|
2415
|
+
}
|
|
2416
|
+
if (m.subtype === "task_updated" && m.patch && typeof m.patch === "object") {
|
|
2417
|
+
if (SETTLED_STATUSES.has(String(m.patch.status))) {
|
|
2418
|
+
background.delete(id);
|
|
2419
|
+
return;
|
|
2420
|
+
}
|
|
2421
|
+
if (m.patch.is_backgrounded === true) add(id, now, { description: text(m.patch.description) ?? void 0 });
|
|
2422
|
+
return;
|
|
2423
|
+
}
|
|
2424
|
+
if (m.subtype === "task_notification") {
|
|
2425
|
+
background.delete(id);
|
|
2426
|
+
return;
|
|
2427
|
+
}
|
|
2428
|
+
return;
|
|
2429
|
+
}
|
|
2430
|
+
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)) {
|
|
2431
|
+
for (const block of m.message.content) {
|
|
2432
|
+
const toolUseId = block?.type === "tool_result" ? text(block.tool_use_id) : null;
|
|
2433
|
+
if (!toolUseId) continue;
|
|
2434
|
+
for (const seen of known.values()) if (seen.toolUseId === toolUseId) add(seen.id, now, seen);
|
|
2435
|
+
}
|
|
2436
|
+
}
|
|
2437
|
+
}
|
|
2438
|
+
function reset() {
|
|
2439
|
+
background.clear();
|
|
2440
|
+
known.clear();
|
|
2441
|
+
}
|
|
2442
|
+
function list() {
|
|
2443
|
+
return [...background.values()].sort((a, b) => a.startedAt - b.startedAt).map((task) => ({ ...task }));
|
|
2444
|
+
}
|
|
2445
|
+
return { observe, reset, list };
|
|
2446
|
+
}
|
|
2447
|
+
|
|
2448
|
+
const BACKGROUND_TASKS_LEASE_MS = 6e4;
|
|
2449
|
+
const BACKGROUND_TASKS_TTL_MS = 15e4;
|
|
2450
|
+
const EMPTY_BACKGROUND_TASKS = Object.freeze({ count: 0, tasks: [] });
|
|
2451
|
+
function backgroundTasksReport(stored, now, options = {}) {
|
|
2452
|
+
const tasks = Array.isArray(stored?.tasks) ? stored.tasks.filter((task) => task && typeof task.id === "string") : [];
|
|
2453
|
+
const reportedAt = typeof stored?.updatedAt === "number" ? stored.updatedAt : void 0;
|
|
2454
|
+
if (tasks.length === 0) return reportedAt === void 0 ? { ...EMPTY_BACKGROUND_TASKS, tasks: [] } : { count: 0, tasks: [], reportedAt };
|
|
2455
|
+
const fresh = options.active !== false && reportedAt !== void 0 && now - reportedAt <= (options.ttlMs ?? BACKGROUND_TASKS_TTL_MS);
|
|
2456
|
+
if (!fresh) return { count: 0, tasks: [], ...reportedAt !== void 0 ? { reportedAt } : {}, stale: true };
|
|
2457
|
+
return { count: tasks.length, tasks: tasks.map((task) => ({ ...task })), reportedAt };
|
|
2458
|
+
}
|
|
2459
|
+
class BackgroundTaskReporter {
|
|
2460
|
+
constructor(publish, leaseMs = BACKGROUND_TASKS_LEASE_MS) {
|
|
2461
|
+
this.publish = publish;
|
|
2462
|
+
this.leaseMs = leaseMs;
|
|
2463
|
+
}
|
|
2464
|
+
last = [];
|
|
2465
|
+
lastPublishedAt = 0;
|
|
2466
|
+
/** Called on every keepAlive tick with the current set; publishes only on an edge or a due renewal. */
|
|
2467
|
+
observe(tasks, now = Date.now()) {
|
|
2468
|
+
const changed = !sameBackgroundTasks(this.last, tasks);
|
|
2469
|
+
const due = tasks.length > 0 && now - this.lastPublishedAt >= this.leaseMs;
|
|
2470
|
+
if (!changed && !due) return false;
|
|
2471
|
+
this.last = tasks.map((task) => ({ ...task }));
|
|
2472
|
+
this.lastPublishedAt = now;
|
|
2473
|
+
this.publish(this.last, now);
|
|
2474
|
+
return true;
|
|
2475
|
+
}
|
|
2476
|
+
current() {
|
|
2477
|
+
return this.last;
|
|
2478
|
+
}
|
|
2479
|
+
}
|
|
2480
|
+
class BackgroundTaskTracker {
|
|
2481
|
+
constructor(ttlMs = BACKGROUND_TASKS_TTL_MS) {
|
|
2482
|
+
this.ttlMs = ttlMs;
|
|
2483
|
+
}
|
|
2484
|
+
sets = /* @__PURE__ */ new Map();
|
|
2485
|
+
apply(sessionId, tasks, now = Date.now()) {
|
|
2486
|
+
if (tasks.length === 0) this.sets.delete(sessionId);
|
|
2487
|
+
else this.sets.set(sessionId, { at: now, tasks: tasks.map((task) => ({ ...task })) });
|
|
2488
|
+
}
|
|
2489
|
+
/** The wrapper is gone: whatever it reported no longer holds. */
|
|
2490
|
+
forget(sessionId) {
|
|
2491
|
+
this.sets.delete(sessionId);
|
|
2492
|
+
}
|
|
2493
|
+
report(sessionId, now = Date.now()) {
|
|
2494
|
+
const entry = this.sets.get(sessionId);
|
|
2495
|
+
if (!entry) return { ...EMPTY_BACKGROUND_TASKS, tasks: [] };
|
|
2496
|
+
const out = backgroundTasksReport({ updatedAt: entry.at, tasks: entry.tasks }, now, { ttlMs: this.ttlMs });
|
|
2497
|
+
if (out.stale) this.sets.delete(sessionId);
|
|
2498
|
+
return out;
|
|
2499
|
+
}
|
|
2500
|
+
count(sessionId, now = Date.now()) {
|
|
2501
|
+
return this.report(sessionId, now).count;
|
|
2502
|
+
}
|
|
2503
|
+
/** Sessions whose published set is still inside the TTL. */
|
|
2504
|
+
activeSessions(now = Date.now()) {
|
|
2505
|
+
return [...this.sets.keys()].filter((id) => this.count(id, now) > 0);
|
|
2506
|
+
}
|
|
2507
|
+
hasAny(now = Date.now()) {
|
|
2508
|
+
return this.activeSessions(now).length > 0;
|
|
2509
|
+
}
|
|
2510
|
+
}
|
|
2511
|
+
|
|
2361
2512
|
const CLIPBOARD_MAX_BYTES = 256 * 1024;
|
|
2362
2513
|
const CLIPBOARD_HISTORY_MAX_BYTES = 32 * 1024;
|
|
2363
2514
|
const CLIPBOARD_TOOL_NAME = "copy_to_clipboard";
|
|
@@ -2403,8 +2554,12 @@ exports.AutomationActionSchema = AutomationActionSchema;
|
|
|
2403
2554
|
exports.AutomationConcurrencySchema = AutomationConcurrencySchema;
|
|
2404
2555
|
exports.AutomationNameSchema = AutomationNameSchema;
|
|
2405
2556
|
exports.AutomationTriggerSchema = AutomationTriggerSchema;
|
|
2557
|
+
exports.BACKGROUND_TASKS_MAX = BACKGROUND_TASKS_MAX;
|
|
2558
|
+
exports.BACKGROUND_TASK_DESCRIPTION_MAX = BACKGROUND_TASK_DESCRIPTION_MAX;
|
|
2406
2559
|
exports.BUILTIN_TODO_DISCOVERY = BUILTIN_TODO_DISCOVERY;
|
|
2407
2560
|
exports.BUILTIN_TODO_SKILL = BUILTIN_TODO_SKILL;
|
|
2561
|
+
exports.BackgroundTaskReporter = BackgroundTaskReporter;
|
|
2562
|
+
exports.BackgroundTaskTracker = BackgroundTaskTracker;
|
|
2408
2563
|
exports.CLIPBOARD_MAX_BYTES = CLIPBOARD_MAX_BYTES;
|
|
2409
2564
|
exports.CLIPBOARD_TOOL_DESCRIPTION = CLIPBOARD_TOOL_DESCRIPTION;
|
|
2410
2565
|
exports.CLIPBOARD_TOOL_NAME = CLIPBOARD_TOOL_NAME;
|
|
@@ -2416,12 +2571,14 @@ exports.ReleaseDrainNoticeSchema = ReleaseDrainNoticeSchema;
|
|
|
2416
2571
|
exports.STREAM_DELTA_MAX_CHARS = STREAM_DELTA_MAX_CHARS;
|
|
2417
2572
|
exports.SandboxConfigSchema = SandboxConfigSchema;
|
|
2418
2573
|
exports.acquireDaemonLock = acquireDaemonLock;
|
|
2574
|
+
exports.backgroundTasksReport = backgroundTasksReport;
|
|
2419
2575
|
exports.backoff = backoff;
|
|
2420
2576
|
exports.checkIfDaemonRunningAndCleanupStaleState = checkIfDaemonRunningAndCleanupStaleState;
|
|
2421
2577
|
exports.cleanupDaemonState = cleanupDaemonState;
|
|
2422
2578
|
exports.clearCredentials = clearCredentials;
|
|
2423
2579
|
exports.clearMachineId = clearMachineId;
|
|
2424
2580
|
exports.configuration = configuration;
|
|
2581
|
+
exports.createBackgroundTaskTracker = createBackgroundTaskTracker;
|
|
2425
2582
|
exports.createBuiltinTodoClient = createBuiltinTodoClient;
|
|
2426
2583
|
exports.createEnvelope = createEnvelope;
|
|
2427
2584
|
exports.credentialRelayProblem = credentialRelayProblem;
|
|
@@ -2455,6 +2612,7 @@ exports.listDaemonSessions = listDaemonSessions;
|
|
|
2455
2612
|
exports.logger = logger;
|
|
2456
2613
|
exports.normalizeAgentKey = normalizeAgentKey;
|
|
2457
2614
|
exports.normalizeHttpEndpoint = normalizeHttpEndpoint;
|
|
2615
|
+
exports.notifyDaemonBackgroundTasks = notifyDaemonBackgroundTasks;
|
|
2458
2616
|
exports.notifyDaemonClaudeAuthFailed = notifyDaemonClaudeAuthFailed;
|
|
2459
2617
|
exports.notifyDaemonSessionEvent = notifyDaemonSessionEvent;
|
|
2460
2618
|
exports.notifyDaemonSessionStarted = notifyDaemonSessionStarted;
|
|
@@ -2478,6 +2636,7 @@ exports.redactLogValue = redactLogValue;
|
|
|
2478
2636
|
exports.releaseDaemonLock = releaseDaemonLock;
|
|
2479
2637
|
exports.reportSessionEditToDaemon = reportSessionEditToDaemon;
|
|
2480
2638
|
exports.resumeDaemonSession = resumeDaemonSession;
|
|
2639
|
+
exports.sameBackgroundTasks = sameBackgroundTasks;
|
|
2481
2640
|
exports.setTerminalTitleViaDaemon = setTerminalTitleViaDaemon;
|
|
2482
2641
|
exports.spawnDaemonSession = spawnDaemonSession;
|
|
2483
2642
|
exports.stopDaemon = stopDaemon;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r as registerTeamsTools, P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION } from './agentGuidance-
|
|
1
|
+
import { r as registerTeamsTools, P as PREVIEW_TOOL_NAME, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION } from './agentGuidance-CU6YD_Ms.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 { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, p as pushClipboardViaDaemon, o as CLIPBOARD_MAX_BYTES, q as pushFilePreviewViaDaemon, t as setTerminalTitleViaDaemon } from './limits-
|
|
6
|
-
import { e as checkPreviewPath, f as registerAssistantSessionTools, g as suggestTitleForPrompt } from './index-
|
|
5
|
+
import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, p as pushClipboardViaDaemon, o as CLIPBOARD_MAX_BYTES, q as pushFilePreviewViaDaemon, t as setTerminalTitleViaDaemon } from './limits-A2c-3M-_.mjs';
|
|
6
|
+
import { e as checkPreviewPath, f as registerAssistantSessionTools, g as suggestTitleForPrompt } from './index-BYU1e81k.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-
|
|
14
|
+
import './types-BrGJ7PJz.mjs';
|
|
15
15
|
import 'node:fs';
|
|
16
16
|
import 'node:path';
|
|
17
17
|
import { b as TerminalTitleSuggestRequestSchema } from './terminalTitleSuggest-DKgX3osW.mjs';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var agentGuidance = require('./agentGuidance-
|
|
3
|
+
var agentGuidance = require('./agentGuidance-Db76O1kw.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 persistence = require('./limits-
|
|
8
|
-
var index = require('./index-
|
|
7
|
+
var persistence = require('./limits-CyuIt-Vl.cjs');
|
|
8
|
+
var index = require('./index-C9QzZsUQ.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-
|
|
16
|
+
require('./types-B0sSi6eM.cjs');
|
|
17
17
|
require('node:fs');
|
|
18
18
|
require('node:path');
|
|
19
19
|
var terminalTitleSuggest = require('./terminalTitleSuggest-Dji8I0Jy.cjs');
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var promises = require('node:fs/promises');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var persistence = require('./limits-
|
|
7
|
-
var index = require('./index-
|
|
6
|
+
var persistence = require('./limits-CyuIt-Vl.cjs');
|
|
7
|
+
var index = require('./index-C9QzZsUQ.cjs');
|
|
8
8
|
|
|
9
9
|
async function publish(path, content, mode) {
|
|
10
10
|
const temporary = `${path}.${node_crypto.randomUUID()}.new`;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { mkdir, chmod, writeFile, rename } from 'node:fs/promises';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { c as configuration } from './limits-
|
|
5
|
-
import { P as PI_TEAMS_EXTENSION } from './index-
|
|
4
|
+
import { c as configuration } from './limits-A2c-3M-_.mjs';
|
|
5
|
+
import { P as PI_TEAMS_EXTENSION } from './index-BYU1e81k.mjs';
|
|
6
6
|
|
|
7
7
|
async function publish(path, content, mode) {
|
|
8
8
|
const temporary = `${path}.${randomUUID()}.new`;
|
|
@@ -5,21 +5,21 @@ var node_crypto = require('node:crypto');
|
|
|
5
5
|
var node_http = require('node:http');
|
|
6
6
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
7
7
|
var streamableHttp_js = require('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
8
|
-
var piRuntime = require('./piRuntime-
|
|
9
|
-
var mcp = require('./mcp-
|
|
10
|
-
require('./agentGuidance-
|
|
8
|
+
var piRuntime = require('./piRuntime-CJjA26oD.cjs');
|
|
9
|
+
var mcp = require('./mcp-CXkvnztT.cjs');
|
|
10
|
+
require('./agentGuidance-Db76O1kw.cjs');
|
|
11
11
|
require('node:fs/promises');
|
|
12
12
|
require('node:os');
|
|
13
13
|
require('zod');
|
|
14
|
-
require('./limits-
|
|
14
|
+
require('./limits-CyuIt-Vl.cjs');
|
|
15
15
|
require('axios');
|
|
16
16
|
require('tweetnacl');
|
|
17
17
|
require('socket.io-client');
|
|
18
|
-
require('./types-
|
|
18
|
+
require('./types-B0sSi6eM.cjs');
|
|
19
19
|
require('node:fs');
|
|
20
20
|
require('node:path');
|
|
21
21
|
var terminalToolContext = require('./terminalToolContext-DoV9Gs7K.cjs');
|
|
22
|
-
require('./index-
|
|
22
|
+
require('./index-C9QzZsUQ.cjs');
|
|
23
23
|
require('chalk');
|
|
24
24
|
require('cross-spawn');
|
|
25
25
|
require('node:readline');
|
|
@@ -3,21 +3,21 @@ import { randomUUID } from 'node:crypto';
|
|
|
3
3
|
import { createServer } from 'node:http';
|
|
4
4
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
5
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
6
|
-
import { p as preparePiTeamsRuntime } from './piRuntime-
|
|
7
|
-
import { registerMcpTools, registerTerminalTitleSuggest } from './mcp-
|
|
8
|
-
import './agentGuidance-
|
|
6
|
+
import { p as preparePiTeamsRuntime } from './piRuntime-DdEY2mE9.mjs';
|
|
7
|
+
import { registerMcpTools, registerTerminalTitleSuggest } from './mcp-Bo934Kpy.mjs';
|
|
8
|
+
import './agentGuidance-CU6YD_Ms.mjs';
|
|
9
9
|
import 'node:fs/promises';
|
|
10
10
|
import 'node:os';
|
|
11
11
|
import 'zod';
|
|
12
|
-
import './limits-
|
|
12
|
+
import './limits-A2c-3M-_.mjs';
|
|
13
13
|
import 'axios';
|
|
14
14
|
import 'tweetnacl';
|
|
15
15
|
import 'socket.io-client';
|
|
16
|
-
import './types-
|
|
16
|
+
import './types-BrGJ7PJz.mjs';
|
|
17
17
|
import 'node:fs';
|
|
18
18
|
import 'node:path';
|
|
19
19
|
import { r as resolveMcpTerminalId } from './terminalToolContext-CFeGeaNm.mjs';
|
|
20
|
-
import './index-
|
|
20
|
+
import './index-BYU1e81k.mjs';
|
|
21
21
|
import 'chalk';
|
|
22
22
|
import 'cross-spawn';
|
|
23
23
|
import 'node:readline';
|
|
@@ -2,12 +2,12 @@ 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 { h as connectionState, A as ApiClient, i as errorLogMetadata, j as contentLogMetadata } from './types-
|
|
6
|
-
import { l as logger, r as readSettings, v as notifyDaemonSessionStarted, w as encodeBase64 } from './limits-
|
|
7
|
-
import { I as GEMINI_API_KEY_ENV, J as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, K as BaseReasoningProcessor, h as initialMachineMetadata, j as createSessionMetadata, k as setupOfflineReconnection, M as MessageQueue2, m as hashObject, L as MessageBuffer, N as CHANGE_TITLE_INSTRUCTION, v as registerKillSessionHandler, n as startHappyServer } from './index-
|
|
5
|
+
import { h as connectionState, A as ApiClient, i as errorLogMetadata, j as contentLogMetadata } from './types-BrGJ7PJz.mjs';
|
|
6
|
+
import { l as logger, r as readSettings, v as notifyDaemonSessionStarted, w as encodeBase64 } from './limits-A2c-3M-_.mjs';
|
|
7
|
+
import { I as GEMINI_API_KEY_ENV, J as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, K as BaseReasoningProcessor, h as initialMachineMetadata, j as createSessionMetadata, k as setupOfflineReconnection, M as MessageQueue2, m as hashObject, L as MessageBuffer, N as CHANGE_TITLE_INSTRUCTION, v as registerKillSessionHandler, n as startHappyServer } from './index-BYU1e81k.mjs';
|
|
8
8
|
import { p as projectPath } from './terminalTitleSuggest-DKgX3osW.mjs';
|
|
9
|
-
import { A as AcpBackend } from './AcpBackend-
|
|
10
|
-
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-
|
|
9
|
+
import { A as AcpBackend } from './AcpBackend-Cy18U7yw.mjs';
|
|
10
|
+
import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-aAbhJllb.mjs';
|
|
11
11
|
import 'axios';
|
|
12
12
|
import 'node:events';
|
|
13
13
|
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-
|
|
35
|
+
import './agentGuidance-CU6YD_Ms.mjs';
|
|
36
36
|
import '@anthropic-ai/claude-agent-sdk';
|
|
37
37
|
import 'ps-list';
|
|
38
38
|
import 'tmp';
|