@abot-ai/runtime 1.1.0 → 1.2.0

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 (268) hide show
  1. package/README.md +6 -3
  2. package/dist/src/capabilities/tool-types.d.ts +1 -1
  3. package/dist/src/model-gateway/providers/ollama/generation-options.d.ts +1 -3
  4. package/dist/src/model-gateway/providers/ollama/generation-options.js +1 -5
  5. package/dist/src/model-gateway/providers/ollama/payload.js +0 -8
  6. package/dist/src/model-gateway/server/request-body.js +1 -0
  7. package/dist/src/plugin-sdk/index.d.ts +2 -0
  8. package/dist/src/plugin-sdk/index.js +2 -0
  9. package/dist/src/plugin-sdk/tool-availability-brief.d.ts +9 -0
  10. package/dist/src/plugin-sdk/tool-availability-brief.js +48 -0
  11. package/dist/src/plugin-sdk/tool-availability-overview.d.ts +9 -0
  12. package/dist/src/plugin-sdk/tool-availability-overview.js +62 -0
  13. package/dist/src/runtime/adapters/registered-tool-payload-plan.d.ts +0 -9
  14. package/dist/src/runtime/adapters/registered-tool-payload-plan.js +0 -67
  15. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +13 -0
  16. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +84 -0
  17. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/catalog.js +4 -0
  18. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +3 -0
  19. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
  20. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +11 -1
  21. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
  22. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +9 -1
  23. package/dist/src/runtime/capabilities/request-bound-tool-registry.js +1 -24
  24. package/dist/src/runtime/capabilities/tool-availability.d.ts +6 -0
  25. package/dist/src/runtime/capabilities/tool-availability.js +28 -0
  26. package/dist/src/runtime/context/capability-brief.d.ts +25 -0
  27. package/dist/src/runtime/context/capability-brief.js +106 -0
  28. package/dist/src/runtime/context/request-tool-results-message-binding.d.ts +6 -0
  29. package/dist/src/runtime/context/request-tool-results-message-binding.js +30 -0
  30. package/dist/src/runtime/context/request-tool-results-scope.d.ts +3 -0
  31. package/dist/src/runtime/context/request-tool-results-scope.js +8 -0
  32. package/dist/src/runtime/context/request-tool-results.d.ts +8 -4
  33. package/dist/src/runtime/context/request-tool-results.js +49 -38
  34. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +8 -1
  35. package/dist/src/runtime/orchestration/role-calls/child-return.d.ts +4 -0
  36. package/dist/src/runtime/orchestration/role-calls/child-return.js +25 -5
  37. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +8 -3
  38. package/dist/src/runtime/orchestration/role-calls/command-dispatch/child-transitions.d.ts +1 -1
  39. package/dist/src/runtime/orchestration/role-calls/command-dispatch/child-transitions.js +17 -2
  40. package/dist/src/runtime/orchestration/role-calls/command-dispatch.d.ts +1 -1
  41. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +2 -2
  42. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +5 -2
  43. package/dist/src/runtime/orchestration/role-calls/contracts.js +4 -4
  44. package/dist/src/runtime/orchestration/role-calls/dependency-results.d.ts +1 -1
  45. package/dist/src/runtime/orchestration/role-calls/dependency-results.js +1 -0
  46. package/dist/src/runtime/orchestration/role-calls/index.d.ts +5 -1
  47. package/dist/src/runtime/orchestration/role-calls/index.js +5 -1
  48. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +3 -1
  49. package/dist/src/runtime/orchestration/role-calls/ledger.js +9 -2
  50. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  51. package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -2
  52. package/dist/src/runtime/orchestration/role-calls/result-receipt.d.ts +49 -0
  53. package/dist/src/runtime/orchestration/role-calls/result-receipt.js +188 -0
  54. package/dist/src/runtime/orchestration/role-calls/return-result-receipt.d.ts +19 -0
  55. package/dist/src/runtime/orchestration/role-calls/return-result-receipt.js +52 -0
  56. package/dist/src/runtime/orchestration/role-calls/transactions.js +1 -0
  57. package/dist/src/runtime/orchestration/role-calls/work-result-lineage.d.ts +34 -0
  58. package/dist/src/runtime/orchestration/role-calls/work-result-lineage.js +185 -0
  59. package/dist/src/runtime/orchestration/role-calls/work-result-receipt.d.ts +36 -0
  60. package/dist/src/runtime/orchestration/role-calls/work-result-receipt.js +187 -0
  61. package/dist/src/runtime/orchestration/role-executors/activation/result-normalization.js +6 -3
  62. package/dist/src/runtime/orchestration/role-executors/child-invocation/transaction.js +1 -0
  63. package/dist/src/runtime/orchestration/role-executors/contracts.d.ts +2 -1
  64. package/dist/src/runtime/orchestration/worker-capabilities/assignment-provenance.d.ts +36 -0
  65. package/dist/src/runtime/orchestration/worker-capabilities/assignment-provenance.js +171 -0
  66. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +32 -1
  67. package/dist/src/runtime/orchestration/worker-capabilities/execution/invocation-preparation.d.ts +2 -1
  68. package/dist/src/runtime/orchestration/worker-capabilities/execution/invocation-preparation.js +3 -0
  69. package/dist/src/runtime/orchestration/worker-capabilities/execution.js +42 -19
  70. package/dist/src/runtime/orchestration/worker-capabilities/index.d.ts +2 -0
  71. package/dist/src/runtime/orchestration/worker-capabilities/index.js +2 -0
  72. package/dist/src/runtime/orchestration/worker-capabilities/payload-assignment-validation.d.ts +3 -0
  73. package/dist/src/runtime/orchestration/worker-capabilities/payload-assignment-validation.js +30 -0
  74. package/dist/src/runtime/orchestration/worker-capabilities/payload-author.js +8 -19
  75. package/dist/src/runtime/orchestration/worker-capabilities/payload-contracts.d.ts +5 -1
  76. package/dist/src/runtime/orchestration/worker-capabilities/payload-instructions.js +1 -1
  77. package/dist/src/runtime/orchestration/worker-capabilities/payload-source-provenance.d.ts +14 -0
  78. package/dist/src/runtime/orchestration/worker-capabilities/payload-source-provenance.js +132 -0
  79. package/dist/src/runtime/request/capability-brief.d.ts +5 -0
  80. package/dist/src/runtime/request/capability-brief.js +24 -0
  81. package/dist/src/runtime/request/execution-scope.d.ts +2 -1
  82. package/dist/src/runtime/request/role-executor-composition.js +1 -1
  83. package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -1
  84. package/dist/src/runtime/request/worker-capability-composition.js +6 -1
  85. package/dist/src/runtime/request/worker-capability-payload.js +11 -8
  86. package/dist/src/runtime/steps/execution-agent/prompt.js +4 -3
  87. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.d.ts +14 -0
  88. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.js +87 -0
  89. package/dist/src/runtime/steps/planner-decision/contracts.d.ts +3 -5
  90. package/dist/src/runtime/steps/planner-decision/contracts.js +3 -3
  91. package/dist/src/runtime/steps/planner-decision/format.d.ts +3 -2
  92. package/dist/src/runtime/steps/planner-decision/format.js +73 -76
  93. package/dist/src/runtime/steps/planner-decision/input.d.ts +4 -3
  94. package/dist/src/runtime/steps/planner-decision/input.js +10 -7
  95. package/dist/src/runtime/steps/planner-decision/parser.d.ts +3 -2
  96. package/dist/src/runtime/steps/planner-decision/parser.js +10 -19
  97. package/dist/src/runtime/steps/planner-decision/plan-parser.js +18 -12
  98. package/dist/src/runtime/steps/planner-decision/prompt.js +33 -28
  99. package/dist/src/runtime/steps/planner-decision/resume.d.ts +1 -1
  100. package/dist/src/runtime/steps/planner-decision/resume.js +38 -1
  101. package/dist/src/runtime/steps/planner-decision/run.d.ts +3 -2
  102. package/dist/src/runtime/steps/reviewer-decision/audit-coverage.d.ts +10 -0
  103. package/dist/src/runtime/steps/reviewer-decision/audit-coverage.js +186 -0
  104. package/dist/src/runtime/steps/reviewer-decision/contracts.d.ts +3 -8
  105. package/dist/src/runtime/steps/reviewer-decision/contracts.js +12 -6
  106. package/dist/src/runtime/steps/reviewer-decision/delegated-context.d.ts +24 -0
  107. package/dist/src/runtime/steps/reviewer-decision/delegated-context.js +70 -0
  108. package/dist/src/runtime/steps/reviewer-decision/diagnostics.js +1 -1
  109. package/dist/src/runtime/steps/reviewer-decision/format.js +37 -24
  110. package/dist/src/runtime/steps/reviewer-decision/input.js +1 -1
  111. package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +4 -3
  112. package/dist/src/runtime/steps/reviewer-decision/model-context.js +92 -10
  113. package/dist/src/runtime/steps/reviewer-decision/parser.js +19 -1
  114. package/dist/src/runtime/steps/reviewer-decision/projection.js +42 -68
  115. package/dist/src/runtime/steps/reviewer-decision/prompt.js +10 -5
  116. package/dist/src/runtime/steps/reviewer-decision/run.js +12 -3
  117. package/dist/src/runtime/steps/reviewer-decision/verification-coverage.d.ts +14 -0
  118. package/dist/src/runtime/steps/reviewer-decision/verification-coverage.js +52 -0
  119. package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +14 -0
  120. package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +38 -0
  121. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +7 -3
  122. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +2 -0
  123. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +8 -2
  124. package/dist/src/runtime/steps/supervisor-decision/format.js +32 -20
  125. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +4 -1
  126. package/dist/src/runtime/steps/supervisor-decision/input.js +19 -1
  127. package/dist/src/runtime/steps/supervisor-decision/parser.js +62 -59
  128. package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -7
  129. package/dist/src/runtime/steps/supervisor-decision/resume.js +47 -1
  130. package/dist/src/runtime/steps/supervisor-decision/run.js +10 -0
  131. package/dist/src/runtime/steps/supervisor-decision/working-directory.js +2 -1
  132. package/dist/src/runtime/steps/worker-decision/contracts.d.ts +2 -1
  133. package/dist/src/runtime/steps/worker-decision/input/canonical-state.js +8 -1
  134. package/dist/src/runtime/steps/worker-decision/input/diagnostic-projection.js +2 -2
  135. package/dist/src/runtime/steps/worker-decision/input/prompt-context.d.ts +1 -0
  136. package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +4 -1
  137. package/dist/src/runtime/steps/worker-decision/input/reference-context.js +34 -14
  138. package/dist/src/runtime/steps/worker-decision/input/types.d.ts +2 -1
  139. package/dist/src/runtime/steps/worker-decision/input.d.ts +1 -0
  140. package/dist/src/runtime/steps/worker-decision/input.js +1 -0
  141. package/dist/src/runtime/steps/worker-decision/payload-dependency-results.d.ts +8 -0
  142. package/dist/src/runtime/steps/worker-decision/payload-dependency-results.js +19 -0
  143. package/dist/src/runtime/steps/worker-decision/prompt.js +8 -8
  144. package/dist/src/runtime/steps/worker-decision/result-author.js +18 -11
  145. package/dist/src/runtime/steps/worker-decision/run.js +2 -2
  146. package/dist/src/web-ui/app/ARCHITECTURE.md +19 -6
  147. package/dist/src/web-ui/app/app.js +6 -7
  148. package/dist/src/web-ui/app/components/composer-context-window.d.ts +25 -0
  149. package/dist/src/web-ui/app/components/composer-context-window.js +155 -0
  150. package/dist/src/web-ui/app/components/composer-plan.d.ts +9 -0
  151. package/dist/src/web-ui/app/components/composer-plan.js +128 -0
  152. package/dist/src/web-ui/app/components/conversation-activity.d.ts +5 -6
  153. package/dist/src/web-ui/app/components/conversation-activity.js +64 -157
  154. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +23 -0
  155. package/dist/src/web-ui/app/components/conversation-role-cards.js +181 -0
  156. package/dist/src/web-ui/app/components/conversation-sidebar-layout.js +12 -0
  157. package/dist/src/web-ui/app/components/conversation-sources.d.ts +7 -0
  158. package/dist/src/web-ui/app/components/conversation-sources.js +182 -0
  159. package/dist/src/web-ui/app/components/conversation-view.js +34 -6
  160. package/dist/src/web-ui/app/components/model-selector.js +4 -1
  161. package/dist/src/web-ui/app/components/operations-section.js +46 -0
  162. package/dist/src/web-ui/app/components/workspace-shell.js +86 -78
  163. package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +1 -0
  164. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +55 -90
  165. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +2 -0
  166. package/dist/src/web-ui/app/controllers/session-controller.js +17 -12
  167. package/dist/src/web-ui/app/index.html +209 -210
  168. package/dist/src/web-ui/app/lib/composer-plan-model.d.ts +32 -0
  169. package/dist/src/web-ui/app/lib/composer-plan-model.js +108 -0
  170. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +19 -0
  171. package/dist/src/web-ui/app/lib/conversation-role-model.js +193 -0
  172. package/dist/src/web-ui/app/lib/event-presentation.js +30 -9
  173. package/dist/src/web-ui/app/lib/source-url-policy.d.ts +2 -0
  174. package/dist/src/web-ui/app/lib/source-url-policy.js +31 -0
  175. package/dist/src/web-ui/app/lib/task-progress.d.ts +53 -0
  176. package/dist/src/web-ui/app/lib/task-progress.js +233 -0
  177. package/dist/src/web-ui/app/lib/tool-invocation-count.d.ts +5 -0
  178. package/dist/src/web-ui/app/lib/tool-invocation-count.js +21 -0
  179. package/dist/src/web-ui/app/lib/web-source-event.d.ts +8 -0
  180. package/dist/src/web-ui/app/lib/web-source-event.js +21 -0
  181. package/dist/src/web-ui/app/lib/web-sources.d.ts +36 -0
  182. package/dist/src/web-ui/app/lib/web-sources.js +177 -0
  183. package/dist/src/web-ui/app/styles/00-tokens-base.css +15 -3
  184. package/dist/src/web-ui/app/styles/10-shell-sessions.css +24 -34
  185. package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +93 -0
  186. package/dist/src/web-ui/app/styles/20-chat-composer.css +55 -472
  187. package/dist/src/web-ui/app/styles/21-composer-controls.css +368 -0
  188. package/dist/src/web-ui/app/styles/22-composer-context-window.css +90 -0
  189. package/dist/src/web-ui/app/styles/23-composer-plan.css +171 -0
  190. package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +205 -0
  191. package/dist/src/web-ui/app/styles/25-conversation-sources.css +141 -0
  192. package/dist/src/web-ui/app/styles/30-inspector-config.css +21 -209
  193. package/dist/src/web-ui/app/styles/35-memory-onboarding.css +8 -8
  194. package/dist/src/web-ui/app/styles/36-memory-management.css +13 -13
  195. package/dist/src/web-ui/app/styles/37-config-operations.css +197 -0
  196. package/dist/src/web-ui/app/styles/40-config-workspace.css +36 -36
  197. package/dist/src/web-ui/app/styles/90-responsive.css +14 -77
  198. package/dist/src/web-ui/app/styles/foundation.css +2 -2
  199. package/dist/src/web-ui/app/styles.css +7 -0
  200. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  201. package/dist/src/web-ui/app/ui-behavior.js +1 -1
  202. package/docs/configuration.md +15 -8
  203. package/docs/installation.md +7 -4
  204. package/docs/known-limitations.md +21 -0
  205. package/docs/plugins.md +28 -13
  206. package/docs/runtime-invariant-coverage.md +18 -17
  207. package/docs/runtime-prompt-policy-contracts.md +27 -17
  208. package/package.json +4 -3
  209. package/plugins/capability-brief/source/index.ts +5 -48
  210. package/plugins/capability-brief/src/index.cjs +46 -33
  211. package/plugins/system-probe/plugin.json +1 -0
  212. package/plugins/web/README.md +125 -0
  213. package/plugins/web/plugin.json +1 -1
  214. package/plugins/web/skills/web_fetch_skill/SKILL.md +2 -2
  215. package/plugins/web/skills/web_search_skill/SKILL.md +8 -4
  216. package/plugins/web/source/errors.ts +5 -1
  217. package/plugins/web/source/fetch-presentation.ts +61 -0
  218. package/plugins/web/source/fetch-service.ts +2 -31
  219. package/plugins/web/source/light/config.ts +196 -0
  220. package/plugins/web/source/light/crawl/origin-gate.ts +134 -0
  221. package/plugins/web/source/light/crawl/robots-cache.ts +71 -0
  222. package/plugins/web/source/light/crawl/robots-parser.ts +132 -0
  223. package/plugins/web/source/light/crawl/robots-policy.ts +154 -0
  224. package/plugins/web/source/light/crawl/session-budget.ts +141 -0
  225. package/plugins/web/source/light/crawl/transport.ts +216 -0
  226. package/plugins/web/source/light/discovery/candidate-values.ts +63 -0
  227. package/plugins/web/source/light/discovery/feed-document.ts +127 -0
  228. package/plugins/web/source/light/discovery/html-links.ts +80 -0
  229. package/plugins/web/source/light/discovery/html-robots-directives.ts +29 -0
  230. package/plugins/web/source/light/discovery/markup-tree.ts +145 -0
  231. package/plugins/web/source/light/discovery/origin-dates.ts +71 -0
  232. package/plugins/web/source/light/discovery/sitemap-document.ts +63 -0
  233. package/plugins/web/source/light/documents/cache-policy.ts +28 -0
  234. package/plugins/web/source/light/documents/document-cache.ts +99 -0
  235. package/plugins/web/source/light/documents/document-charset.ts +89 -0
  236. package/plugins/web/source/light/documents/document-contract.ts +20 -0
  237. package/plugins/web/source/light/documents/document-reader.ts +75 -0
  238. package/plugins/web/source/light/documents/extract-document.ts +124 -0
  239. package/plugins/web/source/light/documents/http-cache-freshness.ts +68 -0
  240. package/plugins/web/source/light/documents/response-decoding.ts +120 -0
  241. package/plugins/web/source/light/ranking/document-ranking.ts +114 -0
  242. package/plugins/web/source/light/ranking/query-normalization.ts +69 -0
  243. package/plugins/web/source/light/search-collection.ts +136 -0
  244. package/plugins/web/source/light/search-frontier.ts +246 -0
  245. package/plugins/web/source/light/search-metadata.ts +84 -0
  246. package/plugins/web/source/light/search-service.ts +154 -0
  247. package/plugins/web/source/light/search-unavailable.ts +33 -0
  248. package/plugins/web/source/light/sources/catalog.ts +312 -0
  249. package/plugins/web/source/light/sources/source-definition.ts +9 -0
  250. package/plugins/web/source/light/sources/source-selection.ts +35 -0
  251. package/plugins/web/source/plugin.ts +70 -56
  252. package/plugins/web/source/public-http.ts +10 -1
  253. package/plugins/web/source/search-presentation.ts +63 -63
  254. package/plugins/web/source/search-service-selector.ts +31 -0
  255. package/plugins/web/source/search-service.ts +6 -0
  256. package/plugins/web/source/search-source-presentation.ts +76 -0
  257. package/plugins/web/source/search-types.ts +4 -0
  258. package/plugins/web/source/source-output-receipts.ts +267 -0
  259. package/plugins/web/source/source-receipt-budget.ts +51 -0
  260. package/plugins/web/source/source-receipt-contract.ts +18 -0
  261. package/plugins/web/src/index.cjs +3214 -288
  262. package/src/runtime/README.md +30 -9
  263. package/dist/src/model-gateway/structured-output/budget.d.ts +0 -7
  264. package/dist/src/model-gateway/structured-output/budget.js +0 -20
  265. package/dist/src/model-gateway/structured-output/schema-character-estimator.d.ts +0 -1
  266. package/dist/src/model-gateway/structured-output/schema-character-estimator.js +0 -211
  267. package/dist/src/model-gateway/structured-output-budget.d.ts +0 -1
  268. package/dist/src/model-gateway/structured-output-budget.js +0 -1
