svamp-cli 0.2.328 → 0.2.329
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/README.md +27 -6
- package/dist/{adminCommands-DotiO7jx.mjs → adminCommands-C-p7ayqB.mjs} +1 -1
- package/dist/{agentCommands-DefL1pIo.mjs → agentCommands-B4sCl_5R.mjs} +5 -5
- package/dist/{auth-DLK3tc_f.mjs → auth-X_CjxN_J.mjs} +1 -1
- package/dist/{cli-BCN1uAze.mjs → cli-BY4DQnRs.mjs} +79 -78
- package/dist/cli.mjs +2 -2
- package/dist/{commands-BD6Qfv3u.mjs → commands-6uHR7YHf.mjs} +11 -11
- package/dist/{commands-DH2WCdPH.mjs → commands-BInj_IDQ.mjs} +3 -3
- package/dist/{commands-gO42Ijz3.mjs → commands-BQjZb1eL.mjs} +3 -3
- package/dist/{commands-xhA5FWM8.mjs → commands-BR5FB3lB.mjs} +10 -2
- package/dist/{commands-BEnXz1U_.mjs → commands-C8uGnx2z.mjs} +2 -2
- package/dist/{commands-BFlfbiey.mjs → commands-CEURyD-l.mjs} +1 -1
- package/dist/{commands-DEZLlXJ3.mjs → commands-rKfH5E8g.mjs} +34 -27
- package/dist/{commands-uN_gulw0.mjs → commands-rmxjAHLz.mjs} +12 -4
- package/dist/{fleet-CbKnESdR.mjs → fleet-CxxkWc3z.mjs} +8 -4
- package/dist/{headlessCli-2wTVI-Kj.mjs → headlessCli-NkXGxjrT.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{notifyCommands--tpDRdrL.mjs → notifyCommands-CEvdTCIS.mjs} +1 -1
- package/dist/package-BNriEfp8.mjs +64 -0
- package/dist/{rpc-BCLZpI5H.mjs → rpc-fZm83jEI.mjs} +2 -1
- package/dist/{rpc-CZqCc9Pr.mjs → rpc-q5KTMSRl.mjs} +1 -1
- package/dist/{run-CSV6OgQ8.mjs → run-1CHjd0_g.mjs} +84 -22
- package/dist/{run-BAYXQ4-N.mjs → run-C7JwLKGe.mjs} +1 -1
- package/dist/{scheduler-s_j089nA.mjs → scheduler-DTRcVW02.mjs} +1 -1
- package/dist/{serveCommands-C4779W5n.mjs → serveCommands-CXlZ6Bdy.mjs} +10 -10
- package/dist/{sideband-B7sDP61Z.mjs → sideband-C4QaSCEM.mjs} +1 -1
- package/package.json +4 -4
- package/dist/package-BORyBEey.mjs +0 -64
package/README.md
CHANGED
|
@@ -92,7 +92,7 @@ svamp session deny <id> # Deny pending permission
|
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
94
|
svamp session share <id> --list
|
|
95
|
-
svamp session share <id> --add <email>
|
|
95
|
+
svamp session share <id> --add <email> # Added users get FULL (owner-equivalent) access
|
|
96
96
|
svamp session share <id> --remove <email>
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -100,24 +100,45 @@ svamp session share <id> --remove <email>
|
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
102
|
svamp session spawn claude -d <path> --isolate
|
|
103
|
-
svamp session spawn claude -d <path> --share alice@example.com
|
|
103
|
+
svamp session spawn claude -d <path> --share alice@example.com
|
|
104
104
|
svamp session spawn claude -d <path> --security-context ./context.json
|
|
105
105
|
svamp session spawn claude -d <path> --deny-network
|
|
106
106
|
svamp session spawn claude -d <path> --deny-read /etc --allow-write /tmp/work
|
|
107
107
|
svamp session spawn claude -d <path> --allow-domain api.anthropic.com
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
> **⚠ Not all of these are enforced (#0878).** `--deny-read` is accepted but enforced by **no** sandbox
|
|
111
|
+
> backend; `--allow-write` and `--allow-domain` are **not enforced** under the docker/podman isolation
|
|
112
|
+
> backends. Do not rely on them as containment. To actually restrict what a session can read, narrow
|
|
113
|
+
> `allowedDirectories` in a `--security-context` file. See
|
|
114
|
+
> [`docs/sharing-and-security.md`](../../docs/sharing-and-security.md) for the full
|
|
115
|
+
> enforced-vs-advisory table (kept there, not duplicated here, so the two cannot drift).
|
|
116
|
+
|
|
110
117
|
#### Loop (Self-Verifying Iterative Automation)
|
|
111
118
|
|
|
112
119
|
```bash
|
|
113
|
-
svamp session loop
|
|
120
|
+
svamp session loop <id> "<task>" --until "<completion criteria>" [--max N]
|
|
114
121
|
svamp session loop-cancel <id>
|
|
115
122
|
svamp session loop-status <id>
|
|
123
|
+
svamp session loop-extend <id> --reason "<why>" # raise the soft iteration cap
|
|
116
124
|
```
|
|
117
125
|
|
|
118
|
-
The loop iterates a task until it's *objectively* done
|
|
119
|
-
|
|
120
|
-
|
|
126
|
+
The loop iterates a task until it's *objectively* done. The engine is Claude Code's **native `/goal`**
|
|
127
|
+
command: svamp composes a completion condition (your task + `--until` + an optional oracle command +
|
|
128
|
+
a turn cap) and arms `/goal` on the session; Claude's own session-scoped `Stop` hook then keeps the
|
|
129
|
+
agent working until a fresh, independent evaluator confirms the condition holds. Loop status is
|
|
130
|
+
mirrored to `.svamp/<session-id>/loop/loop-state.json` (`engine: 'goal'`) for the UI and the CLI.
|
|
131
|
+
|
|
132
|
+
An issue-backlog loop (oracle = `svamp issue pending`) is **durable**: when the backlog empties it goes
|
|
133
|
+
`dormant` — armed and watching, driving zero turns — and re-arms when an issue is added or reopened.
|
|
134
|
+
|
|
135
|
+
> Historical: an earlier custom engine used a `stop-gate.mjs` hook, an evaluator subagent and a
|
|
136
|
+
> git-visible `LOOP.md`, shipped as a `loop` skill. That engine was **retired** — `/goal` is the sole
|
|
137
|
+
> engine, `skills/loop/` was deleted, and the daemon now strips those leftover hooks on spawn. The
|
|
138
|
+
> `loop-start` / `--criteria` / `--evaluator` spellings survive only as aliases.
|
|
139
|
+
|
|
140
|
+
**Claude only** — `/goal` is a Claude Code feature, so ACP agents (Gemini, Kimi) kick a loop off but
|
|
141
|
+
do not self-verify.
|
|
121
142
|
|
|
122
143
|
### Machine Management
|
|
123
144
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as connectToHypha,
|
|
1
|
+
import { c as connectToHypha, L as computeCollectionConfigUpdate, M as SYSTEM_COLLECTION_CONFIG } from './run-1CHjd0_g.mjs';
|
|
2
2
|
import { existsSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import os from 'node:os';
|
|
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync } from '
|
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import { requireNotSandboxed } from './sandboxDetect-DNTcbgWD.mjs';
|
|
5
|
-
import { e as shortId } from './run-
|
|
5
|
+
import { e as shortId } from './run-1CHjd0_g.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -96,7 +96,7 @@ async function sessionSetTitle(title) {
|
|
|
96
96
|
}
|
|
97
97
|
async function sessionSetProjectDescription(description) {
|
|
98
98
|
const dir = process.cwd();
|
|
99
|
-
const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-
|
|
99
|
+
const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-1CHjd0_g.mjs').then(function (n) { return n.at; });
|
|
100
100
|
const desc = sanitizeDescription(description, 240);
|
|
101
101
|
if (!desc) {
|
|
102
102
|
console.error("Project description is empty.");
|
|
@@ -369,7 +369,7 @@ async function sessionBroadcast(action, args) {
|
|
|
369
369
|
console.log(`Broadcast sent: ${action}`);
|
|
370
370
|
}
|
|
371
371
|
async function connectToMachineService() {
|
|
372
|
-
const { connectAndGetMachine } = await import('./commands-
|
|
372
|
+
const { connectAndGetMachine } = await import('./commands-rKfH5E8g.mjs');
|
|
373
373
|
return connectAndGetMachine();
|
|
374
374
|
}
|
|
375
375
|
function buildInboxMessage(args) {
|
|
@@ -452,7 +452,7 @@ async function inboxSend(targetSessionId, opts) {
|
|
|
452
452
|
console.error("Message body is required.");
|
|
453
453
|
process.exit(1);
|
|
454
454
|
}
|
|
455
|
-
const { connectAndResolveSession } = await import('./commands-
|
|
455
|
+
const { connectAndResolveSession } = await import('./commands-rKfH5E8g.mjs');
|
|
456
456
|
let server;
|
|
457
457
|
try {
|
|
458
458
|
const { targetId, messageId } = await inboxSendCore(
|
|
@@ -507,7 +507,7 @@ async function inboxReply(messageId, body, opts) {
|
|
|
507
507
|
console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
|
|
508
508
|
process.exit(1);
|
|
509
509
|
}
|
|
510
|
-
const { connectAndResolveSession } = await import('./commands-
|
|
510
|
+
const { connectAndResolveSession } = await import('./commands-rKfH5E8g.mjs');
|
|
511
511
|
const { server: localServer, machine: localMachine } = await connectToMachineService();
|
|
512
512
|
let localDisconnected = false;
|
|
513
513
|
const disconnectLocal = async () => {
|