@oddessentials/agent-guild 1.21.2 → 1.22.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.
Files changed (45) hide show
  1. package/bin/agent-guild.mjs +2 -0
  2. package/bin/native/win32-arm64/agent-guild-report.exe +0 -0
  3. package/bin/native/win32-x64/agent-guild-report.exe +0 -0
  4. package/bin/windows/arm64/agent-guild-start.exe +0 -0
  5. package/bin/windows/x64/agent-guild-start.exe +0 -0
  6. package/config/providers.default.json +4 -0
  7. package/docs/api.md +34 -3
  8. package/examples/terminal-ai-chat.json +27 -0
  9. package/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  10. package/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  11. package/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  12. package/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  13. package/node_modules/smol-toml/LICENSE +24 -0
  14. package/node_modules/smol-toml/README.md +605 -0
  15. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  16. package/node_modules/smol-toml/dist/date.js +156 -0
  17. package/node_modules/smol-toml/dist/error.d.ts +37 -0
  18. package/node_modules/smol-toml/dist/error.js +67 -0
  19. package/node_modules/smol-toml/dist/extract.js +293 -0
  20. package/node_modules/smol-toml/dist/index.cjs +771 -0
  21. package/node_modules/smol-toml/dist/index.d.ts +44 -0
  22. package/node_modules/smol-toml/dist/index.js +34 -0
  23. package/node_modules/smol-toml/dist/parse.d.ts +73 -0
  24. package/node_modules/smol-toml/dist/parse.js +164 -0
  25. package/node_modules/smol-toml/dist/primitive.js +151 -0
  26. package/node_modules/smol-toml/dist/stringify.d.ts +32 -0
  27. package/node_modules/smol-toml/dist/stringify.js +219 -0
  28. package/node_modules/smol-toml/dist/struct.js +156 -0
  29. package/node_modules/smol-toml/dist/util.d.ts +43 -0
  30. package/node_modules/smol-toml/dist/util.js +57 -0
  31. package/node_modules/smol-toml/package.json +68 -0
  32. package/package.json +2 -1
  33. package/src/manager/config.mjs +10 -10
  34. package/src/manager/install-channels.mjs +3 -0
  35. package/src/manager/main.mjs +4 -0
  36. package/src/manager/mcp-connect.mjs +483 -0
  37. package/src/manager/providers.mjs +23 -4
  38. package/src/manager/server.mjs +16 -1
  39. package/src/manager/session-manager.mjs +2 -2
  40. package/web/app.js +92 -2
  41. package/web/index.html +11 -1
  42. package/web/styles.css +13 -2
  43. package/web/yard/art.json +1 -1
  44. package/web/yard/renderer.js +110 -36
  45. package/web/yard/view.js +13 -3
@@ -360,6 +360,8 @@ async function main() {
360
360
  }