@@ -52,19 +52,6 @@
52
52
  </svg>
53
53
  <span class="rail-button-label">New</span>
54
54
  </button>
55
- <button
56
- id="operationsWorkspaceButton"
57
- class="rail-button"
58
- type="button"
59
- aria-label="Open operations workspace"
60
- aria-controls="operationsWorkspacePanel"
61
- title="Operations"
62
- >
63
- <svg viewBox="0 0 24 24" aria-hidden="true">
64
- <path d="M4 6h16M4 12h10M4 18h13" />
65
- </svg>
66
- <span class="rail-button-label">Operations</span>
67
- </button>
68
55
  <button
69
56
  id="configWorkspaceButton"
70
57
  class="rail-button"
@@ -186,49 +173,6 @@
186
173
  <h2 id="sessionTitle">New conversation</h2>
187
174
  </div>
188
175
  </div>
189
-
190
- <div class="header-controls">
191
- <div class="control-cluster agent-mode-control">
192
- <span class="control-label">Depth</span>
193
- <button
194
- id="agentModeButton"
195
- class="agent-mode-button"
196
- type="button"
197
- title="Reasoning depth"
198
- aria-haspopup="menu"
199
- aria-expanded="false"
200
- >
201
- Reasoning
202
- </button>
203
- <div id="agentModeMenu" class="agent-mode-menu"></div>
204
- </div>
205
- <div class="control-cluster model-control">
206
- <span class="control-label">Model</span>
207
- <button
208
- id="modelSelectButton"
209
- class="model-select-button"
210
- type="button"
211
- title="Model"
212
- aria-label="Model"
213
- aria-haspopup="menu"
214
- aria-expanded="false"
215
- >
216
- <span id="modelSelectValue">Model</span>
217
- <svg viewBox="0 0 20 20" aria-hidden="true">
218
- <path d="m6 8 4 4 4-4" />
219
- </svg>
220
- </button>
221
- <div id="modelSelectMenu" class="model-select-menu"></div>
222
- <select
223
- id="modelSelect"
224
- title="Model"
225
- aria-label="Model"
226
- aria-hidden="true"
227
- tabindex="-1"
228
- hidden
229
- ></select>
230
- </div>
231
- </div>
232
176
  </header>
