@onepointfour-packs/flaredeck-agent 0.2.204 → 0.2.206

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.
@@ -1,34 +1,34 @@
1
- import { type Checkout } from './workspace.js';
2
1
  export type TrustedEntry = {
3
- repository: string;
4
- path: string;
5
- sha256: string;
2
+ name: string;
6
3
  description: string;
4
+ body: string;
7
5
  };
8
- /** An entry found on this machine. */
6
+ /** An uploaded script, as it is on this machine. */
9
7
  export type TrustedLocal = TrustedEntry & {
10
8
  abs: string;
11
9
  };
12
- /** Where each entry is on this machine: in a checkout of its repository, when the file is there. */
13
- export declare function locateScripts(entries: TrustedEntry[], here: Checkout[], exists?: (p: string) => boolean): TrustedLocal[];
10
+ /** Write one script as FlareDeck has it. */
11
+ export declare function writeFresh(t: TrustedLocal): void;
12
+ /** Put every uploaded script in `dir`, and take away any that was removed in FlareDeck. */
13
+ export declare function installScripts(entries: TrustedEntry[], dir: string): TrustedLocal[];
14
14
  /**
15
- * Whether this command runs a trusted script, and nothing else. `ok`: run it unjudged. `changed`:
16
- * it names a trusted script whose file no longer matches its checksum. Null: not a trusted script.
17
- *
18
- * Kept deliberately narrow: no `;`, `&&`, `||`, command substitution or redirects — only the script
15
+ * The uploaded script this command runs, and nothing else — or null. Kept deliberately narrow: no
16
+ * `;`, `&&`, `||`, command substitution, redirects or variables set in front of it; only the script
19
17
  * with its arguments, optionally piped into a reader (`| head -50`).
20
18
  */
21
- export declare function trustedRun(command: string, cwd: string, local: TrustedLocal[], read?: (p: string) => Buffer, home?: string): {
22
- ok: TrustedLocal;
23
- } | {
24
- changed: TrustedLocal;
25
- } | null;
26
- /** A trusted script another agent runs: this one asks them. */
27
- export type OthersScript = {
28
- repository: string;
29
- path: string;
30
- description: string;
31
- who: string[];
32
- };
33
- /** What a session is told: the scripts it may run here, and the ones to ask someone else for. */
34
- export declare function trustedBrief(local: TrustedLocal[], others?: OthersScript[]): string;
19
+ export declare function trustedRun(command: string, cwd: string, local: TrustedLocal[], home?: string): TrustedLocal | null;
20
+ export declare const SCRIPT_TOOL_NAMES: string[];
21
+ /**
22
+ * Run one uploaded script: written fresh from FlareDeck, run by the harness itself with the
23
+ * arguments as a list — no shell, so there is nothing to chain or inject — and its output handed
24
+ * back. Through the shell the workspace guard refused the harness's own folder, and the command
25
+ * judge was wary of anything saying "prod" (KeplerUI, 20 Oct); a tool needs neither.
26
+ */
27
+ export declare function runTrusted(t: TrustedLocal, args: string[], cwd: string, timeoutMs: number): Promise<{
28
+ code: number | null;
29
+ out: string;
30
+ timedOut: boolean;
31
+ }>;
32
+ export declare function scriptTools(local: () => TrustedLocal[], cwd: () => string): unknown;
33
+ /** What a session is told: the scripts it may run, and what they are for. */
34
+ export declare function trustedBrief(local: TrustedLocal[]): string;
@@ -1,56 +1,65 @@
1
1
  /**
2
- * Scripts a person trusted in FlareDeck (Integrations → Scripts): run without the command guard
3
- * judging them, so an agent can, say, read production logs through the one script that does only
4
- * that (Cobus, 20 Oct). See flaredeck-mcp/src/vault/scripts.ts.
2
+ * Scripts a person uploaded to FlareDeck (Integrations → Scripts), which any agent may run without
3
+ * the command guard judging them — reading production logs through prodscan.sh, say (Cobus, 20 Oct).
4
+ * See flaredeck-mcp/src/vault/scripts.ts.
5
5
  *
6
- * An entry names a repository, a path in it, the SHA-256 a person approved, and what it is for.
7
- * Here it is found in this machine's checkout of that repository, and a command is trusted only
8
- * when it runs exactly that file AND the file's checksum still matches — so a script changed by
9
- * anyone, an agent editing its own checkout included, is judged like any other command.
6
+ * Each is written into the harness's own folder, and written AGAIN, fresh from what FlareDeck sent,
7
+ * every time an agent runs it. So what runs is always what was uploaded: an agent that edited the
8
+ * file on the machine changed nothing. A command is trusted only when it runs exactly one of these
9
+ * files, alone or piped into a reader.
10
10
  */
