svamp-cli 0.2.296 → 0.2.297
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-CGpZCy6r.mjs → adminCommands-DgjPSsrK.mjs} +1 -1
- package/dist/{agentCommands-BB9V70n7.mjs → agentCommands-B7naHDWq.mjs} +5 -5
- package/dist/{auth-CTcFSmNv.mjs → auth-BELggWCf.mjs} +1 -1
- package/dist/{cli-DLq5wuL-.mjs → cli-C-dcoT95.mjs} +69 -69
- package/dist/cli.mjs +2 -2
- package/dist/{commands-BGyQASCT.mjs → commands-6NGsQNcq.mjs} +2 -2
- package/dist/{commands-C6-J2cYh.mjs → commands-9RCokP3o.mjs} +2 -2
- package/dist/{commands-COqzlq3t.mjs → commands-B-sJlyvW.mjs} +2 -2
- package/dist/{commands-BY4rS-E4.mjs → commands-BJZyPz9N.mjs} +1 -1
- package/dist/{commands-glTd_gyw.mjs → commands-BxKXn8q2.mjs} +2 -2
- package/dist/{commands-C91Cya-X.mjs → commands-DVw-VfWc.mjs} +1 -1
- package/dist/{commands-llyYnyLR.mjs → commands-Dk18oHFj.mjs} +7 -7
- package/dist/{commands-DOHvsmKj.mjs → commands-cVnS-T4r.mjs} +1 -1
- package/dist/{fleet-PEJuRu8I.mjs → fleet-CbdPguLQ.mjs} +1 -1
- package/dist/{frpc-BtNpheHe.mjs → frpc-DXiVmDEz.mjs} +1 -1
- package/dist/{headlessCli-CsNSt80-.mjs → headlessCli-DLqmC4KJ.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{notifyCommands-5tlRpkjz.mjs → notifyCommands-DYFhp4eV.mjs} +1 -1
- package/dist/package-Bbhk823j.mjs +64 -0
- package/dist/{rpc-Dm2C8f67.mjs → rpc-CJbR3vhe.mjs} +1 -1
- package/dist/{rpc-DmQuRSyU.mjs → rpc-v1hrwmCr.mjs} +1 -1
- package/dist/{run-zUX_Ur8D.mjs → run-8Q-jBpEp.mjs} +1 -1
- package/dist/{run-BLmCDxvV.mjs → run-BKR-KNMV.mjs} +150 -12
- package/dist/{scheduler-Bup5XvL_.mjs → scheduler-DXE6xA8q.mjs} +1 -1
- package/dist/{serveCommands-Qj1CYwXe.mjs → serveCommands-B57iAgxC.mjs} +5 -5
- package/dist/{sideband-COVIgnXL.mjs → sideband-C5_SnwE7.mjs} +1 -1
- package/package.json +2 -2
- package/dist/package-B3cVZ2-p.mjs +0 -64
|
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
5
|
-
import { H as buildOutpostInstall, I as ChannelStore, J as DEFAULT_OUTPOST_DOWNLOAD_BASE, K as setupOutpostChannel } from './run-
|
|
5
|
+
import { H as buildOutpostInstall, I as ChannelStore, J as DEFAULT_OUTPOST_DOWNLOAD_BASE, K as setupOutpostChannel } from './run-BKR-KNMV.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -187,7 +187,7 @@ async function outpostCommand(args) {
|
|
|
187
187
|
console.error('usage: svamp outpost exec [--machine <id>] "<command>"');
|
|
188
188
|
process.exit(1);
|
|
189
189
|
}
|
|
190
|
-
const { ChannelOutbox } = await import('./run-
|
|
190
|
+
const { ChannelOutbox } = await import('./run-BKR-KNMV.mjs').then(function (n) { return n.at; });
|
|
191
191
|
const outbox = new ChannelOutbox(projectDir());
|
|
192
192
|
const id = "x" + Date.now().toString(36);
|
|
193
193
|
outbox.append(cfg.channel, { to: "outpost", body: JSON.stringify({ type: "exec", id, cmd, target: target || "" }) });
|
|
@@ -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 { W as parseFrontmatter, X as getSkillsServer, Y as getSkillsWorkspaceName, Z as getSkillsCollectionName, _ as fetchWithTimeout, $ as searchSkills, a0 as SKILLS_DIR, a1 as getSkillInfo, a2 as downloadSkillFile, a3 as listSkillFiles } from './run-
|
|
4
|
+
import { W as parseFrontmatter, X as getSkillsServer, Y as getSkillsWorkspaceName, Z as getSkillsCollectionName, _ as fetchWithTimeout, $ as searchSkills, a0 as SKILLS_DIR, a1 as getSkillInfo, a2 as downloadSkillFile, a3 as listSkillFiles } from './run-BKR-KNMV.mjs';
|
|
5
5
|
import 'fs/promises';
|
|
6
6
|
import 'url';
|
|
7
7
|
import 'child_process';
|
|
@@ -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-DXiVmDEz.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-BJZyPz9N.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-B7naHDWq.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-BKR-KNMV.mjs').then(function (n) { return n.ap; });
|
|
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-DXiVmDEz.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-BJZyPz9N.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-BJZyPz9N.mjs');
|
|
194
194
|
const { server, machine } = await connectAndGetMachine();
|
|
195
195
|
try {
|
|
196
196
|
await machine.tunnelStop({ name });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { j as resolveProjectRoot, M as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-
|
|
2
|
+
import { j as resolveProjectRoot, M as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-BKR-KNMV.mjs';
|
|
3
3
|
import 'os';
|
|
4
4
|
import 'fs/promises';
|
|
5
5
|
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-BKR-KNMV.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-BKR-KNMV.mjs';
|
|
8
8
|
import 'fs/promises';
|
|
9
9
|
import 'url';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a4 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-
|
|
2
|
-
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-
|
|
1
|
+
import { a4 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-BKR-KNMV.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-C5_SnwE7.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-BKR-KNMV.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, N as parseJwtEmail } from './run-
|
|
1
|
+
import { c as connectToHypha, S as SharingNotificationSync, N as parseJwtEmail } from './run-BKR-KNMV.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.297";
|
|
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-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-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-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-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-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-idle.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-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, 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-BKR-KNMV.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -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 saveWorkflow, C as rawWorkflow, D 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 saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-BKR-KNMV.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 { 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-BKR-KNMV.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';
|
|
@@ -2973,7 +2973,7 @@ Connection: close\r
|
|
|
2973
2973
|
const mount = this.mounts.get(mountName);
|
|
2974
2974
|
const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
|
|
2975
2975
|
try {
|
|
2976
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
2976
|
+
const { FrpcTunnel } = await import('./frpc-DXiVmDEz.mjs');
|
|
2977
2977
|
let tunnel;
|
|
2978
2978
|
tunnel = new FrpcTunnel({
|
|
2979
2979
|
name: tunnelName,
|
|
@@ -5869,7 +5869,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
|
|
|
5869
5869
|
const tunnels = handlers.tunnels;
|
|
5870
5870
|
if (!tunnels) throw new Error("Tunnel management not available");
|
|
5871
5871
|
if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
|
|
5872
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
5872
|
+
const { FrpcTunnel } = await import('./frpc-DXiVmDEz.mjs');
|
|
5873
5873
|
const tunnel = new FrpcTunnel({
|
|
5874
5874
|
name: params.name,
|
|
5875
5875
|
ports: params.ports,
|
|
@@ -6345,7 +6345,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
6345
6345
|
}
|
|
6346
6346
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
6347
6347
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
6348
|
-
const { toolsForRole } = await import('./sideband-
|
|
6348
|
+
const { toolsForRole } = await import('./sideband-C5_SnwE7.mjs');
|
|
6349
6349
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
6350
6350
|
return fmt(r2);
|
|
6351
6351
|
}
|
|
@@ -6450,7 +6450,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
6450
6450
|
return { ok: false, call_id: callId, status: "busy", error: "channel is busy (too many concurrent requests) \u2014 retry shortly" };
|
|
6451
6451
|
}
|
|
6452
6452
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
6453
|
-
const { queryCore } = await import('./commands-
|
|
6453
|
+
const { queryCore } = await import('./commands-BJZyPz9N.mjs');
|
|
6454
6454
|
const timeout = c.reply?.timeout_sec || 120;
|
|
6455
6455
|
let result;
|
|
6456
6456
|
try {
|
|
@@ -6960,6 +6960,124 @@ function setupOutpostChannel(params) {
|
|
|
6960
6960
|
};
|
|
6961
6961
|
}
|
|
6962
6962
|
|
|
6963
|
+
const CODE_ALPHABET = "abcdefghjkmnpqrstuvwxyz23456789";
|
|
6964
|
+
const CODE_LEN = 7;
|
|
6965
|
+
const DEFAULT_PAIRING_TTL_MS = 30 * 60 * 1e3;
|
|
6966
|
+
function pairingsFilePath(svampHome) {
|
|
6967
|
+
const home = svampHome || process.env.SVAMP_HOME || join$1(homedir$1(), ".svamp");
|
|
6968
|
+
return join$1(home, "outpost-pairings.json");
|
|
6969
|
+
}
|
|
6970
|
+
function loadPairings(svampHome) {
|
|
6971
|
+
const file = pairingsFilePath(svampHome);
|
|
6972
|
+
if (!existsSync(file)) return [];
|
|
6973
|
+
try {
|
|
6974
|
+
const parsed = JSON.parse(readFileSync(file, "utf-8"));
|
|
6975
|
+
if (!parsed || !Array.isArray(parsed.pairings)) return [];
|
|
6976
|
+
return parsed.pairings;
|
|
6977
|
+
} catch {
|
|
6978
|
+
return [];
|
|
6979
|
+
}
|
|
6980
|
+
}
|
|
6981
|
+
function savePairings(pairings, svampHome) {
|
|
6982
|
+
const file = pairingsFilePath(svampHome);
|
|
6983
|
+
const dir = join$1(file, "..");
|
|
6984
|
+
if (!existsSync(dir)) mkdirSync$1(dir, { recursive: true });
|
|
6985
|
+
const payload = { version: 1, pairings };
|
|
6986
|
+
writeFileSync$1(file, JSON.stringify(payload, null, 2) + "\n", { encoding: "utf-8", mode: 384 });
|
|
6987
|
+
try {
|
|
6988
|
+
chmodSync(file, 384);
|
|
6989
|
+
} catch {
|
|
6990
|
+
}
|
|
6991
|
+
}
|
|
6992
|
+
function generatePairingCode(len = CODE_LEN) {
|
|
6993
|
+
const n = CODE_ALPHABET.length;
|
|
6994
|
+
const max = Math.floor(256 / n) * n;
|
|
6995
|
+
let out = "";
|
|
6996
|
+
while (out.length < len) {
|
|
6997
|
+
const buf = randomBytes(len * 2);
|
|
6998
|
+
for (let i = 0; i < buf.length && out.length < len; i++) {
|
|
6999
|
+
const b = buf[i];
|
|
7000
|
+
if (b < max) out += CODE_ALPHABET[b % n];
|
|
7001
|
+
}
|
|
7002
|
+
}
|
|
7003
|
+
return out;
|
|
7004
|
+
}
|
|
7005
|
+
async function deletePairingArtifact(am, artifactId, log) {
|
|
7006
|
+
try {
|
|
7007
|
+
await am.delete({ artifact_id: artifactId, _rkwargs: true });
|
|
7008
|
+
} catch (e) {
|
|
7009
|
+
log?.(`[OUTPOST PAIRING] delete ${artifactId} failed (ok if already gone): ${e?.message || e}`);
|
|
7010
|
+
}
|
|
7011
|
+
}
|
|
7012
|
+
async function sweepExpiredPairings(am, svampHome, log) {
|
|
7013
|
+
const now = Date.now();
|
|
7014
|
+
const all = loadPairings(svampHome);
|
|
7015
|
+
const expired = all.filter((p) => p.expiresAt <= now);
|
|
7016
|
+
if (expired.length === 0) return;
|
|
7017
|
+
for (const p of expired) await deletePairingArtifact(am, p.artifactId, log);
|
|
7018
|
+
savePairings(all.filter((p) => p.expiresAt > now), svampHome);
|
|
7019
|
+
}
|
|
7020
|
+
async function burnSessionPairings(am, session, svampHome, log) {
|
|
7021
|
+
const all = loadPairings(svampHome);
|
|
7022
|
+
const mine = all.filter((p) => p.session === session);
|
|
7023
|
+
if (mine.length === 0) return;
|
|
7024
|
+
for (const p of mine) await deletePairingArtifact(am, p.artifactId, log);
|
|
7025
|
+
savePairings(all.filter((p) => p.session !== session), svampHome);
|
|
7026
|
+
}
|
|
7027
|
+
async function mintPairingCode(opts) {
|
|
7028
|
+
const { am, session, payload, log } = opts;
|
|
7029
|
+
const resolver = (opts.resolverBase || "https://hypha.aicell.io").replace(/\/$/, "");
|
|
7030
|
+
const ttlMs = opts.ttlMs && opts.ttlMs > 0 ? opts.ttlMs : DEFAULT_PAIRING_TTL_MS;
|
|
7031
|
+
await sweepExpiredPairings(am, opts.svampHome, log).catch(() => {
|
|
7032
|
+
});
|
|
7033
|
+
const now = Date.now();
|
|
7034
|
+
const existing = loadPairings(opts.svampHome).find((p) => p.session === session && p.expiresAt > now + 3e4);
|
|
7035
|
+
if (existing) {
|
|
7036
|
+
return { code: existing.code, resolver, expiresAt: existing.expiresAt };
|
|
7037
|
+
}
|
|
7038
|
+
const code = generatePairingCode();
|
|
7039
|
+
const alias = `svamp-op-${code}`;
|
|
7040
|
+
const artifactId = `public/${alias}`;
|
|
7041
|
+
const expiresAt = now + ttlMs;
|
|
7042
|
+
const pairJson = JSON.stringify({
|
|
7043
|
+
server: payload.server,
|
|
7044
|
+
channel: payload.channel,
|
|
7045
|
+
token: payload.token,
|
|
7046
|
+
session: payload.session,
|
|
7047
|
+
expiresAt
|
|
7048
|
+
});
|
|
7049
|
+
await am.create({
|
|
7050
|
+
alias,
|
|
7051
|
+
workspace: "public",
|
|
7052
|
+
type: "generic",
|
|
7053
|
+
manifest: { name: `Svamp outpost pairing ${code}`, description: "One-time short-code pairing for an FDE outpost. Single-use, TTL-limited." },
|
|
7054
|
+
config: { permissions: { "*": "r" } },
|
|
7055
|
+
stage: true,
|
|
7056
|
+
_rkwargs: true
|
|
7057
|
+
});
|
|
7058
|
+
const putUrl = await am.put_file({ artifact_id: artifactId, file_path: "pair.json", download_weight: 0, _rkwargs: true });
|
|
7059
|
+
if (!putUrl || typeof putUrl !== "string") throw new Error(`put_file returned invalid URL: ${putUrl}`);
|
|
7060
|
+
const controller = new AbortController();
|
|
7061
|
+
const timer = setTimeout(() => controller.abort(), 3e4);
|
|
7062
|
+
try {
|
|
7063
|
+
const resp = await fetch(putUrl, {
|
|
7064
|
+
method: "PUT",
|
|
7065
|
+
body: pairJson,
|
|
7066
|
+
headers: { "Content-Type": "application/json" },
|
|
7067
|
+
signal: controller.signal
|
|
7068
|
+
});
|
|
7069
|
+
if (!resp.ok) throw new Error(`pair.json upload failed: ${resp.status} ${resp.statusText}`);
|
|
7070
|
+
} finally {
|
|
7071
|
+
clearTimeout(timer);
|
|
7072
|
+
}
|
|
7073
|
+
await am.commit({ artifact_id: artifactId, _rkwargs: true });
|
|
7074
|
+
const all = loadPairings(opts.svampHome);
|
|
7075
|
+
all.push({ session, code, artifactId, expiresAt, createdAt: now });
|
|
7076
|
+
savePairings(all, opts.svampHome);
|
|
7077
|
+
log?.(`[OUTPOST PAIRING] minted ${code} for ${session} (expires in ${Math.round(ttlMs / 6e4)}m)`);
|
|
7078
|
+
return { code, resolver, expiresAt };
|
|
7079
|
+
}
|
|
7080
|
+
|
|
6963
7081
|
const PARTICIPANTS_CHANNEL_ID = "sys-participants";
|
|
6964
7082
|
function channelPublicView(c) {
|
|
6965
7083
|
const u = c.upload;
|
|
@@ -7716,7 +7834,27 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
|
|
|
7716
7834
|
downloadBase: params?.downloadBase || process.env.SVAMP_OUTPOST_DL
|
|
7717
7835
|
});
|
|
7718
7836
|
syncChannelsToMetadata();
|
|
7719
|
-
|
|
7837
|
+
let pairing = {};
|
|
7838
|
+
try {
|
|
7839
|
+
const am = await server.getService("public/artifact-manager");
|
|
7840
|
+
if (am) {
|
|
7841
|
+
if (info.connectedCount > 0) {
|
|
7842
|
+
await burnSessionPairings(am, sessionId, void 0, (m) => console.log(m));
|
|
7843
|
+
} else {
|
|
7844
|
+
const r = await mintPairingCode({
|
|
7845
|
+
am,
|
|
7846
|
+
session: sessionId,
|
|
7847
|
+
payload: { server: info.serverBase, channel: info.channelId, token: info.token, session: sessionId },
|
|
7848
|
+
resolverBase: channelsBaseUrl,
|
|
7849
|
+
log: (m) => console.log(m)
|
|
7850
|
+
});
|
|
7851
|
+
pairing = { pairingCode: r.code, pairingResolver: r.resolver, pairingExpiresAt: r.expiresAt };
|
|
7852
|
+
}
|
|
7853
|
+
}
|
|
7854
|
+
} catch (e) {
|
|
7855
|
+
console.log(`[OUTPOST PAIRING] mint skipped (Form 1 still works): ${e?.message || e}`);
|
|
7856
|
+
}
|
|
7857
|
+
return { ok: true, ...info, ...pairing };
|
|
7720
7858
|
} catch (e) {
|
|
7721
7859
|
return { error: e?.message || String(e) };
|
|
7722
7860
|
}
|
|
@@ -16446,7 +16584,7 @@ async function startDaemon(options) {
|
|
|
16446
16584
|
try {
|
|
16447
16585
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
16448
16586
|
if (!dir) return;
|
|
16449
|
-
const { reconcileServiceLinks } = await import('./agentCommands-
|
|
16587
|
+
const { reconcileServiceLinks } = await import('./agentCommands-B7naHDWq.mjs');
|
|
16450
16588
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
16451
16589
|
const config = readSvampConfig(configPath);
|
|
16452
16590
|
const entries = Array.from(urls.entries());
|
|
@@ -16464,7 +16602,7 @@ async function startDaemon(options) {
|
|
|
16464
16602
|
}
|
|
16465
16603
|
}
|
|
16466
16604
|
async function createExposedTunnel(spec) {
|
|
16467
|
-
const { FrpcTunnel } = await import('./frpc-
|
|
16605
|
+
const { FrpcTunnel } = await import('./frpc-DXiVmDEz.mjs');
|
|
16468
16606
|
const tunnel = new FrpcTunnel({
|
|
16469
16607
|
name: spec.name,
|
|
16470
16608
|
ports: spec.ports,
|
|
@@ -18680,11 +18818,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
18680
18818
|
});
|
|
18681
18819
|
},
|
|
18682
18820
|
onIssue: async (params) => {
|
|
18683
|
-
const { issueRpc } = await import('./rpc-
|
|
18821
|
+
const { issueRpc } = await import('./rpc-CJbR3vhe.mjs');
|
|
18684
18822
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
18685
18823
|
},
|
|
18686
18824
|
onWorkflow: async (params) => {
|
|
18687
|
-
const { workflowRpc } = await import('./rpc-
|
|
18825
|
+
const { workflowRpc } = await import('./rpc-v1hrwmCr.mjs');
|
|
18688
18826
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
18689
18827
|
},
|
|
18690
18828
|
onRipgrep: async (args, cwd) => {
|
|
@@ -19297,11 +19435,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
19297
19435
|
});
|
|
19298
19436
|
},
|
|
19299
19437
|
onIssue: async (params) => {
|
|
19300
|
-
const { issueRpc } = await import('./rpc-
|
|
19438
|
+
const { issueRpc } = await import('./rpc-CJbR3vhe.mjs');
|
|
19301
19439
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
19302
19440
|
},
|
|
19303
19441
|
onWorkflow: async (params) => {
|
|
19304
|
-
const { workflowRpc } = await import('./rpc-
|
|
19442
|
+
const { workflowRpc } = await import('./rpc-v1hrwmCr.mjs');
|
|
19305
19443
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
19306
19444
|
},
|
|
19307
19445
|
onRipgrep: async (args, cwd) => {
|
|
@@ -20428,7 +20566,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
|
|
|
20428
20566
|
const PING_TIMEOUT_MS = 15e3;
|
|
20429
20567
|
const POST_RECONNECT_GRACE_MS = 2e4;
|
|
20430
20568
|
const RECONNECT_JITTER_MS = 2500;
|
|
20431
|
-
const { WorkflowScheduler } = await import('./scheduler-
|
|
20569
|
+
const { WorkflowScheduler } = await import('./scheduler-DXE6xA8q.mjs');
|
|
20432
20570
|
const workflowScheduler = new WorkflowScheduler({
|
|
20433
20571
|
projectRoots: () => {
|
|
20434
20572
|
const dirs = /* @__PURE__ */ new Set();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-
|
|
1
|
+
import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-BKR-KNMV.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-BJZyPz9N.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-BJZyPz9N.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-BJZyPz9N.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-BJZyPz9N.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-BJZyPz9N.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, Q as loadMachineContext, T as buildMachineInstructions, U as machineToolsForRole, V as buildMachineTools } from './run-
|
|
1
|
+
import { R as READ_ONLY_TOOLS, Q as loadMachineContext, T as buildMachineInstructions, U as machineToolsForRole, V as buildMachineTools } from './run-BKR-KNMV.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.297",
|
|
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-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-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-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-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-idle.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-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-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-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-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-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-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-idle.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-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",
|