svamp-cli 0.2.309 → 0.2.310
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/{adminCommands-BTLHQXmA.mjs → adminCommands-BcH3OlSL.mjs} +1 -1
- package/dist/{agentCommands-DdNUACV8.mjs → agentCommands-9GHpj3mp.mjs} +5 -5
- package/dist/{auth-Bn8TbaOP.mjs → auth-CuN-K8i9.mjs} +1 -1
- package/dist/{cli-BaDWWDiz.mjs → cli-Co_GXbrT.mjs} +70 -70
- package/dist/cli.mjs +2 -2
- package/dist/{commands-C2u988x1.mjs → commands-B0cRa6cc.mjs} +2 -2
- package/dist/{commands-BTN9XxVx.mjs → commands-D-RsuMqs.mjs} +1 -1
- package/dist/{commands-DPvy0iVT.mjs → commands-DBiIsRQ_.mjs} +1 -1
- package/dist/{commands-r86haNJD.mjs → commands-DiuHHJ6r.mjs} +2 -2
- package/dist/{commands-DGbLwT_h.mjs → commands-DrVsg0Q1.mjs} +8 -8
- package/dist/{commands-BPgxgkXW.mjs → commands-DuLlH97k.mjs} +2 -2
- package/dist/{commands-2uOorIjB.mjs → commands-Dx4S6f_G.mjs} +1 -1
- package/dist/{commands-Bb0oF3eZ.mjs → commands-Eo0kocpm.mjs} +2 -2
- package/dist/{fleet-CeLE0t97.mjs → fleet-CFpET-T5.mjs} +2 -2
- package/dist/{frpc-Cv6J2Mex.mjs → frpc-DxIjZ8o_.mjs} +1 -1
- package/dist/{headlessCli-BXc9Fvzb.mjs → headlessCli-BIY-YePw.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{notifyCommands-iVnI_Lb2.mjs → notifyCommands-DldLQlDU.mjs} +1 -1
- package/dist/package-BKmrvBsb.mjs +64 -0
- package/dist/{pinnedClaudeCode-C6MSkqS9.mjs → pinnedClaudeCode-zDzkOTi2.mjs} +1 -1
- package/dist/{rpc-BwxwusfB.mjs → rpc-BVw8Tv9l.mjs} +1 -1
- package/dist/{rpc-CkcBAtcs.mjs → rpc-D7_Gj0Kt.mjs} +1 -1
- package/dist/{run-DLG-_xa7.mjs → run-CqO23ro_.mjs} +68 -42
- package/dist/{run-2Stz5l7J.mjs → run-DLk7NGih.mjs} +1 -1
- package/dist/{scheduler-CurN4UtP.mjs → scheduler-q7Refevo.mjs} +1 -1
- package/dist/{serveCommands-CtVZhR-V.mjs → serveCommands-BJjvhDxp.mjs} +19 -12
- package/dist/{sideband-C_3PVGh-.mjs → sideband-Dv3qNlQN.mjs} +1 -1
- package/package.json +2 -2
- package/dist/package-CeseSmYI.mjs +0 -64
|
@@ -60,7 +60,7 @@ async function serviceExpose(args) {
|
|
|
60
60
|
process.exit(1);
|
|
61
61
|
}
|
|
62
62
|
if (foreground) {
|
|
63
|
-
const { runFrpcTunnel } = await import('./frpc-
|
|
63
|
+
const { runFrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
|
|
64
64
|
await runFrpcTunnel(name, ports, void 0, {
|
|
65
65
|
group,
|
|
66
66
|
groupKey,
|
|
@@ -70,7 +70,7 @@ async function serviceExpose(args) {
|
|
|
70
70
|
});
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
73
|
+
const { connectAndGetMachine } = await import('./commands-D-RsuMqs.mjs');
|
|
74
74
|
const { server, machine } = await connectAndGetMachine();
|
|
75
75
|
try {
|
|
76
76
|
const status = await machine.tunnelStart({
|
|
@@ -92,7 +92,7 @@ async function serviceExpose(args) {
|
|
|
92
92
|
console.log(` port ${port}: ${url}`);
|
|
93
93
|
}
|
|
94
94
|
if (process.env.SVAMP_SESSION_ID) {
|
|
95
|
-
const { autoAddSessionLink } = await import('./agentCommands-
|
|
95
|
+
const { autoAddSessionLink } = await import('./agentCommands-9GHpj3mp.mjs');
|
|
96
96
|
let added = 0;
|
|
97
97
|
for (const [port, url] of urlEntries) {
|
|
98
98
|
const label = urlEntries.length > 1 ? `${name}:${port}` : name;
|
|
@@ -128,8 +128,8 @@ async function serviceServe(args) {
|
|
|
128
128
|
const resolvedDir = path.resolve(directory);
|
|
129
129
|
console.log(`Serving ${resolvedDir}`);
|
|
130
130
|
const http = await import('http');
|
|
131
|
-
const { serveStaticMount } = await import('./run-
|
|
132
|
-
const { getFreePort } = await import('./frpc-
|
|
131
|
+
const { serveStaticMount } = await import('./run-CqO23ro_.mjs').then(function (n) { return n.ap; });
|
|
132
|
+
const { getFreePort } = await import('./frpc-DxIjZ8o_.mjs');
|
|
133
133
|
const server = http.createServer((req, res) => {
|
|
134
134
|
const u = new URL(req.url || "/", "http://127.0.0.1");
|
|
135
135
|
let rel = u.pathname;
|
|
@@ -152,7 +152,7 @@ async function serviceServe(args) {
|
|
|
152
152
|
resolve(18080);
|
|
153
153
|
});
|
|
154
154
|
});
|
|
155
|
-
const { runFrpcTunnel } = await import('./frpc-
|
|
155
|
+
const { runFrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
|
|
156
156
|
void server;
|
|
157
157
|
await runFrpcTunnel(name, [servePort]);
|
|
158
158
|
} catch (err) {
|
|
@@ -162,7 +162,7 @@ async function serviceServe(args) {
|
|
|
162
162
|
}
|
|
163
163
|
async function serviceList(_args) {
|
|
164
164
|
try {
|
|
165
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
165
|
+
const { connectAndGetMachine } = await import('./commands-D-RsuMqs.mjs');
|
|
166
166
|
const { server, machine } = await connectAndGetMachine();
|
|
167
167
|
try {
|
|
168
168
|
const tunnels = await machine.tunnelList({});
|
|
@@ -202,7 +202,7 @@ async function serviceDelete(args) {
|
|
|
202
202
|
process.exit(1);
|
|
203
203
|
}
|
|
204
204
|
try {
|
|
205
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
205
|
+
const { connectAndGetMachine } = await import('./commands-D-RsuMqs.mjs');
|
|
206
206
|
const { server, machine } = await connectAndGetMachine();
|
|
207
207
|
try {
|
|
208
208
|
await machine.tunnelStop({ name });
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { connectAndResolveSession } from './commands-
|
|
1
|
+
import { connectAndResolveSession } from './commands-D-RsuMqs.mjs';
|
|
2
2
|
import 'node:fs';
|
|
3
3
|
import 'node:child_process';
|
|
4
4
|
import 'node:path';
|
|
5
5
|
import 'node:os';
|
|
6
|
-
import './run-
|
|
6
|
+
import './run-CqO23ro_.mjs';
|
|
7
7
|
import 'os';
|
|
8
8
|
import 'fs/promises';
|
|
9
9
|
import 'fs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { j as resolveProjectRoot, K as workflowSteps, z as setWorkflowEnabled, F as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, E as listWorkflows, C as saveWorkflow, D as rawWorkflow } from './run-
|
|
2
|
+
import { j as resolveProjectRoot, K as workflowSteps, z as setWorkflowEnabled, F as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, E as listWorkflows, C as saveWorkflow, D as rawWorkflow } from './run-CqO23ro_.mjs';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
|
5
5
|
import 'fs';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
|
-
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-
|
|
3
|
+
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-D-RsuMqs.mjs';
|
|
4
4
|
import { execFileSync } from 'node:child_process';
|
|
5
|
-
import { ai as withFileLock, u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-
|
|
5
|
+
import { ai as withFileLock, u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-CqO23ro_.mjs';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'os';
|
|
8
8
|
import 'fs/promises';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
import { U as PINNED_CODEX_VERSION, c as connectToHypha } from './run-
|
|
5
|
-
import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-
|
|
4
|
+
import { U as PINNED_CODEX_VERSION, c as connectToHypha } from './run-CqO23ro_.mjs';
|
|
5
|
+
import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-zDzkOTi2.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -4,7 +4,7 @@ import { mkdirSync, chmodSync, writeFileSync, unlinkSync, existsSync, readFileSy
|
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { homedir, platform, arch } from 'os';
|
|
6
6
|
import { randomUUID, createHash } from 'crypto';
|
|
7
|
-
import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-
|
|
7
|
+
import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-CqO23ro_.mjs';
|
|
8
8
|
import 'fs/promises';
|
|
9
9
|
import 'url';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a3 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-
|
|
2
|
-
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-
|
|
1
|
+
import { a3 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-CqO23ro_.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-Dv3qNlQN.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-CqO23ro_.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as connectToHypha, S as SharingNotificationSync, L as parseJwtEmail } from './run-
|
|
1
|
+
import { c as connectToHypha, S as SharingNotificationSync, L as parseJwtEmail } from './run-CqO23ro_.mjs';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { existsSync, readFileSync } from 'node:fs';
|
|
4
4
|
import { join } from 'node:path';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
var name = "svamp-cli";
|
|
2
|
+
var version = "0.2.310";
|
|
3
|
+
var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
|
|
4
|
+
var author = "Amun AI AB";
|
|
5
|
+
var license = "SEE LICENSE IN LICENSE";
|
|
6
|
+
var type = "module";
|
|
7
|
+
var bin = {
|
|
8
|
+
svamp: "./bin/svamp.mjs"
|
|
9
|
+
};
|
|
10
|
+
var files = [
|
|
11
|
+
"dist",
|
|
12
|
+
"bin"
|
|
13
|
+
];
|
|
14
|
+
var main = "./dist/index.mjs";
|
|
15
|
+
var exports$1 = {
|
|
16
|
+
".": "./dist/index.mjs",
|
|
17
|
+
"./cli": "./dist/cli.mjs"
|
|
18
|
+
};
|
|
19
|
+
var scripts = {
|
|
20
|
+
build: "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
|
|
21
|
+
typecheck: "tsc --noEmit",
|
|
22
|
+
test: "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-sharing-notify-sync.mjs && npx tsx test/test-sharing-notify-resolve.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-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-backend-accounts.mjs && npx tsx test/test-codex-force-model.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-user-events.mjs && npx tsx test/test-migrate-children.mjs && npx tsx test/test-outpost-install.mjs && npx tsx test/test-outpost-setup.mjs && npx tsx test/test-outpost-pairing.mjs && npx tsx test/test-outpost-coordinator.mjs && npx tsx test/e2e-outpost-transport.mjs && npx tsx test/test-inbox-reconcile.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-isolation-disable.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-machine-session-visibility.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-pinned-codex.mjs && npx tsx test/test-codex-request-timeout.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-listener-backoff.mjs && npx tsx test/test-session-identity-env.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-compact-detect.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.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-store-lock.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-restore-decision.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-runs-lock.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-workflow-reconcile.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-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.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-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-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-stateless-dispatch-limiter.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-channel-upload.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 && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-artifact-sync-pagination.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs && npx tsx test/test-codex-skills.mjs",
|
|
23
|
+
"test:hypha": "node --no-warnings test/test-hypha-service.mjs",
|
|
24
|
+
dev: "tsx src/cli.ts",
|
|
25
|
+
"dev:daemon": "tsx src/cli.ts daemon start-sync",
|
|
26
|
+
"test:e2e": "node --no-warnings test/e2e-session-tests.mjs",
|
|
27
|
+
"test:frpc": "npx tsx test/test-frpc-e2e.mjs",
|
|
28
|
+
prepublishOnly: "yarn build"
|
|
29
|
+
};
|
|
30
|
+
var dependencies = {
|
|
31
|
+
"@agentclientprotocol/sdk": "^0.14.1",
|
|
32
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
33
|
+
"hypha-rpc": "0.21.42",
|
|
34
|
+
"node-pty": "1.2.0-beta.11",
|
|
35
|
+
ws: "^8.18.0",
|
|
36
|
+
yaml: "^2.8.2",
|
|
37
|
+
zod: "^3.24.4"
|
|
38
|
+
};
|
|
39
|
+
var devDependencies = {
|
|
40
|
+
"@types/node": ">=20",
|
|
41
|
+
"@types/ws": "^8.5.14",
|
|
42
|
+
pkgroll: "^2.14.2",
|
|
43
|
+
tsx: "^4.20.6",
|
|
44
|
+
typescript: "5.9.3"
|
|
45
|
+
};
|
|
46
|
+
var packageManager = "yarn@1.22.22";
|
|
47
|
+
var _package = {
|
|
48
|
+
name: name,
|
|
49
|
+
version: version,
|
|
50
|
+
description: description,
|
|
51
|
+
author: author,
|
|
52
|
+
license: license,
|
|
53
|
+
type: type,
|
|
54
|
+
bin: bin,
|
|
55
|
+
files: files,
|
|
56
|
+
main: main,
|
|
57
|
+
exports: exports$1,
|
|
58
|
+
scripts: scripts,
|
|
59
|
+
dependencies: dependencies,
|
|
60
|
+
devDependencies: devDependencies,
|
|
61
|
+
packageManager: packageManager
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export { author, bin, _package as default, dependencies, description, devDependencies, exports$1 as exports, files, license, main, name, packageManager, scripts, type, version };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawn, exec as exec$1 } from 'node:child_process';
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
3
|
|
|
4
|
-
const PINNED_CLAUDE_CODE_VERSION = "2.1.
|
|
4
|
+
const PINNED_CLAUDE_CODE_VERSION = "2.1.222";
|
|
5
5
|
const exec = promisify(exec$1);
|
|
6
6
|
let _reconcile = null;
|
|
7
7
|
function beginClaudeVersionReconcile(log) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-
|
|
1
|
+
import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-CqO23ro_.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-
|
|
1
|
+
import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-CqO23ro_.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -2379,10 +2379,8 @@ class ServeManager {
|
|
|
2379
2379
|
*/
|
|
2380
2380
|
listMounts(sessionId) {
|
|
2381
2381
|
const all = Array.from(this.mounts.values());
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
}
|
|
2385
|
-
return all;
|
|
2382
|
+
const filtered = sessionId ? all.filter((m) => m.sessionId === sessionId) : all;
|
|
2383
|
+
return filtered.map((m) => ({ ...m, url: this.getMountUrl(m.name) || void 0 }));
|
|
2386
2384
|
}
|
|
2387
2385
|
/** #0649: look up a single mount by name (for ownership checks before remove/replace). */
|
|
2388
2386
|
getMount(name) {
|
|
@@ -2393,10 +2391,8 @@ class ServeManager {
|
|
|
2393
2391
|
*/
|
|
2394
2392
|
getInfo() {
|
|
2395
2393
|
const running = this.proxyServer != null;
|
|
2396
|
-
const firstMount = this.mounts.values().next().value;
|
|
2397
|
-
const firstUrl = firstMount ? this.getMountUrl(firstMount.name) : null;
|
|
2398
2394
|
return {
|
|
2399
|
-
url:
|
|
2395
|
+
url: null,
|
|
2400
2396
|
port: running ? this.port : 0,
|
|
2401
2397
|
authProxyPort: running ? this.port : 0,
|
|
2402
2398
|
running,
|
|
@@ -3151,7 +3147,7 @@ Connection: close\r
|
|
|
3151
3147
|
const mount = this.mounts.get(mountName);
|
|
3152
3148
|
const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
|
|
3153
3149
|
try {
|
|
3154
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
3150
|
+
const { FrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
|
|
3155
3151
|
let tunnel;
|
|
3156
3152
|
tunnel = new FrpcTunnel({
|
|
3157
3153
|
name: tunnelName,
|
|
@@ -4093,7 +4089,8 @@ function inZone(date, tz) {
|
|
|
4093
4089
|
o[x.type] = x.value;
|
|
4094
4090
|
return o;
|
|
4095
4091
|
}, {});
|
|
4096
|
-
|
|
4092
|
+
const midnight24 = p.hour === "24";
|
|
4093
|
+
return new Date(+p.year, +p.month - 1, +p.day + (midnight24 ? 1 : 0), midnight24 ? 0 : +p.hour, +p.minute);
|
|
4097
4094
|
} catch {
|
|
4098
4095
|
return date;
|
|
4099
4096
|
}
|
|
@@ -4926,10 +4923,16 @@ class ChannelOutbox {
|
|
|
4926
4923
|
this.emitter.on(channelId, onReply);
|
|
4927
4924
|
});
|
|
4928
4925
|
}
|
|
4929
|
-
/**
|
|
4930
|
-
|
|
4926
|
+
/**
|
|
4927
|
+
* Push subscription for SSE: calls onReply for each new matching reply.
|
|
4928
|
+
* Same key rule as since()/wait(): correlationId-first (knowing the unguessable reply
|
|
4929
|
+
* key proves ownership of that conversation), identity (`to`) only as the fallback.
|
|
4930
|
+
* Without this, several callers sharing a `to` (e.g. caller-supplied/'anonymous'
|
|
4931
|
+
* senders) would receive each other's replies — the cross-caller leak class of #0786.
|
|
4932
|
+
*/
|
|
4933
|
+
subscribe(channelId, to, onReply, correlationId) {
|
|
4931
4934
|
const handler = (r) => {
|
|
4932
|
-
if (r.to === to) onReply(r);
|
|
4935
|
+
if (correlationId ? r.correlationId === correlationId : r.to === to) onReply(r);
|
|
4933
4936
|
};
|
|
4934
4937
|
this.emitter.on(channelId, handler);
|
|
4935
4938
|
return () => this.emitter.off(channelId, handler);
|
|
@@ -5020,6 +5023,17 @@ const SESSION_VIEW_METHODS = /* @__PURE__ */ new Set([
|
|
|
5020
5023
|
"reregister",
|
|
5021
5024
|
"recordMeetingActivity"
|
|
5022
5025
|
]);
|
|
5026
|
+
const MACHINE_MEMBER_READABLE = /* @__PURE__ */ new Set([
|
|
5027
|
+
"getMetadata",
|
|
5028
|
+
"getAgentState",
|
|
5029
|
+
"getActivityState",
|
|
5030
|
+
"getMessages",
|
|
5031
|
+
"getLatestMessages",
|
|
5032
|
+
"getMessageCount",
|
|
5033
|
+
"getSharing",
|
|
5034
|
+
"listChannels",
|
|
5035
|
+
"registerListener"
|
|
5036
|
+
]);
|
|
5023
5037
|
function sessionMethodMinRole(method) {
|
|
5024
5038
|
const mapped = SESSION_METHOD_MIN_ROLE[method];
|
|
5025
5039
|
if (mapped) return mapped;
|
|
@@ -5362,11 +5376,12 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5362
5376
|
const rpc = handlers.getSessionRPCHandlers?.(sid);
|
|
5363
5377
|
if (!rpc) continue;
|
|
5364
5378
|
if (!hasMachineAccess && !await hasExplicitSessionAccess(rpc, "view", context)) continue;
|
|
5379
|
+
const readCtx = hasMachineAccess ? void 0 : context;
|
|
5365
5380
|
try {
|
|
5366
5381
|
const [metaResult, stateResult, activity] = await Promise.all([
|
|
5367
|
-
rpc.getMetadata(
|
|
5368
|
-
rpc.getAgentState(
|
|
5369
|
-
rpc.getActivityState(
|
|
5382
|
+
rpc.getMetadata(readCtx),
|
|
5383
|
+
rpc.getAgentState(readCtx),
|
|
5384
|
+
rpc.getActivityState(readCtx).catch(() => ({
|
|
5370
5385
|
active: false,
|
|
5371
5386
|
thinking: false,
|
|
5372
5387
|
time: Date.now()
|
|
@@ -5382,7 +5397,10 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5382
5397
|
thinking: activity.thinking ?? false,
|
|
5383
5398
|
activeAt: activity.time || Date.now()
|
|
5384
5399
|
});
|
|
5385
|
-
} catch {
|
|
5400
|
+
} catch (err) {
|
|
5401
|
+
console.debug(
|
|
5402
|
+
`[HYPHA MACHINE] getSessions: skipped session ${sid} (${hasMachineAccess ? "machine-access" : "session-shared"}): ${err?.message ?? err}`
|
|
5403
|
+
);
|
|
5386
5404
|
}
|
|
5387
5405
|
}
|
|
5388
5406
|
return sessions;
|
|
@@ -5402,8 +5420,10 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5402
5420
|
throw new Error(`Session ${sessionId} not found on this machine`);
|
|
5403
5421
|
}
|
|
5404
5422
|
const requiredRole = sessionMethodMinRole(method);
|
|
5423
|
+
let machineAuthorized = false;
|
|
5405
5424
|
try {
|
|
5406
5425
|
authorizeRequest(context, currentMetadata.sharing, requiredRole);
|
|
5426
|
+
machineAuthorized = true;
|
|
5407
5427
|
} catch (machineErr) {
|
|
5408
5428
|
if (!await hasExplicitSessionAccess(rpc, requiredRole, context)) throw machineErr;
|
|
5409
5429
|
}
|
|
@@ -5411,9 +5431,10 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5411
5431
|
if (typeof handler !== "function") {
|
|
5412
5432
|
throw new Error(`Unknown session method: ${method}`);
|
|
5413
5433
|
}
|
|
5434
|
+
const dispatchCtx = machineAuthorized && MACHINE_MEMBER_READABLE.has(method) ? void 0 : context;
|
|
5414
5435
|
const paramNames = getParamNames(handler);
|
|
5415
5436
|
const callArgs = paramNames.map(
|
|
5416
|
-
(name) => name === "context" ?
|
|
5437
|
+
(name) => name === "context" ? dispatchCtx : kwargs?.[name] ?? void 0
|
|
5417
5438
|
);
|
|
5418
5439
|
return await handler(...callArgs);
|
|
5419
5440
|
},
|
|
@@ -5427,14 +5448,16 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5427
5448
|
if (!rpc) {
|
|
5428
5449
|
throw new Error(`Session ${sessionId} not found on this machine`);
|
|
5429
5450
|
}
|
|
5451
|
+
let machineAuthorized = false;
|
|
5430
5452
|
try {
|
|
5431
5453
|
authorizeRequest(context, currentMetadata.sharing, "view");
|
|
5454
|
+
machineAuthorized = true;
|
|
5432
5455
|
} catch (machineErr) {
|
|
5433
5456
|
if (!await hasExplicitSessionAccess(rpc, "view", context)) {
|
|
5434
5457
|
throw machineErr;
|
|
5435
5458
|
}
|
|
5436
5459
|
}
|
|
5437
|
-
return await rpc.registerListener(callback, context);
|
|
5460
|
+
return await rpc.registerListener(callback, machineAuthorized ? void 0 : context);
|
|
5438
5461
|
},
|
|
5439
5462
|
// Spawn a new session
|
|
5440
5463
|
spawnSession: async (options, context) => {
|
|
@@ -5810,9 +5833,11 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5810
5833
|
const { exec } = await import('child_process');
|
|
5811
5834
|
const { homedir } = await import('os');
|
|
5812
5835
|
return new Promise((resolve) => {
|
|
5813
|
-
exec(command, { cwd: cwd || homedir(), timeout: 3e4, maxBuffer: 1024 * 1024 }, (err, stdout, stderr) => {
|
|
5836
|
+
exec(command, { cwd: cwd || homedir(), timeout: 3e4, maxBuffer: 16 * 1024 * 1024 }, (err, stdout, stderr) => {
|
|
5814
5837
|
if (err) {
|
|
5815
|
-
|
|
5838
|
+
const enobufs = err.code === "ENOBUFS";
|
|
5839
|
+
const errText = enobufs ? `output exceeded the 16 MB buffer and was truncated (the command may have completed): ${stderr || err.message}` : stderr || err.message;
|
|
5840
|
+
resolve({ success: false, stdout: stdout || "", stderr: errText, exitCode: err.code ?? 1 });
|
|
5816
5841
|
} else {
|
|
5817
5842
|
resolve({ success: true, stdout, stderr: stderr || "", exitCode: 0 });
|
|
5818
5843
|
}
|
|
@@ -5823,6 +5848,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5823
5848
|
/** Start a new terminal PTY session. Returns { sessionId, cols, rows }. */
|
|
5824
5849
|
terminalStart: async (params = {}, context) => {
|
|
5825
5850
|
authorizeRequest(context, currentMetadata.sharing, "admin");
|
|
5851
|
+
const terminalClient = context?.from;
|
|
5826
5852
|
const pty = await getPtyModule();
|
|
5827
5853
|
const { homedir: getHomedir } = await import('os');
|
|
5828
5854
|
const cols = params.cols || 80;
|
|
@@ -5877,7 +5903,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5877
5903
|
server.emit({
|
|
5878
5904
|
type: "svamp:terminal-output",
|
|
5879
5905
|
data: { type: "output", content: batch, sessionId },
|
|
5880
|
-
to: "*"
|
|
5906
|
+
to: terminalClient ?? "*"
|
|
5881
5907
|
});
|
|
5882
5908
|
} catch {
|
|
5883
5909
|
}
|
|
@@ -5896,7 +5922,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5896
5922
|
server.emit({
|
|
5897
5923
|
type: "svamp:terminal-output",
|
|
5898
5924
|
data: { type: "exit", content: "", sessionId, exitCode, signal },
|
|
5899
|
-
to: "*"
|
|
5925
|
+
to: terminalClient ?? "*"
|
|
5900
5926
|
});
|
|
5901
5927
|
} catch {
|
|
5902
5928
|
}
|
|
@@ -6254,7 +6280,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
6254
6280
|
const tunnels = handlers.tunnels;
|
|
6255
6281
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
6256
6282
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
6257
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
6283
|
+
const { FrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
|
|
6258
6284
|
const tunnel = new FrpcTunnel({
|
|
6259
6285
|
name: params.name,
|
|
6260
6286
|
ports: params.ports,
|
|
@@ -6421,8 +6447,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
6421
6447
|
const info = sm.getInfo();
|
|
6422
6448
|
const isAdmin = serveCallerTrusted(context);
|
|
6423
6449
|
const mounts = (info.mounts || []).map((m) => sanitizeMountForRole(m, isAdmin));
|
|
6424
|
-
|
|
6425
|
-
return { ...info, url: topUrl, mounts };
|
|
6450
|
+
return { ...info, url: null, mounts };
|
|
6426
6451
|
},
|
|
6427
6452
|
/**
|
|
6428
6453
|
* Aggregate frpc tunnel health for all serve mounts.
|
|
@@ -6748,7 +6773,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
6748
6773
|
}
|
|
6749
6774
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
6750
6775
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
6751
|
-
const { toolsForRole } = await import('./sideband-
|
|
6776
|
+
const { toolsForRole } = await import('./sideband-Dv3qNlQN.mjs');
|
|
6752
6777
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
6753
6778
|
return fmt(r2);
|
|
6754
6779
|
}
|
|
@@ -6853,7 +6878,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
6853
6878
|
return { ok: false, call_id: callId, status: "busy", error: "channel is busy (too many concurrent requests) \u2014 retry shortly" };
|
|
6854
6879
|
}
|
|
6855
6880
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
6856
|
-
const { queryCore } = await import('./commands-
|
|
6881
|
+
const { queryCore } = await import('./commands-D-RsuMqs.mjs');
|
|
6857
6882
|
const timeout = c.reply?.timeout_sec || 120;
|
|
6858
6883
|
let result;
|
|
6859
6884
|
try {
|
|
@@ -8891,7 +8916,7 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
|
|
|
8891
8916
|
const ownerCtx = ownerEmail ? { user: { email: ownerEmail, id: ownerEmail } } : void 0;
|
|
8892
8917
|
try {
|
|
8893
8918
|
if (c.system && c.action?.kind !== "agent") {
|
|
8894
|
-
const role = ownerEmail && r.sender.name.toLowerCase() === ownerEmail.toLowerCase() ? "owner" : "collaborator";
|
|
8919
|
+
const role = r.sender.verified && ownerEmail && r.sender.name.toLowerCase() === ownerEmail.toLowerCase() ? "owner" : "collaborator";
|
|
8895
8920
|
const envelope = renderMessage(c, {
|
|
8896
8921
|
sender: r.sender,
|
|
8897
8922
|
body: { message: params.message },
|
|
@@ -15219,6 +15244,7 @@ function runsFile(projectRoot, workflow) {
|
|
|
15219
15244
|
const safe = workflow.replace(/[^\w.-]+/g, "_");
|
|
15220
15245
|
return join$1(runsDir(projectRoot), `${safe}.jsonl`);
|
|
15221
15246
|
}
|
|
15247
|
+
let _runSeq = 0;
|
|
15222
15248
|
function shortRunId(seed) {
|
|
15223
15249
|
let h = 2166136261;
|
|
15224
15250
|
for (let i = 0; i < seed.length; i++) {
|
|
@@ -15444,7 +15470,7 @@ async function runWorkflowInner(projectRoot, wf, opts) {
|
|
|
15444
15470
|
});
|
|
15445
15471
|
const exec = opts.execStep || defaultExecStep;
|
|
15446
15472
|
const start = now();
|
|
15447
|
-
const id = shortRunId(`${wf.name}:${start.iso}:${start.ms}`);
|
|
15473
|
+
const id = shortRunId(`${wf.name}:${start.iso}:${start.ms}:${_runSeq++}`);
|
|
15448
15474
|
const env = wf.session ? { ...process.env, SVAMP_SESSION_ID: wf.session } : process.env;
|
|
15449
15475
|
const run = {
|
|
15450
15476
|
id,
|
|
@@ -17206,7 +17232,7 @@ function createSvampConfigChecker(directory, sessionId, getMetadata, setMetadata
|
|
|
17206
17232
|
const gaveUpCfg = readLoopJson(directory, sessionId, "loop.config.json") || {};
|
|
17207
17233
|
const curMax = typeof gaveUpCfg.max_iterations === "number" ? gaveUpCfg.max_iterations : iter;
|
|
17208
17234
|
const nextMax = Math.max(curMax * 2, iter + 10);
|
|
17209
|
-
const msg = s.phase === "done" ? `\u{1F501} Loop complete \u2705 \u2014 finished after ${iter} iteration${plural}.` : `\u{1F501} Loop paused \u{1F6D1} \u2014 did NOT finish after ${iter} iteration${plural}${s.gave_up_reason ? ` (${s.gave_up_reason})` : ""}. Resume & extend with: svamp session loop-
|
|
17235
|
+
const msg = s.phase === "done" ? `\u{1F501} Loop complete \u2705 \u2014 finished after ${iter} iteration${plural}.` : `\u{1F501} Loop paused \u{1F6D1} \u2014 did NOT finish after ${iter} iteration${plural}${s.gave_up_reason ? ` (${s.gave_up_reason})` : ""}. Resume & extend with: svamp session loop-extend ${sessionId} --reason "<why more turns are needed>" --turns ${Math.max(10, nextMax - iter)}`;
|
|
17210
17236
|
sessionService.pushMessage(
|
|
17211
17237
|
s.phase === "gave_up" ? { type: "message", message: msg, level: "warning" } : { type: "message", message: msg },
|
|
17212
17238
|
"event"
|
|
@@ -17275,7 +17301,7 @@ function createSvampConfigChecker(directory, sessionId, getMetadata, setMetadata
|
|
|
17275
17301
|
maxExtensions
|
|
17276
17302
|
});
|
|
17277
17303
|
if (!grant.granted) {
|
|
17278
|
-
sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Extension refused \u2014 this loop already used all ${grant.max} allowed extension${grant.max === 1 ? "" : "s"} (${grant.used}/${grant.max}). A hard cap is a hard cap; do the remaining work or raise the limit manually: svamp session loop-
|
|
17304
|
+
sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Extension refused \u2014 this loop already used all ${grant.max} allowed extension${grant.max === 1 ? "" : "s"} (${grant.used}/${grant.max}). A hard cap is a hard cap; do the remaining work or raise the limit manually: svamp session loop-extend ${sessionId} --reason "<why>" --turns <N>`, level: "warning" }, "event");
|
|
17279
17305
|
logger.log(`[svampConfig] loop-extend refused (bounded ${grant.used}/${grant.max})`);
|
|
17280
17306
|
} else {
|
|
17281
17307
|
const wasStopped = existing.active === false || existing.phase === "done" || existing.phase === "gave_up" || existing.phase === "cancelled";
|
|
@@ -17829,7 +17855,7 @@ async function startDaemon(options) {
|
|
|
17829
17855
|
try {
|
|
17830
17856
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
17831
17857
|
if (!dir) return;
|
|
17832
|
-
const { reconcileServiceLinks } = await import('./agentCommands-
|
|
17858
|
+
const { reconcileServiceLinks } = await import('./agentCommands-9GHpj3mp.mjs');
|
|
17833
17859
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
17834
17860
|
const config = readSvampConfig(configPath);
|
|
17835
17861
|
const entries = Array.from(urls.entries());
|
|
@@ -17847,7 +17873,7 @@ async function startDaemon(options) {
|
|
|
17847
17873
|
}
|
|
17848
17874
|
}
|
|
17849
17875
|
async function createExposedTunnel(spec) {
|
|
17850
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
17876
|
+
const { FrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
|
|
17851
17877
|
const tunnel = new FrpcTunnel({
|
|
17852
17878
|
name: spec.name,
|
|
17853
17879
|
ports: spec.ports,
|
|
@@ -17875,7 +17901,7 @@ async function startDaemon(options) {
|
|
|
17875
17901
|
ensureAutoInstalledCommands(logger);
|
|
17876
17902
|
(async () => {
|
|
17877
17903
|
try {
|
|
17878
|
-
const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-
|
|
17904
|
+
const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-zDzkOTi2.mjs');
|
|
17879
17905
|
beginClaudeVersionReconcile((msg) => logger.log(msg));
|
|
17880
17906
|
} catch (e) {
|
|
17881
17907
|
logger.log(`[claude-version] check failed: ${e?.message || e}`);
|
|
@@ -19194,7 +19220,7 @@ ${parts.join("\n")}`);
|
|
|
19194
19220
|
auto_resumes: prog.auto_resumes
|
|
19195
19221
|
});
|
|
19196
19222
|
const extNote = summarizeExtensions(ls.extensions, maxExt);
|
|
19197
|
-
const resumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>"
|
|
19223
|
+
const resumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>" [--turns <N>]` : `Raise the cost cap to resume (--max won't \u2014 it only raises the iteration cap): svamp session loop ${sessionId} --max-runtime-sec <N> and/or --max-tokens-per-hour <N>`;
|
|
19198
19224
|
const detail = `${budgetCheck.reason} (hard ${iterStop ? "iteration ceiling" : "cost ceiling"} \u2014 will not auto-resume)${extNote ? ` [${extNote}]` : ""}. ${resumeHint}`;
|
|
19199
19225
|
sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Loop stopped \u2014 ${detail}`, level: "warning" }, "event");
|
|
19200
19226
|
checkSvampConfig?.();
|
|
@@ -20081,11 +20107,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
20081
20107
|
});
|
|
20082
20108
|
},
|
|
20083
20109
|
onIssue: async (params) => {
|
|
20084
|
-
const { issueRpc } = await import('./rpc-
|
|
20110
|
+
const { issueRpc } = await import('./rpc-D7_Gj0Kt.mjs');
|
|
20085
20111
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
20086
20112
|
},
|
|
20087
20113
|
onWorkflow: async (params) => {
|
|
20088
|
-
const { workflowRpc } = await import('./rpc-
|
|
20114
|
+
const { workflowRpc } = await import('./rpc-BVw8Tv9l.mjs');
|
|
20089
20115
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
20090
20116
|
},
|
|
20091
20117
|
onRipgrep: async (args, cwd) => {
|
|
@@ -20755,11 +20781,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
20755
20781
|
});
|
|
20756
20782
|
},
|
|
20757
20783
|
onIssue: async (params) => {
|
|
20758
|
-
const { issueRpc } = await import('./rpc-
|
|
20784
|
+
const { issueRpc } = await import('./rpc-D7_Gj0Kt.mjs');
|
|
20759
20785
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
20760
20786
|
},
|
|
20761
20787
|
onWorkflow: async (params) => {
|
|
20762
|
-
const { workflowRpc } = await import('./rpc-
|
|
20788
|
+
const { workflowRpc } = await import('./rpc-BVw8Tv9l.mjs');
|
|
20763
20789
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
20764
20790
|
},
|
|
20765
20791
|
onRipgrep: async (args, cwd) => {
|
|
@@ -21089,7 +21115,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
21089
21115
|
const iterStop = !isCostCeiling(budgetCheck.kind);
|
|
21090
21116
|
writeGoalLoopState(directory, sessionId, { ...ls, active: false, phase: "gave_up", completed_at: now, gave_up_reason: `resource budget exhausted \u2014 ${budgetCheck.reason}`, ledger });
|
|
21091
21117
|
const acpExtNote = summarizeExtensions(ls.extensions, acpMaxExt);
|
|
21092
|
-
const acpResumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>"
|
|
21118
|
+
const acpResumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>" [--turns <N>]` : `Raise the cost cap to resume (--max won't \u2014 it only raises the iteration cap): svamp session loop ${sessionId} --max-runtime-sec <N> and/or --max-tokens-per-hour <N>`;
|
|
21093
21119
|
sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Loop stopped \u2014 ${budgetCheck.reason} (hard ${iterStop ? "iteration ceiling" : "cost ceiling"} \u2014 will not auto-resume)${acpExtNote ? ` [${acpExtNote}]` : ""}. ${acpResumeHint}`, level: "warning" }, "event");
|
|
21094
21120
|
checkSvampConfig?.();
|
|
21095
21121
|
return;
|
|
@@ -21717,7 +21743,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
|
|
|
21717
21743
|
}
|
|
21718
21744
|
if (persistedSessions.length > 0) {
|
|
21719
21745
|
try {
|
|
21720
|
-
const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-
|
|
21746
|
+
const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-zDzkOTi2.mjs');
|
|
21721
21747
|
await awaitClaudeVersionReady();
|
|
21722
21748
|
} catch {
|
|
21723
21749
|
}
|
|
@@ -21922,7 +21948,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
|
|
|
21922
21948
|
const PING_TIMEOUT_MS = 15e3;
|
|
21923
21949
|
const POST_RECONNECT_GRACE_MS = 2e4;
|
|
21924
21950
|
const RECONNECT_JITTER_MS = 2500;
|
|
21925
|
-
const { WorkflowScheduler } = await import('./scheduler-
|
|
21951
|
+
const { WorkflowScheduler } = await import('./scheduler-q7Refevo.mjs');
|
|
21926
21952
|
const workflowProjectRoots = () => {
|
|
21927
21953
|
const dirs = /* @__PURE__ */ new Set();
|
|
21928
21954
|
for (const s of pidToTrackedSession.values()) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { al as applyClaudeProxyEnv, am as composeSessionId, an as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ao as generateHookSettings } from './run-
|
|
1
|
+
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { al as applyClaudeProxyEnv, am as composeSessionId, an as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ao as generateHookSettings } from './run-CqO23ro_.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';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowSchedules, H as inZone, y as runWorkflow, I as cronMatches } from './run-
|
|
1
|
+
import { j as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowSchedules, H as inZone, y as runWorkflow, I as cronMatches } from './run-CqO23ro_.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|