233
177
 
234
178
  <section
@@ -265,20 +209,8 @@
265
209
  </svg>
266
210
  <span>Jump to latest</span>
267
211
  </button>
212
+ <div id="composerPlan" class="composer-plan" hidden></div>
268
213
  <form id="composerForm" class="composer">
269
- <button
270
- id="attachmentButton"
271
- class="attachment-button"
272
- type="button"
273
- title="Attach file or image"
274
- aria-label="Attach file or image"
275
- >
276
- <svg viewBox="0 0 24 24" aria-hidden="true">
277
- <path
278
- d="m9 12 6.8-6.8a3 3 0 0 1 4.2 4.2L10.7 18.7a5 5 0 0 1-7.1-7.1l9-9"
279
- />
280
- </svg>
281
- </button>
282
214
  <input
283
215
  id="attachmentInput"
284
216
  class="attachment-input"
@@ -293,50 +225,131 @@
293
225
  placeholder="Ask ABot anything…"
294
226
  ></textarea>
295
227
  <div id="attachmentPreview" class="attachment-preview"></div>
296
- <div class="permission-mode-control">
228
+ <div
229
+ class="composer-controls"
230
+ role="group"
231
+ aria-label="Message controls"
232
+ >
297
233
  <button
298
- id="permissionModeButton"
299
- class="permission-mode-button"
234
+ id="attachmentButton"
235
+ class="attachment-button"
300
236
  type="button"
