@sagentlab/navarch-runtime 0.1.116 → 0.1.118
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 +43 -17
- package/bin/muse-mcp-bridge.cjs +3 -0
- package/bin/worktree-guard-hook.cjs +74 -2
- package/dist/adapters/index.cjs +6 -1
- package/dist/adapters/muse.cjs +433 -0
- package/dist/agent-auth.cjs +2 -1
- package/dist/config.cjs +8 -1
- package/dist/conversation/capability.cjs +1 -1
- package/dist/exit-conditions.cjs +1 -1
- package/dist/muse-mcp-bridge.cjs +167 -0
- package/dist/session.cjs +30 -8
- package/node_modules/@muse-code/sdk/LICENSE +21 -0
- package/node_modules/@muse-code/sdk/README.md +88 -0
- package/node_modules/@muse-code/sdk/dist/src/connection/connection.d.ts +149 -0
- package/node_modules/@muse-code/sdk/dist/src/connection/connection.js +581 -0
- package/node_modules/@muse-code/sdk/dist/src/connection/spawn.d.ts +188 -0
- package/node_modules/@muse-code/sdk/dist/src/connection/spawn.js +496 -0
- package/node_modules/@muse-code/sdk/dist/src/errors.d.ts +71 -0
- package/node_modules/@muse-code/sdk/dist/src/errors.js +76 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/approval.d.ts +96 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/approval.js +293 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/client.d.ts +171 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/client.js +442 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/discarded.d.ts +36 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/discarded.js +36 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/gap-fill.d.ts +80 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/gap-fill.js +388 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/host-death.d.ts +139 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/host-death.js +96 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/host-start.d.ts +62 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/host-start.js +81 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/session.d.ts +309 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/session.js +654 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/turn-handle.d.ts +156 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/turn-handle.js +271 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/turn-submit.d.ts +72 -0
- package/node_modules/@muse-code/sdk/dist/src/facade/turn-submit.js +183 -0
- package/node_modules/@muse-code/sdk/dist/src/fingerprint.d.ts +37 -0
- package/node_modules/@muse-code/sdk/dist/src/fingerprint.js +54 -0
- package/node_modules/@muse-code/sdk/dist/src/fold/item-store.d.ts +110 -0
- package/node_modules/@muse-code/sdk/dist/src/fold/item-store.js +169 -0
- package/node_modules/@muse-code/sdk/dist/src/fold/session-fold.d.ts +536 -0
- package/node_modules/@muse-code/sdk/dist/src/fold/session-fold.js +427 -0
- package/node_modules/@muse-code/sdk/dist/src/fold/state-store.d.ts +68 -0
- package/node_modules/@muse-code/sdk/dist/src/fold/state-store.js +89 -0
- package/node_modules/@muse-code/sdk/dist/src/index.d.ts +65 -0
- package/node_modules/@muse-code/sdk/dist/src/index.js +57 -0
- package/node_modules/@muse-code/sdk/dist/src/msp.d.ts +3380 -0
- package/node_modules/@muse-code/sdk/dist/src/pending/pending-command-set.d.ts +361 -0
- package/node_modules/@muse-code/sdk/dist/src/pending/pending-command-set.js +468 -0
- package/node_modules/@muse-code/sdk/package.json +47 -0
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -95,7 +95,8 @@ when the run finishes, so the task view can follow a connected run live.
|
|
|
95
95
|
Live snapshots hold the current turn's stderr back until the turn ends.
|
|
96
96
|
|
|
97
97
|
The machine operator selects **Claude Code**, **OpenAI Codex**, **Google
|
|
98
|
-
Antigravity CLI**, **OpenCode**,
|
|
98
|
+
Antigravity CLI**, **OpenCode**, an **Agent Client Protocol (ACP)** agent, **Qoder**,
|
|
99
|
+
**Pi (local)**, or **Muse Code (experimental)** when connecting a worker. Any selected agent can
|
|
99
100
|
run any unpinned project task; task eligibility depends on capabilities and
|
|
100
101
|
project gates. A task pinned to a runtime waits for a worker that advertises
|
|
101
102
|
that adapter and runs on it — see "Choosing an agent" below.
|
|
@@ -118,7 +119,8 @@ Before generating the command, prepare the machine:
|
|
|
118
119
|
- install Node.js 20 or later (the standard installation includes `npm` and
|
|
119
120
|
`npx`) and Git;
|
|
120
121
|
- install the coding-agent CLI selected in Navarch — `claude`, `codex`,
|
|
121
|
-
`agy`, `opencode`, `dsh` for the default ACP integration,
|
|
122
|
+
`agy`, `opencode`, `dsh` for the default ACP integration, `qoder`, `pi`,
|
|
123
|
+
or `muse` — and complete its normal authentication flow; and
|
|
122
124
|
- for Docker-backed sessions, install and start Docker and use an image that
|
|
123
125
|
contains the selected agent CLI and the repository toolchain, with provider
|
|
124
126
|
credentials supplied through the approved machine or project configuration.
|
|
@@ -241,11 +243,11 @@ The from-source flow — `git clone` + `./install.sh` + `node bin/navarch.cjs
|
|
|
241
243
|
|
|
242
244
|
| Command | Purpose |
|
|
243
245
|
|---|---|
|
|
244
|
-
| `register --token <t> --name <n> [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder] […]` | Registers this machine, saves its local agent choice, and prints the token once. |
|
|
245
|
-
| `connect --token <t> --name <n> [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder] [--project <id>] […]` | Connects this machine to one project, saves its local agent choice, and prints the token once. |
|
|
246
|
-
| `start [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder]` | Runs the daemon. A start-time agent choice overrides the saved choice. |
|
|
247
|
-
| `supervise [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder]` | Runs the daemon under the update supervisor, enabling drain-safe automatic updates and rollback. |
|
|
248
|
-
| `doctor [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder]` | Prints resolved config + Docker/registration status; no side effects. |
|
|
246
|
+
| `register --token <t> --name <n> [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder\|muse\|pi-local] […]` | Registers this machine, saves its local agent choice, and prints the token once. |
|
|
247
|
+
| `connect --token <t> --name <n> [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder\|muse\|pi-local] [--project <id>] […]` | Connects this machine to one project, saves its local agent choice, and prints the token once. |
|
|
248
|
+
| `start [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder\|muse\|pi-local]` | Runs the daemon. A start-time agent choice overrides the saved choice. |
|
|
249
|
+
| `supervise [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder\|muse\|pi-local]` | Runs the daemon under the update supervisor, enabling drain-safe automatic updates and rollback. |
|
|
250
|
+
| `doctor [--agent claude-code\|codex\|antigravity\|opencode\|acp\|qoder\|muse\|pi-local]` | Prints resolved config + Docker/registration status; no side effects. |
|
|
249
251
|
|
|
250
252
|
### Running multiple agents on one machine
|
|
251
253
|
|
|
@@ -459,7 +461,7 @@ unchanged across the deployment.
|
|
|
459
461
|
| `NAVARCH_SANDBOX_PROFILE` | `trusted-development` | Named security profile for Docker sessions (`src/sandbox-profile.cts`): `trusted-development` (image-default user, uncapped, open egress), `untrusted-code` (non-root, 2 CPU / 4g / 512 PIDs, deny-by-default egress, read-only shared git), `elevated-verification` (non-root, 4 CPU / 8g / 2048 PIDs, egress limited to GitHub plus package registries). The default is the exact pre-profile flag set. |
|
|
460
462
|
| `NAVARCH_SANDBOX_EGRESS_NETWORK` | _(unset)_ | Docker network that enforces a profile's egress allowlist. Docker cannot filter by domain itself, so an allowlist profile without this fails closed to `--network=none` and records the denial. |
|
|
461
463
|
| `NAVARCH_DOCKER_IMAGE` | `ghcr.io/sagentlab/navarch-sandbox-agent:0.1.0` | Version-pinned per-session image with Node 20, git, GitHub CLI, ripgrep, jq, SSH, and Claude Code 2.1.218. Override with an image tag or digest you control. |
|
|
462
|
-
| `NAVARCH_AGENT` | saved choice, then `claude-code` | Local choice of agent adapter: `claude-code`, `codex`, `
|
|
464
|
+
| `NAVARCH_AGENT` | saved choice, then `claude-code` | Local choice of agent adapter: `claude-code`, `codex`, `antigravity`, `opencode`, `acp`, `qoder`, `muse`, or `pi-local`. Overrides the choice saved by `connect`/`register`; `start --agent` has highest priority. |
|
|
463
465
|
| `NAVARCH_RUNTIMES` | resolved local agent choice | Comma list of installed/authenticated adapters advertised to dispatch. Unpinned tasks run on the preferred agent; a task runtime pin selects the matching adapter. Unrecognized ids are dropped with a warning that names them, so a typo cannot silently shrink the advertised set. |
|
|
464
466
|
| `NAVARCH_UPDATE_CHANNEL` | `stable` | Release channel advertised by the worker (`stable` or `canary`); the server-managed machine channel remains authoritative. |
|
|
465
467
|
| `NAVARCH_AUTO_UPDATE` | on under `supervise` | Set `off`, `false`, or `0` to report releases without staging or activating them. Automatic activation is always off under plain `start`. |
|
|
@@ -475,8 +477,10 @@ unchanged across the deployment.
|
|
|
475
477
|
| `NAVARCH_ACP_EXTRA_ARGS` | `--profile,acp` | Comma list of arguments used to start the ACP server. Override this together with `NAVARCH_ACP_BIN` for another ACP-compatible coding agent. |
|
|
476
478
|
| `NAVARCH_QODER_BIN` | `qoder` | Path/name of the Qoder CLI binary. |
|
|
477
479
|
| `NAVARCH_QODER_EXTRA_ARGS` | — | Comma list of extra CLI args appended after the unattended defaults (`--setting-sources`, `--permission-mode auto`, `--output-format json`). An explicit `--output-format`, `--permission-mode`, `--settings`, `--model`, or `--reasoning-effort` here replaces the per-session default. Qoder selects its own account models; pin one via `--model` here or `connect --model` to override. |
|
|
480
|
+
| `NAVARCH_MUSE_BIN` | `muse` | Path/name of the native Muse Code CLI. Requires authenticated experimental `muse serve` SDK access; the npm SDK does not install the CLI. See [Muse Code setup](../docs/navarch/muse-code.md). |
|
|
481
|
+
| `NAVARCH_MUSE_EXTRA_ARGS` | — | Comma list of arguments passed to `muse serve`. Permission/sandbox bypass flags are rejected. Configure narrow native approval rules rather than enabling blanket approval. |
|
|
478
482
|
| `NAVARCH_MCP_CONFIG_PATH` | — | Path to the platform MCP config passed as `--mcp-config`. |
|
|
479
|
-
| `NAVARCH_WORKTREE_GUARD` | on | Host-mode sessions get an adapter-native per-session worktree boundary guard (see below). Set `off` to disable it for every runtime on the machine — required to run OpenCode on
|
|
483
|
+
| `NAVARCH_WORKTREE_GUARD` | on | Host-mode sessions get an adapter-native per-session worktree boundary guard (see below). Set `off` to disable it for every runtime on the machine — required to run OpenCode or Muse on an already-isolated host. |
|
|
480
484
|
| `NAVARCH_NAVI_CONVERSATIONS` | on | Serve read-only Navi repository conversations on this machine. Only the `claude-code` adapter on the host sandbox with the worktree guard on is supported; `navarch-runtime doctor` prints the `navi_chat:` state and reason. Set `off` to stop polling for conversations. |
|
|
481
485
|
| `NAVARCH_NAVI_WORKSPACE_CHAT` | off | Explicitly enable writable Navi chat on a supported Claude Code host runtime. Owners can choose **Edit and run commands**; automatic permission review and the worktree guard remain active. Commands run on this host, not in a hard sandbox. Changes stay under `<workspaceRoot>/chat-workspaces/<conversationId>/repo` until the operator removes them. See [workspace chat](../docs/navarch/navi-workspace-chat.md). |
|
|
482
486
|
| `NAVARCH_CONVERSATION_POLL_MS` | `5000` | Idle poll interval for queued conversation turns (1000–30000). |
|
|
@@ -545,6 +549,18 @@ metadata directory.
|
|
|
545
549
|
OpenCode receives a private, per-session config, project config discovery is
|
|
546
550
|
disabled, and lease MCP headers are referenced through child-only environment
|
|
547
551
|
variables instead of being copied into its config file or argv.
|
|
552
|
+
- **Muse Code (experimental):** guarded hosts do not advertise Muse; a
|
|
553
|
+
Muse-only guarded worker fails closed before claiming. Use a custom Docker
|
|
554
|
+
image with native Muse, its authentication, Node.js, and the matching Navarch
|
|
555
|
+
runtime's `navarch-muse-mcp-bridge` executable. Use a dedicated clean Muse
|
|
556
|
+
configuration with no unrelated MCP servers, plugins, or hooks: session MCP
|
|
557
|
+
is additive to native configuration. The default image contains
|
|
558
|
+
neither Muse nor its bridge. A host guard opt-out is an explicit operator
|
|
559
|
+
choice for an already-isolated worker and removes the boundary machine-wide;
|
|
560
|
+
generated Muse setup commands never make that choice. Muse uses
|
|
561
|
+
`denyUnmatched`, verified by a session readback, and rejects interactive
|
|
562
|
+
approval requests. Preconfigure narrow rules for required shell/write actions
|
|
563
|
+
and the actual Navarch MCP tool namespace. See [Muse Code setup](../docs/navarch/muse-code.md).
|
|
548
564
|
- **ACP agents:** the protocol client rejects every unattended permission
|
|
549
565
|
escalation. The agent remains responsible for enforcing its declared file
|
|
550
566
|
sandbox; use Navarch Docker mode when the ACP server itself does not provide
|
|
@@ -643,10 +659,15 @@ export NAVARCH_AGENT=acp
|
|
|
643
659
|
# `connect --model` can pin one explicitly.
|
|
644
660
|
export NAVARCH_AGENT=qoder
|
|
645
661
|
|
|
646
|
-
#
|
|
647
|
-
#
|
|
648
|
-
#
|
|
649
|
-
export
|
|
662
|
+
# Muse Code (experimental, runtime 0.1.117+) — see the dedicated setup
|
|
663
|
+
# guide before starting: native authenticated `muse serve`, narrow approval
|
|
664
|
+
# rules, clean native configuration, and deliberate isolation are required.
|
|
665
|
+
export NAVARCH_AGENT=muse
|
|
666
|
+
|
|
667
|
+
# Advanced compatibility mode: advertise every installed, configured adapter.
|
|
668
|
+
# On a guarded host, `opencode`, `antigravity` and `muse` are dropped (see the
|
|
669
|
+
# boundary notes above); the rest are advertised as written.
|
|
670
|
+
export NAVARCH_RUNTIMES=claude-code,codex,antigravity,opencode,acp,qoder,muse
|
|
650
671
|
```
|
|
651
672
|
|
|
652
673
|
For the legacy single-runtime setting, priority is `start --agent` →
|
|
@@ -660,10 +681,10 @@ or `claude-code`-pinned tasks. List only adapters this worker can really run:
|
|
|
660
681
|
in Docker mode that means CLIs installed in `NAVARCH_DOCKER_IMAGE`, otherwise
|
|
661
682
|
pinned tasks for a missing adapter are claimed and then fail.
|
|
662
683
|
|
|
663
|
-
|
|
664
|
-
(`src/adapters/types.cts`)
|
|
665
|
-
`
|
|
666
|
-
|
|
684
|
+
The BYO adapters implement the same `AgentAdapter` interface
|
|
685
|
+
(`src/adapters/types.cts`). Supported isolation modes are adapter-specific;
|
|
686
|
+
Muse uses `muse serve` over stdio on an explicitly isolated host or through
|
|
687
|
+
`docker exec -i` in a prepared custom container — `session.cts` picks one (`src/adapters/index.cts`'s
|
|
667
688
|
`selectAdapter`) at the start of each session and passes `agent_type`
|
|
668
689
|
through to `complete()` unchanged by whatever happened during the run.
|
|
669
690
|
|
|
@@ -678,6 +699,10 @@ reference (the platform default is `opencode/x-preview-f-free`, Ox Alpha Free
|
|
|
678
699
|
(Unlimited) on OpenCode Zen), or `default` to preserve the authenticated
|
|
679
700
|
account's selection. ACP sessions use the agent's advertised default model and
|
|
680
701
|
set the standard `reasoning_effort` configuration option when it is available.
|
|
702
|
+
Muse uses the account-owned `default` model; Navarch adds no Muse project-model
|
|
703
|
+
column or public model catalog. Its SDK integration is experimental and has no
|
|
704
|
+
Navi conversation capability. Read [Muse Code setup and limitations](../docs/navarch/muse-code.md)
|
|
705
|
+
before using private repositories, especially Muse Contributor data settings.
|
|
681
706
|
Machine-wide extra arguments still configure other CLI behavior; dispatched
|
|
682
707
|
model policy wins.
|
|
683
708
|
|
|
@@ -838,6 +863,7 @@ cli.cts
|
|
|
838
863
|
- openCodeAdapter (adapters/opencode.cts) — `opencode run --format json < prompt`
|
|
839
864
|
- acpAdapter (adapters/acp.cts) — ACP v1 JSON-RPC/stdio; defaults to `dsh --profile acp`
|
|
840
865
|
- qoderAdapter (adapters/qoder.cts) — `qoder -p --output-format json < prompt`
|
|
866
|
+
- museAdapter (adapters/muse.cts) — experimental Muse Session Protocol via `muse serve`
|
|
841
867
|
heartbeating the lease every NAVARCH_LEASE_HEARTBEAT_INTERVAL_MS throughout either;
|
|
842
868
|
a failed heartbeat aborts the run (kills the process) and marks the outcome as lease-lost
|
|
843
869
|
5. mapExitCondition (exit-conditions.cts) → redact.cts scrubs the transcript → upload.cts PUTs it
|
|
@@ -173,12 +173,80 @@ function expandHome(value) {
|
|
|
173
173
|
return value;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Previous character on the same line, ignoring blanks; "" at a true line
|
|
178
|
+
* start. A line that ends in an unescaped backslash continues onto the next
|
|
179
|
+
* line in the shell, so that backslash is returned instead.
|
|
180
|
+
*/
|
|
181
|
+
function previousSignificantChar(command, index) {
|
|
182
|
+
for (let i = index - 1; i >= 0; i--) {
|
|
183
|
+
const ch = command[i];
|
|
184
|
+
if (ch === "\n") {
|
|
185
|
+
let j = i - 1;
|
|
186
|
+
while (j >= 0 && (command[j] === "\r" || command[j] === " " || command[j] === "\t")) j--;
|
|
187
|
+
let slashes = 0;
|
|
188
|
+
while (j >= 0 && command[j] === "\\") {
|
|
189
|
+
slashes++;
|
|
190
|
+
j--;
|
|
191
|
+
}
|
|
192
|
+
return slashes % 2 === 1 ? "\\" : "";
|
|
193
|
+
}
|
|
194
|
+
if (ch !== " " && ch !== "\t") return ch;
|
|
195
|
+
}
|
|
196
|
+
return "";
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* True when the token sits directly after a quote that opens a word
|
|
201
|
+
* (`"/** x *\/"`). A closing quote (`"" /*`, `"x"/*`) leaves the token as a
|
|
202
|
+
* bare shell argument, so it does not count.
|
|
203
|
+
*/
|
|
204
|
+
function isInsideOpeningQuote(command, start) {
|
|
205
|
+
const quote = command[start - 1];
|
|
206
|
+
// Backticks run a command, so never use them to exempt a path token.
|
|
207
|
+
if (quote !== '"' && quote !== "'") return false;
|
|
208
|
+
// Only the command's first quote can prove an opening quoted word without
|
|
209
|
+
// parsing shell comments, heredocs and nested substitutions. Earlier quote
|
|
210
|
+
// characters make this ambiguous: keep screening rather than risk treating
|
|
211
|
+
// a closing quote after a continuation as an opening one.
|
|
212
|
+
if (/["'`]/.test(command.slice(0, start - 1))) return false;
|
|
213
|
+
const beforeQuote = command[start - 2];
|
|
214
|
+
return beforeQuote === undefined || /[\s=(<>;|&]/.test(beforeQuote);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* True when a "/"-leading token is comment or markup text rather than a path:
|
|
219
|
+
* a closing tag (`</p>`), a block-comment opener (`/**`, `/*`), or a line
|
|
220
|
+
* comment (`// note`). Each rule is deliberately narrow so real escapes stay
|
|
221
|
+
* screened: tag names that exist at the filesystem root (`</home>`) are still
|
|
222
|
+
* checked, `/*` and `//` only count at a comment position (line start, right
|
|
223
|
+
* after an opening quote, or after `;`) so `rm -rf /*`, `find // -name x`
|
|
224
|
+
* and `rm -rf "" /*` stay blocked, and a block comment needs a closing
|
|
225
|
+
* `*` + `/` later in the text.
|
|
226
|
+
*/
|
|
227
|
+
function isCommentOrMarkupToken(command, start, token) {
|
|
228
|
+
const end = start + token.length;
|
|
229
|
+
const next = command[end];
|
|
230
|
+
|
|
231
|
+
if (command[start - 1] === "<" && next === ">" && /^\/[A-Za-z][\w:.-]*$/.test(token)) {
|
|
232
|
+
return !fs.existsSync(token);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const atCommentPosition =
|
|
236
|
+
isInsideOpeningQuote(command, start) ||
|
|
237
|
+
["", ";"].includes(previousSignificantChar(command, start));
|
|
238
|
+
if (!atCommentPosition || next === undefined || !/\s/.test(next)) return false;
|
|
239
|
+
if (token === "/*" || token === "/**") return command.indexOf("*/", end) !== -1;
|
|
240
|
+
return token === "//" && /\S/.test(command.slice(end));
|
|
241
|
+
}
|
|
242
|
+
|
|
176
243
|
/**
|
|
177
244
|
* Pulls path-like references out of a shell command: absolute paths,
|
|
178
245
|
* home-anchored paths (`~...`, `$HOME/...`), and relative `..` traversals.
|
|
179
246
|
* Lexical by design — see the file header for why this is a guardrail, not
|
|
180
247
|
* a parser. URLs survive untouched (the char before `//` in `https://` is
|
|
181
|
-
* `:`, which is not a path delimiter here).
|
|
248
|
+
* `:`, which is not a path delimiter here). Comment and markup text that
|
|
249
|
+
* merely starts with "/" (`/** doc *\/`, `// note`, `</p>`) is not a path.
|
|
182
250
|
*/
|
|
183
251
|
function extractBashPathCandidates(command) {
|
|
184
252
|
const candidates = [];
|
|
@@ -193,7 +261,11 @@ function extractBashPathCandidates(command) {
|
|
|
193
261
|
const absoluteRe = /(?:^|[\s'"`=(<>;|&])(\/[^\s'"`<>;|&)]*)/g;
|
|
194
262
|
const homeRe = /(?:^|[\s'"`=(<>;|&])((?:~|\$\{?HOME\}?)[^\s'"`<>;|&)]*)/g;
|
|
195
263
|
let match;
|
|
196
|
-
while ((match = absoluteRe.exec(command)))
|
|
264
|
+
while ((match = absoluteRe.exec(command))) {
|
|
265
|
+
const start = match.index + match[0].length - match[1].length;
|
|
266
|
+
if (isCommentOrMarkupToken(command, start, match[1])) continue;
|
|
267
|
+
add(match[1]);
|
|
268
|
+
}
|
|
197
269
|
while ((match = homeRe.exec(command))) add(match[1]);
|
|
198
270
|
|
|
199
271
|
for (const token of command.split(/[\s'"`;|&<>()]+/)) {
|
package/dist/adapters/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.runQoderAdapter = exports.qoderAdapter = exports.runAcpAdapter = exports.acpAdapter = exports.runPiAdapter = exports.piAdapter = exports.runLocalPiAdapter = exports.localPiAdapter = exports.runOpenCodeAdapter = exports.openCodeAdapter = exports.runGeminiAdapter = exports.geminiAdapter = exports.runAntigravityAdapter = exports.antigravityAdapter = exports.runCodexAdapter = exports.codexAdapter = exports.runClaudeCodeAdapter = exports.claudeCodeAdapter = void 0;
|
|
3
|
+
exports.runMuseAdapter = exports.museAdapter = exports.runQoderAdapter = exports.qoderAdapter = exports.runAcpAdapter = exports.acpAdapter = exports.runPiAdapter = exports.piAdapter = exports.runLocalPiAdapter = exports.localPiAdapter = exports.runOpenCodeAdapter = exports.openCodeAdapter = exports.runGeminiAdapter = exports.geminiAdapter = exports.runAntigravityAdapter = exports.antigravityAdapter = exports.runCodexAdapter = exports.codexAdapter = exports.runClaudeCodeAdapter = exports.claudeCodeAdapter = void 0;
|
|
4
4
|
exports.selectAdapter = selectAdapter;
|
|
5
5
|
const claude_cjs_1 = require("./claude.cjs");
|
|
6
6
|
Object.defineProperty(exports, "claudeCodeAdapter", { enumerable: true, get: function () { return claude_cjs_1.claudeCodeAdapter; } });
|
|
@@ -29,6 +29,9 @@ Object.defineProperty(exports, "runAcpAdapter", { enumerable: true, get: functio
|
|
|
29
29
|
const qoder_cjs_1 = require("./qoder.cjs");
|
|
30
30
|
Object.defineProperty(exports, "qoderAdapter", { enumerable: true, get: function () { return qoder_cjs_1.qoderAdapter; } });
|
|
31
31
|
Object.defineProperty(exports, "runQoderAdapter", { enumerable: true, get: function () { return qoder_cjs_1.runQoderAdapter; } });
|
|
32
|
+
const muse_cjs_1 = require("./muse.cjs");
|
|
33
|
+
Object.defineProperty(exports, "museAdapter", { enumerable: true, get: function () { return muse_cjs_1.museAdapter; } });
|
|
34
|
+
Object.defineProperty(exports, "runMuseAdapter", { enumerable: true, get: function () { return muse_cjs_1.runMuseAdapter; } });
|
|
32
35
|
/**
|
|
33
36
|
* Picks the AgentAdapter (adapters/types.cts) session.cts should run a
|
|
34
37
|
* session with, keyed off config.cts's `agentType` (NAVARCH_AGENT). This is
|
|
@@ -50,6 +53,8 @@ function selectAdapter(agentType) {
|
|
|
50
53
|
return acp_cjs_1.acpAdapter;
|
|
51
54
|
case "qoder":
|
|
52
55
|
return qoder_cjs_1.qoderAdapter;
|
|
56
|
+
case "muse":
|
|
57
|
+
return muse_cjs_1.museAdapter;
|
|
53
58
|
case "claude-code":
|
|
54
59
|
return claude_cjs_1.claudeCodeAdapter;
|
|
55
60
|
case "pi-local":
|