@bastani/atomic 0.9.16-alpha.7 → 0.9.16-alpha.8

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 (207) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  3. package/dist/builtin/intercom/README.md +4 -4
  4. package/dist/builtin/intercom/broker/broker.ts +617 -22
  5. package/dist/builtin/intercom/broker/client-message-validation.ts +9 -0
  6. package/dist/builtin/intercom/broker/client.ts +200 -10
  7. package/dist/builtin/intercom/broker/pending-send-registry.ts +4 -0
  8. package/dist/builtin/intercom/broker/send-handler.ts +90 -36
  9. package/dist/builtin/intercom/broker/send-signature.ts +20 -8
  10. package/dist/builtin/intercom/group.ts +85 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +680 -53
  12. package/dist/builtin/intercom/package.json +1 -1
  13. package/dist/builtin/intercom/session-target.ts +54 -0
  14. package/dist/builtin/intercom/skills/intercom/SKILL.md +18 -3
  15. package/dist/builtin/intercom/source-ownership.ts +31 -0
  16. package/dist/builtin/intercom/types.ts +115 -0
  17. package/dist/builtin/mcp/index.bundle.mjs +109 -35
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/package.json +1 -1
  20. package/dist/builtin/subagents/src/extension/index.bundle.mjs +173 -51
  21. package/dist/builtin/web-access/index.bundle.mjs +109 -35
  22. package/dist/builtin/web-access/package.json +1 -1
  23. package/dist/builtin/workflows/CHANGELOG.md +15 -0
  24. package/dist/builtin/workflows/README.md +40 -37
  25. package/dist/builtin/workflows/builtin/adversarial-verification.js +13 -0
  26. package/dist/builtin/workflows/builtin/{shared-prompts.ts → chunk-0x6e303p.js} +133 -154
  27. package/dist/builtin/workflows/builtin/chunk-29wrp38a.js +199 -0
  28. package/dist/builtin/workflows/builtin/chunk-2dqb5s2q.js +602 -0
  29. package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +264 -0
  30. package/dist/builtin/workflows/builtin/chunk-5n10x7j2.js +69730 -0
  31. package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +4 -0
  32. package/dist/builtin/workflows/builtin/chunk-6fqs7c01.js +155 -0
  33. package/dist/builtin/workflows/builtin/chunk-7430zyas.js +126 -0
  34. package/dist/builtin/workflows/builtin/chunk-7at6dnkr.js +33 -0
  35. package/dist/builtin/workflows/builtin/chunk-82ha8p41.js +175 -0
  36. package/dist/builtin/workflows/builtin/chunk-bfkmzv9h.js +156 -0
  37. package/dist/builtin/workflows/builtin/chunk-c53y8bdh.js +345 -0
  38. package/dist/builtin/workflows/builtin/chunk-cdtd3m3w.js +529 -0
  39. package/dist/builtin/workflows/builtin/chunk-cg9tmks0.js +206 -0
  40. package/dist/builtin/workflows/builtin/chunk-hdpj1dkw.js +2447 -0
  41. package/dist/builtin/workflows/builtin/chunk-hzzn6adg.js +221 -0
  42. package/dist/builtin/workflows/builtin/chunk-nqr34qp3.js +1061 -0
  43. package/dist/builtin/workflows/builtin/chunk-qwzvgxnq.js +404 -0
  44. package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +215 -0
  45. package/dist/builtin/workflows/builtin/chunk-v04c5qmd.js +1207 -0
  46. package/dist/builtin/workflows/builtin/chunk-wpckd35c.js +12 -0
  47. package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +4110 -0
  48. package/dist/builtin/workflows/builtin/chunk-zf28603f.js +1080 -0
  49. package/dist/builtin/workflows/builtin/classify-and-act.js +12 -0
  50. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +10 -0
  51. package/dist/builtin/workflows/builtin/generate-and-filter.js +12 -0
  52. package/dist/builtin/workflows/builtin/goal.js +16 -0
  53. package/dist/builtin/workflows/builtin/index.js +49 -0
  54. package/dist/builtin/workflows/builtin/loop-until-done.js +12 -0
  55. package/dist/builtin/workflows/builtin/open-claude-design.js +11 -0
  56. package/dist/builtin/workflows/builtin/ralph.js +16 -0
  57. package/dist/builtin/workflows/builtin/steering-context.d.ts +6 -0
  58. package/dist/builtin/workflows/builtin/steering-context.js +7 -0
  59. package/dist/builtin/workflows/builtin/tournament.js +13 -0
  60. package/dist/builtin/workflows/package.json +10 -7
  61. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
  62. package/dist/builtin/workflows/src/extension/index.bundle.mjs +1228 -428
  63. package/dist/builtin/workflows/src/{index.bundle.mjs → index.js} +956 -427
  64. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +403 -0
  65. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +327 -0
  66. package/dist/builtin/workflows/src/shared/budget.d.ts +67 -0
  67. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +60 -0
  68. package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
  69. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  70. package/dist/core/agent-session-custom-message-commit.js +12 -5
  71. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  72. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  73. package/dist/core/agent-session-persistent-custom-messages.js +2 -0
  74. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  75. package/dist/core/agent-session.d.ts.map +1 -1
  76. package/dist/core/agent-session.js +2 -1
  77. package/dist/core/agent-session.js.map +1 -1
  78. package/dist/core/auth-storage.d.ts +2 -0
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +4 -0
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/builtin-install-layout.d.ts +1 -1
  83. package/dist/core/builtin-install-layout.d.ts.map +1 -1
  84. package/dist/core/builtin-install-layout.js +1 -1
  85. package/dist/core/builtin-install-layout.js.map +1 -1
  86. package/dist/core/codex-fast-mode.d.ts +10 -7
  87. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  88. package/dist/core/codex-fast-mode.js +31 -13
  89. package/dist/core/codex-fast-mode.js.map +1 -1
  90. package/dist/core/extensions/context-types.d.ts +35 -0
  91. package/dist/core/extensions/context-types.d.ts.map +1 -1
  92. package/dist/core/extensions/context-types.js.map +1 -1
  93. package/dist/core/extensions/index.d.ts +1 -1
  94. package/dist/core/extensions/index.d.ts.map +1 -1
  95. package/dist/core/extensions/index.js.map +1 -1
  96. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  97. package/dist/core/extensions/loader-virtual-modules.js +6 -1
  98. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  99. package/dist/core/model-runtime.d.ts +2 -0
  100. package/dist/core/model-runtime.d.ts.map +1 -1
  101. package/dist/core/model-runtime.js +4 -0
  102. package/dist/core/model-runtime.js.map +1 -1
  103. package/dist/core/runtime-credentials.d.ts +1 -0
  104. package/dist/core/runtime-credentials.d.ts.map +1 -1
  105. package/dist/core/runtime-credentials.js +8 -0
  106. package/dist/core/runtime-credentials.js.map +1 -1
  107. package/dist/core/sdk.d.ts.map +1 -1
  108. package/dist/core/sdk.js +5 -5
  109. package/dist/core/sdk.js.map +1 -1
  110. package/dist/core/session-manager-storage.d.ts +2 -0
  111. package/dist/core/session-manager-storage.d.ts.map +1 -1
  112. package/dist/core/session-manager-storage.js +4 -2
  113. package/dist/core/session-manager-storage.js.map +1 -1
  114. package/dist/core/slash-commands.js +1 -1
  115. package/dist/core/slash-commands.js.map +1 -1
  116. package/dist/core/workflow-stage-admission.d.ts +6 -1
  117. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  118. package/dist/core/workflow-stage-admission.js +8 -9
  119. package/dist/core/workflow-stage-admission.js.map +1 -1
  120. package/dist/index.d.ts +0 -1
  121. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  122. package/dist/modes/interactive/components/footer.js +1 -1
  123. package/dist/modes/interactive/components/footer.js.map +1 -1
  124. package/dist/modes/interactive/interactive-autocomplete.js +1 -1
  125. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  126. package/dist/modes/interactive/interactive-startup.js +1 -1
  127. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  128. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -0
  129. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  130. package/dist/modes/interactive-engine/isolated-runtime.js +69 -10
  131. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  132. package/dist/modes/rpc/rpc-client-api.d.ts +18 -2
  133. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  134. package/dist/modes/rpc/rpc-client-api.js +33 -5
  135. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  136. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  137. package/dist/modes/rpc/rpc-command-handler.js +8 -4
  138. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  139. package/dist/modes/rpc/rpc-types.d.ts +13 -0
  140. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  141. package/dist/modes/rpc/rpc-types.js.map +1 -1
  142. package/docs/intercom.md +15 -6
  143. package/docs/packages.md +2 -2
  144. package/docs/providers.md +8 -3
  145. package/docs/quickstart.md +2 -2
  146. package/docs/rpc.md +21 -4
  147. package/docs/settings.md +6 -4
  148. package/docs/subagents.md +1 -1
  149. package/docs/usage.md +1 -1
  150. package/docs/workflows.md +108 -239
  151. package/npm-shrinkwrap.json +32 -32
  152. package/package.json +9 -13
  153. package/dist/builtin/workflows/ambient.d.ts +0 -61
  154. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +0 -26
  155. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +0 -391
  156. package/dist/builtin/workflows/builtin/adversarial-verification.ts +0 -34
  157. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +0 -14
  158. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +0 -108
  159. package/dist/builtin/workflows/builtin/classify-and-act.ts +0 -40
  160. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +0 -14
  161. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +0 -96
  162. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +0 -37
  163. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +0 -41
  164. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +0 -90
  165. package/dist/builtin/workflows/builtin/generate-and-filter.ts +0 -31
  166. package/dist/builtin/workflows/builtin/goal-artifacts.ts +0 -64
  167. package/dist/builtin/workflows/builtin/goal-convergence.ts +0 -87
  168. package/dist/builtin/workflows/builtin/goal-ledger.ts +0 -139
  169. package/dist/builtin/workflows/builtin/goal-models.ts +0 -72
  170. package/dist/builtin/workflows/builtin/goal-orchestrator-prompts.ts +0 -94
  171. package/dist/builtin/workflows/builtin/goal-prompts.ts +0 -217
  172. package/dist/builtin/workflows/builtin/goal-reducer.ts +0 -176
  173. package/dist/builtin/workflows/builtin/goal-reports.ts +0 -76
  174. package/dist/builtin/workflows/builtin/goal-reverify.ts +0 -305
  175. package/dist/builtin/workflows/builtin/goal-review.ts +0 -139
  176. package/dist/builtin/workflows/builtin/goal-runner.ts +0 -504
  177. package/dist/builtin/workflows/builtin/goal-schemas.ts +0 -89
  178. package/dist/builtin/workflows/builtin/goal-types.ts +0 -164
  179. package/dist/builtin/workflows/builtin/goal.ts +0 -78
  180. package/dist/builtin/workflows/builtin/index.ts +0 -16
  181. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +0 -87
  182. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +0 -282
  183. package/dist/builtin/workflows/builtin/loop-until-done.ts +0 -51
  184. package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +0 -305
  185. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +0 -337
  186. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +0 -347
  187. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +0 -313
  188. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -311
  189. package/dist/builtin/workflows/builtin/open-claude-design.ts +0 -57
  190. package/dist/builtin/workflows/builtin/pattern-artifact-root.ts +0 -28
  191. package/dist/builtin/workflows/builtin/progress-scoring.ts +0 -230
  192. package/dist/builtin/workflows/builtin/ralph-core.ts +0 -449
  193. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +0 -100
  194. package/dist/builtin/workflows/builtin/ralph-models.ts +0 -183
  195. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +0 -103
  196. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +0 -104
  197. package/dist/builtin/workflows/builtin/ralph-runner.ts +0 -459
  198. package/dist/builtin/workflows/builtin/ralph.ts +0 -82
  199. package/dist/builtin/workflows/builtin/review-convergence.ts +0 -229
  200. package/dist/builtin/workflows/builtin/selection-math.ts +0 -156
  201. package/dist/builtin/workflows/builtin/steering-context.ts +0 -51
  202. package/dist/builtin/workflows/builtin/tournament-prompts.ts +0 -70
  203. package/dist/builtin/workflows/builtin/tournament-runner.ts +0 -400
  204. package/dist/builtin/workflows/builtin/tournament.ts +0 -73
  205. package/dist/builtin/workflows/builtin/verification-criteria.ts +0 -330
  206. package/dist/builtin/workflows/builtin/verification-prompts.ts +0 -206
  207. package/dist/builtin/workflows/builtin/verification-usage.ts +0 -44
