@bastani/atomic 0.9.52-alpha.1 → 0.9.53-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/package.json +1 -1
  5. package/dist/builtin/subagents/src/extension/index.bundle.mjs +13 -0
  6. package/dist/builtin/web-access/CHANGELOG.md +6 -0
  7. package/dist/builtin/web-access/package.json +1 -1
  8. package/dist/builtin/workflows/CHANGELOG.md +11 -0
  9. package/dist/builtin/workflows/package.json +1 -1
  10. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  11. package/dist/core/agent-session-extension-bindings.js +5 -0
  12. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  13. package/dist/core/agent-session-types.d.ts +6 -0
  14. package/dist/core/agent-session-types.d.ts.map +1 -1
  15. package/dist/core/agent-session-types.js.map +1 -1
  16. package/dist/core/extensions/runner.d.ts +6 -0
  17. package/dist/core/extensions/runner.d.ts.map +1 -1
  18. package/dist/core/extensions/runner.js +9 -0
  19. package/dist/core/extensions/runner.js.map +1 -1
  20. package/dist/core/tasks/supervisor.d.ts +8 -0
  21. package/dist/core/tasks/supervisor.d.ts.map +1 -1
  22. package/dist/core/tasks/supervisor.js +49 -0
  23. package/dist/core/tasks/supervisor.js.map +1 -1
  24. package/dist/modes/interactive/components/footer.d.ts +5 -0
  25. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  26. package/dist/modes/interactive/components/footer.js +13 -4
  27. package/dist/modes/interactive/components/footer.js.map +1 -1
  28. package/dist/modes/interactive/components/task-inspector.d.ts +7 -0
  29. package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -1
  30. package/dist/modes/interactive/components/task-inspector.js +36 -4
  31. package/dist/modes/interactive/components/task-inspector.js.map +1 -1
  32. package/docs/background-tasks.md +2 -0
  33. package/npm-shrinkwrap.json +36 -36
  34. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.9.53] - 2026-10-29
