@bastani/atomic 0.9.13-alpha.2 → 0.9.13-alpha.3
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 +14 -0
- package/README.md +1 -1
- package/dist/builtin/i-have-adhd/package.json +1 -1
- package/dist/builtin/intercom/CHANGELOG.md +14 -0
- package/dist/builtin/intercom/README.md +12 -12
- package/dist/builtin/intercom/incoming-message-delivery.ts +1 -1
- package/dist/builtin/intercom/index.ts +1 -1
- package/dist/builtin/intercom/intercom-tool.ts +1 -1
- package/dist/builtin/intercom/intercom-utils.ts +3 -6
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/result-renderers.ts +1 -1
- package/dist/builtin/intercom/session-target.ts +1 -15
- package/dist/builtin/intercom/skills/intercom/SKILL.md +6 -6
- package/dist/builtin/intercom/terminal-ordering-barrier.ts +2 -2
- package/dist/builtin/intercom/ui/inline-message.ts +7 -5
- package/dist/builtin/intercom/ui/session-list.ts +23 -10
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +19 -0
- package/dist/builtin/subagents/README.md +29 -73
- package/dist/builtin/subagents/package.json +2 -2
- package/dist/builtin/subagents/prompts/parallel-cleanup.md +1 -1
- package/dist/builtin/subagents/prompts/parallel-review.md +1 -1
- package/dist/builtin/subagents/prompts/review-loop.md +2 -2
- package/dist/builtin/subagents/skills/subagent/SKILL.md +23 -59
- package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
- package/dist/builtin/subagents/src/extension/control-notices.ts +2 -3
- package/dist/builtin/subagents/src/extension/doctor.ts +2 -14
- package/dist/builtin/subagents/src/extension/fanout-child.ts +1 -17
- package/dist/builtin/subagents/src/extension/index.ts +9 -70
- package/dist/builtin/subagents/src/extension/notification-content.ts +1 -1
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +2 -2
- package/dist/builtin/subagents/src/extension/schemas.ts +2 -8
- package/dist/builtin/subagents/src/extension/tool-description.ts +2 -3
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +1 -1
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +5 -46
- package/dist/builtin/subagents/src/runs/{background → foreground}/completion-notification.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +25 -88
- package/dist/builtin/subagents/src/runs/{background → foreground}/notify.ts +5 -5
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -28
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +3 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +0 -5
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +30 -20
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +4 -4
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +0 -13
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +104 -48
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +1 -1
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +5 -5
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +0 -7
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +0 -10
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +3 -108
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +0 -4
- package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +1 -1
- package/dist/builtin/subagents/src/shared/formatters.ts +3 -5
- package/dist/builtin/subagents/src/shared/model-resolution.ts +78 -0
- package/dist/builtin/subagents/src/shared/status-format.ts +4 -11
- package/dist/builtin/subagents/src/shared/types-config.ts +10 -9
- package/dist/builtin/subagents/src/shared/types-nested.ts +127 -0
- package/dist/builtin/subagents/src/shared/types-results.ts +2 -8
- package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -9
- package/dist/builtin/subagents/src/shared/types.ts +1 -1
- package/dist/builtin/subagents/src/shared/utils.ts +1 -109
- package/dist/builtin/subagents/src/slash/slash-commands.ts +7 -17
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -252
- package/dist/builtin/subagents/src/tui/render-layout.ts +4 -4
- package/dist/builtin/subagents/src/tui/render-result.ts +0 -9
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -34
- package/dist/builtin/subagents/src/tui/render.ts +0 -2
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +12 -0
- package/dist/builtin/workflows/README.md +3 -3
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/durable/backend.ts +11 -0
- package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +63 -25
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +166 -25
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +42 -24
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +2 -1
- package/dist/builtin/workflows/src/durable/run-timing.ts +28 -7
- package/dist/builtin/workflows/src/durable/scoped-backend.ts +4 -0
- package/dist/builtin/workflows/src/durable/targeted-inspection.ts +110 -0
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +2 -2
- package/dist/builtin/workflows/src/engine/runtime.ts +19 -2
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +3 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +680 -152
- package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +6 -0
- package/dist/builtin/workflows/src/extension/ui-surface.ts +2 -0
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +6 -1
- package/dist/builtin/workflows/src/extension/workflow-targets.ts +18 -10
- package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +31 -16
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +75 -3
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +53 -6
- package/dist/builtin/workflows/src/runs/background/run-inspect.ts +5 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +94 -60
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +7 -7
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +25 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +4 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +2 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +142 -4
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +2 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-session-heartbeat.ts +88 -0
- package/dist/builtin/workflows/src/tui/run-detail.ts +25 -12
- package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +1 -0
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +16 -5
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +2 -1
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +8 -4
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +5 -0
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-summary.d.ts +21 -0
- package/dist/core/agent-session-summary.d.ts.map +1 -0
- package/dist/core/agent-session-summary.js +156 -0
- package/dist/core/agent-session-summary.js.map +1 -0
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +0 -4
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-transfer.d.ts.map +1 -1
- package/dist/core/agent-session-transfer.js +0 -2
- package/dist/core/agent-session-transfer.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +6 -0
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session.d.ts +7 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +8 -5
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -2
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/index.d.ts +1 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +1 -0
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/session-summarization.d.ts +41 -0
- package/dist/core/compaction/session-summarization.d.ts.map +1 -0
- package/dist/core/compaction/session-summarization.js +97 -0
- package/dist/core/compaction/session-summarization.js.map +1 -0
- package/dist/core/extensions/ui-types.d.ts +2 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +3 -1
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +9 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +24 -1
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js +48 -0
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +10 -0
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +10 -1
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +3 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +5 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-types.d.ts +4 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.js +2 -2
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/bash.d.ts +0 -15
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +3 -81
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/fetch-url.d.ts +12 -0
- package/dist/core/tools/fetch-url.d.ts.map +1 -1
- package/dist/core/tools/fetch-url.js +76 -10
- package/dist/core/tools/fetch-url.js.map +1 -1
- package/dist/core/tools/index.js +4 -4
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/session-temp-dir.d.ts +2 -2
- package/dist/core/tools/session-temp-dir.d.ts.map +1 -1
- package/dist/core/tools/session-temp-dir.js +6 -7
- package/dist/core/tools/session-temp-dir.js.map +1 -1
- package/dist/core/usage-totals.js +1 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/host-session-picker.d.ts.map +1 -1
- package/dist/modes/interactive/components/host-session-picker.js +1 -0
- package/dist/modes/interactive/components/host-session-picker.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.js +29 -4
- package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector-content.js +6 -0
- package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +4 -1
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/docs/environment-variables.md +1 -1
- package/docs/intercom.md +20 -21
- package/docs/quickstart.md +5 -1
- package/docs/sdk.md +1 -1
- package/docs/session-format.md +15 -0
- package/docs/sessions.md +8 -0
- package/docs/settings.md +6 -0
- package/docs/subagents.md +19 -31
- package/docs/tools.md +3 -5
- package/docs/usage.md +1 -1
- package/docs/windows.md +1 -1
- package/docs/workflows.md +60 -32
- package/npm-shrinkwrap.json +29 -29
- package/package.json +2 -2
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +0 -331
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +0 -161
- package/dist/builtin/subagents/src/runs/inprocess/background-single.ts +0 -195
- package/dist/builtin/subagents/src/runs/inprocess/background.ts +0 -90
- package/dist/builtin/subagents/src/shared/types-async.ts +0 -247
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +0 -217
- package/dist/builtin/subagents/src/tui/render-widget.ts +0 -366
- package/dist/core/async/format.d.ts +0 -3
- package/dist/core/async/format.d.ts.map +0 -1
- package/dist/core/async/format.js +0 -52
- package/dist/core/async/format.js.map +0 -1
- package/dist/core/async/job-manager.d.ts +0 -40
- package/dist/core/async/job-manager.d.ts.map +0 -1
- package/dist/core/async/job-manager.js +0 -293
- package/dist/core/async/job-manager.js.map +0 -1
- package/dist/core/async/session-manager.d.ts +0 -16
- package/dist/core/async/session-manager.d.ts.map +0 -1
- package/dist/core/async/session-manager.js +0 -34
- package/dist/core/async/session-manager.js.map +0 -1
- package/dist/core/async/types.d.ts +0 -23
- package/dist/core/async/types.d.ts.map +0 -1
- package/dist/core/async/types.js +0 -2
- package/dist/core/async/types.js.map +0 -1
- package/dist/core/tools/bash-async-execution.d.ts +0 -27
- package/dist/core/tools/bash-async-execution.d.ts.map +0 -1
- package/dist/core/tools/bash-async-execution.js +0 -81
- package/dist/core/tools/bash-async-execution.js.map +0 -1
- package/dist/core/tools/bash-async-jobs.d.ts +0 -30
- package/dist/core/tools/bash-async-jobs.d.ts.map +0 -1
- package/dist/core/tools/bash-async-jobs.js +0 -87
- package/dist/core/tools/bash-async-jobs.js.map +0 -1
- package/dist/core/tools/bash-async-output.d.ts +0 -13
- package/dist/core/tools/bash-async-output.d.ts.map +0 -1
- package/dist/core/tools/bash-async-output.js +0 -122
- package/dist/core/tools/bash-async-output.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.13-alpha.3] - 2026-08-13
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- The `bash` tool no longer accepts its `async` parameter, and the `__atomic_bash_job` and `__atomic_bash_job_cancel` polling and cancellation commands have been removed. Drop `async` from bash calls; run long-lived commands in a separate shell or process manager instead.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added generated session summaries to the resume picker, so `/resume` and `atomic -r` show what a conversation was about in a dedicated summary column beside the session name or first message. Atomic writes a one-line summary once the agent goes idle, reusing the session's existing model, credentials, stream function, and retry policy with a dedicated one-line prompt and no reasoning request; the stored line has its whitespace collapsed and length clamped so a long response cannot break picker layout. Each summary is persisted as a `session_summary` session entry anchored to the last user/assistant message it describes, and the picker shows it only while that message is still the newest one — a later message, or a later branch summary, retires it and the summary column shows "No summary available." instead, exactly as it does when a summary has not been generated, has failed, or is still in flight; the session name and first message are never displaced. Summaries are matched by picker search, and their token usage is counted toward session usage totals and the footer. Generation is best-effort and invisible: it is skipped for very short sessions, workflow stage sessions, and `--print`/JSON modes, it never blocks or delays a turn, it is cancelled when the next prompt starts or the session shuts down, and a slow request that outlives the conversation discards its own result rather than persisting a stale summary. Set `sessionSummary.enabled` to `false` to disable it ([#1033](https://github.com/bastani-inc/atomic/issues/1033)).
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- Removed background bash jobs and the `async` parameter from the `bash` tool. Bash commands now always run in the foreground; use a separate shell or process manager when a command must outlive the tool call. Polling and cancellation commands and automatic completion follow-ups are no longer available.
|
|
18
|
+
|
|
5
19
|
## [0.9.13-alpha.2] - 2026-08-12
|
|
6
20
|
|
|
7
21
|
### Breaking Changes
|
package/README.md
CHANGED
|
@@ -483,7 +483,7 @@ Atomic is aggressively extensible so it does not have to dictate your workflow.
|
|
|
483
483
|
|
|
484
484
|
**Composable planning and task tracking.** Use the bundled workflow/subagent/todo capabilities, write plans to files, or install a package that matches your team's process.
|
|
485
485
|
|
|
486
|
-
**
|
|
486
|
+
**Foreground bash only.** Use tmux or explicit extensions for background work. Full observability, direct interaction.
|
|
487
487
|
|
|
488
488
|
Upstream Pi's minimal-core rationale is documented in the [original blog post](https://mariozechner.at/posts/2025-11-30-pi-coding-agent/); Atomic preserves the extensibility model while also bundling first-party capabilities for common workflows.
|
|
489
489
|
|
|
@@ -4,6 +4,20 @@ All notable changes to the `pi-intercom` extension will be documented in this fi
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.13-alpha.3] - 2026-08-13
|
|
8
|
+
|
|
9
|
+
### Breaking Changes
|
|
10
|
+
|
|
11
|
+
- Removed unique-ID-prefix targeting. `send`, `ask`, and `reply` now accept only an exact full session ID or an exact case-insensitive session name.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Intercom now displays full session and message IDs everywhere: list rows, the session-list overlay, inbound message headers, reply-to lines, message-id result badges, and unnamed-session `subagent-chat-<id>` aliases.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Fixed the session-list overlay clipping full session IDs at narrow terminal widths by wrapping IDs onto dim rows and marking unavoidable truncation with a visible ellipsis; inline sender and reply-to IDs now also signal overflow.
|
|
20
|
+
|
|
7
21
|
## [0.9.13-alpha.2] - 2026-08-12
|
|
8
22
|
|
|
9
23
|
### Changed
|
|
@@ -58,7 +58,7 @@ A session becomes intercom-connected when all of these are true:
|
|
|
58
58
|
|
|
59
59
|
The session list only shows intercom-connected sessions, not every open Pi process on the machine.
|
|
60
60
|
|
|
61
|
-
If a session is unnamed, intercom exposes a runtime-only fallback alias like `subagent-chat-1a2b3c4d` so other sessions can still target it. That alias is not persisted as the session title, so resume pickers can keep showing the transcript snippet instead of a generic `session-...` name.
|
|
61
|
+
If a session is unnamed, intercom exposes a runtime-only fallback alias like `subagent-chat-1a2b3c4d-1111-4222-8333-123456789abc` so other sessions can still target it. That alias is not persisted as the session title, so resume pickers can keep showing the transcript snippet instead of a generic `session-...` name.
|
|
62
62
|
|
|
63
63
|
## Quick Start
|
|
64
64
|
|
|
@@ -78,9 +78,9 @@ The agent can list sessions and send messages using the `intercom` tool. Tool ca
|
|
|
78
78
|
// List active sessions
|
|
79
79
|
intercom({ action: "list" })
|
|
80
80
|
// → **Current session:**
|
|
81
|
-
// → • executor (20d43841) — ~/projects/api (claude-sonnet-4) [self, idle]
|
|
81
|
+
// → • executor (20d43841-1111-4222-8333-123456789abc) — ~/projects/api (claude-sonnet-4) [self, idle]
|
|
82
82
|
// → **Other sessions:**
|
|
83
|
-
// → • research (6332faab) — ~/projects/api (claude-sonnet-4) [same cwd, thinking]
|
|
83
|
+
// → • research (6332faab-1111-4222-8333-123456789abc) — ~/projects/api (claude-sonnet-4) [same cwd, thinking]
|
|
84
84
|
|
|
85
85
|
// Join a named group (it is created if no session is there yet)
|
|
86
86
|
intercom({ action: "join", group: "api-review" })
|
|
@@ -94,12 +94,12 @@ intercom({ action: "leave" })
|
|
|
94
94
|
intercom({ action: "send", to: "research", message: "Check if UserService.validate() handles null" })
|
|
95
95
|
// → Message sent to research
|
|
96
96
|
|
|
97
|
-
// The
|
|
98
|
-
intercom({ action: "ask", to: "6332faab", message: "Which validation path should I use?" })
|
|
97
|
+
// The full session ID printed by list is also a valid target
|
|
98
|
+
intercom({ action: "ask", to: "6332faab-1111-4222-8333-123456789abc", message: "Which validation path should I use?" })
|
|
99
99
|
|
|
100
100
|
// Check connection status
|
|
101
101
|
intercom({ action: "status" })
|
|
102
|
-
// → Connected: Yes, Session ID:
|
|
102
|
+
// → Connected: Yes, Session ID: abc12345-1111-4222-8333-123456789abc, Active sessions: 3
|
|
103
103
|
|
|
104
104
|
// Send with attachments (code snippets, files, or context)
|
|
105
105
|
intercom({
|
|
@@ -134,7 +134,7 @@ When a blocking `intercom.ask` targets a workflow stage that has already complet
|
|
|
134
134
|
|
|
135
135
|
When a blocking ask reaches a sibling workflow stage during an active model/tool turn, the target reserves it synchronously in the open stage generation before any asynchronous foreground-owner detach handshake. Queue insertion waits inside that reservation, and stage finalization drains it before publishing the terminal snapshot. This prevents a structured-output or other terminal tool call from overtaking a mid-turn ask. If destination-side admission genuinely cannot complete, the asker receives an exact-thread actionable error instead of consuming the full 10-minute timeout.
|
|
136
136
|
|
|
137
|
-
For delegated
|
|
137
|
+
For delegated children, queued messages and terminal lifecycle notices are ordered per child. Intercom claims the terminal child’s pre-terminal ordinary entries in FIFO order and atomically admits that prelude together with the paused, completed, or failed notice. A process-local companion bridge covers lazily loaded extensions whose event buses are distinct, while exact terminal-identity deduplication prevents double admission even when the successful terminal dispatch has no queued prelude. Failed dispatches remain retryable, and pause/resume/completion identities remain distinct. Other children’s entries remain independently queued, messages are not discarded, terminal admission does not wait for a separate model turn, and correlated ask replies still bypass unrelated queued sends.
|
|
138
138
|
|
|
139
139
|
## Workflow: Planner-Worker Coordination
|
|
140
140
|
|
|
@@ -244,7 +244,7 @@ This workflow uses Atomic's in-process subagent admission. When the runtime admi
|
|
|
244
244
|
|
|
245
245
|
`contact_supervisor` is registered from the typed admission record. The record binds the supervisor target, canonical child identity, child index, session name, and broker-issued capability to the child session; these values are not inherited from environment variables. If the parent does not grant supervisor coordination, the session falls back to the regular `intercom` tool.
|
|
246
246
|
|
|
247
|
-
The child identity remains stable across foreground continuation,
|
|
247
|
+
The child identity remains stable across foreground continuation, interruption, and cold resume. Intercom detach uses the same in-process continuation as foreground coordination, so the terminal envelope retains one canonical path.
|
|
248
248
|
|
|
249
249
|
### Three Reasons
|
|
250
250
|
|
|
@@ -334,7 +334,7 @@ The supervisor can reply with plain JSON or a fenced `json` block. If the reply
|
|
|
334
334
|
| Parameter | Type | Description |
|
|
335
335
|
|-----------|------|-------------|
|
|
336
336
|
| `action` | string | `"list"`, `"join"`, `"leave"`, `"send"`, `"ask"`, `"reply"`, `"pending"`, or `"status"` |
|
|
337
|
-
| `to` | string | Exact session name
|
|
337
|
+
| `to` | string | Exact session name or exact full session ID (for send/ask, or targeted reply) |
|
|
338
338
|
| `message` | string | Message text (for send/ask/reply) |
|
|
339
339
|
| `attachments` | array | Optional `file`, `snippet`, or `context` attachments |
|
|
340
340
|
| `replyTo` | string | Optional message ID for threading or replying to an `ask` |
|
|
@@ -362,15 +362,15 @@ Only registered in sessions where `pi-subagents` supplied the required child bri
|
|
|
362
362
|
|
|
363
363
|
**`leave`** — Moves this session back to the resolved home group from session startup. It takes no `group` parameter.
|
|
364
364
|
|
|
365
|
-
**`list`** — Returns the current session plus other active intercom-connected sessions with name,
|
|
365
|
+
**`list`** — Returns the current session plus other active intercom-connected sessions with name, full session ID, working directory, model, and live status. Every displayed full session ID can be passed directly to `send`, `ask`, or targeted `reply`.
|
|
366
366
|
|
|
367
|
-
Target lookup
|
|
367
|
+
Target lookup accepts only an exact full session ID or an exact case-insensitive session name. Targeting is also **group-scoped** — see [Groups](#groups) below.
|
|
368
368
|
|
|
369
369
|
**`send`** — Sends a message to the specified session. By default it sends immediately, including in interactive sessions. Set `confirmSend: true` in config if you want a confirmation dialog for non-reply sends. Replies that include `replyTo` skip confirmation. Returns delivery confirmation.
|
|
370
370
|
|
|
371
371
|
**`ask`** — Sends a message and waits for the recipient to reply (10-minute timeout). The reply is returned as the tool result. No confirmation dialog. Only one pending `ask` is allowed per session at a time; if several blocking requests race (parallel `ask` calls, or `ask` alongside `contact_supervisor`), one wins the reservation and each other call returns a normal "Already waiting for a reply" tool error without disturbing the pending ask. Use this when the agent needs the answer to continue working.
|
|
372
372
|
|
|
373
|
-
**`reply`** — Replies to the current intercom-triggered message if there is one. Otherwise it falls back to the single unresolved inbound ask. If multiple asks are pending, pass an exact name
|
|
373
|
+
**`reply`** — Replies to the current intercom-triggered message if there is one. Otherwise it falls back to the single unresolved inbound ask. If multiple asks are pending, pass an exact name or exact full session ID in `to`, or inspect them with `pending` first. Under the hood this is still a normal `send` with the exact `replyTo` value.
|
|
374
374
|
|
|
375
375
|
**`pending`** — Lists unresolved inbound asks with sender, message ID, elapsed time, and a short preview. Useful when replying after the original triggered turn.
|
|
376
376
|
|
|
@@ -38,7 +38,7 @@ export function createIncomingMessageSender(input: {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export function buildIncomingCustomMessage(entry: InboundMessageEntry) {
|
|
41
|
-
const senderDisplay = entry.from.name || entry.from.id
|
|
41
|
+
const senderDisplay = entry.from.name || entry.from.id;
|
|
42
42
|
const replyInstruction = entry.replyCommand ? `\n\nTo reply, use the intercom tool: ${entry.replyCommand}` : "";
|
|
43
43
|
return {
|
|
44
44
|
customType: "intercom_message" as const,
|
|
@@ -424,7 +424,7 @@ Usage:
|
|
|
424
424
|
promptSnippet: "Use to coordinate with other local agent sessions in your intercom group: list peers, send updates, ask for help, or check intercom connectivity. Groups are isolated; you can only message sessions in your own group.",
|
|
425
425
|
parameters: Type.Object({
|
|
426
426
|
action: Type.String({ description: "Action: 'list', 'join', 'leave', 'send', 'ask', 'reply', 'pending', or 'status'" }),
|
|
427
|
-
to: Type.Optional(Type.String({ description: "
|
|
427
|
+
to: Type.Optional(Type.String({ description: "Exact session name or exact full session ID (for 'send', 'ask', or targeted 'reply')" })),
|
|
428
428
|
message: Type.Optional(Type.String({ description: "Message to send (for 'send', 'ask', or 'reply' action)" })),
|
|
429
429
|
attachments: Type.Optional(Type.Array(Type.Object({
|
|
430
430
|
type: Type.Union([Type.Literal("file"), Type.Literal("snippet"), Type.Literal("context")]),
|
|
@@ -71,7 +71,7 @@ does not grant cross-group access: contact_supervisor is the only cross-group pa
|
|
|
71
71
|
description: "Action: 'list', 'join', 'leave', 'send', 'ask', 'reply', 'pending', or 'status'",
|
|
72
72
|
}),
|
|
73
73
|
to: Type.Optional(Type.String({
|
|
74
|
-
description: "
|
|
74
|
+
description: "Exact session name or exact full session ID (for 'send', 'ask', or targeted 'reply')",
|
|
75
75
|
})),
|
|
76
76
|
message: Type.Optional(Type.String({
|
|
77
77
|
description: "Message to send (for 'send', 'ask', or 'reply' action)",
|
|
@@ -345,9 +345,6 @@ export function duplicateSessionNames(sessions: SessionInfo[]): Set<string> {
|
|
|
345
345
|
.filter((name, index, names) => names.indexOf(name) !== index)
|
|
346
346
|
);
|
|
347
347
|
}
|
|
348
|
-
function shortSessionId(sessionId: string): string {
|
|
349
|
-
return sessionId.slice(0, 8);
|
|
350
|
-
}
|
|
351
348
|
export function parseSubagentIntercomPayload(payload: unknown): { to: string; message: string; requestId?: string } | null {
|
|
352
349
|
if (typeof payload !== "object" || payload === null) {
|
|
353
350
|
return null;
|
|
@@ -394,7 +391,7 @@ export function resolveIntercomPresenceName(sessionName: string | undefined, ses
|
|
|
394
391
|
return trimmedName;
|
|
395
392
|
}
|
|
396
393
|
const normalizedSessionId = sessionId.startsWith("session-") ? sessionId.slice("session-".length) : sessionId;
|
|
397
|
-
return `${DEFAULT_UNNAMED_SESSION_ALIAS_PREFIX}-${normalizedSessionId
|
|
394
|
+
return `${DEFAULT_UNNAMED_SESSION_ALIAS_PREFIX}-${normalizedSessionId}`;
|
|
398
395
|
}
|
|
399
396
|
export function buildPresenceIdentity(pi: ExtensionAPI, sessionId: string): { name: string } {
|
|
400
397
|
return {
|
|
@@ -406,7 +403,7 @@ export function formatSessionLabel(session: SessionInfo, duplicates: Set<string>
|
|
|
406
403
|
return session.id;
|
|
407
404
|
}
|
|
408
405
|
return duplicates.has(session.name.toLowerCase())
|
|
409
|
-
? `${session.name} (${
|
|
406
|
+
? `${session.name} (${session.id})`
|
|
410
407
|
: session.name;
|
|
411
408
|
}
|
|
412
409
|
export function formatSessionListRow(session: SessionInfo, currentCwd: string, isSelf: boolean): string {
|
|
@@ -416,7 +413,7 @@ export function formatSessionListRow(session: SessionInfo, currentCwd: string, i
|
|
|
416
413
|
const tags = [isSelf ? "self" : session.cwd === currentCwd ? "same cwd" : undefined, session.status, groupTag]
|
|
417
414
|
.filter((tag): tag is string => Boolean(tag));
|
|
418
415
|
const suffix = tags.length ? ` [${tags.join(", ")}]` : "";
|
|
419
|
-
return `• ${name} (${
|
|
416
|
+
return `• ${name} (${session.id}) — ${session.cwd} (${session.model})${suffix}`;
|
|
420
417
|
}
|
|
421
418
|
export function previewText(value: unknown, maxLength = 72): string | undefined {
|
|
422
419
|
if (typeof value !== "string") {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.13-alpha.
|
|
3
|
+
"version": "0.9.13-alpha.3",
|
|
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": [
|
|
@@ -55,7 +55,7 @@ export const renderIntercomResult: ToolResultRenderer = (result, { isPartial },
|
|
|
55
55
|
let text = failed ? theme.fg("error", "✗ ") : theme.fg("success", "✓ ");
|
|
56
56
|
text += theme.fg(failed ? "error" : "text", firstTextContent(result));
|
|
57
57
|
if (details?.messageId && !context.expanded) {
|
|
58
|
-
text += theme.fg("dim", ` (${details.messageId
|
|
58
|
+
text += theme.fg("dim", ` (${details.messageId})`);
|
|
59
59
|
}
|
|
60
60
|
if (details?.reason && context.expanded) {
|
|
61
61
|
text += "\n" + theme.fg("dim", `Reason: ${details.reason}`);
|
|
@@ -3,10 +3,9 @@ import type { SessionInfo } from "./types.js";
|
|
|
3
3
|
export type SessionTargetResolution =
|
|
4
4
|
| { kind: "resolved"; session: SessionInfo }
|
|
5
5
|
| { kind: "ambiguous_name"; matches: readonly SessionInfo[] }
|
|
6
|
-
| { kind: "ambiguous_prefix"; matches: readonly SessionInfo[] }
|
|
7
6
|
| { kind: "not_found" };
|
|
8
7
|
|
|
9
|
-
/** Resolve an Intercom session by exact ID
|
|
8
|
+
/** Resolve an Intercom session by exact ID or exact case-insensitive name. */
|
|
10
9
|
export function resolveSessionTarget(
|
|
11
10
|
sessions: readonly SessionInfo[],
|
|
12
11
|
nameOrId: string,
|
|
@@ -26,13 +25,6 @@ export function resolveSessionTarget(
|
|
|
26
25
|
return { kind: "ambiguous_name", matches: exactNames };
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
const prefixedIds = sessions.filter((session) => session.id.startsWith(target));
|
|
30
|
-
if (prefixedIds.length === 1) {
|
|
31
|
-
return { kind: "resolved", session: prefixedIds[0]! };
|
|
32
|
-
}
|
|
33
|
-
if (prefixedIds.length > 1) {
|
|
34
|
-
return { kind: "ambiguous_prefix", matches: prefixedIds };
|
|
35
|
-
}
|
|
36
28
|
return { kind: "not_found" };
|
|
37
29
|
}
|
|
38
30
|
|
|
@@ -43,12 +35,6 @@ export function sessionTargetFailureReason(
|
|
|
43
35
|
if (resolution.kind === "ambiguous_name") {
|
|
44
36
|
return `Multiple sessions named "${target}" are connected. Use the session ID instead.`;
|
|
45
37
|
}
|
|
46
|
-
if (resolution.kind === "ambiguous_prefix") {
|
|
47
|
-
const labels = resolution.matches
|
|
48
|
-
.map((session) => `${session.name ?? "Unnamed session"} (${session.id})`)
|
|
49
|
-
.join(", ");
|
|
50
|
-
return `Ambiguous session ID prefix "${target}" matches: ${labels}. Use a longer ID or an exact session name.`;
|
|
51
|
-
}
|
|
52
38
|
return "Session not found";
|
|
53
39
|
}
|
|
54
40
|
|
|
@@ -67,15 +67,15 @@ intercom({
|
|
|
67
67
|
|
|
68
68
|
### Pattern 2: Quick Status Check
|
|
69
69
|
|
|
70
|
-
Before sending, verify who's connected. The
|
|
70
|
+
Before sending, verify who's connected. The full session ID printed by `list` is directly usable by `send`, `ask`, and targeted `reply`:
|
|
71
71
|
|
|
72
72
|
```typescript
|
|
73
73
|
intercom({ action: "list" })
|
|
74
|
-
// → • planner (6332faab) — /workspace (model) [idle]
|
|
75
|
-
intercom({ action: "ask", to: "6332faab", message: "Which option should I use?" })
|
|
74
|
+
// → • planner (6332faab-1111-4222-8333-123456789abc) — /workspace (model) [idle]
|
|
75
|
+
intercom({ action: "ask", to: "6332faab-1111-4222-8333-123456789abc", message: "Which option should I use?" })
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Intercom
|
|
78
|
+
Intercom accepts only an exact full session ID or an exact case-insensitive session name. Use the full ID printed by `list` or the session's exact name.
|
|
79
79
|
|
|
80
80
|
### Runtime named groups
|
|
81
81
|
|
|
@@ -230,9 +230,9 @@ In Atomic workflows, each invocation has its own Intercom group, and parallel st
|
|
|
230
230
|
| `leave` | Returns to the resolved home group | Restore the session's startup group |
|
|
231
231
|
| `send` | Fire-and-forget | You don't need a response |
|
|
232
232
|
| `ask` | Blocks until reply (10 min timeout) | You need an answer to continue |
|
|
233
|
-
| `reply` | Responds to the active or pending inbound ask; `to` accepts
|
|
233
|
+
| `reply` | Responds to the active or pending inbound ask; `to` accepts an exact full session ID or exact session name | You were asked something and need to answer naturally |
|
|
234
234
|
| `pending` | Lists unresolved inbound asks | You need to see who is waiting before replying |
|
|
235
|
-
| `list` | Returns all sessions in the current group with
|
|
235
|
+
| `list` | Returns all sessions in the current group with full session IDs and live status | You need to discover targets or choose an idle peer |
|
|
236
236
|
| `status` | Returns your connection state and current group | Troubleshooting |
|
|
237
237
|
|
|
238
238
|
Inside workflows, `ask` may target a sibling stage that has already completed. If that stage retains a valid conversation, Atomic automatically schedules a post-mortem turn there and preserves the exact child-to-child reply thread; do not send a separate workflow follow-up. Missing, deleted, non-resumable, or failed-to-reopen completed targets return an actionable error. A parent or unrelated session cannot satisfy the pending ask.
|
|
@@ -20,7 +20,7 @@ export interface TerminalOrderingBarrier {
|
|
|
20
20
|
runId: string;
|
|
21
21
|
terminalId: string;
|
|
22
22
|
terminalAt: number;
|
|
23
|
-
source: "
|
|
23
|
+
source: "detached-notify" | "result-relay";
|
|
24
24
|
owner?: object;
|
|
25
25
|
sourceSessionTargets: string[];
|
|
26
26
|
dispatch?(prefix: OrderedTerminalPreludeMessage[]): unknown;
|
|
@@ -39,7 +39,7 @@ function parseBarrier(value: unknown): TerminalOrderingBarrier | null {
|
|
|
39
39
|
const record = value as Record<string, unknown>;
|
|
40
40
|
if (typeof record.runId !== "string" || !record.runId) return null;
|
|
41
41
|
if (typeof record.terminalAt !== "number" || !Number.isFinite(record.terminalAt)) return null;
|
|
42
|
-
if (record.source !== "
|
|
42
|
+
if (record.source !== "detached-notify" && record.source !== "result-relay") return null;
|
|
43
43
|
if (!Array.isArray(record.sourceSessionTargets)) return null;
|
|
44
44
|
const sourceSessionTargets = record.sourceSessionTargets
|
|
45
45
|
.filter((target): target is string => typeof target === "string")
|
|
@@ -24,13 +24,14 @@ export class InlineMessageComponent implements Component {
|
|
|
24
24
|
const lines: string[] = [];
|
|
25
25
|
const borderChar = "─";
|
|
26
26
|
if (width < 3) {
|
|
27
|
-
return [truncateToWidth(`From ${this.from.name || this.from.id
|
|
27
|
+
return [truncateToWidth(`From ${this.from.name || this.from.id}`, width)];
|
|
28
28
|
}
|
|
29
29
|
const bodyWidth = Math.max(1, width - 2);
|
|
30
30
|
|
|
31
|
-
const senderName = this.from.name || this.from.id
|
|
31
|
+
const senderName = this.from.name || this.from.id;
|
|
32
32
|
const header = ` 📨 From: ${senderName} (${this.from.cwd}) `;
|
|
33
|
-
|
|
33
|
+
// An empty ellipsis silently clips full sender IDs; keep header overflow visible.
|
|
34
|
+
const headerText = truncateToWidth(header, bodyWidth, "…");
|
|
34
35
|
const headerPadding = Math.max(0, bodyWidth - visibleWidth(headerText));
|
|
35
36
|
lines.push(this.theme.fg("accent", `╭${headerText}${borderChar.repeat(headerPadding)}╮`));
|
|
36
37
|
|
|
@@ -63,8 +64,9 @@ export class InlineMessageComponent implements Component {
|
|
|
63
64
|
|
|
64
65
|
if (this.message.replyTo && !this.message.expectsReply) {
|
|
65
66
|
lines.push(this.theme.fg("accent", `│${" ".repeat(bodyWidth)}│`));
|
|
66
|
-
|
|
67
|
-
const
|
|
67
|
+
// An empty ellipsis silently clips full reply-to IDs; keep overflow visible.
|
|
68
|
+
const reply = this.theme.fg("dim", ` ↳ Reply to ${this.message.replyTo}`);
|
|
69
|
+
const text = truncateToWidth(reply, bodyWidth, "…");
|
|
68
70
|
const padding = Math.max(0, bodyWidth - visibleWidth(text));
|
|
69
71
|
lines.push(this.theme.fg("accent", `│${text}${" ".repeat(padding)}│`));
|
|
70
72
|
}
|
|
@@ -46,17 +46,23 @@ function middleTruncate(text: string, maxWidth: number): string {
|
|
|
46
46
|
|
|
47
47
|
return truncateToWidth(`${left}…${right}`, maxWidth, "");
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function sessionTitle(session: SessionInfo, options?: { self?: boolean; sameCwd?: boolean }): string {
|
|
49
|
+
function sessionTitleLines(
|
|
50
|
+
session: SessionInfo,
|
|
51
|
+
availableWidth: number,
|
|
52
|
+
options?: { self?: boolean; sameCwd?: boolean },
|
|
53
|
+
): string[] {
|
|
55
54
|
const name = session.name || "Unnamed session";
|
|
56
55
|
const tags = [options?.self ? "self" : undefined, options?.sameCwd ? "same cwd" : undefined]
|
|
57
56
|
.filter((tag): tag is string => Boolean(tag));
|
|
58
57
|
const suffix = tags.length ? ` [${tags.join(", ")}]` : "";
|
|
59
|
-
|
|
58
|
+
const title = `${name} (${session.id})${suffix}`;
|
|
59
|
+
if (visibleWidth(title) <= availableWidth) {
|
|
60
|
+
return [title];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const label = middleTruncate(`${name}${suffix}`, availableWidth);
|
|
64
|
+
const id = truncateToWidth(session.id, availableWidth, "…");
|
|
65
|
+
return [label, id];
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
export class SessionListOverlay implements Component {
|
|
@@ -135,7 +141,11 @@ export class SessionListOverlay implements Component {
|
|
|
135
141
|
lines.push(row(this.theme.bold(" Current Session")));
|
|
136
142
|
lines.push(border(`├${"─".repeat(contentWidth)}┤`));
|
|
137
143
|
lines.push(row());
|
|
138
|
-
|
|
144
|
+
const currentTitleLines = sessionTitleLines(this.currentSession, Math.max(1, contentWidth - 2), { self: true });
|
|
145
|
+
lines.push(row(` ${this.theme.fg("dim", currentTitleLines[0])}`));
|
|
146
|
+
for (const idLine of currentTitleLines.slice(1)) {
|
|
147
|
+
lines.push(row(` ${this.theme.fg("dim", idLine)}`));
|
|
148
|
+
}
|
|
139
149
|
lines.push(row(` ${this.theme.fg("dim", `${middleTruncate(this.currentSession.cwd, Math.max(8, contentWidth - 4))} • ${this.currentSession.model}`)}`));
|
|
140
150
|
lines.push(row());
|
|
141
151
|
lines.push(border(`├${"─".repeat(contentWidth)}┤`));
|
|
@@ -156,10 +166,13 @@ export class SessionListOverlay implements Component {
|
|
|
156
166
|
const isSelected = index === this.selectedIndex;
|
|
157
167
|
const sameCwd = session.cwd === this.currentSession.cwd;
|
|
158
168
|
const prefix = isSelected ? this.theme.fg("accent", "→ ") : " ";
|
|
159
|
-
const
|
|
169
|
+
const titleLines = sessionTitleLines(session, Math.max(1, contentWidth - 2), { sameCwd });
|
|
160
170
|
const pathText = `${middleTruncate(session.cwd, Math.max(8, contentWidth - 4))} • ${session.model}`;
|
|
161
171
|
|
|
162
|
-
lines.push(row(`${prefix}${isSelected ? this.theme.fg("accent",
|
|
172
|
+
lines.push(row(`${prefix}${isSelected ? this.theme.fg("accent", titleLines[0]) : titleLines[0]}`));
|
|
173
|
+
for (const idLine of titleLines.slice(1)) {
|
|
174
|
+
lines.push(row(` ${this.theme.fg("dim", idLine)}`));
|
|
175
|
+
}
|
|
163
176
|
lines.push(row(` ${this.theme.fg("dim", pathText)}`));
|
|
164
177
|
if (index < endIndex - 1) {
|
|
165
178
|
lines.push(row());
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/mcp",
|
|
3
|
-
"version": "0.9.13-alpha.
|
|
3
|
+
"version": "0.9.13-alpha.3",
|
|
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.13-alpha.3] - 2026-08-13
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- The `subagent` tool no longer accepts `async: true`, `/run --bg` and related background slash flags are gone, and the `asyncByDefault` and `forceTopLevelAsync` settings have been removed. Remove those settings keys from user configuration; subagent calls now run in the foreground.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Unnamed subagent sessions now expose runtime-only `subagent-chat-<full-id>` Intercom aliases so supervisor targeting uses the full session ID.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Fixed a fork-context subagent ignoring its agent's configured model. The selected model candidate was only ever a `provider/model[:thinking]` string, so nothing was handed to the child session's `model` argument and the session fell back to the model persisted in the session file — which, for a fork, is the parent's. A child declaring `openai-codex/gpt-5.6-luna:max` therefore ran every turn on the parent's model, and an explicit `model:` override lost its first attempt the same way. The selected candidate is now resolved against the model registry and applied to the child session, together with the thinking level carried in the candidate's suffix, for both fresh and fork contexts and across single, parallel, and resume paths. A candidate that names no usable model still starts the run instead of failing it.
|
|
18
|
+
- Fixed subagent progress and status lines stripping the provider prefix from the model name, so a child rendered as `claude-fable-5` where the main chat shows `anthropic/claude-fable-5`. The full model id is now displayed, including every segment of a routed id such as `openrouter/anthropic/claude-fable-5`; known thinking suffixes are still split off into the `thinking <level>` label.
|
|
19
|
+
|
|
20
|
+
### Removed
|
|
21
|
+
|
|
22
|
+
- Removed subagent async/background execution and its process-era job, widget, schema, configuration, and slash-command surfaces. `subagent` calls and `/run` or `/parallel` now execute in the foreground and return their results directly; foreground Intercom coordination and resumable interrupt/resume controls remain available.
|
|
23
|
+
|
|
5
24
|
## [0.9.13-alpha.2] - 2026-08-12
|
|
6
25
|
|
|
7
26
|
### Breaking Changes
|