palmier 1.1.22 → 1.1.23

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.
Files changed (38) hide show
  1. package/README.md +2 -19
  2. package/dist/agents/agent.d.ts +3 -8
  3. package/dist/agents/agent.js +0 -1
  4. package/dist/agents/aider.js +2 -7
  5. package/dist/agents/claude.js +2 -11
  6. package/dist/agents/cline.js +2 -7
  7. package/dist/agents/codex.js +2 -4
  8. package/dist/agents/copilot.js +2 -10
  9. package/dist/agents/cursor.js +2 -7
  10. package/dist/agents/deepagents.js +2 -7
  11. package/dist/agents/droid.js +2 -7
  12. package/dist/agents/goose.js +2 -4
  13. package/dist/agents/grok.js +2 -7
  14. package/dist/agents/hermes.js +2 -7
  15. package/dist/agents/kimi.js +2 -6
  16. package/dist/agents/kiro.js +2 -7
  17. package/dist/agents/openclaw.js +1 -1
  18. package/dist/agents/opencode.js +2 -7
  19. package/dist/agents/qoder.js +2 -7
  20. package/dist/agents/qwen.js +2 -4
  21. package/dist/agents/shared-prompt.js +3 -8
  22. package/dist/agents/wizard.js +0 -1
  23. package/dist/commands/run.js +1 -1
  24. package/dist/index.js +0 -22
  25. package/dist/password-store.d.ts +1 -3
  26. package/dist/password-store.js +1 -7
  27. package/dist/pwa/assets/index-BPB3G_2J.css +1 -0
  28. package/dist/pwa/assets/{index-rqAuAC0q.js → index-De8hDN5I.js} +42 -46
  29. package/dist/pwa/assets/{web-ew6AFUex.js → web-BQ0rMZ_X.js} +1 -1
  30. package/dist/pwa/assets/{web-DQDmufih.js → web-miCfAJBc.js} +1 -1
  31. package/dist/pwa/assets/{web-Dp5Zj6HJ.js → web-o_D8jqAS.js} +1 -1
  32. package/dist/pwa/index.html +2 -2
  33. package/dist/rpc-handler.js +1 -8
  34. package/dist/types.d.ts +0 -2
  35. package/package.json +1 -1
  36. package/dist/commands/passwords.d.ts +0 -3
  37. package/dist/commands/passwords.js +0 -25
  38. package/dist/pwa/assets/index-ByB7B0d2.css +0 -1
package/README.md CHANGED
@@ -13,7 +13,7 @@ The control surface is bidirectional:
13
13
  * **Phone → agents:** start ad-hoc sessions, register schedule- or event-triggered tasks, inspect session output, and respond to agent input/confirmation requests.
14
14
  * **Agents → phone:** agents can read device state (location, calendar, contacts, notifications, SMS, battery) and trigger actions (push notifications, full-screen alarms, SMS, email, contact/calendar writes, ringer mode).
15
15
 
16
- Capability access is opt-in per device: each capability is gated behind an Android permission and a per-host toggle. An optional yolo mode auto-approves agent input/confirmation requests.
16
+ Capability access is opt-in per device: each capability is gated behind an Android permission and a per-host toggle. Agents always run in yolo mode (all tool calls auto-approved) when their CLI supports it.
17
17
 
18
18
  ## Quick Start
19
19
 
@@ -158,21 +158,7 @@ Revoking the linked device also clears the host's linked-device record; device c
158
158
 
159
159
  Palmier can store website passwords and PINs like a browser's password manager so agents can sign in to sites without ever seeing the credentials. When an agent driving a browser (via the `playwright-cli` skill) reaches a login or PIN field, it calls the `fill-password` tool with the page URL, the username, and the field's element ref. Palmier matches the saved secret by **origin**, fills it directly into the live browser session, and presses Enter to submit the form in the same step — so the plaintext secret sits on the page for as little time as possible and never enters the agent's context. If nothing is saved for that `(origin, username)`, Palmier prompts you in the app with a masked dialog. The dialog has a "Save for next time" checkbox (on by default): leave it checked to store the secret for reuse, or uncheck it to fill it just this once without saving. Either way it is filled into the page. The plaintext secret is never returned to the agent and is never written to task history.