301
- title="Tool permissions"
302
- aria-haspopup="menu"
303
- aria-expanded="false"
304
- >
305
- Full
306
- </button>
307
- <div id="permissionModeMenu" class="permission-mode-menu"></div>
308
- </div>
309
- <div id="composerSubmitControl" class="composer-submit-control">
310
- <button
311
- id="sendButton"
312
- class="send-button"
313
- type="submit"
314
- disabled
237
+ title="Attach file or image"
238
+ aria-label="Attach file or image"
315
239
  >
316
240
  <svg viewBox="0 0 24 24" aria-hidden="true">
317
- <path d="M12 19V5M6.5 10.5 12 5l5.5 5.5" />
241
+ <path
242
+ d="m9 12 6.8-6.8a3 3 0 0 1 4.2 4.2L10.7 18.7a5 5 0 0 1-7.1-7.1l9-9"
243
+ />
318
244
  </svg>
319
- <span id="sendButtonLabel" class="sr-only">Send</span>
320
245
  </button>
321
- <button
322
- id="sendNextMenuButton"
323
- class="send-next-menu-button"
324
- type="button"
325
- title="More send options"
326
- aria-label="More send options"
327
- aria-haspopup="menu"
328
- aria-controls="sendNextMenu"
329
- aria-expanded="false"
330
- hidden
331
- >
332
- <svg viewBox="0 0 16 16" aria-hidden="true">
333
- <path d="m4 6 4 4 4-4" />
334
- </svg>
335
- </button>
336
- <div id="sendNextMenu" class="send-next-menu" role="menu" hidden>
337
- <button id="sendNextButton" type="button" role="menuitem">
338
- Send next
246
+ <div class="permission-mode-control">
247
+ <button
248
+ id="permissionModeButton"
249
+ class="permission-mode-button"
250
+ type="button"
251
+ title="Tool permissions"
252
+ aria-haspopup="menu"
253
+ aria-expanded="false"
254
+ >
255
+ Full
339
256
  </button>
