@bastani/atomic 0.9.18-alpha.6 → 0.9.18
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 +53 -0
- package/dist/builtin/intercom/CHANGELOG.md +31 -0
- package/dist/builtin/intercom/README.md +5 -0
- package/dist/builtin/intercom/broker/broker.ts +6 -1
- package/dist/builtin/intercom/broker/client.ts +2 -0
- package/dist/builtin/intercom/index.bundle.mjs +4 -3
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/types.ts +2 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +19 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +36 -0
- package/dist/builtin/workflows/package.json +1 -1
- package/docs/development.md +17 -0
- package/docs/intercom.md +9 -0
- package/npm-shrinkwrap.json +32 -32
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.18] - 2026-09-05
|
|
6
|
+
|
|
7
|
+
Cumulative release of the `0.9.18-alpha.1` through `0.9.18-alpha.7` prereleases. Per-change details remain in the unchanged prerelease sections below.
|
|
8
|
+
|
|
9
|
+
### Breaking Changes
|
|
10
|
+
|
|
11
|
+
- Replaced `/fast` with selectable canonical `-fast` model IDs. Removed its selector, `codexFastMode.chat`/`codexFastMode.workflow` settings, `ATOMIC_CODEX_FAST_MODE`, scope inheritance, toggle-state exports, settings-manager methods, and the environment-sourced settings-override layer without a compatibility shim. Select a fast model explicitly; effective settings now merge global then project settings.
|
|
12
|
+
- Fast-routing APIs now live in `core/fast-model-routing.ts` and `core/fast-model-routing-transport.ts`, with package-root exports retained for the replacement APIs. `usesChatGptCodexTransport` and `usesFirstPartyCodexRouting` remain; `withCodexFastRouteHeaders` derives identity from route metadata rather than an enabled flag.
|
|
13
|
+
- Cloudflare AI Gateway binding transport requires `binding.fetch()` and no longer falls back to `gateway(id).run(...)`.
|
|
14
|
+
- `WorkflowPendingStageDelivery` now requires `fail(reason: Error): void` so delivery owners can settle exhausted recovery instead of leaving stages parked forever.
|
|
15
|
+
- Removed the experimental remote-session lease API, transcript projection helpers, and harness factory. `@bastani/atomic/client` now re-exports the service-addressed `@earendil-works/pi-client` API.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Added explicit fast model variants to `/model`, `--list-models`, workflow catalogs, scoped lists, session restore, fallback candidates, usage, and attempt records. Thinking suffixes remain supported. OpenAI and Codex variants send the base upstream ID with priority tier; Copilot exposes only account-advertised fast IDs and sends them without an OpenAI tier.
|
|
20
|
+
- Added fast-specific `modelOverrides`, derivation APIs, `ModelRuntime.getFastModelVariantDiagnostics()`, and `getWarning()`. Existing provider, custom, or extension-owned IDs win collisions and produce actionable startup/catalog warnings. Route metadata, not a name suffix, grants fast behavior.
|
|
21
|
+
- Added GPT-6-Astra across OpenAI, Codex, Bedrock, OpenRouter, and Vercel, including derived first-party fast variants, provider-specific pricing, long-context tiers, and provisional account-gated Copilot support. Added Gemini 3.8 Flash, Claude Fable 5.1, Copilot Claude Fable 5/5.1, and Baseten GLM-5.3-Fast with provider-owned metadata and availability.
|
|
22
|
+
- Embedded PostgreSQL now supports offline durable storage on Linux musl x64/ARM64 and Windows ARM64. Windows ARM64 uses PostgreSQL x64 through Windows 11 emulation; installs and standalone archives carry only the matching runtime.
|
|
23
|
+
- Added `supportsMidConvoEffort` and `compat.vllmPriority` custom-model settings, and transcript notices for dropped Anthropic thinking when cache-miss notices are enabled.
|
|
24
|
+
- Added a clickable fullscreen `Jump to latest message` overlay with the configured shortcut. Holding Alt makes fullscreen mouse-wheel scrolling move five times as far ([upstream #9166](https://github.com/earendil-works/pi/pull/9166)).
|
|
25
|
+
- Documented Zed terminal keybindings for Kitty-protocol modified keys ([#8828](https://github.com/earendil-works/pi/pull/8828)).
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Updated Pi runtime dependencies to 0.85.1, preserving Atomic startup, client API, and footer watchers. Fullscreen search uses the cached index and visible-match highlighting introduced in Pi 0.85.0.
|
|
30
|
+
- Startup paints the themed identity and focused editor before isolated-engine readiness. First submissions wait for optional resources, Escape cancels a waiting submission, and `/reload` retries extension failures without publishing failed candidates' host-managed state.
|
|
31
|
+
- Compiled/bundled builds reuse native-imported builtin extension factories across reloads while editable extensions and workflows retain content-hash invalidation. Standalone builds use syntax-minified shared sidecars and bytecode launchers, including Windows.
|
|
32
|
+
- Interactive model, thinking, cycling, and scoped-list selections save as startup defaults immediately. Selectors keep active choices marked while browsing; scoped lists use consistent toggles and strike through unavailable models. Removed Ctrl+S save-default UI.
|
|
33
|
+
- The working indicator reads `Working`, preserving Atomic's animated status row. The centered jump overlay no longer consumes a transcript row, and workflow stage chat uses matching copy and shortcuts.
|
|
34
|
+
- `ModelRuntime` enforces first-party Codex routing for standalone stream/complete calls too. Fast derivation excludes unsupported adapters and extension-owned transports, Copilot restore requires account entitlement and a base catalog model, and all provider catalog accessors agree on derived variants. Labels show the canonical model ID without a redundant fast badge.
|
|
35
|
+
- Claude on Anthropic and Bedrock accepts PDF input through the bundled AI library, with visible placeholders elsewhere. Interactive sessions do not yet produce document blocks; Bedrock requires citations for full visual understanding.
|
|
36
|
+
- Updated hashline edit guidance with worked examples, rejected-shape warnings, and a specification of native block resolution. Model-selection references record the August 26 DeepSWE snapshot, corrected prices and Pareto choices, and Fable 5.1's unmeasured status. Compaction docs explain why `preserve_recent` preserves text and tool exchanges but resets signed reasoning.
|
|
37
|
+
- Capable Responses models use `prompt_cache_options.ttl: "30m"` for long retention; older models retain the 24-hour legacy control.
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- Fixed Windows x64 and ARM64 archives crashing before startup in `0.9.18-alpha.1` ([#2781](https://github.com/bastani-inc/atomic/pull/2781)).
|
|
42
|
+
- Restored startup resource listings, source-path expansion, slash-prefixed prompt labels, isolated-child extension inventory, deterministic collision labels, overlap warnings, and consistent hidden-resource handling across platforms.
|
|
43
|
+
- Fixed in-memory forks during running tools, lost compaction boundaries after forks, session import filename collisions, RPC aborts not cancelling manual compaction, and concurrent `/share` exports overwriting temporary files.
|
|
44
|
+
- Builtin tools resolve relative paths against an extension's `ctx.cwd`, including matching search hashline tags. Write confirmations no longer mislabel UTF-16 counts as bytes or discard user prose merely because it begins with `Successfully wrote to`.
|
|
45
|
+
- Fixed Claude Fable thinking-level routing on Copilot, Fireworks GLM endpoint routing, Fable 5.1 prefix/model-switch recovery, exact reasoning-byte restoration, unsupported sampling fields and forced tool choices, fallback replay and serving-model billing, and persisted thinking-drop notices on resume. Custom Responses gateways can disable `max_output_tokens`.
|
|
46
|
+
- Fixed managed fd/rg downloads behind GitHub API quotas, selected static musl archives on Linux x64/ARM64, and pinned darwin/x64 fd to 10.3.0. Fixed proxied plain-HTTP requests hanging after tool calls and signal-killed subprocesses appearing successful.
|
|
47
|
+
- Fixed JPEG EXIF orientation detection, skills disappearing when bash exists without read, and model-refresh errors missing their status spacing. Jump-overlay clicks preserve other mouse reports in the same input chunk.
|
|
48
|
+
- Raised branch-summary output to 4096 tokens, clamped to model limits, to avoid reasoning exhausting the previous cap ([#8845](https://github.com/earendil-works/pi/issues/8845)).
|
|
49
|
+
- Resumed workflows cannot report completion or start replacement work while skipping their exact unfinished durable tool. Completed work remains cached and cancellation retains precedence.
|
|
50
|
+
|
|
51
|
+
### Removed
|
|
52
|
+
|
|
53
|
+
- Removed `/atomic`. Use `/workflow list`, `/changelog`, and `/hotkeys` instead.
|
|
54
|
+
- Removed Ctrl+X copy-message/selection to avoid workflow-navigation conflicts. `/copy` and automatic mouse-selection copying remain.
|
|
55
|
+
|
|
56
|
+
## [0.9.18-alpha.7] - 2026-09-05
|
|
57
|
+
|
|
5
58
|
### Added
|
|
6
59
|
|
|
7
60
|
- Fullscreen mouse-wheel scrolling moves five times as far while Alt is held, through the Pi TUI 0.85.1 update ([upstream #9166](https://github.com/earendil-works/pi/pull/9166)).
|
|
@@ -4,6 +4,37 @@ All notable changes to the `pi-intercom` extension will be documented in this fi
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.18] - 2026-09-05
|
|
8
|
+
|
|
9
|
+
Cumulative release of the `0.9.18-alpha.3` through `0.9.18-alpha.7` prereleases. Per-change details remain in the unchanged prerelease sections below.
|
|
10
|
+
|
|
11
|
+
### Breaking Changes
|
|
12
|
+
|
|
13
|
+
- Workflow-stage targets require root-anchored `workflow:<rootRunId>/<segment>[/<segment>...]` paths. Legacy `<runId>:<stageKey>` targets fail with a migration hint.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Added literal, run-ID, and glob stage-path routing, sticky delivery to future matches, and `workflow:<rootRunId>/**` broadcasts to live and future descendants until root termination.
|
|
18
|
+
- `intercom list` shows persisted possible future targets and queued counts. Valid unknown paths queue with `notInKnownSet` warnings and produce terminal undeliverable notices only if never delivered. Tool guidance, skills, and docs teach path discovery and live-only asks.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Fixed invocation control across isolated workflow subgroups, pending-stage roster discovery and delivery, correlated live replies, registration-based authorization, and sibling/cross-run isolation. Queued sends render as successful, not failed ([#2784](https://github.com/bastani-inc/atomic/issues/2784)).
|
|
23
|
+
- Background reconnects retry with bounded backoff after releasing ownership, restore stage visibility/routing, and close failed accepted connections instead of accumulating stale registrations. Host sessions retain their startup home group across joins and reconnects, preserving multi-workflow control without granting workers cross-invocation authority.
|
|
24
|
+
- Recoverable disconnects during lazy initialization, stage warm-up, advisory subagent authorization, or event relays no longer produce misleading stage/UI failures. Registered transport resets enter typed recovery; unrelated protocol, auth, configuration, and terminal errors remain actionable.
|
|
25
|
+
- Stage warm-up owns bounded retries. Exhaustion settles queued delivery with a stage-scoped terminal failure instead of hanging or printing into the host transcript. No model retry/fallback is spent, queued messages remain available, late drains are safe, and stages without queued messages still start.
|
|
26
|
+
- Brokers retire ended sockets before routing more traffic. Delivery waits for socket-write acknowledgement, so failed writes cannot claim success, open reply authority, poison retry identity, or inflate sticky-broadcast receipts.
|
|
27
|
+
- Recoverable disconnects on send/ask/reply return opaque `retryToken` values for explicit exact-operation retries. Tokenless identical calls remain distinct. Tokens allow three claimed attempts within the original 11-minute deadline, retain identity after inconclusive nondelivery, preserve implicit reply correlation, and reject invalid or mismatched claims before side effects. Capacity is reserved before new operations begin.
|
|
28
|
+
- Retry signatures survive reconnects while preserving caller-visible target and argument distinctions. Local subagent result relays reserve deduplication identity before delivery and fail closed on conflicts, capacity, and uncertain acceptance.
|
|
29
|
+
- Broker acceptance records use keyed SHA-256 HMACs rather than plaintext signatures, keeping message and attachment text out of SQLite/WAL/SHM. POSIX directories/files use owner-only modes; key/database mismatch and corruption fail closed. The 12-minute durability and 10,000-record/64 MiB limits remain enforced.
|
|
30
|
+
- Closed stages suppress late messages from their own cancelled subagents without dropping other stages' traffic; already-submitted sends preserve receipts and retry identities ([#2840](https://github.com/bastani-inc/atomic/issues/2840)).
|
|
31
|
+
|
|
32
|
+
## [0.9.18-alpha.7] - 2026-09-05
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- Host sessions that join multiple workflow groups retain workflow broadcast and pending-stage routing after reconnecting. Registration now preserves the startup home group instead of treating the most recently joined group as the session's origin; workflow workers still cannot gain another invocation's control authority through joins or reconnects.
|
|
37
|
+
|
|
7
38
|
## [0.9.18-alpha.6] - 2026-09-04
|
|
8
39
|
|
|
9
40
|
### Breaking Changes
|
|
@@ -184,6 +184,11 @@ intercom({
|
|
|
184
184
|
|
|
185
185
|
To coordinate two plain chat sessions without changing startup config, have each call `intercom({ action: "join", group: "NAME" })`. Joining adds a membership without changing the session ID or removing existing memberships. Calls to `list`, `send`, and `ask` can then reach any session sharing at least one membership. Use `intercom({ action: "groups" })` to discover every available name, connected-session count, and membership marker. Call `intercom({ action: "leave", group: "NAME" })` to remove one membership while keeping the others, or bare `leave` to reset to the original home group. `contact_supervisor` keeps its dedicated capability-based cross-group behavior.
|
|
186
186
|
|
|
187
|
+
Joined memberships survive broker reconnects without replacing the session's
|
|
188
|
+
startup identity. An ordinary host can therefore control several joined workflow
|
|
189
|
+
invocations, while a workflow worker cannot gain another invocation's parent-control
|
|
190
|
+
authority by joining its group and reconnecting.
|
|
191
|
+
|
|
187
192
|
**Worker finds something unexpected — escalates and waits:**
|
|
188
193
|
```typescript
|
|
189
194
|
intercom({
|
|
@@ -1183,6 +1183,10 @@ class IntercomBroker {
|
|
|
1183
1183
|
if (!isSessionRegistration(clientMessage.session)) {
|
|
1184
1184
|
throw new Error("Invalid register message");
|
|
1185
1185
|
}
|
|
1186
|
+
if (clientMessage.registrationGroup !== undefined &&
|
|
1187
|
+
(typeof clientMessage.registrationGroup !== "string" || clientMessage.registrationGroup.trim().length === 0)) {
|
|
1188
|
+
throw new Error("Invalid registration group");
|
|
1189
|
+
}
|
|
1186
1190
|
if (clientMessage.returnAddress !== undefined &&
|
|
1187
1191
|
(typeof clientMessage.returnAddress !== "string" || clientMessage.returnAddress.length === 0)) {
|
|
1188
1192
|
throw new Error("Invalid return address");
|
|
@@ -1222,7 +1226,8 @@ class IntercomBroker {
|
|
|
1222
1226
|
this.sessions.set(id, {
|
|
1223
1227
|
socket,
|
|
1224
1228
|
info,
|
|
1225
|
-
registrationGroup:
|
|
1229
|
+
registrationGroup: typeof clientMessage.registrationGroup === "string"
|
|
1230
|
+
? normalizeGroup(clientMessage.registrationGroup) : legacyGroup,
|
|
1226
1231
|
...(typeof info.name === "string" && info.name.trim().length > 0
|
|
1227
1232
|
? { registrationName: info.name.trim() }
|
|
1228
1233
|
: {}),
|
|
@@ -231,6 +231,7 @@ export class IntercomClient extends EventEmitter {
|
|
|
231
231
|
supervisor?: SupervisorRegistration,
|
|
232
232
|
supervisorOwnerToken?: string,
|
|
233
233
|
messageSource?: Message["source"],
|
|
234
|
+
registrationGroup?: string,
|
|
234
235
|
): Promise<void> {
|
|
235
236
|
if (this.socket) {
|
|
236
237
|
return Promise.reject(new Error("Already connected"));
|
|
@@ -360,6 +361,7 @@ export class IntercomClient extends EventEmitter {
|
|
|
360
361
|
writeMessage(socket, {
|
|
361
362
|
type: "register",
|
|
362
363
|
session,
|
|
364
|
+
...(registrationGroup !== undefined ? { registrationGroup } : {}),
|
|
363
365
|
returnAddress: this.returnAddress,
|
|
364
366
|
...(supervisor ? { supervisor } : {}),
|
|
365
367
|
...(supervisorOwnerToken ? { supervisorOwnerToken } : {}),
|
|
@@ -534,7 +534,7 @@ var init_client = __esm(() => {
|
|
|
534
534
|
}
|
|
535
535
|
return socket;
|
|
536
536
|
}
|
|
537
|
-
connect(session, supervisor, supervisorOwnerToken, messageSource) {
|
|
537
|
+
connect(session, supervisor, supervisorOwnerToken, messageSource, registrationGroup) {
|
|
538
538
|
if (this.socket) {
|
|
539
539
|
return Promise.reject(new Error("Already connected"));
|
|
540
540
|
}
|
|
@@ -636,6 +636,7 @@ var init_client = __esm(() => {
|
|
|
636
636
|
writeMessage(socket, {
|
|
637
637
|
type: "register",
|
|
638
638
|
session,
|
|
639
|
+
...registrationGroup !== undefined ? { registrationGroup } : {},
|
|
639
640
|
returnAddress: this.returnAddress,
|
|
640
641
|
...supervisor ? { supervisor } : {},
|
|
641
642
|
...supervisorOwnerToken ? { supervisorOwnerToken } : {}
|
|
@@ -6678,8 +6679,8 @@ function piIntercomExtension(pi, testOverrides = {}) {
|
|
|
6678
6679
|
await testOverrides.beforeConnectAttempt?.(reason);
|
|
6679
6680
|
await spawnBrokerIfNeeded(config.brokerCommand, config.brokerArgs);
|
|
6680
6681
|
const childMetadata = currentChildOrchestratorMetadata();
|
|
6681
|
-
await nextClient.connect(registration, childMetadata?.supervisor, supervisorAuthorizations.ownerToken, readSubagentMessageSource(runtimeContext?.subagentPolicy));
|
|
6682
|
-
clientRegistrationGroup =
|
|
6682
|
+
await nextClient.connect(registration, childMetadata?.supervisor, supervisorAuthorizations.ownerToken, readSubagentMessageSource(runtimeContext?.subagentPolicy), resolveSessionHomeGroup());
|
|
6683
|
+
clientRegistrationGroup = resolveSessionHomeGroup();
|
|
6683
6684
|
await supervisorAuthorizations.restore(nextClient);
|
|
6684
6685
|
for (const [runId, route] of pendingStageRoutes) {
|
|
6685
6686
|
await registerPendingStageRoute(nextClient, runId, route);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.18
|
|
3
|
+
"version": "0.9.18",
|
|
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": [
|
|
@@ -100,6 +100,8 @@ export type ClientMessage =
|
|
|
100
100
|
session: Omit<SessionInfo, "id">;
|
|
101
101
|
/** Internal host-owned identity retained across broker reconnects. */
|
|
102
102
|
returnAddress?: string;
|
|
103
|
+
/** Immutable session origin; separate from mutable group memberships. Legacy clients use session.group. */
|
|
104
|
+
registrationGroup?: string;
|
|
103
105
|
supervisor?: SupervisorRegistration;
|
|
104
106
|
supervisorOwnerToken?: string;
|
|
105
107
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/mcp",
|
|
3
|
-
"version": "0.9.18
|
|
3
|
+
"version": "0.9.18",
|
|
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,25 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.18] - 2026-09-05
|
|
6
|
+
|
|
7
|
+
Cumulative release of the `0.9.18-alpha.6` prerelease. Per-change details remain in the unchanged prerelease section below.
|
|
8
|
+
|
|
9
|
+
### Breaking Changes
|
|
10
|
+
|
|
11
|
+
- Removed `fastMode` from result, progress, runtime, artifact, and run-history metadata. Select fast inference with a canonical `-fast` model ID in model or fallback fields, such as `openai-codex/gpt-5.6-sol-fast:medium`.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Labels show the complete selected model ID without a separate fast badge.
|
|
16
|
+
- Bundled agents use GPT-6 Astra at low, with debugger at xhigh. Added Astra and Claude Fable 5.1 fallbacks ahead of older models, and aligned locator fallback chains with ordinary agents, including Sol, GPT-5.5, and Opus 4.8 at medium.
|
|
17
|
+
- The qlty skill follows repository/user priorities, preserves authoritative checks and read-only boundaries, supports offline/manual setup, and distinguishes prepared configuration from executed checks.
|
|
18
|
+
- Default guidance honors task-scoped inline/no-workflow requests while retaining testing, review, safety, and reconciliation of active workflow effects. Model selection for unpinned agents consults task-specific measured evals alongside role guidance.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Completing workflow stages cancel their still-running single, parallel, and detached subagents. Children retain interrupted/abort outcomes and cleanup, late findings no longer reach parent chat, and exact ownership preserves other stages' traffic. Already-submitted Intercom sends keep receipts/retry identities; detached children still notify while their owning stage is live ([#2840](https://github.com/bastani-inc/atomic/issues/2840)).
|
|
23
|
+
|
|
5
24
|
## [0.9.18-alpha.6] - 2026-09-04
|
|
6
25
|
|
|
7
26
|
### Breaking Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/subagents",
|
|
3
|
-
"version": "0.9.18
|
|
3
|
+
"version": "0.9.18",
|
|
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": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/web-access",
|
|
3
|
-
"version": "0.9.18
|
|
3
|
+
"version": "0.9.18",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
|
|
6
6
|
"contributors": [
|
|
@@ -6,6 +6,42 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.9.18] - 2026-09-05
|
|
10
|
+
|
|
11
|
+
Cumulative release of the `0.9.18-alpha.3` through `0.9.18-alpha.7` prereleases. Per-change details remain in the unchanged prerelease sections below.
|
|
12
|
+
|
|
13
|
+
### Breaking Changes
|
|
14
|
+
|
|
15
|
+
- Workflow-stage Intercom targets require root-anchored `workflow:<rootRunId>/<segment>[/<segment>...]` paths. Legacy `<runId>:<stageKey>` targets fail with a migration hint.
|
|
16
|
+
- Removed `fastMode` from task results, stage snapshots, fallback metadata, and durable records. Pin canonical `-fast` model IDs explicitly; normal and fast IDs remain separate ordered fallback candidates.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Added checksum-pinned embedded PostgreSQL on Linux musl x64/ARM64 and Windows ARM64, retaining explicit database URL precedence, Docker fallback, privilege dropping, and process-owned shutdown. Windows ARM64 uses PostgreSQL x64 through Windows 11 emulation.
|
|
21
|
+
- Launch persists possible literal, patterned, and nested-child stage paths. Sticky sends reach future matches, root broadcasts reach live and future descendants until termination, and `intercom list` shows possible targets and queued counts. Valid unknown paths queue with warnings and settle as undeliverable only if never matched.
|
|
22
|
+
- Status, list/detail views, and the `BACKGROUND` panel identify materialized pending stages, expose exact targets only when delivery is available, and distinguish unavailable delivery explicitly.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Heartbeat and stage guidance use one authoritative path broadcast for shared scope changes, teach discovery/globs/live-only asks, and distinguish orchestration from cross-cutting extension policy with explicit companion dependencies.
|
|
27
|
+
- Goal/Ralph orchestration, Ralph prompt engineering/research, and Open Claude Design use Astra at high. Goal reviewers and Ralph reviewer B use Astra at xhigh; reviewer A uses Fable 5.1 at high. Added both model families to role-specific fallback chains and updated Ralph research/reviewer ordering.
|
|
28
|
+
- Guidance honors task-scoped inline requests, reconciles active runs without duplicate execution, chooses verification by browser/terminal/desktop environment, supports offline qlty setup, and requires verified hosted links for authorized GitHub media uploads. Model-pinning advice consults measured task-specific evals alongside role guidance.
|
|
29
|
+
- Expanded the prompt-engineering skill with sourced Astra prompting/API migration guidance and separate GPT-5.6, GPT-5.5, Fable 5.1, Fable 5, Opus 5, Opus 4.8, and Sonnet 5 guides. Shared instructions cover selective references, proportionate verification, permission boundaries, and completion criteria.
|
|
30
|
+
- Stage chat uses the same jump-to-latest copy and shortcut as fullscreen chat.
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- Fixed invocation-owned stage groups, collision-free identities, durable-resume identity preservation, and isolated Goal/Ralph reviewers. Pending target/ID displays wrap without truncating usable addresses; ended runs no longer advertise delivery, and narrow widgets preserve tool/elapsed metadata with accurate overflow counts ([#2784](https://github.com/bastani-inc/atomic/issues/2784)).
|
|
35
|
+
- Tool-only workflows no longer produce `ZERO_STAGES` warnings or advertise tool nodes as chat-stage targets.
|
|
36
|
+
- Structured-output exhaustion now advances the model fallback chain. Each candidate gets the prompt plus three corrective follow-ups; failed attempts remain recorded and successful model metadata persists immediately ([#2812](https://github.com/bastani-inc/atomic/issues/2812)).
|
|
37
|
+
- Exhausted queued Intercom delivery fails its stage deterministically without model retries or fallback. The first failure settles readiness once, preserves queued steering, disposes the refused session, and handles pre-latched failures and late drains safely.
|
|
38
|
+
- Durability degradation uses display-only warnings in interactive/RPC sessions and actionable console diagnostics in headless mode. Pending-message sweeps skip unrelated runs, deduplicate interactive warnings, and preserve messages for recovery.
|
|
39
|
+
- In-flight resume, catalog preparation, and completed-run opening retain the backend selected during initialization rather than failing after concurrent mutable-state changes.
|
|
40
|
+
- Targeted durable-tool aborts retain exact unfinished-tool identity and an inspection-only cancellation frontier. Resume, DBOS hydration, and session restoration replay completed work and retry that tool without fabricating model stages. Invalid or ambiguous checkpoint state fails before callbacks; older state requires typed checkpoint proof, not transcript inference.
|
|
41
|
+
- Graph parent replacement rejects self-edges and cycles before mutation. Tool-frontier continuations reject completion that skips the unfinished tool and reject replacement model/task or child-workflow work before side effects, including worktree setup. Recovery evidence and completed callbacks remain intact.
|
|
42
|
+
|
|
43
|
+
## [0.9.18-alpha.7] - 2026-09-05
|
|
44
|
+
|
|
9
45
|
### Fixed
|
|
10
46
|
|
|
11
47
|
- Pending-stage Intercom settlement now skips unrelated runs with no messages to settle. Genuine sweep failures produce one display-only warning per distinct message in interactive sessions instead of repeated console stack traces; headless sessions retain console diagnostics, and pending messages remain available for recovery.
|
package/docs/development.md
CHANGED
|
@@ -96,6 +96,23 @@ npm run test:scripts # Run the repository script tests under node -
|
|
|
96
96
|
npm run test --workspace=@bastani/atomic -- test/specific.test.ts
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
Root Vitest projects install a fresh in-memory durable backend before every test.
|
|
100
|
+
Durability initialization imports the backend and its process owner rather than
|
|
101
|
+
preloading the DBOS factory or the Atomic host. A test that needs host prototype
|
|
102
|
+
installers must import those real modules explicitly rather than depend on a
|
|
103
|
+
side effect of shared setup. Test-local backend overrides still use the factory's
|
|
104
|
+
injection seam, and the next test receives a fresh backend without resetting
|
|
105
|
+
unrelated initialization or warning state. Keep the global artifact/native setups,
|
|
106
|
+
default isolation, worker sizing and timeout budgets unchanged when measuring
|
|
107
|
+
test cost. See the [CI measurements](https://github.com/bastani-inc/atomic/blob/main/docs/ci.md#current-critical-path-measured-september-5-2026)
|
|
108
|
+
for local gains and the remaining hosted Linux/Windows validation.
|
|
109
|
+
|
|
110
|
+
CI runs the complete root unit and integration suites in independent Linux and
|
|
111
|
+
Windows jobs. Each builds its own native and package prerequisites; both required
|
|
112
|
+
result gates wait for every work job and reject failures, cancellations and skips.
|
|
113
|
+
This trades duplicated setup for earlier integration feedback without changing
|
|
114
|
+
test isolation, coverage or retries.
|
|
115
|
+
|
|
99
116
|
## Deterministic installs
|
|
100
117
|
|
|
101
118
|
`@bastani/atomic` ships `packages/coding-agent/npm-shrinkwrap.json` so package-manager installs resolve the same dependency tree every time. Contributors working from a source checkout can validate that the checked-in shrinkwrap is up to date with:
|
package/docs/intercom.md
CHANGED
|
@@ -169,6 +169,15 @@ intercom({ action: "join", group: "api-review" })
|
|
|
169
169
|
|
|
170
170
|
Joining is additive: existing memberships remain active, and the broker updates presence without changing the session ID. Use `intercom({ action: "groups" })` to discover all available names and membership markers. `intercom({ action: "leave", group: "api-review" })` removes only that membership; `intercom({ action: "leave" })` resets to the home group resolved at startup. Rejected or unacknowledged changes leave client and inheritance state unchanged. Ordinary delivery requires a shared membership, while `contact_supervisor` retains its capability-based cross-group path.
|
|
171
171
|
|
|
172
|
+
An ordinary host session can join several workflow invocation groups and send to
|
|
173
|
+
each group's `workflow:<rootRunId>/**` target, including after a broker reconnect.
|
|
174
|
+
Reconnection preserves the session's startup identity separately from its joined
|
|
175
|
+
memberships; joining a workflow does not turn the host into a workflow worker.
|
|
176
|
+
Groups explicitly left stay absent after reconnect; the startup identity is not
|
|
177
|
+
automatically added back to the membership list.
|
|
178
|
+
Actual workflow workers retain their original invocation boundary across reconnects:
|
|
179
|
+
joining another group does not grant that invocation's parent-control authority.
|
|
180
|
+
|
|
172
181
|
Sent and received messages are recorded in session history as `intercom_sent` / `intercom_received` entries.
|
|
173
182
|
|
|
174
183
|
### Targeting Sessions and Pending Workflow Stages
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.9.18
|
|
3
|
+
"version": "0.9.18",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bastani/atomic",
|
|
9
|
-
"version": "0.9.18
|
|
9
|
+
"version": "0.9.18",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@bastani/atomic-natives": "0.9.18
|
|
13
|
-
"@bastani/pi-ai": "0.9.18
|
|
12
|
+
"@bastani/atomic-natives": "0.9.18",
|
|
13
|
+
"@bastani/pi-ai": "0.9.18",
|
|
14
14
|
"@dbos-inc/dbos-sdk": "4.25.14",
|
|
15
15
|
"@earendil-works/pi-agent-core": "0.85.1",
|
|
16
16
|
"@earendil-works/pi-client": "0.85.1",
|
|
@@ -517,18 +517,18 @@
|
|
|
517
517
|
}
|
|
518
518
|
},
|
|
519
519
|
"node_modules/@bastani/atomic-natives": {
|
|
520
|
-
"version": "0.9.18
|
|
521
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.18
|
|
520
|
+
"version": "0.9.18",
|
|
521
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.18.tgz",
|
|
522
522
|
"license": "MIT",
|
|
523
523
|
"optionalDependencies": {
|
|
524
|
-
"@bastani/atomic-natives-darwin-arm64": "0.9.18
|
|
525
|
-
"@bastani/atomic-natives-darwin-x64": "0.9.18
|
|
526
|
-
"@bastani/atomic-natives-linux-arm64-gnu": "0.9.18
|
|
527
|
-
"@bastani/atomic-natives-linux-arm64-musl": "0.9.18
|
|
528
|
-
"@bastani/atomic-natives-linux-x64-gnu": "0.9.18
|
|
529
|
-
"@bastani/atomic-natives-linux-x64-musl": "0.9.18
|
|
530
|
-
"@bastani/atomic-natives-win32-arm64-msvc": "0.9.18
|
|
531
|
-
"@bastani/atomic-natives-win32-x64-msvc": "0.9.18
|
|
524
|
+
"@bastani/atomic-natives-darwin-arm64": "0.9.18",
|
|
525
|
+
"@bastani/atomic-natives-darwin-x64": "0.9.18",
|
|
526
|
+
"@bastani/atomic-natives-linux-arm64-gnu": "0.9.18",
|
|
527
|
+
"@bastani/atomic-natives-linux-arm64-musl": "0.9.18",
|
|
528
|
+
"@bastani/atomic-natives-linux-x64-gnu": "0.9.18",
|
|
529
|
+
"@bastani/atomic-natives-linux-x64-musl": "0.9.18",
|
|
530
|
+
"@bastani/atomic-natives-win32-arm64-msvc": "0.9.18",
|
|
531
|
+
"@bastani/atomic-natives-win32-x64-msvc": "0.9.18"
|
|
532
532
|
},
|
|
533
533
|
"engines": {
|
|
534
534
|
"bun": ">=1.4.0",
|
|
@@ -536,8 +536,8 @@
|
|
|
536
536
|
}
|
|
537
537
|
},
|
|
538
538
|
"node_modules/@bastani/atomic-natives-darwin-arm64": {
|
|
539
|
-
"version": "0.9.18
|
|
540
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.18
|
|
539
|
+
"version": "0.9.18",
|
|
540
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.18.tgz",
|
|
541
541
|
"license": "MIT",
|
|
542
542
|
"os": [
|
|
543
543
|
"darwin"
|
|
@@ -548,8 +548,8 @@
|
|
|
548
548
|
"optional": true
|
|
549
549
|
},
|
|
550
550
|
"node_modules/@bastani/atomic-natives-darwin-x64": {
|
|
551
|
-
"version": "0.9.18
|
|
552
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.18
|
|
551
|
+
"version": "0.9.18",
|
|
552
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.18.tgz",
|
|
553
553
|
"license": "MIT",
|
|
554
554
|
"os": [
|
|
555
555
|
"darwin"
|
|
@@ -560,8 +560,8 @@
|
|
|
560
560
|
"optional": true
|
|
561
561
|
},
|
|
562
562
|
"node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
|
|
563
|
-
"version": "0.9.18
|
|
564
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.18
|
|
563
|
+
"version": "0.9.18",
|
|
564
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.18.tgz",
|
|
565
565
|
"license": "MIT",
|
|
566
566
|
"os": [
|
|
567
567
|
"linux"
|
|
@@ -575,8 +575,8 @@
|
|
|
575
575
|
"optional": true
|
|
576
576
|
},
|
|
577
577
|
"node_modules/@bastani/atomic-natives-linux-arm64-musl": {
|
|
578
|
-
"version": "0.9.18
|
|
579
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.18
|
|
578
|
+
"version": "0.9.18",
|
|
579
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.18.tgz",
|
|
580
580
|
"license": "MIT",
|
|
581
581
|
"os": [
|
|
582
582
|
"linux"
|
|
@@ -590,8 +590,8 @@
|
|
|
590
590
|
"optional": true
|
|
591
591
|
},
|
|
592
592
|
"node_modules/@bastani/atomic-natives-linux-x64-gnu": {
|
|
593
|
-
"version": "0.9.18
|
|
594
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.18
|
|
593
|
+
"version": "0.9.18",
|
|
594
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.18.tgz",
|
|
595
595
|
"license": "MIT",
|
|
596
596
|
"os": [
|
|
597
597
|
"linux"
|
|
@@ -605,8 +605,8 @@
|
|
|
605
605
|
"optional": true
|
|
606
606
|
},
|
|
607
607
|
"node_modules/@bastani/atomic-natives-linux-x64-musl": {
|
|
608
|
-
"version": "0.9.18
|
|
609
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.18
|
|
608
|
+
"version": "0.9.18",
|
|
609
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.18.tgz",
|
|
610
610
|
"license": "MIT",
|
|
611
611
|
"os": [
|
|
612
612
|
"linux"
|
|
@@ -620,8 +620,8 @@
|
|
|
620
620
|
"optional": true
|
|
621
621
|
},
|
|
622
622
|
"node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
|
|
623
|
-
"version": "0.9.18
|
|
624
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.18
|
|
623
|
+
"version": "0.9.18",
|
|
624
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.18.tgz",
|
|
625
625
|
"license": "MIT",
|
|
626
626
|
"os": [
|
|
627
627
|
"win32"
|
|
@@ -632,8 +632,8 @@
|
|
|
632
632
|
"optional": true
|
|
633
633
|
},
|
|
634
634
|
"node_modules/@bastani/atomic-natives-win32-x64-msvc": {
|
|
635
|
-
"version": "0.9.18
|
|
636
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.18
|
|
635
|
+
"version": "0.9.18",
|
|
636
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.18.tgz",
|
|
637
637
|
"license": "MIT",
|
|
638
638
|
"os": [
|
|
639
639
|
"win32"
|
|
@@ -644,8 +644,8 @@
|
|
|
644
644
|
"optional": true
|
|
645
645
|
},
|
|
646
646
|
"node_modules/@bastani/pi-ai": {
|
|
647
|
-
"version": "0.9.18
|
|
648
|
-
"resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.18
|
|
647
|
+
"version": "0.9.18",
|
|
648
|
+
"resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.18.tgz",
|
|
649
649
|
"license": "MIT",
|
|
650
650
|
"dependencies": {
|
|
651
651
|
"@anthropic-ai/sdk": "0.91.1",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.9.18
|
|
3
|
+
"version": "0.9.18",
|
|
4
4
|
"description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"atomicConfig": {
|
|
@@ -79,8 +79,8 @@
|
|
|
79
79
|
"prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@bastani/atomic-natives": "0.9.18
|
|
83
|
-
"@bastani/pi-ai": "0.9.18
|
|
82
|
+
"@bastani/atomic-natives": "0.9.18",
|
|
83
|
+
"@bastani/pi-ai": "0.9.18",
|
|
84
84
|
"@dbos-inc/dbos-sdk": "4.25.14",
|
|
85
85
|
"@earendil-works/pi-agent-core": "0.85.1",
|
|
86
86
|
"@earendil-works/pi-client": "0.85.1",
|