svamp-cli 0.2.165 → 0.2.167
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-BQUIj0L3.mjs → agentCommands-juw5_q8v.mjs} +5 -5
- package/dist/{auth-Nb44v13A.mjs → auth-DFU6j82G.mjs} +1 -1
- package/dist/cli.mjs +61 -61
- package/dist/{commands-PsObXuzm.mjs → commands-B9-jAYZy.mjs} +2 -2
- package/dist/{commands-fyFKlqCv.mjs → commands-BYEL5DqA.mjs} +1 -1
- package/dist/{commands-BQC2kAm0.mjs → commands-Bb4Sr_iq.mjs} +19 -1
- package/dist/{commands-Cc-98Ot6.mjs → commands-C2gVT2LM.mjs} +5 -5
- package/dist/{commands-mAHn_FPb.mjs → commands-CevXJKdi.mjs} +19 -1
- package/dist/{commands-DVA2p60j.mjs → commands-D_Hlxfog.mjs} +34 -3
- package/dist/{commands-BCr6iO_n.mjs → commands-Jm-BUsrf.mjs} +2 -2
- package/dist/{commands-D2Zpi3G8.mjs → commands-yYLA6w6t.mjs} +1 -1
- package/dist/{fleet-BgpaxJ3S.mjs → fleet-DGWqm1_M.mjs} +1 -1
- package/dist/{frpc-BbpARLqP.mjs → frpc-Cd9N3gGU.mjs} +1 -1
- package/dist/{headlessCli-BQKqriom.mjs → headlessCli-BlKUictN.mjs} +2 -2
- package/dist/{httpServer-B8C1P8IL.mjs → httpServer-COU4szUc.mjs} +11 -0
- package/dist/index.mjs +1 -1
- package/dist/{package-1hBv_QRg.mjs → package-CrzrTOTn.mjs} +2 -2
- package/dist/{run-Dfj1qf30.mjs → run-BOdCp1Ru.mjs} +1 -1
- package/dist/{run-KCqpMQJZ.mjs → run-BeIP-YpD.mjs} +250 -37
- package/dist/{serveCommands-DMfzU2xe.mjs → serveCommands-BoV_jArl.mjs} +5 -5
- package/dist/{serveManager-fwaBwmlm.mjs → serveManager-Do0sF4Rz.mjs} +2 -2
- package/dist/{sideband-XblR5fr5.mjs → sideband-6iHsRWJX.mjs} +1 -1
- package/package.json +2 -2
- package/dist/store-BQxdRyuI.mjs +0 -188
|
@@ -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-yYLA6w6t.mjs';
|
|
3
3
|
import { execSync } from 'node:child_process';
|
|
4
|
-
import {
|
|
4
|
+
import { u as updateIssue, p as addComment, v as addIssue, w as shortId } from './run-BeIP-YpD.mjs';
|
|
5
5
|
import 'node:path';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'os';
|
|
@@ -191,6 +191,36 @@ async function featureStart(brief, opts = {}) {
|
|
|
191
191
|
process.exit(1);
|
|
192
192
|
}
|
|
193
193
|
const childId = result.sessionId;
|
|
194
|
+
try {
|
|
195
|
+
let linkedId = opts.issueId;
|
|
196
|
+
if (linkedId) {
|
|
197
|
+
const u = updateIssue(projectRoot, linkedId, { disposition: "crew", session: childId, branch: wt.branch, status: "in_progress" });
|
|
198
|
+
if (!u) {
|
|
199
|
+
console.warn(`Note: issue ${linkedId} not found \u2014 creating a new crew issue instead.`);
|
|
200
|
+
linkedId = void 0;
|
|
201
|
+
} else {
|
|
202
|
+
addComment(projectRoot, u.id, `Delegated to crew child ${childId.slice(0, 8)} on \`${wt.branch}\` (base \`${base}\`).`);
|
|
203
|
+
linkedId = u.id;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (!linkedId) {
|
|
207
|
+
const created = addIssue(projectRoot, {
|
|
208
|
+
title: brief.trim().split("\n")[0].slice(0, 80),
|
|
209
|
+
status: "in_progress",
|
|
210
|
+
disposition: "crew",
|
|
211
|
+
triaged: true,
|
|
212
|
+
session: childId,
|
|
213
|
+
scope: "project",
|
|
214
|
+
...opts.oracle?.trim() ? { verify: { type: "command", text: opts.oracle.trim() } } : {},
|
|
215
|
+
body: brief.trim()
|
|
216
|
+
});
|
|
217
|
+
updateIssue(projectRoot, created.id, { branch: wt.branch });
|
|
218
|
+
linkedId = created.id;
|
|
219
|
+
}
|
|
220
|
+
console.log(` issue: #${linkedId} (crew, child ${childId.slice(0, 8)})`);
|
|
221
|
+
} catch (e) {
|
|
222
|
+
console.warn(`Note: could not link a crew issue (${e.message}).`);
|
|
223
|
+
}
|
|
194
224
|
if (!lead.metadata?.crew) {
|
|
195
225
|
try {
|
|
196
226
|
await rpc(machine, lead.sessionId, "updateConfig", { patch: { crew: { role: "lead" } } });
|
|
@@ -470,7 +500,7 @@ async function crewCommand(args) {
|
|
|
470
500
|
return;
|
|
471
501
|
}
|
|
472
502
|
if (sub === "start") {
|
|
473
|
-
const valueFlags = ["--oracle", "--base", "--action", "--max", "--dir", "-d", "--lead", "-m", "--machine"];
|
|
503
|
+
const valueFlags = ["--oracle", "--base", "--action", "--max", "--dir", "-d", "--lead", "-m", "--machine", "--issue"];
|
|
474
504
|
const brief = positionals(rest, valueFlags).join(" ");
|
|
475
505
|
const maxStr = flag(rest, "--max");
|
|
476
506
|
const action = flag(rest, "--action");
|
|
@@ -480,6 +510,7 @@ async function crewCommand(args) {
|
|
|
480
510
|
directory: flag(rest, "--dir", "-d"),
|
|
481
511
|
oracle: flag(rest, "--oracle"),
|
|
482
512
|
baseBranch: flag(rest, "--base"),
|
|
513
|
+
issueId: flag(rest, "--issue"),
|
|
483
514
|
action: action === "block" ? "block" : action === "nudge" ? "nudge" : void 0,
|
|
484
515
|
maxRounds: maxStr ? parseInt(maxStr, 10) : void 0
|
|
485
516
|
});
|
|
@@ -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-yYLA6w6t.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-BeIP-YpD.mjs';
|
|
9
9
|
import 'os';
|
|
10
10
|
import 'fs/promises';
|
|
11
11
|
import 'url';
|
|
@@ -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 { 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';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -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-BeIP-YpD.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-BeIP-YpD.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 { L as resolveModel, a4 as describeMisconfiguration, a5 as buildMachineDeps } from './run-BeIP-YpD.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-6iHsRWJX.mjs';
|
|
3
3
|
import { WebSocket } from 'ws';
|
|
4
4
|
import { execSync, spawn } from 'child_process';
|
|
5
5
|
import 'os';
|
|
@@ -121,6 +121,17 @@ data: ${JSON.stringify({ error: out.error })}
|
|
|
121
121
|
}
|
|
122
122
|
return;
|
|
123
123
|
}
|
|
124
|
+
m = u.pathname.match(/^\/channel\/([\w.-]+)\/profile$/);
|
|
125
|
+
if (m) {
|
|
126
|
+
const rpc2 = await findOwner(deps, m[1]);
|
|
127
|
+
if (!rpc2?.channelGetProfile) {
|
|
128
|
+
json(404, { error: "channel not found" });
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const out = await rpc2.channelGetProfile({ channel: m[1], key: keyOf(), from: u.searchParams.get("from") || void 0 });
|
|
132
|
+
json(out?.error ? out.error === "channel not found" ? 404 : 401 : 200, out);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
124
135
|
m = u.pathname.match(/^\/channel\/([\w.-]+)\/tool$/);
|
|
125
136
|
if (m) {
|
|
126
137
|
const cid = m[1];
|
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-BeIP-YpD.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.167";
|
|
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",
|
|
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",
|
|
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 { a6 as composeSessionId, a7 as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, a8 as generateHookSettings } from './run-BeIP-YpD.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';
|
|
@@ -972,6 +972,21 @@ function makeHttpTransport(resolved, fetchImpl = fetch) {
|
|
|
972
972
|
};
|
|
973
973
|
}
|
|
974
974
|
|
|
975
|
+
function toSchema(t) {
|
|
976
|
+
return { name: t.name, description: t.description, parameters: t.parameters || { type: "object", properties: {} } };
|
|
977
|
+
}
|
|
978
|
+
async function buildWiseProfile(deps, config, opts) {
|
|
979
|
+
const ctx = opts?.ctx ?? await loadWiseAgentContext(deps, config);
|
|
980
|
+
const instructions = buildWiseAgentInstructions(ctx, config);
|
|
981
|
+
const gated = gateTools(buildTools(deps, ctx.skills), config, opts?.sender || "caller");
|
|
982
|
+
return {
|
|
983
|
+
instructions,
|
|
984
|
+
skills: ctx.skills.map((s) => ({ name: s.name, description: s.description })),
|
|
985
|
+
tools: gated.map(toSchema),
|
|
986
|
+
projectInstructions: ctx.projectInstructions
|
|
987
|
+
};
|
|
988
|
+
}
|
|
989
|
+
|
|
975
990
|
let _testTransport;
|
|
976
991
|
function resolveWiseTransport(config, env) {
|
|
977
992
|
const resolved = resolveModel(config, env);
|
|
@@ -2772,7 +2787,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
2772
2787
|
const tunnels = handlers.tunnels;
|
|
2773
2788
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
2774
2789
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
2775
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
2790
|
+
const { FrpcTunnel } = await import('./frpc-Cd9N3gGU.mjs');
|
|
2776
2791
|
const tunnel = new FrpcTunnel({
|
|
2777
2792
|
name: params.name,
|
|
2778
2793
|
ports: params.ports,
|
|
@@ -3213,7 +3228,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3213
3228
|
}
|
|
3214
3229
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
3215
3230
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
3216
|
-
const { toolsForRole } = await import('./sideband-
|
|
3231
|
+
const { toolsForRole } = await import('./sideband-6iHsRWJX.mjs');
|
|
3217
3232
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
3218
3233
|
return fmt(r2);
|
|
3219
3234
|
}
|
|
@@ -3312,7 +3327,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
3312
3327
|
if (r.error || !r.sender) return { error: r.error || "unauthorized" };
|
|
3313
3328
|
const callId = "call_" + Math.random().toString(16).slice(2, 12);
|
|
3314
3329
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
3315
|
-
const { queryCore } = await import('./commands-
|
|
3330
|
+
const { queryCore } = await import('./commands-yYLA6w6t.mjs');
|
|
3316
3331
|
const timeout = c.reply?.timeout_sec || 120;
|
|
3317
3332
|
let result;
|
|
3318
3333
|
try {
|
|
@@ -4391,6 +4406,31 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
|
|
|
4391
4406
|
return { error: e?.message || String(e) };
|
|
4392
4407
|
}
|
|
4393
4408
|
},
|
|
4409
|
+
channelGetProfile: async (params, context) => {
|
|
4410
|
+
const c = channelStore.get(params.channel);
|
|
4411
|
+
if (!c || c.enabled === false) return { error: "channel not found" };
|
|
4412
|
+
const u = context?.user;
|
|
4413
|
+
const r = resolveSender(c, {
|
|
4414
|
+
key: params.key,
|
|
4415
|
+
from: params.from,
|
|
4416
|
+
hyphaUser: u && u.is_anonymous !== true ? u.email || u.id : void 0,
|
|
4417
|
+
hyphaAnonymous: u?.is_anonymous === true,
|
|
4418
|
+
hyphaWorkspace: u?.scope?.current_workspace
|
|
4419
|
+
});
|
|
4420
|
+
if (r.error || !r.sender) return { error: r.error || "unauthorized" };
|
|
4421
|
+
try {
|
|
4422
|
+
const agentConfig = c.action?.kind === "agent" ? c.action.agent || {} : {};
|
|
4423
|
+
const deps = buildSessionDeps(rpcHandlers, {
|
|
4424
|
+
cwd: metadata.path,
|
|
4425
|
+
ownerEmail: metadata.sharing?.owner,
|
|
4426
|
+
status: () => ({ thinking: lastActivity.thinking, sessionId })
|
|
4427
|
+
});
|
|
4428
|
+
const profile = await buildWiseProfile(deps, agentConfig, { sender: r.sender.name });
|
|
4429
|
+
return { ok: true, instructions: profile.instructions, projectInstructions: profile.projectInstructions, skills: profile.skills, tools: profile.tools };
|
|
4430
|
+
} catch (e) {
|
|
4431
|
+
return { error: e?.message || String(e) };
|
|
4432
|
+
}
|
|
4433
|
+
},
|
|
4394
4434
|
channelDescribe: async (id) => {
|
|
4395
4435
|
const c = channelStore.get(id);
|
|
4396
4436
|
if (!c || c.enabled === false || c.system) return { error: "not found" };
|
|
@@ -5415,7 +5455,7 @@ function classifyInbound(message, now = Date.now()) {
|
|
|
5415
5455
|
return { action: "wake", reason: "urgent", breakerTripped: tripped };
|
|
5416
5456
|
}
|
|
5417
5457
|
|
|
5418
|
-
function resolveProjectRoot(directory) {
|
|
5458
|
+
function resolveProjectRoot$1(directory) {
|
|
5419
5459
|
try {
|
|
5420
5460
|
const top = execSync("git rev-parse --show-toplevel", {
|
|
5421
5461
|
cwd: directory,
|
|
@@ -5427,10 +5467,10 @@ function resolveProjectRoot(directory) {
|
|
|
5427
5467
|
return directory.replace(/[/\\]+$/, "") || directory;
|
|
5428
5468
|
}
|
|
5429
5469
|
function projectInfoPath(directory) {
|
|
5430
|
-
return join(resolveProjectRoot(directory), ".svamp", "project.json");
|
|
5470
|
+
return join(resolveProjectRoot$1(directory), ".svamp", "project.json");
|
|
5431
5471
|
}
|
|
5432
5472
|
function projectName(directory) {
|
|
5433
|
-
return basename(resolveProjectRoot(directory).replace(/[/\\]+$/, "")) || "project";
|
|
5473
|
+
return basename(resolveProjectRoot$1(directory).replace(/[/\\]+$/, "")) || "project";
|
|
5434
5474
|
}
|
|
5435
5475
|
function readProjectInfo(directory) {
|
|
5436
5476
|
try {
|
|
@@ -5457,7 +5497,7 @@ function sanitizeDescription(raw, maxLen = 240) {
|
|
|
5457
5497
|
return t || null;
|
|
5458
5498
|
}
|
|
5459
5499
|
function extractDescriptionFromDocs(directory) {
|
|
5460
|
-
const root = resolveProjectRoot(directory);
|
|
5500
|
+
const root = resolveProjectRoot$1(directory);
|
|
5461
5501
|
const candidates = [
|
|
5462
5502
|
[join(root, "CLAUDE.md"), "claude.md"],
|
|
5463
5503
|
[join(root, "README.md"), "readme"],
|
|
@@ -5501,7 +5541,7 @@ var projectInfo = /*#__PURE__*/Object.freeze({
|
|
|
5501
5541
|
projectInfoPath: projectInfoPath,
|
|
5502
5542
|
projectName: projectName,
|
|
5503
5543
|
readProjectInfo: readProjectInfo,
|
|
5504
|
-
resolveProjectRoot: resolveProjectRoot,
|
|
5544
|
+
resolveProjectRoot: resolveProjectRoot$1,
|
|
5505
5545
|
sanitizeDescription: sanitizeDescription,
|
|
5506
5546
|
writeProjectInfo: writeProjectInfo
|
|
5507
5547
|
});
|
|
@@ -10127,7 +10167,7 @@ function renderCriteria(items) {
|
|
|
10127
10167
|
}
|
|
10128
10168
|
return `- [${STATUS_TO_MARKER[it.status] ?? " "}] ${it.text}${tag}${how}`;
|
|
10129
10169
|
});
|
|
10130
|
-
const { done, total } = summarize(items);
|
|
10170
|
+
const { done, total } = summarize$1(items);
|
|
10131
10171
|
return `Success criteria \u2014 drive this checklist to all-done (${done}/${total}):
|
|
10132
10172
|
${lines.join("\n")}`;
|
|
10133
10173
|
}
|
|
@@ -10137,22 +10177,6 @@ function compileChecklist(items) {
|
|
|
10137
10177
|
const oracle = oracleItem && oracleItem.eval?.type === "oracle" ? oracleItem.eval.cmd : void 0;
|
|
10138
10178
|
return { criteria, ...oracle ? { oracle } : {} };
|
|
10139
10179
|
}
|
|
10140
|
-
function routeVerdictToChecklist(items, v) {
|
|
10141
|
-
let matched = false;
|
|
10142
|
-
const next = items.map((it) => {
|
|
10143
|
-
if (it.child?.sessionId && it.child.sessionId === v.sessionId) {
|
|
10144
|
-
matched = true;
|
|
10145
|
-
return applyVerdict(it, v);
|
|
10146
|
-
}
|
|
10147
|
-
return it;
|
|
10148
|
-
});
|
|
10149
|
-
return { items: next, matched };
|
|
10150
|
-
}
|
|
10151
|
-
function applyVerdict(item, v) {
|
|
10152
|
-
const lastVerdict = { verdict: v.verdict, ...v.guidance ? { guidance: v.guidance } : {}, round: v.round, ts: v.ts };
|
|
10153
|
-
if (v.verdict === "approved") return { ...item, status: "done", doneAt: Date.parse(v.ts) || item.createdAt, lastVerdict };
|
|
10154
|
-
return { ...item, status: "rework", lastVerdict };
|
|
10155
|
-
}
|
|
10156
10180
|
const VALID_STATUS = /* @__PURE__ */ new Set(["todo", "active", "verifying", "awaiting_review", "rework", "blocked", "done"]);
|
|
10157
10181
|
function validateChecklist(items) {
|
|
10158
10182
|
const errs = [];
|
|
@@ -10168,7 +10192,7 @@ function validateChecklist(items) {
|
|
|
10168
10192
|
}
|
|
10169
10193
|
return errs;
|
|
10170
10194
|
}
|
|
10171
|
-
function summarize(items) {
|
|
10195
|
+
function summarize$1(items) {
|
|
10172
10196
|
const by = (s) => items.filter((i) => i.status === s).length;
|
|
10173
10197
|
const done = by("done");
|
|
10174
10198
|
return {
|
|
@@ -10229,11 +10253,196 @@ function clearChecklist(projectRoot, sessionId) {
|
|
|
10229
10253
|
} catch {
|
|
10230
10254
|
}
|
|
10231
10255
|
}
|
|
10232
|
-
|
|
10233
|
-
|
|
10234
|
-
|
|
10256
|
+
|
|
10257
|
+
const FIELD_ORDER = ["id", "title", "status", "scope", "labels", "verify", "disposition", "triaged", "branch", "session", "original", "created", "closed"];
|
|
10258
|
+
function resolveProjectRoot(start = process.cwd()) {
|
|
10259
|
+
let dir = start;
|
|
10260
|
+
for (let i = 0; i < 40; i++) {
|
|
10261
|
+
if (existsSync(join(dir, ".git")) || existsSync(join(dir, ".svamp"))) return dir;
|
|
10262
|
+
const parent = dirname(dir);
|
|
10263
|
+
if (parent === dir) break;
|
|
10264
|
+
dir = parent;
|
|
10265
|
+
}
|
|
10266
|
+
return start;
|
|
10267
|
+
}
|
|
10268
|
+
function issuesDir(projectRoot) {
|
|
10269
|
+
return join(projectRoot, ".svamp", "issues");
|
|
10270
|
+
}
|
|
10271
|
+
function archiveDir(projectRoot) {
|
|
10272
|
+
return join(issuesDir(projectRoot), "archive");
|
|
10273
|
+
}
|
|
10274
|
+
function issuePath(projectRoot, id, archived = false) {
|
|
10275
|
+
return join(archived ? archiveDir(projectRoot) : issuesDir(projectRoot), `${id}.md`);
|
|
10276
|
+
}
|
|
10277
|
+
function serializeIssue(issue) {
|
|
10278
|
+
const lines = ["---"];
|
|
10279
|
+
for (const k of FIELD_ORDER) {
|
|
10280
|
+
const v = issue[k];
|
|
10281
|
+
if (v === void 0) continue;
|
|
10282
|
+
lines.push(`${k}: ${JSON.stringify(v)}`);
|
|
10283
|
+
}
|
|
10284
|
+
lines.push("---", "");
|
|
10285
|
+
return lines.join("\n") + (issue.body ? issue.body.replace(/\s+$/, "") + "\n" : "");
|
|
10286
|
+
}
|
|
10287
|
+
function parseIssue(content) {
|
|
10288
|
+
const m = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
|
|
10289
|
+
if (!m) return null;
|
|
10290
|
+
const fm = {};
|
|
10291
|
+
for (const line of m[1].split("\n")) {
|
|
10292
|
+
const idx = line.indexOf(": ");
|
|
10293
|
+
if (idx === -1) continue;
|
|
10294
|
+
const key = line.slice(0, idx).trim();
|
|
10295
|
+
const raw = line.slice(idx + 2).trim();
|
|
10296
|
+
try {
|
|
10297
|
+
fm[key] = JSON.parse(raw);
|
|
10298
|
+
} catch {
|
|
10299
|
+
fm[key] = raw;
|
|
10300
|
+
}
|
|
10301
|
+
}
|
|
10302
|
+
if (!fm.id) return null;
|
|
10303
|
+
return {
|
|
10304
|
+
id: String(fm.id),
|
|
10305
|
+
title: String(fm.title ?? ""),
|
|
10306
|
+
status: fm.status ?? "backlog",
|
|
10307
|
+
scope: fm.scope ?? "session",
|
|
10308
|
+
labels: Array.isArray(fm.labels) ? fm.labels.map(String) : [],
|
|
10309
|
+
verify: fm.verify ?? null,
|
|
10310
|
+
disposition: fm.disposition === "crew" ? "crew" : "inline",
|
|
10311
|
+
triaged: fm.triaged === true,
|
|
10312
|
+
branch: fm.branch ?? null,
|
|
10313
|
+
session: fm.session ?? null,
|
|
10314
|
+
original: fm.original ?? null,
|
|
10315
|
+
created: String(fm.created ?? (/* @__PURE__ */ new Date()).toISOString()),
|
|
10316
|
+
closed: fm.closed ?? null,
|
|
10317
|
+
body: (m[2] || "").trim() || void 0
|
|
10318
|
+
};
|
|
10319
|
+
}
|
|
10320
|
+
function readDir(dir) {
|
|
10321
|
+
if (!existsSync(dir)) return [];
|
|
10322
|
+
const out = [];
|
|
10323
|
+
for (const name of readdirSync(dir)) {
|
|
10324
|
+
if (!name.endsWith(".md")) continue;
|
|
10325
|
+
try {
|
|
10326
|
+
const issue = parseIssue(readFileSync(join(dir, name), "utf-8"));
|
|
10327
|
+
if (issue) out.push(issue);
|
|
10328
|
+
} catch {
|
|
10329
|
+
}
|
|
10330
|
+
}
|
|
10331
|
+
return out;
|
|
10332
|
+
}
|
|
10333
|
+
function listIssues(projectRoot, opts = {}) {
|
|
10334
|
+
let items = readDir(issuesDir(projectRoot));
|
|
10335
|
+
if (opts.includeArchived) items = items.concat(readDir(archiveDir(projectRoot)));
|
|
10336
|
+
if (opts.status) items = items.filter((i) => i.status === opts.status);
|
|
10337
|
+
if (opts.label) items = items.filter((i) => i.labels.includes(opts.label));
|
|
10338
|
+
if (opts.scope) items = items.filter((i) => i.scope === opts.scope);
|
|
10339
|
+
return items.sort((a, b) => Number(a.id) - Number(b.id));
|
|
10340
|
+
}
|
|
10341
|
+
function getIssue(projectRoot, id) {
|
|
10342
|
+
const padded = /^\d+$/.test(id) ? id.padStart(4, "0") : id;
|
|
10343
|
+
for (const p of [issuePath(projectRoot, padded), issuePath(projectRoot, padded, true)]) {
|
|
10344
|
+
if (existsSync(p)) {
|
|
10345
|
+
try {
|
|
10346
|
+
return parseIssue(readFileSync(p, "utf-8"));
|
|
10347
|
+
} catch {
|
|
10348
|
+
return null;
|
|
10349
|
+
}
|
|
10350
|
+
}
|
|
10351
|
+
}
|
|
10352
|
+
return null;
|
|
10353
|
+
}
|
|
10354
|
+
function atomicWrite(path, content) {
|
|
10355
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
10356
|
+
const tmp = `${path}.tmp-${process.pid}`;
|
|
10357
|
+
writeFileSync(tmp, content);
|
|
10358
|
+
renameSync(tmp, path);
|
|
10359
|
+
}
|
|
10360
|
+
function nextId(projectRoot) {
|
|
10361
|
+
const all = listIssues(projectRoot, { includeArchived: true });
|
|
10362
|
+
const max = all.reduce((acc, i) => Math.max(acc, Number(i.id) || 0), 0);
|
|
10363
|
+
return String(max + 1).padStart(4, "0");
|
|
10364
|
+
}
|
|
10365
|
+
function addIssue(projectRoot, fields) {
|
|
10366
|
+
const issue = {
|
|
10367
|
+
id: nextId(projectRoot),
|
|
10368
|
+
title: fields.title.trim(),
|
|
10369
|
+
status: fields.status ?? "backlog",
|
|
10370
|
+
scope: fields.scope ?? "session",
|
|
10371
|
+
labels: fields.labels ?? [],
|
|
10372
|
+
verify: fields.verify ?? null,
|
|
10373
|
+
disposition: fields.disposition ?? "inline",
|
|
10374
|
+
triaged: fields.triaged ?? false,
|
|
10375
|
+
branch: null,
|
|
10376
|
+
session: fields.session ?? null,
|
|
10377
|
+
original: fields.original ?? null,
|
|
10378
|
+
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
10379
|
+
closed: null,
|
|
10380
|
+
body: fields.body
|
|
10381
|
+
};
|
|
10382
|
+
atomicWrite(issuePath(projectRoot, issue.id), serializeIssue(issue));
|
|
10383
|
+
return issue;
|
|
10384
|
+
}
|
|
10385
|
+
function updateIssue(projectRoot, id, patch) {
|
|
10386
|
+
const cur = getIssue(projectRoot, id);
|
|
10387
|
+
if (!cur) return null;
|
|
10388
|
+
const wasArchived = cur.status === "archived";
|
|
10389
|
+
const next = { ...cur, ...patch, id: cur.id };
|
|
10390
|
+
const nowArchived = next.status === "archived";
|
|
10391
|
+
if ((next.status === "done" || nowArchived) && !next.closed) next.closed = (/* @__PURE__ */ new Date()).toISOString();
|
|
10392
|
+
if (next.status !== "done" && !nowArchived) next.closed = null;
|
|
10393
|
+
atomicWrite(issuePath(projectRoot, next.id, nowArchived), serializeIssue(next));
|
|
10394
|
+
if (wasArchived !== nowArchived) {
|
|
10395
|
+
const oldPath = issuePath(projectRoot, cur.id, wasArchived);
|
|
10396
|
+
try {
|
|
10397
|
+
if (existsSync(oldPath)) unlinkSync(oldPath);
|
|
10398
|
+
} catch {
|
|
10399
|
+
}
|
|
10400
|
+
}
|
|
10235
10401
|
return next;
|
|
10236
10402
|
}
|
|
10403
|
+
function addComment(projectRoot, id, text) {
|
|
10404
|
+
const cur = getIssue(projectRoot, id);
|
|
10405
|
+
if (!cur || !text.trim()) return cur;
|
|
10406
|
+
const entry = `
|
|
10407
|
+
|
|
10408
|
+
---
|
|
10409
|
+
**Follow-up \xB7 ${(/* @__PURE__ */ new Date()).toISOString()}**
|
|
10410
|
+
|
|
10411
|
+
${text.trim()}`;
|
|
10412
|
+
const body = (cur.body ? cur.body.replace(/\s+$/, "") : "") + entry;
|
|
10413
|
+
return updateIssue(projectRoot, id, { body });
|
|
10414
|
+
}
|
|
10415
|
+
function routeCrewVerdict(projectRoot, childSessionId, v) {
|
|
10416
|
+
const linked = listIssues(projectRoot, { includeArchived: true }).find((i) => i.disposition === "crew" && i.session === childSessionId);
|
|
10417
|
+
if (!linked) return null;
|
|
10418
|
+
const meta = [v.round != null ? `round ${v.round}` : "", v.judge ? `judge:${v.judge}` : ""].filter(Boolean).join(", ");
|
|
10419
|
+
addComment(projectRoot, linked.id, `Crew child ${childSessionId.slice(0, 8)} \u2192 ${v.verdict}${meta ? ` (${meta})` : ""}.${v.guidance ? " " + v.guidance : ""}`);
|
|
10420
|
+
return v.verdict === "approved" ? updateIssue(projectRoot, linked.id, { status: "done" }) ?? null : getIssue(projectRoot, linked.id);
|
|
10421
|
+
}
|
|
10422
|
+
function searchIssues(projectRoot, query) {
|
|
10423
|
+
const q = query.trim();
|
|
10424
|
+
if (!q) return [];
|
|
10425
|
+
try {
|
|
10426
|
+
const out = execFileSync("rg", ["-l", "-i", "--no-messages", q, issuesDir(projectRoot)], { encoding: "utf-8" });
|
|
10427
|
+
const files = out.split("\n").filter(Boolean);
|
|
10428
|
+
const issues = [];
|
|
10429
|
+
for (const f of files) {
|
|
10430
|
+
try {
|
|
10431
|
+
const i = parseIssue(readFileSync(f, "utf-8"));
|
|
10432
|
+
if (i) issues.push(i);
|
|
10433
|
+
} catch {
|
|
10434
|
+
}
|
|
10435
|
+
}
|
|
10436
|
+
return issues.sort((a, b) => Number(a.id) - Number(b.id));
|
|
10437
|
+
} catch {
|
|
10438
|
+
const ql = q.toLowerCase();
|
|
10439
|
+
return listIssues(projectRoot, { includeArchived: true }).filter((i) => i.title.toLowerCase().includes(ql) || (i.body || "").toLowerCase().includes(ql) || i.labels.some((l) => l.toLowerCase().includes(ql)));
|
|
10440
|
+
}
|
|
10441
|
+
}
|
|
10442
|
+
function summarize(issues) {
|
|
10443
|
+
const by = (s) => issues.filter((i) => i.status === s).length;
|
|
10444
|
+
return { total: issues.length, backlog: by("backlog"), ready: by("ready"), in_progress: by("in_progress"), done: by("done"), archived: by("archived") };
|
|
10445
|
+
}
|
|
10237
10446
|
|
|
10238
10447
|
const OAUTH_TOKEN_ENDPOINT = "https://platform.claude.com/v1/oauth/token";
|
|
10239
10448
|
const OAUTH_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
@@ -11366,7 +11575,7 @@ Or verify and finish \u2014 an independent Stop gate re-checks before you can st
|
|
|
11366
11575
|
const evaluator = ccfg.evaluator !== false;
|
|
11367
11576
|
const budget = parseLoopBudget(ccfg.budget);
|
|
11368
11577
|
const ok = initLoop(directory, { task, criteria, oracle, maxIterations, evaluator, budget, sessionId });
|
|
11369
|
-
const s = summarize(items);
|
|
11578
|
+
const s = summarize$1(items);
|
|
11370
11579
|
if (ok) {
|
|
11371
11580
|
const idle = getMetadata().lifecycleState === "idle";
|
|
11372
11581
|
if (idle) {
|
|
@@ -11816,7 +12025,7 @@ async function startDaemon(options) {
|
|
|
11816
12025
|
saveExposedTunnels(list);
|
|
11817
12026
|
}
|
|
11818
12027
|
async function createExposedTunnel(spec) {
|
|
11819
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
12028
|
+
const { FrpcTunnel } = await import('./frpc-Cd9N3gGU.mjs');
|
|
11820
12029
|
const tunnel = new FrpcTunnel({
|
|
11821
12030
|
name: spec.name,
|
|
11822
12031
|
ports: spec.ports,
|
|
@@ -11836,7 +12045,7 @@ async function startDaemon(options) {
|
|
|
11836
12045
|
return tunnel;
|
|
11837
12046
|
}
|
|
11838
12047
|
const tunnelRecreateState = /* @__PURE__ */ new Map();
|
|
11839
|
-
const { ServeManager } = await import('./serveManager-
|
|
12048
|
+
const { ServeManager } = await import('./serveManager-Do0sF4Rz.mjs');
|
|
11840
12049
|
const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
|
|
11841
12050
|
ensureAutoInstalledSkills(logger).catch(() => {
|
|
11842
12051
|
});
|
|
@@ -11898,9 +12107,13 @@ ${v.guidance ? v.guidance + "\n" : ""}Criteria: ${v.criteria || "(none)"}
|
|
|
11898
12107
|
})).catch(() => {
|
|
11899
12108
|
});
|
|
11900
12109
|
try {
|
|
11901
|
-
if (parent?.directory) {
|
|
11902
|
-
const
|
|
11903
|
-
|
|
12110
|
+
if (parent?.directory && (v.verdict === "approved" || v.verdict === "rework")) {
|
|
12111
|
+
const linked = routeCrewVerdict(
|
|
12112
|
+
parent.directory,
|
|
12113
|
+
v.sessionId,
|
|
12114
|
+
{ verdict: v.verdict, guidance: v.guidance, round: v.round, judge: v.judge }
|
|
12115
|
+
);
|
|
12116
|
+
if (linked) logger.log(`[supervision] routed '${v.verdict}' onto parent ${parentId.slice(0, 8)} issue #${linked.id}`);
|
|
11904
12117
|
}
|
|
11905
12118
|
} catch {
|
|
11906
12119
|
}
|
|
@@ -14615,7 +14828,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
14615
14828
|
const channelHttpPort = Number(process.env.SVAMP_CHANNEL_HTTP_PORT) || 0;
|
|
14616
14829
|
if (channelHttpPort > 0) {
|
|
14617
14830
|
try {
|
|
14618
|
-
const { createChannelHttpServer } = await import('./httpServer-
|
|
14831
|
+
const { createChannelHttpServer } = await import('./httpServer-COU4szUc.mjs');
|
|
14619
14832
|
const channelHttpServer = createChannelHttpServer({
|
|
14620
14833
|
getSessionIds: () => {
|
|
14621
14834
|
const ids = [];
|
|
@@ -15440,4 +15653,4 @@ var run = /*#__PURE__*/Object.freeze({
|
|
|
15440
15653
|
writeStopMarker: writeStopMarker
|
|
15441
15654
|
});
|
|
15442
15655
|
|
|
15443
|
-
export {
|
|
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 };
|
|
@@ -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-yYLA6w6t.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-yYLA6w6t.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-yYLA6w6t.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-yYLA6w6t.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-yYLA6w6t.mjs');
|
|
239
239
|
const { machine, server } = await connectAndGetMachine(machineId);
|
|
240
240
|
try {
|
|
241
241
|
const info = await machine.serveInfo();
|