257
+ <div id="permissionModeMenu" class="permission-mode-menu"></div>
258
+ </div>
259
+ <div class="composer-model-controls">
260
+ <div class="control-cluster model-control">
261
+ <span class="control-label">Model</span>
262
+ <button
263
+ id="modelSelectButton"
264
+ aria-controls="modelSelectMenu"
265
+ class="model-select-button"
266
+ type="button"
267
+ title="Model"
268
+ aria-label="Model"
269
+ aria-haspopup="menu"
270
+ aria-expanded="false"
271
+ >
272
+ <svg
273
+ class="model-select-icon"
274
+ viewBox="0 0 24 24"
275
+ aria-hidden="true"
276
+ >
277
+ <path d="m12 3 9 5-9 5-9-5 9-5Z" />
278
+ <path d="m3 12 9 5 9-5M3 16l9 5 9-5" />
279
+ </svg>
280
+ <span id="modelSelectValue">Model</span>
281
+ <svg viewBox="0 0 20 20" aria-hidden="true">
282
+ <path d="m6 8 4 4 4-4" />
283
+ </svg>
284
+ </button>
285
+ <div id="modelSelectMenu" class="model-select-menu"></div>
286
+ <select
287
+ id="modelSelect"
288
+ title="Model"
289
+ aria-label="Model"
290
+ aria-hidden="true"
291
+ tabindex="-1"
292
+ hidden
293
+ ></select>
294
+ </div>
295
+ <div class="control-cluster agent-mode-control">
296
+ <span class="control-label">Depth</span>
297
+ <button
298
+ id="agentModeButton"
299
+ aria-controls="agentModeMenu"
300
+ class="agent-mode-button"
301
+ type="button"
302
+ title="Reasoning depth"
303
+ aria-haspopup="menu"
304
+ aria-expanded="false"
305
+ >
306
+ Reasoning
307
+ </button>
308
+ <div id="agentModeMenu" class="agent-mode-menu"></div>
309
+ </div>
310
+ <div
311
+ id="composerContextWindow"
312
+ class="composer-context-window"
313
+ hidden
314
+ ></div>
315
+ </div>
316
+ <div id="composerSubmitControl" class="composer-submit-control">
317
+ <button
318
+ id="sendButton"
319
+ class="send-button"
320
+ type="submit"
321
+ disabled
322
+ >
323
+ <svg viewBox="0 0 24 24" aria-hidden="true">
324
+ <path d="M12 19V5M6.5 10.5 12 5l5.5 5.5" />
325
+ </svg>
326
+ <span id="sendButtonLabel" class="sr-only">Send</span>
327
+ </button>
328
+ <button
329
+ id="sendNextMenuButton"
330
+ class="send-next-menu-button"
331
+ type="button"
332
+ title="More send options"
333
+ aria-label="More send options"
334
+ aria-haspopup="menu"
335
+ aria-controls="sendNextMenu"
336
+ aria-expanded="false"
337
+ hidden
338
+ >
339
+ <svg viewBox="0 0 16 16" aria-hidden="true">
340
+ <path d="m4 6 4 4 4-4" />
341
+ </svg>
342
+ </button>
343
+ <div
344
+ id="sendNextMenu"
345
+ class="send-next-menu"
346
+ role="menu"
347
+ hidden
348
+ >
349
+ <button id="sendNextButton" type="button" role="menuitem">
350
+ Send next
351
+ </button>
352
+ </div>
340
353
  </div>
