svamp-cli 0.2.141 → 0.2.142

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.
@@ -183,6 +183,59 @@ async function connectToMachineService() {
183
183
  const { connectAndGetMachine } = await import('./commands-D7lgEFnK.mjs');
184
184
  return connectAndGetMachine();
185
185
  }
186
+ function buildInboxMessage(args) {
187
+ return {
188
+ messageId: shortId(),
189
+ body: args.body,
190
+ timestamp: Date.now(),
191
+ read: false,
192
+ from: `agent:${args.fromSessionId}`,
193
+ fromSession: args.fromSessionId,
194
+ to: args.to,
195
+ subject: args.subject,
196
+ urgency: args.urgency || "normal",
197
+ ...args.replyTo ? { replyTo: args.replyTo } : {},
198
+ ...args.threadId ? { threadId: args.threadId } : {}
199
+ };
200
+ }
201
+ async function inboxSendCore(resolve, args) {
202
+ const { machine, fullId } = await resolve(args.target);
203
+ const message = buildInboxMessage({
204
+ fromSessionId: args.fromSessionId,
205
+ to: fullId,
206
+ body: args.body,
207
+ subject: args.subject,
208
+ urgency: args.urgency
209
+ });
210
+ const result = await machine.sessionRPC(fullId, "sendInboxMessage", { message });
211
+ return { targetId: fullId, messageId: result.messageId, message };
212
+ }
213
+ async function inboxReplyCore(localMachine, resolve, args) {
214
+ const result = await localMachine.sessionRPC(args.sessionId, "getInbox", {});
215
+ const original = (result.messages || []).find(
216
+ (m) => m.messageId === args.messageId || m.messageId.startsWith(args.messageId)
217
+ );
218
+ if (!original) return { kind: "not-found" };
219
+ if (original.channelId && original.correlationId) {
220
+ const rr = await localMachine.sessionRPC(args.sessionId, "channelReply", {
221
+ params: { channel: original.channelId, correlationId: original.correlationId, to: original.from, body: args.body }
222
+ });
223
+ if (rr?.error) return { kind: "channel-error", error: rr.error };
224
+ return { kind: "channel", from: original.from, channelId: original.channelId, correlationId: original.correlationId };
225
+ }
226
+ if (!original.fromSession) return { kind: "no-from-session" };
227
+ const { machine, fullId } = await resolve(original.fromSession);
228
+ const reply = buildInboxMessage({
229
+ fromSessionId: args.sessionId,
230
+ to: fullId,
231
+ body: args.body,
232
+ subject: original.subject ? `Re: ${original.subject}` : void 0,
233
+ replyTo: original.messageId,
234
+ threadId: original.threadId || original.messageId
235
+ });
236
+ const sendResult = await machine.sessionRPC(fullId, "sendInboxMessage", { message: reply });
237
+ return { kind: "sent", targetId: fullId, messageId: sendResult.messageId, message: reply };
238
+ }
186
239
  async function inboxSend(targetSessionId, opts) {
187
240
  requireNotSandboxed("inbox send");
188
241
  const sessionId = process.env.SVAMP_SESSION_ID;
@@ -196,23 +249,19 @@ async function inboxSend(targetSessionId, opts) {
196
249
  process.exit(1);
197
250
  }
198
251
  const { connectAndResolveSession } = await import('./commands-D7lgEFnK.mjs');
199
- const { server, machine, fullId } = await connectAndResolveSession(targetSessionId);
252
+ let server;
200
253
  try {
201
- const message = {
202
- messageId: shortId(),
203
- body,
204
- timestamp: Date.now(),
205
- read: false,
206
- from: `agent:${sessionId}`,
207
- fromSession: sessionId,
208
- to: fullId,
209
- subject: opts?.subject,
210
- urgency: opts?.urgency || "normal"
211
- };
212
- const result = await machine.sessionRPC(fullId, "sendInboxMessage", { message });
213
- console.log(`Inbox message sent to ${fullId.slice(0, 8)} (id: ${result.messageId.slice(0, 8)})`);
254
+ const { targetId, messageId } = await inboxSendCore(
255
+ async (target) => {
256
+ const r = await connectAndResolveSession(target);
257
+ server = r.server;
258
+ return { machine: r.machine, fullId: r.fullId };
259
+ },
260
+ { fromSessionId: sessionId, target: targetSessionId, body, subject: opts?.subject, urgency: opts?.urgency }
261
+ );
262
+ console.log(`Inbox message sent to ${targetId.slice(0, 8)} (id: ${messageId.slice(0, 8)})`);
214
263
  } finally {
215
- await server.disconnect();
264
+ if (server) await server.disconnect();
216
265
  }
217
266
  }
