svamp-cli 0.2.144 → 0.2.146
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/{agentCommands-CcEqWqKV.mjs → agentCommands-OSscKEu_.mjs} +5 -5
- package/dist/{auth-Cn-pDzkt.mjs → auth-DXr8WGEh.mjs} +1 -1
- package/dist/cli.mjs +62 -58
- package/dist/{commands-DujeUMvp.mjs → commands-2-F0PDaF.mjs} +1 -1
- package/dist/{commands-DdQDwlts.mjs → commands-BnfINAHT.mjs} +2 -2
- package/dist/{commands-Fpw-qO_m.mjs → commands-C-g9lywx.mjs} +1 -1
- package/dist/commands-CnTCySqf.mjs +396 -0
- package/dist/{commands-CvG0C0NI.mjs → commands-DAaj-lDd.mjs} +5 -5
- package/dist/{commands-CbVXQCul.mjs → commands-DGdTNagn.mjs} +2 -2
- package/dist/{commands-C5gbnP4S.mjs → commands-Dm4Jn8EO.mjs} +2 -2
- package/dist/{fleet-B8iKiJyy.mjs → fleet-CCHM-ooo.mjs} +1 -1
- package/dist/{frpc-DQZjSc7h.mjs → frpc-Ckp8c1o5.mjs} +1 -1
- package/dist/{headlessCli-Dziw5C0a.mjs → headlessCli-DBt1SifE.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{package-CJz438K-.mjs → package-Bk1uInz9.mjs} +2 -2
- package/dist/{run-B6-d3Gc7.mjs → run-DePAEN5V.mjs} +1 -1
- package/dist/{run-4FVCBRiz.mjs → run-EWIn-Drp.mjs} +80 -9
- package/dist/{serveCommands-BIEWgKB8.mjs → serveCommands-BrctGwlB.mjs} +5 -5
- package/dist/{serveManager-DHTgwal8.mjs → serveManager-BUBFrei1.mjs} +2 -2
- package/dist/{sideband-C9zoh2QP.mjs → sideband-COwBePyZ.mjs} +1 -1
- package/package.json +45 -45
|
@@ -482,6 +482,39 @@ function buildTools(deps, skills) {
|
|
|
482
482
|
return `Started a loop: "${str$1(a?.task).slice(0, 80)}".`;
|
|
483
483
|
}
|
|
484
484
|
},
|
|
485
|
+
{
|
|
486
|
+
name: "set_checklist",
|
|
487
|
+
readOnly: false,
|
|
488
|
+
description: "Create or replace the bound session's checklist (the loop's success criteria) and start the self-verifying loop. Each item is a concrete, checkable requirement. ONLY after the caller confirmed the proposal.",
|
|
489
|
+
parameters: { type: "object", properties: {
|
|
490
|
+
items: { type: "array", description: "The checklist items (success criteria).", items: { type: "object", properties: {
|
|
491
|
+
text: { type: "string", description: "A concrete, checkable requirement." },
|
|
492
|
+
oracle: { type: "string", description: "Optional pass/fail command verifying this item." }
|
|
493
|
+
}, required: ["text"], additionalProperties: false } },
|
|
494
|
+
prompt: { type: "string", description: "Optional overall goal/instruction for the loop." },
|
|
495
|
+
max_iterations: { type: "number", description: "Iteration ceiling (default 20)." }
|
|
496
|
+
}, required: ["items"], additionalProperties: false },
|
|
497
|
+
run: async (a) => {
|
|
498
|
+
const rawItems = Array.isArray(a?.items) ? a.items : [];
|
|
499
|
+
const items = rawItems.map((i) => ({ text: str$1(i?.text), oracle: i?.oracle ? str$1(i.oracle) : void 0 })).filter((i) => i.text.trim());
|
|
500
|
+
if (!items.length) return "No checklist items were provided.";
|
|
501
|
+
const r = await deps.applyChecklist(items, {
|
|
502
|
+
prompt: a?.prompt ? str$1(a.prompt) : void 0,
|
|
503
|
+
maxIterations: typeof a?.max_iterations === "number" ? a.max_iterations : void 0
|
|
504
|
+
});
|
|
505
|
+
return r.ok ? `Set a ${items.length}-item checklist and started the loop.` : `Could not set the checklist: ${r.error || "unknown error"}.`;
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
name: "stop_loop",
|
|
510
|
+
readOnly: false,
|
|
511
|
+
description: "Stop/cancel the running loop in the bound session. ONLY after the caller asked to stop.",
|
|
512
|
+
parameters: { type: "object", properties: {}, additionalProperties: false },
|
|
513
|
+
run: async () => {
|
|
514
|
+
await deps.stopLoop();
|
|
515
|
+
return "Stopped the loop.";
|
|
516
|
+
}
|
|
517
|
+
},
|
|
485
518
|
{
|
|
486
519
|
name: "create_channel",
|
|
487
520
|
readOnly: false,
|
|
@@ -631,11 +664,12 @@ You are WISE Agent, a fast, text-mode companion to the deep coding agent (Claude
|
|
|
631
664
|
- run_bash \u2014 run a shell command on the session's machine (when granted).
|
|
632
665
|
- send_to_session \u2014 hand a clear, reformulated instruction to the deep coding agent (when granted); pass wait=true to block for its reply.
|
|
633
666
|
- create_routine / create_loop / create_channel \u2014 set up a scheduled/triggered routine, a self-verifying loop, or an inbound channel for this session (when granted). ALWAYS propose first and confirm before calling these (see below).
|
|
667
|
+
- set_checklist / stop_loop \u2014 turn the caller's goals into a tracked checklist (the loop's success criteria) and start the self-verifying loop, or stop a running loop (when granted). Each item is one concrete, checkable requirement (optional per-item oracle command). ALWAYS propose the items first and confirm before calling.
|
|
634
668
|
|
|
635
669
|
# Instructions
|
|
636
670
|
- Answer general questions and questions about yourself directly. Use tools only to act on the machine/session.
|
|
637
671
|
- Take the cheap path: read state directly; delegate anything LONG to summarize_session \u2014 keep your own context small.
|
|
638
|
-
- To create a routine, loop, or
|
|
672
|
+
- To create a routine, loop, channel, or checklist: first restate the resolved config (for set_checklist, list the items) in one line and ask the caller to reply "confirm" to proceed. Only call create_routine / create_loop / create_channel / set_checklist / stop_loop after they confirm in a follow-up message. Never create or stop without confirmation.
|
|
639
673
|
- For destructive actions (deleting, stopping, killing), require a verified caller and confirm intent; for safe reads, just do it.
|
|
640
674
|
- If a tool fails or returns nothing useful, say so plainly \u2014 never fabricate a result.
|
|
641
675
|
- Report the outcome in one line.`;
|
|
@@ -1023,6 +1057,28 @@ function buildSessionDeps(rpc, opts = {}) {
|
|
|
1023
1057
|
}
|
|
1024
1058
|
}, ctx);
|
|
1025
1059
|
},
|
|
1060
|
+
async applyChecklist(items, opts2) {
|
|
1061
|
+
const built = (items || []).filter((i) => i?.text && i.text.trim()).map((i, idx) => ({
|
|
1062
|
+
id: `wise-${Date.now().toString(36)}-${idx}`,
|
|
1063
|
+
text: i.text.trim(),
|
|
1064
|
+
status: "todo",
|
|
1065
|
+
disposition: "inline",
|
|
1066
|
+
scope: "session",
|
|
1067
|
+
...i.oracle && i.oracle.trim() ? { verify: { type: "command", text: i.oracle.trim() }, oracle: i.oracle.trim() } : {}
|
|
1068
|
+
}));
|
|
1069
|
+
await rpc.updateConfig({
|
|
1070
|
+
checklist: built,
|
|
1071
|
+
checklistConfig: {
|
|
1072
|
+
...opts2?.prompt ? { prompt: opts2.prompt } : {},
|
|
1073
|
+
maxIterations: opts2?.maxIterations ?? 20,
|
|
1074
|
+
evaluator: true
|
|
1075
|
+
}
|
|
1076
|
+
}, ctx);
|
|
1077
|
+
return { ok: true };
|
|
1078
|
+
},
|
|
1079
|
+
async stopLoop() {
|
|
1080
|
+
await rpc.updateConfig({ loop: null }, ctx);
|
|
1081
|
+
},
|
|
1026
1082
|
async saveChannel(channel) {
|
|
1027
1083
|
return await rpc.saveChannel(channel, ctx);
|
|
1028
1084
|
}
|
|
@@ -2715,7 +2771,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
2715
2771
|
const tunnels = handlers.tunnels;
|
|
2716
2772
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
2717
2773
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
2718
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
2774
|
+
const { FrpcTunnel } = await import('./frpc-Ckp8c1o5.mjs');
|
|
2719
2775
|
const tunnel = new FrpcTunnel({
|
|
2720
2776
|
name: params.name,
|
|
2721
2777
|
ports: params.ports,
|
|
@@ -2921,19 +2977,34 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
2921
2977
|
const base = (process.env.SVAMP_VEXA_API_URL || "").replace(/\/$/, "");
|
|
2922
2978
|
const key = process.env.SVAMP_VEXA_API_KEY || "";
|
|
2923
2979
|
if (!base || !key) return { success: false, error: "Meeting agent not configured: set SVAMP_VEXA_API_URL + SVAMP_VEXA_API_KEY in ~/.svamp/.env, then `svamp daemon restart`." };
|
|
2980
|
+
const WISE_URL = process.env.SVAMP_WISE_CHANNEL_URL || "";
|
|
2981
|
+
const WISE_KEY = process.env.SVAMP_WISE_CHANNEL_KEY || "";
|
|
2982
|
+
const sid = params.sessionId;
|
|
2983
|
+
const target = sid ? `session:${sid}` : "global";
|
|
2984
|
+
const rt = sid ? {
|
|
2985
|
+
target,
|
|
2986
|
+
instructions: `You are WISE, an AI participant in a live meeting, joined on behalf of the user's work session "${sid}". Speak naturally and concisely \u2014 1 to 3 sentences, since replies are heard aloud. For anything about that session's project, files, status, decisions, or tasks, call consult_wise (it reaches that session's WISE agent, which has its skills and can act via the deep agent). Only speak when addressed or asked a question; otherwise stay quiet.`
|
|
2987
|
+
} : {
|
|
2988
|
+
target,
|
|
2989
|
+
instructions: `You are WISE, a helpful AI assistant participating in this live meeting. Speak naturally and concisely \u2014 1 to 3 sentences, since replies are heard aloud. Help the participants and answer questions. Only speak when addressed or asked; otherwise stay quiet.`
|
|
2990
|
+
};
|
|
2991
|
+
if (WISE_URL) {
|
|
2992
|
+
rt.wiseUrl = WISE_URL;
|
|
2993
|
+
rt.wiseKey = WISE_KEY;
|
|
2994
|
+
}
|
|
2924
2995
|
try {
|
|
2925
2996
|
const res = await fetch(`${base}/bots`, {
|
|
2926
2997
|
method: "POST",
|
|
2927
2998
|
headers: { "X-API-Key": key, "Content-Type": "application/json" },
|
|
2928
|
-
body: JSON.stringify({ platform: parsed.platform, native_meeting_id: parsed.nativeId, bot_name: "WISE Agent" })
|
|
2999
|
+
body: JSON.stringify({ platform: parsed.platform, native_meeting_id: parsed.nativeId, bot_name: "WISE Agent", rt })
|
|
2929
3000
|
});
|
|
2930
3001
|
const data = await res.json().catch(() => ({}));
|
|
2931
3002
|
if (!res.ok) return { success: false, error: `meeting-api ${res.status}: ${data?.detail || data?.message || "launch failed"}` };
|
|
2932
|
-
const rec = { meetingUrl: params.meetingUrl, platform: parsed.platform, nativeId: parsed.nativeId, target
|
|
3003
|
+
const rec = { meetingUrl: params.meetingUrl, platform: parsed.platform, nativeId: parsed.nativeId, target, sessionId: params.sessionId, botId: data?.bot_container_id, meetingId: data?.id, startedAt: Date.now() };
|
|
2933
3004
|
activeMeetingAgents.set(params.sessionId || `global:${parsed.nativeId}`, rec);
|
|
2934
3005
|
return { success: true, ...rec, status: data?.status };
|
|
2935
3006
|
} catch (e) {
|
|
2936
|
-
return { success: false, error: e instanceof Error ? e.message :
|
|
3007
|
+
return { success: false, error: `meeting-api unreachable: ${e instanceof Error ? e.message : String(e)}` };
|
|
2937
3008
|
}
|
|
2938
3009
|
},
|
|
2939
3010
|
wiseLeaveMeeting: async (params, context) => {
|
|
@@ -3065,7 +3136,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3065
3136
|
}
|
|
3066
3137
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
3067
3138
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
3068
|
-
const { toolsForRole } = await import('./sideband-
|
|
3139
|
+
const { toolsForRole } = await import('./sideband-COwBePyZ.mjs');
|
|
3069
3140
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
3070
3141
|
return fmt(r2);
|
|
3071
3142
|
}
|
|
@@ -3164,7 +3235,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3164
3235
|
if (r.error || !r.sender) return { error: r.error || "unauthorized" };
|
|
3165
3236
|
const callId = "call_" + Math.random().toString(16).slice(2, 12);
|
|
3166
3237
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
3167
|
-
const { queryCore } = await import('./commands-
|
|
3238
|
+
const { queryCore } = await import('./commands-C-g9lywx.mjs');
|
|
3168
3239
|
const timeout = c.reply?.timeout_sec || 120;
|
|
3169
3240
|
let result;
|
|
3170
3241
|
try {
|
|
@@ -11625,7 +11696,7 @@ async function startDaemon(options) {
|
|
|
11625
11696
|
saveExposedTunnels(list);
|
|
11626
11697
|
}
|
|
11627
11698
|
async function createExposedTunnel(spec) {
|
|
11628
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
11699
|
+
const { FrpcTunnel } = await import('./frpc-Ckp8c1o5.mjs');
|
|
11629
11700
|
const tunnel = new FrpcTunnel({
|
|
11630
11701
|
name: spec.name,
|
|
11631
11702
|
ports: spec.ports,
|
|
@@ -11645,7 +11716,7 @@ async function startDaemon(options) {
|
|
|
11645
11716
|
return tunnel;
|
|
11646
11717
|
}
|
|
11647
11718
|
const tunnelRecreateState = /* @__PURE__ */ new Map();
|
|
11648
|
-
const { ServeManager } = await import('./serveManager-
|
|
11719
|
+
const { ServeManager } = await import('./serveManager-BUBFrei1.mjs');
|
|
11649
11720
|
const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
|
|
11650
11721
|
ensureAutoInstalledSkills(logger).catch(() => {
|
|
11651
11722
|
});
|
|
@@ -54,7 +54,7 @@ async function handleServeCommand() {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
async function serveAdd(args, machineId) {
|
|
57
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
57
|
+
const { connectAndGetMachine } = await import('./commands-C-g9lywx.mjs');
|
|
58
58
|
const pos = positionalArgs(args);
|
|
59
59
|
const name = pos[0];
|
|
60
60
|
if (!name) {
|
|
@@ -93,7 +93,7 @@ async function serveAdd(args, machineId) {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
async function serveApply(args, machineId) {
|
|
96
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
96
|
+
const { connectAndGetMachine } = await import('./commands-C-g9lywx.mjs');
|
|
97
97
|
const fs = await import('fs');
|
|
98
98
|
const yaml = await import('yaml');
|
|
99
99
|
const file = positionalArgs(args)[0];
|
|
@@ -182,7 +182,7 @@ async function serveApply(args, machineId) {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
async function serveRemove(args, machineId) {
|
|
185
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
185
|
+
const { connectAndGetMachine } = await import('./commands-C-g9lywx.mjs');
|
|
186
186
|
const pos = positionalArgs(args);
|
|
187
187
|
const name = pos[0];
|
|
188
188
|
if (!name) {
|
|
@@ -202,7 +202,7 @@ async function serveRemove(args, machineId) {
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
async function serveList(args, machineId) {
|
|
205
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
205
|
+
const { connectAndGetMachine } = await import('./commands-C-g9lywx.mjs');
|
|
206
206
|
const all = hasFlag(args, "--all", "-a");
|
|
207
207
|
const json = hasFlag(args, "--json");
|
|
208
208
|
const sessionId = getFlag(args, "--session");
|
|
@@ -235,7 +235,7 @@ async function serveList(args, machineId) {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
async function serveInfo(machineId) {
|
|
238
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
238
|
+
const { connectAndGetMachine } = await import('./commands-C-g9lywx.mjs');
|
|
239
239
|
const { machine, server } = await connectAndGetMachine(machineId);
|
|
240
240
|
try {
|
|
241
241
|
const info = await machine.serveInfo();
|
|
@@ -4,7 +4,7 @@ import * as fs from 'fs';
|
|
|
4
4
|
import * as http from 'http';
|
|
5
5
|
import * as net from 'net';
|
|
6
6
|
import * as path from 'path';
|
|
7
|
-
import { k as getHyphaServerUrl, S as ServeAuth, l as hasCookieToken } from './run-
|
|
7
|
+
import { k as getHyphaServerUrl, S as ServeAuth, l as hasCookieToken } from './run-EWIn-Drp.mjs';
|
|
8
8
|
import 'os';
|
|
9
9
|
import 'fs/promises';
|
|
10
10
|
import 'url';
|
|
@@ -733,7 +733,7 @@ class ServeManager {
|
|
|
733
733
|
const mount = this.mounts.get(mountName);
|
|
734
734
|
const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
|
|
735
735
|
try {
|
|
736
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
736
|
+
const { FrpcTunnel } = await import('./frpc-Ckp8c1o5.mjs');
|
|
737
737
|
let tunnel;
|
|
738
738
|
tunnel = new FrpcTunnel({
|
|
739
739
|
name: tunnelName,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as READ_ONLY_TOOLS, z as loadMachineContext, A as buildMachineInstructions, B as machineToolsForRole, C as buildMachineTools } from './run-
|
|
1
|
+
import { R as READ_ONLY_TOOLS, z as loadMachineContext, A as buildMachineInstructions, B as machineToolsForRole, C as buildMachineTools } from './run-EWIn-Drp.mjs';
|
|
2
2
|
import 'node:child_process';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
package/package.json
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
2
|
+
"name": "svamp-cli",
|
|
3
|
+
"version": "0.2.146",
|
|
4
|
+
"description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
|
|
5
|
+
"author": "Amun AI AB",
|
|
6
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"svamp": "./bin/svamp.mjs"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"bin"
|
|
14
|
+
],
|
|
15
|
+
"main": "./dist/index.mjs",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": "./dist/index.mjs",
|
|
18
|
+
"./cli": "./dist/cli.mjs"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "rm -rf dist bin/skills && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/loop bin/skills/loop && cp -r ../../skills/crew bin/skills/crew && tsc --noEmit && pkgroll",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-checklist.mjs && npx tsx test/test-checklist-cli.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-routine.mjs && npx tsx test/test-routine-rpc.mjs && npx tsx test/test-checklist-watchdog.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs",
|
|
24
|
+
"test:hypha": "node --no-warnings test/test-hypha-service.mjs",
|
|
25
|
+
"dev": "tsx src/cli.ts",
|
|
26
|
+
"dev:daemon": "tsx src/cli.ts daemon start-sync",
|
|
27
|
+
"test:e2e": "node --no-warnings test/e2e-session-tests.mjs",
|
|
28
|
+
"test:frpc": "npx tsx test/test-frpc-e2e.mjs"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@agentclientprotocol/sdk": "^0.14.1",
|
|
32
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
33
|
+
"hypha-rpc": "0.21.42",
|
|
34
|
+
"node-pty": "1.2.0-beta.11",
|
|
35
|
+
"ws": "^8.18.0",
|
|
36
|
+
"yaml": "^2.8.2",
|
|
37
|
+
"zod": "^3.24.4"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": ">=20",
|
|
41
|
+
"@types/ws": "^8.5.14",
|
|
42
|
+
"pkgroll": "^2.14.2",
|
|
43
|
+
"tsx": "^4.20.6",
|
|
44
|
+
"typescript": "5.9.3"
|
|
45
|
+
},
|
|
46
|
+
"packageManager": "yarn@1.22.22"
|
|
47
47
|
}
|