@agntn/harnesses 0.0.1 → 0.1.1

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 CHANGED
@@ -1,12 +1,14 @@
1
1
  # @agntn/harnesses
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/%40agntn%2Fharnesses?style=flat&colorA=130f40&colorB=474787)](https://npmjs.com/package/@agntn/harnesses)
4
- [![npm downloads](https://img.shields.io/npm/dm/%40agntn%2Fharnesses?style=flat&colorA=130f40&colorB=474787)](https://npm.chart.dev/@agntn/harnesses)
5
- [![license](https://img.shields.io/github/license/agntn/harnesses?style=flat&colorA=130f40&colorB=474787)](https://github.com/agntn/harnesses/blob/main/LICENSE)
3
+ [![npm version](https://npmx.dev/api/registry/badge/version/@agntn/harnesses)](https://npmx.dev/package/@agntn/harnesses)
4
+ [![npm downloads](https://npmx.dev/api/registry/badge/downloads/@agntn/harnesses)](https://npmx.dev/package/@agntn/harnesses)
5
+ [![license](https://npmx.dev/api/registry/badge/license/@agntn/harnesses)](https://npmx.dev/package/@agntn/harnesses)
6
6
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/agntn/harnesses)
7
7
 
8
8
  Metadata toolkit for AI coding harnesses. One registry of paths, formats, and detection rules for every major CLI.
9
9
 
10
+ Docs: [harnesses.agntn.dev](https://harnesses.agntn.dev)
11
+
10
12
  ## Install
11
13
 
12
14
  ```bash
@@ -24,12 +26,12 @@ console.log(claude.hooks); // [{ path: ".claude/hooks/", scope: "project", ... }
24
26
  console.log(claude.invocationModes); // advisor and full agent modes, no read-only mode
25
27
 
26
28
  const codex = getHarness("codex");
27
- await codex.invoke("Review this patch", { readOnly: true });
29
+ await codex.invoke("Review this patch", { readOnly: true, timeoutMs: 60_000 });
28
30
 
29
31
  const pi = getHarness("pi");
30
32
  const { models } = await pi.listModels({ search: "gpt-5.4" });
31
33
  console.log(models); // [{ provider: "openai-codex", id: "gpt-5.4", ... }]
32
- await pi.invoke("Review this patch", { model: "openai-codex/gpt-5.4" });
34
+ await pi.invoke("Review this patch", { model: "openai-codex/gpt-5.4", readOnly: true });
33
35
 
34
36
  // Resolve to absolute paths for current platform
35
37
  const paths = claude.resolve({ platform: "linux", homeDir: "/home/dev" });
@@ -53,20 +55,21 @@ import type { ClaudeSessionEntry, CodexThread, GeminiConversationRecord } from "
53
55
 
54
56
  ## Supported agents
55
57
 
56
- | Agent | ID | Detection | Skills | Hooks | Sessions |
57
- | --------------- | ---------------- | ------------- | --------------------- | ------------------------ | -------------- |
58
- | Antigravity CLI | `antigravity` | project | `.agents/skills/` | - | JSONL + SQLite |
59
- | Claude Code | `claude` | env + project | `.claude/skills/` | `.claude/hooks/` | JSONL |
60
- | Codex CLI | `codex` | project | `.agents/skills/` | - | SQLite + JSONL |
61
- | Gemini CLI | `gemini` | env + project | `.gemini/skills/` | - | JSON |
62
- | Grok CLI | `grok` | env + project | `.grok/skills/` | `.grok/hooks/` | TOML + JSONL |
63
- | OpenCode | `opencode` | project | `.opencode/skills/` | - | SQLite |
64
- | Cursor | `cursor` | env + project | `.cursor/skills/` | - | - |
65
- | GitHub Copilot | `github-copilot` | env + project | `.github/skills/` | - | - |
66
- | Mastra Code | `mastracode` | project | `.mastracode/skills/` | `.mastracode/hooks.json` | SQLite |
67
- | OMP (oh-my-pi) | `omp` | env + project | `.omp/skills/` | - | JSONL + SQLite |
68
- | Pi Coding Agent | `pi` | env + project | `.pi/skills/` | - | JSON + JSONL |
69
- | Freebuff | `freebuff` | project | `.agents/skills/` | - | JSON + JSONL |
58
+ | Agent | ID | Detection | Skills | Hooks | Sessions |
59
+ | --------------- | ---------------- | ------------- | ---------------------- | ------------------------ | -------------- |
60
+ | Antigravity CLI | `antigravity` | project | `.agents/skills/` | - | JSONL + SQLite |
61
+ | Claude Code | `claude` | env + project | `.claude/skills/` | `.claude/hooks/` | JSONL |
62
+ | Codex CLI | `codex` | project | `.agents/skills/` | - | SQLite + JSONL |
63
+ | Gemini CLI | `gemini` | env + project | `.gemini/skills/` | - | JSON |
64
+ | Grok CLI | `grok` | env + project | `.grok/skills/` | `.grok/hooks/` | TOML + JSONL |
65
+ | OpenCode | `opencode` | project | `.opencode/skills/` | - | SQLite |
66
+ | Cursor | `cursor` | env + project | `.cursor/skills/` | - | - |
67
+ | GitHub Copilot | `github-copilot` | env + project | `.github/skills/` | - | - |
68
+ | Mastra Code | `mastracode` | project | `.mastracode/skills/` | `.mastracode/hooks.json` | SQLite |
69
+ | OMP (oh-my-pi) | `omp` | env + project | `.omp/skills/` | - | JSONL + SQLite |
70
+ | Pi Coding Agent | `pi` | env + project | `.pi/skills/` | - | JSON + JSONL |
71
+ | Prime Agent | `prime-agent` | env + project | `.prime/agent/skills/` | - | JSONL + JSON |
72
+ | Freebuff | `freebuff` | project | `.agents/skills/` | - | JSON + JSONL |
70
73
 
71
74
  ### Native audio and video input
72
75
 
@@ -85,11 +88,30 @@ import type { ClaudeSessionEntry, CodexThread, GeminiConversationRecord } from "
85
88
  | Mastra Code | No | No | No verified native route |
86
89
  | OMP (oh-my-pi) | No | No | No verified native route |
87
90
  | Pi Coding Agent | No | No | No verified native route |
91
+ | Prime Agent | No | No | No verified native route |
88
92
  | Freebuff | No | No | No verified native route |
89
93
 
90
94
  Primary references: [Antigravity prompting](https://antigravity.google/docs/cli/prompting/), [Antigravity changelog](https://github.com/google-antigravity/antigravity-cli/blob/main/CHANGELOG.md), [Gemini CLI tools](https://github.com/google-gemini/gemini-cli/blob/main/docs/reference/tools.md), [Gemini CLI video request](https://github.com/google-gemini/gemini-cli/issues/27194), [OpenCode attachments](https://opencode.ai/v2/docs/attachments/), [Cursor prompting](https://cursor.com/docs/agent/prompting), and [Copilot CLI voice input](https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/voice-input).
91
95
 
92
- Each agent is a concrete subclass of the abstract `Harness` class. Custom subclasses can be added with `registerHarness`. Every harness exposes config paths, session locations, instruction files, skills dirs, hooks, commands, persistence formats, capabilities (MCP, vision, audio, video, tools, streaming), detection rules, a normalized non-interactive invocation (`harness.invoke(prompt, { model })`) where the CLI has a headless mode, native model listing (`harness.listModels()`) where the CLI supports it, and its MCP server config files (`listMcpServers`/`addMcpServer`/`removeMcpServer` normalize the dialects; writes rewrite JSON and surgically edit TOML with comments preserved). `syncMcpServers` treats `~/.config/agntn/mcp.jsonc` (JSONC, XDG-aware) as the single source of truth and resets every harness's user-scope MCP config to exactly that list; a top-level `"excludes": ["codex"]` array opts individual harnesses out of the sync (their own servers stay, master-listed names are withdrawn), and `~`/`${HOME}` in commands, args, and env values expand to absolute paths at sync time (harnesses spawn MCP servers without a shell). `syncAgentsFiles` links every harness's global instructions file (CLAUDE.md/AGENTS.md/GEMINI.md) to one master file as symlinks, so an edit made through any harness lands in the single physical copy; `~/.config/agntn/agents.jsonc` sets the `source`, `companions`, and `excludes`, diverged regular files are backed up and relinked, and check mode reports without writing. Companion paths are relative to the source directory and are linked at the same relative path beside each harness target.
96
+ `invoke()` and `listModels()` accept `timeoutMs` and `signal?: AbortSignal`. Unset or `0` means no deadline. An already aborted signal skips spawning. Otherwise, the first cancellation or deadline starts cleanup: Linux and macOS use a dedicated process group, with `SIGTERM` followed by `SIGKILL` after 500 ms even if the root has exited. Windows uses `taskkill /T /F` immediately, with a 2 s budget for that command. Cleanup failures reject the call.
97
+
98
+ Stopped results retain captured output and set `exitCode: null`. Caller cancellation sets `aborted: true`, a deadline sets `timedOut: true`, and the first reason wins. Both flags are false on normal completion. Later aborts do nothing, and cancelled model listings return no parsed models. Pi, OMP, and MCP tools forward their host request signal, not a JSON argument supplied by the model.
99
+
100
+ ```ts
101
+ const controller = new AbortController();
102
+ const pending = getHarness("pi").invoke("Review this change", {
103
+ tools: true,
104
+ readOnly: true,
105
+ signal: controller.signal,
106
+ });
107
+ controller.abort();
108
+ const result = await pending;
109
+ console.log(result.aborted);
110
+ ```
111
+
112
+ This is command cleanup, not a sandbox. Descendants that leave the POSIX process group, or outlive an already exited root on Windows, cannot be reliably reached by these mechanisms. Inherited output pipes do not extend the wait after cleanup. Scheduling and OS delays can exceed the stated budgets.
113
+
114
+ Each agent is a concrete subclass of the abstract `Harness` class. Custom subclasses can be added with `registerHarness`. Every harness exposes config paths, session locations, instruction files, skills dirs, hooks, commands, persistence formats, capabilities (MCP, vision, audio, video, tools, streaming), detection rules, a normalized non-interactive invocation (`harness.invoke(prompt, { model })`) where the CLI has a headless mode, native model listing (`harness.listModels()`) where the CLI supports it, and its MCP server config files (`listMcpServers`/`addMcpServer`/`removeMcpServer` normalize the dialects; writes rewrite JSON and surgically edit TOML with comments preserved). `syncMcpServers` treats `~/.config/agntn/mcp.jsonc` (JSONC, XDG-aware) as the single source of truth and resets every harness's user-scope MCP config to exactly that list; a top-level `"excludes": ["codex"]` array opts individual harnesses out of the sync (their own servers stay, master-listed names are withdrawn), and `~`/`${HOME}` in commands, args, and env values expand to absolute paths at sync time (harnesses spawn MCP servers without a shell). An env value that is exactly `${NAME}` references that variable of the harness environment: Prime Agent stores it natively as `{"env": "NAME"}`, the other harnesses receive the value from the syncing process, and a server one dialect cannot hold is reported as `skipped` with a reason while the rest of the list syncs. `syncAgentsFiles` links every harness's global instructions file (CLAUDE.md/AGENTS.md/GEMINI.md) to one master file as symlinks, so an edit made through any harness lands in the single physical copy; `~/.config/agntn/agents.jsonc` sets the `source`, `companions`, and `excludes`, diverged regular files are backed up and relinked, and check mode reports without writing. Companion paths are relative to the source directory and are linked at the same relative path beside each harness target.
93
115
 
94
116
  ```jsonc
95
117
  {
@@ -101,7 +123,7 @@ Each agent is a concrete subclass of the abstract `Harness` class. Custom subcla
101
123
 
102
124
  All paths carry `scope` (user/project/system/data), `level` (official/community/inferred), and optional `platforms` tags.
103
125
 
104
- The `harnesses_info` agent tool accepts one harness id or a batch of up to 20 ids. Batch results keep the input order and include errors for unknown ids beside successful metadata.
126
+ The `harnesses_info` agent tool accepts one harness id or a batch of up to 20 ids. Batch results keep the input order and include errors for unknown ids beside successful metadata. Paths come once, resolved for the current platform. The templates stay with `harnesses info`.
105
127
 
106
128
  ## CLI
107
129
 
@@ -125,13 +147,13 @@ harnesses agents sync --check # doctor: link global AGENTS.md files to one mas
125
147
  harnesses mcp # run the MCP server over stdio
126
148
  ```
127
149
 
128
- `tools` defaults to `false` in the library and CLI. The MCP, Pi, and OMP tools require agents to choose it explicitly. `false` must use a native CLI flag that removes tools from the model context; it is a lightweight advisor, not an agent constrained only by prompt wording. Set `tools: true` (or CLI `--tools`) whenever the task needs harness tools, including Grok's native X search. Add `readOnly: true` when those tools must stay inside a sandbox enforced by the harness CLI; the agent tools pass it beside `tools: true`, while the library and CLI let it imply tools. Read-only mode is rejected when a harness has no verified native recipe, so it never falls back to broader access. Harnesses whose CLI cannot disable tools reject advisor mode instead of silently running an agent and return an explicit `tools` retry when their full agent mode can handle the request.
150
+ `tools` defaults to `false` in the library and CLI. The MCP, Pi, and OMP tools require agents to choose it explicitly. `false` must use a native CLI flag that removes tools from the model context; it is a lightweight advisor, not an agent constrained only by prompt wording. Set `tools: true` (or CLI `--tools`) whenever the task needs harness tools, including Grok's native X search. Add `readOnly: true` when those tools must stay inside a sandbox enforced by the harness CLI; the agent tools pass it beside `tools: true`, while the library and CLI let it imply tools. Read-only mode is rejected when a harness has no verified native recipe, so it never falls back to broader access. A recipe can also carry the lowest CLI version whose enforcement was verified, and `invoke()` rejects read-only runs on older or unknown versions: Grok runs `--sandbox read-only` from 1.0.13, and Claude Code keeps read-only runs on `Read`, `Glob` and `Grep` with `--strict-mcp-config` from 2.1.175. Harnesses whose CLI cannot disable tools reject advisor mode instead of silently running an agent and return an explicit `tools` retry when their full agent mode can handle the request.
129
151
 
130
152
  ## How harnesses compares to unagent
131
153
 
132
154
  [unagent](https://github.com/onmax/unagent) covers similar ground but makes different tradeoffs.
133
155
 
134
- **harnesses is deep and narrow.** Each harness gets verified, platform-specific paths with scope, evidence level, and platform tags. Session formats are typed per harness. Twelve harnesses, each fully mapped.
156
+ **harnesses is deep and narrow.** Each harness gets verified, platform-specific paths with scope, evidence level, and platform tags. Session formats are typed per harness. Thirteen harnesses, each fully mapped.
135
157
 
136
158
  **unagent is wide and shallow.** 40+ agents detected by env vars, but each definition is just `configDir` + `rulesFile` + `skillsDir`. No platform-specific paths, no session schemas. In exchange, it ships runtime primitives harnesses doesn't touch yet: skill install/uninstall, vector stores, browser automation, sandboxes, queues, workflows.
137
159
 
@@ -1,5 +1,5 @@
1
1
  declare const version: string;
2
- type HarnessId = "antigravity" | "codex" | "gemini" | "grok" | "claude" | "opencode" | "cursor" | "freebuff" | "github-copilot" | "mastracode" | "omp" | "pi";
2
+ type HarnessId = "antigravity" | "codex" | "gemini" | "grok" | "claude" | "opencode" | "cursor" | "freebuff" | "github-copilot" | "mastracode" | "omp" | "pi" | "prime-agent";
3
3
  type EvidenceLevel = "official" | "community" | "inferred";
4
4
  type Platform = "linux" | "darwin" | "win32";
5
5
  interface PathCandidate {
@@ -40,6 +40,8 @@ interface HarnessInvocation {
40
40
  readOnlyArgs?: string[];
41
41
  /** Structured agent argument template with read-only tool access. */
42
42
  readOnlyJsonArgs?: string[];
43
+ /** Lowest CLI version whose read-only enforcement was verified; older or unknown versions reject read-only runs. */
44
+ readOnlyMinVersion?: string;
43
45
  /** Arguments appended when a model is selected; every "{model}" is replaced. */
44
46
  modelArgs?: string[];
45
47
  level: EvidenceLevel;
@@ -77,8 +79,10 @@ interface ListModelsOptions {
77
79
  search?: string;
78
80
  cwd?: string;
79
81
  env?: Record<string, string>;
80
- /** Kill the model-listing command after this many milliseconds; unset means no timeout. */
82
+ /** Milliseconds before cleanup starts. Unset or 0 disables the deadline. */
81
83
  timeoutMs?: number;
84
+ /** Cancel with the same process cleanup as a timeout. */
85
+ signal?: AbortSignal;
82
86
  }
83
87
  interface InvokeOptions {
84
88
  cwd?: string;
@@ -89,8 +93,10 @@ interface InvokeOptions {
89
93
  tools?: boolean;
90
94
  /** Require native enforcement of read-only tool access. Implies `tools: true`. */
91
95
  readOnly?: boolean;
92
- /** Kill the harness after this many milliseconds; unset means no timeout. */
96
+ /** Milliseconds before cleanup starts. Unset or 0 disables the deadline. */
93
97
  timeoutMs?: number;
98
+ /** Cancel with the same process cleanup as a timeout. */
99
+ signal?: AbortSignal;
94
100
  /** Use the harness's structured (JSON) output mode instead of plain text. */
95
101
  structured?: boolean;
96
102
  }
@@ -99,9 +105,11 @@ interface InvokeResult {
99
105
  args: string[];
100
106
  stdout: string;
101
107
  stderr: string;
102
- /** Process exit code; null when the run hit `timeoutMs` and was killed. */
108
+ /** Process exit code; null when terminated by a signal, timeout, or cancellation. */
103
109
  exitCode: number | null;
104
110
  timedOut: boolean;
111
+ /** True when caller cancellation wins over the deadline or completion. */
112
+ aborted: boolean;
105
113
  }
106
114
  /** Result of one native model-listing command. */
107
115
  interface ListModelsResult extends InvokeResult {
@@ -114,6 +122,11 @@ interface McpServerConfig {
114
122
  transport: "stdio" | "http" | "sse";
115
123
  command?: string;
116
124
  args?: string[];
125
+ /**
126
+ * Environment for stdio servers. A value that is exactly "${NAME}" refers to
127
+ * the variable NAME of the harness environment: dialects with native
128
+ * references keep it, the others resolve it when the entry is written.
129
+ */
117
130
  env?: Record<string, string>;
118
131
  url?: string;
119
132
  headers?: Record<string, string>;
@@ -125,8 +138,11 @@ interface McpConfigFile extends PathCandidate {
125
138
  format: "json" | "toml";
126
139
  /** Object path to the server map inside the file, e.g. ["mcpServers"]. */
127
140
  key: string[];
128
- /** Shape of individual entries; "standard" is the {command, args, env, url} family. */
129
- dialect: "standard" | "antigravity" | "opencode" | "vscode";
141
+ /**
142
+ * Shape of individual entries; "standard" is the {command, args, env, url}
143
+ * family and "prime" is that family with env values as {"env": "NAME"} references.
144
+ */
145
+ dialect: "standard" | "antigravity" | "opencode" | "prime" | "vscode";
130
146
  }
131
147
  interface HarnessDetection {
132
148
  /** Environment variables that indicate running inside this agent. */
@@ -214,10 +230,19 @@ declare abstract class Harness {
214
230
  * exits instead of waiting forever.
215
231
  *
216
232
  * @param prompt - Prompt sent to the harness.
217
- * @param options - Invocation, environment, and timeout options.
233
+ * @param options - Invocation, environment, timeout, and cancellation options.
218
234
  * @returns {Promise<InvokeResult>} The completed process result.
219
235
  */
220
236
  invoke(prompt: string, options?: InvokeOptions): Promise<InvokeResult>;
237
+ /**
238
+ * Explains why the installed CLI cannot run a read-only recipe that carries a
239
+ * version floor, or returns null when no floor applies or the installed
240
+ * version meets it. An unknown version fails closed, like a missing recipe.
241
+ *
242
+ * @param options - Requested execution mode.
243
+ * @returns {string | null} The version incompatibility, or null when the run may proceed.
244
+ */
245
+ private readOnlyVersionError;
221
246
  /**
222
247
  * Expands the native model-listing recipe without spawning anything.
223
248
  *
@@ -232,7 +257,7 @@ declare abstract class Harness {
232
257
  * Runs the harness's native model-listing command and normalizes its output.
233
258
  * stdin is closed for the same reason as {@link invoke}.
234
259
  *
235
- * @param options - Search, environment, and timeout options.
260
+ * @param options - Search, environment, timeout, and cancellation options.
236
261
  * @returns {Promise<ListModelsResult>} The normalized command and model result.
237
262
  */
238
263
  listModels(options?: ListModelsOptions): Promise<ListModelsResult>;
@@ -267,6 +292,10 @@ interface McpConfigListing {
267
292
  /** Set when the file exists but could not be parsed. */
268
293
  error?: string;
269
294
  }
295
+ /** Thrown when a server's env cannot be written the way the target dialect requires. */
296
+ declare class McpEnvError extends Error {
297
+ readonly name = "McpEnvError";
298
+ }
270
299
  /**
271
300
  * Lists the MCP servers a harness has configured, per declared config file.
272
301
  * Missing files come back with `exists: false`; unparsable ones carry `error`.
@@ -329,7 +358,9 @@ interface SyncTargetResult {
329
358
  excluded?: true;
330
359
  results: Array<{
331
360
  name: string;
332
- action: "added" | "replaced" | "removed" | "unchanged";
361
+ action: "added" | "replaced" | "removed" | "unchanged" | "skipped";
362
+ /** Why a master server could not be written to this harness. */
363
+ reason?: string;
333
364
  }>;
334
365
  }
335
366
  /** Outcome of resetting the harness configs to the master list. */
@@ -413,5 +444,5 @@ declare function readAgentsConfig(options?: ResolveOptions): AgentsConfig;
413
444
  * @returns {AgentsSyncReport} Per-harness synchronization outcomes.
414
445
  */
415
446
  declare function syncAgentsFiles(harnesses: readonly Harness[], check?: boolean, options?: ResolveOptions): AgentsSyncReport;
416
- export { AgentsCompanionTargetResult, AgentsConfig, AgentsSyncAction, AgentsSyncReport, AgentsTargetResult, AvailableModel, EvidenceLevel, Harness, HarnessCapabilities, HarnessConstructor, HarnessDetection, HarnessId, HarnessInvocation, HarnessInvocationModes, HarnessModelListing, InvokeOptions, InvokeResult, ListModelsOptions, ListModelsResult, McpConfigFile, McpConfigListing, McpServerConfig, PathCandidate, Platform, ResolveOptions, ResolvedPaths, StorageDescriptor, SyncReport, SyncTargetResult, addMcpServer, listMcpServers, masterMcpPath, parseJsonc, readAgentsConfig, readMasterMcpServers, removeMcpServer, syncAgentsFiles, syncMcpServers, version };
447
+ export { AgentsCompanionTargetResult, AgentsConfig, AgentsSyncAction, AgentsSyncReport, AgentsTargetResult, AvailableModel, EvidenceLevel, Harness, HarnessCapabilities, HarnessConstructor, HarnessDetection, HarnessId, HarnessInvocation, HarnessInvocationModes, HarnessModelListing, InvokeOptions, InvokeResult, ListModelsOptions, ListModelsResult, McpConfigFile, McpConfigListing, McpEnvError, McpServerConfig, PathCandidate, Platform, ResolveOptions, ResolvedPaths, StorageDescriptor, SyncReport, SyncTargetResult, addMcpServer, listMcpServers, masterMcpPath, parseJsonc, readAgentsConfig, readMasterMcpServers, removeMcpServer, syncAgentsFiles, syncMcpServers, version };
417
448
  //# sourceMappingURL=agents-sync.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents-sync.d.mts","names":[],"sources":["../../src/types.ts","../../src/harness.ts","../../src/mcp-servers.ts","../../src/agents-sync.ts"],"mappings":"AAEA,cAAa;KAED;KAaA;KACA;UAEK;EACf;EACA;EACA,OAAO;EACP,YAAY;EACZ;;UAGe;EACf;EACA,OAAO;EACP;;UAGe;EACf;EACA;;EAEA;;EAEA;EACA;EACA;;;UAIe;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA,OAAO;EACP;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA;;;UAIe;;EAEf;;EAEA;EACA,OAAO;EACP;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA;;;UAIe;EACf;EACA;EACA,MAAM;;EAEN;;UAGe;EACf;EACA,MAAM;;EAEN;;EAEA;;EAEA;;EAEA;;EAEA;;UAGe;EACf;EACA;EACA;EACA;;EAEA;EACA;;;UAIe,yBAAyB;;EAExC,QAAQ;;;UAIO;EACf;EACA;EACA;EACA;EACA,MAAM;EACN;EACA,UAAU;;EAEV;;;UAIe,sBAAsB;EACrC;;EAEA;;EAEA;;UAGe;;EAEf;;EAEA;;UAGe;EACf;EACA;EACA,WAAW;;UAGI;EACf,QAAQ;EACR,UAAU;EACV,cAAc;EACd,QAAQ;EACR,UAAU;EACV,OAAO;;KC9IJ,oBAAoB;EACvB;EACA;EACA;EACA;;uBAqHoB;oBACF,IAAI;oBACJ;oBACA;oBACA,QAAQ;oBACR,UAAU;oBACV,aAAa;oBACb,cAAc;oBACd,QAAQ;oBACR,UAAU;oBACV,OAAO;oBACP,cAAc;oBACd,WAAW;;oBAEX,YAAY;;WAErB,cAAc;;WAEd,YAAY;;;;;;WAMZ;EAET;EAYA;EAIA,cAAc;MAKV;;;;;;MAsBA,mBAAmB;;;;;;;;;;EAoBvB,gBACE,gBACA,UAAS;IACN;IAAiB;;;;;;;;EAmBtB,gBAAgB,UAAS;;;;;;;;;;EAwBzB,OAAO,gBAAgB,UAAS,gBAAqB,QAAQ;;;;;;;EAuB7D,yBAAyB;IAAoB;IAAiB;;;;;;;;;EAmBxD,WAAW,UAAS,oBAAyB,QAAQ;;;;;;YAyBjD,wBAAwB,kBAAkB;;;;;;;;;;EAapD,kBAAkB,UAAU,eAC1B,kBAAkB,KAClB,UAAS,iBACR;EAcH,QAAQ,UAAS,iBAAsB;;KAY7B,+BAA+B;;UC9X1B;EACf;EACA,OAAO;EACP,QAAQ;EACR,OAAO;EACP;EACA;EACA,SAAS;;EAET;;;;;;;;;;iBAmRc,eAAe,SAAS,SAAS,UAAS,iBAAsB;;;;;;;;;;;;iBAiLhE,aACd,SAAS,SACT,QAAQ,iBACR,4BACA,UAAS;EACN;EAAc;;;;;;;;;;;iBA0BH,gBACd,SAAS,SACT,cACA,4BACA,UAAS;EACN;EAAc;;;;;;;;;iBA8FH,WAAW;;;;;;;iBAwBX,cAAc,UAAS;;UAKtB;EACf;EACA;;EAEA;;EAEA;EACA,SAAS;IAAQ;IAAc;;;;UAIhB;EACf;EACA;EACA,SAAS;;;;;;;;iBAuEK,qBAAqB,UAAS;EAC5C;EACA,SAAS;;EAET;;;;;;;;;;;iBA2Hc,eACd,oBAAoB,WACpB,UAAS,iBACR;;UC1zBc;;EAEf;;EAEA;;EAEA;;EAEA;;KAGU;;UAGK;WACN;WACA;WACA,QAAQ,QAAQ;;WAEhB;;;UAIM;EACf;EACA;EACA,QAAQ;;EAER;;EAEA,sBAAsB;;;UAIP;EACf;EACA;EACA,SAAS;;;;;;;;iBAkFK,iBAAiB,UAAS,iBAAsB;;;;;;;;;;iBAiMhD,gBACd,oBAAoB,WACpB,iBACA,UAAS,iBACR"}
1
+ {"version":3,"file":"agents-sync.d.mts","names":[],"sources":["../../src/types.ts","../../src/harness.ts","../../src/mcp-servers.ts","../../src/agents-sync.ts"],"mappings":"AAEA,cAAa;KAED;KAcA;KACA;UAEK;EACf;EACA;EACA,OAAO;EACP,YAAY;EACZ;;UAGe;EACf;EACA,OAAO;EACP;;UAGe;EACf;EACA;;EAEA;;EAEA;EACA;EACA;;;UAIe;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA,OAAO;EACP;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA;;;UAIe;;EAEf;;EAEA;EACA,OAAO;EACP;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA;;;UAIe;EACf;EACA;EACA,MAAM;;EAEN;;EAEA,SAAS;;UAGM;EACf;EACA,MAAM;;EAEN;;EAEA;;EAEA;;EAEA;;EAEA,SAAS;;EAET;;UAGe;EACf;EACA;EACA;EACA;;EAEA;EACA;;EAEA;;;UAIe,yBAAyB;;EAExC,QAAQ;;;UAIO;EACf;EACA;EACA;EACA;;;;;;EAMA,MAAM;EACN;EACA,UAAU;;EAEV;;;UAIe,sBAAsB;EACrC;;EAEA;;;;;EAKA;;UAGe;;EAEf;;EAEA;;UAGe;EACf;EACA;EACA,WAAW;;UAGI;EACf,QAAQ;EACR,UAAU;EACV,cAAc;EACd,QAAQ;EACR,UAAU;EACV,OAAO;;KC5JJ,oBAAoB;EACvB;EACA;EACA;EACA;;uBA2OoB;oBACF,IAAI;oBACJ;oBACA;oBACA,QAAQ;oBACR,UAAU;oBACV,aAAa;oBACb,cAAc;oBACd,QAAQ;oBACR,UAAU;oBACV,OAAO;oBACP,cAAc;oBACd,WAAW;;oBAEX,YAAY;;WAErB,cAAc;;WAEd,YAAY;;;;;;WAMZ;EAET;EAYA;EAIA,cAAc;MAKV;;;;;;MAsBA,mBAAmB;;;;;;;;;;EAoBvB,gBACE,gBACA,UAAS;IACN;IAAiB;;;;;;;;EAmBtB,gBAAgB,UAAS;;;;;;;;;;EAqBzB,OAAO,gBAAgB,UAAS,gBAAqB,QAAQ;;;;;;;;;UA2BrD;;;;;;;EAgBR,yBAAyB;IAAoB;IAAiB;;;;;;;;;EAmBxD,WAAW,UAAS,oBAAyB,QAAQ;;;;;;YAyBjD,wBAAwB,kBAAkB;;;;;;;;;;EAapD,kBAAkB,UAAU,eAC1B,kBAAkB,KAClB,UAAS,iBACR;EAcH,QAAQ,UAAS,iBAAsB;;KAY7B,+BAA+B;;UCxgB1B;EACf;EACA,OAAO;EACP,QAAQ;EACR,OAAO;EACP;EACA;EACA,SAAS;;EAET;;;cA2JW,oBAAoB;WACb;;;;;;;;;;iBAkOJ,eAAe,SAAS,SAAS,UAAS,iBAAsB;;;;;;;;;;;;iBAiLhE,aACd,SAAS,SACT,QAAQ,iBACR,4BACA,UAAS;EACN;EAAc;;;;;;;;;;;iBA2BH,gBACd,SAAS,SACT,cACA,4BACA,UAAS;EACN;EAAc;;;;;;;;;iBA8FH,WAAW;;;;;;;iBAwBX,cAAc,UAAS;;UAKtB;EACf;EACA;;EAEA;;EAEA;EACA,SAAS;IACP;IACA;;IAEA;;;;UAKa;EACf;EACA;EACA,SAAS;;;;;;;;iBAuEK,qBAAqB,UAAS;EAC5C;EACA,SAAS;;EAET;;;;;;;;;;;iBAmIc,eACd,oBAAoB,WACpB,UAAS,iBACR;;UCn7Bc;;EAEf;;EAEA;;EAEA;;EAEA;;KAGU;;UAGK;WACN;WACA;WACA,QAAQ,QAAQ;;WAEhB;;;UAIM;EACf;EACA;EACA,QAAQ;;EAER;;EAEA,sBAAsB;;;UAIP;EACf;EACA;EACA,SAAS;;;;;;;;iBA2FK,iBAAiB,UAAS,iBAAsB;;;;;;;;;;iBAiMhD,gBACd,oBAAoB,WACpB,iBACA,UAAS,iBACR"}