341
354
  </div>
342
355
  </form>
@@ -346,110 +359,6 @@
346
359
  </div>
347
360
  </main>
348
361
 
349
- <section
350
- id="operationsWorkspacePanel"
351
- class="workspace-page-panel operations-workspace-panel"
352
- aria-labelledby="operationsWorkspaceTitle"
353
- hidden
354
- >
355
- <header class="workspace-page-header">
356
- <div class="workspace-page-heading">
357
- <p class="eyebrow">Runtime workspace</p>
358
- <h2 id="operationsWorkspaceTitle">Operations</h2>
359
- <p>Inspect runtime state, recent logs, and system health.</p>
360
- </div>
361
- <button
362
- id="closeOperationsWorkspaceButton"
363
- class="workspace-page-back"
364
- type="button"
365
- aria-label="Return to conversation"
366
- >
367
- Back to chat
368
- </button>
369
- </header>
370
-
371
- <div class="workspace-page-body operations-workspace-body">
372
- <div
373
- class="operations-tabs"
374
- role="tablist"
375
- aria-label="Operations views"
376
- >
377
- <button
378
- id="runtimeTabButton"
379
- class="tab-button operations-tab-button active"
380
- data-tab="runtime"
381
- type="button"
382
- role="tab"
383
- aria-controls="runtimeTab"
384
- aria-selected="true"
385
- >
386
- Runtime
387
- </button>
388
- <button
389
- id="logsTabButton"
390
- class="tab-button operations-tab-button"
391
- data-tab="logs"
392
- type="button"
393
- role="tab"
394
- aria-controls="logsTab"
395
- aria-selected="false"
396
- >
397
- Logs
398
- </button>
399
- <button
400
- id="healthTabButton"
401
- class="tab-button operations-tab-button"
402
- data-tab="health"
403
- type="button"
404
- role="tab"
405
- aria-controls="healthTab"
406
- aria-selected="false"
407
- >
408
- Health
409
- </button>
410
- </div>
411
-
412
- <section
413
- id="runtimeTab"
414
- class="tab-page operations-tab-page active"
415
- role="tabpanel"
416
- aria-labelledby="runtimeTabButton"
417
- >
418
- <div class="panel-toolbar">
419
- <span>Runtime status</span
420
- ><button id="refreshRuntimeButton" type="button">Refresh</button>
421
- </div>
422
- <div id="runtimeStatus" class="runtime-card"></div>
423
- </section>
424
-
425
- <section
426
- id="logsTab"
427
- class="tab-page operations-tab-page"
428
- role="tabpanel"
429
- aria-labelledby="logsTabButton"
430
- >
431
- <div class="panel-toolbar">
432
- <span>Recent logs</span
433
- ><button id="refreshLogsButton" type="button">Refresh</button>
434
- </div>
435
- <pre id="runtimeLogs" class="logs-view"></pre>
436
- </section>
437
-
438
- <section
439
- id="healthTab"
440
- class="tab-page operations-tab-page"
441
- role="tabpanel"
442
- aria-labelledby="healthTabButton"
443
- >
444
- <div class="panel-toolbar">
445
- <span>System health</span
446
- ><button id="refreshHealthButton" type="button">Refresh</button>
447
- </div>
448
- <div id="healthStatus" class="runtime-card"></div>
449
- </section>
450
- </div>
451
- </section>
452
-
453
362
  <section