160
160
 
161
- Saved passwords and PINs are encrypted at rest with AES-256-GCM under a host-local key, both stored in `~/.config/palmier/` (`passwords.enc` and `password-key`). Manage them from the app via **Manage saved passwords** in the side panel (lists origin and username only, with per-entry delete), or from the host CLI:
162
-
163
- ```bash
164
- # List saved passwords (origin and username only — never the password)
165
- palmier passwords list
166
-
167
- # Delete a specific saved password
168
- palmier passwords delete https://example.com alice
169
-
170
- # Delete every saved password for an origin
171
- palmier passwords delete https://example.com
172
-
173
- # Delete all saved passwords
174
- palmier passwords clear
175
- ```
161
+ Saved passwords and PINs are encrypted at rest with AES-256-GCM under a host-local key, both stored in `~/.config/palmier/` (`passwords.enc` and `password-key`). Manage them from the app via **Manage saved passwords** in the side panel (lists origin and username only, with per-entry delete).
176
162
 
177
163
  ### The `init` Command
178
164
 
@@ -229,9 +215,6 @@ The default network interface is detected once during `palmier init` and saved t
229
215
  | `palmier clients list` | List active client tokens |
230
216
  | `palmier clients revoke <token>` | Revoke a specific client token |
231
217
  | `palmier clients revoke-all` | Revoke all client tokens |
232
- | `palmier passwords list` | List saved passwords (origin and username only) |
233
- | `palmier passwords delete <origin> [username]` | Delete a saved password (omit username to delete all for the origin) |
234
- | `palmier passwords clear` | Delete all saved passwords |
235
218
  | `palmier info` | Show host connection info (address, mode) |
236
219
  | `palmier serve` | Run the persistent RPC handler (default command) |
237
220
  | `palmier restart` | Restart the palmier serve daemon |