@@ -3860,10 +3860,10 @@ function hasAssistantMessage(entries) {
3860
3860
  return entries.some((entry) => entry.type === "message" && entry.message.role === "assistant");
3861
3861
  }
3862
3862
  function persistAppendedEntry(filePath, entries, entry, flushed) {
3863
- if (!hasAssistantMessage(entries))
3864
- return false;
3865
3863
  if (flushed)
3866
3864
  appendSessionEntry(filePath, entry);
3865
+ else if (!hasAssistantMessage(entries))
3866
+ return false;
3867
3867
  else
3868
3868
  appendSessionEntries(filePath, entries);
3869
3869
  return true;
@@ -9931,6 +9931,8 @@ function appendDurableDisplayCard(session, message, delivery) {
9931
9931
  const card = { ...message, excludeFromContext: true };
9932
9932
  const admitted = message;
9933
9933
  const intentEntryId = session.sessionManager.appendCustomMessageEntry(card.customType, card.content, card.display, card.details, true, { delivery }, admitted.stageAdmissionKey);
9934
+ if (admitted.stageAdmissionKey !== undefined)
9935
+ session.sessionManager.flush();
9934
9936
  session.agent.state.messages.push(card);
9935
9937
  return { card, intentEntryId };
9936
9938
  }
@@ -10156,12 +10158,17 @@ var init_agent_session_persistent_custom_messages = __esm(() => {
10156
10158
  });
10157
10159
 
10158
10160
  // src/core/agent-session-custom-message-commit.ts
10161
+ function appendDurableStageAdmission(session, message) {
10162
+ session._appendCustomMessage(message);
10163
+ if (message.stageAdmissionKey !== undefined)
10164
+ session.sessionManager?.flush();
10165
+ }
10159
10166
  async function commitAdmittedCustomMessage(session, appMessage, options) {
10160
10167
  const owner = resolveWorkflowStageDeliveryTarget(session);
10161
10168
  if (owner !== session)
10162
10169
  return commitAdmittedCustomMessage(owner, appMessage, options);
10163
10170
  const self = session;
10164
- const useProtectedReconciliation = options?.persistWhenStreaming === true && options.triggerTurn === true && options.excludeFromContext !== true;
10171
+ const useProtectedReconciliation = options?.persistWhenStreaming === true && options.excludeFromContext !== true && (options.triggerTurn === true || options.stageAdmissionKey !== undefined);
10165
10172
  if (options?.deliverAs === "nextTurn") {
10166
10173
  self._pendingNextTurnMessages.push(appMessage);
10167
10174
  } else if (self._queuedMessagesPaused) {
@@ -10175,20 +10182,20 @@ async function commitAdmittedCustomMessage(session, appMessage, options) {
10175
10182
  } else if (self.isStreaming) {
10176
10183
  self._pendingCustomMessages.push(appMessage);
10177
10184
  } else {
10178
- self._appendCustomMessage(appMessage);
10185
+ appendDurableStageAdmission(self, appMessage);
10179
10186
  }
10180
10187
  } else if (options?.deliverAs === "interrupt" && options.triggerTurn) {
10181
10188
  const interrupt = self._enqueueInterruptCustomMessage(appMessage, options);
10182
10189
  self._workflowStageAdmission?.trackAdmittedWork(interrupt);
10183
10190
  interrupt.catch(() => {});
10184
10191
  } else if (self.isStreaming && options?.excludeFromContext === true && options.triggerTurn !== true && options.deliverAs === undefined) {
10185
- self._appendCustomMessage(appMessage);
10192
+ appendDurableStageAdmission(self, appMessage);
10186
10193
  } else if (self.isStreaming && options?.triggerTurn === false) {
10187
10194
  self._pendingCustomMessages.push(appMessage);
10188
10195
  } else if (self.isStreaming && useProtectedReconciliation) {
10189
10196
  await queueProtectedStreamingCustomMessage(self, appMessage, options?.deliverAs === "followUp" ? "followUp" : "steer");
10190
10197
  } else if (self.isStreaming && options?.persistWhenStreaming === true) {
10191
- self._appendCustomMessage(appMessage);
10198
+ appendDurableStageAdmission(self, appMessage);
10192
10199
  } else if (self.isStreaming && options?.triggerTurn !== false) {
10193
10200
  self._queueAgentMessage(appMessage, options?.deliverAs === "followUp" ? "followUp" : "steer");
10194
10201
  } else if (options?.triggerTurn) {
@@ -10211,7 +10218,7 @@ async function commitAdmittedCustomMessage(session, appMessage, options) {
10211
10218
  self._continueQueuedAgentMessages().catch(() => {});
10212
10219
  }
10213
10220
  } else {
10214
- self._appendCustomMessage(appMessage);
10221
+ appendDurableStageAdmission(self, appMessage);
10215
10222
  }
10216
10223
  }
10217
10224
  function _commitAdmittedCustomMessage(appMessage, options) {
@@ -21613,11 +21620,20 @@ import {
21613
21620
  function isCodexFastModeSupportedProvider(provider) {
21614
21621
  return provider === "openai" || provider === "openai-codex";
21615
21622
  }
21616
- function isCodexFastModeSupportedModel(model) {
21617
- return isCodexFastModeSupportedProvider(model.provider) || model.api === "openai-codex-responses";
21623
+ function isGitHubCopilotModel(model) {
21624
+ return model.provider === "github-copilot";
21618
21625
  }
21619
- function hasSupportedCodexFastModeModel(models) {
21620
- return models.some(isCodexFastModeSupportedModel);
21626
+ function isGitHubCopilotFastModeSupportedModel(model, credential) {
21627
+ if (!isGitHubCopilotModel(model) || credential?.type !== "oauth")
21628
+ return false;
21629
+ const fastModelIds = credential.fastModelIds;
21630
+ return Array.isArray(fastModelIds) && fastModelIds.every((modelId) => typeof modelId === "string") && fastModelIds.includes(`${model.id}-fast`);
21631
+ }
21632
+ function isCodexFastModeSupportedModel(model, copilotCredential) {
21633
+ return isCodexFastModeSupportedProvider(model.provider) || model.api === "openai-codex-responses" || model.id !== undefined && isGitHubCopilotFastModeSupportedModel({ provider: model.provider, id: model.id }, copilotCredential);
21634
+ }
21635
+ function hasSupportedCodexFastModeModel(models, copilotCredential) {
21636
+ return models.some((model) => isCodexFastModeSupportedModel(model, copilotCredential));
21621
21637
  }
21622
21638
  function isWorkflowStageOrchestrationContext(context) {
21623
21639
  return context?.kind === "workflow-stage";
@@ -21628,11 +21644,11 @@ function getCodexFastModeScope(context) {
21628
21644
  function isCodexFastModeEnabledForScope(settings, scope) {
21629
21645
  return settings[scope];
21630
21646
  }
21631
- function shouldApplyCodexFastModeForScope(model, settings, scope) {
21632
- return isCodexFastModeSupportedModel(model) && isCodexFastModeEnabledForScope(settings, scope);
21647
+ function shouldApplyCodexFastModeForScope(model, settings, scope, copilotCredential) {
21648
+ return isCodexFastModeSupportedModel(model, copilotCredential) && isCodexFastModeEnabledForScope(settings, scope);
21633
21649
  }
21634
- function shouldApplyCodexFastMode(model, settings, context) {
21635
- return shouldApplyCodexFastModeForScope(model, settings, getCodexFastModeScope(context));
21650
+ function shouldApplyCodexFastMode(model, settings, context, copilotCredential) {
21651
+ return shouldApplyCodexFastModeForScope(model, settings, getCodexFastModeScope(context), copilotCredential);
21636
21652
  }
21637
21653
  function formatCodexFastModeModelLabel(modelName, enabled) {
21638
21654
  return enabled ? `${modelName} fast` : modelName;
@@ -21773,7 +21789,7 @@ class FooterComponent {
21773
21789
  pwd += ` • ${sessionName}`;
21774
21790
  const modelName = state.model?.id || "no-model";
21775
21791
  const fastModeSettings = this.session.settingsManager.getCodexFastModeSettings();
21776
- const fastModeEnabled = state.model ? shouldApplyCodexFastMode(state.model, fastModeSettings, this.session.orchestrationContext) : false;
21792
+ const fastModeEnabled = state.model ? shouldApplyCodexFastMode(state.model, fastModeSettings, this.session.orchestrationContext, this.session.modelRuntime.getCredentialSnapshot?.("github-copilot")) : false;
21777
21793
  let modelLabel2 = modelName;
21778
21794
  if (state.model?.reasoning) {
21779
21795
  const thinkingLevel = state.thinkingLevel || "off";
@@ -39361,14 +39377,18 @@ import { AsyncLocalStorage } from "node:async_hooks";
39361
39377
 
39362
39378
  class WorkflowStageAdmissionBoundary {
39363
39379
  open = true;
39364
- completed = new Set;
39380
+ completed;
39365
39381
  inFlight = new Map;
39366
39382
  pending = new Set;
39367
39383
  invocationContext = new AsyncLocalStorage;
39368
39384
  closePromise;
39369
39385
  drainAdmittedWork;
39370
- constructor(drainAdmittedWork = async () => {}) {
39371
- this.drainAdmittedWork = drainAdmittedWork;
39386
+ constructor(drainAdmittedWork = undefined, completedKeys = []) {
39387
+ this.drainAdmittedWork = drainAdmittedWork ?? (async () => {});
39388
+ this.completed = new Set(completedKeys);
39389
+ }
39390
+ static restore(entries, drainAdmittedWork) {
39391
+ return new WorkflowStageAdmissionBoundary(drainAdmittedWork, Array.from(entries).flatMap((entry) => entry.type === "custom_message" && typeof entry.stageAdmissionKey === "string" ? [entry.stageAdmissionKey] : []));
39372
39392
  }
39373
39393
  admit(key, deliver, routeLate) {
39374
39394
  if (key !== undefined) {
@@ -39607,7 +39627,7 @@ class AgentSessionBase {
39607
39627
  this._subagentPolicy = config.subagentPolicy;
39608
39628
  this._systemPromptTransform = config.systemPromptTransform;
39609
39629
  const stageContext = config.orchestrationContext?.kind === "workflow-stage" ? config.orchestrationContext : undefined;
39610
- this._workflowStageAdmission = stageContext?.messageAdmission?.boundary ?? (stageContext ? new WorkflowStageAdmissionBoundary : undefined);
39630
+ this._workflowStageAdmission = stageContext?.messageAdmission?.boundary ?? (stageContext ? WorkflowStageAdmissionBoundary.restore(this.sessionManager.getBranch()) : undefined);
39611
39631
  if (this._workflowStageAdmission && stageContext && stageContext.messageAdmission === undefined) {
39612
39632
  stageContext.messageAdmission = {
39613
39633
  boundary: this._workflowStageAdmission,
@@ -46559,6 +46579,31 @@ class RemoteQueuePause {
46559
46579
  var init_remote_queue_pause = () => {};
46560
46580
 
46561
46581
  // src/modes/interactive-engine/isolated-runtime.ts
46582
+ import { clampThinkingLevel as clampThinkingLevel5 } from "@bastani/pi-ai/compat";
46583
+ function applyPersistedModelDefault(session, model, alreadyInScope) {
46584
+ session.settingsManager.setDefaultModelAndProvider(model.provider, model.id);
46585
+ if (alreadyInScope || session.scopedModels.length === 0)
46586
+ return;
46587
+ const enabledModels = session.settingsManager.getEnabledModels();
46588
+ if (!enabledModels?.length)
46589
+ return;
46590
+ const modelReference = `${model.provider}/${model.id}`;
46591
+ if (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase()))
46592
+ return;
46593
+ session.settingsManager.setEnabledModels([...enabledModels, modelReference]);
46594
+ }
46595
+ function thinkingPersistTarget(result) {
46596
+ if (!result.provider || !result.modelId)
46597
+ return;
46598
+ return { provider: result.provider, modelId: result.modelId };
46599
+ }
46600
+ function applyPersistedThinkingDefault(session, level, target) {
46601
+ if (target) {
46602
+ session.settingsManager.setModelThinkingLevel(target.provider, target.modelId, level);
46603
+ return;
46604
+ }
46605
+ session.settingsManager.setDefaultThinkingLevel(level);
46606
+ }
46562
46607
  var IsolatedInteractiveRuntime;
46563
46608
  var init_isolated_runtime = __esm(() => {
46564
46609
  init_agent_session_runtime();
@@ -46577,6 +46622,7 @@ var init_isolated_runtime = __esm(() => {
46577
46622
  steeringMessages = [];
46578
46623
  followUpMessages = [];
46579
46624
  queueUpdateGeneration = 0;
46625
+ thinkingEpoch = 0;
46580
46626
  pendingQueueClear;
46581
46627
  engineCallbackActive = false;
46582
46628
  queuePause;
@@ -46941,43 +46987,56 @@ var init_isolated_runtime = __esm(() => {
46941
46987
  },
46942
46988
  setModel: {
46943
46989
  configurable: true,
46944
- value: async (model) => {
46945
- const selected = await this.client.setModel(model.provider, model.id);
46946
- session.agent.state.model = session.modelRuntime.getModel(selected.provider, selected.id) ?? model;
46990
+ value: async (model, options) => {
46991
+ const selected = await this.client.setModel(model.provider, model.id, options);
46992
+ const nextModel = session.modelRuntime.getModel(selected.provider, selected.id) ?? model;
46993
+ session.agent.state.model = nextModel;
46947
46994
  this.resolveModelFallback();
46995
+ if (options?.persist === true)
46996
+ await this.syncPersistedModelCatalog(session, nextModel);
46948
46997
  }
46949
46998
  },
46950
46999
  setThinkingLevel: {
46951
47000
  configurable: true,
46952
- value: (level) => {
46953
- session.agent.state.thinkingLevel = level;
46954
- this.dispatchBestEffort("set thinking level", this.client.setThinkingLevel(level));
47001
+ value: (level, options) => {
47002
+ const availableLevels = session.getAvailableThinkingLevels();
47003
+ const effectiveLevel = availableLevels.includes(level) ? level : session.model ? clampThinkingLevel5(session.model, level) : "off";
47004
+ session.agent.state.thinkingLevel = effectiveLevel;
47005
+ const epoch = ++this.thinkingEpoch;
47006
+ this.dispatchBestEffort("set thinking level", this.client.setThinkingLevelAck(level, options).then((result) => {
47007
+ this.applyThinkingAck(session, epoch, result, options?.persist === true);
47008
+ }));
46955
47009
  }
46956
47010
  },
46957
47011
  cycleModel: {
46958
47012
  configurable: true,
46959
- value: async (direction) => {
47013
+ value: async (direction, options) => {
46960
47014
  const previousModel = session.model;
46961
- const result = await this.client.cycleModel(direction);
47015
+ const result = await this.client.cycleModel(direction, options);
46962
47016
  if (!result)
46963
47017
  return;
46964
47018
  const model = session.modelRuntime.getModel(result.model.provider, result.model.id) ?? result.model;
46965
47019
  session.agent.state.model = model;
46966
47020
  session.agent.state.thinkingLevel = result.thinkingLevel;
46967
47021
  this.resolveModelFallbackAfterExplicitModelSelection(previousModel, model);
47022
+ if (options?.persist === true)
47023
+ await this.syncPersistedModelCatalog(session, model);
46968
47024
  return { ...result, model };
46969
47025
  }
46970
47026
  },
46971
47027
  cycleThinkingLevel: {
46972
47028
  configurable: true,
46973
- value: () => {
47029
+ value: (options) => {
46974
47030
  const levels = session.getAvailableThinkingLevels();
46975
47031
  if (levels.length <= 1)
46976
47032
  return;
46977
47033
  const current = levels.indexOf(session.thinkingLevel);
46978
47034
  const level = levels[(current + 1) % levels.length];
46979
47035
  session.agent.state.thinkingLevel = level;
46980
- this.dispatchBestEffort("cycle thinking level", this.client.setThinkingLevel(level));
47036
+ const epoch = ++this.thinkingEpoch;
47037
+ this.dispatchBestEffort("cycle thinking level", this.client.setThinkingLevelAck(level, options).then((result) => {
47038
+ this.applyThinkingAck(session, epoch, result, options?.persist === true);
47039
+ }));
46981
47040
  return level;
46982
47041
  }
46983
47042
  },
@@ -47021,6 +47080,14 @@ var init_isolated_runtime = __esm(() => {
47021
47080
  this.engineCallbackActive = false;
47022
47081
  }
47023
47082
  }
47083
+ applyThinkingAck(session, epoch, result, persist) {
47084
+ if (persist) {
47085
+ applyPersistedThinkingDefault(session, result.level, thinkingPersistTarget(result));
47086
+ }
47087
+ if (epoch === this.thinkingEpoch) {
47088
+ session.agent.state.thinkingLevel = result.level;
47089
+ }
47090
+ }
47024
47091
  dispatchBestEffort(label, operation) {
47025
47092
  operation.catch((error) => {
47026
47093
  if (this.health.isRecovering())
@@ -47061,6 +47128,12 @@ var init_isolated_runtime = __esm(() => {
47061
47128
  }
47062
47129
  });
47063
47130
  }
47131
+ async syncPersistedModelCatalog(session, model) {
47132
+ const alreadyInScope = session.scopedModels.some((scoped) => scoped.model.provider === model.provider && scoped.model.id === model.id);
47133
+ const catalog = await this.client.requestInternal({ type: "get_available_models" });
47134
+ this.remoteModelCatalog.apply(catalog);
47135
+ applyPersistedModelDefault(session, model, alreadyInScope);
47136
+ }
47064
47137
  refreshSessionView() {
47065
47138
  const session = super.session;
47066
47139
  const sessionFile = session.sessionFile;
@@ -47100,6 +47173,7 @@ var init_isolated_runtime = __esm(() => {
47100
47173
  session.agent.state.model = event.model;
47101
47174
  break;
47102
47175
  case "thinking_level_changed":
47176
+ this.thinkingEpoch += 1;
47103
47177
  session.agent.state.thinkingLevel = event.level;
47104
47178
  break;
47105
47179
  case "session_info_changed":
@@ -48313,7 +48387,7 @@ var init_slash_commands = __esm(() => {
48313
48387
  { name: "tree", description: "Navigate session tree (switch branches)" },
48314
48388
  { name: "thinking", description: "Set thinking level", argumentHint: "<level>" },
48315
48389
  { name: "scoped-models", description: "Enable/disable models for ctrl+p cycling" },
48316
- { name: "fast", description: "Configure Codex fast mode for chat and workflows" },
48390
+ { name: "fast", description: "Configure OpenAI fast mode for chat and workflows in supported models" },
48317
48391
  { name: "export", description: "Export session (HTML default, or specify path: .html/.jsonl)" },
48318
48392
  { name: "import", description: "Import and resume a session from a JSONL file" },
48319
48393
  { name: "share", description: "Share session as a secret GitHub gist" },
@@ -49765,7 +49839,7 @@ var init_interactive_autocomplete = __esm(() => {
49765
49839
  return [...this.session.modelRuntime.getAvailableSnapshot()];
49766
49840
  };
49767
49841
  InteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function() {
49768
- return hasSupportedCodexFastModeModel(this.getCodexFastModeCandidateModels());
49842
+ return hasSupportedCodexFastModeModel(this.getCodexFastModeCandidateModels(), this.session.modelRuntime.getCredentialSnapshot?.("github-copilot"));
49769
49843
  };
49770
49844
  InteractiveModeBase.prototype.buildRemoteSlashCommands = function(localCommands) {
49771
49845
  const remote = getInteractiveEngineRemoteCommands(this.runtimeHost);
@@ -50453,7 +50527,7 @@ var init_interactive_startup = __esm(() => {
50453
50527
  if (!model) {
50454
50528
  return modelLabel2;
50455
50529
  }
50456
- const fastModeEnabled = shouldApplyCodexFastMode(model, this.session.settingsManager.getCodexFastModeSettings(), this.session.orchestrationContext);
50530
+ const fastModeEnabled = shouldApplyCodexFastMode(model, this.session.settingsManager.getCodexFastModeSettings(), this.session.orchestrationContext, this.session.modelRuntime.getCredentialSnapshot?.("github-copilot"));
50457
50531
  return formatCodexFastModeModelLabel(modelLabel2, fastModeEnabled);
50458
50532
  };
50459
50533
  InteractiveModeBase.prototype.getStartupIdentityText = function(maxWidth, gap = 0, manifestoPhase = 4) {
@@ -54968,7 +55042,7 @@ var init_interactive_selectors = __esm(() => {
54968
55042
  });
54969
55043
 
54970
55044
  // src/modes/interactive/interactive-model-routing.ts
54971
- import { clampThinkingLevel as clampThinkingLevel5 } from "@bastani/pi-ai/compat";
55045
+ import { clampThinkingLevel as clampThinkingLevel6 } from "@bastani/pi-ai/compat";
54972
55046
  function resolveThinkingSelectorDefault(rawDefault, availableLevels, model) {
54973
55047
  if (rawDefault === undefined)
54974
55048
  return;
@@ -54976,7 +55050,7 @@ function resolveThinkingSelectorDefault(rawDefault, availableLevels, model) {
54976
55050
  return rawDefault;
54977
55051
  if (!model)
54978
55052
  return availableLevels.includes("off") ? "off" : availableLevels[0];
54979
- const clamped = clampThinkingLevel5(model, rawDefault);
55053
+ const clamped = clampThinkingLevel6(model, rawDefault);
54980
55054
  if (availableLevels.includes(clamped))
54981
55055
  return clamped;
54982
55056
  return availableLevels.includes("off") ? "off" : availableLevels[0];
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/web-access",
3
- "version": "0.9.16-alpha.7",
3
+ "version": "0.9.16-alpha.8",
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,21 @@ 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.16-alpha.8] - 2026-08-27
10
+
11
+ ### Added
12
+
13
+ - Added a dedicated `workflow answer` action for responding to pending primitive and structured human-in-the-loop prompts without exposing stage-message delivery semantics.
14
+ - Added durable pending-stage message state for ordinary Intercom delivery, including FIFO delivery before the first model turn, resume/replay persistence, exactly-once stage-attempt handling, lifecycle failure notifications, and guidance for propagating material updates to known workflow stages that have not started. ([#2717](https://github.com/bastani-inc/atomic/issues/2717))
15
+
16
+ ### Changed
17
+
18
+ - Periodic workflow heartbeat prompts now guide supervising agents to use ordinary Intercom when steering or communication is useful, match an update's reach to the expanded workflow topology, send shared scope or acceptance changes consistently across every relevant live and known unstarted worker/reviewer stage, account for immediate and queued pre-first-turn delivery, and use workflow pause, resume, interrupt, or quit for run control.
19
+
20
+ ### Removed
21
+
22
+ - Removed the public `workflow send` action and its stage-chat delivery modes. Use `workflow answer` for pending human-input prompts, `workflow resume` for paused control, and ordinary Intercom for live or deferred workflow-stage communication.
23
+
9
24
  ## [0.9.16-alpha.7] - 2026-08-26
10
25
 
11
26
  ### Changed