@bastani/atomic 0.9.16-alpha.6 → 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 (214) 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/CHANGELOG.md +6 -0
  20. package/dist/builtin/subagents/package.json +1 -1
  21. package/dist/builtin/subagents/skills/qlty/SKILL.md +123 -0
  22. package/dist/builtin/subagents/skills/qlty/references/coding-with-ai-agents.md +64 -0
  23. package/dist/builtin/subagents/skills/qlty/references/commands.md +291 -0
  24. package/dist/builtin/subagents/skills/qlty/references/plugins-and-extensions.md +228 -0
  25. package/dist/builtin/subagents/skills/qlty/references/quickstart.md +110 -0
  26. package/dist/builtin/subagents/src/extension/index.bundle.mjs +173 -51
  27. package/dist/builtin/web-access/index.bundle.mjs +109 -35
  28. package/dist/builtin/web-access/package.json +1 -1
  29. package/dist/builtin/workflows/CHANGELOG.md +23 -0
  30. package/dist/builtin/workflows/README.md +40 -37
  31. package/dist/builtin/workflows/builtin/adversarial-verification.js +13 -0
  32. package/dist/builtin/workflows/builtin/{shared-prompts.ts → chunk-0x6e303p.js} +137 -133
  33. package/dist/builtin/workflows/builtin/chunk-29wrp38a.js +199 -0
  34. package/dist/builtin/workflows/builtin/chunk-2dqb5s2q.js +602 -0
  35. package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +264 -0
  36. package/dist/builtin/workflows/builtin/chunk-5n10x7j2.js +69730 -0
  37. package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +4 -0
  38. package/dist/builtin/workflows/builtin/chunk-6fqs7c01.js +155 -0
  39. package/dist/builtin/workflows/builtin/chunk-7430zyas.js +126 -0
  40. package/dist/builtin/workflows/builtin/chunk-7at6dnkr.js +33 -0
  41. package/dist/builtin/workflows/builtin/chunk-82ha8p41.js +175 -0
  42. package/dist/builtin/workflows/builtin/chunk-bfkmzv9h.js +156 -0
  43. package/dist/builtin/workflows/builtin/chunk-c53y8bdh.js +345 -0
  44. package/dist/builtin/workflows/builtin/chunk-cdtd3m3w.js +529 -0
  45. package/dist/builtin/workflows/builtin/chunk-cg9tmks0.js +206 -0
  46. package/dist/builtin/workflows/builtin/chunk-hdpj1dkw.js +2447 -0
  47. package/dist/builtin/workflows/builtin/chunk-hzzn6adg.js +221 -0
  48. package/dist/builtin/workflows/builtin/chunk-nqr34qp3.js +1061 -0
  49. package/dist/builtin/workflows/builtin/chunk-qwzvgxnq.js +404 -0
  50. package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +215 -0
  51. package/dist/builtin/workflows/builtin/chunk-v04c5qmd.js +1207 -0
  52. package/dist/builtin/workflows/builtin/chunk-wpckd35c.js +12 -0
  53. package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +4110 -0
  54. package/dist/builtin/workflows/builtin/chunk-zf28603f.js +1080 -0
  55. package/dist/builtin/workflows/builtin/classify-and-act.js +12 -0
  56. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +10 -0
  57. package/dist/builtin/workflows/builtin/generate-and-filter.js +12 -0
  58. package/dist/builtin/workflows/builtin/goal.js +16 -0
  59. package/dist/builtin/workflows/builtin/index.js +49 -0
  60. package/dist/builtin/workflows/builtin/loop-until-done.js +12 -0
  61. package/dist/builtin/workflows/builtin/open-claude-design.js +11 -0
  62. package/dist/builtin/workflows/builtin/ralph.js +16 -0
  63. package/dist/builtin/workflows/builtin/steering-context.d.ts +6 -0
  64. package/dist/builtin/workflows/builtin/steering-context.js +7 -0
  65. package/dist/builtin/workflows/builtin/tournament.js +13 -0
  66. package/dist/builtin/workflows/package.json +10 -7
  67. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
  68. package/dist/builtin/workflows/src/extension/index.bundle.mjs +1250 -428
  69. package/dist/builtin/workflows/src/{index.bundle.mjs → index.js} +956 -427
  70. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +403 -0
  71. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +327 -0
  72. package/dist/builtin/workflows/src/shared/budget.d.ts +67 -0
  73. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +60 -0
  74. package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
  75. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  76. package/dist/core/agent-session-custom-message-commit.js +12 -5
  77. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  78. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  79. package/dist/core/agent-session-persistent-custom-messages.js +2 -0
  80. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  81. package/dist/core/agent-session.d.ts.map +1 -1
  82. package/dist/core/agent-session.js +2 -1
  83. package/dist/core/agent-session.js.map +1 -1
  84. package/dist/core/auth-storage.d.ts +2 -0
  85. package/dist/core/auth-storage.d.ts.map +1 -1
  86. package/dist/core/auth-storage.js +4 -0
  87. package/dist/core/auth-storage.js.map +1 -1
  88. package/dist/core/builtin-install-layout.d.ts +1 -1
  89. package/dist/core/builtin-install-layout.d.ts.map +1 -1
  90. package/dist/core/builtin-install-layout.js +1 -1
  91. package/dist/core/builtin-install-layout.js.map +1 -1
  92. package/dist/core/codex-fast-mode.d.ts +10 -7
  93. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  94. package/dist/core/codex-fast-mode.js +31 -13
  95. package/dist/core/codex-fast-mode.js.map +1 -1
  96. package/dist/core/extensions/context-types.d.ts +35 -0
  97. package/dist/core/extensions/context-types.d.ts.map +1 -1
  98. package/dist/core/extensions/context-types.js.map +1 -1
  99. package/dist/core/extensions/index.d.ts +1 -1
  100. package/dist/core/extensions/index.d.ts.map +1 -1
  101. package/dist/core/extensions/index.js.map +1 -1
  102. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  103. package/dist/core/extensions/loader-virtual-modules.js +6 -1
  104. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  105. package/dist/core/model-runtime.d.ts +2 -0
  106. package/dist/core/model-runtime.d.ts.map +1 -1
  107. package/dist/core/model-runtime.js +4 -0
  108. package/dist/core/model-runtime.js.map +1 -1
  109. package/dist/core/runtime-credentials.d.ts +1 -0
  110. package/dist/core/runtime-credentials.d.ts.map +1 -1
  111. package/dist/core/runtime-credentials.js +8 -0
  112. package/dist/core/runtime-credentials.js.map +1 -1
  113. package/dist/core/sdk.d.ts.map +1 -1
  114. package/dist/core/sdk.js +5 -5
  115. package/dist/core/sdk.js.map +1 -1
  116. package/dist/core/session-manager-storage.d.ts +2 -0
  117. package/dist/core/session-manager-storage.d.ts.map +1 -1
  118. package/dist/core/session-manager-storage.js +4 -2
  119. package/dist/core/session-manager-storage.js.map +1 -1
  120. package/dist/core/slash-commands.js +1 -1
  121. package/dist/core/slash-commands.js.map +1 -1
  122. package/dist/core/workflow-stage-admission.d.ts +6 -1
  123. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  124. package/dist/core/workflow-stage-admission.js +8 -9
  125. package/dist/core/workflow-stage-admission.js.map +1 -1
  126. package/dist/index.d.ts +0 -1
  127. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  128. package/dist/modes/interactive/components/footer.js +1 -1
  129. package/dist/modes/interactive/components/footer.js.map +1 -1
  130. package/dist/modes/interactive/interactive-autocomplete.js +1 -1
  131. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  132. package/dist/modes/interactive/interactive-startup.js +1 -1
  133. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  134. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -0
  135. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  136. package/dist/modes/interactive-engine/isolated-runtime.js +69 -10
  137. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  138. package/dist/modes/rpc/rpc-client-api.d.ts +18 -2
  139. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  140. package/dist/modes/rpc/rpc-client-api.js +33 -5
  141. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  142. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  143. package/dist/modes/rpc/rpc-command-handler.js +8 -4
  144. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  145. package/dist/modes/rpc/rpc-types.d.ts +13 -0
  146. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  147. package/dist/modes/rpc/rpc-types.js.map +1 -1
  148. package/docs/intercom.md +15 -6
  149. package/docs/packages.md +2 -2
  150. package/docs/providers.md +8 -3
  151. package/docs/quickstart.md +3 -2
  152. package/docs/rpc.md +21 -4
  153. package/docs/settings.md +6 -4
  154. package/docs/skills.md +4 -0
  155. package/docs/subagents.md +1 -1
  156. package/docs/usage.md +1 -1
  157. package/docs/workflows.md +112 -239
  158. package/npm-shrinkwrap.json +32 -32
  159. package/package.json +9 -13
  160. package/dist/builtin/workflows/ambient.d.ts +0 -61
  161. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +0 -26
  162. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +0 -391
  163. package/dist/builtin/workflows/builtin/adversarial-verification.ts +0 -34
  164. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +0 -14
  165. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +0 -108
  166. package/dist/builtin/workflows/builtin/classify-and-act.ts +0 -40
  167. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +0 -14
  168. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +0 -96
  169. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +0 -37
  170. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +0 -41
  171. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +0 -90
  172. package/dist/builtin/workflows/builtin/generate-and-filter.ts +0 -31
  173. package/dist/builtin/workflows/builtin/goal-artifacts.ts +0 -64
  174. package/dist/builtin/workflows/builtin/goal-convergence.ts +0 -87
  175. package/dist/builtin/workflows/builtin/goal-ledger.ts +0 -139
  176. package/dist/builtin/workflows/builtin/goal-models.ts +0 -72
  177. package/dist/builtin/workflows/builtin/goal-orchestrator-prompts.ts +0 -94
  178. package/dist/builtin/workflows/builtin/goal-prompts.ts +0 -211
  179. package/dist/builtin/workflows/builtin/goal-reducer.ts +0 -176
  180. package/dist/builtin/workflows/builtin/goal-reports.ts +0 -76
  181. package/dist/builtin/workflows/builtin/goal-reverify.ts +0 -305
  182. package/dist/builtin/workflows/builtin/goal-review.ts +0 -139
  183. package/dist/builtin/workflows/builtin/goal-runner.ts +0 -504
  184. package/dist/builtin/workflows/builtin/goal-schemas.ts +0 -89
  185. package/dist/builtin/workflows/builtin/goal-types.ts +0 -164
  186. package/dist/builtin/workflows/builtin/goal.ts +0 -78
  187. package/dist/builtin/workflows/builtin/index.ts +0 -16
  188. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +0 -87
  189. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +0 -282
  190. package/dist/builtin/workflows/builtin/loop-until-done.ts +0 -51
  191. package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +0 -305
  192. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +0 -337
  193. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +0 -347
  194. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +0 -313
  195. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -311
  196. package/dist/builtin/workflows/builtin/open-claude-design.ts +0 -57
  197. package/dist/builtin/workflows/builtin/pattern-artifact-root.ts +0 -28
  198. package/dist/builtin/workflows/builtin/progress-scoring.ts +0 -230
  199. package/dist/builtin/workflows/builtin/ralph-core.ts +0 -449
  200. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +0 -100
  201. package/dist/builtin/workflows/builtin/ralph-models.ts +0 -183
  202. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +0 -103
  203. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +0 -100
  204. package/dist/builtin/workflows/builtin/ralph-runner.ts +0 -455
  205. package/dist/builtin/workflows/builtin/ralph.ts +0 -82
  206. package/dist/builtin/workflows/builtin/review-convergence.ts +0 -229
  207. package/dist/builtin/workflows/builtin/selection-math.ts +0 -156
  208. package/dist/builtin/workflows/builtin/steering-context.ts +0 -51
  209. package/dist/builtin/workflows/builtin/tournament-prompts.ts +0 -70
  210. package/dist/builtin/workflows/builtin/tournament-runner.ts +0 -400
  211. package/dist/builtin/workflows/builtin/tournament.ts +0 -73
  212. package/dist/builtin/workflows/builtin/verification-criteria.ts +0 -330
  213. package/dist/builtin/workflows/builtin/verification-prompts.ts +0 -206
  214. 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.6",
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,29 @@ 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
+
24
+ ## [0.9.16-alpha.7] - 2026-08-26
25
+
26
+ ### Changed
27
+
28
+ - Builtin `goal` and `ralph` stage prompts now carry a shared `code_quality_verification` section pointing stages at the `qlty` skill (or `skill: "qlty"` delegation) for linting, auto-formatting, complexity and duplication metrics, and code smells — weighted higher when the objective asks for verifiers or high code quality. It reaches the goal controller, goal orchestrator, goal reviewer, ralph orchestrator, and both ralph reviewers, alongside the existing end-to-end verification guidance. Repository-defined checks in AGENTS.md/CLAUDE.md, package scripts, and CI remain authoritative.
29
+ - Builtin `goal` and `ralph` stage prompts now carry a shared `repository_intent` section instructing implementers and reviewers to infer maintainer and requesting-user conventions by mining repository behavior — git history (including `git log --show-signature`), merged PRs, issues and their comments, review comments, commit subjects and trailers, and CI/branch-protection config — for unwritten norms such as commit signing, message style and issue linking, changelog discipline, PR size and review etiquette. The dominant, recent, intentional pattern wins over accidental drift, the requesting user's own activity weighs highest, implementers match inferred conventions in delivered work, and reviewers report deviations as evidence-backed convention findings. Behavioral evidence fills contract gaps and never overrides the literal objective, acceptance criteria, or explicit AGENTS.md/CLAUDE.md guidance. It reaches the same call sites as the code-quality guidance: goal controller, goal orchestrator, goal reviewer, ralph orchestrator, and both ralph reviewers.
30
+ - The `workflow` tool's routing guidance adds a repository-intent clause to the pre-launch architecture pass: for coding tasks, mine git history, merged PRs, issues, commits, and review comments before freezing authored workflow objectives and acceptance criteria so they capture unwritten conventions, weighing the requesting user's own activity highest; non-coding tasks mine their analogous available context sources (issue trackers, long-form docs, chat/comment threads, prior artifacts) the same way.
31
+
9
32
  ## [0.9.16-alpha.6] - 2026-08-26
10
33
 
11
34
  ### Changed