svamp-cli 0.2.212 → 0.2.214
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/loop/bin/loop-init.mjs +33 -9
- package/bin/skills/loop/test/test-loop-gate.mjs +25 -0
- package/dist/{agentCommands-6DOlD3ZI.mjs → agentCommands-BC9fABs7.mjs} +108 -6
- package/dist/{auth-gNGYGZ7G.mjs → auth-D1LIUSyb.mjs} +1 -1
- package/dist/cli.mjs +91 -61
- package/dist/{commands-D8hT6K1c.mjs → commands-BD6yqylW.mjs} +1 -1
- package/dist/{commands-CFdytQ4x.mjs → commands-BIJbWOUR.mjs} +1 -1
- package/dist/{commands-BRc-vmT-.mjs → commands-Bbabcx0i.mjs} +1 -1
- package/dist/{commands-DkrMDcE8.mjs → commands-CNFQhMZC.mjs} +2 -2
- package/dist/{commands-BV_Lvdcw.mjs → commands-D_uWSMWk.mjs} +2 -2
- package/dist/{commands-Cx04vnRU.mjs → commands-DzL8_8-0.mjs} +5 -5
- package/dist/{commands-Byrt9Pkm.mjs → commands-T0BYzSL-.mjs} +1 -1
- package/dist/{fleet-AYjKZ5bk.mjs → fleet-hBLm9UXl.mjs} +1 -1
- package/dist/{frpc-DB9LM3W2.mjs → frpc-Bq1XjCbs.mjs} +1 -1
- package/dist/{headlessCli-BaLGOdR2.mjs → headlessCli-CYPK6_GG.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{package-DddJZgzf.mjs → package-Dwla0BbE.mjs} +1 -1
- package/dist/{rpc-vTB6EF-H.mjs → rpc-3m_15CZh.mjs} +1 -1
- package/dist/{rpc-cIfa0cp9.mjs → rpc-C6Kn-fjl.mjs} +1 -1
- package/dist/{run-BgyeK9iz.mjs → run-1FV8aRhe.mjs} +1 -1
- package/dist/{run-oNpcRe8f.mjs → run-CBLQHhbE.mjs} +39 -20
- package/dist/{scheduler-CYCRCbMu.mjs → scheduler-CNweB6Ep.mjs} +1 -1
- package/dist/{serveCommands-Wxl7nOsy.mjs → serveCommands-2fChA46a.mjs} +5 -5
- package/dist/{serveManager-C-4fuYoJ.mjs → serveManager-Djnr1_C5.mjs} +2 -2
- package/dist/{sideband-BcfAQlra.mjs → sideband-Bjj0j0Ic.mjs} +1 -1
- package/package.json +1 -1
|
@@ -43,6 +43,12 @@ const criteria = typeof args.criteria === 'string' ? args.criteria : null;
|
|
|
43
43
|
const sessionId = typeof args.session === 'string' ? args.session
|
|
44
44
|
: (typeof process.env.SVAMP_SESSION_ID === 'string' && process.env.SVAMP_SESSION_ID) ? process.env.SVAMP_SESSION_ID
|
|
45
45
|
: null;
|
|
46
|
+
// #0166: hooks-only mode — install the gate scripts + MERGE the hooks into settings.json, but DON'T
|
|
47
|
+
// create a loop (no config/state/LOOP.md/evaluator). Run at SESSION SPAWN so the Stop-gate hook is
|
|
48
|
+
// loaded before any loop exists; the hooks no-op while no loop is active (stop-gate: `!cfg` → allow).
|
|
49
|
+
// This is what makes loop start/stop/config-update SEAMLESS — the daemon never restarts Claude to load
|
|
50
|
+
// the hook. Idempotent + safe to call on every spawn (it does NOT touch an existing loop's state).
|
|
51
|
+
const hooksOnly = args['hooks-only'] === true || args['hooks-only'] === 'true';
|
|
46
52
|
|
|
47
53
|
// Session-scoped loop home so sessions sharing a working dir never collide:
|
|
48
54
|
// <dir>/.svamp/<sessionId>/loop/ (falls back to <dir>/.svamp/loop/ with no session).
|
|
@@ -58,8 +64,11 @@ mkdirSync(join(dir, '.claude', 'agents'), { recursive: true });
|
|
|
58
64
|
// the work tree (state-fp excludes LOOP.md + .svamp/). So a stale {verdict:done, state_fp}
|
|
59
65
|
// left by a finished loop would FALSE-CLOSE a fresh loop at iteration 0 whenever the tree
|
|
60
66
|
// is unchanged between loops. Always clear them so a new loop requires its own fresh verdict.
|
|
61
|
-
|
|
62
|
-
|
|
67
|
+
// #0166: hooks-only NEVER re-arms — it must not disturb an existing loop's verdict/history/state.
|
|
68
|
+
if (!hooksOnly) {
|
|
69
|
+
rmSync(join(loopDir, 'evaluator-verdict.json'), { force: true });
|
|
70
|
+
rmSync(join(loopDir, 'history.jsonl'), { force: true });
|
|
71
|
+
}
|
|
63
72
|
|
|
64
73
|
// 1. Copy hook scripts so the project is self-contained.
|
|
65
74
|
for (const f of ['state-fp.mjs', 'stop-gate.mjs', 'inject-loop.mjs', 'loop-status.mjs', 'precompact.mjs']) {
|
|
@@ -68,6 +77,9 @@ for (const f of ['state-fp.mjs', 'stop-gate.mjs', 'inject-loop.mjs', 'loop-statu
|
|
|
68
77
|
try { chmodSync(dest, 0o755); } catch {}
|
|
69
78
|
}
|
|
70
79
|
|
|
80
|
+
// #0166: steps 2-4 CREATE/refresh the loop — skipped in hooks-only mode (the spawn pre-install only
|
|
81
|
+
// installs the dormant gate). The copy-scripts (1) + hooks (5) below always run.
|
|
82
|
+
if (!hooksOnly) {
|
|
71
83
|
// 2. loop.config.json
|
|
72
84
|
const config = {
|
|
73
85
|
loop_file: loopFile,
|
|
@@ -123,22 +135,34 @@ ${oracle ? `- The oracle passes: \`${oracle}\`` : ''}
|
|
|
123
135
|
- (the agent appends iteration notes here; this is durable memory)
|
|
124
136
|
`);
|
|
125
137
|
}
|
|
138
|
+
} // end if(!hooksOnly): loop creation (config/state/LOOP.md)
|
|
126
139
|
|
|
127
|
-
// 5. .claude/settings.json hooks
|
|
140
|
+
// 5. .claude/settings.json hooks — ALWAYS install/refresh the gate so it's loaded at the next Claude
|
|
141
|
+
// start (pre-installed at spawn via hooks-only, so loop start/stop/config never needs a restart).
|
|
142
|
+
// #0166: MERGE, don't clobber — preserve any user-defined hooks for these events; only replace OUR
|
|
143
|
+
// own prior entry (matched by the loop script name) so re-running can't duplicate it.
|
|
128
144
|
const settingsPath = join(dir, '.claude', 'settings.json');
|
|
129
145
|
let settings = {};
|
|
130
146
|
if (existsSync(settingsPath)) { try { settings = JSON.parse(readFileSync(settingsPath, 'utf8')); } catch {} }
|
|
131
147
|
const node = process.execPath;
|
|
132
148
|
const cmd = (script) => `"${node}" "${join(binDir, script)}"`;
|
|
133
149
|
settings.hooks = settings.hooks || {};
|
|
134
|
-
|
|
135
|
-
settings.hooks
|
|
136
|
-
|
|
137
|
-
|
|
150
|
+
const mergeHook = (event, script) => {
|
|
151
|
+
const existing = Array.isArray(settings.hooks[event]) ? settings.hooks[event] : [];
|
|
152
|
+
// Drop any prior group that points at one of OUR loop scripts (so we refresh, never duplicate),
|
|
153
|
+
// keeping all user-defined groups for this event intact.
|
|
154
|
+
const others = existing.filter((g) => !(Array.isArray(g?.hooks) && g.hooks.some(
|
|
155
|
+
(h) => typeof h?.command === 'string' && /loop[\\/](bin[\\/])?(inject-loop|stop-gate|precompact)\.mjs/.test(h.command))));
|
|
156
|
+
settings.hooks[event] = [...others, { hooks: [{ type: 'command', command: cmd(script) }] }];
|
|
157
|
+
};
|
|
158
|
+
mergeHook('SessionStart', 'inject-loop.mjs');
|
|
159
|
+
mergeHook('UserPromptSubmit', 'inject-loop.mjs');
|
|
160
|
+
mergeHook('Stop', 'stop-gate.mjs');
|
|
161
|
+
mergeHook('PreCompact', 'precompact.mjs');
|
|
138
162
|
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
139
163
|
|
|
140
|
-
// 6. Evaluator agent (materialized) — optional
|
|
141
|
-
if (evaluatorOn) {
|
|
164
|
+
// 6. Evaluator agent (materialized) — optional (skipped in hooks-only: no loop yet)
|
|
165
|
+
if (!hooksOnly && evaluatorOn) {
|
|
142
166
|
const fm = ['---', 'name: loop-evaluator',
|
|
143
167
|
'description: Skeptical independent reviewer that decides if a loop task is genuinely complete.',
|
|
144
168
|
'tools: Read, Bash, Grep, Glob', ...(model ? [`model: ${model}`] : []), '---', ''].join('\n');
|
|
@@ -457,6 +457,31 @@ try {
|
|
|
457
457
|
ok(!r.blocked && readState(d).phase === 'done', 'no qualifying non-urgent unread message → loop completes (no noise)');
|
|
458
458
|
}
|
|
459
459
|
|
|
460
|
+
// ---- Test 27: #0166 hooks-only pre-install — dormant gate, merges (doesn't clobber) user hooks ----
|
|
461
|
+
console.log('Test 27: --hooks-only installs a DORMANT gate + merges user hooks (seamless start/stop)');
|
|
462
|
+
{ const d = mkdtempSync(join(tmpdir(), 'hooksonly-')); dirs.push(d);
|
|
463
|
+
// Pre-existing USER hooks that must survive.
|
|
464
|
+
const sp = join(d, '.claude', 'settings.json');
|
|
465
|
+
execFileSync('bash', ['-lc', `mkdir -p "${join(d, '.claude')}"`]);
|
|
466
|
+
writeFileSync(sp, JSON.stringify({ hooks: {
|
|
467
|
+
Stop: [{ hooks: [{ type: 'command', command: 'echo user-stop' }] }],
|
|
468
|
+
PreToolUse: [{ hooks: [{ type: 'command', command: 'echo user-pretool' }] }],
|
|
469
|
+
} }));
|
|
470
|
+
execFileSync(node, [INIT, d, '--session', SID, '--hooks-only'], { encoding: 'utf8' });
|
|
471
|
+
execFileSync(node, [INIT, d, '--session', SID, '--hooks-only'], { encoding: 'utf8' }); // 2x → no dup
|
|
472
|
+
const s = JSON.parse(readFileSync(sp, 'utf8'));
|
|
473
|
+
const cmds = (ev) => (s.hooks[ev] || []).flatMap((g) => (g.hooks || []).map((h) => h.command));
|
|
474
|
+
ok(cmds('PreToolUse').some((c) => c.includes('user-pretool')), 'user PreToolUse hook preserved');
|
|
475
|
+
ok(cmds('Stop').some((c) => c.includes('user-stop')), 'user Stop hook preserved (merge, not clobber)');
|
|
476
|
+
ok(cmds('Stop').filter((c) => c.includes('stop-gate.mjs')).length === 1, 'gate Stop hook present exactly once (no dup on re-run)');
|
|
477
|
+
ok(!existsSync(join(d, '.svamp', SID, 'loop', 'loop.config.json')), 'hooks-only does NOT create a loop (no config)');
|
|
478
|
+
ok(!existsSync(join(d, '.svamp', SID, 'loop', 'loop-state.json')), 'hooks-only does NOT create loop-state');
|
|
479
|
+
ok(existsSync(join(d, '.svamp', SID, 'loop', 'bin', 'stop-gate.mjs')), 'gate scripts copied');
|
|
480
|
+
// The dormant gate must ALLOW stop (no active loop) — else every session could never end a turn.
|
|
481
|
+
const r = runGate(d);
|
|
482
|
+
ok(!r.blocked, 'dormant gate (no loop) allows the turn to end');
|
|
483
|
+
}
|
|
484
|
+
|
|
460
485
|
console.log(`\n${fail === 0 ? '✅' : '❌'} ${pass} passed, ${fail} failed`);
|
|
461
486
|
process.exit(fail === 0 ? 0 : 1);
|
|
462
487
|
} finally {
|
|
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync } from '
|
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import { requireNotSandboxed } from './sandboxDetect-DNTcbgWD.mjs';
|
|
5
|
-
import { A as shortId } from './run-
|
|
5
|
+
import { A as shortId } from './run-CBLQHhbE.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -96,7 +96,7 @@ async function sessionSetTitle(title) {
|
|
|
96
96
|
}
|
|
97
97
|
async function sessionSetProjectDescription(description) {
|
|
98
98
|
const dir = process.cwd();
|
|
99
|
-
const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-
|
|
99
|
+
const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.a8; });
|
|
100
100
|
const desc = sanitizeDescription(description, 240);
|
|
101
101
|
if (!desc) {
|
|
102
102
|
console.error("Project description is empty.");
|
|
@@ -126,6 +126,108 @@ async function sessionSetLink(url, label) {
|
|
|
126
126
|
writeConfig(configPath, config);
|
|
127
127
|
console.log(`Session link set: "${resolvedLabel}" \u2192 ${url.trim()}`);
|
|
128
128
|
}
|
|
129
|
+
function shortLinkId() {
|
|
130
|
+
let s = "";
|
|
131
|
+
const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
132
|
+
const seed = Date.now() % 1e9 + Math.floor(Math.random() * 1e6);
|
|
133
|
+
let n = seed;
|
|
134
|
+
for (let i = 0; i < 6; i++) {
|
|
135
|
+
s += chars[n % 36];
|
|
136
|
+
n = Math.floor(n / 36) + (i + 1) * 7;
|
|
137
|
+
}
|
|
138
|
+
return s;
|
|
139
|
+
}
|
|
140
|
+
function readSessionLinks(config) {
|
|
141
|
+
if (Array.isArray(config.session_links)) {
|
|
142
|
+
return config.session_links.filter((l) => l && typeof l.url === "string").map((l) => ({
|
|
143
|
+
id: String(l.id || shortLinkId()),
|
|
144
|
+
label: String(l.label || ""),
|
|
145
|
+
url: String(l.url),
|
|
146
|
+
...l.icon ? { icon: String(l.icon) } : {}
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
if (config.session_link && typeof config.session_link.url === "string") {
|
|
150
|
+
return [{ id: "primary", label: String(config.session_link.label || "View"), url: String(config.session_link.url) }];
|
|
151
|
+
}
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
function writeSessionLinks(configPath, config, links) {
|
|
155
|
+
config.session_links = links;
|
|
156
|
+
config.session_link = links[0] ? { url: links[0].url, label: links[0].label } : void 0;
|
|
157
|
+
writeConfig(configPath, config);
|
|
158
|
+
}
|
|
159
|
+
function labelFor(url, label) {
|
|
160
|
+
return label?.trim() || (() => {
|
|
161
|
+
try {
|
|
162
|
+
return new URL(url).hostname.replace(/^www\./, "");
|
|
163
|
+
} catch {
|
|
164
|
+
return "Link";
|
|
165
|
+
}
|
|
166
|
+
})();
|
|
167
|
+
}
|
|
168
|
+
function requireSessionId() {
|
|
169
|
+
const sessionId = process.env.SVAMP_SESSION_ID;
|
|
170
|
+
if (!sessionId) {
|
|
171
|
+
console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
return sessionId;
|
|
175
|
+
}
|
|
176
|
+
async function sessionLinkAdd(url, label, icon) {
|
|
177
|
+
const sessionId = requireSessionId();
|
|
178
|
+
if (!url || !url.trim()) {
|
|
179
|
+
console.error("Usage: svamp session link add <url> [--label L] [--icon I]");
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
const configPath = getConfigPath(sessionId);
|
|
183
|
+
const config = readConfig(configPath);
|
|
184
|
+
const links = readSessionLinks(config);
|
|
185
|
+
const link = { id: shortLinkId(), label: labelFor(url, label), url: url.trim(), ...icon?.trim() ? { icon: icon.trim() } : {} };
|
|
186
|
+
links.push(link);
|
|
187
|
+
writeSessionLinks(configPath, config, links);
|
|
188
|
+
console.log(`Launch Pad: added "${link.label}" \u2192 ${link.url} [${link.id}]`);
|
|
189
|
+
}
|
|
190
|
+
async function sessionLinkList() {
|
|
191
|
+
const sessionId = requireSessionId();
|
|
192
|
+
const links = readSessionLinks(readConfig(getConfigPath(sessionId)));
|
|
193
|
+
if (!links.length) {
|
|
194
|
+
console.log('No session links. Add one: svamp session link add <url> --label "Name"');
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
for (const l of links) console.log(` ${l.icon ? l.icon + " " : ""}${l.label} ${l.url} [${l.id}]`);
|
|
198
|
+
}
|
|
199
|
+
async function sessionLinkUpdate(id, opts) {
|
|
200
|
+
const sessionId = requireSessionId();
|
|
201
|
+
const configPath = getConfigPath(sessionId);
|
|
202
|
+
const config = readConfig(configPath);
|
|
203
|
+
const links = readSessionLinks(config);
|
|
204
|
+
const link = links.find((l) => l.id === id);
|
|
205
|
+
if (!link) {
|
|
206
|
+
console.error(`No link with id "${id}". Run: svamp session link list`);
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
if (opts.url?.trim()) link.url = opts.url.trim();
|
|
210
|
+
if (opts.label !== void 0) link.label = labelFor(link.url, opts.label);
|
|
211
|
+
if (opts.icon !== void 0) {
|
|
212
|
+
if (opts.icon.trim()) link.icon = opts.icon.trim();
|
|
213
|
+
else delete link.icon;
|
|
214
|
+
}
|
|
215
|
+
writeSessionLinks(configPath, config, links);
|
|
216
|
+
console.log(`Launch Pad: updated [${id}] \u2192 "${link.label}" ${link.url}`);
|
|
217
|
+
}
|
|
218
|
+
async function sessionLinkRemove(id) {
|
|
219
|
+
const sessionId = requireSessionId();
|
|
220
|
+
const configPath = getConfigPath(sessionId);
|
|
221
|
+
const config = readConfig(configPath);
|
|
222
|
+
const links = readSessionLinks(config);
|
|
223
|
+
const next = links.filter((l) => l.id !== id);
|
|
224
|
+
if (next.length === links.length) {
|
|
225
|
+
console.error(`No link with id "${id}". Run: svamp session link list`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
writeSessionLinks(configPath, config, next);
|
|
229
|
+
console.log(`Launch Pad: removed [${id}]${next.length ? "" : " (Launch Pad now empty)"}`);
|
|
230
|
+
}
|
|
129
231
|
async function sessionNotify(message, level = "info") {
|
|
130
232
|
requireNotSandboxed("session notify");
|
|
131
233
|
const sessionId = process.env.SVAMP_SESSION_ID;
|
|
@@ -180,7 +282,7 @@ async function sessionBroadcast(action, args) {
|
|
|
180
282
|
console.log(`Broadcast sent: ${action}`);
|
|
181
283
|
}
|
|
182
284
|
async function connectToMachineService() {
|
|
183
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
285
|
+
const { connectAndGetMachine } = await import('./commands-Bbabcx0i.mjs');
|
|
184
286
|
return connectAndGetMachine();
|
|
185
287
|
}
|
|
186
288
|
function buildInboxMessage(args) {
|
|
@@ -258,7 +360,7 @@ async function inboxSend(targetSessionId, opts) {
|
|
|
258
360
|
console.error("Message body is required.");
|
|
259
361
|
process.exit(1);
|
|
260
362
|
}
|
|
261
|
-
const { connectAndResolveSession } = await import('./commands-
|
|
363
|
+
const { connectAndResolveSession } = await import('./commands-Bbabcx0i.mjs');
|
|
262
364
|
let server;
|
|
263
365
|
try {
|
|
264
366
|
const { targetId, messageId } = await inboxSendCore(
|
|
@@ -312,7 +414,7 @@ async function inboxReply(messageId, body) {
|
|
|
312
414
|
console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
|
|
313
415
|
process.exit(1);
|
|
314
416
|
}
|
|
315
|
-
const { connectAndResolveSession } = await import('./commands-
|
|
417
|
+
const { connectAndResolveSession } = await import('./commands-Bbabcx0i.mjs');
|
|
316
418
|
const { server: localServer, machine: localMachine } = await connectToMachineService();
|
|
317
419
|
let localDisconnected = false;
|
|
318
420
|
const disconnectLocal = async () => {
|
|
@@ -376,4 +478,4 @@ async function machineNotify(message, level = "info") {
|
|
|
376
478
|
console.log(`Machine notification sent [${level}]: ${message}`);
|
|
377
479
|
}
|
|
378
480
|
|
|
379
|
-
export { buildInboxMessage, inboxList, inboxReply, inboxReplyCore, inboxSend, inboxSendCore, machineNotify, sessionBroadcast, sessionNotify, sessionSetLink, sessionSetProjectDescription, sessionSetTitle };
|
|
481
|
+
export { buildInboxMessage, inboxList, inboxReply, inboxReplyCore, inboxSend, inboxSendCore, machineNotify, sessionBroadcast, sessionLinkAdd, sessionLinkList, sessionLinkRemove, sessionLinkUpdate, sessionNotify, sessionSetLink, sessionSetProjectDescription, sessionSetTitle };
|
package/dist/cli.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { e as clearStopMarker, f as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-
|
|
1
|
+
import { e as clearStopMarker, f as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import { ensureSupervisorViaServiceManager, LAUNCHD_LABEL } from './serviceManager-hlOVxkhW.mjs';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
|
@@ -34,7 +34,7 @@ const subcommand = args[0];
|
|
|
34
34
|
let daemonSubcommand = args[1];
|
|
35
35
|
async function main() {
|
|
36
36
|
try {
|
|
37
|
-
const { getLoadedConfig } = await import('./run-
|
|
37
|
+
const { getLoadedConfig } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ae; });
|
|
38
38
|
getLoadedConfig();
|
|
39
39
|
} catch {
|
|
40
40
|
}
|
|
@@ -51,7 +51,7 @@ async function main() {
|
|
|
51
51
|
console.error(`svamp daemon restart: ${err.message || err}`);
|
|
52
52
|
process.exit(1);
|
|
53
53
|
}
|
|
54
|
-
const { restartDaemon } = await import('./run-
|
|
54
|
+
const { restartDaemon } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ag; });
|
|
55
55
|
await restartDaemon();
|
|
56
56
|
process.exit(0);
|
|
57
57
|
}
|
|
@@ -344,7 +344,7 @@ async function main() {
|
|
|
344
344
|
console.error("svamp service: Service commands are not available in sandboxed sessions.");
|
|
345
345
|
process.exit(1);
|
|
346
346
|
}
|
|
347
|
-
const { handleServiceCommand } = await import('./commands-
|
|
347
|
+
const { handleServiceCommand } = await import('./commands-DzL8_8-0.mjs');
|
|
348
348
|
await handleServiceCommand();
|
|
349
349
|
} else if (subcommand === "serve") {
|
|
350
350
|
const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
|
|
@@ -352,7 +352,7 @@ async function main() {
|
|
|
352
352
|
console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
|
|
353
353
|
process.exit(1);
|
|
354
354
|
}
|
|
355
|
-
const { handleServeCommand } = await import('./serveCommands-
|
|
355
|
+
const { handleServeCommand } = await import('./serveCommands-2fChA46a.mjs');
|
|
356
356
|
await handleServeCommand();
|
|
357
357
|
process.exit(0);
|
|
358
358
|
} else if (subcommand === "process" || subcommand === "proc") {
|
|
@@ -361,7 +361,7 @@ async function main() {
|
|
|
361
361
|
console.error("svamp process: Process commands are not available in sandboxed sessions.");
|
|
362
362
|
process.exit(1);
|
|
363
363
|
}
|
|
364
|
-
const { processCommand } = await import('./commands-
|
|
364
|
+
const { processCommand } = await import('./commands-CNFQhMZC.mjs');
|
|
365
365
|
let machineId;
|
|
366
366
|
const processArgs = args.slice(1);
|
|
367
367
|
const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
|
|
@@ -375,18 +375,18 @@ async function main() {
|
|
|
375
375
|
}), machineId);
|
|
376
376
|
process.exit(0);
|
|
377
377
|
} else if (subcommand === "issue" || subcommand === "issues") {
|
|
378
|
-
const { issueCommand } = await import('./commands-
|
|
378
|
+
const { issueCommand } = await import('./commands-BD6yqylW.mjs');
|
|
379
379
|
await issueCommand(args.slice(1));
|
|
380
380
|
process.exit(0);
|
|
381
381
|
} else if (subcommand === "workflow" || subcommand === "workflows") {
|
|
382
|
-
const { workflowCommand } = await import('./commands-
|
|
382
|
+
const { workflowCommand } = await import('./commands-BIJbWOUR.mjs');
|
|
383
383
|
await workflowCommand(args.slice(1));
|
|
384
384
|
process.exit(0);
|
|
385
385
|
} else if (subcommand === "wise-agent" || subcommand === "wise") {
|
|
386
386
|
await handleWiseAgentCommand(args.slice(1));
|
|
387
387
|
process.exit(0);
|
|
388
388
|
} else if (subcommand === "feature" || subcommand === "crew") {
|
|
389
|
-
const { crewCommand } = await import('./commands-
|
|
389
|
+
const { crewCommand } = await import('./commands-D_uWSMWk.mjs');
|
|
390
390
|
await crewCommand(args.slice(1));
|
|
391
391
|
process.exit(0);
|
|
392
392
|
} else if (subcommand === "--help" || subcommand === "-h") {
|
|
@@ -394,7 +394,7 @@ async function main() {
|
|
|
394
394
|
} else if (!subcommand || subcommand === "start") {
|
|
395
395
|
await handleInteractiveCommand();
|
|
396
396
|
} else if (subcommand === "--version" || subcommand === "-v") {
|
|
397
|
-
const pkg = await import('./package-
|
|
397
|
+
const pkg = await import('./package-Dwla0BbE.mjs').catch(() => ({ default: { version: "unknown" } }));
|
|
398
398
|
console.log(`svamp version: ${pkg.default.version}`);
|
|
399
399
|
} else {
|
|
400
400
|
console.error(`Unknown command: ${subcommand}`);
|
|
@@ -403,7 +403,7 @@ async function main() {
|
|
|
403
403
|
}
|
|
404
404
|
}
|
|
405
405
|
async function handleInteractiveCommand() {
|
|
406
|
-
const { runInteractive } = await import('./run-
|
|
406
|
+
const { runInteractive } = await import('./run-1FV8aRhe.mjs');
|
|
407
407
|
const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
|
|
408
408
|
let directory = process.cwd();
|
|
409
409
|
let resumeSessionId;
|
|
@@ -448,7 +448,7 @@ async function handleAgentCommand() {
|
|
|
448
448
|
return;
|
|
449
449
|
}
|
|
450
450
|
if (agentArgs[0] === "list") {
|
|
451
|
-
const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-
|
|
451
|
+
const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ab; });
|
|
452
452
|
console.log("Known agents:");
|
|
453
453
|
for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
|
|
454
454
|
console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
|
|
@@ -460,7 +460,7 @@ async function handleAgentCommand() {
|
|
|
460
460
|
console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
|
|
461
461
|
return;
|
|
462
462
|
}
|
|
463
|
-
const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-
|
|
463
|
+
const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ab; });
|
|
464
464
|
let cwd = process.cwd();
|
|
465
465
|
const filteredArgs = [];
|
|
466
466
|
for (let i = 0; i < agentArgs.length; i++) {
|
|
@@ -484,12 +484,12 @@ async function handleAgentCommand() {
|
|
|
484
484
|
console.log(`Starting ${config.agentName} agent in ${cwd}...`);
|
|
485
485
|
let backend;
|
|
486
486
|
if (KNOWN_MCP_AGENTS[config.agentName]) {
|
|
487
|
-
const { CodexMcpBackend } = await import('./run-
|
|
487
|
+
const { CodexMcpBackend } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ac; });
|
|
488
488
|
backend = new CodexMcpBackend({ cwd, log: logFn });
|
|
489
489
|
} else {
|
|
490
|
-
const { AcpBackend } = await import('./run-
|
|
491
|
-
const { GeminiTransport } = await import('./run-
|
|
492
|
-
const { DefaultTransport } = await import('./run-
|
|
490
|
+
const { AcpBackend } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.aa; });
|
|
491
|
+
const { GeminiTransport } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ad; });
|
|
492
|
+
const { DefaultTransport } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.a9; });
|
|
493
493
|
const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
|
|
494
494
|
backend = new AcpBackend({
|
|
495
495
|
agentName: config.agentName,
|
|
@@ -607,7 +607,7 @@ async function handleSessionCommand() {
|
|
|
607
607
|
printSessionHelp();
|
|
608
608
|
return;
|
|
609
609
|
}
|
|
610
|
-
const SANDBOX_SAFE_SESSION_CMDS = /* @__PURE__ */ new Set(["set-title", "set-link", "set-project-description", "set-project"]);
|
|
610
|
+
const SANDBOX_SAFE_SESSION_CMDS = /* @__PURE__ */ new Set(["set-title", "set-link", "link", "set-project-description", "set-project"]);
|
|
611
611
|
if (!SANDBOX_SAFE_SESSION_CMDS.has(sessionSubcommand)) {
|
|
612
612
|
const { isSandboxed } = await import('./sandboxDetect-DNTcbgWD.mjs');
|
|
613
613
|
if (isSandboxed()) {
|
|
@@ -616,7 +616,7 @@ async function handleSessionCommand() {
|
|
|
616
616
|
process.exit(1);
|
|
617
617
|
}
|
|
618
618
|
}
|
|
619
|
-
const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-
|
|
619
|
+
const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-Bbabcx0i.mjs');
|
|
620
620
|
const parseFlagStr = (flag, shortFlag) => {
|
|
621
621
|
for (let i = 1; i < sessionArgs.length; i++) {
|
|
622
622
|
if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
|
|
@@ -684,7 +684,7 @@ async function handleSessionCommand() {
|
|
|
684
684
|
allowDomain.push(sessionArgs[++i]);
|
|
685
685
|
}
|
|
686
686
|
}
|
|
687
|
-
const { parseShareArg } = await import('./commands-
|
|
687
|
+
const { parseShareArg } = await import('./commands-Bbabcx0i.mjs');
|
|
688
688
|
const shareEntries = share.map((s) => parseShareArg(s));
|
|
689
689
|
await sessionSpawn(agent, dir, targetMachineId, {
|
|
690
690
|
message,
|
|
@@ -771,7 +771,7 @@ async function handleSessionCommand() {
|
|
|
771
771
|
console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
|
|
772
772
|
process.exit(1);
|
|
773
773
|
}
|
|
774
|
-
const { sessionEditMessage } = await import('./commands-
|
|
774
|
+
const { sessionEditMessage } = await import('./commands-Bbabcx0i.mjs');
|
|
775
775
|
await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
|
|
776
776
|
} else if (sessionSubcommand === "refine") {
|
|
777
777
|
if (!sessionArgs[1] || !sessionArgs[2]) {
|
|
@@ -779,7 +779,7 @@ async function handleSessionCommand() {
|
|
|
779
779
|
console.error(" Asks the agent to revise its latest reply in place (no extra round).");
|
|
780
780
|
process.exit(1);
|
|
781
781
|
}
|
|
782
|
-
const { sessionRefineLastReply } = await import('./commands-
|
|
782
|
+
const { sessionRefineLastReply } = await import('./commands-Bbabcx0i.mjs');
|
|
783
783
|
await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
|
|
784
784
|
} else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
|
|
785
785
|
if (!sessionArgs[1]) {
|
|
@@ -787,7 +787,7 @@ async function handleSessionCommand() {
|
|
|
787
787
|
console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
|
|
788
788
|
process.exit(1);
|
|
789
789
|
}
|
|
790
|
-
const { sessionUndoEdit } = await import('./commands-
|
|
790
|
+
const { sessionUndoEdit } = await import('./commands-Bbabcx0i.mjs');
|
|
791
791
|
await sessionUndoEdit(sessionArgs[1], targetMachineId);
|
|
792
792
|
} else if (sessionSubcommand === "query") {
|
|
793
793
|
const dir = sessionArgs[1];
|
|
@@ -797,7 +797,7 @@ async function handleSessionCommand() {
|
|
|
797
797
|
console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
|
|
798
798
|
process.exit(1);
|
|
799
799
|
}
|
|
800
|
-
const { sessionQuery } = await import('./commands-
|
|
800
|
+
const { sessionQuery } = await import('./commands-Bbabcx0i.mjs');
|
|
801
801
|
await sessionQuery(dir, prompt, targetMachineId, {
|
|
802
802
|
timeout: parseFlagInt("--timeout"),
|
|
803
803
|
json: hasFlag("--json"),
|
|
@@ -830,7 +830,7 @@ async function handleSessionCommand() {
|
|
|
830
830
|
console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
|
|
831
831
|
process.exit(1);
|
|
832
832
|
}
|
|
833
|
-
const { sessionApprove } = await import('./commands-
|
|
833
|
+
const { sessionApprove } = await import('./commands-Bbabcx0i.mjs');
|
|
834
834
|
const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
|
|
835
835
|
await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
|
|
836
836
|
json: hasFlag("--json")
|
|
@@ -840,7 +840,7 @@ async function handleSessionCommand() {
|
|
|
840
840
|
console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
|
|
841
841
|
process.exit(1);
|
|
842
842
|
}
|
|
843
|
-
const { sessionDeny } = await import('./commands-
|
|
843
|
+
const { sessionDeny } = await import('./commands-Bbabcx0i.mjs');
|
|
844
844
|
const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
|
|
845
845
|
await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
|
|
846
846
|
json: hasFlag("--json")
|
|
@@ -884,7 +884,7 @@ async function handleSessionCommand() {
|
|
|
884
884
|
console.error("Usage: svamp session set-title <title>");
|
|
885
885
|
process.exit(1);
|
|
886
886
|
}
|
|
887
|
-
const { sessionSetTitle } = await import('./agentCommands-
|
|
887
|
+
const { sessionSetTitle } = await import('./agentCommands-BC9fABs7.mjs');
|
|
888
888
|
await sessionSetTitle(title);
|
|
889
889
|
} else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
|
|
890
890
|
const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
|
|
@@ -892,7 +892,7 @@ async function handleSessionCommand() {
|
|
|
892
892
|
console.error("Usage: svamp session set-project-description <text>");
|
|
893
893
|
process.exit(1);
|
|
894
894
|
}
|
|
895
|
-
const { sessionSetProjectDescription } = await import('./agentCommands-
|
|
895
|
+
const { sessionSetProjectDescription } = await import('./agentCommands-BC9fABs7.mjs');
|
|
896
896
|
await sessionSetProjectDescription(desc);
|
|
897
897
|
} else if (sessionSubcommand === "set-link") {
|
|
898
898
|
const url = sessionArgs[1];
|
|
@@ -901,8 +901,38 @@ async function handleSessionCommand() {
|
|
|
901
901
|
process.exit(1);
|
|
902
902
|
}
|
|
903
903
|
const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
|
|
904
|
-
const { sessionSetLink } = await import('./agentCommands-
|
|
904
|
+
const { sessionSetLink } = await import('./agentCommands-BC9fABs7.mjs');
|
|
905
905
|
await sessionSetLink(url, label);
|
|
906
|
+
} else if (sessionSubcommand === "link") {
|
|
907
|
+
const op = sessionArgs[1];
|
|
908
|
+
const lm = await import('./agentCommands-BC9fABs7.mjs');
|
|
909
|
+
if (op === "add") {
|
|
910
|
+
const url = sessionArgs[2];
|
|
911
|
+
if (!url || url.startsWith("--")) {
|
|
912
|
+
console.error('Usage: svamp session link add <url> [--label "Name"] [--icon "\u{1F517}|emoji"]');
|
|
913
|
+
process.exit(1);
|
|
914
|
+
}
|
|
915
|
+
await lm.sessionLinkAdd(url, parseFlagStr("--label"), parseFlagStr("--icon"));
|
|
916
|
+
} else if (op === "list" || op === "ls" || op === void 0) {
|
|
917
|
+
await lm.sessionLinkList();
|
|
918
|
+
} else if (op === "update") {
|
|
919
|
+
const id = sessionArgs[2];
|
|
920
|
+
if (!id || id.startsWith("--")) {
|
|
921
|
+
console.error("Usage: svamp session link update <id> [--url U] [--label L] [--icon I]");
|
|
922
|
+
process.exit(1);
|
|
923
|
+
}
|
|
924
|
+
await lm.sessionLinkUpdate(id, { url: parseFlagStr("--url"), label: parseFlagStr("--label"), icon: parseFlagStr("--icon") });
|
|
925
|
+
} else if (op === "remove" || op === "rm") {
|
|
926
|
+
const id = sessionArgs[2];
|
|
927
|
+
if (!id) {
|
|
928
|
+
console.error("Usage: svamp session link remove <id>");
|
|
929
|
+
process.exit(1);
|
|
930
|
+
}
|
|
931
|
+
await lm.sessionLinkRemove(id);
|
|
932
|
+
} else {
|
|
933
|
+
console.error("Usage: svamp session link <add <url> [--label L] [--icon I] | list | update <id> [...] | remove <id>>");
|
|
934
|
+
process.exit(1);
|
|
935
|
+
}
|
|
906
936
|
} else if (sessionSubcommand === "notify") {
|
|
907
937
|
const message = sessionArgs[1];
|
|
908
938
|
if (!message) {
|
|
@@ -910,7 +940,7 @@ async function handleSessionCommand() {
|
|
|
910
940
|
process.exit(1);
|
|
911
941
|
}
|
|
912
942
|
const level = parseFlagStr("--level") || "info";
|
|
913
|
-
const { sessionNotify } = await import('./agentCommands-
|
|
943
|
+
const { sessionNotify } = await import('./agentCommands-BC9fABs7.mjs');
|
|
914
944
|
await sessionNotify(message, level);
|
|
915
945
|
} else if (sessionSubcommand === "broadcast") {
|
|
916
946
|
const action = sessionArgs[1];
|
|
@@ -918,7 +948,7 @@ async function handleSessionCommand() {
|
|
|
918
948
|
console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
|
|
919
949
|
process.exit(1);
|
|
920
950
|
}
|
|
921
|
-
const { sessionBroadcast } = await import('./agentCommands-
|
|
951
|
+
const { sessionBroadcast } = await import('./agentCommands-BC9fABs7.mjs');
|
|
922
952
|
await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
|
|
923
953
|
} else if (sessionSubcommand === "inbox") {
|
|
924
954
|
const inboxSubcmd = sessionArgs[1];
|
|
@@ -929,7 +959,7 @@ async function handleSessionCommand() {
|
|
|
929
959
|
process.exit(1);
|
|
930
960
|
}
|
|
931
961
|
if (agentSessionId) {
|
|
932
|
-
const { inboxSend } = await import('./agentCommands-
|
|
962
|
+
const { inboxSend } = await import('./agentCommands-BC9fABs7.mjs');
|
|
933
963
|
await inboxSend(sessionArgs[2], {
|
|
934
964
|
body: sessionArgs[3],
|
|
935
965
|
subject: parseFlagStr("--subject"),
|
|
@@ -944,7 +974,7 @@ async function handleSessionCommand() {
|
|
|
944
974
|
}
|
|
945
975
|
} else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
|
|
946
976
|
if (agentSessionId && !sessionArgs[2]) {
|
|
947
|
-
const { inboxList } = await import('./agentCommands-
|
|
977
|
+
const { inboxList } = await import('./agentCommands-BC9fABs7.mjs');
|
|
948
978
|
await inboxList({
|
|
949
979
|
unread: hasFlag("--unread"),
|
|
950
980
|
limit: parseFlagInt("--limit"),
|
|
@@ -966,7 +996,7 @@ async function handleSessionCommand() {
|
|
|
966
996
|
process.exit(1);
|
|
967
997
|
}
|
|
968
998
|
if (agentSessionId && !sessionArgs[3]) {
|
|
969
|
-
const { inboxList } = await import('./agentCommands-
|
|
999
|
+
const { inboxList } = await import('./agentCommands-BC9fABs7.mjs');
|
|
970
1000
|
await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
|
|
971
1001
|
} else if (sessionArgs[3]) {
|
|
972
1002
|
await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
|
|
@@ -976,7 +1006,7 @@ async function handleSessionCommand() {
|
|
|
976
1006
|
}
|
|
977
1007
|
} else if (inboxSubcmd === "reply") {
|
|
978
1008
|
if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
|
|
979
|
-
const { inboxReply } = await import('./agentCommands-
|
|
1009
|
+
const { inboxReply } = await import('./agentCommands-BC9fABs7.mjs');
|
|
980
1010
|
await inboxReply(sessionArgs[2], sessionArgs[3]);
|
|
981
1011
|
} else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
|
|
982
1012
|
await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
|
|
@@ -1014,7 +1044,7 @@ async function handleMachineCommand() {
|
|
|
1014
1044
|
return;
|
|
1015
1045
|
}
|
|
1016
1046
|
if (machineSubcommand === "share") {
|
|
1017
|
-
const { machineShare } = await import('./commands-
|
|
1047
|
+
const { machineShare } = await import('./commands-Bbabcx0i.mjs');
|
|
1018
1048
|
let machineId;
|
|
1019
1049
|
const shareArgs = [];
|
|
1020
1050
|
for (let i = 1; i < machineArgs.length; i++) {
|
|
@@ -1065,14 +1095,14 @@ async function handleMachineCommand() {
|
|
|
1065
1095
|
process.exit(1);
|
|
1066
1096
|
}
|
|
1067
1097
|
if (all) {
|
|
1068
|
-
const { fleetExec } = await import('./fleet-
|
|
1098
|
+
const { fleetExec } = await import('./fleet-hBLm9UXl.mjs');
|
|
1069
1099
|
await fleetExec(command, { cwd });
|
|
1070
1100
|
} else {
|
|
1071
|
-
const { machineExec } = await import('./commands-
|
|
1101
|
+
const { machineExec } = await import('./commands-Bbabcx0i.mjs');
|
|
1072
1102
|
await machineExec(machineId, command, cwd);
|
|
1073
1103
|
}
|
|
1074
1104
|
} else if (machineSubcommand === "info") {
|
|
1075
|
-
const { machineInfo } = await import('./commands-
|
|
1105
|
+
const { machineInfo } = await import('./commands-Bbabcx0i.mjs');
|
|
1076
1106
|
let machineId;
|
|
1077
1107
|
for (let i = 1; i < machineArgs.length; i++) {
|
|
1078
1108
|
if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
|
|
@@ -1092,10 +1122,10 @@ async function handleMachineCommand() {
|
|
|
1092
1122
|
level = machineArgs[++i];
|
|
1093
1123
|
}
|
|
1094
1124
|
}
|
|
1095
|
-
const { machineNotify } = await import('./agentCommands-
|
|
1125
|
+
const { machineNotify } = await import('./agentCommands-BC9fABs7.mjs');
|
|
1096
1126
|
await machineNotify(message, level);
|
|
1097
1127
|
} else if (machineSubcommand === "ls") {
|
|
1098
|
-
const { machineLs } = await import('./commands-
|
|
1128
|
+
const { machineLs } = await import('./commands-Bbabcx0i.mjs');
|
|
1099
1129
|
let machineId;
|
|
1100
1130
|
let showHidden = false;
|
|
1101
1131
|
let path;
|
|
@@ -1151,20 +1181,20 @@ Examples:
|
|
|
1151
1181
|
};
|
|
1152
1182
|
const hasFlag = (name) => fleetArgs.includes(`--${name}`);
|
|
1153
1183
|
if (sub === "status") {
|
|
1154
|
-
const { fleetStatus } = await import('./fleet-
|
|
1184
|
+
const { fleetStatus } = await import('./fleet-hBLm9UXl.mjs');
|
|
1155
1185
|
await fleetStatus();
|
|
1156
1186
|
} else if (sub === "upgrade-claude") {
|
|
1157
|
-
const { fleetUpgradeClaude } = await import('./fleet-
|
|
1187
|
+
const { fleetUpgradeClaude } = await import('./fleet-hBLm9UXl.mjs');
|
|
1158
1188
|
await fleetUpgradeClaude({ version: flag("version", "-v") });
|
|
1159
1189
|
} else if (sub === "upgrade-svamp") {
|
|
1160
|
-
const { fleetUpgradeSvamp } = await import('./fleet-
|
|
1190
|
+
const { fleetUpgradeSvamp } = await import('./fleet-hBLm9UXl.mjs');
|
|
1161
1191
|
await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self") });
|
|
1162
1192
|
} else if (sub === "daemon-restart") {
|
|
1163
|
-
const { fleetDaemonRestart } = await import('./fleet-
|
|
1193
|
+
const { fleetDaemonRestart } = await import('./fleet-hBLm9UXl.mjs');
|
|
1164
1194
|
await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
|
|
1165
1195
|
} else if (sub === "push-skill") {
|
|
1166
1196
|
const name = fleetArgs[1];
|
|
1167
|
-
const { fleetPushSkill } = await import('./fleet-
|
|
1197
|
+
const { fleetPushSkill } = await import('./fleet-hBLm9UXl.mjs');
|
|
1168
1198
|
await fleetPushSkill(name);
|
|
1169
1199
|
} else {
|
|
1170
1200
|
console.error(`Unknown fleet subcommand: ${sub}`);
|
|
@@ -1180,7 +1210,7 @@ async function handleSkillsCommand() {
|
|
|
1180
1210
|
await printSkillsHelp();
|
|
1181
1211
|
return;
|
|
1182
1212
|
}
|
|
1183
|
-
const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-
|
|
1213
|
+
const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-T0BYzSL-.mjs');
|
|
1184
1214
|
if (skillsSubcommand === "find" || skillsSubcommand === "search") {
|
|
1185
1215
|
const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
|
|
1186
1216
|
if (!query) {
|
|
@@ -1227,7 +1257,7 @@ async function loginToHypha() {
|
|
|
1227
1257
|
process.exit(1);
|
|
1228
1258
|
}
|
|
1229
1259
|
const anchor = anchorArg.replace(/\/+$/, "");
|
|
1230
|
-
const { loadInstanceConfig } = await import('./run-
|
|
1260
|
+
const { loadInstanceConfig } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ae; });
|
|
1231
1261
|
let cfg = null;
|
|
1232
1262
|
try {
|
|
1233
1263
|
cfg = await loadInstanceConfig({ anchor, force: true });
|
|
@@ -1338,7 +1368,7 @@ async function logoutFromHypha() {
|
|
|
1338
1368
|
} catch {
|
|
1339
1369
|
}
|
|
1340
1370
|
try {
|
|
1341
|
-
const { clearInstanceConfigCache } = await import('./run-
|
|
1371
|
+
const { clearInstanceConfigCache } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.ae; });
|
|
1342
1372
|
clearInstanceConfigCache();
|
|
1343
1373
|
} catch {
|
|
1344
1374
|
}
|
|
@@ -1676,7 +1706,7 @@ async function applyClaudeAuthFlags(argv) {
|
|
|
1676
1706
|
"--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
|
|
1677
1707
|
);
|
|
1678
1708
|
}
|
|
1679
|
-
const mod = await import('./run-
|
|
1709
|
+
const mod = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.a7; });
|
|
1680
1710
|
if (hasHypha) {
|
|
1681
1711
|
let url;
|
|
1682
1712
|
const hyphaIdx = argv.indexOf("--use-hypha-proxy");
|
|
@@ -1730,7 +1760,7 @@ async function applyDaemonShareFlag(argv) {
|
|
|
1730
1760
|
}
|
|
1731
1761
|
}
|
|
1732
1762
|
if (collected.length === 0) return;
|
|
1733
|
-
const { updateEnvFile } = await import('./run-
|
|
1763
|
+
const { updateEnvFile } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.a7; });
|
|
1734
1764
|
const seen = /* @__PURE__ */ new Set();
|
|
1735
1765
|
const deduped = collected.filter((e) => {
|
|
1736
1766
|
const k = e.toLowerCase();
|
|
@@ -1763,7 +1793,7 @@ async function handleWiseAgentCommand(rest) {
|
|
|
1763
1793
|
}
|
|
1764
1794
|
});
|
|
1765
1795
|
const message = rest.slice(1).map((a, idx) => ({ a, idx: idx + 1 })).filter(({ a, idx }) => !a.startsWith("-") && !consumed.has(String(idx))).map(({ a }) => a).join(" ");
|
|
1766
|
-
const { wiseAskCli } = await import('./commands-
|
|
1796
|
+
const { wiseAskCli } = await import('./commands-Bbabcx0i.mjs');
|
|
1767
1797
|
await wiseAskCli(machineId, message, sessionId, { json });
|
|
1768
1798
|
return;
|
|
1769
1799
|
}
|
|
@@ -1775,7 +1805,7 @@ async function handleWiseAgentCommand(rest) {
|
|
|
1775
1805
|
}
|
|
1776
1806
|
return void 0;
|
|
1777
1807
|
};
|
|
1778
|
-
const { runWiseVoiceCli } = await import('./headlessCli-
|
|
1808
|
+
const { runWiseVoiceCli } = await import('./headlessCli-CYPK6_GG.mjs');
|
|
1779
1809
|
await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
|
|
1780
1810
|
return;
|
|
1781
1811
|
}
|
|
@@ -1793,7 +1823,7 @@ async function handleWiseAgentCommand(rest) {
|
|
|
1793
1823
|
const mode = valueOf(["--mode"]);
|
|
1794
1824
|
const mission = valueOf(["--mission"]);
|
|
1795
1825
|
const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
|
|
1796
|
-
const { wiseJoinMeetingCli } = await import('./commands-
|
|
1826
|
+
const { wiseJoinMeetingCli } = await import('./commands-Bbabcx0i.mjs');
|
|
1797
1827
|
await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
|
|
1798
1828
|
return;
|
|
1799
1829
|
}
|
|
@@ -1805,7 +1835,7 @@ async function handleWiseAgentCommand(rest) {
|
|
|
1805
1835
|
}
|
|
1806
1836
|
return void 0;
|
|
1807
1837
|
};
|
|
1808
|
-
const { wiseLeaveMeetingCli } = await import('./commands-
|
|
1838
|
+
const { wiseLeaveMeetingCli } = await import('./commands-Bbabcx0i.mjs');
|
|
1809
1839
|
await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
|
|
1810
1840
|
return;
|
|
1811
1841
|
}
|
|
@@ -1829,7 +1859,7 @@ async function handleWiseAgentCommand(rest) {
|
|
|
1829
1859
|
}
|
|
1830
1860
|
});
|
|
1831
1861
|
const text = rest.slice(1).map((a, idx) => ({ a, idx: idx + 1 })).filter(({ a, idx }) => !a.startsWith("-") && !consumed.has(String(idx))).map(({ a }) => a).join(" ");
|
|
1832
|
-
const { wiseAnnounceCli } = await import('./commands-
|
|
1862
|
+
const { wiseAnnounceCli } = await import('./commands-Bbabcx0i.mjs');
|
|
1833
1863
|
await wiseAnnounceCli(machineId, text, sessionId, { json });
|
|
1834
1864
|
return;
|
|
1835
1865
|
}
|
|
@@ -1841,7 +1871,7 @@ async function handleWiseAgentCommand(rest) {
|
|
|
1841
1871
|
}
|
|
1842
1872
|
return void 0;
|
|
1843
1873
|
};
|
|
1844
|
-
const { wiseMeetingsCli } = await import('./commands-
|
|
1874
|
+
const { wiseMeetingsCli } = await import('./commands-Bbabcx0i.mjs');
|
|
1845
1875
|
await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
|
|
1846
1876
|
return;
|
|
1847
1877
|
}
|
|
@@ -1891,7 +1921,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
|
|
|
1891
1921
|
return;
|
|
1892
1922
|
}
|
|
1893
1923
|
const authArgs = rest.slice(1);
|
|
1894
|
-
const mod = await import('./auth-
|
|
1924
|
+
const mod = await import('./auth-D1LIUSyb.mjs');
|
|
1895
1925
|
let action;
|
|
1896
1926
|
try {
|
|
1897
1927
|
action = mod.parseWiseAgentAuthArgs(authArgs);
|
|
@@ -1901,7 +1931,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
|
|
|
1901
1931
|
return;
|
|
1902
1932
|
}
|
|
1903
1933
|
if (action) {
|
|
1904
|
-
const { updateEnvFile } = await import('./run-
|
|
1934
|
+
const { updateEnvFile } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.a7; });
|
|
1905
1935
|
const updates = mod.buildWiseAgentEnvUpdates(action);
|
|
1906
1936
|
updateEnvFile(updates);
|
|
1907
1937
|
for (const [k, v] of Object.entries(updates)) {
|
|
@@ -1915,7 +1945,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
|
|
|
1915
1945
|
}
|
|
1916
1946
|
async function handleDaemonAuthCommand(argv) {
|
|
1917
1947
|
const sub = (argv[0] || "status").toLowerCase();
|
|
1918
|
-
const mod = await import('./run-
|
|
1948
|
+
const mod = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.a7; });
|
|
1919
1949
|
if (sub === "--help" || sub === "-h" || sub === "help") {
|
|
1920
1950
|
console.log(`
|
|
1921
1951
|
svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
|
|
@@ -2228,7 +2258,7 @@ Examples:
|
|
|
2228
2258
|
async function printSkillsHelp() {
|
|
2229
2259
|
let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
|
|
2230
2260
|
try {
|
|
2231
|
-
const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-
|
|
2261
|
+
const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-CBLQHhbE.mjs').then(function (n) { return n.af; });
|
|
2232
2262
|
browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
|
|
2233
2263
|
} catch {
|
|
2234
2264
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
|
-
import { m as resolveProjectRoot, w as searchIssues, v as listIssues, o as resumeIssue, p as pauseIssue, q as addComment, u as updateIssue, n as getIssue, x as isVisibleTo, z as summarize, t as addIssue } from './run-
|
|
2
|
+
import { m as resolveProjectRoot, w as searchIssues, v as listIssues, o as resumeIssue, p as pauseIssue, q as addComment, u as updateIssue, n as getIssue, x as isVisibleTo, z as summarize, t as addIssue } from './run-CBLQHhbE.mjs';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
|
5
5
|
import 'fs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { m as resolveProjectRoot } from './run-
|
|
2
|
+
import { m as resolveProjectRoot } from './run-CBLQHhbE.mjs';
|
|
3
3
|
import { c as workflowSteps, s as setWorkflowEnabled, i as isWorkflowEnabled, r as removeWorkflow, g as getWorkflow, l as listWorkflows, a as saveWorkflow, b as rawWorkflow } from './store-BTs0H_y0.mjs';
|
|
4
4
|
import 'os';
|
|
5
5
|
import 'fs/promises';
|
|
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
3
|
import { basename, resolve, join, isAbsolute } from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
5
|
-
import { Q as formatHandle, T as normalizeAllowedUser, U as loadSecurityContextConfig, V as resolveSecurityContext, W as buildSecurityContextFromFlags, X as mergeSecurityContexts, c as connectToHypha, Y as buildSessionShareUrl, Z as computeOutboundHop, A as shortId, _ as buildMachineShareUrl, $ as parseHandle, a0 as handleMatchesMetadata } from './run-
|
|
5
|
+
import { Q as formatHandle, T as normalizeAllowedUser, U as loadSecurityContextConfig, V as resolveSecurityContext, W as buildSecurityContextFromFlags, X as mergeSecurityContexts, c as connectToHypha, Y as buildSessionShareUrl, Z as computeOutboundHop, A as shortId, _ as buildMachineShareUrl, $ as parseHandle, a0 as handleMatchesMetadata } from './run-CBLQHhbE.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { writeFileSync, readFileSync } from 'fs';
|
|
2
2
|
import { resolve } from 'path';
|
|
3
|
-
import { connectAndGetMachine } from './commands-
|
|
3
|
+
import { connectAndGetMachine } from './commands-Bbabcx0i.mjs';
|
|
4
4
|
import 'node:fs';
|
|
5
5
|
import 'node:child_process';
|
|
6
6
|
import 'node:path';
|
|
7
7
|
import 'node:os';
|
|
8
|
-
import './run-
|
|
8
|
+
import './run-CBLQHhbE.mjs';
|
|
9
9
|
import 'os';
|
|
10
10
|
import 'fs/promises';
|
|
11
11
|
import 'url';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-
|
|
3
|
+
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-Bbabcx0i.mjs';
|
|
4
4
|
import { execSync } from 'node:child_process';
|
|
5
|
-
import { u as updateIssue, q as addComment, t as addIssue, A as shortId } from './run-
|
|
5
|
+
import { u as updateIssue, q as addComment, t as addIssue, A as shortId } from './run-CBLQHhbE.mjs';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'os';
|
|
8
8
|
import 'fs/promises';
|
|
@@ -58,7 +58,7 @@ async function serviceExpose(args) {
|
|
|
58
58
|
process.exit(1);
|
|
59
59
|
}
|
|
60
60
|
if (foreground) {
|
|
61
|
-
const { runFrpcTunnel } = await import('./frpc-
|
|
61
|
+
const { runFrpcTunnel } = await import('./frpc-Bq1XjCbs.mjs');
|
|
62
62
|
await runFrpcTunnel(name, ports, void 0, {
|
|
63
63
|
group,
|
|
64
64
|
groupKey,
|
|
@@ -68,7 +68,7 @@ async function serviceExpose(args) {
|
|
|
68
68
|
});
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
71
|
+
const { connectAndGetMachine } = await import('./commands-Bbabcx0i.mjs');
|
|
72
72
|
const { server, machine } = await connectAndGetMachine();
|
|
73
73
|
try {
|
|
74
74
|
const status = await machine.tunnelStart({
|
|
@@ -123,7 +123,7 @@ async function serviceServe(args) {
|
|
|
123
123
|
};
|
|
124
124
|
process.on("SIGINT", cleanup);
|
|
125
125
|
process.on("SIGTERM", cleanup);
|
|
126
|
-
const { runFrpcTunnel } = await import('./frpc-
|
|
126
|
+
const { runFrpcTunnel } = await import('./frpc-Bq1XjCbs.mjs');
|
|
127
127
|
await runFrpcTunnel(name, [caddyPort]);
|
|
128
128
|
} catch (err) {
|
|
129
129
|
console.error(`Error serving directory: ${err.message}`);
|
|
@@ -132,7 +132,7 @@ async function serviceServe(args) {
|
|
|
132
132
|
}
|
|
133
133
|
async function serviceList(_args) {
|
|
134
134
|
try {
|
|
135
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
135
|
+
const { connectAndGetMachine } = await import('./commands-Bbabcx0i.mjs');
|
|
136
136
|
const { server, machine } = await connectAndGetMachine();
|
|
137
137
|
try {
|
|
138
138
|
const tunnels = await machine.tunnelList({});
|
|
@@ -172,7 +172,7 @@ async function serviceDelete(args) {
|
|
|
172
172
|
process.exit(1);
|
|
173
173
|
}
|
|
174
174
|
try {
|
|
175
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
175
|
+
const { connectAndGetMachine } = await import('./commands-Bbabcx0i.mjs');
|
|
176
176
|
const { server, machine } = await connectAndGetMachine();
|
|
177
177
|
try {
|
|
178
178
|
await machine.tunnelStop({ name });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os from 'os';
|
|
2
2
|
import fs__default from 'fs';
|
|
3
3
|
import { resolve, join, relative } from 'path';
|
|
4
|
-
import { F as parseFrontmatter, G as getSkillsServer, H as getSkillsWorkspaceName, I as getSkillsCollectionName, J as fetchWithTimeout, K as searchSkills, L as SKILLS_DIR, M as getSkillInfo, N as downloadSkillFile, O as listSkillFiles } from './run-
|
|
4
|
+
import { F as parseFrontmatter, G as getSkillsServer, H as getSkillsWorkspaceName, I as getSkillsCollectionName, J as fetchWithTimeout, K as searchSkills, L as SKILLS_DIR, M as getSkillInfo, N as downloadSkillFile, O as listSkillFiles } from './run-CBLQHhbE.mjs';
|
|
5
5
|
import 'fs/promises';
|
|
6
6
|
import 'url';
|
|
7
7
|
import 'child_process';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
import { c as connectToHypha } from './run-
|
|
4
|
+
import { c as connectToHypha } from './run-CBLQHhbE.mjs';
|
|
5
5
|
import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-HydRNEt7.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
@@ -4,7 +4,7 @@ import { mkdirSync, writeFileSync, unlinkSync, existsSync, chmodSync, readFileSy
|
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { homedir, platform, arch } from 'os';
|
|
6
6
|
import { randomUUID, createHash } from 'crypto';
|
|
7
|
-
import { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-
|
|
7
|
+
import { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-CBLQHhbE.mjs';
|
|
8
8
|
import 'fs/promises';
|
|
9
9
|
import 'url';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as resolveModel, a1 as describeMisconfiguration, a2 as buildMachineDeps } from './run-
|
|
2
|
-
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-
|
|
1
|
+
import { P as resolveModel, a1 as describeMisconfiguration, a2 as buildMachineDeps } from './run-CBLQHhbE.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-Bjj0j0Ic.mjs';
|
|
3
3
|
import { WebSocket } from 'ws';
|
|
4
4
|
import { execSync, spawn } from 'child_process';
|
|
5
5
|
import 'os';
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-
|
|
1
|
+
export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as resolveProjectRoot } from './run-
|
|
1
|
+
import { m as resolveProjectRoot } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import { g as getWorkflow, s as setWorkflowEnabled, r as removeWorkflow, a as saveWorkflow, b as rawWorkflow, l as listWorkflows } from './store-BTs0H_y0.mjs';
|
|
3
3
|
import { g as getRun, l as listRuns, r as runWorkflow } from './runStore-CtptN7US.mjs';
|
|
4
4
|
import 'os';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as resolveProjectRoot, u as updateIssue, n as getIssue, o as resumeIssue, p as pauseIssue, q as addComment, t as addIssue, v as listIssues, w as searchIssues, x as isVisibleTo } from './run-
|
|
1
|
+
import { m as resolveProjectRoot, u as updateIssue, n as getIssue, o as resumeIssue, p as pauseIssue, q as addComment, t as addIssue, v as listIssues, w as searchIssues, x as isVisibleTo } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { a3 as applyClaudeProxyEnv, a4 as composeSessionId, a5 as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, a6 as generateHookSettings } from './run-
|
|
1
|
+
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { a3 as applyClaudeProxyEnv, a4 as composeSessionId, a5 as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, a6 as generateHookSettings } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import { resolve, join } from 'node:path';
|
|
4
4
|
import { existsSync, readFileSync, watch } from 'node:fs';
|
|
@@ -2912,7 +2912,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
2912
2912
|
const tunnels = handlers.tunnels;
|
|
2913
2913
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
2914
2914
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
2915
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
2915
|
+
const { FrpcTunnel } = await import('./frpc-Bq1XjCbs.mjs');
|
|
2916
2916
|
const tunnel = new FrpcTunnel({
|
|
2917
2917
|
name: params.name,
|
|
2918
2918
|
ports: params.ports,
|
|
@@ -3359,7 +3359,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3359
3359
|
}
|
|
3360
3360
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
3361
3361
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
3362
|
-
const { toolsForRole } = await import('./sideband-
|
|
3362
|
+
const { toolsForRole } = await import('./sideband-Bjj0j0Ic.mjs');
|
|
3363
3363
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
3364
3364
|
return fmt(r2);
|
|
3365
3365
|
}
|
|
@@ -3458,7 +3458,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3458
3458
|
if (r.error || !r.sender) return { error: r.error || "unauthorized" };
|
|
3459
3459
|
const callId = "call_" + Math.random().toString(16).slice(2, 12);
|
|
3460
3460
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
3461
|
-
const { queryCore } = await import('./commands-
|
|
3461
|
+
const { queryCore } = await import('./commands-Bbabcx0i.mjs');
|
|
3462
3462
|
const timeout = c.reply?.timeout_sec || 120;
|
|
3463
3463
|
let result;
|
|
3464
3464
|
try {
|
|
@@ -11489,6 +11489,23 @@ function initLoop(directory, cfg) {
|
|
|
11489
11489
|
const res = spawnSync(process.execPath, args, { encoding: "utf-8", timeout: 3e4 });
|
|
11490
11490
|
return res.status === 0;
|
|
11491
11491
|
}
|
|
11492
|
+
function ensureLoopHooks(directory, sessionId) {
|
|
11493
|
+
try {
|
|
11494
|
+
const settingsPath = join$1(directory, ".claude", "settings.json");
|
|
11495
|
+
if (existsSync$1(settingsPath)) {
|
|
11496
|
+
try {
|
|
11497
|
+
if (readFileSync$1(settingsPath, "utf-8").includes("stop-gate.mjs")) return;
|
|
11498
|
+
} catch {
|
|
11499
|
+
}
|
|
11500
|
+
}
|
|
11501
|
+
const initScript = resolveLoopInit();
|
|
11502
|
+
if (!initScript) return;
|
|
11503
|
+
const args = [initScript, directory, "--hooks-only"];
|
|
11504
|
+
if (sessionId) args.push("--session", sessionId);
|
|
11505
|
+
spawnSync(process.execPath, args, { encoding: "utf-8", timeout: 3e4 });
|
|
11506
|
+
} catch {
|
|
11507
|
+
}
|
|
11508
|
+
}
|
|
11492
11509
|
function deactivateLoop(directory, sessionId) {
|
|
11493
11510
|
try {
|
|
11494
11511
|
const p = join$1(getLoopDir(directory, sessionId), "loop-state.json");
|
|
@@ -11566,6 +11583,14 @@ function createSvampConfigChecker(directory, sessionId, getMetadata, setMetadata
|
|
|
11566
11583
|
logger.log(`[svampConfig] Session link updated: "${label}" \u2192 ${url}`);
|
|
11567
11584
|
}
|
|
11568
11585
|
}
|
|
11586
|
+
if (Array.isArray(config.session_links)) {
|
|
11587
|
+
const links = config.session_links.filter((l) => l && typeof l.url === "string" && l.url.trim()).map((l) => ({ id: String(l.id || ""), label: String(l.label || "View"), url: String(l.url).trim(), ...l.icon ? { icon: String(l.icon) } : {} }));
|
|
11588
|
+
const cur = meta.sessionLinks;
|
|
11589
|
+
if (JSON.stringify(cur || []) !== JSON.stringify(links)) {
|
|
11590
|
+
setMetadata((m) => ({ ...m, sessionLinks: links }));
|
|
11591
|
+
logger.log(`[svampConfig] Session links updated: ${links.length} link(s)`);
|
|
11592
|
+
}
|
|
11593
|
+
}
|
|
11569
11594
|
if (config.crew === null) {
|
|
11570
11595
|
if (meta.crew) {
|
|
11571
11596
|
setMetadata((m) => {
|
|
@@ -12184,7 +12209,7 @@ async function startDaemon(options) {
|
|
|
12184
12209
|
saveExposedTunnels(list);
|
|
12185
12210
|
}
|
|
12186
12211
|
async function createExposedTunnel(spec) {
|
|
12187
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
12212
|
+
const { FrpcTunnel } = await import('./frpc-Bq1XjCbs.mjs');
|
|
12188
12213
|
const tunnel = new FrpcTunnel({
|
|
12189
12214
|
name: spec.name,
|
|
12190
12215
|
ports: spec.ports,
|
|
@@ -12204,7 +12229,7 @@ async function startDaemon(options) {
|
|
|
12204
12229
|
return tunnel;
|
|
12205
12230
|
}
|
|
12206
12231
|
const tunnelRecreateState = /* @__PURE__ */ new Map();
|
|
12207
|
-
const { ServeManager } = await import('./serveManager-
|
|
12232
|
+
const { ServeManager } = await import('./serveManager-Djnr1_C5.mjs');
|
|
12208
12233
|
const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
|
|
12209
12234
|
ensureAutoInstalledSkills(logger).catch(() => {
|
|
12210
12235
|
});
|
|
@@ -12360,7 +12385,8 @@ ${v.guidance ? v.guidance + "\n" : ""}Criteria: ${v.criteria || "(none)"}
|
|
|
12360
12385
|
parentSessionId: m.parentSessionId,
|
|
12361
12386
|
tags: m.tags,
|
|
12362
12387
|
summary: m.summary,
|
|
12363
|
-
sessionLink: m.sessionLink
|
|
12388
|
+
sessionLink: m.sessionLink,
|
|
12389
|
+
sessionLinks: m.sessionLinks
|
|
12364
12390
|
};
|
|
12365
12391
|
} catch {
|
|
12366
12392
|
}
|
|
@@ -12976,6 +13002,7 @@ ${parts.join("\n")}`);
|
|
|
12976
13002
|
} else {
|
|
12977
13003
|
sessionMetadata = { ...sessionMetadata, isolationMethod: void 0 };
|
|
12978
13004
|
}
|
|
13005
|
+
ensureLoopHooks(directory, sessionId);
|
|
12979
13006
|
logger.log(`[Session ${sessionId}] Spawning Claude: ${spawnCommand} ${spawnArgs.join(" ")} (cwd: ${directory})`);
|
|
12980
13007
|
let spawnEnv = { ...process.env, ...extraEnv };
|
|
12981
13008
|
delete spawnEnv.CLAUDECODE;
|
|
@@ -14096,11 +14123,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
14096
14123
|
});
|
|
14097
14124
|
},
|
|
14098
14125
|
onIssue: async (params) => {
|
|
14099
|
-
const { issueRpc } = await import('./rpc-
|
|
14126
|
+
const { issueRpc } = await import('./rpc-C6Kn-fjl.mjs');
|
|
14100
14127
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
14101
14128
|
},
|
|
14102
14129
|
onWorkflow: async (params) => {
|
|
14103
|
-
const { workflowRpc } = await import('./rpc-
|
|
14130
|
+
const { workflowRpc } = await import('./rpc-3m_15CZh.mjs');
|
|
14104
14131
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
14105
14132
|
},
|
|
14106
14133
|
onRipgrep: async (args, cwd) => {
|
|
@@ -14193,15 +14220,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
14193
14220
|
logger,
|
|
14194
14221
|
() => {
|
|
14195
14222
|
if (trackedSession?.stopped) return;
|
|
14196
|
-
|
|
14197
|
-
if (!trackedSession?.stopped) setTimeout(() => processMessageQueueRef?.(), 200);
|
|
14198
|
-
};
|
|
14199
|
-
if (claudeResumeId && claudeProcess && claudeProcess.exitCode === null) {
|
|
14200
|
-
logger.log(`[svampConfig] Loop/supervisor attached \u2014 restarting Claude to load the Stop-gate hook`);
|
|
14201
|
-
restartClaudeHandler().catch((e) => logger.log(`[svampConfig] loop-activation restart failed: ${e?.message || e}`)).finally(dispatchKickoff);
|
|
14202
|
-
} else {
|
|
14203
|
-
dispatchKickoff();
|
|
14204
|
-
}
|
|
14223
|
+
if (!trackedSession?.stopped) setTimeout(() => processMessageQueueRef?.(), 200);
|
|
14205
14224
|
},
|
|
14206
14225
|
(v) => routeSupervisionVerdict(sessionMetadata.parentSessionId, v)
|
|
14207
14226
|
);
|
|
@@ -14641,11 +14660,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
14641
14660
|
});
|
|
14642
14661
|
},
|
|
14643
14662
|
onIssue: async (params) => {
|
|
14644
|
-
const { issueRpc } = await import('./rpc-
|
|
14663
|
+
const { issueRpc } = await import('./rpc-C6Kn-fjl.mjs');
|
|
14645
14664
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
14646
14665
|
},
|
|
14647
14666
|
onWorkflow: async (params) => {
|
|
14648
|
-
const { workflowRpc } = await import('./rpc-
|
|
14667
|
+
const { workflowRpc } = await import('./rpc-3m_15CZh.mjs');
|
|
14649
14668
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
14650
14669
|
},
|
|
14651
14670
|
onRipgrep: async (args, cwd) => {
|
|
@@ -15419,7 +15438,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
15419
15438
|
const PING_TIMEOUT_MS = 15e3;
|
|
15420
15439
|
const POST_RECONNECT_GRACE_MS = 2e4;
|
|
15421
15440
|
const RECONNECT_JITTER_MS = 2500;
|
|
15422
|
-
const { WorkflowScheduler } = await import('./scheduler-
|
|
15441
|
+
const { WorkflowScheduler } = await import('./scheduler-CNweB6Ep.mjs');
|
|
15423
15442
|
const workflowScheduler = new WorkflowScheduler({
|
|
15424
15443
|
projectRoots: () => {
|
|
15425
15444
|
const dirs = /* @__PURE__ */ new Set();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as resolveProjectRoot, y as cronMatches } from './run-
|
|
1
|
+
import { m as resolveProjectRoot, y as cronMatches } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import { l as listWorkflows, i as isWorkflowEnabled, w as workflowCrons } from './store-BTs0H_y0.mjs';
|
|
3
3
|
import { r as runWorkflow } from './runStore-CtptN7US.mjs';
|
|
4
4
|
import 'os';
|
|
@@ -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-Bbabcx0i.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-Bbabcx0i.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-Bbabcx0i.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-Bbabcx0i.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-Bbabcx0i.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-CBLQHhbE.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-Bq1XjCbs.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, B as loadMachineContext, C as buildMachineInstructions, D as machineToolsForRole, E as buildMachineTools } from './run-
|
|
1
|
+
import { R as READ_ONLY_TOOLS, B as loadMachineContext, C as buildMachineInstructions, D as machineToolsForRole, E as buildMachineTools } from './run-CBLQHhbE.mjs';
|
|
2
2
|
import 'node:child_process';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|