@bastani/atomic 0.9.16-alpha.9 → 0.9.16

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 (191) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/README.md +4 -4
  3. package/dist/builtin/intercom/CHANGELOG.md +42 -0
  4. package/dist/builtin/intercom/README.md +18 -17
  5. package/dist/builtin/intercom/broker/broker.ts +43 -18
  6. package/dist/builtin/intercom/broker/client.ts +138 -7
  7. package/dist/builtin/intercom/broker/group-isolation.ts +3 -3
  8. package/dist/builtin/intercom/broker/group-membership.ts +55 -0
  9. package/dist/builtin/intercom/broker/presence-handler.ts +62 -50
  10. package/dist/builtin/intercom/broker/send-handler.ts +2 -3
  11. package/dist/builtin/intercom/group.ts +40 -0
  12. package/dist/builtin/intercom/index.bundle.mjs +490 -183
  13. package/dist/builtin/intercom/package.json +2 -2
  14. package/dist/builtin/intercom/skills/intercom/SKILL.md +16 -10
  15. package/dist/builtin/intercom/types.ts +24 -2
  16. package/dist/builtin/mcp/index.bundle.mjs +202 -52
  17. package/dist/builtin/mcp/package.json +2 -2
  18. package/dist/builtin/subagents/CHANGELOG.md +51 -0
  19. package/dist/builtin/subagents/README.md +3 -3
  20. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  21. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  22. package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
  23. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  24. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
  25. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  26. package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
  27. package/dist/builtin/subagents/agents/debugger.md +1 -1
  28. package/dist/builtin/subagents/agents/worker.md +1 -1
  29. package/dist/builtin/subagents/package.json +3 -3
  30. package/dist/builtin/subagents/src/extension/index.bundle.mjs +422 -140
  31. package/dist/builtin/web-access/index.bundle.mjs +202 -52
  32. package/dist/builtin/web-access/package.json +2 -2
  33. package/dist/builtin/workflows/CHANGELOG.md +70 -0
  34. package/dist/builtin/workflows/README.md +2 -2
  35. package/dist/builtin/workflows/builtin/{chunk-h5e65g7g.js → chunk-3y1hmzw6.js} +36 -6
  36. package/dist/builtin/workflows/builtin/{chunk-nqr34qp3.js → chunk-6rbajjf5.js} +7 -1
  37. package/dist/builtin/workflows/builtin/{chunk-qe6bfpbd.js → chunk-bz1c9732.js} +15 -3
  38. package/dist/builtin/workflows/builtin/{chunk-8v8wmb7z.js → chunk-dattsgxg.js} +1 -1
  39. package/dist/builtin/workflows/builtin/{chunk-17zk6ffd.js → chunk-gdx0avpx.js} +355 -67
  40. package/dist/builtin/workflows/builtin/{chunk-rbnj9621.js → chunk-w9c7rkrk.js} +1 -1
  41. package/dist/builtin/workflows/builtin/goal.js +3 -3
  42. package/dist/builtin/workflows/builtin/index.js +5 -5
  43. package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
  44. package/dist/builtin/workflows/builtin/ralph.js +3 -3
  45. package/dist/builtin/workflows/package.json +2 -2
  46. package/dist/builtin/workflows/src/extension/index.bundle.mjs +531 -143
  47. package/dist/builtin/workflows/src/index.js +212 -72
  48. package/dist/cli/args.js +6 -6
  49. package/dist/cli/args.js.map +1 -1
  50. package/dist/cli/config-selector.d.ts.map +1 -1
  51. package/dist/cli/config-selector.js +2 -1
  52. package/dist/cli/config-selector.js.map +1 -1
  53. package/dist/cli/session-picker.d.ts +2 -1
  54. package/dist/cli/session-picker.d.ts.map +1 -1
  55. package/dist/cli/session-picker.js +3 -2
  56. package/dist/cli/session-picker.js.map +1 -1
  57. package/dist/cli/startup-ui.d.ts.map +1 -1
  58. package/dist/cli/startup-ui.js +2 -1
  59. package/dist/cli/startup-ui.js.map +1 -1
  60. package/dist/core/agent-session-methods.d.ts +1 -0
  61. package/dist/core/agent-session-methods.d.ts.map +1 -1
  62. package/dist/core/agent-session-methods.js.map +1 -1
  63. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  64. package/dist/core/agent-session-post-tool-compaction.js +3 -6
  65. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  66. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  67. package/dist/core/agent-session-prompt.js +3 -1
  68. package/dist/core/agent-session-prompt.js.map +1 -1
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +6 -3
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-state.d.ts.map +1 -1
  73. package/dist/core/agent-session-state.js +7 -5
  74. package/dist/core/agent-session-state.js.map +1 -1
  75. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  76. package/dist/core/agent-session-tool-hooks.js +37 -23
  77. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  78. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  79. package/dist/core/agent-session-tool-registry.js +9 -2
  80. package/dist/core/agent-session-tool-registry.js.map +1 -1
  81. package/dist/core/agent-session.d.ts +2 -0
  82. package/dist/core/agent-session.d.ts.map +1 -1
  83. package/dist/core/agent-session.js +2 -0
  84. package/dist/core/agent-session.js.map +1 -1
  85. package/dist/core/builtin-packages.d.ts +4 -0
  86. package/dist/core/builtin-packages.d.ts.map +1 -1
  87. package/dist/core/builtin-packages.js +22 -1
  88. package/dist/core/builtin-packages.js.map +1 -1
  89. package/dist/core/callback-activity.d.ts.map +1 -1
  90. package/dist/core/callback-activity.js +6 -3
  91. package/dist/core/callback-activity.js.map +1 -1
  92. package/dist/core/extensions/loader-core.d.ts +1 -0
  93. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  94. package/dist/core/extensions/loader-core.js +11 -1
  95. package/dist/core/extensions/loader-core.js.map +1 -1
  96. package/dist/core/extensions/loader.d.ts +1 -1
  97. package/dist/core/extensions/loader.d.ts.map +1 -1
  98. package/dist/core/extensions/loader.js +1 -1
  99. package/dist/core/extensions/loader.js.map +1 -1
  100. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  101. package/dist/core/extensions/runner-registries.js +9 -4
  102. package/dist/core/extensions/runner-registries.js.map +1 -1
  103. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  104. package/dist/core/extensions/runner-shortcuts.js +1 -0
  105. package/dist/core/extensions/runner-shortcuts.js.map +1 -1
  106. package/dist/core/keybindings.d.ts +5 -0
  107. package/dist/core/keybindings.d.ts.map +1 -1
  108. package/dist/core/keybindings.js +4 -0
  109. package/dist/core/keybindings.js.map +1 -1
  110. package/dist/core/mandatory-resource-loader.d.ts +6 -0
  111. package/dist/core/mandatory-resource-loader.d.ts.map +1 -0
  112. package/dist/core/mandatory-resource-loader.js +94 -0
  113. package/dist/core/mandatory-resource-loader.js.map +1 -0
  114. package/dist/core/mandatory-runtime-tools.d.ts +10 -0
  115. package/dist/core/mandatory-runtime-tools.d.ts.map +1 -0
  116. package/dist/core/mandatory-runtime-tools.js +31 -0
  117. package/dist/core/mandatory-runtime-tools.js.map +1 -0
  118. package/dist/core/model-resolver-defaults.js +1 -1
  119. package/dist/core/model-resolver-defaults.js.map +1 -1
  120. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  121. package/dist/core/resource-loader-reload.js +24 -13
  122. package/dist/core/resource-loader-reload.js.map +1 -1
  123. package/dist/core/sdk.d.ts.map +1 -1
  124. package/dist/core/sdk.js +2 -0
  125. package/dist/core/sdk.js.map +1 -1
  126. package/dist/core/settings-manager-ui-accessors.d.ts +4 -1
  127. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  128. package/dist/core/settings-manager-ui-accessors.js +22 -0
  129. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  130. package/dist/core/settings-types.d.ts +4 -0
  131. package/dist/core/settings-types.d.ts.map +1 -1
  132. package/dist/core/settings-types.js.map +1 -1
  133. package/dist/core/slash-commands.js +1 -1
  134. package/dist/core/slash-commands.js.map +1 -1
  135. package/dist/main-session.d.ts.map +1 -1
  136. package/dist/main-session.js +3 -2
  137. package/dist/main-session.js.map +1 -1
  138. package/dist/main.d.ts.map +1 -1
  139. package/dist/main.js +6 -0
  140. package/dist/main.js.map +1 -1
  141. package/dist/modes/interactive/components/fast-mode-selector.js +2 -2
  142. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  143. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  144. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  145. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  146. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  147. package/dist/modes/interactive/components/settings-selector-items.js +7 -0
  148. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  149. package/dist/modes/interactive/components/settings-selector-types.d.ts +2 -0
  150. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  151. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  152. package/dist/modes/interactive/interactive-agent-events.js +2 -1
  153. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  154. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  155. package/dist/modes/interactive/interactive-deferred-startup.js +1 -0
  156. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  157. package/dist/modes/interactive/interactive-input-handling.js +3 -0
  158. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  159. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  160. package/dist/modes/interactive/interactive-mode-base.js +15 -1
  161. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  162. package/dist/modes/interactive/interactive-mode-surface.d.ts +6 -1
  163. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  164. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  165. package/dist/modes/interactive/interactive-selectors.js +6 -1
  166. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  167. package/dist/modes/interactive/interactive-session-runtime.js +3 -0
  168. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  169. package/dist/modes/interactive/interactive-slash-commands.js +7 -12
  170. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  171. package/dist/modes/interactive/interactive-tui.d.ts +1 -0
  172. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  173. package/dist/modes/interactive/interactive-tui.js +16 -0
  174. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  175. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  176. package/dist/modes/rpc/rpc-session-binding.js +2 -0
  177. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  178. package/docs/compaction.md +1 -1
  179. package/docs/environment-variables.md +2 -0
  180. package/docs/extensions.md +1 -1
  181. package/docs/intercom.md +29 -24
  182. package/docs/keybindings.md +5 -2
  183. package/docs/packages.md +1 -1
  184. package/docs/providers.md +2 -2
  185. package/docs/sdk.md +9 -7
  186. package/docs/settings.md +9 -3
  187. package/docs/subagents.md +2 -2
  188. package/docs/usage.md +7 -6
  189. package/docs/workflows.md +11 -7
  190. package/npm-shrinkwrap.json +59 -77
  191. package/package.json +7 -7
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/intercom",
3
- "version": "0.9.16-alpha.9",
3
+ "version": "0.9.16",
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": [
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@bastani/atomic": "*",
47
- "@earendil-works/pi-tui": "^0.84.3"
47
+ "@earendil-works/pi-tui": "^0.84.4"
48
48
  },
