svamp-cli 0.1.31 → 0.1.33
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/cli.mjs +122 -41
- package/dist/{commands-78RHC879.mjs → commands-EjpBlIl0.mjs} +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{package-BtoCHVOd.mjs → package-CMmjP_vD.mjs} +1 -1
- package/dist/run-COUdcjR7.mjs +897 -0
- package/dist/run-DaEcQsPx.mjs +892 -0
- package/dist/{run-dBWhjQRf.mjs → run-fEuWMTdD.mjs} +8 -4
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-
|
|
1
|
+
import { s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-fEuWMTdD.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -86,10 +86,12 @@ async function main() {
|
|
|
86
86
|
await handleAgentCommand();
|
|
87
87
|
} else if (subcommand === "session") {
|
|
88
88
|
await handleSessionCommand();
|
|
89
|
-
} else if (subcommand === "--help" || subcommand === "-h"
|
|
89
|
+
} else if (subcommand === "--help" || subcommand === "-h") {
|
|
90
90
|
printHelp();
|
|
91
|
+
} else if (!subcommand || subcommand === "start") {
|
|
92
|
+
await handleInteractiveCommand();
|
|
91
93
|
} else if (subcommand === "--version" || subcommand === "-v") {
|
|
92
|
-
const pkg = await import('./package-
|
|
94
|
+
const pkg = await import('./package-CMmjP_vD.mjs').catch(() => ({ default: { version: "unknown" } }));
|
|
93
95
|
console.log(`svamp version: ${pkg.default.version}`);
|
|
94
96
|
} else {
|
|
95
97
|
console.error(`Unknown command: ${subcommand}`);
|
|
@@ -97,6 +99,45 @@ async function main() {
|
|
|
97
99
|
process.exit(1);
|
|
98
100
|
}
|
|
99
101
|
}
|
|
102
|
+
async function handleInteractiveCommand() {
|
|
103
|
+
const { runInteractive } = await import('./run-COUdcjR7.mjs');
|
|
104
|
+
const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
|
|
105
|
+
let directory = process.cwd();
|
|
106
|
+
let resumeSessionId;
|
|
107
|
+
let continueSession = false;
|
|
108
|
+
let permissionMode;
|
|
109
|
+
const claudeArgs = [];
|
|
110
|
+
let pastSeparator = false;
|
|
111
|
+
for (let i = 0; i < interactiveArgs.length; i++) {
|
|
112
|
+
if (pastSeparator) {
|
|
113
|
+
claudeArgs.push(interactiveArgs[i]);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (interactiveArgs[i] === "--") {
|
|
117
|
+
pastSeparator = true;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if ((interactiveArgs[i] === "-d" || interactiveArgs[i] === "--directory") && i + 1 < interactiveArgs.length) {
|
|
121
|
+
directory = interactiveArgs[++i];
|
|
122
|
+
} else if ((interactiveArgs[i] === "--resume" || interactiveArgs[i] === "-r") && i + 1 < interactiveArgs.length) {
|
|
123
|
+
resumeSessionId = interactiveArgs[++i];
|
|
124
|
+
} else if (interactiveArgs[i] === "--continue" || interactiveArgs[i] === "-c") {
|
|
125
|
+
continueSession = true;
|
|
126
|
+
} else if ((interactiveArgs[i] === "--permission-mode" || interactiveArgs[i] === "-p") && i + 1 < interactiveArgs.length) {
|
|
127
|
+
permissionMode = interactiveArgs[++i];
|
|
128
|
+
} else if (interactiveArgs[i] === "--help" || interactiveArgs[i] === "-h") {
|
|
129
|
+
printInteractiveHelp();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
await runInteractive({
|
|
134
|
+
directory,
|
|
135
|
+
resumeSessionId,
|
|
136
|
+
continueSession,
|
|
137
|
+
permissionMode,
|
|
138
|
+
claudeArgs: claudeArgs.length > 0 ? claudeArgs : void 0
|
|
139
|
+
});
|
|
140
|
+
}
|
|
100
141
|
async function handleAgentCommand() {
|
|
101
142
|
const agentArgs = args.slice(1);
|
|
102
143
|
if (agentArgs.length === 0 || agentArgs[0] === "--help" || agentArgs[0] === "-h") {
|
|
@@ -104,19 +145,19 @@ async function handleAgentCommand() {
|
|
|
104
145
|
return;
|
|
105
146
|
}
|
|
106
147
|
if (agentArgs[0] === "list") {
|
|
107
|
-
const { KNOWN_ACP_AGENTS } = await import('./run-
|
|
108
|
-
console.log("Known
|
|
148
|
+
const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-fEuWMTdD.mjs').then(function (n) { return n.f; });
|
|
149
|
+
console.log("Known agents:");
|
|
109
150
|
for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
|
|
110
|
-
console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")}`);
|
|
151
|
+
console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
|
|
152
|
+
}
|
|
153
|
+
for (const [name, config2] of Object.entries(KNOWN_MCP_AGENTS2)) {
|
|
154
|
+
console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (MCP)`);
|
|
111
155
|
}
|
|
112
156
|
console.log('\nUse "svamp agent <name>" to start an interactive session.');
|
|
113
157
|
console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
|
|
114
158
|
return;
|
|
115
159
|
}
|
|
116
|
-
const { resolveAcpAgentConfig } = await import('./run-
|
|
117
|
-
const { AcpBackend } = await import('./run-dBWhjQRf.mjs').then(function (n) { return n.e; });
|
|
118
|
-
const { GeminiTransport } = await import('./run-dBWhjQRf.mjs').then(function (n) { return n.G; });
|
|
119
|
-
const { DefaultTransport } = await import('./run-dBWhjQRf.mjs').then(function (n) { return n.D; });
|
|
160
|
+
const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-fEuWMTdD.mjs').then(function (n) { return n.f; });
|
|
120
161
|
let cwd = process.cwd();
|
|
121
162
|
const filteredArgs = [];
|
|
122
163
|
for (let i = 0; i < agentArgs.length; i++) {
|
|
@@ -134,20 +175,28 @@ async function handleAgentCommand() {
|
|
|
134
175
|
console.error(err.message);
|
|
135
176
|
process.exit(1);
|
|
136
177
|
}
|
|
178
|
+
const logFn = (...logArgs) => {
|
|
179
|
+
if (process.env.DEBUG) console.error("[debug]", ...logArgs);
|
|
180
|
+
};
|
|
137
181
|
console.log(`Starting ${config.agentName} agent in ${cwd}...`);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
cwd,
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
182
|
+
let backend;
|
|
183
|
+
if (KNOWN_MCP_AGENTS[config.agentName]) {
|
|
184
|
+
const { CodexMcpBackend } = await import('./run-fEuWMTdD.mjs').then(function (n) { return n.h; });
|
|
185
|
+
backend = new CodexMcpBackend({ cwd, log: logFn });
|
|
186
|
+
} else {
|
|
187
|
+
const { AcpBackend } = await import('./run-fEuWMTdD.mjs').then(function (n) { return n.e; });
|
|
188
|
+
const { GeminiTransport } = await import('./run-fEuWMTdD.mjs').then(function (n) { return n.G; });
|
|
189
|
+
const { DefaultTransport } = await import('./run-fEuWMTdD.mjs').then(function (n) { return n.D; });
|
|
190
|
+
const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
|
|
191
|
+
backend = new AcpBackend({
|
|
192
|
+
agentName: config.agentName,
|
|
193
|
+
cwd,
|
|
194
|
+
command: config.command,
|
|
195
|
+
args: config.args,
|
|
196
|
+
transportHandler,
|
|
197
|
+
log: logFn
|
|
198
|
+
});
|
|
199
|
+
}
|
|
151
200
|
let currentText = "";
|
|
152
201
|
backend.onMessage((msg) => {
|
|
153
202
|
switch (msg.type) {
|
|
@@ -255,7 +304,7 @@ async function handleSessionCommand() {
|
|
|
255
304
|
printSessionHelp();
|
|
256
305
|
return;
|
|
257
306
|
}
|
|
258
|
-
const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait } = await import('./commands-
|
|
307
|
+
const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait } = await import('./commands-EjpBlIl0.mjs');
|
|
259
308
|
const parseFlagStr = (flag, shortFlag) => {
|
|
260
309
|
for (let i = 1; i < sessionArgs.length; i++) {
|
|
261
310
|
if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
|
|
@@ -645,32 +694,36 @@ async function uninstallDaemonService() {
|
|
|
645
694
|
}
|
|
646
695
|
function printHelp() {
|
|
647
696
|
console.log(`
|
|
648
|
-
svamp \u2014
|
|
697
|
+
svamp \u2014 AI workspace on Hypha Cloud
|
|
649
698
|
|
|
650
699
|
Usage:
|
|
700
|
+
svamp Start interactive Claude session (synced to cloud)
|
|
701
|
+
svamp start [-d <path>] Same as above, with explicit directory
|
|
651
702
|
svamp login [url] Login to Hypha (opens browser, stores token)
|
|
652
703
|
svamp daemon start Start the daemon (detached)
|
|
653
704
|
svamp daemon stop Stop the daemon (sessions preserved for restart)
|
|
654
|
-
svamp daemon stop --cleanup Stop and mark all sessions as stopped
|
|
655
705
|
svamp daemon status Show daemon status
|
|
656
706
|
svamp daemon install Install as system service (launchd/systemd/wrapper)
|
|
657
|
-
svamp
|
|
658
|
-
svamp session list List active daemon sessions
|
|
659
|
-
svamp session machines List discoverable machines
|
|
707
|
+
svamp session list List active sessions
|
|
660
708
|
svamp session spawn Spawn a new session on the daemon
|
|
661
|
-
svamp session attach <id> Attach to a session
|
|
709
|
+
svamp session attach <id> Attach to a session
|
|
662
710
|
svamp session --help Show all session commands
|
|
663
|
-
svamp agent list List known
|
|
664
|
-
svamp agent <name> Start local
|
|
665
|
-
svamp agent -- <cmd> Start custom ACP agent
|
|
711
|
+
svamp agent list List known agents
|
|
712
|
+
svamp agent <name> Start local agent session (gemini, codex)
|
|
666
713
|
svamp --version Show version
|
|
667
714
|
svamp --help Show this help
|
|
668
715
|
|
|
716
|
+
Interactive mode:
|
|
717
|
+
When you run 'svamp' with no arguments, Claude starts in your terminal
|
|
718
|
+
with full interactive access. Your session is synced to Hypha Cloud so
|
|
719
|
+
it's visible in the web app. When a message arrives from the web app,
|
|
720
|
+
svamp switches to remote mode to process it, then you can press
|
|
721
|
+
Space-Space to return to local mode.
|
|
722
|
+
|
|
669
723
|
Environment variables:
|
|
670
|
-
HYPHA_SERVER_URL Hypha server URL (required for
|
|
724
|
+
HYPHA_SERVER_URL Hypha server URL (required for cloud sync)
|
|
671
725
|
HYPHA_TOKEN Hypha auth token (stored by login command)
|
|
672
726
|
HYPHA_WORKSPACE Hypha workspace / user ID (stored by login command)
|
|
673
|
-
SVAMP_MACHINE_ID Machine identifier (optional, auto-generated)
|
|
674
727
|
SVAMP_HOME Config directory (default: ~/.svamp)
|
|
675
728
|
`);
|
|
676
729
|
}
|
|
@@ -689,7 +742,7 @@ Usage:
|
|
|
689
742
|
}
|
|
690
743
|
function printSessionHelp() {
|
|
691
744
|
console.log(`
|
|
692
|
-
svamp session \u2014 Manage daemon sessions (Claude, Gemini,
|
|
745
|
+
svamp session \u2014 Manage daemon sessions (Claude, Gemini, Codex)
|
|
693
746
|
|
|
694
747
|
Usage:
|
|
695
748
|
svamp session list [--active] [--json] List sessions (alias: ls)
|
|
@@ -708,7 +761,7 @@ Usage:
|
|
|
708
761
|
Options:
|
|
709
762
|
--machine <id>, -m <id> Target a specific machine (prefix match supported)
|
|
710
763
|
|
|
711
|
-
Agents: claude (default), gemini,
|
|
764
|
+
Agents: claude (default), gemini, codex
|
|
712
765
|
|
|
713
766
|
Session and machine IDs can be abbreviated (prefix match, like Docker).
|
|
714
767
|
|
|
@@ -728,22 +781,50 @@ Examples:
|
|
|
728
781
|
svamp session attach abc12345
|
|
729
782
|
`);
|
|
730
783
|
}
|
|
784
|
+
function printInteractiveHelp() {
|
|
785
|
+
console.log(`
|
|
786
|
+
svamp \u2014 Interactive Claude session with cloud sync
|
|
787
|
+
|
|
788
|
+
Usage:
|
|
789
|
+
svamp [-d <path>] [--resume <id>] [--continue] [--permission-mode <mode>] [-- <claude-args>]
|
|
790
|
+
svamp start [-d <path>] [...]
|
|
791
|
+
|
|
792
|
+
Options:
|
|
793
|
+
-d, --directory <path> Working directory (default: cwd)
|
|
794
|
+
-r, --resume <id> Resume a Claude session by ID
|
|
795
|
+
-c, --continue Continue the last Claude session
|
|
796
|
+
-p, --permission-mode <m> Permission mode: default, acceptEdits, bypassPermissions, plan
|
|
797
|
+
-- Pass remaining args to Claude CLI
|
|
798
|
+
|
|
799
|
+
Modes:
|
|
800
|
+
Local mode Full interactive Claude terminal UI (default)
|
|
801
|
+
Remote mode Processes messages from the web app
|
|
802
|
+
|
|
803
|
+
Switching:
|
|
804
|
+
When a message arrives from the web app \u2192 automatically switches to remote mode
|
|
805
|
+
Space Space Switch from remote mode back to local mode
|
|
806
|
+
Ctrl-C Ctrl-C Exit from remote mode
|
|
807
|
+
|
|
808
|
+
The session is synced to Hypha Cloud so it's visible in the web app.
|
|
809
|
+
Works offline if no Hypha credentials are configured.
|
|
810
|
+
`);
|
|
811
|
+
}
|
|
731
812
|
function printAgentHelp() {
|
|
732
813
|
console.log(`
|
|
733
|
-
svamp agent \u2014 Interactive
|
|
814
|
+
svamp agent \u2014 Interactive agent sessions (local, no daemon required)
|
|
734
815
|
|
|
735
816
|
Usage:
|
|
736
|
-
svamp agent list List known
|
|
817
|
+
svamp agent list List known agents
|
|
737
818
|
svamp agent <name> [-d <path>] Start interactive agent session
|
|
738
819
|
svamp agent -- <cmd> [args] Start custom ACP agent
|
|
739
820
|
|
|
740
821
|
Examples:
|
|
741
822
|
svamp agent gemini Start Gemini agent in current directory
|
|
742
823
|
svamp agent gemini -d /tmp/proj Start Gemini agent in /tmp/proj
|
|
743
|
-
svamp agent
|
|
824
|
+
svamp agent codex Start Codex agent
|
|
744
825
|
svamp agent -- mycli --acp Start custom ACP-compatible agent
|
|
745
826
|
|
|
746
|
-
Known agents: gemini,
|
|
827
|
+
Known agents: gemini (ACP), codex (MCP)
|
|
747
828
|
`);
|
|
748
829
|
}
|
|
749
830
|
main().catch((err) => {
|
|
@@ -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-fEuWMTdD.mjs';
|
|
5
5
|
import 'os';
|
|
6
6
|
import 'fs/promises';
|
|
7
7
|
import 'fs';
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { c as connectToHypha, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, a as registerSessionService, s as startDaemon, b as stopDaemon } from './run-
|
|
1
|
+
export { c as connectToHypha, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, a as registerSessionService, s as startDaemon, b as stopDaemon } from './run-fEuWMTdD.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|