454
363
  id="configWorkspacePanel"
455
364
  class="workspace-page-panel config-workspace-panel"
@@ -488,6 +397,96 @@
488
397
  aria-live="polite"
489
398
  ></div>
490
399
  <div id="configDashboard" class="config-dashboard"></div>
400
+ <section
401
+ id="configOperationsSection"
402
+ class="config-operations-section"
403
+ aria-labelledby="configOperationsTitle"
404
+ >
405
+ <header class="config-operations-heading">
406
+ <h3 id="configOperationsTitle">Operations</h3>
407
+ <p>Inspect runtime state, recent logs, and system health.</p>
408
+ </header>
409
+ <div
410
+ class="operations-tabs"
411
+ role="tablist"
412
+ aria-label="Operations views"
413
+ >
414
+ <button
415
+ id="runtimeTabButton"
416
+ class="tab-button operations-tab-button active"
417
+ data-tab="runtime"
418
+ type="button"
419
+ role="tab"
420
+ aria-controls="runtimeTab"
421
+ aria-selected="true"
422
+ >
423
+ Runtime
424
+ </button>
425
+ <button
426
+ id="logsTabButton"
427
+ class="tab-button operations-tab-button"
428
+ data-tab="logs"
429
+ type="button"
430
+ role="tab"
431
+ aria-controls="logsTab"
432
+ aria-selected="false"
433
+ >
434
+ Logs
435
+ </button>
436
+ <button
437
+ id="healthTabButton"
438
+ class="tab-button operations-tab-button"
439
+ data-tab="health"
440
+ type="button"
441
+ role="tab"
442
+ aria-controls="healthTab"
443
+ aria-selected="false"
444
+ >
445
+ Health
446
+ </button>
447
+ </div>
448
+
449
+ <section
450
+ id="runtimeTab"
451
+ class="tab-page operations-tab-page active"
452
+ role="tabpanel"
453
+ aria-labelledby="runtimeTabButton"
454
+ >
455
+ <div class="panel-toolbar">
456
+ <span>Runtime status</span
457
+ ><button id="refreshRuntimeButton" type="button">
458
+ Refresh
459
+ </button>
460
+ </div>
461
+ <div id="runtimeStatus" class="runtime-card"></div>
462
+ </section>
463
+
464
+ <section
465
+ id="logsTab"
466
+ class="tab-page operations-tab-page"
467
+ role="tabpanel"
468
+ aria-labelledby="logsTabButton"
469
+ >
470
+ <div class="panel-toolbar">
471
+ <span>Recent logs</span
472
+ ><button id="refreshLogsButton" type="button">Refresh</button>
473
+ </div>
474
+ <pre id="runtimeLogs" class="logs-view"></pre>
475
+ </section>
476
+
477
+ <section
478
+ id="healthTab"
479
+ class="tab-page operations-tab-page"
480
+ role="tabpanel"
481
+ aria-labelledby="healthTabButton"
482
+ >
483
+ <div class="panel-toolbar">
484
+ <span>System health</span
485
+ ><button id="refreshHealthButton" type="button">Refresh</button>
486
+ </div>
487
+ <div id="healthStatus" class="runtime-card"></div>
488
+ </section>
489
+ </section>
491
490
  </div>
492
491
  </section>
493
492
 
