svamp-cli 0.2.306 → 0.2.307
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-Cx_Rp-TR.mjs → adminCommands-DZ9MECkY.mjs} +1 -1
- package/dist/{agentCommands-CUcyA_KE.mjs → agentCommands-D68wBf-y.mjs} +5 -5
- package/dist/{auth-BBjbREk1.mjs → auth-DDgr4YFE.mjs} +1 -1
- package/dist/{cli-Jj5S5UOL.mjs → cli-Bk6IPB9M.mjs} +69 -69
- package/dist/cli.mjs +2 -2
- package/dist/{commands-BRQBNTsJ.mjs → commands-Bl9AtWkD.mjs} +2 -2
- package/dist/{commands-DkKdjnPE.mjs → commands-BlIR3KBq.mjs} +2 -2
- package/dist/{commands-BeD9b-Eh.mjs → commands-CESl13XD.mjs} +2 -2
- package/dist/{commands-CvwLQ3MM.mjs → commands-CJVqMnNf.mjs} +1 -1
- package/dist/{commands-DlyOpWwF.mjs → commands-DJwSJOPD.mjs} +1 -1
- package/dist/{commands-3UnC4Lnb.mjs → commands-Dh2S9Gf1.mjs} +1 -1
- package/dist/{commands-ByP8QKuO.mjs → commands-DsfIIri_.mjs} +7 -7
- package/dist/{commands-DJt9EFd7.mjs → commands-rGFSTXKu.mjs} +2 -2
- package/dist/{fleet-cBng1VMn.mjs → fleet-okzhGLEY.mjs} +1 -1
- package/dist/{frpc-C1jS23Sn.mjs → frpc-NDcBtpwa.mjs} +1 -1
- package/dist/{headlessCli-CsnDECCN.mjs → headlessCli-BkU5B5Jp.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{notifyCommands-D7Ja6442.mjs → notifyCommands-Oh0kvQgj.mjs} +1 -1
- package/dist/package-k1G6ygGP.mjs +64 -0
- package/dist/{rpc-BxmbyDga.mjs → rpc-DSyBSuTF.mjs} +1 -1
- package/dist/{rpc-iNafaHoh.mjs → rpc-K5xzddMF.mjs} +1 -1
- package/dist/{run-D351s_uv.mjs → run-09G0RL2B.mjs} +1 -1
- package/dist/{run-Bd57zohL.mjs → run-DYVmYsvg.mjs} +88 -44
- package/dist/{scheduler-CZYOanXt.mjs → scheduler-CtKlSyIq.mjs} +1 -1
- package/dist/{serveCommands-DotLju8m.mjs → serveCommands-BnOmV2Z3.mjs} +5 -5
- package/dist/{sideband-DM1-IAV7.mjs → sideband-CdJ0O6L6.mjs} +1 -1
- package/package.json +2 -2
- package/dist/package-DUF-safU.mjs +0 -64
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os from 'os';
|
|
2
2
|
import fs__default from 'fs';
|
|
3
3
|
import { resolve, join, relative } from 'path';
|
|
4
|
-
import { T as parseFrontmatter, U as getSkillsServer, V as getSkillsWorkspaceName, W as getSkillsCollectionName, X as fetchWithTimeout, Y as searchSkills, Z as SKILLS_DIR, _ as getSkillInfo, $ as downloadSkillFile, a0 as listSkillFiles } from './run-
|
|
4
|
+
import { T as parseFrontmatter, U as getSkillsServer, V as getSkillsWorkspaceName, W as getSkillsCollectionName, X as fetchWithTimeout, Y as searchSkills, Z as SKILLS_DIR, _ as getSkillInfo, $ as downloadSkillFile, a0 as listSkillFiles } from './run-DYVmYsvg.mjs';
|
|
5
5
|
import 'fs/promises';
|
|
6
6
|
import 'url';
|
|
7
7
|
import 'child_process';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { j as resolveProjectRoot, J 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, J 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-DYVmYsvg.mjs';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
|
5
5
|
import 'fs';
|
|
@@ -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-NDcBtpwa.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-CJVqMnNf.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-D68wBf-y.mjs');
|
|
96
96
|
let added = 0;
|
|
97
97
|
for (const [port, url] of urlEntries) {
|
|
98
98
|
const label = urlEntries.length > 1 ? `${name}:${port}` : name;
|
|
@@ -129,7 +129,7 @@ async function serviceServe(args) {
|
|
|
129
129
|
console.log(`Serving ${resolvedDir}`);
|
|
130
130
|
const servePort = 18080;
|
|
131
131
|
const http = await import('http');
|
|
132
|
-
const { serveStaticMount } = await import('./run-
|
|
132
|
+
const { serveStaticMount } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.am; });
|
|
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;
|
|
@@ -140,7 +140,7 @@ async function serviceServe(args) {
|
|
|
140
140
|
server.once("error", reject);
|
|
141
141
|
server.listen(servePort, "127.0.0.1", () => resolve());
|
|
142
142
|
});
|
|
143
|
-
const { runFrpcTunnel } = await import('./frpc-
|
|
143
|
+
const { runFrpcTunnel } = await import('./frpc-NDcBtpwa.mjs');
|
|
144
144
|
void server;
|
|
145
145
|
await runFrpcTunnel(name, [servePort]);
|
|
146
146
|
} catch (err) {
|
|
@@ -150,7 +150,7 @@ async function serviceServe(args) {
|
|
|
150
150
|
}
|
|
151
151
|
async function serviceList(_args) {
|
|
152
152
|
try {
|
|
153
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
153
|
+
const { connectAndGetMachine } = await import('./commands-CJVqMnNf.mjs');
|
|
154
154
|
const { server, machine } = await connectAndGetMachine();
|
|
155
155
|
try {
|
|
156
156
|
const tunnels = await machine.tunnelList({});
|
|
@@ -190,7 +190,7 @@ async function serviceDelete(args) {
|
|
|
190
190
|
process.exit(1);
|
|
191
191
|
}
|
|
192
192
|
try {
|
|
193
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
193
|
+
const { connectAndGetMachine } = await import('./commands-CJVqMnNf.mjs');
|
|
194
194
|
const { server, machine } = await connectAndGetMachine();
|
|
195
195
|
try {
|
|
196
196
|
await machine.tunnelStop({ name });
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-
|
|
3
|
+
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-CJVqMnNf.mjs';
|
|
4
4
|
import { execFileSync } from 'node:child_process';
|
|
5
|
-
import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-
|
|
5
|
+
import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-DYVmYsvg.mjs';
|
|
6
6
|
import 'node:os';
|
|
7
7
|
import 'os';
|
|
8
8
|
import 'fs/promises';
|
|
@@ -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-DYVmYsvg.mjs';
|
|
5
5
|
import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-BaMR97BE.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
@@ -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-DYVmYsvg.mjs';
|
|
8
8
|
import 'fs/promises';
|
|
9
9
|
import 'url';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a1 as resolveModel, ag as describeMisconfiguration, ah as buildMachineDeps } from './run-
|
|
2
|
-
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-
|
|
1
|
+
import { a1 as resolveModel, ag as describeMisconfiguration, ah as buildMachineDeps } from './run-DYVmYsvg.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-CdJ0O6L6.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-DYVmYsvg.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, K as parseJwtEmail } from './run-
|
|
1
|
+
import { c as connectToHypha, S as SharingNotificationSync, K as parseJwtEmail } from './run-DYVmYsvg.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.307";
|
|
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-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.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,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-DYVmYsvg.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-DYVmYsvg.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ai as applyClaudeProxyEnv, aj as composeSessionId, ak as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, al as generateHookSettings } from './run-
|
|
1
|
+
import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ai as applyClaudeProxyEnv, aj as composeSessionId, ak as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, al as generateHookSettings } from './run-DYVmYsvg.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';
|
|
@@ -3047,7 +3047,7 @@ Connection: close\r
|
|
|
3047
3047
|
const mount = this.mounts.get(mountName);
|
|
3048
3048
|
const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
|
|
3049
3049
|
try {
|
|
3050
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
3050
|
+
const { FrpcTunnel } = await import('./frpc-NDcBtpwa.mjs');
|
|
3051
3051
|
let tunnel;
|
|
3052
3052
|
tunnel = new FrpcTunnel({
|
|
3053
3053
|
name: tunnelName,
|
|
@@ -6088,7 +6088,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
6088
6088
|
const tunnels = handlers.tunnels;
|
|
6089
6089
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
6090
6090
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
6091
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
6091
|
+
const { FrpcTunnel } = await import('./frpc-NDcBtpwa.mjs');
|
|
6092
6092
|
const tunnel = new FrpcTunnel({
|
|
6093
6093
|
name: params.name,
|
|
6094
6094
|
ports: params.ports,
|
|
@@ -6582,7 +6582,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
6582
6582
|
}
|
|
6583
6583
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
6584
6584
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
6585
|
-
const { toolsForRole } = await import('./sideband-
|
|
6585
|
+
const { toolsForRole } = await import('./sideband-CdJ0O6L6.mjs');
|
|
6586
6586
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
6587
6587
|
return fmt(r2);
|
|
6588
6588
|
}
|
|
@@ -6687,7 +6687,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
6687
6687
|
return { ok: false, call_id: callId, status: "busy", error: "channel is busy (too many concurrent requests) \u2014 retry shortly" };
|
|
6688
6688
|
}
|
|
6689
6689
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
6690
|
-
const { queryCore } = await import('./commands-
|
|
6690
|
+
const { queryCore } = await import('./commands-CJVqMnNf.mjs');
|
|
6691
6691
|
const timeout = c.reply?.timeout_sec || 120;
|
|
6692
6692
|
let result;
|
|
6693
6693
|
try {
|
|
@@ -10479,18 +10479,56 @@ function eventAlias(eventId, recipientEmail) {
|
|
|
10479
10479
|
class SharingNotificationSync {
|
|
10480
10480
|
server;
|
|
10481
10481
|
artifactManager = null;
|
|
10482
|
+
amResolvedAt = 0;
|
|
10482
10483
|
shareCollectionId = null;
|
|
10483
10484
|
eventCollectionId = null;
|
|
10484
10485
|
initialized = false;
|
|
10485
10486
|
log;
|
|
10487
|
+
// A resolved `public/artifact-manager` proxy is bound to a SPECIFIC backend client_id. When that
|
|
10488
|
+
// backend pod is replaced (deploy/restart/idle-evict), the new instance registers under the same
|
|
10489
|
+
// public alias but a fresh client_id — the cached proxy dangles and every call TIMES OUT (~30s).
|
|
10490
|
+
// Before this fix that silently broke ALL zero-click share writes fleet-wide (empty
|
|
10491
|
+
// svamp-shared-sessions → recipients never auto-discovered). So we re-resolve on a short TTL and,
|
|
10492
|
+
// on any RPC error, force one fresh re-resolve + retry (a dead pod's proxy always fails first).
|
|
10493
|
+
static AM_TTL_MS = 3e4;
|
|
10486
10494
|
constructor(server, log) {
|
|
10487
10495
|
this.server = server;
|
|
10488
10496
|
this.log = log;
|
|
10489
10497
|
}
|
|
10498
|
+
/**
|
|
10499
|
+
* Resolve `public/artifact-manager` on the daemon's live connection. hypha-rpc re-queries the
|
|
10500
|
+
* server registry on each getService() call, so a fresh resolve yields the CURRENTLY-registered
|
|
10501
|
+
* live instance (not the dangling cached one). Cached within a short TTL to avoid a lookup per
|
|
10502
|
+
* write; `force` bypasses the cache after a failure.
|
|
10503
|
+
*/
|
|
10504
|
+
async getAM(force = false) {
|
|
10505
|
+
const now = Date.now();
|
|
10506
|
+
if (!force && this.artifactManager && now - this.amResolvedAt < SharingNotificationSync.AM_TTL_MS) {
|
|
10507
|
+
return this.artifactManager;
|
|
10508
|
+
}
|
|
10509
|
+
const am = await this.server.getService("public/artifact-manager");
|
|
10510
|
+
this.artifactManager = am;
|
|
10511
|
+
this.amResolvedAt = Date.now();
|
|
10512
|
+
return am;
|
|
10513
|
+
}
|
|
10514
|
+
/**
|
|
10515
|
+
* Run an artifact-manager operation with automatic recovery from a stale/dead proxy: try with the
|
|
10516
|
+
* (possibly cached) instance; on ANY error, force a fresh re-resolve and retry ONCE. This is the
|
|
10517
|
+
* heart of the stale-proxy fix — a replaced backend pod makes the first call time out, the retry
|
|
10518
|
+
* re-binds to the live instance and succeeds. The caller still catches the final error.
|
|
10519
|
+
*/
|
|
10520
|
+
async withAM(op) {
|
|
10521
|
+
try {
|
|
10522
|
+
return await op(await this.getAM(false));
|
|
10523
|
+
} catch (err) {
|
|
10524
|
+
this.log(`[SHARING NOTIFY] artifact-manager call failed (${err?.message}); re-resolving + retrying`);
|
|
10525
|
+
return await op(await this.getAM(true));
|
|
10526
|
+
}
|
|
10527
|
+
}
|
|
10490
10528
|
async init() {
|
|
10491
10529
|
try {
|
|
10492
|
-
|
|
10493
|
-
if (!
|
|
10530
|
+
const am = await this.getAM(true);
|
|
10531
|
+
if (!am) {
|
|
10494
10532
|
this.log("[SHARING NOTIFY] Artifact manager not available");
|
|
10495
10533
|
return;
|
|
10496
10534
|
}
|
|
@@ -10519,15 +10557,17 @@ class SharingNotificationSync {
|
|
|
10519
10557
|
shareType: params.shareType || "session"
|
|
10520
10558
|
};
|
|
10521
10559
|
try {
|
|
10522
|
-
|
|
10523
|
-
|
|
10524
|
-
|
|
10525
|
-
|
|
10526
|
-
|
|
10527
|
-
|
|
10528
|
-
|
|
10529
|
-
|
|
10530
|
-
|
|
10560
|
+
await this.withAM(async (am) => {
|
|
10561
|
+
const artifact = await am.create({
|
|
10562
|
+
alias,
|
|
10563
|
+
parent_id: this.shareCollectionId,
|
|
10564
|
+
type: "share-notification",
|
|
10565
|
+
stage: true,
|
|
10566
|
+
manifest,
|
|
10567
|
+
_rkwargs: true
|
|
10568
|
+
});
|
|
10569
|
+
await am.commit({ artifact_id: artifact.id, _rkwargs: true }).catch(() => {
|
|
10570
|
+
});
|
|
10531
10571
|
});
|
|
10532
10572
|
} catch (createErr) {
|
|
10533
10573
|
this.log(`[SHARING NOTIFY] share-notification attach skipped for ${params.recipientEmail}: ${createErr.message}`);
|
|
@@ -10569,14 +10609,16 @@ class SharingNotificationSync {
|
|
|
10569
10609
|
if (!this.initialized || !this.shareCollectionId) return;
|
|
10570
10610
|
const alias = shareAlias(sessionId, recipientEmail);
|
|
10571
10611
|
try {
|
|
10572
|
-
|
|
10573
|
-
|
|
10574
|
-
|
|
10575
|
-
|
|
10576
|
-
|
|
10577
|
-
|
|
10578
|
-
|
|
10579
|
-
|
|
10612
|
+
await this.withAM(async (am) => {
|
|
10613
|
+
const existing = await am.read({
|
|
10614
|
+
artifact_id: alias,
|
|
10615
|
+
parent_id: this.shareCollectionId,
|
|
10616
|
+
_rkwargs: true
|
|
10617
|
+
});
|
|
10618
|
+
await am.delete({
|
|
10619
|
+
artifact_id: existing.id,
|
|
10620
|
+
_rkwargs: true
|
|
10621
|
+
});
|
|
10580
10622
|
});
|
|
10581
10623
|
this.log(`[SHARING NOTIFY] Removed share notification for ${recipientEmail} on ${sessionId.slice(0, 8)}`);
|
|
10582
10624
|
} catch {
|
|
@@ -10607,17 +10649,19 @@ class SharingNotificationSync {
|
|
|
10607
10649
|
if (!this.initialized || !this.eventCollectionId) return;
|
|
10608
10650
|
const alias = eventAlias(event.id, event.recipientEmail);
|
|
10609
10651
|
try {
|
|
10610
|
-
|
|
10611
|
-
|
|
10612
|
-
|
|
10613
|
-
|
|
10614
|
-
|
|
10615
|
-
|
|
10616
|
-
|
|
10617
|
-
|
|
10618
|
-
|
|
10619
|
-
|
|
10620
|
-
|
|
10652
|
+
await this.withAM(async (am) => {
|
|
10653
|
+
const artifact = await am.create({
|
|
10654
|
+
alias,
|
|
10655
|
+
parent_id: this.eventCollectionId,
|
|
10656
|
+
type: "user-event",
|
|
10657
|
+
stage: true,
|
|
10658
|
+
manifest: event,
|
|
10659
|
+
_rkwargs: true
|
|
10660
|
+
});
|
|
10661
|
+
await am.commit({
|
|
10662
|
+
artifact_id: artifact.id,
|
|
10663
|
+
_rkwargs: true
|
|
10664
|
+
});
|
|
10621
10665
|
});
|
|
10622
10666
|
this.log(`[USER EVENT] Published ${event.type} to ${event.recipientEmail}`);
|
|
10623
10667
|
try {
|
|
@@ -10644,7 +10688,7 @@ class SharingNotificationSync {
|
|
|
10644
10688
|
const all = [];
|
|
10645
10689
|
const seen = /* @__PURE__ */ new Set();
|
|
10646
10690
|
for (let offset = 0; ; offset += PAGE) {
|
|
10647
|
-
const page = await this.
|
|
10691
|
+
const page = await this.withAM((am) => am.list({ parent_id: parentId, offset, limit: PAGE, _rkwargs: true }));
|
|
10648
10692
|
if (!Array.isArray(page) || page.length === 0) break;
|
|
10649
10693
|
let fresh = 0;
|
|
10650
10694
|
for (const c of page) {
|
|
@@ -10685,7 +10729,7 @@ class SharingNotificationSync {
|
|
|
10685
10729
|
live.push(m);
|
|
10686
10730
|
}
|
|
10687
10731
|
for (const id of expiredOwnedIds) {
|
|
10688
|
-
this.
|
|
10732
|
+
this.withAM((am) => am.delete({ artifact_id: id, _rkwargs: true })).catch(() => {
|
|
10689
10733
|
});
|
|
10690
10734
|
}
|
|
10691
10735
|
return live.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));
|
|
@@ -10711,7 +10755,7 @@ class SharingNotificationSync {
|
|
|
10711
10755
|
return m && typeof m.id === "string" && (m.id === eventId || m.id.slice(0, 8) === short) && typeof m.recipientEmail === "string" && m.recipientEmail.toLowerCase() === normalized;
|
|
10712
10756
|
});
|
|
10713
10757
|
if (!match) return false;
|
|
10714
|
-
await this.
|
|
10758
|
+
await this.withAM((am) => am.delete({ artifact_id: match.id, _rkwargs: true }));
|
|
10715
10759
|
this.log(`[USER EVENT] Acked ${eventId.slice(0, 8)} for ${recipientEmail}`);
|
|
10716
10760
|
return true;
|
|
10717
10761
|
} catch (err) {
|
|
@@ -17475,7 +17519,7 @@ async function startDaemon(options) {
|
|
|
17475
17519
|
try {
|
|
17476
17520
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
17477
17521
|
if (!dir) return;
|
|
17478
|
-
const { reconcileServiceLinks } = await import('./agentCommands-
|
|
17522
|
+
const { reconcileServiceLinks } = await import('./agentCommands-D68wBf-y.mjs');
|
|
17479
17523
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
17480
17524
|
const config = readSvampConfig(configPath);
|
|
17481
17525
|
const entries = Array.from(urls.entries());
|
|
@@ -17493,7 +17537,7 @@ async function startDaemon(options) {
|
|
|
17493
17537
|
}
|
|
17494
17538
|
}
|
|
17495
17539
|
async function createExposedTunnel(spec) {
|
|
17496
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
17540
|
+
const { FrpcTunnel } = await import('./frpc-NDcBtpwa.mjs');
|
|
17497
17541
|
const tunnel = new FrpcTunnel({
|
|
17498
17542
|
name: spec.name,
|
|
17499
17543
|
ports: spec.ports,
|
|
@@ -19711,11 +19755,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
19711
19755
|
});
|
|
19712
19756
|
},
|
|
19713
19757
|
onIssue: async (params) => {
|
|
19714
|
-
const { issueRpc } = await import('./rpc-
|
|
19758
|
+
const { issueRpc } = await import('./rpc-K5xzddMF.mjs');
|
|
19715
19759
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
19716
19760
|
},
|
|
19717
19761
|
onWorkflow: async (params) => {
|
|
19718
|
-
const { workflowRpc } = await import('./rpc-
|
|
19762
|
+
const { workflowRpc } = await import('./rpc-DSyBSuTF.mjs');
|
|
19719
19763
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
19720
19764
|
},
|
|
19721
19765
|
onRipgrep: async (args, cwd) => {
|
|
@@ -20347,11 +20391,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
20347
20391
|
});
|
|
20348
20392
|
},
|
|
20349
20393
|
onIssue: async (params) => {
|
|
20350
|
-
const { issueRpc } = await import('./rpc-
|
|
20394
|
+
const { issueRpc } = await import('./rpc-K5xzddMF.mjs');
|
|
20351
20395
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
20352
20396
|
},
|
|
20353
20397
|
onWorkflow: async (params) => {
|
|
20354
|
-
const { workflowRpc } = await import('./rpc-
|
|
20398
|
+
const { workflowRpc } = await import('./rpc-DSyBSuTF.mjs');
|
|
20355
20399
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
20356
20400
|
},
|
|
20357
20401
|
onRipgrep: async (args, cwd) => {
|
|
@@ -21502,7 +21546,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
|
|
|
21502
21546
|
const PING_TIMEOUT_MS = 15e3;
|
|
21503
21547
|
const POST_RECONNECT_GRACE_MS = 2e4;
|
|
21504
21548
|
const RECONNECT_JITTER_MS = 2500;
|
|
21505
|
-
const { WorkflowScheduler } = await import('./scheduler-
|
|
21549
|
+
const { WorkflowScheduler } = await import('./scheduler-CtKlSyIq.mjs');
|
|
21506
21550
|
const workflowProjectRoots = () => {
|
|
21507
21551
|
const dirs = /* @__PURE__ */ new Set();
|
|
21508
21552
|
for (const s of pidToTrackedSession.values()) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowCrons, y as runWorkflow, H as cronMatches } from './run-
|
|
1
|
+
import { j as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowCrons, y as runWorkflow, H as cronMatches } from './run-DYVmYsvg.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -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-CJVqMnNf.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-CJVqMnNf.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-CJVqMnNf.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-CJVqMnNf.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-CJVqMnNf.mjs');
|
|
239
239
|
const { machine, server } = await connectAndGetMachine(machineId);
|
|
240
240
|
try {
|
|
241
241
|
const info = await machine.serveInfo();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as READ_ONLY_TOOLS, N as loadMachineContext, O as buildMachineInstructions, P as machineToolsForRole, Q as buildMachineTools } from './run-
|
|
1
|
+
import { R as READ_ONLY_TOOLS, N as loadMachineContext, O as buildMachineInstructions, P as machineToolsForRole, Q as buildMachineTools } from './run-DYVmYsvg.mjs';
|
|
2
2
|
import 'node:child_process';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svamp-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.307",
|
|
4
4
|
"description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
|
|
5
5
|
"author": "Amun AI AB",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"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",
|
|
22
22
|
"typecheck": "tsc --noEmit",
|
|
23
|
-
"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-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-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.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": "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-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.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",
|
|
24
24
|
"test:hypha": "node --no-warnings test/test-hypha-service.mjs",
|
|
25
25
|
"dev": "tsx src/cli.ts",
|
|
26
26
|
"dev:daemon": "tsx src/cli.ts daemon start-sync",
|