@@ -1,4 +1,4 @@
1
- import type { ParsedTask, RequiredPermission } from "../types.js";
1
+ import type { ParsedTask } from "../types.js";
2
2
  export interface CommandLine {
3
3
  args: string[];
4
4
  /** If provided, the string is written to the process's stdin and then the pipe is closed. */
@@ -28,8 +28,6 @@ export interface AgentTool {
28
28
  /** Whether this agent supports permission overrides (e.g. --allowedTools).
29
29
  * When falsy, the permissions section is omitted from agent instructions. */
30
30
  supportsPermissions?: boolean;
31
- /** Whether this agent supports yolo mode (auto-approve all tools). */
32
- supportsYolo?: boolean;
33
31
  /** When true, the run loop persists the agent's stderr output only if the invocation fails. */
34
32
  suppressStdErr?: boolean;
35
33
  /** Matches the model name (capture group 1) in the banner the CLI prints on stderr.
@@ -40,10 +38,8 @@ export interface AgentTool {
40
38
  * Surfaced next to the agent in the installer. */
41
39
  freeUsage?: string;
42
40
  /** Return the command and args used to run a task. If followupPrompt is provided, use it instead of the task's prompt,
43
- * and treat it as a continuation of the original run (reuse the same session, etc).
44
- * extraPermissions: pass an array of RequiredPermission for transient permissions granted for this run only,
45
- * or pass `"yolo"` to enable yolo mode (auto-approve all tools, skip permission instructions). */
46
- getTaskRunCommandLine(task: ParsedTask, followupPrompt?: string, extraPermissions?: RequiredPermission[] | "yolo"): CommandLine;
41
+ * and treat it as a continuation of the original run (reuse the same session, etc). */
42
+ getTaskRunCommandLine(task: ParsedTask, followupPrompt?: string): CommandLine;
47
43
  }
48
44
  export declare function getPromptCommandLine(agent: AgentTool, prompt: string): CommandLine;
49
45
  export declare function probeAgent(agent: AgentTool): Promise<boolean>;
@@ -56,7 +52,6 @@ export interface DetectedAgent {
56
52
  key: string;
57
53
  label: string;
58
54
  supportsPermissions?: boolean;
59
- supportsYolo?: boolean;
60
55
  npmPackage?: string;
61
56
  /** Runtime marker for "managed by Palmier" — present iff Palmier installed/manages this agent. */
62
57
  version?: string;
@@ -121,7 +121,6 @@ export async function detectAgents(previous, newlyInstalled) {
121
121
  key,
122
122
  label: agent.label,
123
123
  supportsPermissions: agent.supportsPermissions,
124
- supportsYolo: agent.supportsYolo,
125
124
  ...(agent.npmPackage ? { npmPackage: agent.npmPackage } : {}),
126
125
  ...(version ? { version } : {}),
127
126
  });
@@ -4,14 +4,9 @@ export const aiderAgent = {
4
4
  command: "aider",
5
5
  promptArgs: ["--message"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
9
- const yolo = extraPermissions === "yolo";
7
+ getTaskRunCommandLine(task, followupPrompt) {
10
8
  const prompt = followupPrompt ?? getAgentInstructions(task);
11
- const args = [];
12
- if (yolo) {
13
- args.push("--yes-always");
14
- }
9
+ const args = ["--yes-always"];
15
10
  args.push("--message", prompt);
16
11
  return { args };
17
12
  },
@@ -6,20 +6,11 @@ export const claudeAgent = {
6
6
  probeArg: "--version",
7
7
  authArgs: ["auth", "login"],
8
8
  supportsPermissions: true,
9
- supportsYolo: true,
10
9
  npmPackage: "@anthropic-ai/claude-code",
11
10
  freeUsage: "Free with Claude Pro",
12
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
13
- const yolo = extraPermissions === "yolo";
11
+ getTaskRunCommandLine(task, followupPrompt) {
14
12
  const prompt = followupPrompt ?? getAgentInstructions(task);
15
- const args = ["--permission-mode", yolo ? "bypassPermissions" : "acceptEdits", "-p"];
16
- if (!yolo) {
17
- args.push("--allowedTools", "WebFetch", "Skill(playwright-cli:*)", "Bash(curl:*)", "Bash(wget:*)", "Bash(playwright:*)", "Bash(playwright-cli:*)");
18
- const allPerms = [...(task.frontmatter.permissions ?? []), ...(extraPermissions ?? [])];
19
- for (const p of allPerms) {
20
- args.push(p.name);
21
- }
22
- }
13
+ const args = ["--permission-mode", "bypassPermissions", "-p"];
23
14
  if (followupPrompt) {
24
15
  args.push("-c");
25
16
  }
@@ -4,15 +4,10 @@ export const clineAgent = {
4
4
  command: "cline",
5
5
  promptArgs: ["--yolo", "-p"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
7
  npmPackage: "cline",
9
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
10
- const yolo = extraPermissions === "yolo";
8
+ getTaskRunCommandLine(task, followupPrompt) {
11
9
  const prompt = followupPrompt ?? getAgentInstructions(task);
12
- const args = [];
13
- if (yolo) {
14
- args.push("--yolo");
15
- }
10
+ const args = ["--yolo"];
16
11
  args.push(prompt);
17
12
  return { args };
18
13
  },
@@ -5,15 +5,13 @@ export const codexAgent = {
5
5
  promptArgs: ["exec", "--skip-git-repo-check"],
6
6
  probeArg: "--version",
7
7
  authArgs: ["login"],
8
- supportsYolo: true,
9
8
  suppressStdErr: true,
10
9
  stderrModelPattern: /^model: (.+)$/m,
11
10
  npmPackage: "@openai/codex",
12
11
  freeUsage: "Free Tier",
13
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
14
- const yolo = extraPermissions === "yolo";
12
+ getTaskRunCommandLine(task, followupPrompt) {
15
13
  const prompt = followupPrompt ?? getAgentInstructions(task);
16
- const args = ["exec", "--skip-git-repo-check", "--sandbox", yolo ? "danger-full-access" : "workspace-write"];
14
+ const args = ["exec", "--skip-git-repo-check", "--sandbox", "danger-full-access"];
17
15
  if (followupPrompt) {
18
16
  args.push("resume", "--last");
19
17
  }
@@ -5,21 +5,13 @@ export const copilotAgent = {
5
5
  promptArgs: ["-p"],
6
6
  probeArg: "-v",
7
7
  authArgs: ["login"],
8
- supportsYolo: true,
9
8
  suppressStdErr: true,
10
9
  npmPackage: "@github/copilot",
11
10
  freeUsage: "Free Tier",
12
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
13
- const yolo = extraPermissions === "yolo";
11
+ getTaskRunCommandLine(task, followupPrompt) {
14
12
  const prompt = followupPrompt ?? getAgentInstructions(task);
15
13
  const args = ["-p", prompt];
16
- if (yolo) {
17
- args.push("--yolo");
18
- }
19
- else {
20
- const allPerms = [...(task.frontmatter.permissions ?? []), ...(extraPermissions ?? [])];
21
- args.push(`--allow-tool=${["web_fetch", ...allPerms.map((p) => p.name)].join(",")}`);
22
- }
14
+ args.push("--yolo");
23
15
  if (followupPrompt) {
24
16
  args.push("--continue");
25
17
  }
@@ -4,14 +4,9 @@ export const cursorAgent = {
4
4
  command: "cursor",
5
5
  promptArgs: ["-p"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
9
- const yolo = extraPermissions === "yolo";
7
+ getTaskRunCommandLine(task, followupPrompt) {
10
8
  const prompt = followupPrompt ?? getAgentInstructions(task);
11
- const args = [];
12
- if (yolo) {
13
- args.push("--force");
14
- }
9
+ const args = ["--force"];
15
10
  if (followupPrompt) {
16
11
  args.push("--continue");
17
12
  }
@@ -4,14 +4,9 @@ export const deepAgentsAgent = {
4
4
  command: "deepagents",
5
5
  promptArgs: ["--non-interactive"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
9
- const yolo = extraPermissions === "yolo";
7
+ getTaskRunCommandLine(task, followupPrompt) {
10
8
  const prompt = followupPrompt ?? getAgentInstructions(task);
11
- const args = [];
12
- if (yolo) {
13
- args.push("--auto-approve");
14
- }
9
+ const args = ["--auto-approve"];
15
10
  if (followupPrompt) {
16
11
  args.push("--resume");
17
12
  }
@@ -4,15 +4,10 @@ export const droidAgent = {
4
4
  command: "droid",
5
5
  promptArgs: ["exec"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
7
  npmPackage: "@factory/cli",
9
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
10
- const yolo = extraPermissions === "yolo";
8
+ getTaskRunCommandLine(task, followupPrompt) {
11
9
  const prompt = followupPrompt ?? getAgentInstructions(task);
12
- const args = ["exec", "--session-id", task.frontmatter.id];
13
- if (yolo) {
14
- args.push("--skip-permissions-unsafe");
15
- }
10
+ const args = ["exec", "--session-id", task.frontmatter.id, "--skip-permissions-unsafe"];
16
11
  args.push(prompt);
17
12
  return { args };
18
13
  },
@@ -4,15 +4,13 @@ export const gooseAgent = {
4
4
  command: "goose",
5
5
  promptArgs: ["run", "--text"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
9
- const yolo = extraPermissions === "yolo";
7
+ getTaskRunCommandLine(task, followupPrompt) {
10
8
  const prompt = followupPrompt ?? getAgentInstructions(task);
11
9
  const args = ["run"];
12
10
  if (followupPrompt) {
13
11
  args.push("--resume");
14
12
  }
15
13
  args.push("--text", prompt);
16
- return { args, ...(yolo ? { env: { GOOSE_MODE: "auto" } } : {}) };
14
+ return { args, env: { GOOSE_MODE: "auto" } };
17
15
  },
18
16
  };
@@ -5,16 +5,11 @@ export const grokAgent = {
5
5
  promptArgs: ["-p"],
6
6
  probeArg: "--version",
7
7
  authArgs: ["login"],
8
- supportsYolo: true,
9
8
  npmPackage: "@xai-official/grok",
10
9
  freeUsage: "Free Tier",
11
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
12
- const yolo = extraPermissions === "yolo";
10
+ getTaskRunCommandLine(task, followupPrompt) {
13
11
  const prompt = followupPrompt ?? getAgentInstructions(task);
14
- const args = [];
15
- if (yolo) {
16
- args.push("--always-approve");
17
- }
12
+ const args = ["--always-approve"];
18
13
  if (followupPrompt) {
19
14
  args.push("-c");
20
15
  }
@@ -4,14 +4,9 @@ export const hermesAgent = {
4
4
  command: "hermes",
5
5
  promptArgs: ["chat", "-q"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
9
- const yolo = extraPermissions === "yolo";
7
+ getTaskRunCommandLine(task, followupPrompt) {
10
8
  const prompt = followupPrompt ?? getAgentInstructions(task);
11
- const args = ["chat"];
12
- if (yolo) {
13
- args.push("--trust-all-tools");
14
- }
9
+ const args = ["chat", "--trust-all-tools"];
15
10
  if (followupPrompt) {
16
11
  args.push("--continue");
17
12
  }
@@ -4,19 +4,15 @@ export const kimiAgent = {
4
4
  command: "kimi",
5
5
  promptArgs: ["-p"],
6
6
  probeArg: "--version",
7
- supportsYolo: false,
8
7
  suppressStdErr: true,
9
8
  npmPackage: "@moonshot-ai/kimi-code",
10
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
11
- const yolo = extraPermissions === "yolo";
9
+ getTaskRunCommandLine(task, followupPrompt) {
12
10
  const prompt = followupPrompt ?? getAgentInstructions(task);
13
11
  const args = [];
14
- if (yolo) {
15
- args.push("--yolo");
16
- }
17
12
  if (followupPrompt) {
18
13
  args.push("--continue");
19
14
  }
15
+ // Print mode (-p) already implies yolo.
20
16
  args.push("-p", prompt);
21
17
  return { args };
22
18
  },
@@ -4,14 +4,9 @@ export const kiroAgent = {
4
4
  command: "kiro-cli",
5
5
  promptArgs: ["--no-interactive"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
9
- const yolo = extraPermissions === "yolo";
7
+ getTaskRunCommandLine(task, followupPrompt) {
10
8
  const prompt = followupPrompt ?? getAgentInstructions(task);
11
- const args = [];
12
- if (yolo) {
13
- args.push("--trust-all-tools");
14
- }
9
+ const args = ["--trust-all-tools"];
15
10
  if (followupPrompt) {
16
11
  args.push("--resume");
17
12
  }
@@ -5,7 +5,7 @@ export const openClawAgent = {
5
5
  promptArgs: ["agent", "--local", "--agent", "main", "--message"],
6
6
  probeArg: "--version",
7
7
  npmPackage: "openclaw",
8
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
8
+ getTaskRunCommandLine(task, followupPrompt) {
9
9
  const prompt = followupPrompt ?? getAgentInstructions(task);
10
10
  // OpenClaw does not support stdin as prompt.
11
11
  const args = ["agent", "--local", "--session-id", task.frontmatter.id, "--message", prompt];
@@ -4,15 +4,10 @@ export const openCodeAgent = {
4
4
  command: "opencode",
5
5
  promptArgs: ["run"],
6
6
  probeArg: "--version",
7
- supportsYolo: true,
8
7
  npmPackage: "opencode-ai",
9
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
10
- const yolo = extraPermissions === "yolo";
8
+ getTaskRunCommandLine(task, followupPrompt) {
11
9
  const prompt = followupPrompt ?? getAgentInstructions(task);
12
- const args = ["run"];
13
- if (yolo) {
14
- args.push("--dangerously-skip-permissions");
15
- }
10
+ const args = ["run", "--dangerously-skip-permissions"];
16
11
  if (followupPrompt) {
17
12
  args.push("--continue");
18
13
  }
@@ -5,16 +5,11 @@ export const qoderAgent = {
5
5
  promptArgs: ["-p"],
6
6
  probeArg: "--version",
7
7
  authArgs: ["login"],
8
- supportsYolo: true,
9
8
  npmPackage: "@qoder-ai/qodercli",
10
9
  freeUsage: "Free Tier",
11
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
12
- const yolo = extraPermissions === "yolo";
10
+ getTaskRunCommandLine(task, followupPrompt) {
13
11
  const prompt = followupPrompt ?? getAgentInstructions(task);
14
- const args = [];
15
- if (yolo) {
16
- args.push("--yolo");
17
- }
12
+ const args = ["--yolo"];
18
13
  if (followupPrompt) {
19
14
  args.push("-c");
20
15
  }
@@ -5,12 +5,10 @@ export const qwenAgent = {
5
5
  promptArgs: ["-p"],
6
6
  probeArg: "--version",
7
7
  authArgs: ["auth", "qwen-oauth"],
8
- supportsYolo: true,
9
8
  npmPackage: "@qwen-code/qwen-code",
10
- getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
11
- const yolo = extraPermissions === "yolo";
9
+ getTaskRunCommandLine(task, followupPrompt) {
12
10
  const prompt = followupPrompt ?? getAgentInstructions(task);
13
- const args = ["--approval-mode", yolo ? "yolo" : "auto-edit"];
11
+ const args = ["--approval-mode", "yolo"];
14
12
  if (followupPrompt) {
15
13
  args.push("-c");
16
14
  }
@@ -3,20 +3,15 @@ import * as path from "path";
3
3
  import { fileURLToPath } from "url";
4
4
  import { loadConfig } from "../config.js";
5
5
  import { generateEndpointDocs } from "../agent-tools.js";
6
- import { getAgent } from "./agent.js";
7
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
7
  const AGENT_INSTRUCTIONS_TEMPLATE = fs.readFileSync(path.join(__dirname, "agent-instructions.md"), "utf-8");
9
8
  export function getAgentInstructions(task) {
10
9
  const port = loadConfig().httpPort ?? 7256;
11
10
  const taskDescription = task.frontmatter.user_prompt;
12
- let instructions = AGENT_INSTRUCTIONS_TEMPLATE
11
+ return AGENT_INSTRUCTIONS_TEMPLATE
13
12
  .replace(/\{\{ENDPOINT_DOCS\}\}/g, generateEndpointDocs(port, task.frontmatter.id))
14
- .replace(/\{\{TASK_DESCRIPTION\}\}/g, taskDescription);
15
- const agent = getAgent(task.frontmatter.agent);
16
- if (!agent.supportsPermissions || !!task.frontmatter.yolo_mode) {
17
- instructions = instructions.replace(/## Permissions\r?\n[\s\S]*?(?=## |\r?\n---)/m, "");
18
- }
19
- return instructions;
13
+ .replace(/\{\{TASK_DESCRIPTION\}\}/g, taskDescription)
14
+ .replace(/## Permissions\r?\n[\s\S]*?(?=## |\r?\n---)/m, "");
20
15
  }
21
16
  export const TASK_SUCCESS_MARKER = "[PALMIER_TASK_SUCCESS]";
22
17
  export const TASK_FAILURE_MARKER = "[PALMIER_TASK_FAILURE]";
@@ -61,7 +61,6 @@ export async function pickAndInstallAgent(current, options = {}) {
61
61
  key: choice.key,
62
62
  label: choice.label,
63
63
  ...(tool.supportsPermissions ? { supportsPermissions: true } : {}),
64
- ...(tool.supportsYolo ? { supportsYolo: true } : {}),
65
64
  npmPackage: choice.npmPackage,
66
65
  ...(version ? { version } : {}),
67
66
  };
@@ -80,7 +80,7 @@ async function invokeAgentWithRetries(ctx, invokeTask) {
80
80
  ensureWriter(stream).write(trailing);
81
81
  }
82
82
  }
83
- const { args, stdin, env: agentEnv, files } = ctx.agent.getTaskRunCommandLine(invokeTask, undefined, ctx.task.frontmatter.yolo_mode ? "yolo" : ctx.transientPermissions);
83
+ const { args, stdin, env: agentEnv, files } = ctx.agent.getTaskRunCommandLine(invokeTask);
84
84
  const command = ctx.agent.command;
85
85
  const runDir = getRunDir(ctx.taskDir, ctx.runId);
86
86
  if (files) {
package/dist/index.js CHANGED
@@ -11,7 +11,6 @@ import { serveCommand } from "./commands/serve.js";
11
11
  import { pairCommand } from "./commands/pair.js";
12
12
  import { restartCommand } from "./commands/restart.js";
13
13
  import { clientsListCommand, clientsRevokeCommand, clientsRevokeAllCommand } from "./commands/clients.js";
14
- import { passwordsListCommand, passwordsDeleteCommand, passwordsClearCommand } from "./commands/passwords.js";
15
14
  import { agentsCommand } from "./commands/agents.js";
16
15
  import { uninstallCommand } from "./commands/uninstall.js";
17
16
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -78,27 +77,6 @@ clientsCmd
78
77
  .action(async () => {
79
78
  await clientsRevokeAllCommand();
80
79
  });
81
- const passwordsCmd = program
82
- .command("passwords")
83
- .description("Manage saved passwords");
84
- passwordsCmd
85
- .command("list")
86
- .description("List saved passwords (origin and username only)")
87
- .action(async () => {
88
- await passwordsListCommand();
89
- });
90
- passwordsCmd
91
- .command("delete <origin> [username]")
92
- .description("Delete a saved password (omit username to delete all for the origin)")
93
- .action(async (origin, username) => {
94
- await passwordsDeleteCommand(origin, username);
95
- });
96
- passwordsCmd
97
- .command("clear")
98
- .description("Delete all saved passwords")
99
- .action(async () => {
100
- await passwordsClearCommand();
101
- });
102
80
  program
103
81
  .command("agents")
104
82
  .description("List, install, and uninstall agent CLIs")
@@ -8,6 +8,4 @@ export declare function normalizeOrigin(url: string): string;
8
8
  export declare function lookupPassword(origin: string, username: string): string | undefined;
9
9
  export declare function savePassword(origin: string, username: string, password: string): void;
10
10
  export declare function listPasswords(): PasswordIdentity[];
11
- /** Delete one (origin, username) entry, or every entry for an origin when username is omitted. */
12
- export declare function deletePassword(origin: string, username?: string): boolean;
13
- export declare function clearPasswords(): number;
11
+ export declare function deletePassword(origin: string, username: string): boolean;
@@ -80,17 +80,11 @@ export function savePassword(origin, username, password) {
80
80
  export function listPasswords() {
81
81
  return readFile().map(({ origin, username }) => ({ origin, username }));
82
82
  }
83
- /** Delete one (origin, username) entry, or every entry for an origin when username is omitted. */
84
83
  export function deletePassword(origin, username) {
85
84
  const entries = readFile();
86
- const remaining = entries.filter((e) => username === undefined ? e.origin !== origin : !(e.origin === origin && e.username === username));
85
+ const remaining = entries.filter((e) => !(e.origin === origin && e.username === username));
87
86
  if (remaining.length === entries.length)
88
87
  return false;
89
88
  writeFile(remaining);
90
89
  return true;
91
90
  }
92
- export function clearPasswords() {
93
- const entries = readFile();
94
- writeFile([]);
95
- return entries.length;
96
- }