49
49
  "peerDependenciesMeta": {
50
50
  "@bastani/atomic": {
@@ -81,6 +81,8 @@ Live sessions accept an exact full session ID or exact case-insensitive name. Or
81
81
 
82
82
  Send material updates through Intercom to every affected workflow stage, including stages that have not started. Atomic queues messages for known pending stages and delivers them when their sessions initialize:
83
83
 
84
+ Before steering a stage, join its invocation group. Use the Intercom `groups` action to discover it. Workflow invocation groups are named `workflow:<rootRunId>`.
85
+
84
86
  ```typescript
85
87
  intercom({
86
88
  action: "send",
@@ -94,18 +96,21 @@ The stage receives the ordinary inbound Intercom message before its first model
94
96
 
95
97
  ### Runtime named groups
96
98
 
97
- Plain chat sessions can create or join a group without restarting:
99
+ Plain chat sessions can add and remove group memberships without restarting:
98
100
 
99
101
  ```typescript
100
- // Join or create the named group. Both sessions should run this call.
102
+ // Add a membership. Existing memberships remain active.
101
103
  intercom({ action: "join", group: "api-review" })
102
- intercom({ action: "list" }) // now shows only peers in api-review
103
104
 
104
- // Leave the named group and return to the resolved startup home group.
105
+ // Discover every available group and see membership markers.
106
+ intercom({ action: "groups" })
107
+
108
+ // Remove one membership, or reset to home by omitting group.
109
+ intercom({ action: "leave", group: "api-review" })
105
110
  intercom({ action: "leave" })
106
111
  ```
107
112
 
108
- Joining changes broker presence without changing the session ID. `default` is the shared group. The names `true` and `auto` are reserved for subagent auto-groups and are rejected. Subagents launched after a join inherit the joined group. Ordinary `send`/`ask` calls remain group-isolated; only an authorized `contact_supervisor` call can cross groups.
113
+ `list` still lists sessions: without a filter it returns every peer sharing at least one membership. `default` remains shared, while `true` and `auto` remain reserved. Later subagents inherit the most recently joined membership. Ordinary `send`/`ask` requires a shared membership; only authorized `contact_supervisor` traffic crosses group boundaries.
109
114
 
110
115
  ### Pattern 3: Reply Naturally
111
116
 
@@ -243,14 +248,15 @@ In Atomic workflows, each invocation has its own Intercom group, and parallel st
243
248
 
244
249
  | Action | Behavior | Use When |
245
250
  |--------|----------|----------|
246
- | `join` | Joins or creates a named group in place | Two plain chat sessions need a private group |
247
- | `leave` | Returns to the resolved home group | Restore the session's startup group |
251
+ | `join` | Adds or creates a named membership in place | Sessions need another shared routing group |
252
+ | `leave` | Removes one named membership, or resets to home when omitted | Stop sharing one group or restore startup membership |
253
+ | `groups` | Lists every available group with counts and membership markers | Discover a group instead of guessing its name |
248
254
  | `send` | Fire-and-forget to a live session, or durable `queued` delivery to `<runId>:<stageKey>` before a workflow stage starts | You don't need a response |
249
255
  | `ask` | Blocks until a live recipient replies (10 min timeout); refused for an unstarted stage | You need an answer to continue |
250
256
  | `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 |
251
257
  | `pending` | Lists unresolved inbound asks | You need to see who is waiting before replying |
252
- | `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 |
253
- | `status` | Returns your connection state and current group | Troubleshooting |
258
+ | `list` | Returns all sessions sharing any membership, with full IDs and live status | Discover targets or choose an idle peer |
259
+ | `status` | Returns connection state and every current membership | Troubleshooting |
254
260
 
255
261
  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.
256
262
 
@@ -471,7 +477,7 @@ if (!result.delivered) {
471
477
 
472
478
  ### Session not appearing in list
473
479
 
474
- 1. Check intercom is enabled: `intercom({ action: "status" })`
480
+ 1. Check Intercom connection status: `intercom({ action: "status" })`
475
481
  2. Verify the target session has loaded pi-intercom
476
482
  3. Ensure both sessions are on the same machine (intercom is same-machine only)
477
483
 
@@ -7,10 +7,18 @@ export interface SessionInfo {
7
7
  startedAt: number;
8
8
  lastActivity: number;
9
9
  status?: string;
10
- /** Session's intercom group; undefined is treated as the shared "default" group. */
10
+ /** Session's normalized intercom group memberships. */
11
+ groups?: string[];
12
+ /** Legacy single-group membership; accepted alongside `groups` for compatibility. */
11
13
  group?: string;
12
14
  }
13
15
 
16
+ export interface GroupSummary {
17
+ group: string;
18
+ sessionCount: number;
19
+ member: boolean;
20
+ }
21
+
14
22
  export interface Message {
15
23
  id: string;
16
24
  timestamp: number;
@@ -53,6 +61,9 @@ export type ClientMessage =
53
61
  }
54
62
  | { type: "unregister" }
55
63
  | { type: "list"; requestId: string; group?: string }
64
+ | { type: "list_groups"; requestId: string }
65
+ | { type: "join_group"; requestId: string; group: string }
66
+ | { type: "leave_group"; requestId: string; group?: string }
56
67
  | { type: "authorize_supervisor"; requestId: string; childName: string; capability?: string }
57
68
  | { type: "send" | "supervisor_send"; to: string; message: Message; attemptId?: string }
58
69
  | {
@@ -82,12 +93,23 @@ export type ClientMessage =
82
93
  reason?: string;
83
94
  reasonCode?: "message_id_conflict";
84
95
  }
85
- | { type: "presence"; name?: string; status?: string; model?: string; group?: string; requestId?: string };
96
+ | {
97
+ type: "presence";
98
+ name?: string;
99
+ status?: string;
100
+ model?: string;
101
+ groups?: string[];
102
+ /** Legacy single-group membership; accepted alongside `groups` for compatibility. */
103
+ group?: string;
104
+ requestId?: string;
105
+ };
86
106
 
87
107
  export type BrokerMessage =
88
108
  | { type: "registered"; sessionId: string; supervisorSessionId?: string }
89
109
  | { type: "registration_failed"; reason: string }
90
110
  | { type: "sessions"; requestId: string; sessions: SessionInfo[] }
111
+ | { type: "groups"; requestId: string; groups: GroupSummary[] }
112
+ | { type: "membership_ack"; requestId: string; groups: string[] }
91
113
  | { type: "supervisor_authorized"; requestId: string; capability: string; supervisorSessionId: string; childName: string }
92
114
  | { type: "message"; from: SessionInfo; message: Message; channel?: "supervisor" }
93
115
  | { type: "pending_stage_notification"; requestId: string; from: SessionInfo; message: Message }