@@ -0,0 +1,32 @@
1
+ export type ComposerPlanItem = {
2
+ id: string;
3
+ title: string;
4
+ status: "pending" | "active" | "done" | "blocked" | "superseded";
5
+ order: number;
6
+ };
7
+
8
+ export type ComposerPlanModel = {
9
+ requestId: string;
10
+ turnKey: string;
11
+ summary: string;
12
+ preview: string;
13
+ previewStatus: "pending" | "active" | "done";
14
+ items: ComposerPlanItem[];
15
+ total: number;
16
+ completed: number;
17
+ hasSignal: boolean;
18
+ };
19
+
20
+ export type ComposerPlanMessage = {
21
+ id?: unknown;
22
+ role: string;
23
+ requestId?: unknown;
24
+ };
25
+
26
+ export declare function buildComposerPlanModel(options?: {
27
+ messages?: ComposerPlanMessage[];
28
+ activeRequestId?: unknown;
29
+ getActivityForMessage?(message: ComposerPlanMessage): {
30
+ taskProgress?: unknown;
31
+ };
32
+ }): ComposerPlanModel | null;
@@ -0,0 +1,108 @@
1
+ function text(value) {
2
+ return typeof value === "string" ? value.trim() : "";
3
+ }
4
+
5
+ function canonicalCount(value, fallback) {
6
+ return Number.isInteger(value) && value >= 0 ? value : fallback;
7
+ }
8
+
9
+ function itemStatus(value) {
10
+ const status = text(value).toLowerCase();
11
+ if (status === "done" || status === "completed") return "done";
12
+ if (status === "in_progress" || status === "active") return "active";
13
+ if (status === "blocked" || status === "failed") return "blocked";
14
+ if (status === "superseded") return "superseded";
15
+ return "pending";
16
+ }
17
+
18
+ function orderedItems(rawItems) {
19
+ if (!Array.isArray(rawItems)) return [];
20
+ return rawItems
21
+ .flatMap((item, index) => {
22
+ const title = text(item?.title);
23
+ if (!title) return [];
24
+ return [
25
+ {
26
+ id: text(item.id) || `item-${index}`,
27
+ title,
28
+ status: itemStatus(item.status),
29
+ order: canonicalCount(item.order, index + 1),
30
+ },
31
+ ];
32
+ })
33
+ .sort((left, right) => left.order - right.order);
34
+ }
35
+
36
+ function hasVisiblePlan(progress, items, summary) {
37
+ return items.length > 0 || Boolean(summary) || progress.hasSignal === true;
38
+ }
39
+
40
+ function previewStatusFor({ activeItem, items, completed, total }) {
41
+ if (activeItem) return "active";
42
+ const countsAreComplete = total > 0 && completed === total;
43
+ const allVisibleItemsDone =
44
+ items.length > 0 && items.every((item) => item.status === "done");
45
+ if (countsAreComplete && allVisibleItemsDone) return "done";
46
+ return "pending";
47
+ }
48
+
49
+ function planForMessage(message, getActivityForMessage) {
50
+ const requestId = text(message.requestId);
51
+ if (!requestId) return null;
52
+ const progress = getActivityForMessage(message)?.taskProgress;
53
+ if (!progress || text(progress.requestId) !== requestId) return null;
54
+ const items = orderedItems(progress.items);
55
+ const summary = text(progress.summary);
56
+ if (!hasVisiblePlan(progress, items, summary)) return null;
57
+ const completed = canonicalCount(
58
+ progress.completed,
59
+ items.filter((item) => item.status === "done").length,
60
+ );
61
+ const total = canonicalCount(progress.total, items.length);
62
+ const activeItem =
63
+ text(progress.activeItem) ||
64
+ items.find((item) => item.status === "active")?.title ||
65
+ "";
66
+ return {
67
+ requestId,
68
+ turnKey: `request:${requestId}`,
69
+ summary,
70
+ items,
71
+ total,
72
+ completed,
73
+ hasSignal: progress.hasSignal === true,
74
+ preview: activeItem || summary || items[0]?.title || "Preparing tasks...",
75
+ previewStatus: previewStatusFor({ activeItem, items, completed, total }),
76
+ };
77
+ }
78
+
79
+ export function buildComposerPlanModel({
80
+ messages = [],
81
+ activeRequestId = "",
82
+ getActivityForMessage = () => ({}),
83
+ } = {}) {
84
+ const lastUserIndex = messages.findLastIndex(
85
+ (message) => message.role === "user",
86
+ );
87
+ const assistants = messages
88
+ .slice(lastUserIndex + 1)
89
+ .filter((message) => message.role === "assistant");
90
+ if (assistants.length === 0) {
91
+ const latestUser = messages[lastUserIndex];
92
+ return latestUser
93
+ ? planForMessage(latestUser, getActivityForMessage)
94
+ : null;
95
+ }
96
+ const activeId = text(activeRequestId);
97
+ const activeAssistant = activeId
98
+ ? assistants.findLast((message) => text(message.requestId) === activeId)
99
+ : null;
100
+ if (activeAssistant) {
101
+ return planForMessage(activeAssistant, getActivityForMessage);
102
+ }
103
+ for (const message of [...assistants].reverse()) {
104
+ const plan = planForMessage(message, getActivityForMessage);
105
+ if (plan) return plan;
106
+ }
107
+ return null;
108
+ }
@@ -0,0 +1,19 @@
1
+ export type ConversationRole = "supervisor" | "planner" | "worker" | "reviewer";
2
+
3
+ export interface ConversationRoleCard {
4
+ id: string;
5
+ role: ConversationRole;
6
+ title: string;
7
+ responsibility: string;
8
+ phaseLabel: string;
9
+ summary: string;
10
+ facts: string[];
11
+ active: boolean;
12
+ tone: "active" | "failed" | "recorded";
13
+ }
14
+
15
+ export function buildConversationRoleCards(input?: {
16
+ requestId?: unknown;
17
+ events?: unknown[];
18
+ streaming?: boolean;
19
+ }): ConversationRoleCard[];