11
- import { createHash } from 'node:crypto';
12
- import { existsSync, readFileSync, realpathSync } from 'node:fs';
11
+ import { chmodSync, mkdirSync, readdirSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
13
12
  import { isAbsolute, join, resolve } from 'node:path';
14
- import { repoIdentity } from './workspace.js';
13
+ import { spawn } from 'node:child_process';
14
+ import { tool } from '@anthropic-ai/claude-agent-sdk';
15
+ import { z } from 'zod';
16
+ import { sdkServer } from './localmcp.js';
15
17
  const real = (p) => { try {
16
18
  return realpathSync(p);
17
19
  }
18
20
  catch {
19
21
  return resolve(p);
20
22
  } };
21
- /** Where each entry is on this machine: in a checkout of its repository, when the file is there. */
22
- export function locateScripts(entries, here, exists = existsSync) {
23
+ const safeName = (n) => /^[A-Za-z0-9][A-Za-z0-9._-]{0,80}$/.test(n);
24
+ /** Write one script as FlareDeck has it. */
25
+ export function writeFresh(t) {
26
+ writeFileSync(t.abs, t.body, { mode: 0o755 });
27
+ chmodSync(t.abs, 0o755);
28
+ }
29
+ /** Put every uploaded script in `dir`, and take away any that was removed in FlareDeck. */
30
+ export function installScripts(entries, dir) {
31
+ mkdirSync(dir, { recursive: true });
23
32
  const out = [];
24
33
  for (const e of entries) {
25
- const want = `github.com/${String(e.repository).toLowerCase()}`;
26
- for (const c of here) {
27
- if (!c.origin || repoIdentity(c.origin) !== want)
28
- continue;
29
- const abs = join(c.path, e.path);
30
- if (exists(abs) && !out.some((o) => o.abs === abs))
31
- out.push({ ...e, abs });
34
+ if (!safeName(e.name) || !e.body)
35
+ continue;
36
+ const t = { ...e, abs: join(dir, e.name) };
37
+ try {
38
+ writeFresh(t);
39
+ out.push(t);
32
40
  }
41
+ catch { /* an unwritable one is simply not offered */ }
33
42
  }
34
- return out;
35
- }
36
- const sha256Of = (p, read) => {
37
- try {
38
- return createHash('sha256').update(read(p)).digest('hex');
43
+ const keep = new Set(out.map((t) => t.name));
44
+ for (const f of (() => { try {
45
+ return readdirSync(dir);
39
46
  }
40
47
  catch {
41
- return null;
48
+ return [];
49
+ } })()) {
50
+ if (!keep.has(f))
51
+ rmSync(join(dir, f), { force: true });
42
52
  }
43
- };
53
+ return out;
54
+ }
44
55
  /** What a trusted script's output may be piped into: reading and trimming, nothing that acts. */
45
56
  const PIPE_OK = /^(head|tail|grep|egrep|jq|wc|cut|sort|uniq|tr|column)(\s|$)/;
46
57
  /**
47
- * Whether this command runs a trusted script, and nothing else. `ok`: run it unjudged. `changed`:
48
- * it names a trusted script whose file no longer matches its checksum. Null: not a trusted script.
49
- *
50
- * Kept deliberately narrow: no `;`, `&&`, `||`, command substitution or redirects — only the script
58
+ * The uploaded script this command runs, and nothing else — or null. Kept deliberately narrow: no
59
+ * `;`, `&&`, `||`, command substitution, redirects or variables set in front of it; only the script
51
60
  * with its arguments, optionally piped into a reader (`| head -50`).
52
61
  */
53
- export function trustedRun(command, cwd, local, read = (p) => readFileSync(p), home = process.env.HOME ?? '') {
62
+ export function trustedRun(command, cwd, local, home = process.env.HOME ?? '') {
54
63
  if (!local.length)
55
64
  return null;
56
65
  const text = command.trim();
@@ -64,22 +73,73 @@ export function trustedRun(command, cwd, local, read = (p) => readFileSync(p), h
64
73
  if (/^(bash|sh|zsh)$/.test(tokens[0] ?? ''))
65
74
  i = 1;
66
75
  const raw = (tokens[i] ?? '').replace(/^["']|["']$/g, '');
67
- if (!raw)
76
+ if (!raw || raw.includes('='))
68
77
  return null;
69
78
  const expanded = raw.replace(/^~(?=\/)/, home).replace(/^\$\{?HOME\}?(?=\/)/, home);
70
- const abs = real(isAbsolute(expanded) ? expanded : resolve(cwd, expanded));
71
- const hit = local.find((l) => real(l.abs) === abs);
72
- if (!hit)
79
+ // A bare name runs whatever is in the current folder by that name — never one of these.
80
+ if (!isAbsolute(expanded) && !expanded.includes('/'))
73
81
  return null;
74
- return sha256Of(abs, read) === hit.sha256.toLowerCase() ? { ok: hit } : { changed: hit };
82
+ const abs = real(isAbsolute(expanded) ? expanded : resolve(cwd, expanded));
83
+ return local.find((l) => real(l.abs) === abs) ?? null;
75
84
  }
76
- /** What a session is told: the scripts it may run here, and the ones to ask someone else for. */
77
- export function trustedBrief(local, others = []) {
78
- const lines = [];
79
- if (local.length)
80
- lines.push('', 'Scripts a person trusted for you — run them directly, they need no approval (piping the', 'output into head, tail, grep or jq is fine; chaining them with other commands is not):', ...local.map((l) => ` · \`${l.abs}\` — ${l.description}`), 'If one is refused as "changed", its file no longer matches what was approved: say so on the card.');
81
- if (others.length)
82
- lines.push('', 'Trusted scripts other agents run — you cannot. When you need one, ask one of them with', 'send-message (what to run it for, and the card), rather than finding another way:', ...others.map((o) => ` · ${o.path} in ${o.repository} — ${o.description}. Ask: ${o.who.join(' or ')}.`));
83
- return lines.join('\n');
85
+ export const SCRIPT_TOOL_NAMES = ['mcp__scripts__run_trusted_script'];
86
+ const MAX_OUT = 60_000;
87
+ /**
88
+ * Run one uploaded script: written fresh from FlareDeck, run by the harness itself with the
89
+ * arguments as a list — no shell, so there is nothing to chain or inject — and its output handed
90
+ * back. Through the shell the workspace guard refused the harness's own folder, and the command
91
+ * judge was wary of anything saying "prod" (KeplerUI, 20 Oct); a tool needs neither.
92
+ */
93
+ export async function runTrusted(t, args, cwd, timeoutMs) {
94
+ writeFresh(t);
95
+ return new Promise((done) => {
96
+ const child = spawn('bash', [t.abs, ...args], { cwd, stdio: ['ignore', 'pipe', 'pipe'], env: process.env });
97
+ let out = '';
98
+ const cap = (d) => { if (out.length < MAX_OUT)
99
+ out += String(d); };
100
+ child.stdout.on('data', cap);
101
+ child.stderr.on('data', cap);
102
+ let timedOut = false;
103
+ const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL'); }, timeoutMs);
104
+ child.on('close', (code) => { clearTimeout(timer); done({ code, out: out.slice(0, MAX_OUT), timedOut }); });
105
+ child.on('error', (e) => { clearTimeout(timer); done({ code: null, out: String(e), timedOut }); });
106
+ });
107
+ }
108
+ export function scriptTools(local, cwd) {
109
+ return sdkServer({
110
+ name: 'scripts',
111
+ version: '1.0.0',
112
+ tools: [
113
+ tool('run_trusted_script', 'Run a script a person uploaded to FlareDeck for agents (the list is in your instructions). It needs ' +
114
+ 'no approval. Pass the script name and its arguments as a list; the output and exit code come back. ' +
115
+ 'It is written fresh from FlareDeck before it runs, so what runs is exactly what was uploaded.', {
116
+ name: z.string().describe('The script, e.g. "prodscan.sh".'),
117
+ args: z.array(z.string()).optional().describe('Its arguments, one per item, e.g. ["prod", "4"].'),
118
+ timeout_minutes: z.number().optional().describe('Stop it after this long (default 10, at most 30).'),
119
+ }, async ({ name, args, timeout_minutes }) => {
120
+ const t = local().find((l) => l.name === name);
121
+ if (!t) {
122
+ const names = local().map((l) => l.name);
123
+ return { content: [{ type: 'text', text: `No uploaded script called "${name}". ${names.length ? `There are: ${names.join(', ')}.` : 'None are uploaded for this workspace.'}` }], isError: true };
124
+ }
125
+ const mins = Math.min(Math.max(Number(timeout_minutes) || 10, 1), 30);
126
+ const r = await runTrusted(t, (args ?? []).map(String), cwd(), mins * 60_000);
127
+ const head = r.timedOut ? `${name} was stopped after ${mins} min.` : `${name} exited ${r.code ?? 'abnormally'}.`;
128
+ return { content: [{ type: 'text', text: `${head}\n\n${r.out || '(no output)'}` }], ...(r.timedOut || r.code !== 0 ? { isError: false } : {}) };
129
+ }),
130
+ ],
131
+ });
132
+ }
133
+ /** What a session is told: the scripts it may run, and what they are for. */
134
+ export function trustedBrief(local) {
135
+ if (!local.length)
136
+ return '';
137
+ return [
138
+ '',
139
+ 'Scripts a person uploaded to FlareDeck for you — run them with the `run_trusted_script` tool',
140
+ '(name and arguments), not from the shell. They need no approval, and each is written fresh',
141
+ 'from FlareDeck before it runs, so do not edit or copy them.',
142
+ ...local.map((l) => ` · ${l.name} — ${l.description}`),
143
+ ].join('\n');
84
144
  }
85
145
  //# sourceMappingURL=trusted-scripts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trusted-scripts.js","sourceRoot":"","sources":["../src/trusted-scripts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trusted-scripts.js","sourceRoot":"","sources":["../src/trusted-scripts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onepointfour-packs/flaredeck-agent",
3
- "version": "0.2.204",
3
+ "version": "0.2.206",
4
4
  "description": "Run a FlareDeck agent on your own machine: it picks up cards assigned to it, works each one in a checkout of its own, and reports back on the card.",
5
5
  "type": "module",
6
6
  "bin": {