@bastani/atomic 0.9.25-alpha.3 → 0.9.25-alpha.5

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 (184) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/CHANGELOG.md +30 -0
  4. package/dist/builtin/mcp/OAUTH.md +59 -269
  5. package/dist/builtin/mcp/README.md +58 -345
  6. package/dist/builtin/mcp/index.bundle.mjs +4 -28073
  7. package/dist/builtin/mcp/native-client-licenses/LICENSES/modelcontextprotocol-typescript-sdk.txt +21 -0
  8. package/dist/builtin/mcp/native-client-licenses/NOTICE +30 -0
  9. package/dist/builtin/mcp/package.json +4 -25
  10. package/dist/builtin/subagents/package.json +1 -1
  11. package/dist/builtin/web-access/package.json +1 -1
  12. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  13. package/dist/builtin/workflows/package.json +1 -1
  14. package/dist/builtin/workflows/src/extension/index.bundle.mjs +18 -3
  15. package/dist/cli/args.d.ts.map +1 -1
  16. package/dist/cli/args.js +2 -1
  17. package/dist/cli/args.js.map +1 -1
  18. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  19. package/dist/core/agent-session-extension-bindings.js +87 -5
  20. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  21. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  22. package/dist/core/agent-session-tool-registry.js +6 -3
  23. package/dist/core/agent-session-tool-registry.js.map +1 -1
  24. package/dist/core/extensions/context-types.d.ts +3 -1
  25. package/dist/core/extensions/context-types.d.ts.map +1 -1
  26. package/dist/core/extensions/context-types.js.map +1 -1
  27. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  28. package/dist/core/extensions/loader-api.js +4 -0
  29. package/dist/core/extensions/loader-api.js.map +1 -1
  30. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  31. package/dist/core/extensions/loader-virtual-modules.js +3 -0
  32. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  33. package/dist/core/mcp-child-policy.d.ts +11 -0
  34. package/dist/core/mcp-child-policy.d.ts.map +1 -0
  35. package/dist/core/mcp-child-policy.js +31 -0
  36. package/dist/core/mcp-child-policy.js.map +1 -0
  37. package/dist/core/mcp-servers.d.ts +32 -26
  38. package/dist/core/mcp-servers.d.ts.map +1 -1
  39. package/dist/core/mcp-servers.js +148 -1
  40. package/dist/core/mcp-servers.js.map +1 -1
  41. package/dist/core/package-manager-manifest.js.map +1 -1
  42. package/dist/core/package-manager-mcp-servers.js +1 -1
  43. package/dist/core/package-manager-mcp-servers.js.map +1 -1
  44. package/dist/core/sdk.js +10 -1
  45. package/dist/core/sdk.js.map +1 -1
  46. package/dist/core/tools/truncate.d.ts +8 -0
  47. package/dist/core/tools/truncate.d.ts.map +1 -1
  48. package/dist/core/tools/truncate.js +24 -0
  49. package/dist/core/tools/truncate.js.map +1 -1
  50. package/dist/extensions/mcp/cli.d.ts +21 -0
  51. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  52. package/dist/extensions/mcp/cli.js +500 -0
  53. package/dist/extensions/mcp/cli.js.map +1 -0
  54. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  55. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  56. package/dist/extensions/mcp/cli.lazy.js +3 -0
  57. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  58. package/dist/extensions/mcp/client/auth-provider.d.ts +15 -0
  59. package/dist/extensions/mcp/client/auth-provider.d.ts.map +1 -0
  60. package/dist/extensions/mcp/client/auth-provider.js +2 -0
  61. package/dist/extensions/mcp/client/auth-provider.js.map +1 -0
  62. package/dist/extensions/mcp/client/client.d.ts +89 -0
  63. package/dist/extensions/mcp/client/client.d.ts.map +1 -0
  64. package/dist/extensions/mcp/client/client.js +457 -0
  65. package/dist/extensions/mcp/client/client.js.map +1 -0
  66. package/dist/extensions/mcp/client/index.d.ts +9 -0
  67. package/dist/extensions/mcp/client/index.d.ts.map +1 -0
  68. package/dist/extensions/mcp/client/index.js +7 -0
  69. package/dist/extensions/mcp/client/index.js.map +1 -0
  70. package/dist/extensions/mcp/client/oauth/callback.d.ts +42 -0
  71. package/dist/extensions/mcp/client/oauth/callback.d.ts.map +1 -0
  72. package/dist/extensions/mcp/client/oauth/callback.js +106 -0
  73. package/dist/extensions/mcp/client/oauth/callback.js.map +1 -0
  74. package/dist/extensions/mcp/client/oauth/discovery.d.ts +27 -0
  75. package/dist/extensions/mcp/client/oauth/discovery.d.ts.map +1 -0
  76. package/dist/extensions/mcp/client/oauth/discovery.js +153 -0
  77. package/dist/extensions/mcp/client/oauth/discovery.js.map +1 -0
  78. package/dist/extensions/mcp/client/oauth/errors.d.ts +24 -0
  79. package/dist/extensions/mcp/client/oauth/errors.d.ts.map +1 -0
  80. package/dist/extensions/mcp/client/oauth/errors.js +46 -0
  81. package/dist/extensions/mcp/client/oauth/errors.js.map +1 -0
  82. package/dist/extensions/mcp/client/oauth/flow.d.ts +82 -0
  83. package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -0
  84. package/dist/extensions/mcp/client/oauth/flow.js +292 -0
  85. package/dist/extensions/mcp/client/oauth/flow.js.map +1 -0
  86. package/dist/extensions/mcp/client/oauth/index.d.ts +7 -0
  87. package/dist/extensions/mcp/client/oauth/index.d.ts.map +1 -0
  88. package/dist/extensions/mcp/client/oauth/index.js +6 -0
  89. package/dist/extensions/mcp/client/oauth/index.js.map +1 -0
  90. package/dist/extensions/mcp/client/oauth/provider.d.ts +59 -0
  91. package/dist/extensions/mcp/client/oauth/provider.d.ts.map +1 -0
  92. package/dist/extensions/mcp/client/oauth/provider.js +116 -0
  93. package/dist/extensions/mcp/client/oauth/provider.js.map +1 -0
  94. package/dist/extensions/mcp/client/oauth/types.d.ts +77 -0
  95. package/dist/extensions/mcp/client/oauth/types.d.ts.map +1 -0
  96. package/dist/extensions/mcp/client/oauth/types.js +109 -0
  97. package/dist/extensions/mcp/client/oauth/types.js.map +1 -0
  98. package/dist/extensions/mcp/client/protocol/content.d.ts +82 -0
  99. package/dist/extensions/mcp/client/protocol/content.d.ts.map +1 -0
  100. package/dist/extensions/mcp/client/protocol/content.js +41 -0
  101. package/dist/extensions/mcp/client/protocol/content.js.map +1 -0
  102. package/dist/extensions/mcp/client/protocol/jsonrpc.d.ts +59 -0
  103. package/dist/extensions/mcp/client/protocol/jsonrpc.d.ts.map +1 -0
  104. package/dist/extensions/mcp/client/protocol/jsonrpc.js +67 -0
  105. package/dist/extensions/mcp/client/protocol/jsonrpc.js.map +1 -0
  106. package/dist/extensions/mcp/client/protocol/types.d.ts +123 -0
  107. package/dist/extensions/mcp/client/protocol/types.d.ts.map +1 -0
  108. package/dist/extensions/mcp/client/protocol/types.js +7 -0
  109. package/dist/extensions/mcp/client/protocol/types.js.map +1 -0
  110. package/dist/extensions/mcp/client/testing/index.d.ts +2 -0
  111. package/dist/extensions/mcp/client/testing/index.d.ts.map +1 -0
  112. package/dist/extensions/mcp/client/testing/index.js +2 -0
  113. package/dist/extensions/mcp/client/testing/index.js.map +1 -0
  114. package/dist/extensions/mcp/client/transports/in-memory.d.ts +19 -0
  115. package/dist/extensions/mcp/client/transports/in-memory.d.ts.map +1 -0
  116. package/dist/extensions/mcp/client/transports/in-memory.js +50 -0
  117. package/dist/extensions/mcp/client/transports/in-memory.js.map +1 -0
  118. package/dist/extensions/mcp/client/transports/stdio.d.ts +32 -0
  119. package/dist/extensions/mcp/client/transports/stdio.d.ts.map +1 -0
  120. package/dist/extensions/mcp/client/transports/stdio.js +201 -0
  121. package/dist/extensions/mcp/client/transports/stdio.js.map +1 -0
  122. package/dist/extensions/mcp/client/transports/streamable-http.d.ts +96 -0
  123. package/dist/extensions/mcp/client/transports/streamable-http.d.ts.map +1 -0
  124. package/dist/extensions/mcp/client/transports/streamable-http.js +456 -0
  125. package/dist/extensions/mcp/client/transports/streamable-http.js.map +1 -0
  126. package/dist/extensions/mcp/client/transports/transport.d.ts +28 -0
  127. package/dist/extensions/mcp/client/transports/transport.d.ts.map +1 -0
  128. package/dist/extensions/mcp/client/transports/transport.js +38 -0
  129. package/dist/extensions/mcp/client/transports/transport.js.map +1 -0
  130. package/dist/extensions/mcp/config.d.ts +72 -0
  131. package/dist/extensions/mcp/config.d.ts.map +1 -0
  132. package/dist/extensions/mcp/config.js +158 -0
  133. package/dist/extensions/mcp/config.js.map +1 -0
  134. package/dist/extensions/mcp/index.d.ts +76 -0
  135. package/dist/extensions/mcp/index.d.ts.map +1 -0
  136. package/dist/extensions/mcp/index.js +1119 -0
  137. package/dist/extensions/mcp/index.js.map +1 -0
  138. package/dist/extensions/mcp/log.d.ts +16 -0
  139. package/dist/extensions/mcp/log.d.ts.map +1 -0
  140. package/dist/extensions/mcp/log.js +66 -0
  141. package/dist/extensions/mcp/log.js.map +1 -0
  142. package/dist/extensions/mcp/oauth.d.ts +103 -0
  143. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  144. package/dist/extensions/mcp/oauth.js +382 -0
  145. package/dist/extensions/mcp/oauth.js.map +1 -0
  146. package/dist/extensions/mcp/resources.d.ts +43 -0
  147. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  148. package/dist/extensions/mcp/resources.js +262 -0
  149. package/dist/extensions/mcp/resources.js.map +1 -0
  150. package/dist/extensions/mcp/runtime.d.ts +104 -0
  151. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  152. package/dist/extensions/mcp/runtime.js +546 -0
  153. package/dist/extensions/mcp/runtime.js.map +1 -0
  154. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  155. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  156. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  157. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  158. package/dist/extensions/mcp/tools.d.ts +84 -0
  159. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  160. package/dist/extensions/mcp/tools.js +251 -0
  161. package/dist/extensions/mcp/tools.js.map +1 -0
  162. package/dist/extensions/mcp/ui.d.ts +60 -0
  163. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  164. package/dist/extensions/mcp/ui.js +175 -0
  165. package/dist/extensions/mcp/ui.js.map +1 -0
  166. package/dist/index.d.ts +5 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +5 -0
  169. package/dist/index.js.map +1 -1
  170. package/dist/main.d.ts.map +1 -1
  171. package/dist/main.js +7 -0
  172. package/dist/main.js.map +1 -1
  173. package/dist/modes/interactive/interactive-slash-commands.js +23 -8
  174. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  175. package/docs/extensions/api-reference.md +3 -3
  176. package/docs/extensions.md +8 -8
  177. package/docs/mcp-servers.md +153 -79
  178. package/docs/packages/authoring.md +2 -2
  179. package/docs/sdk.md +1 -1
  180. package/docs/sessions.md +1 -1
  181. package/npm-shrinkwrap.json +32 -32
  182. package/package.json +3 -3
  183. package/dist/builtin/mcp/app-bridge.bundle.js +0 -67
  184. package/dist/builtin/mcp/xdg-open +0 -1267
