svamp-cli 0.2.167 → 0.2.168
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agentCommands-juw5_q8v.mjs → agentCommands-g9PNs8mK.mjs} +5 -5
- package/dist/{auth-DFU6j82G.mjs → auth-CuBgQIYh.mjs} +1 -1
- package/dist/cli.mjs +61 -97
- package/dist/{commands-Bb4Sr_iq.mjs → commands-B7ZQ6zku.mjs} +1 -1
- package/dist/{commands-BYEL5DqA.mjs → commands-BTogAOJz.mjs} +1 -1
- package/dist/{commands-Jm-BUsrf.mjs → commands-BroyHnAl.mjs} +2 -2
- package/dist/{commands-C2gVT2LM.mjs → commands-C1-Av6gC.mjs} +5 -5
- package/dist/{commands-yYLA6w6t.mjs → commands-C6I52suC.mjs} +2 -119
- package/dist/{commands-CevXJKdi.mjs → commands-CzpNw-pk.mjs} +1 -1
- package/dist/{commands-D_Hlxfog.mjs → commands-T6DydJZv.mjs} +2 -2
- package/dist/{commands-B9-jAYZy.mjs → commands-f1S2sp3J.mjs} +10 -39
- package/dist/{fleet-DGWqm1_M.mjs → fleet-TBsV62yr.mjs} +1 -1
- package/dist/{frpc-Cd9N3gGU.mjs → frpc-bF6D2Qqh.mjs} +1 -1
- package/dist/{headlessCli-BlKUictN.mjs → headlessCli-C2yyzV9M.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{package-CrzrTOTn.mjs → package-BNhxGsFD.mjs} +2 -2
- package/dist/{run-BOdCp1Ru.mjs → run-D6C1bvAw.mjs} +1 -1
- package/dist/{run-BeIP-YpD.mjs → run-Ysr90GYa.mjs} +28 -179
- package/dist/{serveCommands-BoV_jArl.mjs → serveCommands-DIq3shgr.mjs} +5 -5
- package/dist/{serveManager-Do0sF4Rz.mjs → serveManager-C5s6iQR9.mjs} +2 -2
- package/dist/{sideband-6iHsRWJX.mjs → sideband-37mLaOSD.mjs} +1 -1
- package/package.json +2 -2
|
@@ -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 {
|
|
5
|
+
import { O as formatHandle, P as normalizeAllowedUser, Q as loadSecurityContextConfig, T as resolveSecurityContext, U as buildSecurityContextFromFlags, V as mergeSecurityContexts, c as connectToHypha, W as buildSessionShareUrl, X as computeOutboundHop, x as shortId, Y as buildMachineShareUrl, Z as parseHandle, _ as handleMatchesMetadata } from './run-Ysr90GYa.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -2543,123 +2543,6 @@ async function sessionLoopStatus(sessionIdPartial, machineId) {
|
|
|
2543
2543
|
await server.disconnect();
|
|
2544
2544
|
}
|
|
2545
2545
|
}
|
|
2546
|
-
const CHECKLIST_MARK = {
|
|
2547
|
-
todo: " ",
|
|
2548
|
-
active: "~",
|
|
2549
|
-
verifying: "?",
|
|
2550
|
-
awaiting_review: "\u2026",
|
|
2551
|
-
rework: "\u21BB",
|
|
2552
|
-
blocked: "\u2717",
|
|
2553
|
-
done: "x"
|
|
2554
|
-
};
|
|
2555
|
-
function printChecklist(items) {
|
|
2556
|
-
if (!items.length) {
|
|
2557
|
-
console.log(" (empty checklist)");
|
|
2558
|
-
return;
|
|
2559
|
-
}
|
|
2560
|
-
items.forEach((it, i) => {
|
|
2561
|
-
const crew = it.disposition === "delegated" ? ` [crew${it.child?.sessionId ? ` ${it.child.sessionId.slice(0, 8)}` : ""}]` : "";
|
|
2562
|
-
const oracle = it.eval?.type === "oracle" ? ` (oracle: ${it.eval.cmd})` : "";
|
|
2563
|
-
console.log(` ${i + 1}. [${CHECKLIST_MARK[it.status] ?? " "}] ${it.text}${crew}${oracle}`);
|
|
2564
|
-
});
|
|
2565
|
-
const s = summarize(items);
|
|
2566
|
-
console.log(` \u2014 ${s.done}/${s.total} done${s.delegated ? `, ${s.delegated} delegated` : ""}${s.allDone ? " \u2713" : ""}`);
|
|
2567
|
-
}
|
|
2568
|
-
async function readChecklistItems(svc, fullId) {
|
|
2569
|
-
try {
|
|
2570
|
-
const raw = await svc.readFile(`.svamp/${fullId}/loop/criteria.json`);
|
|
2571
|
-
const content = typeof raw === "string" ? raw : raw?.content;
|
|
2572
|
-
if (content) {
|
|
2573
|
-
const parsed = JSON.parse(Buffer.from(content, "base64").toString("utf-8"));
|
|
2574
|
-
if (Array.isArray(parsed)) return parsed;
|
|
2575
|
-
if (Array.isArray(parsed?.items)) return parsed.items;
|
|
2576
|
-
}
|
|
2577
|
-
} catch {
|
|
2578
|
-
}
|
|
2579
|
-
return [];
|
|
2580
|
-
}
|
|
2581
|
-
function resolveItemIds(items, tokens) {
|
|
2582
|
-
const ids = [];
|
|
2583
|
-
for (const tok of tokens) {
|
|
2584
|
-
const byId = items.find((it) => it.id === tok);
|
|
2585
|
-
if (byId) {
|
|
2586
|
-
ids.push(byId.id);
|
|
2587
|
-
continue;
|
|
2588
|
-
}
|
|
2589
|
-
const idx = parseInt(tok, 10);
|
|
2590
|
-
if (!isNaN(idx) && idx >= 1 && idx <= items.length) ids.push(items[idx - 1].id);
|
|
2591
|
-
}
|
|
2592
|
-
return ids;
|
|
2593
|
-
}
|
|
2594
|
-
function mutateChecklistItems(items, action, args, opts, now = Date.now()) {
|
|
2595
|
-
const evalOpt = opts?.oracle ? { eval: { type: "oracle", cmd: opts.oracle } } : {};
|
|
2596
|
-
let next = items;
|
|
2597
|
-
if (action === "set") {
|
|
2598
|
-
next = args.map((text, i) => newItem(text, evalOpt, i, now));
|
|
2599
|
-
} else if (action === "add") {
|
|
2600
|
-
next = [...items, newItem(args.join(" ").trim(), evalOpt, items.length, now)];
|
|
2601
|
-
} else if (action === "done" || action === "rm") {
|
|
2602
|
-
const targetIds = new Set(resolveItemIds(items, args));
|
|
2603
|
-
next = action === "rm" ? items.filter((it) => !targetIds.has(it.id)) : items.map((it) => targetIds.has(it.id) ? { ...it, status: "done", doneAt: now } : it);
|
|
2604
|
-
}
|
|
2605
|
-
return next.map((it, i) => ({ ...it, order: i }));
|
|
2606
|
-
}
|
|
2607
|
-
function checklistConfigPatch(opts) {
|
|
2608
|
-
if (!opts) return void 0;
|
|
2609
|
-
const budget = {};
|
|
2610
|
-
if (opts.maxTokens && opts.maxTokens > 0) budget.max_tokens = opts.maxTokens;
|
|
2611
|
-
if (opts.maxRuntimeSec && opts.maxRuntimeSec > 0) budget.max_runtime_sec = opts.maxRuntimeSec;
|
|
2612
|
-
const hasBudget = Object.keys(budget).length > 0;
|
|
2613
|
-
if (!opts.maxIterations && !hasBudget) return void 0;
|
|
2614
|
-
return {
|
|
2615
|
-
...opts.maxIterations ? { maxIterations: opts.maxIterations } : {},
|
|
2616
|
-
...hasBudget ? { budget } : {}
|
|
2617
|
-
};
|
|
2618
|
-
}
|
|
2619
|
-
async function sessionChecklist(sessionIdPartial, action, args, machineId, opts) {
|
|
2620
|
-
const { server, machine, fullId } = await connectAndResolveSession(sessionIdPartial, machineId);
|
|
2621
|
-
try {
|
|
2622
|
-
const svc = getSessionProxy(machine, fullId);
|
|
2623
|
-
if (action === "get") {
|
|
2624
|
-
console.log(`Checklist on session ${fullId.slice(0, 8)}:`);
|
|
2625
|
-
printChecklist(await readChecklistItems(svc, fullId));
|
|
2626
|
-
return;
|
|
2627
|
-
}
|
|
2628
|
-
if (action === "clear") {
|
|
2629
|
-
await svc.updateConfig({ checklist: [] });
|
|
2630
|
-
console.log(`Checklist cleared on session ${fullId.slice(0, 8)} \u2014 loop stopped.`);
|
|
2631
|
-
return;
|
|
2632
|
-
}
|
|
2633
|
-
const current = await readChecklistItems(svc, fullId);
|
|
2634
|
-
if ((action === "set" || action === "add") && !args.join(" ").trim()) {
|
|
2635
|
-
console.error(`Usage: svamp session checklist <id> ${action} "<text>" [--oracle "cmd"]`);
|
|
2636
|
-
process.exit(1);
|
|
2637
|
-
}
|
|
2638
|
-
if (action === "done" || action === "rm") {
|
|
2639
|
-
if (!args.length) {
|
|
2640
|
-
console.error(`Usage: svamp session checklist <id> ${action} <id|#> [<id|#> \u2026]`);
|
|
2641
|
-
process.exit(1);
|
|
2642
|
-
}
|
|
2643
|
-
if (!resolveItemIds(current, args).length) {
|
|
2644
|
-
console.error("No matching items.");
|
|
2645
|
-
process.exit(1);
|
|
2646
|
-
}
|
|
2647
|
-
}
|
|
2648
|
-
const items = mutateChecklistItems(current, action, args, { oracle: opts?.oracle });
|
|
2649
|
-
const errs = validateChecklist(items);
|
|
2650
|
-
if (errs.length) {
|
|
2651
|
-
console.error(`Checklist invalid: ${errs.join("; ")}`);
|
|
2652
|
-
process.exit(1);
|
|
2653
|
-
}
|
|
2654
|
-
const ccfg = checklistConfigPatch(opts);
|
|
2655
|
-
await svc.updateConfig({ checklist: items, ...ccfg ? { checklistConfig: ccfg } : {} });
|
|
2656
|
-
console.log(`Checklist updated on session ${fullId.slice(0, 8)}:`);
|
|
2657
|
-
printChecklist(items);
|
|
2658
|
-
if (items.some((it) => it.status !== "done")) console.log(" \u{1F501} loop active \u2014 iterating until all done.");
|
|
2659
|
-
} finally {
|
|
2660
|
-
await server.disconnect();
|
|
2661
|
-
}
|
|
2662
|
-
}
|
|
2663
2546
|
async function sessionInboxSend(sessionIdPartial, body, machineId, opts) {
|
|
2664
2547
|
const { server, machine, fullId } = await connectAndResolveSession(sessionIdPartial, machineId);
|
|
2665
2548
|
try {
|
|
@@ -2814,4 +2697,4 @@ async function sessionInboxClear(sessionIdPartial, machineId, opts) {
|
|
|
2814
2697
|
}
|
|
2815
2698
|
}
|
|
2816
2699
|
|
|
2817
|
-
export {
|
|
2700
|
+
export { collectAssistantResponse, connectAndGetMachine, connectAndResolveSession, createWorktree, generateWorktreeName, machineExec, machineInfo, machineLs, machineShare, parseShareArg, queryCore, renderMessage, resolveSessionId, sendCore, sessionApprove, sessionArchive, sessionAttach, sessionDelete, sessionDeny, sessionEditMessage, sessionInboxClear, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxSend, sessionInfo, sessionList, sessionLoopCancel, sessionLoopStart, sessionLoopStatus, sessionMachines, sessionMessages, sessionQuery, sessionRefineLastReply, sessionResume, sessionSend, sessionShare, sessionSpawn, sessionUndoEdit, sessionWait, sessionWhoami, snapshotLatestSeq, validateSendOptions, wiseAnnounceCli, wiseAskCli, wiseJoinMeetingCli, wiseLeaveMeetingCli, wiseMeetingsCli };
|
|
@@ -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-Ysr90GYa.mjs';
|
|
3
3
|
import { existsSync, unlinkSync, readFileSync, readdirSync, mkdirSync, writeFileSync, renameSync } from 'node:fs';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { parse, stringify } from 'yaml';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-
|
|
2
|
+
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-C6I52suC.mjs';
|
|
3
3
|
import { execSync } from 'node:child_process';
|
|
4
|
-
import { u as updateIssue, p as addComment, v as addIssue,
|
|
4
|
+
import { u as updateIssue, p as addComment, v as addIssue, x as shortId } from './run-Ysr90GYa.mjs';
|
|
5
5
|
import 'node:path';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'os';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { createServer } from 'node:http';
|
|
4
|
-
import {
|
|
4
|
+
import { R as RoutineStore, w as RoutineRunner } from './run-Ysr90GYa.mjs';
|
|
5
5
|
import 'os';
|
|
6
6
|
import 'fs/promises';
|
|
7
7
|
import 'fs';
|
|
@@ -22,41 +22,6 @@ import 'zod';
|
|
|
22
22
|
import 'node:fs/promises';
|
|
23
23
|
import 'node:util';
|
|
24
24
|
|
|
25
|
-
function runOracle(cmd, cwd, timeoutSec = 600) {
|
|
26
|
-
try {
|
|
27
|
-
execSync(cmd, { cwd, stdio: "pipe", maxBuffer: 16 * 1024 * 1024, timeout: timeoutSec * 1e3 });
|
|
28
|
-
return true;
|
|
29
|
-
} catch {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function itemOracle(item) {
|
|
34
|
-
if (item.eval?.type === "oracle" && item.eval.cmd?.trim()) return item.eval.cmd;
|
|
35
|
-
const legacy = item.oracle;
|
|
36
|
-
return typeof legacy === "string" && legacy.trim() ? legacy : void 0;
|
|
37
|
-
}
|
|
38
|
-
function verifyChecklistOracles(projectRoot, sessionId, timeoutSec = 600) {
|
|
39
|
-
const items = readChecklist(projectRoot, sessionId).filter((i) => i.disposition !== "delegated" && i.status !== "done");
|
|
40
|
-
const criteria = compileChecklist(items).criteria;
|
|
41
|
-
const failing = [];
|
|
42
|
-
let oracleTotal = 0, oraclePass = 0, agentSkipped = 0;
|
|
43
|
-
for (const it of items) {
|
|
44
|
-
const cmd = itemOracle(it);
|
|
45
|
-
if (cmd) {
|
|
46
|
-
oracleTotal++;
|
|
47
|
-
if (runOracle(cmd, projectRoot, timeoutSec)) oraclePass++;
|
|
48
|
-
else failing.push({ id: it.id, text: it.text });
|
|
49
|
-
} else if (it.eval?.type === "agent") {
|
|
50
|
-
agentSkipped++;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const verdict = failing.length === 0 ? "approved" : "rework";
|
|
54
|
-
const parts = [`Watchdog: ${oraclePass}/${oracleTotal} oracle check${oracleTotal === 1 ? "" : "s"} pass.`];
|
|
55
|
-
if (failing.length) parts.push(`Failing: ${failing.map((f) => f.text).join("; ")}.`);
|
|
56
|
-
if (agentSkipped) parts.push(`${agentSkipped} agent-judged item(s) need a live session (not checked).`);
|
|
57
|
-
return { verdict, criteria, guidance: parts.join(" "), oracleTotal, oraclePass, failing, agentSkipped, itemCount: items.length };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
25
|
function parseArgs(argv) {
|
|
61
26
|
const a = { _: [] };
|
|
62
27
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -88,7 +53,13 @@ async function cliDeliver({ routine, resolved }) {
|
|
|
88
53
|
console.error(`[trigger] skip ${routine.id || routine.name}: report session ${reportTo} not live (inbox is in-memory)`);
|
|
89
54
|
return { skipped: "verify: report session not live" };
|
|
90
55
|
}
|
|
91
|
-
|
|
56
|
+
let res;
|
|
57
|
+
try {
|
|
58
|
+
const out = execFileSync("svamp", ["issue", "pending"], { cwd: dir, encoding: "utf8" });
|
|
59
|
+
res = { verdict: "approved", guidance: out.trim() || "No pending issues.", criteria: "svamp issue pending" };
|
|
60
|
+
} catch (e) {
|
|
61
|
+
res = { verdict: "rework", guidance: (String(e?.stdout || "") + String(e?.stderr || "")).trim() || "Pending issues remain.", criteria: "svamp issue pending" };
|
|
62
|
+
}
|
|
92
63
|
const message = {
|
|
93
64
|
messageId: randomUUID(),
|
|
94
65
|
from: `watchdog:${routine.name || routine.id}`,
|
|
@@ -104,7 +75,7 @@ Criteria: ${res.criteria || "(none)"}
|
|
|
104
75
|
urgency: "normal",
|
|
105
76
|
hopCount: 1
|
|
106
77
|
};
|
|
107
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
78
|
+
const { connectAndGetMachine } = await import('./commands-C6I52suC.mjs');
|
|
108
79
|
const { server, machine } = await connectAndGetMachine();
|
|
109
80
|
try {
|
|
110
81
|
await machine.sessionRPC(reportTo, "sendInboxMessage", { message });
|
|
@@ -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-Ysr90GYa.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-Ysr90GYa.mjs';
|
|
8
8
|
import 'fs/promises';
|
|
9
9
|
import 'url';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-
|
|
1
|
+
import { N as resolveModel, $ as describeMisconfiguration, a0 as buildMachineDeps } from './run-Ysr90GYa.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-37mLaOSD.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-Ysr90GYa.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "svamp-cli";
|
|
2
|
-
var version = "0.2.
|
|
2
|
+
var version = "0.2.168";
|
|
3
3
|
var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
|
|
4
4
|
var author = "Amun AI AB";
|
|
5
5
|
var license = "SEE LICENSE IN LICENSE";
|
|
@@ -19,7 +19,7 @@ var exports$1 = {
|
|
|
19
19
|
var scripts = {
|
|
20
20
|
build: "rm -rf dist bin/skills && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/loop bin/skills/loop && cp -r ../../skills/crew bin/skills/crew && tsc --noEmit && pkgroll",
|
|
21
21
|
typecheck: "tsc --noEmit",
|
|
22
|
-
test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-
|
|
22
|
+
test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-routine.mjs && npx tsx test/test-routine-rpc.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs",
|
|
23
23
|
"test:hypha": "node --no-warnings test/test-hypha-service.mjs",
|
|
24
24
|
dev: "tsx src/cli.ts",
|
|
25
25
|
"dev:daemon": "tsx src/cli.ts daemon start-sync",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import {
|
|
1
|
+
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { a1 as composeSessionId, a2 as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, a3 as generateHookSettings } from './run-Ysr90GYa.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';
|
|
@@ -486,7 +486,7 @@ function buildTools(deps, skills) {
|
|
|
486
486
|
{
|
|
487
487
|
name: "set_checklist",
|
|
488
488
|
readOnly: false,
|
|
489
|
-
description: "
|
|
489
|
+
description: "Turn the caller's goals into tracked ISSUES (the backlog = the loop's success criteria) and start the self-verifying loop. Each item becomes one concrete, checkable issue (optional per-item oracle \u2192 its verify-cmd). ONLY after the caller confirmed the proposal.",
|
|
490
490
|
parameters: { type: "object", properties: {
|
|
491
491
|
items: { type: "array", description: "The checklist items (success criteria).", items: { type: "object", properties: {
|
|
492
492
|
text: { type: "string", description: "A concrete, checkable requirement." },
|
|
@@ -503,7 +503,7 @@ function buildTools(deps, skills) {
|
|
|
503
503
|
prompt: a?.prompt ? str$1(a.prompt) : void 0,
|
|
504
504
|
maxIterations: typeof a?.max_iterations === "number" ? a.max_iterations : void 0
|
|
505
505
|
});
|
|
506
|
-
return r.ok ? `
|
|
506
|
+
return r.ok ? `Created ${items.length} issue(s) and started the backlog loop.` : `Could not create the issues: ${r.error || "unknown error"}.`;
|
|
507
507
|
}
|
|
508
508
|
},
|
|
509
509
|
{
|
|
@@ -665,7 +665,7 @@ You are WISE Agent, a fast, text-mode companion to the deep coding agent (Claude
|
|
|
665
665
|
- run_bash \u2014 run a shell command on the session's machine (when granted).
|
|
666
666
|
- send_to_session \u2014 hand a clear, reformulated instruction to the deep coding agent (when granted); pass wait=true to block for its reply.
|
|
667
667
|
- create_routine / create_loop / create_channel \u2014 set up a scheduled/triggered routine, a self-verifying loop, or an inbound channel for this session (when granted). ALWAYS propose first and confirm before calling these (see below).
|
|
668
|
-
- set_checklist / stop_loop \u2014 turn the caller's goals into
|
|
668
|
+
- set_checklist / stop_loop \u2014 turn the caller's goals into tracked ISSUES (the backlog = the loop's success criteria) and start the self-verifying loop, or stop a running loop (when granted). Each item becomes one concrete, checkable issue (optional per-item oracle command \u2192 its verify-cmd). ALWAYS propose the items first and confirm before calling.
|
|
669
669
|
|
|
670
670
|
# Instructions
|
|
671
671
|
- Answer general questions and questions about yourself directly. Use tools only to act on the machine/session.
|
|
@@ -1074,23 +1074,27 @@ function buildSessionDeps(rpc, opts = {}) {
|
|
|
1074
1074
|
}, ctx);
|
|
1075
1075
|
},
|
|
1076
1076
|
async applyChecklist(items, opts2) {
|
|
1077
|
-
const
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1077
|
+
const list = (items || []).filter((i) => i?.text && i.text.trim());
|
|
1078
|
+
const shq = (s) => `'${String(s).replace(/'/g, "'\\''")}'`;
|
|
1079
|
+
let created = 0;
|
|
1080
|
+
for (const i of list) {
|
|
1081
|
+
const oracle = i.oracle?.trim();
|
|
1082
|
+
const cmd = `svamp issue add --ready ${oracle ? `--verify-cmd ${shq(oracle)} ` : ""}--body ${shq(i.text.trim())}`;
|
|
1083
|
+
try {
|
|
1084
|
+
const r = normalizeBash(await rpc.bash(cmd, void 0, void 0, ctx));
|
|
1085
|
+
if (r.exitCode === 0) created++;
|
|
1086
|
+
} catch {
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1085
1089
|
await rpc.updateConfig({
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
+
loop: {
|
|
1091
|
+
task: opts2?.prompt?.trim() || "Work the ready issues in this session backlog until none remain (`svamp issue list --status ready`).",
|
|
1092
|
+
oracle: "svamp issue pending",
|
|
1093
|
+
max_iterations: opts2?.maxIterations ?? 20,
|
|
1090
1094
|
evaluator: true
|
|
1091
1095
|
}
|
|
1092
1096
|
}, ctx);
|
|
1093
|
-
return { ok:
|
|
1097
|
+
return { ok: created > 0 || list.length === 0, ...created === 0 && list.length ? { error: "could not create issues" } : {} };
|
|
1094
1098
|
},
|
|
1095
1099
|
async stopLoop() {
|
|
1096
1100
|
await rpc.updateConfig({ loop: null }, ctx);
|
|
@@ -1292,7 +1296,7 @@ function validateRoutine(r) {
|
|
|
1292
1296
|
if (!a || !ACTION_KINDS.includes(a.kind)) errs.push(`action.kind must be one of ${ACTION_KINDS.join("|")}`);
|
|
1293
1297
|
if (a?.kind === "message" && !a.template) errs.push("action.template required for message action");
|
|
1294
1298
|
if (a?.kind === "loop" && !a.loop && !a.task_template) errs.push("action.loop or action.task_template required for loop action");
|
|
1295
|
-
if (a?.kind === "verify" && !r.dir) errs.push("a verify (
|
|
1299
|
+
if (a?.kind === "verify" && !r.dir) errs.push("a verify (backlog watchdog) action requires a dir (the project root holding .svamp/issues)");
|
|
1296
1300
|
if (r.overlap && !OVERLAP.includes(r.overlap)) errs.push(`overlap must be one of ${OVERLAP.join("|")}`);
|
|
1297
1301
|
if (r.bind && r.bind !== "stateful" && r.bind !== "stateless") errs.push('bind must be "stateful" or "stateless"');
|
|
1298
1302
|
if (r.bind === "stateless") {
|
|
@@ -2787,7 +2791,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
2787
2791
|
const tunnels = handlers.tunnels;
|
|
2788
2792
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
2789
2793
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
2790
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
2794
|
+
const { FrpcTunnel } = await import('./frpc-bF6D2Qqh.mjs');
|
|
2791
2795
|
const tunnel = new FrpcTunnel({
|
|
2792
2796
|
name: params.name,
|
|
2793
2797
|
ports: params.ports,
|
|
@@ -3228,7 +3232,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3228
3232
|
}
|
|
3229
3233
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
3230
3234
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
3231
|
-
const { toolsForRole } = await import('./sideband-
|
|
3235
|
+
const { toolsForRole } = await import('./sideband-37mLaOSD.mjs');
|
|
3232
3236
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
3233
3237
|
return fmt(r2);
|
|
3234
3238
|
}
|
|
@@ -3327,7 +3331,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3327
3331
|
if (r.error || !r.sender) return { error: r.error || "unauthorized" };
|
|
3328
3332
|
const callId = "call_" + Math.random().toString(16).slice(2, 12);
|
|
3329
3333
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
3330
|
-
const { queryCore } = await import('./commands-
|
|
3334
|
+
const { queryCore } = await import('./commands-C6I52suC.mjs');
|
|
3331
3335
|
const timeout = c.reply?.timeout_sec || 120;
|
|
3332
3336
|
let result;
|
|
3333
3337
|
try {
|
|
@@ -10143,117 +10147,6 @@ class ProcessSupervisor {
|
|
|
10143
10147
|
}
|
|
10144
10148
|
}
|
|
10145
10149
|
|
|
10146
|
-
const STATUS_TO_MARKER = {
|
|
10147
|
-
todo: " ",
|
|
10148
|
-
active: "~",
|
|
10149
|
-
verifying: "*",
|
|
10150
|
-
awaiting_review: "?",
|
|
10151
|
-
rework: "r",
|
|
10152
|
-
blocked: "!",
|
|
10153
|
-
done: "x"
|
|
10154
|
-
};
|
|
10155
|
-
function renderCriteria(items) {
|
|
10156
|
-
if (!items.length) return "";
|
|
10157
|
-
const lines = items.map((it) => {
|
|
10158
|
-
const tag = it.disposition === "delegated" ? " (delegated)" : "";
|
|
10159
|
-
let how = "";
|
|
10160
|
-
if (it.disposition !== "delegated" && it.eval) {
|
|
10161
|
-
if (it.eval.type === "agent" && it.eval.prompt) how = `
|
|
10162
|
-
\u21B3 verify: ${it.eval.prompt}`;
|
|
10163
|
-
else if (it.eval.type === "oracle") how = `
|
|
10164
|
-
\u21B3 verify by command (must pass): ${it.eval.cmd}`;
|
|
10165
|
-
else if (it.eval.type === "manual") how = `
|
|
10166
|
-
\u21B3 verify: manual sign-off`;
|
|
10167
|
-
}
|
|
10168
|
-
return `- [${STATUS_TO_MARKER[it.status] ?? " "}] ${it.text}${tag}${how}`;
|
|
10169
|
-
});
|
|
10170
|
-
const { done, total } = summarize$1(items);
|
|
10171
|
-
return `Success criteria \u2014 drive this checklist to all-done (${done}/${total}):
|
|
10172
|
-
${lines.join("\n")}`;
|
|
10173
|
-
}
|
|
10174
|
-
function compileChecklist(items) {
|
|
10175
|
-
const criteria = renderCriteria(items);
|
|
10176
|
-
const oracleItem = items.find((i) => i.disposition === "inline" && i.eval?.type === "oracle");
|
|
10177
|
-
const oracle = oracleItem && oracleItem.eval?.type === "oracle" ? oracleItem.eval.cmd : void 0;
|
|
10178
|
-
return { criteria, ...oracle ? { oracle } : {} };
|
|
10179
|
-
}
|
|
10180
|
-
const VALID_STATUS = /* @__PURE__ */ new Set(["todo", "active", "verifying", "awaiting_review", "rework", "blocked", "done"]);
|
|
10181
|
-
function validateChecklist(items) {
|
|
10182
|
-
const errs = [];
|
|
10183
|
-
const ids = /* @__PURE__ */ new Set();
|
|
10184
|
-
for (const it of items) {
|
|
10185
|
-
if (!it.id) errs.push("item missing id");
|
|
10186
|
-
else if (ids.has(it.id)) errs.push(`duplicate item id "${it.id}"`);
|
|
10187
|
-
else ids.add(it.id);
|
|
10188
|
-
if (!it.text || !it.text.trim()) errs.push(`item "${it.id}" has empty text`);
|
|
10189
|
-
if (it.disposition !== "inline" && it.disposition !== "delegated") errs.push(`item "${it.id}" bad disposition`);
|
|
10190
|
-
if (!VALID_STATUS.has(it.status)) errs.push(`item "${it.id}" bad status "${it.status}"`);
|
|
10191
|
-
if (it.eval?.type === "oracle" && !it.eval.cmd.trim()) errs.push(`item "${it.id}" oracle eval needs a cmd`);
|
|
10192
|
-
}
|
|
10193
|
-
return errs;
|
|
10194
|
-
}
|
|
10195
|
-
function summarize$1(items) {
|
|
10196
|
-
const by = (s) => items.filter((i) => i.status === s).length;
|
|
10197
|
-
const done = by("done");
|
|
10198
|
-
return {
|
|
10199
|
-
total: items.length,
|
|
10200
|
-
done,
|
|
10201
|
-
todo: by("todo"),
|
|
10202
|
-
active: by("active"),
|
|
10203
|
-
blocked: by("blocked"),
|
|
10204
|
-
awaiting_review: by("awaiting_review"),
|
|
10205
|
-
delegated: items.filter((i) => i.disposition === "delegated").length,
|
|
10206
|
-
allDone: items.length > 0 && done === items.length
|
|
10207
|
-
};
|
|
10208
|
-
}
|
|
10209
|
-
function newItem(text, opts = {}, order = 0, now = Date.now()) {
|
|
10210
|
-
return {
|
|
10211
|
-
id: shortId(),
|
|
10212
|
-
text: text.trim(),
|
|
10213
|
-
disposition: opts.disposition ?? "inline",
|
|
10214
|
-
...opts.eval ? { eval: opts.eval } : {},
|
|
10215
|
-
status: "todo",
|
|
10216
|
-
order,
|
|
10217
|
-
createdAt: now
|
|
10218
|
-
};
|
|
10219
|
-
}
|
|
10220
|
-
function checklistPath(projectRoot, sessionId) {
|
|
10221
|
-
return join(projectRoot, ".svamp", sessionId, "loop", "criteria.json");
|
|
10222
|
-
}
|
|
10223
|
-
function legacyChecklistPath(projectRoot, sessionId) {
|
|
10224
|
-
return join(projectRoot, ".svamp", sessionId, "criteria.json");
|
|
10225
|
-
}
|
|
10226
|
-
|
|
10227
|
-
function readChecklist(projectRoot, sessionId) {
|
|
10228
|
-
let p = checklistPath(projectRoot, sessionId);
|
|
10229
|
-
if (!existsSync(p)) {
|
|
10230
|
-
const legacy = legacyChecklistPath(projectRoot, sessionId);
|
|
10231
|
-
if (!existsSync(legacy)) return [];
|
|
10232
|
-
p = legacy;
|
|
10233
|
-
}
|
|
10234
|
-
try {
|
|
10235
|
-
const parsed = JSON.parse(readFileSync(p, "utf8"));
|
|
10236
|
-
return Array.isArray(parsed?.items) ? parsed.items : [];
|
|
10237
|
-
} catch {
|
|
10238
|
-
return [];
|
|
10239
|
-
}
|
|
10240
|
-
}
|
|
10241
|
-
function writeChecklist(projectRoot, sessionId, items) {
|
|
10242
|
-
const p = checklistPath(projectRoot, sessionId);
|
|
10243
|
-
mkdirSync(dirname(p), { recursive: true });
|
|
10244
|
-
const file = { version: 1, items, updatedAt: Date.now() };
|
|
10245
|
-
const tmp = p + ".tmp";
|
|
10246
|
-
writeFileSync(tmp, JSON.stringify(file, null, 2));
|
|
10247
|
-
renameSync(tmp, p);
|
|
10248
|
-
}
|
|
10249
|
-
function clearChecklist(projectRoot, sessionId) {
|
|
10250
|
-
const p = checklistPath(projectRoot, sessionId);
|
|
10251
|
-
try {
|
|
10252
|
-
if (existsSync(p)) rmSync(p);
|
|
10253
|
-
} catch {
|
|
10254
|
-
}
|
|
10255
|
-
}
|
|
10256
|
-
|
|
10257
10150
|
const FIELD_ORDER = ["id", "title", "status", "scope", "labels", "verify", "disposition", "triaged", "branch", "session", "original", "created", "closed"];
|
|
10258
10151
|
function resolveProjectRoot(start = process.cwd()) {
|
|
10259
10152
|
let dir = start;
|
|
@@ -11549,51 +11442,7 @@ Or verify and finish \u2014 an independent Stop gate re-checks before you can st
|
|
|
11549
11442
|
const { [_gateKey]: _drop, ...restPatch } = patch;
|
|
11550
11443
|
patch = restPatch;
|
|
11551
11444
|
}
|
|
11552
|
-
if ("checklist" in patch) {
|
|
11553
|
-
const raw = patch.checklist;
|
|
11554
|
-
const items = Array.isArray(raw) ? raw : [];
|
|
11555
|
-
const ccfg = patch.checklistConfig && typeof patch.checklistConfig === "object" ? patch.checklistConfig : {};
|
|
11556
|
-
const generalPrompt = typeof ccfg.prompt === "string" ? ccfg.prompt.trim() : "";
|
|
11557
|
-
if (items.length || generalPrompt) {
|
|
11558
|
-
const errs = items.length ? validateChecklist(items) : [];
|
|
11559
|
-
if (errs.length) {
|
|
11560
|
-
sessionService.pushMessage({ type: "message", message: `Checklist rejected: ${errs.join("; ")}`, level: "error" }, "event");
|
|
11561
|
-
} else {
|
|
11562
|
-
let checklistCriteria = "";
|
|
11563
|
-
let oracle;
|
|
11564
|
-
if (items.length) {
|
|
11565
|
-
writeChecklist(directory, sessionId, items);
|
|
11566
|
-
const compiled = compileChecklist(items);
|
|
11567
|
-
checklistCriteria = compiled.criteria;
|
|
11568
|
-
oracle = compiled.oracle;
|
|
11569
|
-
} else {
|
|
11570
|
-
clearChecklist(directory, sessionId);
|
|
11571
|
-
}
|
|
11572
|
-
const task = generalPrompt || checklistCriteria;
|
|
11573
|
-
const criteria = [generalPrompt, checklistCriteria].filter(Boolean).join("\n\n") || task;
|
|
11574
|
-
const maxIterations = typeof ccfg.maxIterations === "number" ? ccfg.maxIterations : typeof ccfg.max_iterations === "number" ? ccfg.max_iterations : 20;
|
|
11575
|
-
const evaluator = ccfg.evaluator !== false;
|
|
11576
|
-
const budget = parseLoopBudget(ccfg.budget);
|
|
11577
|
-
const ok = initLoop(directory, { task, criteria, oracle, maxIterations, evaluator, budget, sessionId });
|
|
11578
|
-
const s = summarize$1(items);
|
|
11579
|
-
if (ok) {
|
|
11580
|
-
const idle = getMetadata().lifecycleState === "idle";
|
|
11581
|
-
if (idle) {
|
|
11582
|
-
const q = getMetadata().messageQueue || [];
|
|
11583
|
-
const nudge = items.length ? `Your goal checklist was updated (${s.done}/${s.total} done). Work the open items in order; an independent Stop gate re-checks the criteria before you can stop.` : `Your loop goal was set. Work toward it; an independent Stop gate re-checks the criteria before you can stop.`;
|
|
11584
|
-
setMetadata((m) => ({ ...m, messageQueue: [...q, { id: randomUUID$1(), text: nudge, displayText: items.length ? `\u{1F4CB} Checklist updated` : `\u{1F501} Loop goal set`, createdAt: Date.now() }] }));
|
|
11585
|
-
onLoopActivated?.();
|
|
11586
|
-
}
|
|
11587
|
-
const msg = items.length ? `\u{1F4CB} Checklist set \u2014 ${s.total} item${s.total === 1 ? "" : "s"} (${s.delegated} delegated), ${s.done} done.` : `\u{1F501} Loop goal set.`;
|
|
11588
|
-
sessionService.pushMessage({ type: "message", message: msg }, "event");
|
|
11589
|
-
logger.log(`[svampConfig] Checklist set (${s.total} items, ${s.delegated} delegated, prompt=${generalPrompt ? "yes" : "no"})`);
|
|
11590
|
-
}
|
|
11591
|
-
}
|
|
11592
|
-
} else {
|
|
11593
|
-
clearChecklist(directory, sessionId);
|
|
11594
|
-
deactivateLoop(directory, sessionId);
|
|
11595
|
-
sessionService.pushMessage({ type: "message", message: "Checklist cleared." }, "event");
|
|
11596
|
-
}
|
|
11445
|
+
if ("checklist" in patch || "checklistConfig" in patch) {
|
|
11597
11446
|
const { checklist: _c, checklistConfig: _cc, ...restPatch } = patch;
|
|
11598
11447
|
patch = restPatch;
|
|
11599
11448
|
}
|
|
@@ -12025,7 +11874,7 @@ async function startDaemon(options) {
|
|
|
12025
11874
|
saveExposedTunnels(list);
|
|
12026
11875
|
}
|
|
12027
11876
|
async function createExposedTunnel(spec) {
|
|
12028
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
11877
|
+
const { FrpcTunnel } = await import('./frpc-bF6D2Qqh.mjs');
|
|
12029
11878
|
const tunnel = new FrpcTunnel({
|
|
12030
11879
|
name: spec.name,
|
|
12031
11880
|
ports: spec.ports,
|
|
@@ -12045,7 +11894,7 @@ async function startDaemon(options) {
|
|
|
12045
11894
|
return tunnel;
|
|
12046
11895
|
}
|
|
12047
11896
|
const tunnelRecreateState = /* @__PURE__ */ new Map();
|
|
12048
|
-
const { ServeManager } = await import('./serveManager-
|
|
11897
|
+
const { ServeManager } = await import('./serveManager-C5s6iQR9.mjs');
|
|
12049
11898
|
const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
|
|
12050
11899
|
ensureAutoInstalledSkills(logger).catch(() => {
|
|
12051
11900
|
});
|
|
@@ -15653,4 +15502,4 @@ var run = /*#__PURE__*/Object.freeze({
|
|
|
15653
15502
|
writeStopMarker: writeStopMarker
|
|
15654
15503
|
});
|
|
15655
15504
|
|
|
15656
|
-
export {
|
|
15505
|
+
export { describeMisconfiguration as $, getSkillsWorkspaceName as A, getSkillsCollectionName as B, fetchWithTimeout as C, searchSkills as D, SKILLS_DIR as E, getSkillInfo as F, downloadSkillFile as G, listSkillFiles as H, READ_ONLY_TOOLS as I, loadMachineContext as J, buildMachineInstructions as K, machineToolsForRole as L, buildMachineTools as M, resolveModel as N, formatHandle as O, normalizeAllowedUser as P, loadSecurityContextConfig as Q, RoutineStore as R, ServeAuth as S, resolveSecurityContext as T, buildSecurityContextFromFlags as U, mergeSecurityContexts as V, buildSessionShareUrl as W, computeOutboundHop as X, buildMachineShareUrl as Y, parseHandle as Z, handleMatchesMetadata as _, createSessionStore as a, buildMachineDeps as a0, composeSessionId as a1, generateFriendlyName as a2, generateHookSettings as a3, projectInfo as a4, DefaultTransport$1 as a5, acpBackend as a6, acpAgentConfig as a7, codexMcpBackend as a8, GeminiTransport$1 as a9, claudeAuth as aa, instanceConfig as ab, api as ac, run as ad, stopDaemon as b, connectToHypha as c, daemonStatus as d, clearStopMarker as e, stopMarkerExists as f, getHyphaServerUrl$1 as g, getFrpsSubdomainHost as h, getFrpsServerPort as i, getFrpsServerAddr as j, getHyphaServerUrl as k, hasCookieToken as l, resolveProjectRoot as m, searchIssues as n, listIssues as o, addComment as p, getIssue as q, registerMachineService as r, startDaemon as s, summarize as t, updateIssue as u, addIssue as v, RoutineRunner as w, shortId as x, parseFrontmatter as y, getSkillsServer as z };
|