@bastani/atomic 0.9.19-alpha.5 → 0.9.19-alpha.7
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/CHANGELOG.md +32 -0
- package/README.md +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/broker/client.ts +19 -1
- package/dist/builtin/intercom/index.bundle.mjs +8 -1
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/README.md +3 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +7 -7
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +3 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +2 -1
- package/dist/builtin/web-access/CHANGELOG.md +13 -0
- package/dist/builtin/web-access/README.md +31 -24
- package/dist/builtin/web-access/index.bundle.mjs +16121 -80
- package/dist/builtin/web-access/package.json +2 -1
- package/dist/builtin/workflows/CHANGELOG.md +15 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/builtin/adversarial-verification.js +2 -2
- package/dist/builtin/workflows/builtin/{chunk-vhmnzdj9.js → chunk-1jth021m.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-p8jjwfg6.js → chunk-2377r57g.js} +4 -2
- package/dist/builtin/workflows/builtin/{chunk-hbnwv56f.js → chunk-31j2gs7h.js} +2 -2
- package/dist/builtin/workflows/builtin/{chunk-n8zysf1t.js → chunk-ngkqkzej.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-1nbq96fh.js → chunk-nkrafh9s.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-1kx4aggw.js → chunk-wf741bv3.js} +2 -2
- package/dist/builtin/workflows/builtin/{chunk-t6x2d78s.js → chunk-z29qbehr.js} +1 -1
- package/dist/builtin/workflows/builtin/generate-and-filter.js +2 -2
- package/dist/builtin/workflows/builtin/goal.js +3 -3
- package/dist/builtin/workflows/builtin/index.js +7 -7
- package/dist/builtin/workflows/builtin/ralph.js +3 -3
- package/dist/builtin/workflows/builtin/tournament.js +2 -2
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +339 -31
- package/dist/builtin/workflows/src/index.js +67 -19
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -0
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +10 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +3 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +91 -12
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-coordinator.d.ts +255 -0
- package/dist/core/tools/file-mutation-coordinator.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-coordinator.js +300 -0
- package/dist/core/tools/file-mutation-coordinator.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +14 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +15 -3
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/hashline.d.ts +9 -0
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +12 -1
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/index.d.ts +9 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +67 -12
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/non-minting-snapshot-store.d.ts +49 -0
- package/dist/core/tools/non-minting-snapshot-store.d.ts.map +1 -0
- package/dist/core/tools/non-minting-snapshot-store.js +64 -0
- package/dist/core/tools/non-minting-snapshot-store.js.map +1 -0
- package/dist/core/tools/powershell.d.ts +2 -2
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +2 -5
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/read-document-extract.js.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/write.d.ts +30 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +97 -8
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/task-live-transcript.d.ts +1 -1
- package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/task-live-transcript.js +19 -11
- package/dist/modes/interactive/components/task-live-transcript.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +3 -1
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +28 -4
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +3 -0
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.d.ts +2 -2
- package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts +3 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-diagnostic-view.js +11 -0
- package/dist/modes/interactive-engine/engine-diagnostic-view.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +2 -1
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts +2 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +23 -1
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +20 -3
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/utils/markit.d.ts +2 -0
- package/dist/utils/markit.d.ts.map +1 -1
- package/dist/utils/markit.js +65 -5
- package/dist/utils/markit.js.map +1 -1
- package/docs/background-tasks.md +15 -11
- package/docs/build.md +51 -0
- package/docs/changelog.mdx +8 -8
- package/docs/compaction/reference.md +267 -0
- package/docs/compaction.md +36 -219
- package/docs/computer-use.md +35 -0
- package/docs/containerization.md +9 -5
- package/docs/custom-provider/api-reference.md +145 -0
- package/docs/custom-provider/oauth.md +131 -0
- package/docs/custom-provider/override.md +34 -0
- package/docs/custom-provider/registration.md +163 -0
- package/docs/custom-provider/streaming.md +214 -0
- package/docs/custom-provider.md +43 -607
- package/docs/development.md +87 -0
- package/docs/docs.json +199 -76
- package/docs/environment-variables.md +1 -1
- package/docs/extensions/api-reference.md +1001 -0
- package/docs/extensions/authoring.md +676 -0
- package/docs/extensions/events.md +793 -0
- package/docs/extensions/examples.md +94 -0
- package/docs/extensions/ui.md +470 -0
- package/docs/extensions.md +270 -2768
- package/docs/getting-started/authentication.md +55 -0
- package/docs/getting-started/first-session.md +172 -0
- package/docs/getting-started/installation.md +154 -0
- package/docs/getting-started/project-instructions.md +43 -0
- package/docs/guides/configuration.md +65 -0
- package/docs/guides/intercom.md +24 -0
- package/docs/guides/non-interactive.md +33 -0
- package/docs/guides/subagents.md +24 -0
- package/docs/guides/workflows.md +27 -0
- package/docs/guides.md +41 -0
- package/docs/index.md +13 -45
- package/docs/intercom/operations.md +178 -0
- package/docs/intercom/reference.md +146 -0
- package/docs/intercom.md +54 -259
- package/docs/json.md +17 -0
- package/docs/llama-cpp.md +5 -0
- package/docs/models/artificial-analysis-index.md +89 -0
- package/docs/models/evals.md +2 -2
- package/docs/models/model-selection.md +3 -3
- package/docs/models/pareto-efficiency.md +2 -2
- package/docs/models/reference.md +601 -0
- package/docs/models.md +45 -550
- package/docs/packages/authoring.md +88 -0
- package/docs/packages/reference.md +43 -0
- package/docs/packages.md +28 -107
- package/docs/programmatic.md +29 -0
- package/docs/prompt-templates.md +11 -0
- package/docs/providers/reference.md +23 -0
- package/docs/providers.md +10 -15
- package/docs/quickstart.md +44 -238
- package/docs/reference/cli.md +252 -0
- package/docs/reference.md +52 -0
- package/docs/rpc/examples.md +64 -0
- package/docs/rpc/extension-ui.md +198 -0
- package/docs/rpc/protocol.md +1341 -0
- package/docs/rpc.md +109 -1346
- package/docs/sdk/reference.md +1090 -0
- package/docs/sdk.md +56 -1002
- package/docs/session-format.md +2 -0
- package/docs/sessions.md +6 -10
- package/docs/settings.md +6 -45
- package/docs/skills/authoring.md +95 -0
- package/docs/skills/reference.md +60 -0
- package/docs/skills.md +20 -122
- package/docs/subagents/authoring.md +37 -0
- package/docs/subagents/reference.md +60 -0
- package/docs/subagents.md +42 -96
- package/docs/terminal-setup.md +1 -1
- package/docs/themes/reference.md +176 -0
- package/docs/themes.md +21 -135
- package/docs/tmux.md +5 -0
- package/docs/tools/edit.md +5 -0
- package/docs/tools.md +31 -0
- package/docs/tui/reference.md +343 -0
- package/docs/tui.md +23 -286
- package/docs/usage.md +26 -209
- package/docs/web-access.md +40 -0
- package/docs/windows.md +2 -1
- package/docs/workflows/api-reference.md +11 -4
- package/docs/workflows/authoring.md +4 -2
- package/docs/workflows/builtins.md +2 -2
- package/docs/workflows/operations.md +11 -7
- package/docs/workflows/reliable-design.md +21 -3
- package/docs/workflows/verification.md +8 -0
- package/examples/extensions/gondolin/index.ts +116 -148
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/ssh.ts +56 -34
- package/npm-shrinkwrap.json +33 -33
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.19-alpha.7] - 2026-09-12
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Reduced CPU work in long `/tasks` live transcripts on Windows by reusing unchanged message rendering during streaming, without dropping history or delaying live updates.
|
|
10
|
+
|
|
11
|
+
## [0.9.19-alpha.6] - 2026-09-11
|
|
12
|
+
|
|
13
|
+
### Breaking Changes
|
|
14
|
+
|
|
15
|
+
- `write` no longer silently overwrites a file this session has never seen. Replacing an existing file now requires the session to have already observed exactly the content being replaced, checked under the same per-file mutation queue as the write. A session with no version of its own is refused with `no_prior_observation`; one whose recorded version no longer matches the file on disk is refused with `changed_since_observation` and told which line diverged, what it assumed was there, and what the file holds instead. Both carry the same `FILE_MUTATION_CONFLICT` code and requester identity as an `edit` conflict. Creating a new file, and overwriting one this session read, wrote, or edited, are unaffected ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
16
|
+
- `WriteOperations` now requires a `readFile` member, and `writeFile` receives an optional third `WriteFileOptions` argument. `write` reads before every write to refuse generated files, to check that the session has observed what it is replacing, and to decide between creating and overwriting; routing that read through `WriteOperations` is what makes those checks see the filesystem a custom or remote implementation actually writes to, rather than local disk. `readFile` must report absence as `undefined` and reject for anything else, since a path that exists but cannot be read is not a free path. Existing `writeFile` implementations continue to typecheck and may ignore the new options argument, losing only exclusive-create semantics ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
17
|
+
- Bundled `code_search` now requires `repoName` in `owner/repo` format alongside `query` and uses DeepWiki MCP for public-repository questions instead of Exa. Add the repository to existing calls. There is no Exa fallback; `web_search` is unchanged, and `maxTokens` remains a best-effort local output bound.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Shell guidance now favors the owner's normal observation budget over routine one-second yields and repeated short polls. Bash and PowerShell share this guidance; explicit budgets, background execution, and execution timeouts are unchanged.
|
|
22
|
+
- Bundled delegation guidance now favors keeping immediately blocking work local and overlapping independent tasks, while preserving specialist and explicitly requested delegation.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- Fixed continuously noisy engines growing interactive diagnostic history without limit. Recent diagnostics retain their order and duplicates without removing normal chat or status messages.
|
|
27
|
+
- Fixed damaged-PDF reads corrupting the fullscreen terminal with MuPDF diagnostics. Bounded diagnostics now appear in the TUI when interactive and use `console.log` otherwise; conversion failures also retain their diagnostic suffix ([#2964](https://github.com/bastani-inc/atomic/issues/2964)).
|
|
28
|
+
- Routed RPC engine stderr through bounded, deferred status messages instead of synchronous filesystem writes or raw terminal output, preserving Unicode characters split across output chunks. Interactive MuPDF and engine diagnostic display neutralizes terminal controls without changing stored diagnostic text. RPC stdout remains JSON-only, and child diagnostics reach the interactive host without changing engine health ([#2964](https://github.com/bastani-inc/atomic/issues/2964)).
|
|
29
|
+
- A rejected `edit` no longer hands back a snapshot tag that authorizes the same edit on retry. Building the rejection recorded the file's current content in the session's snapshot store and reported that tag in the error, so re-sending the identical edit with the reported tag was accepted even though the model had never read the changed file, silently overwriting whatever the other writer had just put there. The rejection now reports the tag without recording it, so the retry is rejected again and the model must re-read first. Drift recovery for tags the session did record is unchanged ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
30
|
+
- An `edit` rejected because the file changed after the patch was prepared now reports which line diverged, what the edit assumed was there, what the file holds instead, and how large the target is, instead of a bare "content changed before write". A file deleted in that same window is reported as a missing target rather than a raw filesystem error, and no longer tells the model to re-read a file that is gone. A path that survives but stops being readable, because it was replaced by a directory, locked, or made inaccessible, is now reported as an unreadable target carrying the filesystem error code, instead of escaping as an untyped error. Rejections carry a stable `FILE_MUTATION_CONFLICT` code and the identity of the session, workflow stage, or subagent whose call was refused, so parallel workers editing one file are distinguishable ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
31
|
+
- A `write` or hashline `edit` cancelled after its bytes had already reached disk no longer left the change unrecorded, which made the session's own file look like another agent's work on the next overwrite ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
32
|
+
- `write` creating a file now claims the path exclusively (`O_EXCL`). A file that appears between `write` observing an absent path and its own write landing is reported as `target_exists`, describing what is there now, instead of being silently truncated ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
33
|
+
- Standalone write tools retain their implicit observation store across `local://` writes, so overwriting a file the same tool just created no longer incorrectly fails with `no_prior_observation`.
|
|
34
|
+
- Preserved typed `edit` conflicts when parent-directory permissions change after patch preparation. The rejection retains the original target identity and filesystem error code instead of escaping as a raw permission error ([#2329](https://github.com/bastani-inc/atomic/issues/2329)).
|
|
35
|
+
- Fixed the Gondolin example failing to load after removal of the legacy grep tool API. It now registers only its supported file and shell overrides; the search tool remains on the host, and guest-only content searches use the routed shell ([#2482](https://github.com/bastani-inc/atomic/pull/2482)).
|
|
36
|
+
|
|
5
37
|
## [0.9.19-alpha.5] - 2026-09-11
|
|
6
38
|
|
|
7
39
|
### Changed
|
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ atomic
|
|
|
79
79
|
|
|
80
80
|
Then just talk to Atomic. By default, Atomic gives the model six coding tools: `read`, `write`, `edit`, `bash`, `find`, and `search`. On native Windows, Atomic also enables `powershell` when `pwsh.exe` or `powershell.exe` is available. The model uses these to fulfill your requests. `read`, `search`, `write`, and successful `edit` calls emit session-scoped hashline anchors (`[path#TAG]` plus `LINE:text`) so the model can make stale-safe line edits; see [docs/tools.md](docs/tools.md). Add capabilities via [skills](#skills), [prompt templates](#prompt-templates), [extensions](#extensions), or [Atomic packages](#atomic-packages).
|
|
81
81
|
|
|
82
|
-
**Platform notes:** [Windows](docs/windows.md) | [Alpine/musl Linux](docs/
|
|
82
|
+
**Platform notes:** [Windows](docs/windows.md) | [Alpine/musl Linux](docs/getting-started/installation.md#alpine-and-musl-linux-archives) | [Termux (Android)](docs/termux.md) | [tmux](docs/tmux.md) | [Terminal setup](docs/terminal-setup.md) | [Shell aliases](docs/shell-aliases.md)
|
|
83
83
|
|
|
84
84
|
---
|
|
85
85
|
|
|
@@ -138,7 +138,7 @@ For each built-in provider, Atomic maintains a list of tool-capable models, upda
|
|
|
138
138
|
|
|
139
139
|
See [docs/providers.md](docs/providers.md) for detailed setup instructions.
|
|
140
140
|
|
|
141
|
-
Atomic's Pi 0.84.1 model/runtime surface includes Claude Opus 5 on Anthropic and Bedrock, model-capability-aware strict JSON-schema and OpenAI Lark/regex tool sampling, ETag-revalidated cached catalogs, persisted llama.cpp models, arbitrary OpenAI-compatible `samplingParams`, opt-in vLLM thinking-token budgets through `compat.supportsThinkingTokenBudget`, and finishless-stream stop inference through `compat.supportsFinishReason`. A populated `ANTHROPIC_AUTH_TOKEN` makes Anthropic models available/selectable while sending header-only bearer auth—with no synthesized API key or `x-api-key`—across chat and summary/compaction requests. Typed RPC model listings expose constrained-sampling flags through optional `ModelInfo.compat`; capability flags are enforcement claims, so unsupported `require` constraints fail instead of being silently weakened. Custom `models.json` is read from the active Atomic agent directory only; it is not merged across `.pi` and `.atomic` paths. See [models](docs/models.md), [providers](docs/providers.md), [RPC](docs/rpc.md#get_available_models), and [extensions](docs/extensions.md#constrained-sampling).
|
|
141
|
+
Atomic's Pi 0.84.1 model/runtime surface includes Claude Opus 5 on Anthropic and Bedrock, model-capability-aware strict JSON-schema and OpenAI Lark/regex tool sampling, ETag-revalidated cached catalogs, persisted llama.cpp models, arbitrary OpenAI-compatible `samplingParams`, opt-in vLLM thinking-token budgets through `compat.supportsThinkingTokenBudget`, and finishless-stream stop inference through `compat.supportsFinishReason`. A populated `ANTHROPIC_AUTH_TOKEN` makes Anthropic models available/selectable while sending header-only bearer auth—with no synthesized API key or `x-api-key`—across chat and summary/compaction requests. Typed RPC model listings expose constrained-sampling flags through optional `ModelInfo.compat`; capability flags are enforcement claims, so unsupported `require` constraints fail instead of being silently weakened. Custom `models.json` is read from the active Atomic agent directory only; it is not merged across `.pi` and `.atomic` paths. See [models](docs/models.md), [providers](docs/providers.md), [RPC](docs/rpc/protocol.md#get_available_models), and [extensions](docs/extensions/authoring.md#constrained-sampling).
|
|
142
142
|
|
|
143
143
|
**Custom providers & models:** Add providers via the active agent directory's `models.json` (normally `~/.atomic/agent/models.json`; `ATOMIC_CODING_AGENT_DIR`/`PI_CODING_AGENT_DIR` can select another directory) if they speak a supported API (OpenAI, Anthropic, Google). For custom APIs or OAuth, use extensions. See [docs/models.md](docs/models.md) and [docs/custom-provider.md](docs/custom-provider.md).
|
|
144
144
|
|
|
@@ -4,6 +4,12 @@ All notable changes to the `pi-intercom` extension will be documented in this fi
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.19-alpha.6] - 2026-09-11
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- A broker refusal received by an already-registered client now rejects that client's outstanding requests with the broker's own reason instead of being discarded. Previously the refusal was delivered to a listener that `connect()` removes after registration, so pipelined work — notably the session-directory barrier behind workflow route updates — waited out its five-second timer and surfaced `List sessions timeout` or a generic disconnect. Reasons such as `Pending-stage route is not authorized` now reach callers as non-recoverable errors, and the `disconnected` event carries the same cause. Pre-registration rejection, transport-disconnect classification, and explicit shutdown are unchanged.
|
|
12
|
+
|
|
7
13
|
## [0.9.19-alpha.4] - 2026-09-10
|
|
8
14
|
|
|
9
15
|
### Fixed
|
|
@@ -415,7 +415,25 @@ export class IntercomClient extends EventEmitter {
|
|
|
415
415
|
}
|
|
416
416
|
case "registration_failed": {
|
|
417
417
|
if (typeof brokerMessage.reason !== "string") throw new Error("Invalid registration_failed message");
|
|
418
|
-
|
|
418
|
+
const refusal = new Error(brokerMessage.reason);
|
|
419
|
+
if (this._sessionId === null) {
|
|
420
|
+
// Still registering: `connect()` owns the failure and its own cleanup.
|
|
421
|
+
this.emit("_registration_failed", refusal);
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
// The broker reuses this frame to refuse an *established* client's request
|
|
425
|
+
// (for example a rejected pending-stage route update) and then ends the
|
|
426
|
+
// socket, deliberately dropping anything already pipelined behind it. By
|
|
427
|
+
// this point `connect()` has removed its `_registration_failed` listener,
|
|
428
|
+
// so emitting there would discard the refusal and leave every pipelined
|
|
429
|
+
// request — notably the `listSessions()` barrier — to expire on its own
|
|
430
|
+
// five-second timer with an unusable diagnostic. Record the refusal as the
|
|
431
|
+
// disconnect cause, settle outstanding work with it, and destroy the socket
|
|
432
|
+
// so no new work is accepted while we wait for the peer FIN. `onClose`
|
|
433
|
+
// still owns session/socket teardown and the `disconnected` emission.
|
|
434
|
+
this.disconnectError ??= refusal;
|
|
435
|
+
this.failPending(this.disconnectError);
|
|
436
|
+
this.socket?.destroy();
|
|
419
437
|
break;
|
|
420
438
|
}
|
|
421
439
|
case "question_target": {
|
|
@@ -728,7 +728,14 @@ var init_client = __esm(() => {
|
|
|
728
728
|
case "registration_failed": {
|
|
729
729
|
if (typeof brokerMessage.reason !== "string")
|
|
730
730
|
throw new Error("Invalid registration_failed message");
|
|
731
|
-
|
|
731
|
+
const refusal = new Error(brokerMessage.reason);
|
|
732
|
+
if (this._sessionId === null) {
|
|
733
|
+
this.emit("_registration_failed", refusal);
|
|
734
|
+
break;
|
|
735
|
+
}
|
|
736
|
+
this.disconnectError ??= refusal;
|
|
737
|
+
this.failPending(this.disconnectError);
|
|
738
|
+
this.socket?.destroy();
|
|
732
739
|
break;
|
|
733
740
|
}
|
|
734
741
|
case "question_target": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.19-alpha.
|
|
3
|
+
"version": "0.9.19-alpha.7",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension providing a private coordination channel between parent and child agent sessions. Fork of: https://github.com/nicobailon/pi-intercom",
|
|
6
6
|
"contributors": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/mcp",
|
|
3
|
-
"version": "0.9.19-alpha.
|
|
3
|
+
"version": "0.9.19-alpha.7",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension that adapts MCP (Model Context Protocol) servers into the coding agent. Fork of: https://github.com/nicobailon/pi-mcp-adapter",
|
|
6
6
|
"contributors": [
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.19-alpha.6] - 2026-09-11
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Delegation guidance now favors keeping immediately blocking work local unless specialist expertise, context isolation, or an explicit request warrants a child. Parents are guided to continue independent work and wait on dependencies rather than repeatedly polling. Background launch defaults and explicit foreground waits are unchanged.
|
|
10
|
+
|
|
5
11
|
## [0.9.19-alpha.5] - 2026-09-11
|
|
6
12
|
|
|
7
13
|
### Changed
|
|
@@ -176,10 +176,12 @@ Show me the current subagent status.
|
|
|
176
176
|
|
|
177
177
|
The agent can choose a mode for each authorized call without asking you merely to select an execution mode:
|
|
178
178
|
|
|
179
|
+
Keep immediately blocking work local unless specialist expertise, context isolation, or an explicit delegation request makes a child worthwhile. Continue independent work after spawning without duplicating the child's task. Wait when its result becomes a dependency; otherwise rely on completion notices rather than repeated short waits or status polls.
|
|
180
|
+
|
|
179
181
|
```ts
|
|
180
182
|
subagent({ agent: "codebase-analyzer", task: "Trace authentication.", wait: { kind: "background" } })
|
|
181
183
|
subagent({ agent: "codebase-analyzer", task: "Trace authentication.", wait: { kind: "foreground", budgetMs: 30000 } })
|
|
182
|
-
subagent({ action: "wait", id: taskId
|
|
184
|
+
subagent({ action: "wait", id: taskId })
|
|
183
185
|
subagent({ action: "status", id: taskId })
|
|
184
186
|
subagent({ action: "kill", id: taskId })
|
|
185
187
|
```
|
|
@@ -28,7 +28,7 @@ You research current technical information from authoritative external sources:
|
|
|
28
28
|
|
|
29
29
|
Check `research/web/` for a recent cached copy first; fetch only when it is missing or stale. Reuse repositories already under `/tmp/atomic-github-repos/`, and persist reusable high-value fetches to `research/web/`.
|
|
30
30
|
|
|
31
|
-
For static pages, use the least expensive route that succeeds: `fetch_content
|
|
31
|
+
For static pages, use the least expensive route that succeeds: `fetch_content({ urls: ["https://example.com"] })`; then the site's `/llms.txt`; then `bash` with `curl <url> -H "Accept: text/markdown"` (inspect `content-type: text/markdown` and `x-markdown-tokens`); then `playwright-cli`. Start with the authoritative source rather than broad search when it is known.
|
|
32
32
|
|
|
33
33
|
Batch independent calls in one turn to reduce round-trips. `fetch_content({ urls: [...] })` fetches three URLs concurrently; independent git/gh commands may use `&` plus `wait`. Tool calls otherwise execute sequentially.
|
|
34
34
|
|
|
@@ -44,7 +44,7 @@ Choose the route that matches the question:
|
|
|
44
44
|
- **Technical solutions:** search exact errors and terms, official issues/discussions, Stack Overflow or technical forums, and comparable implementations.
|
|
45
45
|
- **Comparisons:** use migration guides, benchmarks, performance evidence, and explicit decision criteria or matrices.
|
|
46
46
|
|
|
47
|
-
For source repositories, prefer raw GitHub URLs over HTML when reading a known file. For version-specific questions, clone the tagged version with `fetch_content("https://github.com/<owner>/<repo>/tree/v1.0.0")`; resolve a tag SHA with `gh api repos/<owner>/<repo>/git/refs/tags/v1.0.0 --jq '.object.sha'` when needed.
|
|
47
|
+
For source repositories, prefer raw GitHub URLs over HTML when reading a known file. For version-specific questions, clone the tagged version with `fetch_content({ urls: ["https://github.com/<owner>/<repo>/tree/v1.0.0"] })`; resolve a tag SHA with `gh api repos/<owner>/<repo>/git/refs/tags/v1.0.0 --jq '.object.sha'` when needed.
|
|
48
48
|
|
|
49
49
|
## Video evidence
|
|
50
50
|
|
|
@@ -53,11 +53,11 @@ For source repositories, prefer raw GitHub URLs over HTML when reading a known f
|
|
|
53
53
|
Examples of distinct calls:
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
|
-
fetch_content({
|
|
57
|
-
fetch_content({
|
|
58
|
-
fetch_content({
|
|
59
|
-
fetch_content({
|
|
60
|
-
fetch_content({
|
|
56
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], prompt: "What libraries are imported?" })
|
|
57
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], timestamp: "23:41" })
|
|
58
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], timestamp: "23:41-25:00", frames: 3 })
|
|
59
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], frames: 6 })
|
|
60
|
+
fetch_content({ urls: ["/path/to/demo.mp4"], prompt: "What error appears?" })
|
|
61
61
|
fetch_content({ urls: ["https://youtube.com/watch?v=abc", "https://youtube.com/watch?v=def"], prompt: "What packages are installed?" })
|
|
62
62
|
```
|
|
63
63
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/subagents",
|
|
3
|
-
"version": "0.9.19-alpha.
|
|
3
|
+
"version": "0.9.19-alpha.7",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for delegating tasks to subagents with parallel execution. Fork of: https://github.com/nicobailon/pi-subagents",
|
|
6
6
|
"contributors": [
|
|
@@ -209,9 +209,11 @@ Concurrent writers conflict. `code-simplifier` and `debugger` change files. Do n
|
|
|
209
209
|
|
|
210
210
|
### Foreground, background, and automatic yielding
|
|
211
211
|
|
|
212
|
+
Keep immediately blocking work local unless specialist expertise, context isolation, or an explicit user request justifies delegation. Prefer independent tasks you can overlap with useful parent work. Do not spawn a child merely to wait immediately, or duplicate its assigned work while it runs.
|
|
213
|
+
|
|
212
214
|
Choose the observation mode for each authorized task. No extra user confirmation is needed merely to choose foreground or background. In owner-bound main and workflow-stage sessions, omitted `wait` or `wait: { kind: "background" }` returns after admission. Use `wait: { kind: "foreground", budgetMs: 30000 }` when the result is needed next. If the observation budget expires, the same child keeps running in the background; do not relaunch it. This applies to single and parallel calls.
|
|
213
215
|
|
|
214
|
-
Use `subagent({ action: "wait", id: taskId
|
|
216
|
+
Use `subagent({ action: "wait", id: taskId })` to observe an existing task with the owner's budget, `status` to inspect its state, or `kill` to terminally stop it. Wait when the result becomes a dependency; otherwise rely on completion notices. Avoid repeated short waits or status polls; override the budget only for a concrete responsiveness need. A yielded receipt is not a terminal result. Background counts stay below the prompt; `/tasks` opens inspection only on command. A shaded completion notification reaches the owning chat without requiring a model reply. A later wait does not extend the owner's lifetime.
|
|
215
217
|
|
|
216
218
|
Intercom `ask` cannot revive a completed, failed, interrupted, or cancelled noninteractive child, even if its retained registration says `idle`. New asks fail immediately, and termination fails an already-admitted ask that has not received a reply. Use a fresh child for follow-up work. Live interactive idle sessions and workflow post-mortem conversations remain separate reply-capable cases; `send` transport behavior is unchanged.
|
|
217
219
|
|
|
@@ -17148,9 +17148,10 @@ var DEFAULT_PROMPT_GUIDANCE = [
|
|
|
17148
17148
|
- Explicit requests such as "quickly", "inline", "do this directly", or "don't use a workflow", and equivalent wording, override that default even for complex tasks. Treat "quickly" as an inline execution choice, not a request for a faster workflow. Do not create or launch a hidden/nested workflow or pressure the user to reapprove the choice. Preserve appropriate testing, review and evidence inline, and unrelated safety and authorization constraints. Apply the preference only to the specified task. Quoted examples and questions about inline code are not execution-mode instructions; neither are descriptions of software that should run quickly.
|
|
17149
17149
|
- On a switch from an active workflow to inline, notify the controlling session to safely hold/stop the affected run, reconcile completed work and in-flight side effects, then continue inline without duplicate execution. Do not claim completed work was undone.
|
|
17150
17150
|
- Use a single subagent for a focused specialty or parallel tasks for independent work. Keep substantial-overlap tasks together rather than duplicating investigation across agents.
|
|
17151
|
-
- Delegate noisy or context-heavy command investigation when isolation helps, but run concise commands inline when that is simpler.
|
|
17151
|
+
- Keep immediately blocking work local unless specialist expertise, context isolation, or an explicit user request justifies delegation. Delegate independent work that can usefully overlap your own next steps; do not spawn a child merely to wait immediately. Delegate noisy or context-heavy command investigation when isolation helps, but run concise commands inline when that is simpler.
|
|
17152
17152
|
- Background subagents are supported in owner-bound sessions: omitted wait or wait:{kind:"background"} yields after admission while the child continues. Use wait:{kind:"foreground",budgetMs:30000} for foreground-first observation. A yielded observation never means the task stopped. Do not duplicate delegated work; observe the existing task or await its completion notice. The UI shows compact status below the prompt, and /tasks opens inspection only when invoked.
|
|
17153
17153
|
- Choose foreground-first or background observation for each authorized call based on whether the next action needs the result; do not ask the user merely to select a mode. Foreground observation automatically yields on budget expiry while the same task continues. Wait for terminal completion before starting dependent work. Execution mode does not bypass tool permissions, delegation boundaries, or owner lifetime.
|
|
17154
|
+
- Continue useful independent work after spawning without duplicating the child's task. Wait when its result becomes a dependency; otherwise rely on completion notices. Avoid repeated short waits or status polls. Omit the wait budget to use owner policy unless a concrete responsiveness need calls for an override.
|
|
17154
17155
|
- Use the debugger subagent for actual failures that need reproduction, root-cause diagnosis, and a validated fix; additional debugger or research delegates are optional when they add a distinct useful angle.
|
|
17155
17156
|
- Let each named agent use its declared model and fallback policy: omit the explicit model argument unless the user requests an exact model or a documented task requirement needs one, and record the reason for any override before launch. Do not choose an ad hoc model merely for diversity.
|
|
17156
17157
|
- If an agent has no declared model or fallback policy, consult packages/coding-agent/docs/models/model-selection.md for the role's Pareto-efficient recommendations and packages/coding-agent/docs/models/evals.md for the measured per-evaluation scores by task type, then use workflow({ action: "models" }) when available to inspect the configured catalog. Pin only a returned fullId and only append a thinking level listed for that entry. If the catalog tool is unavailable, the catalog is empty, or no recommended model is present, leave the child unpinned and state the limitation rather than inventing a model. Do not inspect credentials or infer why a model is absent.
|
|
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.19-alpha.7] - 2026-09-12
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `fetch_content` now shows each URL's error and recovery steps when an entire batch fails, instead of hiding the causes behind a generic failure count. Retained partial content is shown as incomplete excerpts rather than incorrectly reported as absent.
|
|
12
|
+
|
|
13
|
+
## [0.9.19-alpha.6] - 2026-09-11
|
|
14
|
+
|
|
15
|
+
### Breaking Changes
|
|
16
|
+
|
|
17
|
+
- `fetch_content` now requires a nonempty `urls` array of nonempty strings for both single and batch requests. Replace `{ url: "..." }` with `{ urls: ["..."] }`. Invalid argument shapes and unrecognized fields are rejected before fetching; the `get_search_content` selectors are unchanged.
|
|
18
|
+
- `code_search` now requires a single `repoName` in `owner/repo` format alongside `query`. It asks DeepWiki about that public GitHub repository instead of searching Exa, with no Exa fallback. Update query-only calls to include the repository. No API key is required; `maxTokens` remains a best-effort local output bound. Unrelated `web_search` providers are unchanged.
|
|
19
|
+
|
|
7
20
|
## [0.9.14] - 2026-08-19
|
|
8
21
|
|
|
9
22
|
Cumulative release of the `0.9.14-alpha.3` – `0.9.14-alpha.4` prereleases. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease sections below.
|
|
@@ -18,7 +18,7 @@ https://github.com/user-attachments/assets/cac6a17a-1eeb-4dde-9818-cdf85d8ea98f
|
|
|
18
18
|
|
|
19
19
|
**Video Understanding** — Point it at a YouTube video or local screen recording and ask questions about what's on screen. Full transcripts, visual descriptions, and frame extraction at exact timestamps.
|
|
20
20
|
|
|
21
|
-
**Smart Fallbacks** —
|
|
21
|
+
**Smart Fallbacks** — Web search tries Exa, then Perplexity, then Gemini API, then Gemini Web when browser cookies are enabled. YouTube tries Gemini Web when enabled, then API, then Perplexity. Blocked pages retry through Jina Reader and Gemini extraction. Repository-specific `code_search` uses DeepWiki only.
|
|
22
22
|
|
|
23
23
|
**GitHub Cloning** — GitHub URLs are cloned locally instead of scraped. The agent gets real file contents and a local path to explore, not rendered HTML.
|
|
24
24
|
|
|
@@ -58,16 +58,16 @@ Requires Pi v0.37.3+.
|
|
|
58
58
|
web_search({ query: "TypeScript best practices 2025" })
|
|
59
59
|
|
|
60
60
|
// Fetch a page
|
|
61
|
-
fetch_content({
|
|
61
|
+
fetch_content({ urls: ["https://docs.example.com/guide"] })
|
|
62
62
|
|
|
63
63
|
// Clone a GitHub repo
|
|
64
|
-
fetch_content({
|
|
64
|
+
fetch_content({ urls: ["https://github.com/owner/repo"] })
|
|
65
65
|
|
|
66
66
|
// Understand a YouTube video
|
|
67
|
-
fetch_content({
|
|
67
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], prompt: "What libraries are shown?" })
|
|
68
68
|
|
|
69
69
|
// Analyze a screen recording
|
|
70
|
-
fetch_content({
|
|
70
|
+
fetch_content({ urls: ["/path/to/recording.mp4"], prompt: "What error appears on screen?" })
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
## Tools
|
|
@@ -100,34 +100,41 @@ web_search({ query: "...", includeContent: true })
|
|
|
100
100
|
|
|
101
101
|
### code_search
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
Ask questions about code, architecture, and APIs in a public GitHub repository via DeepWiki MCP at `https://mcp.deepwiki.com/mcp`. No API key or local MCP configuration is required. DeepWiki availability and repository indexing determine which questions it can answer.
|
|
104
104
|
|
|
105
105
|
```typescript
|
|
106
|
-
code_search({ query: "
|
|
107
|
-
code_search({ query: "
|
|
106
|
+
code_search({ repoName: "facebook/react", query: "How does useEffect cleanup work?" })
|
|
107
|
+
code_search({ repoName: "expressjs/express", query: "How is middleware error handling implemented?", maxTokens: 10000 })
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
| Parameter | Description |
|
|
111
111
|
|-----------|-------------|
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
112
|
+
| `repoName` | Required single public GitHub repository in `owner/repo` format, not a URL or list |
|
|
113
|
+
| `query` | Required nonempty question about that repository, sent verbatim |
|
|
114
|
+
| `maxTokens` | Optional best-effort output bound, approximately four characters per token, plus a truncation notice (default: 5000, range: 1000–50000) |
|
|
115
|
+
|
|
116
|
+
Migration: existing `code_search({ query: ... })` calls must now include `repoName`. The query is sent as DeepWiki's `ask_question` question. `maxTokens` limits the returned text locally, not DeepWiki's generation. Requests have a 60-second deadline and honor caller cancellation. Errors and empty responses are reported without falling back to Exa. Use `web_search` for broader discovery or when a repository is unavailable; its providers and settings are unchanged.
|
|
114
117
|
|
|
115
118
|
### fetch_content
|
|
116
119
|
|
|
117
120
|
Fetch URL(s) and extract readable content as markdown. Automatically detects and handles GitHub repos, YouTube videos, PDFs, local video files, and regular web pages.
|
|
118
121
|
|
|
122
|
+
Use the lowercase `urls` field with a nonempty array of strings, even for one URL. Replace legacy `{ url: "..." }` calls with `{ urls: ["..."] }`. Missing targets, empty arrays, empty strings, object entries, and unrecognized fields are rejected before fetching. Atomic's standard argument normalization can convert a scalar `urls` string into a one-item array, but prompts and integrations should always send the documented array form.
|
|
123
|
+
|
|
124
|
+
See [Atomic's fetch argument guide](../coding-agent/docs/web-access.md) for examples and validation troubleshooting.
|
|
125
|
+
|
|
119
126
|
```typescript
|
|
120
|
-
fetch_content({
|
|
121
|
-
fetch_content({ urls: ["
|
|
122
|
-
fetch_content({
|
|
123
|
-
fetch_content({
|
|
124
|
-
fetch_content({
|
|
125
|
-
fetch_content({
|
|
127
|
+
fetch_content({ urls: ["https://example.com/article"] })
|
|
128
|
+
fetch_content({ urls: ["https://example.com/one", "https://example.com/two"] })
|
|
129
|
+
fetch_content({ urls: ["https://github.com/owner/repo"] })
|
|
130
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], prompt: "What libraries are shown?" })
|
|
131
|
+
fetch_content({ urls: ["/path/to/recording.mp4"], prompt: "What error appears on screen?" })
|
|
132
|
+
fetch_content({ urls: ["https://youtube.com/watch?v=abc"], timestamp: "23:41-25:00", frames: 4 })
|
|
126
133
|
```
|
|
127
134
|
|
|
128
135
|
| Parameter | Description |
|
|
129
136
|
|-----------|-------------|
|
|
130
|
-
| `
|
|
137
|
+
| `urls` | Required nonempty array of URL/path strings, including for a single target |
|
|
131
138
|
| `prompt` | Question to ask about a YouTube video or local video file |
|
|
132
139
|
| `timestamp` | Extract frame(s) — single (`"23:41"`), range (`"23:41-25:00"`), or seconds (`"85"`) |
|
|
133
140
|
| `frames` | Number of frames to extract (max 12) |
|
|
@@ -168,11 +175,11 @@ Fallback: Gemini API (Files API upload) → Gemini Web when browser cookies are
|
|
|
168
175
|
Use `timestamp` and/or `frames` on any YouTube URL or local video file to extract visual frames as images.
|
|
169
176
|
|
|
170
177
|
```typescript
|
|
171
|
-
fetch_content({
|
|
172
|
-
fetch_content({
|
|
173
|
-
fetch_content({
|
|
174
|
-
fetch_content({
|
|
175
|
-
fetch_content({
|
|
178
|
+
fetch_content({ urls: ["..."], timestamp: "23:41" }) // single frame
|
|
179
|
+
fetch_content({ urls: ["..."], timestamp: "23:41-25:00" }) // range, 6 frames
|
|
180
|
+
fetch_content({ urls: ["..."], timestamp: "23:41-25:00", frames: 3 }) // range, custom count
|
|
181
|
+
fetch_content({ urls: ["..."], timestamp: "23:41", frames: 5 }) // 5 frames at 5s intervals
|
|
182
|
+
fetch_content({ urls: ["..."], frames: 6 }) // sample whole video
|
|
176
183
|
```
|
|
177
184
|
|
|
178
185
|
Requires `ffmpeg` (and `yt-dlp` for YouTube). Timestamps accept `H:MM:SS`, `MM:SS`, or bare seconds.
|
|
@@ -191,7 +198,7 @@ When Readability fails or returns only a cookie notice, the extension retries vi
|
|
|
191
198
|
web_search(query)
|
|
192
199
|
→ Exa (direct API with key, MCP without) → Perplexity → Gemini API → Gemini Web (if browser cookies enabled)
|
|
193
200
|
|
|
194
|
-
fetch_content(url)
|
|
201
|
+
fetch_content({ urls: [url] })
|
|
195
202
|
→ Video file? Gemini API (Files API) → Gemini Web (if browser cookies enabled)
|
|
196
203
|
→ GitHub URL? Clone repo, return file contents + local path
|
|
197
204
|
→ YouTube URL? Gemini Web (if browser cookies enabled) → Gemini API → Perplexity
|
|
@@ -324,7 +331,7 @@ Rate limits: Perplexity is capped at 10 requests/minute (client-side). Content f
|
|
|
324
331
|
| `curator-server.ts` | Ephemeral HTTP server with SSE streaming and state machine |
|
|
325
332
|
| `summary-review.ts` | Summary prompt construction, model-based draft generation, and deterministic fallback summary |
|
|
326
333
|
| `exa.ts` | Exa.ai search provider — direct API and MCP proxy, budget tracking |
|
|
327
|
-
| `code-search.ts` |
|
|
334
|
+
| `code-search.ts` | Repository questions via DeepWiki MCP |
|
|
328
335
|
| `extract.ts` | URL/file path routing, HTTP extraction, fallback orchestration |
|
|
329
336
|
| `gemini-search.ts` | Search routing across Exa, Perplexity, Gemini API, Gemini Web |
|
|
330
337
|
| `gemini-url-context.ts` | Gemini URL Context + Web extraction fallbacks |
|