@@ -76,19 +76,19 @@ If an extension is heavier than you need, compare the lighter mechanisms on [Bui
76
76
 
77
77
  Built-in MCP, workflow, subagent, web-access, and Intercom commands are available at startup. Their first use may wait for discovery or connection.
78
78
 
79
- Commands still wait for the resources they need before returning results. These include `/workflow list`, named workflow runs/inputs, failed or durable workflow resume, `/mcp`, direct MCP tool calls, `mcp({ search })`, `mcp({ describe })`, `mcp({ server })`, and explicit reload/setup flows.
79
+ Commands still wait for the resources they need before returning results. These include `/workflow list`, named workflow runs/inputs, failed or durable workflow resume, MCP tool calls, and explicit reload flows.
80
80
 
81
81
  Discovery scope depends on the operation:
82
82
 
83
- - Cold-cache MCP proxy `describe` loads metadata only for prefix-matched or explicitly requested servers. A prefix-directed miss does not start unrelated servers.
84
- - Cold-cache unscoped MCP proxy `search` loads metadata from all uncached lazy servers to search the full configured tool set.
85
- - Env-selected MCP direct tools warm only their selected servers and refresh live tool registration when ready.
83
+ - Enabled MCP servers connect in the background when a session starts. The first prompt waits up to 10 seconds for servers with direct tools.
84
+ - Codemode waits for the MCP namespaces a script names; `searchTools()` and `ALL_TOOLS` require all enabled servers. Tool search and resource tools also wait for discovery.
85
+ - `/mcp` provides server management; `/mcp login`, `/mcp logout`, and `/mcp reconnect` accept an optional server name. Completion lists actions and eligible servers.
86
86
  - Paused live-workflow resume and pickers bypass full workflow discovery.
87
87
  - Autocomplete falls back to current/admin completions when lazy discovery fails.
88
88
 
89
- Failed first-use initialization can be retried. Cancelling one caller does not cancel initialization needed by others. Web-access batches with no successful items report a tool error; partial successes retain their completed items.
89
+ Failed connections can be retried with `/mcp reconnect`; dropped MCP connections reconnect on the next call. Web-access batches with no successful items report a tool error; partial successes retain their completed items.
90
90
 
91
- MCP tool `timeoutMs` is an inactivity limit, not a total deadline: progress resets it. Omit it to use the MCP SDK default.
91
+ MCP `timeout` is an inactivity limit in seconds, not a total deadline: progress resets it. The default is 60 seconds. See [MCP servers](/mcp-servers) for native configuration, exposure, resources, OAuth, and shell commands.
92
92
 
93
93
  ## Interactive callback isolation
94
94
 
@@ -103,7 +103,7 @@ The first is a remote custom UI. While an engine-owned `ctx.ui.custom()` compone
103
103
  - A component mounted with `handlesCtrlC: true` receives the press and keeps its own Skip, Close, or cancel binding. If that same component is still holding input on the next press, that press closes it, so a declared component cannot trap the keyboard either.
104
104
  - A component that did not declare it is closed by the first press, through the ordinary close path: its `ctx.ui.custom()` promise resolves with `undefined`, the child is told the component closed, the editor comes back, and the engine keeps running — including any other component that generation has mounted below or above this one.
105
105
 
106
- Declare `handlesCtrlC` whenever your component's hint row offers `ctrl+c` for anything. This is a migration for existing components: an extension that already bound Ctrl+C keeps that binding only by adding the option. The bundled workflow surfaces and the `/mcp`, `/mcp setup`, and MCP OAuth panels declare it. Native host selectors, dialogs, input forms, session pickers, and unrelated native overlays are unaffected: they keep Ctrl+C as their own cancel.
106
+ Declare `handlesCtrlC` whenever your component's hint row offers `ctrl+c` for anything. This is a migration for existing components: an extension that already bound Ctrl+C keeps that binding only by adding the option. The bundled workflow surfaces declare it. Native host selectors, dialogs, input forms, session pickers, and unrelated native overlays are unaffected: they keep Ctrl+C as their own cancel.
107
107
 
108
108
  ```typescript
109
109
  await ctx.ui.custom<string | undefined>(
@@ -614,7 +614,7 @@ Moved to [Extension API reference](/extensions/api-reference#pi-unregisterprovid
614
614
 
615
615
  ### pi.registerMcpServer(name, config)
616
616
 
617
- Contribute an MCP server computed at runtime from the factory or `session_start`. See [Extension API reference](/extensions/api-reference#pi-registermcpserver-name-config).
617
+ Contribute an MCP server computed at runtime from the factory or `session_start`, using the native `mcpServers` entry shape. Registered servers connect like file-configured servers and appear in `/mcp` with the extension as their source. File-configured servers take precedence; enabled-state and exposure changes to registered servers apply only to the session. Shell `atomic mcp` commands do not load extensions. Provider-token authentication is allowed for extension registrations and global configuration, but not project configuration or package manifests. See [MCP servers](/mcp-servers) and [Extension API reference](/extensions/api-reference#pi-registermcpserver-name-config).
618
618
 
619
619
  ## State Management
620
620
 
@@ -1,158 +1,232 @@
1
1
  ---
2
2
  title: "MCP Servers"
3
- description: "Configure MCP servers, discover tools, and authenticate connections."
3
+ description: "Configure MCP servers, discover tools and resources, and authenticate connections."
4
4
  ---
5
5
 
6
6
  # MCP Servers
7
7
 
8
- Atomic includes MCP support in both npm and binary installations. No separate extension install is needed. Use `/mcp` to inspect servers or `/mcp setup` to configure them.
8
+ Atomic includes [Model Context Protocol](https://modelcontextprotocol.io) support in npm and binary installations. It connects to servers over stdio or streamable HTTP. No separate extension install is needed.
9
9
 
10
10
  ## Quick setup
11
11
 
12
- Run `atomic`, then use `/mcp setup` to create configuration or preview imports from another client. For manual setup, add a local server's `command` and `args`, or a remote server's `url`, to one of the configuration files below. Restart Atomic after editing a file manually.
12
+ Add a local server, check the connection, then start Atomic:
13
13
 
14
- Use `/mcp` to inspect connections and `/mcp tools` to list tools. Servers connect lazily by default; discovery or a tool call can establish the connection. Use `/mcp reconnect my-server` to reconnect a configured server. For a server that requires OAuth, run `/mcp-auth my-server` before unattended work.
15
-
16
- ## Configure a server
14
+ ```sh
15
+ atomic mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem .
16
+ atomic mcp list
17
+ atomic
18
+ ```
17
19
 
18
- Put shared project configuration in `.mcp.json` at your project root:
20
+ For a remote server:
19
21
 
20
- ```json
21
- {
22
- "mcpServers": {
23
- "my-server": {
24
- "command": "path/to/mcp-server",
25
- "args": []
26
- }
27
- }
28
- }
22
+ ```sh
23
+ atomic mcp add docs --url https://example.com/mcp --bearer-token-env-var DOCS_TOKEN
29
24
  ```
30
25
 
31
- Replace `command` and `args` with your server's launch instructions. For a remote HTTP server, use `url` instead:
26
+ Commands write user-level configuration by default. Add `--local` or `-l` to write `.atomic/mcp.json` in the current project instead. Start Atomic and grant project trust before using project servers.
27
+
28
+ Use `/mcp` to inspect connections and manage servers. After changing configuration outside the session, run `/reload` or restart Atomic.
29
+
30
+ ## Configure servers
31
+
32
+ Atomic reads user-level servers from `~/.atomic/agent/mcp.json` and project servers from `.atomic/mcp.json`. Project configuration is read only after [project trust](/security) is granted. A project entry replaces a user-level entry with the same name.
33
+
34
+ Both files use a top-level `mcpServers` object. Keep personal servers and credentials in the user-level file. `ATOMIC_CODING_AGENT_DIR` relocates the Atomic agent directory.
35
+
36
+ Stdio servers use `command`, `args`, `env`, and `cwd`. `command` is one executable, not a shell command string. Relative `cwd` values resolve against the session directory.
37
+
38
+ HTTP servers use `url`, optional `headers`, and optional `oauth`. For bearer authentication:
32
39
 
33
40
  ```json
34
41
  {
35
42
  "mcpServers": {
36
- "my-server": {
37
- "url": "https://example.com/mcp"
43
+ "docs": {
44
+ "url": "https://example.com/mcp",
45
+ "headers": { "Authorization": "Bearer ${DOCS_TOKEN}" },
46
+ "description": "Search and read the product documentation"
38
47
  }
39
48
  }
40
49
  }
41
50
  ```
42
51
 
43
- Remote `url` values support `${VAR}` and `$env:VAR` environment variable interpolation in both project and user configuration. For example, commit this server entry and set `MY_SERVICE_URL` and `MY_SERVICE_TOKEN` in the environment that launches Atomic:
52
+ URLs support `${NAME}` and `$env:NAME` environment references. Atomic resolves them in memory before validating the URL, without rewriting configuration files. `env`, `headers`, and `oauth.clientSecret` support `${NAME}` environment references and whole-value `!command` expressions, for example `"Authorization": "!echo Bearer $(gh auth token)"`. Only use commands from configuration you trust.
44
53
 
45
- ```json
46
- { "url": "${MY_SERVICE_URL}/mcp", "auth": "bearer", "bearerTokenEnv": "MY_SERVICE_TOKEN" }
47
- ```
54
+ Both transports support:
55
+
56
+ - `timeout`: per-request inactivity timeout in seconds, default 60. Progress notifications reset it; it is not a total execution deadline.
57
+ - `enabled: false`: keep a server listed without connecting to it.
58
+ - `exposure` and `toolExposure`: control how tools reach the model.
59
+ - `description`: a short server summary for the system prompt, tool search, and `describeNamespace()`. Without it, Atomic uses the first line of server instructions once connected.
60
+
61
+ Server names may contain letters, digits, `_`, and `-`. Names that differ only in `-` and `_` identify the same namespace. Invalid entries are reported and skipped without preventing other servers from connecting.
62
+
63
+ `type` is optional: `command` selects stdio and `url` selects streamable HTTP. If present, it must be `stdio`, `http`, or `streamable-http`. SSE is not supported; use the server's streamable HTTP endpoint, commonly `/mcp` rather than `/sse`.
48
64
 
49
- With `MY_SERVICE_URL=https://example.com`, the endpoint is `https://example.com/mcp`. Unset variables become empty strings.
65
+ ### Servers from packages and extensions
50
66
 
51
- The resolved endpoint must be a non-empty HTTP(S) URL. If Atomic reports a configuration error before connecting, check the variables in its environment and the URL suffix. Restart Atomic after changing its environment.
67
+ Installed [packages](/packages/authoring#mcp-servers) and extensions can contribute servers with the same configuration shape. File-configured servers take precedence over contributions with the same normalized name. Project packages load only after the project is trusted.
52
68
 
53
- Atomic reads configuration in this order, with later files overriding earlier settings:
69
+ `/mcp` shows each server's source. Enabled-state and exposure changes for file-configured servers are saved without replacing unrelated configuration. Changes to extension-contributed servers apply to the current session.
54
70
 
55
- 1. `~/.config/mcp/mcp.json`, shared user-global configuration.
56
- 2. `~/.atomic/agent/mcp.json`, Atomic user-global overrides.
57
- 3. `.mcp.json`, shared project configuration.
58
- 4. `.atomic/mcp.json`, Atomic project overrides.
71
+ ## Manage servers
59
72
 
60
- The Atomic agent directory can be relocated with `ATOMIC_CODING_AGENT_DIR`. Use `/mcp setup` to inspect detected configuration and preview imports from other hosts before writing changes.
73
+ `/mcp` opens a server manager with connection state, tool count, exposure, and source. Select a server to inspect tools and connection details, sign in or out, reconnect, enable or disable it, or change exposure. Servers that need attention appear first.
61
74
 
62
- Servers connect lazily by default. Adding a server does not require an immediate connection at startup.
75
+ | Command | Action |
76
+ | --- | --- |
77
+ | `/mcp` | Open the manager in the TUI, or show status outside it. |
78
+ | `/mcp login [server]` | Sign in with OAuth. |
79
+ | `/mcp logout [server]` | Remove stored OAuth credentials. |
80
+ | `/mcp reconnect [server]` | Reconnect a server and refresh its tools. |
63
81
 
64
- ### Configuration rules
82
+ Command completion suggests actions and eligible server names. When a server name is omitted, Atomic selects an eligible server when the choice is unambiguous; otherwise it asks you to choose. Session login requires an interactive UI. Shell login opens the browser without starting a session; authenticate before unattended work.
65
83
 
66
- - `command` is one executable and `args` contains its arguments, not one shell command string. Use `cwd` for the server's working directory and `env` for its environment.
67
- - Remote servers use `url` and optional `headers`. Keep credentials out of shared files; use environment variable references or `bearerTokenEnv` for bearer authentication.
68
- - Put personal servers and credentials in user-level configuration. Use project configuration only for servers the project requires, in trusted projects.
69
- - Use `timeoutMs` for the per-request inactivity timeout. Progress notifications reset it.
84
+ Enabled servers connect in the background when a session starts. The first prompt waits up to 10 seconds for servers with `direct` tools. Codemode, tool search, and resource calls wait for the servers they need. A dropped connection reconnects on the next call. Changes announced by a server update the available tools; withdrawn tools become unreachable.
70
85
 
71
- ### Import configuration from another client
86
+ ### Shell commands
72
87
 
73
- Clients that use a top-level `mcpServers` object can share the same server entries. Copy compatible entries into `.mcp.json`, or use `/mcp setup` to preview detected imports before saving. Check executable paths, working directories, and required environment variables on the current machine. Restart Atomic after manual changes, then use `/mcp` to diagnose connection errors.
88
+ Shell commands use file-configured servers and do not load extensions:
89
+
90
+ ```sh
91
+ atomic mcp add <server> [options] -- <command> [args...]
92
+ atomic mcp add <server> [options] --url <url>
93
+ atomic mcp remove <server> [-l]
94
+ atomic mcp list [--json]
95
+ atomic mcp login <server> [--timeout <seconds>]
96
+ atomic mcp logout <server>
97
+ ```
98
+
99
+ `add` replaces an existing entry of the same name. `add` and `remove` accept `--local` (`-l`) for the project file. For stdio, use repeatable `--env KEY=VALUE` and `--cwd`. For HTTP, use repeatable `--header KEY=VALUE`, `--bearer-token-env-var NAME`, and `--oauth-client-id`, `--oauth-client-secret`, `--oauth-callback-port`, or `--oauth-client-name`. Both transports accept `--exposure` and `--description`. Run `atomic mcp --help` for usage.
100
+
101
+ `list` connects to enabled servers and reports state, tools, and errors; it exits with status 1 for invalid configuration or an enabled server that is not connected. `--json` produces a machine-readable report. Login waits up to 300 seconds by default; `--timeout` changes that browser-login budget, not the server request timeout. A running session uses new credentials on its next turn.
102
+
103
+ ## Find and call tools
74
104
 
75
- ## Servers from packages and extensions
105
+ Tools are named `mcp__<server>__<tool>`, with punctuation replaced by `_`. Names that collide after normalization receive deterministic hash suffixes. Use names returned by discovery rather than constructing them yourself.
76
106
 
77
- Installed [packages](/packages/authoring#mcp-servers) and extensions can contribute MCP servers. Contributed servers sit below all four configuration files: a server with the same name in any of them replaces the contributed entry completely. To turn a contributed server off, give its name an entry with only `disabled`:
107
+ ### Control tool exposure
108
+
109
+ | Exposure | Behavior |
110
+ | --- | --- |
111
+ | `codemode`, the default | Callable from codemode scripts, but not declared to the model or listed in the codemode description. Discover with `searchTools()`, `describeTool()`, or `ALL_TOOLS`. |
112
+ | `deferred` | Not declared until `tool_search` loads a matching tool for the next model call. |
113
+ | `direct` | Declared like a built-in tool and also callable from codemode. |
114
+ | `hidden` | Unreachable. |
115
+
116
+ `codemode-deferred` is accepted as an alias for `codemode`. Atomic activates `codemode` for codemode servers and `tool_search` for deferred servers. Set `"autoEnableCodemode": false` beside `mcpServers` to prevent automatic codemode activation. A project value overrides a user-level value.
117
+
118
+ `toolExposure` overrides individual tools. Keys are original server tool names or patterns where `*` matches any characters. Exact names win; among patterns, the first match wins:
78
119
 
79
120
  ```json
80
121
  {
81
122
  "mcpServers": {
82
- "acme-search": { "disabled": true }
123
+ "github": {
124
+ "url": "https://api.githubcopilot.com/mcp/",
125
+ "exposure": "deferred",
126
+ "toolExposure": {
127
+ "search_code": "direct",
128
+ "get_*": "codemode",
129
+ "delete_*": "hidden"
130
+ }
131
+ }
83
132
  }
84
133
  }
85
134
  ```
86
135
 
87
- `"disabled": true` removes any server from the effective configuration, contributed or not.
136
+ Codemode and deferred tools can be reached through either indirect mechanism. Server summaries appear in the `mcp_servers` system prompt section. Scripts can read instructions and tool names with `describeNamespace("mcp__github")`.
88
137
 
89
- `/mcp` shows where each contributed server came from next to its name: `(package npm:@acme/tools)` for a package manifest, `(extension from package npm:@acme/tools)` for a package's extension, or `(extension /path/to/extension.ts)` for a local extension. Connection errors name the same source. Turning on direct tools for a contributed server in `/mcp` copies its definition into `~/.atomic/agent/mcp.json`, where it then overrides the contributed version.
138
+ Codemode receives the complete MCP result, including `content`, `structuredContent`, and `isError`. Text over 20 KB is shortened for the model, with the complete text saved to a temporary file named in the result. Every MCP call passes through Atomic's tool pipeline, including permission hooks.
90
139
 
91
- To choose which servers one package contributes, add `mcpServers` patterns to its [package filter](/packages/reference#package-filtering). Project packages contribute servers only after the project is trusted. Workflow stages see the same contributed servers as the session that starts them.
140
+ ## Use resources
92
141
 
93
- ## Find and call tools
142
+ When a connected server offers resources, Atomic registers:
94
143
 
95
- The `mcp` gateway discovers tools without adding every server's full tool definitions to the session:
144
+ - `list_mcp_resources`, to list resources. Use `server` for one server and `cursor` for its next page; without `server`, it lists resources across servers.
145
+ - `list_mcp_resource_templates`, to list URI templates.
146
+ - `read_mcp_resource`, to read by `server` and `uri`. Text and images reach the model directly; other binary content is saved to a temporary file.
96
147
 
97
- ```js
98
- mcp({ server: "my-server" })
99
- mcp({ search: "search" })
100
- mcp({ describe: "my_server_search" })
101
- mcp({ tool: "my_server_search", args: '{"query":"example"}' })
102
- ```
148
+ These tools reach enabled, non-hidden resource servers. Their exposure is the widest exposure among those servers. Resource links in tool results identify the server and `read_mcp_resource`.
103
149
 
104
- Use the tool names returned by discovery. `args` is a JSON string, not an object. Search may connect configured servers when their metadata has not yet been cached.
150
+ MCP Apps resources (`ui://` URIs or `text/html;profile=mcp-app`) are omitted because Atomic does not render them.
105
151
 
106
- Tool names replace punctuation with `_` and receive a leading `_` if they start with a digit. Names longer than 64 characters and tools whose names collide after this conversion receive a deterministic hash suffix. Both gateway discovery and direct tools use these names; call the returned name rather than constructing one yourself. Server names that differ only in `-` and `_` are rejected within one configuration file. A higher-precedence file replaces a contributed or lower-precedence server with the same normalized name.
152
+ ## Authentication
107
153
 
108
- To expose a server's tools directly in the agent's tool list, add `"directTools": true` to that server's configuration. To expose only selected tools, set `directTools` to an array of the original MCP tool names. The default is gateway-only access.
154
+ For a remote OAuth server, configure its URL and run `/mcp login my-server`, or select **Sign in** in `/mcp`. Atomic opens the authorization page and displays a clickable URL. If the browser runs on another machine, paste the complete URL it was redirected to into the sign-in prompt. Treat authorization and redirect URLs as sensitive.
109
155
 
110
- In a headless SDK session, cached direct tools are available at startup, but discovery does not connect uncached lazy servers. Call the `mcp` gateway when you need them. Set the server's `lifecycle` to `"eager"` or `"keep-alive"` if it must connect during startup.
156
+ Atomic registers OAuth clients as `atomic`, stores credentials in `~/.atomic/agent/mcp-auth.json`, and refreshes tokens when they expire or are rejected. A successful sign-in reconnects the server. If additional scope is required, sign in again. `/mcp logout my-server` or `atomic mcp logout my-server` deletes stored credentials. Old adapter credential files are not imported; sign in through the native client.
111
157
 
112
- ## Authentication
158
+ OAuth applies to HTTP servers without an `Authorization` header or provider-token configuration. For a pre-registered client:
159
+
160
+ ```json
161
+ {
162
+ "mcpServers": {
163
+ "example": {
164
+ "url": "https://mcp.example.com/mcp",
165
+ "oauth": {
166
+ "clientId": "my-client",
167
+ "clientSecret": "${EXAMPLE_SECRET}",
168
+ "callbackPort": 8765,
169
+ "scope": "read write"
170
+ }
171
+ }
172
+ }
173
+ }
174
+ ```
113
175
 
114
- For an OAuth server, run `/mcp-auth my-server` in an interactive session. You can also select the server in `/mcp` and press Enter or `Ctrl+A`. Run `/mcp logout my-server` to remove stored OAuth credentials and disconnect.
176
+ `clientSecret` is optional. `callbackPort` uses `http://127.0.0.1:<port>/callback`. For another registered redirect URI, set `callbackUrl`; it must use HTTP on `localhost`, `127.0.0.1`, or `[::1]`. Atomic sends it as written. If it has no port, Atomic adds `callbackPort` or a free port. The URI must match the client's registration.
115
177
 
116
- While sign-in waits for browser approval, Atomic displays the authorization URL as a terminal hyperlink with a Cmd/Ctrl+click hint. You can use it if the browser did not open automatically.
178
+ Use `oauth.clientName` when a server requires a known registration name. Sign out before signing in again to register with a changed name. Use `oauth.scope` for servers that do not advertise their required scopes; later scope requests are added to it.
117
179
 
118
- Automatic OAuth is opt-in through `settings.autoAuth`. Browser-based authorization requires an interactive session; authenticate before running unattended work.
180
+ ### Override OAuth authorization server discovery
119
181
 
120
- Atomic registers OAuth clients as `atomic`. If a server requires a known client name, configure it with `oauth.clientName`:
182
+ If a server advertises the wrong authorization server or none, set `oauth.authServerMetadataUrl` to a trusted RFC 8414 or OpenID Connect metadata document:
121
183
 
122
184
  ```json
123
- { "mcpServers": { "figma": { "url": "https://mcp.figma.com/mcp", "oauth": { "clientName": "Claude Code" } } } }
185
+ {
186
+ "mcpServers": {
187
+ "example": {
188
+ "url": "https://mcp.example.com/mcp",
189
+ "oauth": { "authServerMetadataUrl": "https://example.okta.com/.well-known/openid-configuration" }
190
+ }
191
+ }
192
+ }
124
193
  ```
125
194
 
126
- The name is sent only during dynamic client registration. Run `/mcp logout figma` before signing in again to register under a changed name.
195
+ Atomic uses the document instead of authorization server discovery and trusts its issuer as configured. Point it only at a document you trust. The URL must use HTTPS, except for HTTP on `localhost`, `127.0.0.1`, or `[::1]`.
196
+
197
+ Atomic rejects authorization responses whose `iss` names another issuer, before exchanging the code. If the server promises the RFC 9207 issuer parameter, the response must include it. Empty or null optional token and registration fields count as absent. An empty refresh token does not replace a previously stored one, and `expires_in: null` does not immediately expire the access token.
127
198
 
128
199
  ### Authenticate with a provider login
129
200
 
130
- An HTTP server can use the token of a provider you have signed in to instead of MCP OAuth:
201
+ An HTTP server can use your current provider login token instead of MCP OAuth:
131
202
 
132
203
  ```json
133
204
  { "mcpServers": { "radius": { "url": "https://radius.example/mcp", "auth": { "provider": "radius" } } } }
134
205
  ```
135
206
 
136
- Atomic reads the provider's current token for each request, so refreshes apply. MCP does not copy or store the token. If the server rejects it or the provider has no token, the connection fails with a message to run `/login <provider>`.
207
+ Atomic reads the current token for every request and does not copy it into MCP credential storage. If the token is missing or rejected, run `/login <provider>` and retry the MCP call.
208
+
209
+ Because the credential goes to the configured server, provider-token authentication has these limits:
210
+
211
+ - It is accepted only from global configuration and extension registrations, not project configuration or package manifests.
212
+ - The URL must use HTTPS, except for HTTP on `localhost`, `127.0.0.1`, or `[::1]`.
213
+ - Tokens are sent only to the server's origin. Only same-origin `307` and `308` redirects are followed.
137
214
 
138
- After signing in with `/login <provider>`, retry the MCP gateway call. Atomic reconnects with the current token, including for servers with cached tools; you do not need to run `/mcp reconnect`.
215
+ ## Native configuration only
139
216
 
140
- Because the token goes to the server's `url`, `auth.provider` has limits:
217
+ The old adapter has been replaced by the native client. Only `~/.atomic/agent/mcp.json` and trusted `.atomic/mcp.json` files are read; shared configuration files and client imports are not supported. Use the native fields documented above. Old adapter fields are not translated, and old OAuth credential files are not imported.
141
218
 
142
- - It is accepted in the global `mcp.json` files and in servers registered by extensions. It is ignored, with a warning, in project `.mcp.json` and `.atomic/mcp.json`, in project-relative imports such as `.vscode/mcp.json`, and in package manifest servers.
143
- - The URL must use `https`, or `http` on `localhost`, `127.0.0.1`, or `[::1]`.
144
- - Atomic sends the token only to the server's origin. It follows `307` and `308` redirects within that origin and refuses every other redirect.
219
+ Tools use `mcp__<server>__<tool>` names and default to `codemode` exposure. The old gateway tool, configurable prefixes, lazy/idle lifecycle settings, metadata cache, SSE transport, MCP Apps rendering, and setup command are not available. All enabled servers connect in the background.
145
220
 
146
221
  ## Troubleshooting
147
222
 
148
- - Run `/mcp` to check server status and `/mcp tools` to list available tools.
149
- - After editing configuration manually, restart Atomic to load it. Use `/mcp reconnect my-server` to reconnect a configured server and refresh its tools.
150
- - If Atomic cannot open the authorization browser, use the complete URL it displays for manual login. **Treat it as sensitive**: it includes all paths, parameters, and any credentials. Login instructions are not redacted; transport and RPC error diagnostics are.
151
- Browser-launch failure cancels the pending attempt, so its callback cannot complete authentication. Check your default browser and retry `/mcp-auth my-server`.
152
- - If a local server cannot start, check its executable, arguments, working directory, and required environment variables. Server configuration supports `cwd` and `env`.
153
- - If authorization fails, run `/mcp-auth my-server` again. Check the remote server's URL and authentication requirements.
154
- - For slow tools, a server's `timeoutMs` controls the inactivity timeout. Progress notifications reset it; it is not a total execution deadline.
223
+ - Run `/mcp` to inspect connection errors, server tools, and the tail of a failed stdio server's stderr.
224
+ - After editing configuration, run `/reload` or restart Atomic. Use `/mcp reconnect my-server` to retry a connection and refresh tools.
225
+ - For a missing tool, check server and per-tool exposure. `hidden` tools cannot be called; codemode or deferred tools need an active discovery tool.
226
+ - For OAuth redirect failures, check `callbackPort` and `callbackUrl` against the registered URI. Over SSH, paste the complete redirected URL into the waiting sign-in prompt.
227
+ - For an issuer mismatch, check the authorization server's metadata and callback configuration before retrying. Do not disable issuer checks to accept an unexpected response.
228
+ - For slow calls, adjust `timeout` in seconds. Progress resets this inactivity timer.
155
229
 
156
230
  ## Local documentation
157
231
 
158
- This guide is available at `docs/mcp-servers.md` under Atomic's installation root in both npm and binary installations. The session's documentation instructions provide the absolute docs directory. Read this guide there rather than looking inside the bundled extension directory.
232
+ This guide is available at `docs/mcp-servers.md` under Atomic's installation root in npm and binary installations. The session's documentation instructions provide the absolute docs directory.
@@ -41,14 +41,14 @@ A package can contribute [MCP servers](/mcp-servers) with `mcpServers`. Point it
41
41
  {
42
42
  "atomic": {
43
43
  "mcpServers": {
44
- "acme-search": { "url": "https://mcp.acme.dev", "auth": "bearer", "bearerTokenEnv": "ACME_TOKEN" },
44
+ "acme-search": { "url": "https://mcp.acme.dev", "headers": { "Authorization": "Bearer ${ACME_TOKEN}" } },
45
45
  "acme-local": { "command": "node", "args": ["./dist/server.js"], "cwd": "." }
46
46
  }
47
47
  }
48
48
  }
49
49
  ```
50
50
 
51
- Entries use the same schema as `mcp.json`, including `${VAR}` interpolation, `lifecycle`, and `timeoutMs`. A relative `cwd` is resolved against the package root, so `"cwd": "."` lets a stdio server run files shipped in the package. MCP servers are only read from the manifest, never from a convention directory.
51
+ Entries use the same schema as `mcp.json`, including URL environment-variable interpolation, tool `exposure`, per-tool `toolExposure`, and request `timeout` in seconds. A relative `cwd` is resolved against the package root, so `"cwd": "."` lets a stdio server run files shipped in the package. MCP servers are only read from the manifest, never from a convention directory. Package manifests cannot select provider login credentials with `auth.provider`.
52
52
 
53
53
  Contributed servers have the lowest precedence: users can replace or disable one by name in their own MCP configuration, and filter them with `mcpServers` patterns in settings. Project packages contribute servers only in trusted projects. For a server whose configuration is computed at runtime, call [`pi.registerMcpServer()`](/extensions/api-reference#pi-registermcpserver-name-config) from an extension.
54
54
 
package/docs/sdk.md CHANGED
@@ -244,7 +244,7 @@ interface SessionWorkflows {
244
244
 
245
245
  `listRuns()` returns the same per-run data as `workflow status`: id, workflow name, status, active stages, and unanswered prompts (`awaitingInput`). Run IDs accept the full UUID or a unique 8-character prefix. `getRun()`, `getStages()`, `pause()` and `quit()` resolve a prefix against the runs this session holds and reject it at once when none matches, so pass the full UUID for a run recorded by an earlier process. `pause`, `quit` and `resume` resolve with the tool's acknowledged outcome: `action`, `runId` (`--all` for a batch), a `status` of `ok`, `running`, `paused`, `partial`, `noop` or `cancelled`, and a human-readable `message`. A `noop` means the request was understood and found nothing to change, such as pausing a run that already ended. A `partial` outcome means part of the request took effect. For `pause({ all: true })` and `quit({ all: true })`, `partial` means this call stopped at least one run and others are still active: `failedRuns` lists each run that is still active with its `runId`, a `reason` (for example `pause_failed` or `no_active_stages`) and a `message`, so check `outcome.status === "partial"` before treating a batch stop as complete. If active runs could not be stopped and this call stopped none, the call rejects with `WorkflowRunControlError` (`WORKFLOW_RUN_CONTROL_FAILED`) whose `failedRuns` carries the same list, even when other runs were already paused. Runs that are already paused or already ended are not failures, and a batch with no active run left to stop resolves as a `noop`. Call `getRun()` before retrying.
246
246
 
247
- Pausing a run doesn't park a stage that is waiting on a prompt. Such a run reports `paused` and counts as already paused, because nothing in it advances on its own. If your host then answers that prompt, the stage can continue its turn before you call `resume`. To keep a paused run fully stopped, hold prompt answers until you resume it.
247
+ Pausing a run doesn't park a stage that is waiting on a prompt, including an `ask_user_question` delivered through `HostInput.questionnaire`. If no other work is active, `pause(runId)` and `pause({ all: true })` mark the run `paused` without cancelling its question. Questions not yet shown wait until the run resumes. A later pause counts it as already paused. If your host then answers an already-open prompt, the stage can continue its turn before you call `resume`. To keep a paused run fully stopped, hold prompt answers until you resume it.
248
248
 
249
249
  Requests that cannot be carried out reject with a subclass of `WorkflowRunControlError`. Branch on `code` or use `instanceof`:
250
250
 
package/docs/sessions.md CHANGED
@@ -21,7 +21,7 @@ atomic --session <path|id> # Use a file, exact ID, or unique 8-hex UUID prefix
21
21
  atomic --fork <path|id> # Fork a file, exact ID, or unique 8-hex UUID prefix
22
22
  ```
23
23
 
24
- Use `/session` in interactive mode to see the current session file, session ID, message count, tokens, and cost.
24
+ Use `/session` in interactive mode to see the current session file, session ID, message count, tokens, and cost. You can use it while a run is active; its totals update after each completed message, not each streaming text chunk. Detailed cost and cache-waste breakdowns are shown after the run finishes only when the available session history matches those totals; otherwise, only the total cost is shown.
25
25
 
26
26
  For UUID-backed sessions, `--session` and `--fork` accept either the full UUID or exactly eight hexadecimal prefix characters. A prefix must be unique within the current project (or, if no local session matches, across the global session store); collisions list the matching UUIDs and require the full value. Exact custom session IDs keep their existing priority. `--session-id` remains an exact project-local ID used to open or create a session, not a prefix selector.
27
27
 
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.25-alpha.3",
3
+ "version": "0.9.25-alpha.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bastani/atomic",
9
- "version": "0.9.25-alpha.3",
9
+ "version": "0.9.25-alpha.5",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@bastani/atomic-natives": "0.9.25-alpha.3",
13
- "@bastani/pi-ai": "0.9.25-alpha.3",
12
+ "@bastani/atomic-natives": "0.9.25-alpha.5",
13
+ "@bastani/pi-ai": "0.9.25-alpha.5",
14
14
  "@dbos-inc/dbos-sdk": "4.25.14",
15
15
  "@earendil-works/pi-agent-core": "0.99.2",
16
16
  "@earendil-works/pi-client": "0.99.2",
@@ -431,18 +431,18 @@
431
431
  }
432
432
  },
433
433
  "node_modules/@bastani/atomic-natives": {
434
- "version": "0.9.25-alpha.3",
435
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.25-alpha.3.tgz",
434
+ "version": "0.9.25-alpha.5",
435
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.25-alpha.5.tgz",
436
436
  "license": "MIT",
437
437
  "optionalDependencies": {
438
- "@bastani/atomic-natives-darwin-arm64": "0.9.25-alpha.3",
439
- "@bastani/atomic-natives-darwin-x64": "0.9.25-alpha.3",
440
- "@bastani/atomic-natives-linux-arm64-gnu": "0.9.25-alpha.3",
441
- "@bastani/atomic-natives-linux-arm64-musl": "0.9.25-alpha.3",
442
- "@bastani/atomic-natives-linux-x64-gnu": "0.9.25-alpha.3",
443
- "@bastani/atomic-natives-linux-x64-musl": "0.9.25-alpha.3",
444
- "@bastani/atomic-natives-win32-arm64-msvc": "0.9.25-alpha.3",
445
- "@bastani/atomic-natives-win32-x64-msvc": "0.9.25-alpha.3"
438
+ "@bastani/atomic-natives-darwin-arm64": "0.9.25-alpha.5",
439
+ "@bastani/atomic-natives-darwin-x64": "0.9.25-alpha.5",
440
+ "@bastani/atomic-natives-linux-arm64-gnu": "0.9.25-alpha.5",
441
+ "@bastani/atomic-natives-linux-arm64-musl": "0.9.25-alpha.5",
442
+ "@bastani/atomic-natives-linux-x64-gnu": "0.9.25-alpha.5",
443
+ "@bastani/atomic-natives-linux-x64-musl": "0.9.25-alpha.5",
444
+ "@bastani/atomic-natives-win32-arm64-msvc": "0.9.25-alpha.5",
445
+ "@bastani/atomic-natives-win32-x64-msvc": "0.9.25-alpha.5"
446
446
  },
447
447
  "engines": {
448
448
  "bun": ">=1.4.2",
@@ -450,8 +450,8 @@
450
450
  }
451
451
  },
452
452
  "node_modules/@bastani/atomic-natives-darwin-arm64": {
453
- "version": "0.9.25-alpha.3",
454
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.25-alpha.3.tgz",
453
+ "version": "0.9.25-alpha.5",
454
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.25-alpha.5.tgz",
455
455
  "license": "MIT",
456
456
  "os": [
457
457
  "darwin"
@@ -462,8 +462,8 @@
462
462
  "optional": true
463
463
  },
464
464
  "node_modules/@bastani/atomic-natives-darwin-x64": {
465
- "version": "0.9.25-alpha.3",
466
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.25-alpha.3.tgz",
465
+ "version": "0.9.25-alpha.5",
466
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.25-alpha.5.tgz",
467
467
  "license": "MIT",
468
468
  "os": [
469
469
  "darwin"
@@ -474,8 +474,8 @@
474
474
  "optional": true
475
475
  },
476
476
  "node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
477
- "version": "0.9.25-alpha.3",
478
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.25-alpha.3.tgz",
477
+ "version": "0.9.25-alpha.5",
478
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.25-alpha.5.tgz",
479
479
  "license": "MIT",
480
480
  "os": [
481
481
  "linux"
@@ -489,8 +489,8 @@
489
489
  "optional": true
490
490
  },
491
491
  "node_modules/@bastani/atomic-natives-linux-arm64-musl": {
492
- "version": "0.9.25-alpha.3",
493
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.25-alpha.3.tgz",
492
+ "version": "0.9.25-alpha.5",
493
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.25-alpha.5.tgz",
494
494
  "license": "MIT",
495
495
  "os": [
496
496
  "linux"
@@ -504,8 +504,8 @@
504
504
  "optional": true
505
505
  },
506
506
  "node_modules/@bastani/atomic-natives-linux-x64-gnu": {
507
- "version": "0.9.25-alpha.3",
508
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.25-alpha.3.tgz",
507
+ "version": "0.9.25-alpha.5",
508
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.25-alpha.5.tgz",
509
509
  "license": "MIT",
510
510
  "os": [
511
511
  "linux"
@@ -519,8 +519,8 @@
519
519
  "optional": true
520
520
  },
521
521
  "node_modules/@bastani/atomic-natives-linux-x64-musl": {
522
- "version": "0.9.25-alpha.3",
523
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.25-alpha.3.tgz",
522
+ "version": "0.9.25-alpha.5",
523
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.25-alpha.5.tgz",
524
524
  "license": "MIT",
525
525
  "os": [
526
526
  "linux"
@@ -534,8 +534,8 @@
534
534
  "optional": true
535
535
  },
536
536
  "node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
537
- "version": "0.9.25-alpha.3",
538
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.25-alpha.3.tgz",
537
+ "version": "0.9.25-alpha.5",
538
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.25-alpha.5.tgz",
539
539
  "license": "MIT",
540
540
  "os": [
541
541
  "win32"
@@ -546,8 +546,8 @@
546
546
  "optional": true
547
547
  },
548
548
  "node_modules/@bastani/atomic-natives-win32-x64-msvc": {
549
- "version": "0.9.25-alpha.3",
550
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.25-alpha.3.tgz",
549
+ "version": "0.9.25-alpha.5",
550
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.25-alpha.5.tgz",
551
551
  "license": "MIT",
552
552
  "os": [
553
553
  "win32"
@@ -558,8 +558,8 @@
558
558
  "optional": true
559
559
  },
560
560
  "node_modules/@bastani/pi-ai": {
561
- "version": "0.9.25-alpha.3",
562
- "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.25-alpha.3.tgz",
561
+ "version": "0.9.25-alpha.5",
562
+ "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.25-alpha.5.tgz",
563
563
  "license": "MIT",
564
564
  "dependencies": {
565
565
  "@anthropic-ai/sdk": "0.124.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.25-alpha.3",
3
+ "version": "0.9.25-alpha.5",
4
4
  "description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "atomicConfig": {
@@ -80,8 +80,8 @@
80
80
  "prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
81
81
  },
82
82
  "dependencies": {
83
- "@bastani/atomic-natives": "0.9.25-alpha.3",
84
- "@bastani/pi-ai": "0.9.25-alpha.3",
83
+ "@bastani/atomic-natives": "0.9.25-alpha.5",
84
+ "@bastani/pi-ai": "0.9.25-alpha.5",
85
85
  "@dbos-inc/dbos-sdk": "4.25.14",
86
86
  "@earendil-works/pi-agent-core": "0.99.2",
87
87
  "@earendil-works/pi-client": "0.99.2",