@onepointfour-packs/flaredeck-agent 0.1.0 → 0.2.0

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 (73) hide show
  1. package/dist/agent.d.ts +16 -0
  2. package/dist/agent.js +38 -1
  3. package/dist/agent.js.map +1 -1
  4. package/dist/approval.js +39 -1
  5. package/dist/approval.js.map +1 -1
  6. package/dist/browser.d.ts +19 -0
  7. package/dist/browser.js +261 -0
  8. package/dist/browser.js.map +1 -0
  9. package/dist/config.d.ts +18 -0
  10. package/dist/config.js +2 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/desperation.d.ts +24 -0
  13. package/dist/desperation.js +64 -0
  14. package/dist/desperation.js.map +1 -0
  15. package/dist/engine-antigravity.d.ts +7 -0
  16. package/dist/engine-antigravity.js +280 -32
  17. package/dist/engine-antigravity.js.map +1 -1
  18. package/dist/engine.d.ts +28 -0
  19. package/dist/engine.js.map +1 -1
  20. package/dist/env.d.ts +5 -1
  21. package/dist/env.js +19 -1
  22. package/dist/env.js.map +1 -1
  23. package/dist/environment.d.ts +87 -2
  24. package/dist/environment.js +213 -11
  25. package/dist/environment.js.map +1 -1
  26. package/dist/flaredeck-proxy.d.ts +47 -1
  27. package/dist/flaredeck-proxy.js +120 -3
  28. package/dist/flaredeck-proxy.js.map +1 -1
  29. package/dist/gitguard.d.ts +6 -0
  30. package/dist/gitguard.js +30 -1
  31. package/dist/gitguard.js.map +1 -1
  32. package/dist/github.d.ts +23 -1
  33. package/dist/github.js +105 -28
  34. package/dist/github.js.map +1 -1
  35. package/dist/journal.d.ts +23 -0
  36. package/dist/journal.js +142 -0
  37. package/dist/journal.js.map +1 -0
  38. package/dist/localmcp.d.ts +50 -0
  39. package/dist/localmcp.js +229 -0
  40. package/dist/localmcp.js.map +1 -0
  41. package/dist/main.js +4 -1
  42. package/dist/main.js.map +1 -1
  43. package/dist/permissions.d.ts +17 -0
  44. package/dist/permissions.js +38 -1
  45. package/dist/permissions.js.map +1 -1
  46. package/dist/runs.js +3 -2
  47. package/dist/runs.js.map +1 -1
  48. package/dist/sandbox.d.ts +34 -0
  49. package/dist/sandbox.js +122 -2
  50. package/dist/sandbox.js.map +1 -1
  51. package/dist/schedules.d.ts +1 -1
  52. package/dist/schedules.js +3 -2
  53. package/dist/schedules.js.map +1 -1
  54. package/dist/serve.js +461 -39
  55. package/dist/serve.js.map +1 -1
  56. package/dist/stream.d.ts +1 -0
  57. package/dist/team.d.ts +1 -1
  58. package/dist/team.js +3 -2
  59. package/dist/team.js.map +1 -1
  60. package/dist/ui.d.ts +2 -0
  61. package/dist/ui.js +34 -39
  62. package/dist/ui.js.map +1 -1
  63. package/dist/updater-python.d.ts +19 -0
  64. package/dist/updater-python.js +149 -0
  65. package/dist/updater-python.js.map +1 -0
  66. package/dist/workspace.d.ts +2 -0
  67. package/dist/workspace.js +1 -1
  68. package/dist/workspace.js.map +1 -1
  69. package/dist/worktree.d.ts +39 -1
  70. package/dist/worktree.js +147 -4
  71. package/dist/worktree.js.map +1 -1
  72. package/package.json +3 -2
  73. package/python/sidecar.py +209 -7
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Noticing when an agent has stopped working and started struggling.
3
+ *
4
+ * A turn went: refused for reading outside its workspace, so it read the same place through
5
+ * `node -e` instead; refused for `git push`, so it looked for `push_branch` on PATH, then as a
6
+ * git alias, then under every parent directory. None of that was the work. It was an agent
7
+ * routing around the harness because the harness had told it to do something it could not do —
8
+ * and it would have carried on until the turn ran out.
9
+ *
10
+ * The harness can see this without a model. It knows every refusal and every command. Three
11
+ * refusals in one turn, or the same command four times, is not a bad patch of luck: it is an
12
+ * agent that needs to stop and say so. Its job is meant to be easy — change the code, check the
13
+ * change. Anything else is the harness's problem to fix, not the agent's to work around.
14
+ */
15
+ /** Said to the agent when it has clearly started fighting the tools. */
16
+ export const STEP_BACK = 'STOP. You have been refused several times in this turn and you are now working around the ' +
17
+ 'harness rather than doing the card. That is never the right move: a refusal means the harness ' +
18
+ 'is wrong, the turn lacks something, or you have misunderstood what you have — none of which ' +
19
+ 'you can fix by finding another way through.\n\n' +
20
+ 'Your job is small on purpose: change the code, check the change, say what you did. Everything ' +
21
+ 'else — branches, committing, publishing, the environment — is the harness\'s and it has tools ' +
22
+ 'for it.\n\n' +
23
+ 'Right now: say on the card what you were trying to do and what refused you, message your lead ' +
24
+ 'with the same in one line, and stop. Do not try another way around it.';
25
+ /**
26
+ * Only SHELL commands count as repeats.
27
+ *
28
+ * The first version compared tool names, and `view_file` is identical every time — so an agent
29
+ * reading four files looked exactly like an agent trying the same thing four times, and a
30
+ * perfectly ordinary turn was stopped on its first refusal. Reading repeatedly is the work.
31
+ * Running the same shell command repeatedly is the tell, and a shell line carries its arguments,
32
+ * so two of them can actually be compared.
33
+ */
34
+ const SAME_ENOUGH = (a, b) => {
35
+ if (!a.startsWith('run_command') || !b.startsWith('run_command'))
36
+ return false;
37
+ const strip = (s) => s.replace(/['"`]/g, '').replace(/\s+/g, ' ').slice(0, 48).toLowerCase();
38
+ return strip(a) === strip(b);
39
+ };
40
+ export function watchForDesperation(refusalsAllowed = 3, repeatsAllowed = 4) {
41
+ let refusals = 0;
42
+ let told = false;
43
+ const recent = [];
44
+ return {
45
+ refusals: () => refusals,
46
+ warned: () => told,
47
+ saw(line) {
48
+ if (told)
49
+ return null;
50
+ if (/^refused · /.test(line))
51
+ refusals += 1;
52
+ recent.push(line);
53
+ if (recent.length > 12)
54
+ recent.shift();
55
+ const repeats = recent.filter((l) => SAME_ENOUGH(l, line)).length;
56
+ if (refusals >= refusalsAllowed || repeats >= repeatsAllowed) {
57
+ told = true;
58
+ return STEP_BACK;
59
+ }
60
+ return null;
61
+ },
62
+ };
63
+ }
64
+ //# sourceMappingURL=desperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desperation.js","sourceRoot":"","sources":["../src/desperation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,SAAS,GACpB,4FAA4F;IAC5F,gGAAgG;IAChG,8FAA8F;IAC9F,iDAAiD;IACjD,gGAAgG;IAChG,gGAAgG;IAChG,aAAa;IACb,gGAAgG;IAChG,wEAAwE,CAAC;AAU3E;;;;;;;;GAQG;AACH,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;IACpD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/E,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,eAAe,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC;IACzE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QACxB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;QAClB,GAAG,CAAC,IAAY;YACd,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;YACtB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,QAAQ,IAAI,CAAC,CAAC;YAE5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAElE,IAAI,QAAQ,IAAI,eAAe,IAAI,OAAO,IAAI,cAAc,EAAE,CAAC;gBAC7D,IAAI,GAAG,IAAI,CAAC;gBACZ,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -11,6 +11,13 @@ export declare class AntigravityEngine implements Engine {
11
11
  readonly capabilities: EngineCapabilities;
12
12
  run(brief: string, ctx: RunContext): EngineRun;
13
13
  }
14
+ /**
15
+ * The interpreter the harness installed for itself, and whether the one in use IS that. Only that
16
+ * one may be updated: an interpreter the user pointed at, or a system python3 that happens to have
17
+ * the SDK, is theirs.
18
+ */
19
+ export declare const managedPython: () => string;
20
+ export declare const usingManagedPython: () => boolean;
14
21
  export declare function pythonWithSdk(log: (text: string) => void): string;
15
22
  /**
16
23
  * How this machine talks to Gemini — worked out, never asked for.
@@ -3,11 +3,16 @@ import { existsSync } from 'node:fs';
3
3
  import { homedir } from 'node:os';
4
4
  import { createServer } from 'node:http';
5
5
  import { createInterface } from 'node:readline';
6
- import { dirname, join, resolve } from 'node:path';
6
+ import { basename, dirname, join, resolve } from 'node:path';
7
7
  import { fileURLToPath } from 'node:url';
8
8
  import { CouldNotWork } from './engine.js';
9
9
  import { judgeCommand } from './jevguard.js';
10
- import { FLAREDECK_READ_TOOLS } from './permissions.js';
10
+ import { FLAREDECK_ALLOWED } from './permissions.js';
11
+ import { childEnv } from './env.js';
12
+ import { CLAIMS_DONE, cardIn, workFooter } from './flaredeck-proxy.js';
13
+ import { serveFilteredFlaredeck, serveToolSets } from './localmcp.js';
14
+ import { blockedGitCommand } from './gitguard.js';
15
+ import { foreignWorktree, readsOutside, writesOutside } from './sandbox.js';
11
16
  /**
12
17
  * The writes an agent makes in the ordinary course of working its own card: saying what it did,
13
18
  * leaving a handover, moving the card it holds, asking for a person when it is stuck. None of
@@ -20,6 +25,8 @@ import { FLAREDECK_READ_TOOLS } from './permissions.js';
20
25
  * is the work itself; `run_command` is deliberately NOT here — it is the one that can reach past
21
26
  * the workspace, and it is judged separately.
22
27
  */
28
+ /** The harness's own MCP servers, served on loopback by `serveToolSets`. */
29
+ const HARNESS_SERVERS = new Set(['git', 'team', 'runs', 'schedules', 'browser']);
23
30
  const WORKSPACE_TOOLS = [
24
31
  'view_file',
25
32
  'find_file',
@@ -60,11 +67,49 @@ import { loadProviders } from './providers.js';
60
67
  * on this key is `gemini-3.1-pro-preview` — a preview id, which is the kind that disappears and
61
68
  * takes an unattended agent down with it — and `gemini-2.5-pro` is older than these.
62
69
  */
70
+ /**
71
+ * One model for every size.
72
+ *
73
+ * `small` used to mean gemini-3.5-flash-lite, and since an unsized turn falls back to `small`,
74
+ * most work ran on the lightest model there is — including editing TypeScript. HR-0623 is what
75
+ * that buys: a four-line pluralisation fix that broke "3 of 8 people" into "3 people of 8
76
+ * people", took three attempts, and came with an offered screenshot that did not exist.
77
+ *
78
+ * Sizing still routes the OTHER engine, and still decides intake. It just no longer decides how
79
+ * capable the model doing the work is.
80
+ */
63
81
  const GEMINI_MODELS = {
64
- small: 'gemini-3.5-flash-lite',
82
+ small: 'gemini-3.8-flash',
65
83
  medium: 'gemini-3.8-flash',
66
84
  large: 'gemini-3.8-flash',
67
85
  };
86
+ /**
87
+ * How hard it thinks, which is now the only thing SIZE changes.
88
+ *
89
+ * The SDK takes minimal | low | medium | high | extra_high and we were setting none of it. Since
90
+ * all three sizes now use one model, this is where a big card and a small one differ.
91
+ *
92
+ * `small` is medium rather than low: low is for reformatting and regex, and a four-line
93
+ * pluralisation fix is exactly the kind of card that has been going wrong. Anything bigger gets
94
+ * high, which is what pays off on multi-file debugging.
95
+ *
96
+ * Nothing uses extra_high. Medium is 3.8-flash's own default and high is as far as the published
97
+ * guidance for this model goes; pushing a flash model past that spends tokens for little, and an
98
+ * unsupported level is a tuning knob failing a card.
99
+ */
100
+ const GEMINI_THINKING = {
101
+ small: 'medium',
102
+ medium: 'high',
103
+ large: 'high',
104
+ };
105
+ /**
106
+ * Where this agent may read: its checkout, the worktrees cut from it, and its scratch space.
107
+ * The worktrees live BESIDE the repo rather than inside it, so the repo alone is not enough.
108
+ */
109
+ function workspaceRoots(ctx) {
110
+ const repo = ctx.config.repo.replace(/\/+$/, '');
111
+ return [repo, join(dirname(repo), `.worktrees-${basename(repo)}`), ...(ctx.sandbox ? [ctx.sandbox] : [])];
112
+ }
68
113
  const HERE = dirname(fileURLToPath(import.meta.url));
69
114
  const SIDECAR = resolve(join(HERE, '..', 'python', 'sidecar.py'));
70
115
  export class AntigravityEngine {
@@ -80,31 +125,106 @@ export class AntigravityEngine {
80
125
  denyToolCall: true,
81
126
  rewriteToolInput: true,
82
127
  redactToolOutput: false,
83
- // One turn per `agent.chat()` today. Mid-turn steering needs the SDK's streaming API, which
84
- // is the next increment; saying false here means a typed line is reported as undeliverable
85
- // rather than silently dropped.
86
- steerMidTurn: false,
128
+ // The sidecar reads the response's chunk stream rather than awaiting its text, so a turn can
129
+ // be interrupted: a steer cancels the response in flight and becomes the next message, with
130
+ // the conversation's history intact.
131
+ steerMidTurn: true,
87
132
  resumeSession: true,
88
133
  };
89
134
  run(brief, ctx) {
90
135
  let child = null;
91
136
  let guard = null;
137
+ let local = null;
138
+ // The checkout this turn works in. It was `config.repo` — the SHARED checkout every worktree
139
+ // is cut from — so a Gemini agent branched, edited and committed in the wrong place however
140
+ // carefully the harness prepared a worktree for it. HR-0033 is what that looks like from the
141
+ // outside: a branch pushed from the shared checkout containing another card's commit and none
142
+ // of its own work.
143
+ // Two different questions, and conflating them sent an agent hunting the whole filesystem.
144
+ //
145
+ // WRITABLE is the one directory this turn may change: its worktree, or scratch space when it
146
+ // has no card. CWD is where it starts looking, and scratch space is an EMPTY directory — a
147
+ // turn woken by a message began there, found no repository, and ran `find / -name
148
+ // OrgChart.tsx`. It needs to SEE the checkout to orient; it just must not write to it.
149
+ const writable = ctx.sandbox && existsSync(ctx.sandbox) ? ctx.sandbox : ctx.config.repo;
150
+ const cwd = existsSync(join(writable, '.git')) ? writable : ctx.config.repo;
92
151
  const events = (async function* () {
152
+ // Two sources, one stream: the guard sees the tools as they happen, the sidecar's stdout
153
+ // carries the text when the turn ends. A `for await` over stdout alone cannot interleave
154
+ // the first, and stdout stays silent until the end — so there is nothing to piggyback on.
93
155
  const pending = [];
94
- const { server, url } = await startGuard(ctx);
156
+ let wake = null;
157
+ const bump = () => { const w = wake; wake = null; w?.(); };
158
+ const push = (event) => { pending.push(event); bump(); };
159
+ const { server, url } = await startGuard(ctx, push);
95
160
  guard = server;
96
- const python = pythonWithSdk((t) => { pending.push({ kind: 'tool', name: t }); });
161
+ // The harness's own tool sets, over local MCP. Same definitions the other engine runs in
162
+ // process — git, team, runs, schedules — which this engine simply was not being given.
163
+ const served = await serveToolSets({
164
+ ...(ctx.tools.git ? { git: ctx.tools.git.server } : {}),
165
+ ...(ctx.tools.team ? { team: ctx.tools.team.server } : {}),
166
+ ...(ctx.tools.runs ? { runs: ctx.tools.runs.server } : {}),
167
+ ...(ctx.tools.schedules ? { schedules: ctx.tools.schedules.server } : {}),
168
+ ...(ctx.tools.browser ? { browser: ctx.tools.browser.server } : {}),
169
+ }, (note) => push({ kind: 'tool', name: note }));
170
+ local = served;
171
+ // FlareDeck through the harness rather than straight at the server: the SDK lists tools
172
+ // itself, so a direct URL is the harness having no say in what this engine is offered.
173
+ const fd = ctx.keep
174
+ ? await serveFilteredFlaredeck({
175
+ url: ctx.config.mcpUrl,
176
+ token: async () => ctx.token,
177
+ keep: ctx.keep,
178
+ onError: (note) => push({ kind: 'tool', name: note }),
179
+ watch: async (name, args) => {
180
+ ctx.noteCard?.(cardIn(args));
181
+ // Said and saved, together — the same footer the other engine's proxy appends.
182
+ if (ctx.saved && (name === 'create-card-comment' || name === 'send-message')) {
183
+ const field = name === 'send-message' ? 'message' : 'comment';
184
+ const body = args[field];
185
+ const footer = workFooter(await ctx.saved());
186
+ if (typeof body === 'string' && footer && !body.includes('*— '))
187
+ args[field] = body + footer;
188
+ }
189
+ if (ctx.finish && CLAIMS_DONE(name, args))
190
+ return ctx.finish();
191
+ return null;
192
+ },
193
+ })
194
+ : null;
195
+ if (fd) {
196
+ // Said out loud because it was silently not happening: the filter was in the build, worked
197
+ // in isolation, and the SDK still cached 41 tool schemas for a worker.
198
+ push({ kind: 'tool', name: `flaredeck via the harness · ${fd.dropped()} tool(s) withheld` });
199
+ }
200
+ else {
201
+ push({ kind: 'tool', name: 'flaredeck direct — NOT filtered (no tool policy for this agent)' });
202
+ }
203
+ push({
204
+ kind: 'tool',
205
+ name: `model: ${GEMINI_MODELS[ctx.size ?? 'small']} · thinking ${GEMINI_THINKING[ctx.size ?? 'small']}`
206
+ + `${ctx.size ? ` (${ctx.size})` : ''}`,
207
+ });
208
+ if (served.servers.length) {
209
+ push({ kind: 'tool', name: `harness tools: ${served.servers.map((x) => x.name).join(', ')}` });
210
+ }
211
+ const python = pythonWithSdk((t) => { push({ kind: 'tool', name: t }); });
97
212
  while (pending.length)
98
213
  yield pending.shift();
99
214
  child = spawn(python, [SIDECAR], {
100
- cwd: ctx.config.repo,
101
- env: { ...process.env, ...geminiEnv() },
215
+ cwd,
216
+ env: childEnv(geminiEnv()),
102
217
  stdio: ['pipe', 'pipe', 'pipe'],
103
218
  });
104
219
  // The sidecar's stderr is the SDK's own complaints — a missing wheel, a bad key. Losing it
105
220
  // would turn every failure into "the agent did nothing".
106
221
  let stderr = '';
107
222
  child.stderr.on('data', (d) => { stderr += String(d); });
223
+ // Without this, a failed spawn — a missing interpreter, a cwd that is not there — raises an
224
+ // unhandled 'error' on the ChildProcess and takes the WHOLE DAEMON down: every other card,
225
+ // the queue, the pane. It is one card that could not be worked.
226
+ const spawnFailed = { why: null };
227
+ child.on('error', (e) => { spawnFailed.why = e; });
108
228
  // A sidecar that dies before saying anything — a missing wheel, the wrong interpreter, a
109
229
  // bad key — would otherwise end this generator with no events and no error, which reads as
110
230
  // "the agent did nothing" and is the worst way to fail. Its exit is recorded here and
@@ -114,27 +234,51 @@ export class AntigravityEngine {
114
234
  child.stdin.write(`${JSON.stringify({
115
235
  type: 'run',
116
236
  brief,
117
- cwd: ctx.config.repo,
237
+ // The standing brief, as system instructions. This was never sent: the sidecar defaulted
238
+ // it to an empty string, so a Gemini agent ran with NO standing instructions at all —
239
+ // nothing about being unattended, nothing about its own account, none of the rules the
240
+ // other engine gets on every turn. It was being judged on conventions it had never read.
241
+ ...(ctx.standing ? { system_instructions: ctx.standing } : {}),
242
+ cwd,
243
+ // What it may CHANGE, which is not always where it starts. The SDK confines its built-in
244
+ // file tools to this, so a turn with no card cannot edit the shared checkout it is
245
+ // reading from.
246
+ workspaces: [writable],
118
247
  guard_url: url,
119
248
  // FlareDeck over HTTP with the harness's own token, rather than reimplementing the tools
120
- // in Python. The in-process sets (git publishing, team, runs, schedules) are not bridged
121
- // yet — see the note on this class.
122
- mcp: [{
249
+ // in Python — and the harness's own sets alongside it, served from the same definitions
250
+ // the other engine uses. Neither is a second implementation.
251
+ mcp: [
252
+ {
123
253
  name: ctx.config.mcpServerName,
124
- url: ctx.config.mcpUrl,
125
- headers: { Authorization: `Bearer ${ctx.token}` },
126
- }],
254
+ url: fd ? fd.url : ctx.config.mcpUrl,
255
+ // The harness's own endpoint is on loopback and adds the token itself.
256
+ headers: fd ? {} : { Authorization: `Bearer ${ctx.token}` },
257
+ },
258
+ // Loopback, so no header: nothing off this machine can reach them.
259
+ ...served.servers.map((x) => ({ name: x.name, url: x.url, headers: {} })),
260
+ ],
127
261
  // What the harness discovered on this server moments ago. The SDK exposes no way to ask a
128
262
  // live session what tools it has, and the daemon refuses a card when the count is zero —
129
263
  // rightly, since a session that silently lost FlareDeck would work the card blind.
130
- tool_names: ctx.tools.flaredeck?.toolNames ?? [],
264
+ tool_names: [
265
+ ...(ctx.tools.flaredeck?.toolNames ?? []),
266
+ ...(ctx.tools.git?.toolNames ?? []),
267
+ ...(ctx.tools.team?.toolNames ?? []),
268
+ ...(ctx.tools.runs?.toolNames ?? []),
269
+ ...(ctx.tools.schedules?.toolNames ?? []),
270
+ ...(ctx.tools.browser?.toolNames ?? []),
271
+ ],
131
272
  ...(ctx.resume ? { resume: ctx.resume } : {}),
132
273
  // Mapped from the SIZE, never from `ctx.model` — that is the other engine's name for the
133
274
  // same decision, and `claude-sonnet-5-5` is a 404 here that fails the card on every retry.
134
275
  ...(GEMINI_MODELS[ctx.size ?? 'small'] ? { model: GEMINI_MODELS[ctx.size ?? 'small'] } : {}),
276
+ thinking_level: GEMINI_THINKING[ctx.size ?? 'small'],
135
277
  })}\n`);
136
278
  let sawEvent = false;
137
- try {
279
+ let failure = null;
280
+ let finished = false;
281
+ const pump = (async () => {
138
282
  for await (const line of createInterface({ input: child.stdout })) {
139
283
  if (!line.trim())
140
284
  continue;
@@ -154,9 +298,14 @@ export class AntigravityEngine {
154
298
  if (msg.type === 'event') {
155
299
  sawEvent = true;
156
300
  const { type: _t, ...event } = msg;
157
- yield event;
301
+ push(event);
158
302
  }
159
303
  }
304
+ if (!sawEvent && spawnFailed.why) {
305
+ throw new CouldNotWork(`The Gemini sidecar could not be started: ${spawnFailed.why.message}\n` +
306
+ `interpreter: ${python}\nworking directory: ${cwd}\n` +
307
+ `An ENOENT here names the interpreter even when the missing thing is the directory.`);
308
+ }
160
309
  if (!sawEvent) {
161
310
  const why = ended.at ? `exited ${ended.at.code ?? ended.at.signal}` : 'produced nothing';
162
311
  throw new CouldNotWork(`The Gemini sidecar ${why} without starting.\n` +
@@ -164,17 +313,38 @@ export class AntigravityEngine {
164
313
  `Check that ${python} has the SDK: \`pip install google-antigravity\`, or point ` +
165
314
  `FLAREDECK_AGENT_PYTHON at an interpreter that does.`);
166
315
  }
316
+ })().catch((e) => { failure = e; }).finally(() => { finished = true; bump(); });
317
+ try {
318
+ for (;;) {
319
+ while (pending.length)
320
+ yield pending.shift();
321
+ if (finished)
322
+ break;
323
+ await new Promise((resolve) => { wake = resolve; });
324
+ }
325
+ if (failure)
326
+ throw failure;
167
327
  }
168
328
  finally {
169
329
  guard?.close();
330
+ local?.close();
331
+ fd?.close();
170
332
  child?.kill();
333
+ await pump;
171
334
  }
172
335
  })();
173
336
  return {
174
337
  events,
175
- async steer() {
176
- // Declared false above, so the caller reports it rather than losing what was typed.
177
- return false;
338
+ async steer(text) {
339
+ if (!child?.stdin.writable)
340
+ return false;
341
+ try {
342
+ child.stdin.write(`${JSON.stringify({ type: 'steer', text })}\n`);
343
+ return true;
344
+ }
345
+ catch {
346
+ return false;
347
+ }
178
348
  },
179
349
  async stop() {
180
350
  try {
@@ -213,6 +383,13 @@ function hasSdk(python) {
213
383
  return false;
214
384
  }
215
385
  }
386
+ /**
387
+ * The interpreter the harness installed for itself, and whether the one in use IS that. Only that
388
+ * one may be updated: an interpreter the user pointed at, or a system python3 that happens to have
389
+ * the SDK, is theirs.
390
+ */
391
+ export const managedPython = () => MANAGED_PYTHON;
392
+ export const usingManagedPython = () => resolvedPython === MANAGED_PYTHON;
216
393
  export function pythonWithSdk(log) {
217
394
  if (resolvedPython)
218
395
  return resolvedPython;
@@ -290,7 +467,11 @@ function gcloudProject() {
290
467
  * would have them answering each other's tool calls. Bound to 127.0.0.1 so nothing off this
291
468
  * machine can reach it.
292
469
  */
293
- async function startGuard(ctx) {
470
+ async function startGuard(ctx,
471
+ // Every tool this agent uses is consulted here, which makes the guard the only place that knows
472
+ // what a Gemini turn is DOING while it does it. One `agent.chat()` returns at the very end, so
473
+ // without this the pane has nothing to show for minutes at a time.
474
+ saw) {
294
475
  const server = createServer((req, res) => {
295
476
  let body = '';
296
477
  req.on('data', (d) => { body += d; });
@@ -301,19 +482,47 @@ async function startGuard(ctx) {
301
482
  }
302
483
  catch { /* answered as a denial below */ }
303
484
  const reply = (o) => { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(o)); };
485
+ // A refusal the person watching cannot see looks like an agent flailing for no reason —
486
+ // which is exactly how it looked. Both the model and the pane are told, from one place, so
487
+ // a guard added later cannot be silent to either by forgetting.
488
+ const deny = (why) => {
489
+ saw({ kind: 'tool', name: `refused · ${why.replace(/\s+/g, ' ').slice(0, 110)}` });
490
+ return reply({ allow: false, reason: why });
491
+ };
304
492
  if (req.url === '/tool-call') {
493
+ // Not reported here: the turn's own chunk stream names every tool call, with its
494
+ // arguments and any failure. This hook ran before that existed, and keeping it would
495
+ // print each call twice.
305
496
  // The same pre-approval the other engine gets from `allowedTools`: FlareDeck's READ tools
306
497
  // never reach the decider. Without this every get-card-details would post an approval
307
498
  // request on a card and wait for a person, which is not an agent.
308
499
  const name = String(payload.name ?? '');
309
500
  const fromFlaredeck = String(payload.server ?? '') === ctx.config.mcpServerName;
310
- if (fromFlaredeck && FLAREDECK_READ_TOOLS.includes(name)) {
501
+ if (fromFlaredeck && FLAREDECK_ALLOWED.includes(name)) {
502
+ return reply({ allow: true });
503
+ }
504
+ if (fromFlaredeck && ctx.noteCard)
505
+ ctx.noteCard(cardIn((payload.args ?? {})));
506
+ // The harness's OWN sets, now served over local MCP. They are pre-approved exactly as
507
+ // they are for the other engine, where they sit in `allowedTools` — the harness wrote
508
+ // them and each gates itself where it needs to (merge_and_promote asks a person inside
509
+ // itself). Without this they would reach the decider and stop for approval, which is how
510
+ // you give an agent a publish tool it still cannot use.
511
+ if (HARNESS_SERVERS.has(String(payload.server ?? ''))) {
311
512
  return reply({ allow: true });
312
513
  }
313
- // Working in its own checkout is the job too. These are Antigravity's built-in tools, and
314
- // they reach only the workspace the harness handed it — a worktree cut for this card. The
315
- // other engine gets the same freedom from auto mode; without it a Gemini agent could not
316
- // open a file, and "can it actually do the job" answered itself: no.
514
+ // The same finish gate the other engine gets in its tool proxy. This engine reaches
515
+ // FlareDeck over HTTP, so the guard is the only place the harness still sees the call.
516
+ if (fromFlaredeck && ctx.finish && CLAIMS_DONE(name, (payload.args ?? {}))) {
517
+ const why = await ctx.finish();
518
+ if (why)
519
+ return deny(why);
520
+ }
521
+ // Working in its own checkout is the job too. The other engine gets the same freedom from
522
+ // auto mode; without it a Gemini agent could not open a file. These reach the directory
523
+ // the sidecar was started in, which is the card's worktree — that is enforced by WHERE it
524
+ // runs, not by this list, and the comment that used to claim it here was wrong for as
525
+ // long as the cwd was the shared checkout.
317
526
  if (!payload.server && WORKSPACE_TOOLS.includes(name)) {
318
527
  return reply({ allow: true });
319
528
  }
@@ -321,6 +530,42 @@ async function startGuard(ctx) {
321
530
  // SAME Jev gate the other engine's Bash does — not a second copy of the rules.
322
531
  if (!payload.server && name === 'run_command') {
323
532
  const command = String(payload.args?.CommandLine ?? '');
533
+ // Reads outside the workspace. Everything this card needs is in the checkout or its
534
+ // worktrees; the rest of the home directory is other people's work and the harness's
535
+ // own keys.
536
+ const nosy = readsOutside(command, [...workspaceRoots(ctx), `${homedir()}/.gemini/antigravity`], homedir());
537
+ if (nosy)
538
+ return deny(nosy);
539
+ // Writes outside the one writable directory, refused exactly as the other engine
540
+ // refuses them. The SDK confines its own file tools to the workspace; the shell is not
541
+ // one of its tools, so without this a turn could write anywhere it could reach.
542
+ const mayChange = ctx.sandbox && existsSync(ctx.sandbox) ? ctx.sandbox : ctx.config.repo;
543
+ const strays = writesOutside(command, mayChange);
544
+ if (strays)
545
+ return deny(strays);
546
+ // `git push` cannot work here — the remote's pushurl is deliberately dead so that one
547
+ // sanctioned door does the publishing. The other engine has a push_branch tool; this
548
+ // one has no way to reach it, so the guard performs the same publish when it is asked.
549
+ // Its own checkout, like the other engine's sandbox hook. Sibling worktrees look
550
+ // identical, so following a path out of a card comment wastes a whole turn.
551
+ if (ctx.sandbox) {
552
+ const elsewhere = foreignWorktree(command, ctx.sandbox);
553
+ if (elsewhere)
554
+ return deny(elsewhere);
555
+ }
556
+ // The hard rules first — the ones the other engine gets from gitGuard. This path went
557
+ // straight to Jev, so publishing and remote rewriting were only ever soft-judged here.
558
+ const forbidden = blockedGitCommand(command);
559
+ if (forbidden && !/(^|[\s;&|(])git\b[^\n;&|]*\bpush\b/.test(command)) {
560
+ return deny(forbidden);
561
+ }
562
+ if (/(^|[\s;&|(])git\b[^\n;&|]*\bpush\b/.test(command) && ctx.publish) {
563
+ const result = await ctx.publish();
564
+ saw({ kind: 'tool', name: `publish · ${result.ok ? 'pushed' : 'refused'}` });
565
+ return deny(result.text);
566
+ }
567
+ if (forbidden)
568
+ return deny(forbidden);
324
569
  const verdict = await judgeCommand({
325
570
  apiKey: loadProviders().openrouter?.apiKey ?? '',
326
571
  decider: ctx.decider,
@@ -329,7 +574,10 @@ async function startGuard(ctx) {
329
574
  repo: ctx.config.repo,
330
575
  card: () => null,
331
576
  }, command);
332
- return reply(verdict.allow ? { allow: true } : { allow: false, message: verdict.reason });
577
+ // Jev declining without words still has to say something useful.
578
+ return verdict.allow
579
+ ? reply({ allow: true })
580
+ : deny(verdict.reason || 'The command guard declined this and gave no reason. Do not retry it unchanged.');
333
581
  }
334
582
  // Reporting on its own card is the JOB, not a privilege. The other engine runs in auto
335
583
  // mode, where a classifier waves routine calls through before they ever reach a decider;
@@ -341,7 +589,7 @@ async function startGuard(ctx) {
341
589
  return reply({ allow: true });
342
590
  }
343
591
  const decision = await ctx.decider({ toolName: String(payload.name ?? 'unknown'), input: payload.args ?? {} }, { signal: new AbortController().signal });
344
- return reply(decision.allow ? { allow: true } : { allow: false, message: decision.reason });
592
+ return decision.allow ? reply({ allow: true }) : deny(decision.reason);
345
593
  }
346
594
  // The engine cannot redact, so this is a report, not a rewrite — the harness decides what
347
595
  // to do about it, and at minimum it is in the log rather than nowhere.
@@ -1 +1 @@
1
- {"version":3,"file":"engine-antigravity.js","sourceRoot":"","sources":["../src/engine-antigravity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-antigravity.js","sourceRoot":"","sources":["../src/engine-antigravity.ts"],"names":[],"mappings":"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"}