6
+
7
+ Task pages show their own status lines, and a dependency security fix.
8
+
9
+ - **A task's own status lines:** a subagent task's fullscreen detail and transcript pages show the extension statuses its session writes, live, and clear them when it ends ([#4103](https://github.com/bastani-inc/atomic/issues/4103))
10
+ - **Security update:** the bundled `@hono/node-server` moves to 2.1.5, which fixes a middleware bypass on static paths ([GHSA-rmxm-3fg6-px4f](https://github.com/advisories/GHSA-rmxm-3fg6-px4f))
11
+
12
+ ### Fixed
13
+
14
+ - A subagent task's fullscreen detail and transcript pages now show the extension status lines (such as a tokens-per-second counter) that the task's own session sets, in a row beneath the page footer that updates live and clears when the task ends. Status writes from a subagent child's extensions used to be dropped, so those pages showed no extension statuses at all; they are still kept out of the chat's own footer ([#4103](https://github.com/bastani-inc/atomic/issues/4103))
15
+ - Updated the bundled `@hono/node-server` dependency to 2.1.5, which fixes `serveStatic` decoding a request path a second time, a way to bypass middleware on static paths ([GHSA-rmxm-3fg6-px4f](https://github.com/advisories/GHSA-rmxm-3fg6-px4f))
16
+
17
+ ## [0.9.53-alpha.1] - 2026-10-29
18
+
19
+ Task pages show their own status lines, and a dependency security fix.
20
+
21
+ - **A task's own status lines:** a subagent task's fullscreen detail and transcript pages show the extension statuses its session writes, live, and clear them when it ends ([#4103](https://github.com/bastani-inc/atomic/issues/4103))
22
+ - **Security update:** the bundled `@hono/node-server` moves to 2.1.5, which fixes a middleware bypass on static paths ([GHSA-rmxm-3fg6-px4f](https://github.com/advisories/GHSA-rmxm-3fg6-px4f))
23
+
24
+ ### Fixed
25
+
26
+ - A subagent task's fullscreen detail and transcript pages now show the extension status lines (such as a tokens-per-second counter) that the task's own session sets, in a row beneath the page footer that updates live and clears when the task ends. Status writes from a subagent child's extensions used to be dropped, so those pages showed no extension statuses at all; they are still kept out of the chat's own footer ([#4103](https://github.com/bastani-inc/atomic/issues/4103))
27
+ - Updated the bundled `@hono/node-server` dependency to 2.1.5, which fixes `serveStatic` decoding a request path a second time, a way to bypass middleware on static paths ([GHSA-rmxm-3fg6-px4f](https://github.com/advisories/GHSA-rmxm-3fg6-px4f))
28
+
5
29
  ## [0.9.51] - 2026-10-29
6
30
 
7
31
  Windows sessions resume as printed, and stay open.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/intercom",
3
- "version": "0.9.52-alpha.1",
3
+ "version": "0.9.53-alpha.1",
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.52-alpha.1",
3
+ "version": "0.9.53-alpha.1",
4
4
  "private": true,
5
5
  "description": "Atomic's pi-compatible MCP integration for server connections, OAuth, tools, resources, and terminal management.",
6
6
  "contributors": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/subagents",
3
- "version": "0.9.52-alpha.1",
3
+ "version": "0.9.53-alpha.1",
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": [
@@ -10864,6 +10864,8 @@ ${launch.message}` : input.task,
10864
10864
  }
10865
10865
  } : {}
10866
10866
  }),
10867
+ setExtensionStatus: context.setExtensionStatus,
10868
+ clearExtensionStatuses: context.clearExtensionStatuses,
10867
10869
  bindChildSession: (session) => {
10868
10870
  childSession = {
10869
10871
  childSessionId: session.sessionId,
@@ -13069,6 +13071,7 @@ class SubagentControlRuntime {
13069
13071
  let effectiveModelId = candidateModelId;
13070
13072
  let effectiveThinking = initialThinkingForAttempt(candidateModelId, configuredThinking);
13071
13073
  let transcriptManager;
13074
+ let statusesOpen = true;
13072
13075
  let attemptedModels = candidateModelId ? [candidateModelId] : [];
13073
13076
  const selectedModel = candidate.model ?? admitted.policy.model;
13074
13077
  if (selectedModel)
@@ -13206,6 +13209,13 @@ class SubagentControlRuntime {
13206
13209
  excludedTools: admitted.policy.excludedTools ? [...admitted.policy.excludedTools] : undefined
13207
13210
  };
13208
13211
  const inherited = admitted.spec.parent?.getChildSessionOptions?.(childOptions) ?? childOptions;
13212
+ const extensionBindings = taskHooks?.setExtensionStatus ? {
13213
+ ...inherited.extensionBindings,
13214
+ onStatus: (statusKey, text) => {
13215
+ if (statusesOpen)
13216
+ taskHooks.setExtensionStatus?.(statusKey, text);
13217
+ }
13218
+ } : inherited.extensionBindings;
13209
13219
  const agentDir = inherited.agentDir ?? getAgentDir2();
13210
13220
  const settingsManager = inherited.settingsManager ?? SettingsManager.create(admitted.policy.cwd, agentDir);
13211
13221
  const resourceLoader = new DefaultResourceLoader(inProcessChildResourceLoaderOptions({
@@ -13232,6 +13242,7 @@ class SubagentControlRuntime {
13232
13242
  created = {
13233
13243
  session: (await createAgentSession({
13234
13244
  ...inherited,
13245
+ extensionBindings,
13235
13246
  customTools: admitted.policy.customTools ?? inherited.customTools,
13236
13247
  resourceLoader,
13237
13248
  resourceAdmissionSignal: AbortSignal.any([signals.abort, signals.interrupt]),
@@ -13486,6 +13497,8 @@ class SubagentControlRuntime {
13486
13497
  unsubscribe?.();
13487
13498
  } catch {}
13488
13499
  const settleTranscript = () => {
13500
+ statusesOpen = false;
13501
+ taskHooks?.clearExtensionStatuses?.();
13489
13502
  if (transcriptManager !== undefined)
13490
13503
  taskHooks?.bindTranscript?.(settledTranscript(transcriptManager));
13491
13504
  };
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.52] - 2026-10-29
8
+
9
+ ### Fixed
10
+
11
+ - `web_search` no longer ends with `Search curation cancelled (stale).` when the search curator is enabled but cannot open (for example on a machine with no desktop browser), or when the session has no human to answer it, such as a subagent or workflow stage. It returns the raw results, with a note that points to `/curator off` when the curator failed to open. When no search provider is reachable, the error now names the `EXA_API_KEY`, `PERPLEXITY_API_KEY`, and `GEMINI_API_KEY` environment variables, the `exaApiKey`, `perplexityApiKey`, and `geminiApiKey` fields in `~/.atomic/web-search.json`, and `/curator` ([#4087](https://github.com/bastani-inc/atomic/issues/4087)).
12
+
7
13
  ## [0.9.52-alpha.1] - 2026-10-29
8
14
 
9
15
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/web-access",
3
- "version": "0.9.52-alpha.1",
3
+ "version": "0.9.53-alpha.1",
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,17 @@ 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.52] - 2026-10-29
10
+
11
+ Stage chats show their own status lines, and web search keeps its results.
12
+
13
+ - **A stage chat's own status lines:** an attached stage chat's footer shows the extension statuses its stage's session writes, such as a tokens-per-second counter, and no longer the main session's ([#4094](https://github.com/bastani-inc/atomic/issues/4094))
14
+ - **Web search results that arrive:** `web_search` returns its results when the search curator can't open or nobody can answer it, instead of `Search curation cancelled (stale).`, and says which keys or settings to configure when no search provider works ([#4087](https://github.com/bastani-inc/atomic/issues/4087))
15
+
16
+ ### Fixed
17
+
18
+ - An attached stage chat's footer now shows the extension status lines (such as a tokens-per-second counter) written by that stage's own session, and no longer shows the main session's. Status writes from a stage's extensions used to be dropped, while the chat footer displayed the main chat's statuses: a sleeping stage showed a live counter driven by the main agent, and a streaming stage showed a stale one. The main chat footer keeps showing only the main session's statuses ([#4094](https://github.com/bastani-inc/atomic/issues/4094))
19
+
9
20
  ## [0.9.52-alpha.1] - 2026-10-29
10
21
 
11
22
  Stage chats show their own status lines, and web search keeps its results.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/workflows",
3
- "version": "0.9.52-alpha.1",
3
+ "version": "0.9.53-alpha.1",
4
4
  "private": true,
5
5
  "description": "Atomic extension for multi-stage workflow authoring and execution.",
6
6
  "contributors": [
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-extension-bindings.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session-extension-bindings.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,EAGN,KAAK,mBAAmB,EAExB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ7F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD,OAAO,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAA0B,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuBnF,cAAM,wBAAwB;IAC7B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,QAAQ,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;IAC3D,OAAO,CAAC,gBAAgB,CAAS;IACjC,QAAQ,CAAC,WAAW,cAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAS;IAE1B,YACC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,OAAO,EACvB,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAMrC;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE9C;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEnD;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,IAAI,CAgBpC;IAED,eAAe,IAAI,IAAI,CAItB;IAED,mBAAmB,IAAI,IAAI,CAI1B;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtC;IAED,OAAO,IAAI,IAAI,CAKd;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;YAEa,OAAO;IAYrB,OAAO,CAAC,MAAM;CAOd;AA2GD,wBAAsB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCnG;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAaD,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnH;AAED,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,KAAK,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;CACvB,CAAC,CAED;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAOzF;AAgBD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAiBzF;AAED,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,wBAAsB,gCAAgC,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BxF;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,eAAe,EACvB,WAAW,CAAC,EAAE,wBAAwB,EACtC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,EACpC,cAAc,CAAC,EAAE,mBAAmB,GAClC,IAAI,CA4UN;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnG;AAkUD,qGAAqG;AACrG,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhH;AAMD;;;GAGG;AAEH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;CAYhD,CAAC"}
@@ -157,6 +157,7 @@ const failedExtensionStarts = new WeakSet();
157
157
  // Binding intent is session-local and survives runner reloads, even when a host object is reused.
158
158
  const humanInputBindingRevisions = new WeakMap();
159
159
  const presentationOnlyBindings = new WeakMap();
160
+ const statusSinks = new WeakMap();
160
161
  const sessionSummaryBackfills = new WeakSet();
161
162
  function startExtensions(session, runner, loader, event, finalize) {
162
163
  const existing = extensionStarts.get(runner);
@@ -225,6 +226,8 @@ export async function bindExtensions(bindings) {
225
226
  }
226
227
  if (bindings.isPresentationOnly !== undefined)
227
228
  presentationOnlyBindings.set(this, bindings.isPresentationOnly);
229
+ if (bindings.onStatus !== undefined)
230
+ statusSinks.set(this, bindings.onStatus);
228
231
  if (bindings.commandContextActions !== undefined) {
229
232
  this._extensionCommandContextActions = bindings.commandContextActions;
230
233
  }
@@ -288,6 +291,7 @@ export function _applyExtensionBindings(runner) {
288
291
  runner.setHostBindings(this._extensionHumanInput, this._extensionDiagnosticListener, humanInputBindingRevisions.get(this));
289
292
  runner.setUIPromptObserver(uiPromptBindings.get(this));
290
293
  runner.setUIContext(this._extensionUIContext, this._extensionMode, presentationOnlyBindings.get(this) ?? false);
294
+ runner.setStatusSink(statusSinks.get(this));
291
295
  runner.bindCommandContext(this._extensionCommandContextActions);
292
296
  runner.bindChildSessionOptions(liveChildSessionOptions(this));
293
297
  runner.bindWorkflowJournal(this._workflowJournal, this._storageAgentDir);
@@ -870,6 +874,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
870
874
  this._bindExtensionCore(candidateRunner, publication, startupToolNames, startupLoadout);
871
875
  candidateRunner.setHostBindings(this._extensionHumanInput, this._extensionDiagnosticListener, humanInputBindingRevisions.get(this));
872
876
  candidateRunner.setUIContext(this._extensionUIContext, this._extensionMode, presentationOnlyBindings.get(this) ?? false);
877
+ candidateRunner.setStatusSink(statusSinks.get(this));
873
878
  candidateRunner.bindCommandContext(this._extensionCommandContextActions);
874
879
  candidateRunner.bindChildSessionOptions(liveChildSessionOptions(this));
875
880
  candidateRunner.bindWorkflowJournal(this._workflowJournal, this._storageAgentDir);