361
361
  case 'mcp': {
362
362
  // stdout carries only protocol messages from here on.
363
+ const home = args.find((a) => a.startsWith('--home='))?.slice('--home='.length);
364
+ if (home) process.env.AGENT_GUILD_HOME = home;
363
365
  const { serveMcp } = await import('../src/mcp/server.mjs');
364
366
  await serveMcp({ allowInput: flags.has('--allow-input') });
365
367
  return undefined;
@@ -12,6 +12,7 @@
12
12
  "memory": "claude",
13
13
  "instructions": "claude",
14
14
  "reporting": "claude",
15
+ "mcp": "claude",
15
16
  "homeVar": "CLAUDE_CONFIG_DIR",
16
17
  "accountEnv": { "CLAUDE_SECURESTORAGE_CONFIG_DIR": "{dir}" },
17
18
  "hooks": { "path": "settings.json", "example": "claude-code-settings.json" },
@@ -55,6 +56,7 @@
55
56
  "memory": "codex",
56
57
  "instructions": "codex",
57
58
  "reporting": "codex",
59
+ "mcp": "codex",
58
60
  "homeVar": "CODEX_HOME",
59
61
  "hooks": { "path": "hooks.json", "example": "codex-hooks.json" },
60
62
  "modelPattern": "\\bgpt-\\d[a-z0-9.-]*",
@@ -93,6 +95,7 @@
93
95
  "history": "antigravity",
94
96
  "instructions": "google",
95
97
  "reporting": "antigravity",
98
+ "mcp": "antigravity",
96
99
  "modelPattern": "\\bgemini-\\d[a-z0-9.-]*",
97
100
  "args": [],
98
101
  "resumeArgs": ["--conversation", "{id}"],
@@ -126,6 +129,7 @@
126
129
  "memory": "grok",
127
130
  "instructions": "grok",
128
131
  "reporting": "grok",
132
+ "mcp": "grok",
129
133
  "homeVar": "GROK_HOME",
130
134
  "hooks": { "path": "hooks/agent-guild.json", "example": "grok-hooks.json" },
131
135
  "modelPattern": "\\bgrok-(?:build|\\d)[a-z0-9.-]*",
package/docs/api.md CHANGED
@@ -123,8 +123,10 @@ whether its folder is on PATH. `uninstall` is null when Agent Guild cannot
123
123
  remove that copy, and `uninstallGuidance` then says how to remove it instead.
124
124
  `POST /providers/:id/uninstall` removes one copy.
125
125
 
126
- For a tool that is a Docker CLI plugin (Docker Agent), `installCommand` is the
127
- command **Install** and **Update** run. `pluginError` says why docker could not
126
+ `installCommand` is the command **Install** and **Update** run for a tool that
127
+ is a Docker CLI plugin (Docker Agent), or that a configured install command
128
+ updates by running again, and null otherwise. `plugin` names the Docker CLI
129
+ plugin the tool is, or is null. `pluginError` says why docker could not
128
130
  list the plugin's copies, or is null; `pluginPending` is true until docker has
129
131
  listed them once.
130
132
 
@@ -151,7 +153,35 @@ leaves the multiplexer's own session running, and
151
153
 
152
154
  For a tool whose agent or model reporting has to be turned on,
153
155
  `reportingEnabled` says whether it is, and `reportingNote` says why that switch
154
- cannot be used, or is null. `usageUrl`, `billingUrl` and `cloudUrl` are
156
+ cannot be used, or is null.
157
+
158
+ `mcp` is null unless the tool is installed and Agent Guild can add its own MCP
159
+ server (`agent-guild mcp`, see [mcp.md](mcp.md)) to the tool's settings:
160
+ Claude Code, Codex CLI, Antigravity CLI and Grok Build. Otherwise it is
161
+ `{ mode, accounts }`: `mode` is `claude`, `codex`, `antigravity` or `grok`, and
162
+ `accounts` has one `{ id, label, state, managed, from, command, allowInput,
163
+ detail, fingerprint }` per account, read from that account's settings. A
164
+ settings file the tool keeps as JSON is read again when it changes; a tool
165
+ asked through its CLI is asked again after a minute.
166
+
167
+ `state` is `checking` before the first read, `off`, `on`, `disabled` (turned
168
+ off in the tool), `conflict` or `error`. `on` and `disabled` mean the entry
169
+ named agent-guild starts Agent Guild's MCP server (`agent-guild mcp`, `npx
170
+ @oddessentials/agent-guild mcp` or Node running its `bin/agent-guild.mjs mcp`)
171
+ and reaches this manager's data folder, as the tool would start it: from
172
+ the first `--home=` when it names a folder, else the entry's `AGENT_GUILD_HOME`, else `APPDATA`,
173
+ `XDG_CONFIG_HOME` or the home folder from the tool's environment.
174
+ `conflict` is any other entry of that name, including one whose data folder
175
+ depends on an `AGENT_GUILD_HOME` set where the tool starts; `error` means the
176
+ tool's settings could not be read. `detail` says why for both. `managed` is
177
+ true for the entry Agent Guild adds itself. `from` names the other tool whose
178
+ settings the entry comes from (Grok Build loads Claude Code's and Cursor's), or
179
+ is null. `command` is the entry's command line. `fingerprint` identifies the
180
+ whole entry as read, or is null for `checking` and `error`. An account whose
181
+ home folder does not exist yet reads `off`, and turning the server on makes
182
+ the folder.
183
+
184
+ `usageUrl`, `billingUrl` and `cloudUrl` are
155
185
  `https://` links to the vendor's usage and billing pages and web app, or null.
156
186
 
157
187
  ### Manager environment
@@ -622,6 +652,7 @@ All paths are under `/api/v1`.
622
652
  | PATCH | `/providers/:id/accounts/:account` | `{ label, revision }` | `{ account, dir, providers, revision }`: renames an account, including `default`. |
623
653
  | DELETE | `/providers/:id/accounts/:account?revision=` | | `{ account, dir, providers, revision }`: removes an account from `providers.json`. Its home folder, `dir`, stays on disk. 409 `default_account` for `default`; 409 `account_in_use` while a running session uses it. |
624
654
  | POST | `/providers/:id/reporting` | `{ enabled }` | `{ provider }`: turns agent or model reporting on or off for a tool that has `reportingEnabled`. |
655
+ | POST | `/providers/:id/mcp` | `{ account, action, expect }` | `{ provider, result }`: changes Agent Guild's MCP server in one account's settings. `action` is `on` (add it, or turn it on in the tool), `off` (remove Agent Guild's entry, or turn off one that comes from another tool's settings) or `replace` (put Agent Guild's own entry in place of the one there). `expect` is the account's `fingerprint`: the account is read again first, and nothing changes unless the entry is still that one. `result` is `{ outcome, state, detail? }`, `outcome` `changed`, `unchanged` or `failed`. 400 `not_applicable` for a tool without `mcp`; 404 `unknown_account`; 409 `provider_unavailable` when it is not installed, `busy` while a change for that tool is running, `changed` when the entry is no longer `expect`, `unreadable` when the settings cannot be read, `conflict` for `on` or `off` on another server of that name, `needs_replace` for `on` on a Codex CLI entry Agent Guild did not add. |
625
656
  | POST | `/providers/:id/install` | `{ force? }` | `201 { session }`: a session that installs or updates the tool. 409 `provider_in_use` (with `running`, the session count) while the provider's sessions are running; retry with `force: true` after the user confirms. |
626
657
  | POST | `/providers/:id/uninstall` | `{ path, force? }` | `201 { session }`: a session that removes the copy at `path`, one of the provider's `installs`. `force` as for `install`. |
627
658
  | GET | `/environment?scope=&cwd=&id=` | | An environment snapshot; see [Manager environment](#manager-environment). |
@@ -0,0 +1,27 @@
1
+ {
2
+ "providers": [
3
+ {
4
+ "id": "terminal-ai-chat",
5
+ "vendor": "Odd Essentials",
6
+ "tool": "Terminal AI Chat",
7
+ "command": "terminal-ai-chat",
8
+ "versionArgs": ["--version"],
9
+ "color": "#E11D48",
10
+ "monogram": "T",
11
+ "releases": "https://github.com/oddessentials/terminal-ai-chat-releases/releases/latest",
12
+ "install": "curl -fsSL https://github.com/oddessentials/terminal-ai-chat-releases/releases/latest/download/install.sh | sh",
13
+ "docs": "https://github.com/oddessentials/terminal-ai-chat-releases",
14
+ "channels": {
15
+ "native": { "paths": ["~/.local/bin/terminal-ai-chat"], "remove": ["~/.local/bin/terminal-ai-chat"], "reinstall": true, "versionEnv": "TAC_VERSION" },
16
+ "brew": { "names": ["terminal-ai-chat"] }
17
+ },
18
+ "win32": {
19
+ "install": "irm https://github.com/oddessentials/terminal-ai-chat-releases/releases/latest/download/install.ps1 | iex",
20
+ "channels": {
21
+ "native": { "paths": ["~/AppData/Local/Programs/terminal-ai-chat"], "remove": ["~/AppData/Local/Programs/terminal-ai-chat"], "reinstall": true, "versionEnv": "TAC_VERSION" },
22
+ "winget": { "id": "OddEssentials.TerminalAIChat" }
23
+ }
24
+ }
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,24 @@
1
+ Copyright (c) Squirrel Chat et al., All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this
7
+ list of conditions and the following disclaimer.
8
+ 2. Redistributions in binary form must reproduce the above copyright notice,
9
+ this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+ 3. Neither the name of the copyright holder nor the names of its contributors
12
+ may be used to endorse or promote products derived from this software without
13
+ specific prior written permission.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.