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.
@@ -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 validateChecklist, _ as computeOutboundHop, w as shortId, $ as buildMachineShareUrl, a0 as summarize, a1 as newItem, a2 as parseHandle, a3 as handleMatchesMetadata } from './run-BeIP-YpD.mjs';
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 { checklistConfigPatch, collectAssistantResponse, connectAndGetMachine, connectAndResolveSession, createWorktree, generateWorktreeName, machineExec, machineInfo, machineLs, machineShare, mutateChecklistItems, parseShareArg, queryCore, renderMessage, resolveItemIds, resolveSessionId, sendCore, sessionApprove, sessionArchive, sessionAttach, sessionChecklist, 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 };
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-BeIP-YpD.mjs';
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-yYLA6w6t.mjs';
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, w as shortId } from './run-BeIP-YpD.mjs';
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 { execSync, execFileSync } from 'node:child_process';
1
+ import { execFileSync } from 'node:child_process';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { createServer } from 'node:http';
4
- import { M as readChecklist, N as compileChecklist, O as RoutineStore, P as RoutineRunner } from './run-BeIP-YpD.mjs';
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
- const res = verifyChecklistOracles(dir, target);
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-yYLA6w6t.mjs');
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-BeIP-YpD.mjs';
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-BeIP-YpD.mjs';
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 { L as resolveModel, a4 as describeMisconfiguration, a5 as buildMachineDeps } from './run-BeIP-YpD.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-6iHsRWJX.mjs';
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-BeIP-YpD.mjs';
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.167";
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-checklist.mjs && npx tsx test/test-checklist-cli.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-checklist-watchdog.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs",
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 { a6 as composeSessionId, a7 as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, a8 as generateHookSettings } from './run-BeIP-YpD.mjs';
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: "Create or replace the bound session's checklist (the loop's success criteria) and start the self-verifying loop. Each item is a concrete, checkable requirement. ONLY after the caller confirmed the proposal.",
489
+ 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 ? `Set a ${items.length}-item checklist and started the loop.` : `Could not set the checklist: ${r.error || "unknown error"}.`;
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 a tracked checklist (the loop's success criteria) and start the self-verifying loop, or stop a running loop (when granted). Each item is one concrete, checkable requirement (optional per-item oracle command). ALWAYS propose the items first and confirm before calling.
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 built = (items || []).filter((i) => i?.text && i.text.trim()).map((i, idx) => ({
1078
- id: `wise-${Date.now().toString(36)}-${idx}`,
1079
- text: i.text.trim(),
1080
- status: "todo",
1081
- disposition: "inline",
1082
- scope: "session",
1083
- ...i.oracle && i.oracle.trim() ? { verify: { type: "command", text: i.oracle.trim() }, oracle: i.oracle.trim() } : {}
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
- checklist: built,
1087
- checklistConfig: {
1088
- ...opts2?.prompt ? { prompt: opts2.prompt } : {},
1089
- maxIterations: opts2?.maxIterations ?? 20,
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: true };
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 (checklist watchdog) action requires a dir (the project root holding .svamp/<sid>/loop/criteria.json)");
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-Cd9N3gGU.mjs');
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-6iHsRWJX.mjs');
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-yYLA6w6t.mjs');
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-Cd9N3gGU.mjs');
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-Do0sF4Rz.mjs');
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 { buildMachineShareUrl as $, getSkillsCollectionName as A, fetchWithTimeout as B, searchSkills as C, SKILLS_DIR as D, getSkillInfo as E, downloadSkillFile as F, listSkillFiles as G, loadMachineContext as H, buildMachineInstructions as I, machineToolsForRole as J, buildMachineTools as K, resolveModel as L, readChecklist as M, compileChecklist as N, RoutineStore as O, RoutineRunner as P, formatHandle as Q, READ_ONLY_TOOLS as R, ServeAuth as S, normalizeAllowedUser as T, loadSecurityContextConfig as U, resolveSecurityContext as V, buildSecurityContextFromFlags as W, mergeSecurityContexts as X, buildSessionShareUrl as Y, validateChecklist as Z, computeOutboundHop as _, createSessionStore as a, summarize$1 as a0, newItem as a1, parseHandle as a2, handleMatchesMetadata as a3, describeMisconfiguration as a4, buildMachineDeps as a5, composeSessionId as a6, generateFriendlyName as a7, generateHookSettings as a8, projectInfo as a9, DefaultTransport$1 as aa, acpBackend as ab, acpAgentConfig as ac, codexMcpBackend as ad, GeminiTransport$1 as ae, claudeAuth as af, instanceConfig as ag, api as ah, run as ai, 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, shortId as w, parseFrontmatter as x, getSkillsServer as y, getSkillsWorkspaceName as z };
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 };