218
267
  async function inboxList(opts) {
@@ -253,53 +302,58 @@ async function inboxReply(messageId, body) {
253
302
  console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
254
303
  process.exit(1);
255
304
  }
256
- let original;
257
- const { server, machine } = await connectToMachineService();
258
- try {
259
- const result = await machine.sessionRPC(sessionId, "getInbox", {});
260
- original = result.messages.find((m) => m.messageId === messageId || m.messageId.startsWith(messageId));
261
- if (!original) {
262
- console.error(`Message ${messageId} not found in inbox.`);
263
- process.exit(1);
264
- }
265
- if (original.channelId && original.correlationId) {
266
- const rr = await machine.sessionRPC(sessionId, "channelReply", {
267
- params: { channel: original.channelId, correlationId: original.correlationId, to: original.from, body }
268
- });
269
- if (rr?.error) {
270
- console.error(`Channel reply failed: ${rr.error}`);
271
- process.exit(1);
305
+ const { connectAndResolveSession } = await import('./commands-D7lgEFnK.mjs');
306
+ const { server: localServer, machine: localMachine } = await connectToMachineService();
307
+ let localDisconnected = false;
308
+ const disconnectLocal = async () => {
309
+ if (!localDisconnected) {
310
+ localDisconnected = true;
311
+ try {
312
+ await localServer.disconnect();
313
+ } catch {
272
314
  }
273
- console.log(`Reply queued to "${original.from}" on channel ${original.channelId} (correlation ${original.correlationId}).`);
274
- return;
275
- }
276
- if (!original.fromSession) {
277
- console.error("Cannot reply: original message has no fromSession (and not a channel message).");
278
- process.exit(1);
279
315
  }
280
- } finally {
281
- await server.disconnect();
282
- }
283
- const { connectAndResolveSession } = await import('./commands-D7lgEFnK.mjs');
284
- const { server: sendServer, machine: sendMachine, fullId } = await connectAndResolveSession(original.fromSession);
316
+ };
317
+ let senderServer;
285
318
  try {
286
- const reply = {
287
- messageId: shortId(),
288
- body,
289
- timestamp: Date.now(),
290
- read: false,
291
- from: `agent:${sessionId}`,
292
- fromSession: sessionId,
293
- to: fullId,
294
- subject: original.subject ? `Re: ${original.subject}` : void 0,
295
- urgency: "normal",
296
- replyTo: original.messageId,
297
- threadId: original.threadId || original.messageId
298
- };
299
- const sendResult = await sendMachine.sessionRPC(fullId, "sendInboxMessage", { message: reply });
300
- console.log(`Reply sent to ${fullId.slice(0, 8)} (id: ${sendResult.messageId.slice(0, 8)})`);
319
+ const res = await inboxReplyCore(
320
+ localMachine,
321
+ async (target) => {
322
+ await disconnectLocal();
323
+ const r = await connectAndResolveSession(target);
324
+ senderServer = r.server;
325
+ return { machine: r.machine, fullId: r.fullId };
326
+ },
327
+ { sessionId, messageId, body }
328
+ );
329
+ switch (res.kind) {
330
+ case "not-found":
331
+ console.error(`Message ${messageId} not found in inbox.`);
332
+ process.exit(1);
333
+ break;
334
+ case "no-from-session":
335
+ console.error("Cannot reply: original message has no fromSession (and not a channel message).");
336
+ process.exit(1);
337
+ break;
338
+ case "channel-error":
339
+ console.error(`Channel reply failed: ${res.error}`);
340
+ process.exit(1);
341
+ break;
342
+ case "channel":
343
+ console.log(`Reply queued to "${res.from}" on channel ${res.channelId} (correlation ${res.correlationId}).`);
344
+ break;
345
+ case "sent":
346
+ console.log(`Reply sent to ${res.targetId.slice(0, 8)} (id: ${res.messageId.slice(0, 8)})`);
347
+ break;
348
+ }
301
349
  } finally {
302
- await sendServer.disconnect();
350
+ await disconnectLocal();
351
+ if (senderServer) {
352
+ try {
353
+ await senderServer.disconnect();
354
+ } catch {
355
+ }
356
+ }
303
357
  }
304
358
  }
305
359
  async function machineNotify(message, level = "info") {
@@ -312,4 +366,4 @@ async function machineNotify(message, level = "info") {
312
366
  console.log(`Machine notification sent [${level}]: ${message}`);
313
367
  }
314
368
 
315
- export { inboxList, inboxReply, inboxSend, machineNotify, sessionBroadcast, sessionNotify, sessionSetLink, sessionSetProjectDescription, sessionSetTitle };
369
+ export { buildInboxMessage, inboxList, inboxReply, inboxReplyCore, inboxSend, inboxSendCore, machineNotify, sessionBroadcast, sessionNotify, sessionSetLink, sessionSetProjectDescription, sessionSetTitle };
package/dist/cli.mjs CHANGED
@@ -390,7 +390,7 @@ async function main() {
390
390
  } else if (!subcommand || subcommand === "start") {
391
391
  await handleInteractiveCommand();
392
392
  } else if (subcommand === "--version" || subcommand === "-v") {
393
- const pkg = await import('./package-DRJxplxz.mjs').catch(() => ({ default: { version: "unknown" } }));
393
+ const pkg = await import('./package-wejuA4s1.mjs').catch(() => ({ default: { version: "unknown" } }));
394
394
  console.log(`svamp version: ${pkg.default.version}`);
395
395
  } else {
396
396
  console.error(`Unknown command: ${subcommand}`);
@@ -912,7 +912,7 @@ async function handleSessionCommand() {
912
912
  console.error("Usage: svamp session set-title <title>");
913
913
  process.exit(1);
914
914
  }
915
- const { sessionSetTitle } = await import('./agentCommands-Ccto8aSC.mjs');
915
+ const { sessionSetTitle } = await import('./agentCommands-_Gq9XHNF.mjs');
916
916
  await sessionSetTitle(title);
917
917
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
918
918
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -920,7 +920,7 @@ async function handleSessionCommand() {
920
920
  console.error("Usage: svamp session set-project-description <text>");
921
921
  process.exit(1);
922
922
  }
923
- const { sessionSetProjectDescription } = await import('./agentCommands-Ccto8aSC.mjs');
923
+ const { sessionSetProjectDescription } = await import('./agentCommands-_Gq9XHNF.mjs');
924
924
  await sessionSetProjectDescription(desc);
925
925
  } else if (sessionSubcommand === "set-link") {
926
926
  const url = sessionArgs[1];
@@ -929,7 +929,7 @@ async function handleSessionCommand() {
929
929
  process.exit(1);
930
930
  }
931
931
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
932
- const { sessionSetLink } = await import('./agentCommands-Ccto8aSC.mjs');
932
+ const { sessionSetLink } = await import('./agentCommands-_Gq9XHNF.mjs');
933
933
  await sessionSetLink(url, label);
934
934
  } else if (sessionSubcommand === "notify") {
935
935
  const message = sessionArgs[1];
@@ -938,7 +938,7 @@ async function handleSessionCommand() {
938
938
  process.exit(1);
939
939
  }
940
940
  const level = parseFlagStr("--level") || "info";
941
- const { sessionNotify } = await import('./agentCommands-Ccto8aSC.mjs');
941
+ const { sessionNotify } = await import('./agentCommands-_Gq9XHNF.mjs');
942
942
  await sessionNotify(message, level);
943
943
  } else if (sessionSubcommand === "broadcast") {
944
944
  const action = sessionArgs[1];
@@ -946,7 +946,7 @@ async function handleSessionCommand() {
946
946
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
947
947
  process.exit(1);
948
948
  }
949
- const { sessionBroadcast } = await import('./agentCommands-Ccto8aSC.mjs');
949
+ const { sessionBroadcast } = await import('./agentCommands-_Gq9XHNF.mjs');
950
950
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
951
951
  } else if (sessionSubcommand === "inbox") {
952
952
  const inboxSubcmd = sessionArgs[1];
@@ -957,7 +957,7 @@ async function handleSessionCommand() {
957
957
  process.exit(1);
958
958
  }
959
959
  if (agentSessionId) {
960
- const { inboxSend } = await import('./agentCommands-Ccto8aSC.mjs');
960
+ const { inboxSend } = await import('./agentCommands-_Gq9XHNF.mjs');
961
961
  await inboxSend(sessionArgs[2], {
962
962
  body: sessionArgs[3],
963
963
  subject: parseFlagStr("--subject"),
@@ -972,7 +972,7 @@ async function handleSessionCommand() {
972
972
  }
973
973
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
974
974
  if (agentSessionId && !sessionArgs[2]) {
975
- const { inboxList } = await import('./agentCommands-Ccto8aSC.mjs');
975
+ const { inboxList } = await import('./agentCommands-_Gq9XHNF.mjs');
976
976
  await inboxList({
977
977
  unread: hasFlag("--unread"),
978
978
  limit: parseFlagInt("--limit"),
@@ -994,7 +994,7 @@ async function handleSessionCommand() {
994
994
  process.exit(1);
995
995
  }
996
996
  if (agentSessionId && !sessionArgs[3]) {
997
- const { inboxList } = await import('./agentCommands-Ccto8aSC.mjs');
997
+ const { inboxList } = await import('./agentCommands-_Gq9XHNF.mjs');
998
998
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
999
999
  } else if (sessionArgs[3]) {
1000
1000
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1004,7 +1004,7 @@ async function handleSessionCommand() {
1004
1004
  }
1005
1005
  } else if (inboxSubcmd === "reply") {
1006
1006
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1007
- const { inboxReply } = await import('./agentCommands-Ccto8aSC.mjs');
1007
+ const { inboxReply } = await import('./agentCommands-_Gq9XHNF.mjs');
1008
1008
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1009
1009
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1010
1010
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1118,7 +1118,7 @@ async function handleMachineCommand() {
1118
1118
  level = machineArgs[++i];
1119
1119
  }
1120
1120
  }
1121
- const { machineNotify } = await import('./agentCommands-Ccto8aSC.mjs');
1121
+ const { machineNotify } = await import('./agentCommands-_Gq9XHNF.mjs');
1122
1122
  await machineNotify(message, level);
1123
1123
  } else if (machineSubcommand === "ls") {
1124
1124
  const { machineLs } = await import('./commands-D7lgEFnK.mjs');
@@ -1,5 +1,5 @@
1
1
  var name = "svamp-cli";
2
- var version = "0.2.141";
2
+ var version = "0.2.142";
3
3
  var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
4
4
  var author = "Amun AI AB";
5
5
  var license = "SEE LICENSE IN LICENSE";
@@ -19,7 +19,7 @@ var exports$1 = {
19
19
  var scripts = {
20
20
  build: "rm -rf dist bin/skills && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/loop bin/skills/loop && cp -r ../../skills/crew bin/skills/crew && tsc --noEmit && pkgroll",
21
21
  typecheck: "tsc --noEmit",
22
- test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-checklist.mjs && npx tsx test/test-checklist-cli.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-routine.mjs && npx tsx test/test-routine-rpc.mjs && npx tsx test/test-checklist-watchdog.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs",
22
+ test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-checklist.mjs && npx tsx test/test-checklist-cli.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-routine.mjs && npx tsx test/test-routine-rpc.mjs && npx tsx test/test-checklist-watchdog.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs",
23
23
  "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
24
24
  dev: "tsx src/cli.ts",
25
25
  "dev:daemon": "tsx src/cli.ts daemon start-sync",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svamp-cli",
3
- "version": "0.2.141",
3
+ "version": "0.2.142",
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 && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/loop bin/skills/loop && cp -r ../../skills/crew bin/skills/crew && tsc --noEmit && pkgroll",
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-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-checklist.mjs && npx tsx test/test-checklist-cli.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-routine.mjs && npx tsx test/test-routine-rpc.mjs && npx tsx test/test-checklist-watchdog.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs",
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-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-checklist.mjs && npx tsx test/test-checklist-cli.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-routine.mjs && npx tsx test/test-routine-rpc.mjs && npx tsx test/test-checklist-watchdog.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs",
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",