svamp-cli 0.2.346 → 0.2.358
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/bin/skills/artifact/SKILL.md +19 -5
- package/bin/skills/crew/SKILL.md +42 -11
- package/dist/{acpBackend-BZ1MJhQV.mjs → acpBackend-UaBD4zL3.mjs} +3 -0
- package/dist/{agentCommands-B2Nl7Fof.mjs → agentCommands-C_KvvYFp.mjs} +5 -5
- package/dist/{claudeAuth-iAerdaMr.mjs → claudeAuth-DMDvPNhO.mjs} +55 -6
- package/dist/cli.mjs +164 -86
- package/dist/{commands-D69mnkYu.mjs → commands-B19lVZjm.mjs} +10 -3
- package/dist/{commands-BB1Kcyt-.mjs → commands-Bmoy6Rlw.mjs} +34 -4
- package/dist/{commands-CiRCwjkJ.mjs → commands-CFBKkfX8.mjs} +9 -9
- package/dist/{commands-D1pZq3d4.mjs → commands-CcdoQIkb.mjs} +126 -25
- package/dist/{commands-BOpoVBOM.mjs → commands-DH_YQrAP.mjs} +5 -21
- package/dist/{commands-H4PsTGn8.mjs → commands-DRxANaS5.mjs} +65 -19
- package/dist/{commands-C2aODeVc.mjs → commands-nkvTnUJj.mjs} +29 -13
- package/dist/{detectIsolation-CzoDCEnh.mjs → detectIsolation-CrV8IFDv.mjs} +36 -16
- package/dist/{fleet-DM_Q7w69.mjs → fleet-Ca-UjJNL.mjs} +40 -15
- package/dist/friendlyName-B-OEwt0t.mjs +341 -0
- package/dist/{headlessCli-C8HzQvis.mjs → headlessCli-BpTXz6FD.mjs} +24 -16
- package/dist/{hookSettings-DYMTUgVA.mjs → hookSettings-CvvUhwCK.mjs} +294 -55
- package/dist/{friendlyName-1UZcyDhu.mjs → inboxGuard-CDqmIypF.mjs} +32 -347
- package/dist/index.mjs +10 -9
- package/dist/{loopVerify-B47sSjxe.mjs → loopVerify-CxAKJB5a.mjs} +1 -1
- package/dist/{notifyCommands-D-IKIxiq.mjs → notifyCommands-CCUE18Q-.mjs} +1 -1
- package/dist/package-DTTWvJbp.mjs +64 -0
- package/dist/{rpc-Cf0grcru.mjs → rpc-CAlAHQAy.mjs} +8 -3
- package/dist/{rpc-BB6RF4-F.mjs → rpc-CacreLQ8.mjs} +13 -9
- package/dist/{run-ChdsgaSD.mjs → run-Bc81iurl.mjs} +27 -8
- package/dist/{run-DkjwF-zA.mjs → run-DKOND4dO.mjs} +222 -73
- package/dist/{scheduler-BY30ZrB9.mjs → scheduler-IyLWBF8T.mjs} +28 -10
- package/dist/{serveAuth-DbVLRCRR.mjs → serveAuth-4M0vwMyj.mjs} +53 -11
- package/dist/{serveCommands-CUHUiYnZ.mjs → serveCommands-B-Ym_QXc.mjs} +8 -8
- package/dist/{store-Bn0ByYev.mjs → store-D8dok6_d.mjs} +62 -14
- package/package.json +3 -3
- package/dist/package-DtuINqf5.mjs +0 -64
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as inZone, c as cronMatches } from './cron-hHGdb5kU.mjs';
|
|
2
|
-
import { r as resolveProjectRoot } from './store-
|
|
2
|
+
import { r as resolveProjectRoot } from './store-D8dok6_d.mjs';
|
|
3
3
|
import { l as listWorkflows, i as isWorkflowEnabled, w as workflowSchedules } from './store-fi0f-ff1.mjs';
|
|
4
|
-
import { r as runWorkflow } from './run-
|
|
4
|
+
import { r as runWorkflow, e as loadRuns } from './run-DKOND4dO.mjs';
|
|
5
5
|
import 'node:fs';
|
|
6
6
|
import 'node:path';
|
|
7
7
|
import 'node:crypto';
|
|
@@ -15,7 +15,7 @@ import 'path';
|
|
|
15
15
|
import 'url';
|
|
16
16
|
import 'child_process';
|
|
17
17
|
import 'crypto';
|
|
18
|
-
import './hookSettings-
|
|
18
|
+
import './hookSettings-CvvUhwCK.mjs';
|
|
19
19
|
import './types-57J3Re0n.mjs';
|
|
20
20
|
import './securityContext-Cm5UTCuD.mjs';
|
|
21
21
|
import './machineTools-DygM1jXW.mjs';
|
|
@@ -24,16 +24,17 @@ import 'util';
|
|
|
24
24
|
import 'http';
|
|
25
25
|
import 'net';
|
|
26
26
|
import './instance-CeHz5C8v.mjs';
|
|
27
|
-
import './serveAuth-
|
|
27
|
+
import './serveAuth-4M0vwMyj.mjs';
|
|
28
28
|
import 'node:os';
|
|
29
29
|
import './envFlag-COOuJ3AH.mjs';
|
|
30
|
-
import './claudeAuth-
|
|
30
|
+
import './claudeAuth-DMDvPNhO.mjs';
|
|
31
31
|
import './codexProvider-BtxYc5Rj.mjs';
|
|
32
|
-
import './
|
|
32
|
+
import './inboxGuard-CDqmIypF.mjs';
|
|
33
33
|
import 'node:events';
|
|
34
|
+
import './friendlyName-B-OEwt0t.mjs';
|
|
34
35
|
import './hyphaClient-ybivOjZo.mjs';
|
|
35
36
|
import './sharingNotificationSync-qGIQ-3yf.mjs';
|
|
36
|
-
import './acpBackend-
|
|
37
|
+
import './acpBackend-UaBD4zL3.mjs';
|
|
37
38
|
import '@agentclientprotocol/sdk';
|
|
38
39
|
import './DefaultTransport-vfp78fug.mjs';
|
|
39
40
|
import './wrapCommand-CdNawSaa.mjs';
|
|
@@ -46,11 +47,11 @@ import './GeminiTransport-3OkhtFRO.mjs';
|
|
|
46
47
|
import './KimiTransport-D8n009Tr.mjs';
|
|
47
48
|
import './kimiProvider-DbxODebR.mjs';
|
|
48
49
|
import './kimiSetup-NGsoYB5h.mjs';
|
|
49
|
-
import './detectIsolation-
|
|
50
|
+
import './detectIsolation-CrV8IFDv.mjs';
|
|
50
51
|
import 'node:fs/promises';
|
|
51
52
|
import './pinnedNono-5ZHb6328.mjs';
|
|
52
53
|
import './bootStatus-DqtNgJch.mjs';
|
|
53
|
-
import './loopVerify-
|
|
54
|
+
import './loopVerify-CxAKJB5a.mjs';
|
|
54
55
|
import './api-BHjyC0Ph.mjs';
|
|
55
56
|
|
|
56
57
|
function cronMatchesSafe(expr, date) {
|
|
@@ -60,6 +61,18 @@ function cronMatchesSafe(expr, date) {
|
|
|
60
61
|
return false;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
64
|
+
function alreadyFiredInMinute(root, name, minute) {
|
|
65
|
+
const boundary = Math.floor(minute.getTime() / 6e4);
|
|
66
|
+
try {
|
|
67
|
+
return loadRuns(root, name).some((r) => {
|
|
68
|
+
if (r.trigger !== "schedule") return false;
|
|
69
|
+
const started = Date.parse(String(r.startedAt || ""));
|
|
70
|
+
return Number.isFinite(started) && Math.floor(started / 6e4) === boundary;
|
|
71
|
+
});
|
|
72
|
+
} catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
63
76
|
class WorkflowScheduler {
|
|
64
77
|
constructor(deps) {
|
|
65
78
|
this.deps = deps;
|
|
@@ -133,7 +146,12 @@ class WorkflowScheduler {
|
|
|
133
146
|
if (!isWorkflowEnabled(wf)) continue;
|
|
134
147
|
const schedules = workflowSchedules(wf);
|
|
135
148
|
if (!schedules.length) continue;
|
|
136
|
-
|
|
149
|
+
const matched = minutes.find((m) => schedules.some((s) => cronMatchesSafe(s.cron, inZone(m, s.tz))));
|
|
150
|
+
if (matched) {
|
|
151
|
+
if (alreadyFiredInMinute(root, wf.name, matched)) {
|
|
152
|
+
this.deps.log?.(`[workflow] schedule skipped "${wf.name}" in ${root} \u2014 already fired this minute (persisted run history)`);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
137
155
|
this.fire(root, wf);
|
|
138
156
|
fired.push(wf.name);
|
|
139
157
|
}
|
|
@@ -43,6 +43,8 @@ const DEFAULT_CACHE_MAX_SIZE = 1e3;
|
|
|
43
43
|
function jsStringLiteral(value) {
|
|
44
44
|
return JSON.stringify(value).replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
45
45
|
}
|
|
46
|
+
const DEFAULT_NEGATIVE_CACHE_TTL_MS = 3e4;
|
|
47
|
+
const DEFAULT_NEGATIVE_CACHE_MAX_SIZE = 5e3;
|
|
46
48
|
class TokenCache {
|
|
47
49
|
cache = /* @__PURE__ */ new Map();
|
|
48
50
|
ttlMs;
|
|
@@ -78,6 +80,39 @@ class TokenCache {
|
|
|
78
80
|
this.cache.clear();
|
|
79
81
|
}
|
|
80
82
|
}
|
|
83
|
+
class NegativeTokenCache {
|
|
84
|
+
cache = /* @__PURE__ */ new Map();
|
|
85
|
+
// token -> expiresAt
|
|
86
|
+
ttlMs;
|
|
87
|
+
maxSize;
|
|
88
|
+
constructor(ttlMs = DEFAULT_NEGATIVE_CACHE_TTL_MS, maxSize = DEFAULT_NEGATIVE_CACHE_MAX_SIZE) {
|
|
89
|
+
this.ttlMs = ttlMs;
|
|
90
|
+
this.maxSize = maxSize;
|
|
91
|
+
}
|
|
92
|
+
/** True if this token was recently rejected and should NOT be re-verified over the network. */
|
|
93
|
+
has(token) {
|
|
94
|
+
const expiresAt = this.cache.get(token);
|
|
95
|
+
if (expiresAt === void 0) return false;
|
|
96
|
+
if (Date.now() >= expiresAt) {
|
|
97
|
+
this.cache.delete(token);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
add(token) {
|
|
103
|
+
if (this.cache.size >= this.maxSize) {
|
|
104
|
+
const oldest = this.cache.keys().next().value;
|
|
105
|
+
if (oldest) this.cache.delete(oldest);
|
|
106
|
+
}
|
|
107
|
+
this.cache.set(token, Date.now() + this.ttlMs);
|
|
108
|
+
}
|
|
109
|
+
clear() {
|
|
110
|
+
this.cache.clear();
|
|
111
|
+
}
|
|
112
|
+
get size() {
|
|
113
|
+
return this.cache.size;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
81
116
|
function hasCookieToken(req) {
|
|
82
117
|
return !!parseCookies(req.headers.cookie || "")[COOKIE_NAME];
|
|
83
118
|
}
|
|
@@ -144,7 +179,7 @@ function isStructurallyLiveJwt(token) {
|
|
|
144
179
|
return false;
|
|
145
180
|
}
|
|
146
181
|
}
|
|
147
|
-
async function
|
|
182
|
+
async function verifyTokenViaHyphaDetailed(token, hyphaServerUrl) {
|
|
148
183
|
try {
|
|
149
184
|
const baseUrl = hyphaServerUrl.replace(/\/$/, "");
|
|
150
185
|
const url = `${baseUrl}/public/services/ws/parse_token`;
|
|
@@ -157,18 +192,23 @@ async function verifyTokenViaHypha(token, hyphaServerUrl) {
|
|
|
157
192
|
body: JSON.stringify({ token }),
|
|
158
193
|
signal: AbortSignal.timeout(1e4)
|
|
159
194
|
});
|
|
160
|
-
if (!resp.ok)
|
|
195
|
+
if (!resp.ok) {
|
|
196
|
+
if (resp.status >= 500) return { status: "unreachable", reason: `HTTP ${resp.status}` };
|
|
197
|
+
return { status: "rejected" };
|
|
198
|
+
}
|
|
161
199
|
const data = await resp.json();
|
|
162
|
-
if (data?.is_anonymous === true) return
|
|
200
|
+
if (data?.is_anonymous === true) return { status: "rejected" };
|
|
163
201
|
const email = data?.email;
|
|
164
|
-
if (typeof email === "string" && email) return email.toLowerCase();
|
|
165
|
-
return
|
|
166
|
-
} catch {
|
|
167
|
-
return
|
|
202
|
+
if (typeof email === "string" && email) return { status: "ok", email: email.toLowerCase() };
|
|
203
|
+
return { status: "rejected" };
|
|
204
|
+
} catch (e) {
|
|
205
|
+
return { status: "unreachable", reason: e?.name === "TimeoutError" ? "timeout" : String(e?.message || e) };
|
|
168
206
|
}
|
|
169
207
|
}
|
|
170
208
|
class ServeAuth {
|
|
171
209
|
cache;
|
|
210
|
+
negativeCache = new NegativeTokenCache();
|
|
211
|
+
// #1578
|
|
172
212
|
hyphaServerUrl;
|
|
173
213
|
constructor(options) {
|
|
174
214
|
this.hyphaServerUrl = options.hyphaServerUrl.replace(/\/$/, "");
|
|
@@ -185,12 +225,14 @@ class ServeAuth {
|
|
|
185
225
|
if (!token) return null;
|
|
186
226
|
const cached = this.cache.get(token);
|
|
187
227
|
if (cached) return cached.email;
|
|
228
|
+
if (this.negativeCache.has(token)) return null;
|
|
188
229
|
if (!isStructurallyLiveJwt(token)) return null;
|
|
189
|
-
const
|
|
190
|
-
if (
|
|
191
|
-
this.cache.set(token,
|
|
192
|
-
return
|
|
230
|
+
const verified = await verifyTokenViaHyphaDetailed(token, this.hyphaServerUrl);
|
|
231
|
+
if (verified.status === "ok") {
|
|
232
|
+
this.cache.set(token, verified.email);
|
|
233
|
+
return verified.email;
|
|
193
234
|
}
|
|
235
|
+
if (verified.status === "rejected") this.negativeCache.add(token);
|
|
194
236
|
return null;
|
|
195
237
|
}
|
|
196
238
|
/**
|
|
@@ -56,7 +56,7 @@ async function handleServeCommand() {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
async function serveAdd(args, machineId) {
|
|
59
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
59
|
+
const { connectAndGetMachine } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
|
|
60
60
|
const pos = positionalArgs(args);
|
|
61
61
|
const name = pos[0];
|
|
62
62
|
if (!name) {
|
|
@@ -93,7 +93,7 @@ async function serveAdd(args, machineId) {
|
|
|
93
93
|
}
|
|
94
94
|
if (sessionId && result?.url) {
|
|
95
95
|
try {
|
|
96
|
-
const agentCommands = await import('./agentCommands-
|
|
96
|
+
const agentCommands = await import('./agentCommands-C_KvvYFp.mjs');
|
|
97
97
|
if (regenerateUrl) agentCommands.removeSessionLinkByService("serve", name, sessionId);
|
|
98
98
|
agentCommands.autoAddSessionLink(String(result.url), name, void 0, { kind: "serve", name });
|
|
99
99
|
} catch {
|
|
@@ -108,7 +108,7 @@ async function serveAdd(args, machineId) {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
async function serveApply(args, machineId) {
|
|
111
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
111
|
+
const { connectAndGetMachine } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
|
|
112
112
|
const fs = await import('fs');
|
|
113
113
|
const yaml = await import('yaml');
|
|
114
114
|
const file = positionalArgs(args)[0];
|
|
@@ -193,7 +193,7 @@ async function serveApply(args, machineId) {
|
|
|
193
193
|
console.log(`URL: ${result.url}`);
|
|
194
194
|
if (params.sessionId && result?.url) {
|
|
195
195
|
try {
|
|
196
|
-
const { autoAddSessionLink } = await import('./agentCommands-
|
|
196
|
+
const { autoAddSessionLink } = await import('./agentCommands-C_KvvYFp.mjs');
|
|
197
197
|
const prevSession = process.env.SVAMP_SESSION_ID;
|
|
198
198
|
process.env.SVAMP_SESSION_ID = String(params.sessionId);
|
|
199
199
|
try {
|
|
@@ -214,7 +214,7 @@ async function serveApply(args, machineId) {
|
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
async function serveRemove(args, machineId) {
|
|
217
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
217
|
+
const { connectAndGetMachine } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
|
|
218
218
|
const pos = positionalArgs(args);
|
|
219
219
|
const name = pos[0];
|
|
220
220
|
if (!name) {
|
|
@@ -224,7 +224,7 @@ async function serveRemove(args, machineId) {
|
|
|
224
224
|
const { machine, server } = await connectAndGetMachine(machineId);
|
|
225
225
|
try {
|
|
226
226
|
await machine.serveRemove({ name });
|
|
227
|
-
const { removeSessionLinkByService } = await import('./agentCommands-
|
|
227
|
+
const { removeSessionLinkByService } = await import('./agentCommands-C_KvvYFp.mjs');
|
|
228
228
|
removeSessionLinkByService("serve", name);
|
|
229
229
|
console.log(`Mount '${name}' removed.`);
|
|
230
230
|
} catch (err) {
|
|
@@ -236,7 +236,7 @@ async function serveRemove(args, machineId) {
|
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
238
|
async function serveList(args, machineId) {
|
|
239
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
239
|
+
const { connectAndGetMachine } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
|
|
240
240
|
const all = hasFlag(args, "--all", "-a");
|
|
241
241
|
const json = hasFlag(args, "--json");
|
|
242
242
|
const sessionId = getFlag(args, "--session") ?? process.env.SVAMP_SESSION_ID;
|
|
@@ -270,7 +270,7 @@ async function serveList(args, machineId) {
|
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
async function serveInfo(machineId) {
|
|
273
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
273
|
+
const { connectAndGetMachine } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
|
|
274
274
|
const { machine, server } = await connectAndGetMachine(machineId);
|
|
275
275
|
try {
|
|
276
276
|
const info = await machine.serveInfo();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, readFileSync, statSync, mkdirSync, writeFileSync, readdirSync, unlinkSync, renameSync } from 'node:fs';
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import { randomBytes } from 'node:crypto';
|
|
4
|
-
import { execFileSync,
|
|
4
|
+
import { execFileSync, spawnSync, exec } from 'node:child_process';
|
|
5
5
|
import { w as withFileLock } from './fileLock-BMPwCrB6.mjs';
|
|
6
6
|
|
|
7
7
|
function normalizeStatus(s) {
|
|
@@ -21,7 +21,14 @@ const FIELD_ORDER = ["id", "title", "status", "scope", "labels", "verify", "disp
|
|
|
21
21
|
function resolveProjectRoot(start = process.cwd()) {
|
|
22
22
|
let dir = start;
|
|
23
23
|
for (let i = 0; i < 40; i++) {
|
|
24
|
-
if (existsSync(join(dir, ".git"))
|
|
24
|
+
if (existsSync(join(dir, ".git"))) return dir;
|
|
25
|
+
const parent = dirname(dir);
|
|
26
|
+
if (parent === dir) break;
|
|
27
|
+
dir = parent;
|
|
28
|
+
}
|
|
29
|
+
dir = start;
|
|
30
|
+
for (let i = 0; i < 40; i++) {
|
|
31
|
+
if (existsSync(join(dir, ".svamp"))) return dir;
|
|
25
32
|
const parent = dirname(dir);
|
|
26
33
|
if (parent === dir) break;
|
|
27
34
|
dir = parent;
|
|
@@ -114,6 +121,15 @@ function listIssues(projectRoot, opts = {}) {
|
|
|
114
121
|
function isPendingIssue(issue) {
|
|
115
122
|
return issue.status !== "archived" && issue.status !== "paused";
|
|
116
123
|
}
|
|
124
|
+
function applyTriageStatus(projectRoot, id, patch, fail) {
|
|
125
|
+
const current = getIssue(projectRoot, id);
|
|
126
|
+
if (current?.status === "archived") {
|
|
127
|
+
fail(`#${id} is archived (closed). Triage will not reopen it \u2014 use \`svamp issue reopen ${id}\` if that is what you mean.`);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (current?.status === "paused" && current.question) patch.question = null;
|
|
131
|
+
patch.status = "ready";
|
|
132
|
+
}
|
|
117
133
|
function isVisibleTo(issue, session) {
|
|
118
134
|
if (issue.scope === "session") return issue.session === session || issue.owner === session;
|
|
119
135
|
if (issue.owner === session) return true;
|
|
@@ -202,7 +218,12 @@ function withIssueLock(projectRoot, id, fn) {
|
|
|
202
218
|
mkdirSync(issuesDir(projectRoot), { recursive: true });
|
|
203
219
|
} catch {
|
|
204
220
|
}
|
|
205
|
-
return withFileLock(issueLockPath(projectRoot, id), fn, {
|
|
221
|
+
return withFileLock(issueLockPath(projectRoot, id), fn, {
|
|
222
|
+
deadlineMs: ISSUE_LOCK_DEADLINE_MS,
|
|
223
|
+
breakOnDeadOwner: true,
|
|
224
|
+
// #1226: a fail-open here means a concurrent mutation may have been LOST. It was silent.
|
|
225
|
+
onFailOpen: (p) => console.error(`[issue] lock timeout after ${ISSUE_LOCK_DEADLINE_MS}ms \u2014 proceeding UNSYNCHRONIZED, a concurrent update to this issue may be lost: ${p}`)
|
|
226
|
+
});
|
|
206
227
|
}
|
|
207
228
|
function _updateIssueUnlocked(projectRoot, id, patch) {
|
|
208
229
|
const cur = getIssue(projectRoot, id);
|
|
@@ -310,32 +331,59 @@ function searchIssuesInMemory(projectRoot, q) {
|
|
|
310
331
|
const ql = q.toLowerCase();
|
|
311
332
|
return listIssues(projectRoot, { includeArchived: true }).filter((i) => i.title.toLowerCase().includes(ql) || (i.body || "").toLowerCase().includes(ql) || i.labels.some((l) => l.toLowerCase().includes(ql)));
|
|
312
333
|
}
|
|
334
|
+
const VERIFY_GATE_NOT_FOUND_STATUS = 127;
|
|
335
|
+
function isUnrunnableVerifyResult(status, output) {
|
|
336
|
+
if (status === VERIFY_GATE_NOT_FOUND_STATUS) return true;
|
|
337
|
+
return /: (command not found|not found)\s*$/m.test(output);
|
|
338
|
+
}
|
|
313
339
|
function verifyGateCommand(issue) {
|
|
314
340
|
return issue?.verify?.type === "command" ? (issue.verify.text || "").trim() : "";
|
|
315
341
|
}
|
|
316
342
|
const VERIFY_GATE_TIMEOUT_MS = 6e5;
|
|
317
343
|
const VERIFY_GATE_MAX_BUFFER = 64 * 1024 * 1024;
|
|
318
|
-
function
|
|
319
|
-
|
|
320
|
-
|
|
344
|
+
function verifyOutputTail(stdout, stderr) {
|
|
345
|
+
return (String(stdout || "") + String(stderr || "")).split("\n").slice(-15).join("\n").trim();
|
|
346
|
+
}
|
|
347
|
+
function verifyTreeProvenance(projectRoot) {
|
|
348
|
+
try {
|
|
349
|
+
const opts = { cwd: projectRoot, stdio: "pipe", timeout: 5e3 };
|
|
350
|
+
const head = String(execFileSync("git", ["rev-parse", "--short", "HEAD"], opts)).trim();
|
|
351
|
+
if (!head) return null;
|
|
352
|
+
const st = String(execFileSync("git", ["status", "--porcelain"], opts)).trim();
|
|
353
|
+
const dirty = st ? st.split("\n").length : 0;
|
|
354
|
+
return dirty ? `${head} (+${dirty} dirty)` : `${head} (clean)`;
|
|
355
|
+
} catch {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
function verifyGatePass(res) {
|
|
360
|
+
const where = res.tree ? `tree ${res.tree}` : "tree unknown (not a git worktree?)";
|
|
361
|
+
const out = res.output ? `
|
|
362
|
+
${res.output}` : "\n(verify-cmd produced no output)";
|
|
363
|
+
return `\u2713 verify-cmd passed in ${where}
|
|
364
|
+
$ ${res.cmd}${out}`;
|
|
365
|
+
}
|
|
366
|
+
function verifyGateFailure(cmd, stdout, stderr, status) {
|
|
367
|
+
const output = verifyOutputTail(stdout, stderr);
|
|
368
|
+
const notRunnable = isUnrunnableVerifyResult(status, output);
|
|
369
|
+
return notRunnable ? { ok: false, cmd, output, notRunnable } : { ok: false, cmd, output };
|
|
321
370
|
}
|
|
322
371
|
function checkVerifyCommand(projectRoot, issue) {
|
|
323
372
|
const cmd = verifyGateCommand(issue);
|
|
324
373
|
if (!cmd) return { ok: true };
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
return
|
|
328
|
-
} catch (e) {
|
|
329
|
-
return verifyGateFailure(cmd, e?.stdout, e?.stderr);
|
|
374
|
+
const r = spawnSync(cmd, { cwd: projectRoot, shell: true, encoding: "utf8", timeout: VERIFY_GATE_TIMEOUT_MS, maxBuffer: VERIFY_GATE_MAX_BUFFER });
|
|
375
|
+
if (r.error || r.status !== 0) {
|
|
376
|
+
return verifyGateFailure(cmd, r.stdout, r.stderr, r.status ?? r.error?.code);
|
|
330
377
|
}
|
|
378
|
+
return { ok: true, cmd, output: verifyOutputTail(r.stdout, r.stderr), tree: verifyTreeProvenance(projectRoot) ?? void 0 };
|
|
331
379
|
}
|
|
332
380
|
function checkVerifyCommandAsync(projectRoot, issue) {
|
|
333
381
|
const cmd = verifyGateCommand(issue);
|
|
334
382
|
if (!cmd) return Promise.resolve({ ok: true });
|
|
335
383
|
return new Promise((resolve) => {
|
|
336
384
|
exec(cmd, { cwd: projectRoot, timeout: VERIFY_GATE_TIMEOUT_MS, maxBuffer: VERIFY_GATE_MAX_BUFFER }, (err, stdout, stderr) => {
|
|
337
|
-
if (err) resolve(verifyGateFailure(cmd, stdout, stderr));
|
|
338
|
-
else resolve({ ok: true, cmd });
|
|
385
|
+
if (err) resolve(verifyGateFailure(cmd, stdout, stderr, err?.code));
|
|
386
|
+
else resolve({ ok: true, cmd, output: verifyOutputTail(stdout, stderr), tree: verifyTreeProvenance(projectRoot) ?? void 0 });
|
|
339
387
|
});
|
|
340
388
|
});
|
|
341
389
|
}
|
|
@@ -344,4 +392,4 @@ function summarize(issues) {
|
|
|
344
392
|
return { total: issues.length, ready: by("ready"), in_progress: by("in_progress"), paused: by("paused"), archived: by("archived") };
|
|
345
393
|
}
|
|
346
394
|
|
|
347
|
-
export { ISSUE_SCOPES as I,
|
|
395
|
+
export { ISSUE_SCOPES as I, applyTriageStatus as a, addComment as b, checkVerifyCommandAsync as c, parseStatusArg as d, ISSUE_STATUSES as e, resumeIssue as f, getIssue as g, pauseIssue as h, addIssue as i, isPendingIssue as j, isVisibleTo as k, listIssues as l, checkVerifyCommand as m, summarize as n, resolveCrewIssueOnMerge as o, parseScopeArg as p, routeCrewVerdict as q, resolveProjectRoot as r, searchIssues as s, updateIssue as u, verifyGatePass as v };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svamp-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.358",
|
|
4
4
|
"description": "Svamp CLI \u2014 AI workspace daemon on Hypha Cloud",
|
|
5
5
|
"author": "Amun AI AB",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
|
|
22
22
|
"typecheck": "tsc --noEmit",
|
|
23
|
-
"test": "node test/with-timeout.mjs 420 npx tsx test/test-context-window.mjs && node test/with-timeout.mjs 420 npx tsx test/test-ratelimit-retry.mjs && node test/with-timeout.mjs 420 npx tsx test/test-completed-requests.mjs && node test/with-timeout.mjs 420 npx tsx test/test-reconnect-health.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-fleet-version-parse.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-instance-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-authorize.mjs && node test/with-timeout.mjs 420 npx tsx test/test-normalize-allowed-user.mjs && node test/with-timeout.mjs 420 npx tsx test/test-share-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-update-sharing-normalization.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-sync.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-resolve.mjs && node test/with-timeout.mjs 420 npx tsx test/test-staged-homes-sweep.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cli-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-security-context.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stdin-delivery.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wrap-command.mjs && node test/with-timeout.mjs 420 npx tsx test/test-credential-staging.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-accounts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-force-model.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-oauth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-btw-proxy-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-output-formatters.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-user-events.mjs && node test/with-timeout.mjs 420 npx tsx test/test-migrate-children.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-install.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-setup.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-pairing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-coordinator.mjs && node test/with-timeout.mjs 420 npx tsx test/e2e-outpost-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-auto-topic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-project-info.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-types.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-update-handlers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-scanner.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hypha-client.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-settings.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-daemon-persistence.mjs && node test/with-timeout.mjs 420 npx tsx test/test-detect-isolation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-disable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-session-visibility.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-access-fallback.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-role-map.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-workflow-op-roles.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-codex.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-hypha-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-kimi.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-receive-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-dns-shadowing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-request-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-app-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-kimi-provider.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-backend.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-bridge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-listener-backoff.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-identity-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-console.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-messages.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-send-query.mjs && node test/with-timeout.mjs 420 npx tsx test/test-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-grouping.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-list-directory.mjs && node test/with-timeout.mjs 420 npx tsx test/test-service-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor-lock.mjs && node test/with-timeout.mjs 420 node test/test-supervisor-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-clear-detection.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compact-detect.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-consolidation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-cross-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-close-gate.mjs && node test/with-timeout.mjs 420 npx tsx test/test-loop-verify.mjs && node test/with-timeout.mjs 420 npx tsx test/test-restore-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-rpc.mjs && npx tsx test/test-verify-gate-async.mjs && npx tsx test/test-process-env-redaction.mjs && npx tsx test/test-provisioner-pin-published.mjs && npx tsx test/test-pinned-nono.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-pause.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-scheduler.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cron.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-idle.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-link-subdomain.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-frpc-footprint.mjs && npx tsx test/test-serve-regenerate-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-short-id.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transcript-edit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-edit-history.mjs && node test/with-timeout.mjs 420 npx tsx test/test-friendly-name.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-dispatch.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sandbox-cli.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-manager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-listen-failure.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-files-gateway.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-ws-upgrade.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-static-file-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-stability.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-e2e.mjs --unit-only && node test/with-timeout.mjs 420 npx tsx test/test-frpc-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-orphan-reap.mjs && node test/with-timeout.mjs 420 node test/pinnedClaudeCode.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-version-recheck.mjs && node test/with-timeout.mjs 420 node test/fleet.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-file.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channels-service.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hotreload-seam.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload-live.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-core.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-async-reply.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outbox-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-binding.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-lost-update.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stateless-dispatch-limiter.mjs && node test/with-timeout.mjs 420 npx tsx test/test-shared-session-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-authz-boundaries.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-http.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-upload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-file-access.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-voice.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-headless.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge-closes-issue.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-verdict-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-standalone.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-links.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-loop-pause-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-sync-pagination.mjs && node test/with-timeout.mjs 420 npx tsx test/test-graceful-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-flush-exit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0807-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0814-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-prune.mjs && node test/with-timeout.mjs 420 node test/test-message-count-cache.mjs && node test/with-timeout.mjs 420 node test/test-serve-link-gate.mjs && node test/with-timeout.mjs 420 node test/test-security-context-unenforceable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-id-resolution.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-positional.mjs && npx tsx test/test-issue-status-validation.mjs && npx tsx test/test-process-positional.mjs && npx tsx test/test-crew-root-and-max.mjs && npx tsx test/test-channel-sse-close.mjs && node test/with-timeout.mjs 420 npx tsx test/test-help-flag-never-acts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-with-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-queue-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compaction-backstop.mjs && tsx test/test-launchpad-reconcile.mjs && tsx test/test-file-lock-failopen.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-format.mjs && npx tsx test/test-deploy-manifests.mjs && npx tsx test/test-kimi-default-model-1169.mjs && npx tsx test/test-loop-dormant-runtime-1170.mjs && npx tsx test/test-skill-install-atomic.mjs && node test/test-version-unpublished.mjs && node test/test-pin-holds.mjs && node test/test-hypha-token-renewal.mjs && node test/with-timeout.mjs 420 npx tsx test/test-boot-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stream-log-policy.mjs && node test/with-timeout.mjs 420 npx tsx test/test-count-file-lines.mjs && node test/with-timeout.mjs 420 npx tsx test/test-read-jsonl-lines.mjs && node test/with-timeout.mjs 420 npx tsx test/test-messages-reverse-pager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-spawn-index-scans.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-cwd-containment.mjs && node test/with-timeout.mjs 420 npx tsx test/test-register-listener.mjs && node test/with-timeout.mjs 420 npx tsx test/test-unreachable-machines.mjs",
|
|
23
|
+
"test": "node test/with-timeout.mjs 420 npx tsx test/test-context-window.mjs && node test/with-timeout.mjs 420 npx tsx test/test-ratelimit-retry.mjs && node test/with-timeout.mjs 420 npx tsx test/test-completed-requests.mjs && node test/with-timeout.mjs 420 npx tsx test/test-reconnect-health.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-fleet-version-parse.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-instance-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-authorize.mjs && node test/with-timeout.mjs 420 npx tsx test/test-normalize-allowed-user.mjs && node test/with-timeout.mjs 420 npx tsx test/test-share-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-update-sharing-normalization.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-sync.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-resolve.mjs && node test/with-timeout.mjs 420 npx tsx test/test-staged-homes-sweep.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cli-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-security-context.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stdin-delivery.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wrap-command.mjs && node test/with-timeout.mjs 420 npx tsx test/test-credential-staging.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-accounts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-force-model.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-oauth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-btw-proxy-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-output-formatters.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-env-knobs.mjs && node test/with-timeout.mjs 420 npx tsx test/test-user-events.mjs && node test/with-timeout.mjs 420 npx tsx test/test-migrate-children.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-install.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-setup.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-pairing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-coordinator.mjs && node test/with-timeout.mjs 420 npx tsx test/e2e-outpost-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-auto-topic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-project-info.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-types.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-update-handlers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-scanner.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hypha-client.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-settings.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-daemon-persistence.mjs && node test/with-timeout.mjs 420 npx tsx test/test-detect-isolation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-disable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-session-visibility.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-access-fallback.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-role-map.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-workflow-op-roles.mjs && npx tsx test/test-issue-verify-cmd-authorship.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-codex.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-hypha-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-kimi.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-receive-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-dns-shadowing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-request-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-app-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-kimi-provider.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-backend.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-bridge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-listener-backoff.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-identity-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-console.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-messages.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-send-query.mjs && node test/with-timeout.mjs 420 npx tsx test/test-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-grouping.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-list-directory.mjs && node test/with-timeout.mjs 420 npx tsx test/test-service-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor-lock.mjs && node test/with-timeout.mjs 420 node test/test-supervisor-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-clear-detection.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compact-detect.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-consolidation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-store.mjs && npx tsx test/test-agent-permission-handler.mjs && node test/test-frps-auth-plugin-behaviour.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-xml-escaping.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-cross-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-close-gate.mjs && node test/with-timeout.mjs 420 npx tsx test/test-verify-gate-evidence.mjs && node test/with-timeout.mjs 420 npx tsx test/test-loop-verify.mjs && npx tsx test/test-loop-verify-error-guards.mjs && node test/with-timeout.mjs 420 npx tsx test/test-restore-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-rpc.mjs && npx tsx test/test-verify-gate-async.mjs && npx tsx test/test-process-env-redaction.mjs && npx tsx test/test-provisioner-pin-published.mjs && npx tsx test/test-pinned-nono.mjs && npx tsx test/test-nono-install-executability.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-pause.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-scheduler.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cron.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-idle.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-reconcile.mjs && npx tsx test/test-workflow-reconcile-grace.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-link-subdomain.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-frpc-footprint.mjs && npx tsx test/test-serve-regenerate-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-short-id.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transcript-edit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-edit-history.mjs && node test/with-timeout.mjs 420 npx tsx test/test-friendly-name.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-dispatch.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-1615-1630.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sandbox-cli.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-manager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-listen-failure.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-files-gateway.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-ws-upgrade.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-static-file-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-stability.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-e2e.mjs --unit-only && node test/with-timeout.mjs 420 npx tsx test/test-frpc-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-orphan-reap.mjs && node test/with-timeout.mjs 420 node test/pinnedClaudeCode.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-version-recheck.mjs && node test/with-timeout.mjs 420 node test/fleet.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-file.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channels-service.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hotreload-seam.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload-live.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-core.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-async-reply.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outbox-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-binding.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-lost-update.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stateless-dispatch-limiter.mjs && node test/with-timeout.mjs 420 npx tsx test/test-shared-session-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-authz-boundaries.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-http.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-upload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-file-access.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-voice.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-headless.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge-closes-issue.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-verdict-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-standalone.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-links.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-loop-pause-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-resolve-project-root.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-sync-pagination.mjs && node test/with-timeout.mjs 420 npx tsx test/test-graceful-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-flush-exit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0807-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0814-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-prune.mjs && node test/with-timeout.mjs 420 node test/test-message-count-cache.mjs && node test/with-timeout.mjs 420 node test/test-serve-link-gate.mjs && node test/with-timeout.mjs 420 node test/test-security-context-unenforceable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-id-resolution.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-positional.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-pending-tracker.mjs && npx tsx test/test-issue-status-validation.mjs && npx tsx test/test-issue-triage-reopen-guard.mjs && npx tsx test/test-issue-holder-display.mjs && npx tsx test/test-process-positional.mjs && npx tsx test/test-session-send-positional.mjs && npx tsx test/test-crew-root-and-max.mjs && npx tsx test/test-channel-sse-close.mjs && node test/with-timeout.mjs 420 npx tsx test/test-help-flag-never-acts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-with-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-queue-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compaction-backstop.mjs && tsx test/test-launchpad-reconcile.mjs && tsx test/test-file-lock-failopen.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-format.mjs && npx tsx test/test-deploy-manifests.mjs && npx tsx test/test-kimi-default-model-1169.mjs && npx tsx test/test-loop-dormant-runtime-1170.mjs && npx tsx test/test-skill-install-atomic.mjs && node test/test-version-unpublished.mjs && node test/test-pin-holds.mjs && node test/test-hypha-token-renewal.mjs && node test/with-timeout.mjs 420 npx tsx test/test-boot-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stream-log-policy.mjs && node test/with-timeout.mjs 420 npx tsx test/test-count-file-lines.mjs && node test/with-timeout.mjs 420 npx tsx test/test-read-jsonl-lines.mjs && node test/with-timeout.mjs 420 npx tsx test/test-messages-reverse-pager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-spawn-index-scans.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-cwd-containment.mjs && node test/with-timeout.mjs 420 npx tsx test/test-register-listener.mjs && node test/with-timeout.mjs 420 npx tsx test/test-unreachable-machines.mjs",
|
|
24
24
|
"test:hypha": "node --no-warnings test/test-hypha-service.mjs",
|
|
25
25
|
"dev": "tsx src/cli.ts",
|
|
26
26
|
"dev:daemon": "tsx src/cli.ts daemon start-sync",
|
|
27
|
-
"test:e2e": "node --no-warnings test/e2e-session-tests.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/e2e-serve-iframe-login.mjs && npx tsx test/test-archive-preserves-claude-file.mjs && npx tsx test/test-daemon-e2e.mjs && npx tsx test/test-hypha-service.mjs && npx tsx test/test-permission-e2e.mjs && npx tsx test/test-serve-e2e.mjs && npx tsx test/test-session-archive-resume.mjs && npx tsx test/test-session-rpc-e2e.mjs && npx tsx test/test-skills-integration.mjs && npx tsx test/test-wm-refresh.mjs && npx tsx test/e2e-session-files-gateway.mjs && npx tsx test/e2e-dns-production-hosts.mjs && npx tsx test/e2e-cluster-manifest-drift.mjs && node test/with-timeout.mjs 600 npx tsx test/test-rev-lock-contention.mjs && npx tsx test/test-embed-headers.mjs && bash tests/test-sandbox-isolation.sh && bash tests/test-credential-staging.sh && bash tests/test-claude-sandbox-e2e.sh",
|
|
27
|
+
"test:e2e": "node --no-warnings test/e2e-session-tests.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/e2e-serve-iframe-login.mjs && npx tsx test/e2e-proxy-account-capacity.mjs && npx tsx test/test-archive-preserves-claude-file.mjs && npx tsx test/test-daemon-e2e.mjs && npx tsx test/test-hypha-service.mjs && npx tsx test/test-permission-e2e.mjs && npx tsx test/test-serve-e2e.mjs && npx tsx test/test-session-archive-resume.mjs && npx tsx test/test-session-rpc-e2e.mjs && npx tsx test/test-skills-integration.mjs && npx tsx test/test-wm-refresh.mjs && npx tsx test/e2e-session-files-gateway.mjs && npx tsx test/e2e-dns-production-hosts.mjs && npx tsx test/e2e-cluster-manifest-drift.mjs && node test/with-timeout.mjs 600 npx tsx test/test-rev-lock-contention.mjs && npx tsx test/test-embed-headers.mjs && bash tests/test-sandbox-isolation.sh && bash tests/test-credential-staging.sh && bash tests/test-claude-sandbox-e2e.sh",
|
|
28
28
|
"test:frpc": "npx tsx test/test-frpc-e2e.mjs",
|
|
29
29
|
"prepublishOnly": "node ../../scripts/bump-cli-version.mjs --check && yarn build && yarn test"
|
|
30
30
|
},
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
var name = "svamp-cli";
|
|
2
|
-
var version = "0.2.346";
|
|
3
|
-
var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
|
|
4
|
-
var author = "Amun AI AB";
|
|
5
|
-
var license = "SEE LICENSE IN LICENSE";
|
|
6
|
-
var type = "module";
|
|
7
|
-
var bin = {
|
|
8
|
-
svamp: "./bin/svamp.mjs"
|
|
9
|
-
};
|
|
10
|
-
var files = [
|
|
11
|
-
"dist",
|
|
12
|
-
"bin"
|
|
13
|
-
];
|
|
14
|
-
var main = "./dist/index.mjs";
|
|
15
|
-
var exports$1 = {
|
|
16
|
-
".": "./dist/index.mjs",
|
|
17
|
-
"./cli": "./dist/cli.mjs"
|
|
18
|
-
};
|
|
19
|
-
var scripts = {
|
|
20
|
-
build: "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
|
|
21
|
-
typecheck: "tsc --noEmit",
|
|
22
|
-
test: "node test/with-timeout.mjs 420 npx tsx test/test-context-window.mjs && node test/with-timeout.mjs 420 npx tsx test/test-ratelimit-retry.mjs && node test/with-timeout.mjs 420 npx tsx test/test-completed-requests.mjs && node test/with-timeout.mjs 420 npx tsx test/test-reconnect-health.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-fleet-version-parse.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-instance-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-authorize.mjs && node test/with-timeout.mjs 420 npx tsx test/test-normalize-allowed-user.mjs && node test/with-timeout.mjs 420 npx tsx test/test-share-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-update-sharing-normalization.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-sync.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-resolve.mjs && node test/with-timeout.mjs 420 npx tsx test/test-staged-homes-sweep.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cli-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-security-context.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stdin-delivery.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wrap-command.mjs && node test/with-timeout.mjs 420 npx tsx test/test-credential-staging.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-accounts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-force-model.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-oauth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-btw-proxy-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-output-formatters.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-user-events.mjs && node test/with-timeout.mjs 420 npx tsx test/test-migrate-children.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-install.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-setup.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-pairing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-coordinator.mjs && node test/with-timeout.mjs 420 npx tsx test/e2e-outpost-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-auto-topic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-project-info.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-types.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-update-handlers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-scanner.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hypha-client.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-settings.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-daemon-persistence.mjs && node test/with-timeout.mjs 420 npx tsx test/test-detect-isolation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-disable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-session-visibility.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-access-fallback.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-role-map.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-workflow-op-roles.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-codex.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-hypha-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-kimi.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-receive-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-dns-shadowing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-request-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-app-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-kimi-provider.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-backend.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-bridge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-listener-backoff.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-identity-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-console.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-messages.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-send-query.mjs && node test/with-timeout.mjs 420 npx tsx test/test-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-grouping.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-list-directory.mjs && node test/with-timeout.mjs 420 npx tsx test/test-service-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor-lock.mjs && node test/with-timeout.mjs 420 node test/test-supervisor-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-clear-detection.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compact-detect.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-consolidation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-cross-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-close-gate.mjs && node test/with-timeout.mjs 420 npx tsx test/test-loop-verify.mjs && node test/with-timeout.mjs 420 npx tsx test/test-restore-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-rpc.mjs && npx tsx test/test-verify-gate-async.mjs && npx tsx test/test-process-env-redaction.mjs && npx tsx test/test-provisioner-pin-published.mjs && npx tsx test/test-pinned-nono.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-pause.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-scheduler.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cron.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-idle.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-link-subdomain.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-frpc-footprint.mjs && npx tsx test/test-serve-regenerate-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-short-id.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transcript-edit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-edit-history.mjs && node test/with-timeout.mjs 420 npx tsx test/test-friendly-name.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-dispatch.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sandbox-cli.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-manager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-listen-failure.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-files-gateway.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-ws-upgrade.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-static-file-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-stability.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-e2e.mjs --unit-only && node test/with-timeout.mjs 420 npx tsx test/test-frpc-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-orphan-reap.mjs && node test/with-timeout.mjs 420 node test/pinnedClaudeCode.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-version-recheck.mjs && node test/with-timeout.mjs 420 node test/fleet.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-file.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channels-service.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hotreload-seam.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload-live.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-core.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-async-reply.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outbox-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-binding.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-lost-update.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stateless-dispatch-limiter.mjs && node test/with-timeout.mjs 420 npx tsx test/test-shared-session-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-authz-boundaries.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-http.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-upload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-file-access.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-voice.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-headless.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge-closes-issue.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-verdict-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-standalone.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-links.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-loop-pause-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-sync-pagination.mjs && node test/with-timeout.mjs 420 npx tsx test/test-graceful-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-flush-exit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0807-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0814-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-prune.mjs && node test/with-timeout.mjs 420 node test/test-message-count-cache.mjs && node test/with-timeout.mjs 420 node test/test-serve-link-gate.mjs && node test/with-timeout.mjs 420 node test/test-security-context-unenforceable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-id-resolution.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-positional.mjs && npx tsx test/test-issue-status-validation.mjs && npx tsx test/test-process-positional.mjs && npx tsx test/test-crew-root-and-max.mjs && npx tsx test/test-channel-sse-close.mjs && node test/with-timeout.mjs 420 npx tsx test/test-help-flag-never-acts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-with-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-queue-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compaction-backstop.mjs && tsx test/test-launchpad-reconcile.mjs && tsx test/test-file-lock-failopen.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-format.mjs && npx tsx test/test-deploy-manifests.mjs && npx tsx test/test-kimi-default-model-1169.mjs && npx tsx test/test-loop-dormant-runtime-1170.mjs && npx tsx test/test-skill-install-atomic.mjs && node test/test-version-unpublished.mjs && node test/test-pin-holds.mjs && node test/test-hypha-token-renewal.mjs && node test/with-timeout.mjs 420 npx tsx test/test-boot-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stream-log-policy.mjs && node test/with-timeout.mjs 420 npx tsx test/test-count-file-lines.mjs && node test/with-timeout.mjs 420 npx tsx test/test-read-jsonl-lines.mjs && node test/with-timeout.mjs 420 npx tsx test/test-messages-reverse-pager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-spawn-index-scans.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-cwd-containment.mjs && node test/with-timeout.mjs 420 npx tsx test/test-register-listener.mjs && node test/with-timeout.mjs 420 npx tsx test/test-unreachable-machines.mjs",
|
|
23
|
-
"test:hypha": "node --no-warnings test/test-hypha-service.mjs",
|
|
24
|
-
dev: "tsx src/cli.ts",
|
|
25
|
-
"dev:daemon": "tsx src/cli.ts daemon start-sync",
|
|
26
|
-
"test:e2e": "node --no-warnings test/e2e-session-tests.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/e2e-serve-iframe-login.mjs && npx tsx test/test-archive-preserves-claude-file.mjs && npx tsx test/test-daemon-e2e.mjs && npx tsx test/test-hypha-service.mjs && npx tsx test/test-permission-e2e.mjs && npx tsx test/test-serve-e2e.mjs && npx tsx test/test-session-archive-resume.mjs && npx tsx test/test-session-rpc-e2e.mjs && npx tsx test/test-skills-integration.mjs && npx tsx test/test-wm-refresh.mjs && npx tsx test/e2e-session-files-gateway.mjs && npx tsx test/e2e-dns-production-hosts.mjs && npx tsx test/e2e-cluster-manifest-drift.mjs && node test/with-timeout.mjs 600 npx tsx test/test-rev-lock-contention.mjs && npx tsx test/test-embed-headers.mjs && bash tests/test-sandbox-isolation.sh && bash tests/test-credential-staging.sh && bash tests/test-claude-sandbox-e2e.sh",
|
|
27
|
-
"test:frpc": "npx tsx test/test-frpc-e2e.mjs",
|
|
28
|
-
prepublishOnly: "node ../../scripts/bump-cli-version.mjs --check && yarn build && yarn test"
|
|
29
|
-
};
|
|
30
|
-
var dependencies = {
|
|
31
|
-
"@agentclientprotocol/sdk": "^0.14.1",
|
|
32
|
-
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
33
|
-
"hypha-rpc": "0.21.46",
|
|
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
|
-
var 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
|
-
var packageManager = "yarn@1.22.22";
|
|
47
|
-
var _package = {
|
|
48
|
-
name: name,
|
|
49
|
-
version: version,
|
|
50
|
-
description: description,
|
|
51
|
-
author: author,
|
|
52
|
-
license: license,
|
|
53
|
-
type: type,
|
|
54
|
-
bin: bin,
|
|
55
|
-
files: files,
|
|
56
|
-
main: main,
|
|
57
|
-
exports: exports$1,
|
|
58
|
-
scripts: scripts,
|
|
59
|
-
dependencies: dependencies,
|
|
60
|
-
devDependencies: devDependencies,
|
|
61
|
-
packageManager: packageManager
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export { author, bin, _package as default, dependencies, description, devDependencies, exports$1 as exports, files, license, main, name, packageManager, scripts, type, version };
|