@abot-ai/runtime 1.8.1 → 2.0.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 (769) hide show
  1. package/README.md +5 -1
  2. package/dist/scripts/add-runtime-model.js +11 -5
  3. package/dist/scripts/init-runtime.js +15 -10
  4. package/dist/scripts/runtime-model-addition.js +6 -1
  5. package/dist/scripts/runtime-setup-command-options.d.ts +11 -0
  6. package/dist/scripts/runtime-setup-command-options.js +41 -0
  7. package/dist/scripts/runtime-setup-files.d.ts +3 -2
  8. package/dist/scripts/runtime-setup-files.js +63 -4
  9. package/dist/scripts/runtime-setup-model-options.d.ts +8 -0
  10. package/dist/scripts/runtime-setup-model-options.js +40 -0
  11. package/dist/scripts/runtime-setup-presentation.js +2 -2
  12. package/dist/scripts/runtime-setup-provider-options.d.ts +4 -0
  13. package/dist/scripts/runtime-setup-provider-options.js +20 -0
  14. package/dist/src/model-gateway/client/chat.js +9 -5
  15. package/dist/src/model-gateway/client/contracts.d.ts +3 -0
  16. package/dist/src/model-gateway/client/input-token-count.js +36 -16
  17. package/dist/src/model-gateway/client/invocation-error.d.ts +9 -0
  18. package/dist/src/model-gateway/client/invocation-error.js +30 -0
  19. package/dist/src/model-gateway/client/message-projection.d.ts +2 -0
  20. package/dist/src/model-gateway/client/message-projection.js +1 -0
  21. package/dist/src/model-gateway/client/options.js +1 -1
  22. package/dist/src/model-gateway/client/raw.js +1 -0
  23. package/dist/src/model-gateway/client/stream-consumer.js +9 -2
  24. package/dist/src/model-gateway/client/stream-parser.js +2 -1
  25. package/dist/src/model-gateway/index.d.ts +1 -1
  26. package/dist/src/model-gateway/observability/input-token-count-diagnostics.d.ts +26 -0
  27. package/dist/src/model-gateway/observability/input-token-count-diagnostics.js +178 -0
  28. package/dist/src/model-gateway/policy/invocation-policy.d.ts +1 -3
  29. package/dist/src/model-gateway/policy/invocation-policy.js +3 -30
  30. package/dist/src/model-gateway/policy/reasoning-mode-budget.d.ts +5 -0
  31. package/dist/src/model-gateway/policy/reasoning-mode-budget.js +13 -0
  32. package/dist/src/model-gateway/policy/reasoning-policy.d.ts +10 -0
  33. package/dist/src/model-gateway/policy/reasoning-policy.js +124 -0
  34. package/dist/src/model-gateway/protocol/openai-embedding-response.d.ts +1 -0
  35. package/dist/src/model-gateway/protocol/openai-embedding-response.js +28 -0
  36. package/dist/src/model-gateway/protocol/sse-data.d.ts +9 -0
  37. package/dist/src/model-gateway/protocol/sse-data.js +67 -0
  38. package/dist/src/model-gateway/providers/envelope-budget.js +10 -1
  39. package/dist/src/model-gateway/providers/llamacpp/adapter.d.ts +2 -0
  40. package/dist/src/model-gateway/providers/llamacpp/adapter.js +79 -0
  41. package/dist/src/model-gateway/providers/llamacpp/connection.d.ts +9 -0
  42. package/dist/src/model-gateway/providers/llamacpp/connection.js +73 -0
  43. package/dist/src/model-gateway/providers/llamacpp/diagnostics.d.ts +2 -0
  44. package/dist/src/model-gateway/providers/llamacpp/diagnostics.js +17 -0
  45. package/dist/src/model-gateway/providers/llamacpp/embeddings.d.ts +2 -0
  46. package/dist/src/model-gateway/providers/llamacpp/embeddings.js +56 -0
  47. package/dist/src/model-gateway/providers/llamacpp/input-token-count.d.ts +3 -0
  48. package/dist/src/model-gateway/providers/llamacpp/input-token-count.js +59 -0
  49. package/dist/src/model-gateway/providers/llamacpp/message-projection.d.ts +2 -0
  50. package/dist/src/model-gateway/providers/llamacpp/message-projection.js +33 -0
  51. package/dist/src/model-gateway/providers/llamacpp/payload.d.ts +2 -0
  52. package/dist/src/model-gateway/providers/llamacpp/payload.js +44 -0
  53. package/dist/src/model-gateway/providers/llamacpp/response-lifetime.d.ts +1 -0
  54. package/dist/src/model-gateway/providers/llamacpp/response-lifetime.js +56 -0
  55. package/dist/src/model-gateway/providers/llamacpp/schema-format.d.ts +2 -0
  56. package/dist/src/model-gateway/providers/llamacpp/schema-format.js +29 -0
  57. package/dist/src/model-gateway/providers/llamacpp/settings.d.ts +9 -0
  58. package/dist/src/model-gateway/providers/llamacpp/settings.js +25 -0
  59. package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.d.ts +10 -0
  60. package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.js +85 -0
  61. package/dist/src/model-gateway/providers/llamacpp/stream.d.ts +9 -0
  62. package/dist/src/model-gateway/providers/llamacpp/stream.js +33 -0
  63. package/dist/src/model-gateway/providers/openai/embeddings.js +2 -29
  64. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +1 -9
  65. package/dist/src/model-gateway/providers/openai/sse-data.js +1 -67
  66. package/dist/src/model-gateway/providers/registry.js +2 -0
  67. package/dist/src/model-gateway/server/input-token-count-handler.js +10 -1
  68. package/dist/src/model-gateway/types.d.ts +11 -1
  69. package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.d.ts +4 -0
  70. package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.js +11 -0
  71. package/dist/src/runtime/adapters/long-term-memory/onboarding-service.js +28 -1
  72. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +5 -1
  73. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +15 -1
  74. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-execution.js +7 -5
  75. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-snapshot.js +9 -2
  76. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +1 -0
  77. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +6 -1
  78. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/contracts.d.ts +1 -0
  79. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.d.ts +1 -0
  80. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +2 -0
  81. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
  82. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +2 -0
  83. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
  84. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +1 -0
  85. package/dist/src/runtime/adapters/registered-tool-worker-capabilities.js +1 -0
  86. package/dist/src/runtime/adapters/scheduler-runtime.js +2 -0
  87. package/dist/src/runtime/automations/agent-step-executor.js +1 -0
  88. package/dist/src/runtime/automations/catalog.d.ts +3 -0
  89. package/dist/src/runtime/automations/catalog.js +2 -0
  90. package/dist/src/runtime/automations/definition-contracts.d.ts +2 -0
  91. package/dist/src/runtime/automations/definition-input.js +3 -1
  92. package/dist/src/runtime/automations/draft-mutations.js +5 -1
  93. package/dist/src/runtime/automations/model-dependency-projection.d.ts +3 -1
  94. package/dist/src/runtime/automations/model-dependency-projection.js +4 -2
  95. package/dist/src/runtime/automations/publication-validation.js +7 -0
  96. package/dist/src/runtime/automations/saved-agent-management.js +1 -0
  97. package/dist/src/runtime/automations/service.d.ts +4 -1
  98. package/dist/src/runtime/capabilities/automation-builder/payload-schema.js +7 -5
  99. package/dist/src/runtime/capabilities/automation-builder/tool-module.js +4 -4
  100. package/dist/src/runtime/capabilities/automations/authoring-catalog.d.ts +9 -0
  101. package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -0
  102. package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +3 -0
  103. package/dist/src/runtime/capabilities/automations/draft-index.d.ts +1 -1
  104. package/dist/src/runtime/capabilities/automations/tool-contract.js +3 -2
  105. package/dist/src/runtime/capabilities/automations/tool-module.js +20 -11
  106. package/dist/src/runtime/capabilities/core-tool-contracts.d.ts +29 -0
  107. package/dist/src/runtime/capabilities/core-tool-contracts.js +38 -0
  108. package/dist/src/runtime/capabilities/knowledge-skills/read-many.d.ts +4 -0
  109. package/dist/src/runtime/capabilities/knowledge-skills/read-many.js +21 -0
  110. package/dist/src/runtime/capabilities/knowledge-skills/read-targets.d.ts +13 -0
  111. package/dist/src/runtime/capabilities/knowledge-skills/read-targets.js +44 -0
  112. package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.d.ts +141 -0
  113. package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.js +58 -0
  114. package/dist/src/runtime/capabilities/knowledge-skills/tool-module.d.ts +4 -0
  115. package/dist/src/runtime/capabilities/knowledge-skills/tool-module.js +78 -0
  116. package/dist/src/runtime/capabilities/knowledge-skills/tool-output.d.ts +12 -0
  117. package/dist/src/runtime/capabilities/knowledge-skills/tool-output.js +21 -0
  118. package/dist/src/runtime/capabilities/knowledge-skills/write-contract.d.ts +77 -0
  119. package/dist/src/runtime/capabilities/knowledge-skills/write-contract.js +28 -0
  120. package/dist/src/runtime/capabilities/knowledge-skills/write-operations.d.ts +3 -0
  121. package/dist/src/runtime/capabilities/knowledge-skills/write-operations.js +34 -0
  122. package/dist/src/runtime/capabilities/model-reasoning-controls.d.ts +23 -0
  123. package/dist/src/runtime/capabilities/model-reasoning-controls.js +56 -0
  124. package/dist/src/runtime/capabilities/scheduling/create-operations.js +2 -0
  125. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +1 -0
  126. package/dist/src/runtime/capabilities/scheduling/tool-module.js +8 -5
  127. package/dist/src/runtime/capabilities/scheduling/update-operations.js +2 -0
  128. package/dist/src/runtime/composition.d.ts +5 -0
  129. package/dist/src/runtime/config/builders.js +6 -0
  130. package/dist/src/runtime/config/effective-model-config-validation.js +4 -0
  131. package/dist/src/runtime/config/llamacpp-profile-validation.d.ts +3 -0
  132. package/dist/src/runtime/config/llamacpp-profile-validation.js +15 -0
  133. package/dist/src/runtime/config/model-reasoning-schema.d.ts +40 -0
  134. package/dist/src/runtime/config/model-reasoning-schema.js +38 -0
  135. package/dist/src/runtime/config/model-reasoning-validation.d.ts +3 -0
  136. package/dist/src/runtime/config/model-reasoning-validation.js +37 -0
  137. package/dist/src/runtime/config/runner/step-instructions.d.ts +4 -0
  138. package/dist/src/runtime/config/runner/step-instructions.js +10 -6
  139. package/dist/src/runtime/config/schema.js +3 -0
  140. package/dist/src/runtime/config/validation/model-invocation-config-validation.js +14 -0
  141. package/dist/src/runtime/context/capability-result-compaction-source.d.ts +3 -1
  142. package/dist/src/runtime/context/capability-result-compaction-source.js +13 -1
  143. package/dist/src/runtime/context/compacted-capability-result-receipt.d.ts +2 -0
  144. package/dist/src/runtime/context/compacted-capability-result-receipt.js +8 -7
  145. package/dist/src/runtime/context/core-skill-read-context.d.ts +16 -0
  146. package/dist/src/runtime/context/core-skill-read-context.js +76 -0
  147. package/dist/src/runtime/context/exact-evidence-match.d.ts +3 -0
  148. package/dist/src/runtime/context/exact-evidence-match.js +34 -0
  149. package/dist/src/runtime/context/execution-compacted-evidence.d.ts +4 -0
  150. package/dist/src/runtime/context/execution-compacted-evidence.js +2 -23
  151. package/dist/src/runtime/context/execution-compaction-checkpoint-selection.d.ts +19 -0
  152. package/dist/src/runtime/context/execution-compaction-checkpoint-selection.js +104 -0
  153. package/dist/src/runtime/context/model-step-compaction-inheritance.d.ts +12 -0
  154. package/dist/src/runtime/context/model-step-compaction-inheritance.js +28 -0
  155. package/dist/src/runtime/context/model-step-compaction-projection.d.ts +12 -0
  156. package/dist/src/runtime/context/model-step-compaction-projection.js +322 -0
  157. package/dist/src/runtime/context/model-step-compaction.d.ts +2 -1
  158. package/dist/src/runtime/context/model-step-compaction.js +27 -304
  159. package/dist/src/runtime/context/operation-supervision-compacted-evidence.js +7 -1
  160. package/dist/src/runtime/context/request-context.d.ts +2 -0
  161. package/dist/src/runtime/context/request-context.js +16 -0
  162. package/dist/src/runtime/context/request-tool-results-checkpoint.d.ts +2 -1
  163. package/dist/src/runtime/context/request-tool-results-checkpoint.js +35 -6
  164. package/dist/src/runtime/context/request-tool-results.js +3 -1
  165. package/dist/src/runtime/context/semantic-compaction/checkpoint-message.d.ts +5 -1
  166. package/dist/src/runtime/context/semantic-compaction/checkpoint-message.js +10 -4
  167. package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.d.ts +9 -0
  168. package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.js +38 -0
  169. package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.d.ts +4 -0
  170. package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.js +38 -0
  171. package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +5 -1
  172. package/dist/src/runtime/context/semantic-compaction/generation-input.js +15 -10
  173. package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.d.ts +8 -0
  174. package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.js +76 -0
  175. package/dist/src/runtime/context/semantic-compaction/prompt.js +7 -7
  176. package/dist/src/runtime/context/semantic-compaction/replacement-budget.js +3 -1
  177. package/dist/src/runtime/context/semantic-compaction/run.js +16 -15
  178. package/dist/src/runtime/context/semantic-compaction/super-source-integrity.js +33 -3
  179. package/dist/src/runtime/context/session-artifact-paths.d.ts +2 -1
  180. package/dist/src/runtime/context/session-artifact-paths.js +2 -1
  181. package/dist/src/runtime/context/session-memory/model-step-controller.d.ts +2 -2
  182. package/dist/src/runtime/context/super-worker-compaction-failure.d.ts +1 -1
  183. package/dist/src/runtime/context/super-worker-compaction-failure.js +2 -1
  184. package/dist/src/runtime/context/super-worker-compaction-sidecar.d.ts +2 -1
  185. package/dist/src/runtime/context/super-worker-compaction-sidecar.js +9 -3
  186. package/dist/src/runtime/default-environment-adapters.d.ts +2 -1
  187. package/dist/src/runtime/default-environment-adapters.js +5 -1
  188. package/dist/src/runtime/knowledge-skills/available-skills-projection.d.ts +17 -0
  189. package/dist/src/runtime/knowledge-skills/available-skills-projection.js +66 -0
  190. package/dist/src/runtime/knowledge-skills/available-skills.d.ts +7 -0
  191. package/dist/src/runtime/knowledge-skills/available-skills.js +17 -0
  192. package/dist/src/runtime/knowledge-skills/builtins/abot-studio.d.ts +2 -0
  193. package/dist/src/runtime/knowledge-skills/builtins/abot-studio.js +27 -0
  194. package/dist/src/runtime/knowledge-skills/builtins/computer-use.d.ts +2 -0
  195. package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +34 -0
  196. package/dist/src/runtime/knowledge-skills/builtins/skill-creator.d.ts +2 -0
  197. package/dist/src/runtime/knowledge-skills/builtins/skill-creator.js +29 -0
  198. package/dist/src/runtime/knowledge-skills/builtins/technical-work.d.ts +2 -0
  199. package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +45 -0
  200. package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.d.ts +2 -0
  201. package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.js +27 -0
  202. package/dist/src/runtime/knowledge-skills/catalog.d.ts +2 -0
  203. package/dist/src/runtime/knowledge-skills/catalog.js +14 -0
  204. package/dist/src/runtime/knowledge-skills/personal-contracts.d.ts +48 -0
  205. package/dist/src/runtime/knowledge-skills/personal-contracts.js +29 -0
  206. package/dist/src/runtime/knowledge-skills/personal-documents.d.ts +6 -0
  207. package/dist/src/runtime/knowledge-skills/personal-documents.js +56 -0
  208. package/dist/src/runtime/knowledge-skills/personal-management.d.ts +9 -0
  209. package/dist/src/runtime/knowledge-skills/personal-management.js +64 -0
  210. package/dist/src/runtime/knowledge-skills/personal-repository.d.ts +6 -0
  211. package/dist/src/runtime/knowledge-skills/personal-repository.js +76 -0
  212. package/dist/src/runtime/knowledge-skills/personal-store.d.ts +4 -0
  213. package/dist/src/runtime/knowledge-skills/personal-store.js +33 -0
  214. package/dist/src/runtime/knowledge-skills/read-evidence.d.ts +3 -0
  215. package/dist/src/runtime/knowledge-skills/read-evidence.js +13 -0
  216. package/dist/src/runtime/knowledge-skills/store.d.ts +19 -0
  217. package/dist/src/runtime/knowledge-skills/store.js +41 -0
  218. package/dist/src/runtime/local-application.d.ts +7 -1
  219. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +2 -1
  220. package/dist/src/runtime/local-host/app-service-dispatch.js +7 -0
  221. package/dist/src/runtime/local-host/client-services.d.ts +8 -1
  222. package/dist/src/runtime/local-host/client-services.js +3 -2
  223. package/dist/src/runtime/local-host/saved-approvals.js +1 -0
  224. package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +1 -0
  225. package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +1 -1
  226. package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.d.ts +5 -0
  227. package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.js +28 -0
  228. package/dist/src/runtime/long-term-memory/initial-context.d.ts +1 -0
  229. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +5 -7
  230. package/dist/src/runtime/long-term-memory/onboarding/contracts.d.ts +26 -0
  231. package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.d.ts +1 -0
  232. package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.js +8 -0
  233. package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.d.ts +17 -0
  234. package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.js +77 -0
  235. package/dist/src/runtime/long-term-memory/onboarding/service.js +40 -10
  236. package/dist/src/runtime/model/context-compaction-admission.d.ts +1 -0
  237. package/dist/src/runtime/model/context-compaction-admission.js +35 -1
  238. package/dist/src/runtime/model/context-compaction-contracts.d.ts +9 -1
  239. package/dist/src/runtime/model/input-token-count.js +1 -0
  240. package/dist/src/runtime/model/invoke-step.js +18 -2
  241. package/dist/src/runtime/model/invoke-structured-step.d.ts +4 -1
  242. package/dist/src/runtime/model/invoke-structured-step.js +4 -0
  243. package/dist/src/runtime/model/model-catalog.d.ts +3 -0
  244. package/dist/src/runtime/model/model-catalog.js +2 -0
  245. package/dist/src/runtime/model/model-context-budget.d.ts +5 -0
  246. package/dist/src/runtime/model/model-context-budget.js +2 -0
  247. package/dist/src/runtime/model/model-step-port.d.ts +7 -0
  248. package/dist/src/runtime/model/optional-context-admission.d.ts +18 -0
  249. package/dist/src/runtime/model/optional-context-admission.js +23 -0
  250. package/dist/src/runtime/model/provider-failure.d.ts +13 -0
  251. package/dist/src/runtime/model/provider-failure.js +37 -0
  252. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  253. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -0
  254. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +2 -1
  255. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
  256. package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.d.ts +4 -0
  257. package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.js +48 -0
  258. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
  259. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +6 -3
  260. package/dist/src/runtime/orchestration/role-calls/contracts.js +3 -3
  261. package/dist/src/runtime/orchestration/role-calls/skill-read.d.ts +47 -0
  262. package/dist/src/runtime/orchestration/role-calls/skill-read.js +196 -0
  263. package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.d.ts +1 -1
  264. package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.js +4 -2
  265. package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.js +4 -1
  266. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +1 -1
  267. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
  268. package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -3
  269. package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.d.ts +2 -0
  270. package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.js +7 -2
  271. package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.d.ts +19 -0
  272. package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.js +43 -0
  273. package/dist/src/runtime/plugins/loader.js +7 -6
  274. package/dist/src/runtime/ports.d.ts +3 -1
  275. package/dist/src/runtime/projects/contracts.d.ts +6 -0
  276. package/dist/src/runtime/projects/registry-format.d.ts +3 -0
  277. package/dist/src/runtime/projects/registry-format.js +50 -0
  278. package/dist/src/runtime/projects/repository.d.ts +6 -3
  279. package/dist/src/runtime/projects/repository.js +26 -19
  280. package/dist/src/runtime/projects/service.js +11 -0
  281. package/dist/src/runtime/request/approval-wait/preflight.js +2 -0
  282. package/dist/src/runtime/request/approval-wait/snapshot.d.ts +1 -1
  283. package/dist/src/runtime/request/approval-wait/snapshot.js +1 -0
  284. package/dist/src/runtime/request/bound-runtime-handler.js +1 -0
  285. package/dist/src/runtime/request/contracts.d.ts +7 -1
  286. package/dist/src/runtime/request/execution-facets.js +2 -0
  287. package/dist/src/runtime/request/execution-payload-artifact-policy.d.ts +3 -0
  288. package/dist/src/runtime/request/execution-payload-artifact-policy.js +6 -0
  289. package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +2 -2
  290. package/dist/src/runtime/request/execution-payload-compacted-evidence.js +1 -0
  291. package/dist/src/runtime/request/execution-scope-surfaces.d.ts +4 -0
  292. package/dist/src/runtime/request/execution-scope-surfaces.js +10 -0
  293. package/dist/src/runtime/request/execution-scope.d.ts +8 -2
  294. package/dist/src/runtime/request/execution-scope.js +13 -0
  295. package/dist/src/runtime/request/input.d.ts +1 -0
  296. package/dist/src/runtime/request/input.js +1 -0
  297. package/dist/src/runtime/request/payload-settled-evidence.d.ts +11 -0
  298. package/dist/src/runtime/request/payload-settled-evidence.js +29 -0
  299. package/dist/src/runtime/request/prepared-execution.d.ts +1 -0
  300. package/dist/src/runtime/request/prepared-execution.js +5 -0
  301. package/dist/src/runtime/request/reasoning-preference.d.ts +10 -0
  302. package/dist/src/runtime/request/reasoning-preference.js +29 -0
  303. package/dist/src/runtime/request/role-call-delegation-events.d.ts +19 -0
  304. package/dist/src/runtime/request/role-call-delegation-events.js +52 -0
  305. package/dist/src/runtime/request/role-call-return-events.d.ts +19 -0
  306. package/dist/src/runtime/request/role-call-return-events.js +63 -0
  307. package/dist/src/runtime/request/role-executor-composition.js +2 -2
  308. package/dist/src/runtime/request/root-capability-binding.d.ts +24 -0
  309. package/dist/src/runtime/request/root-capability-binding.js +57 -0
  310. package/dist/src/runtime/request/root-capability-catalog.d.ts +16 -0
  311. package/dist/src/runtime/request/root-capability-catalog.js +20 -0
  312. package/dist/src/runtime/request/root-contract.d.ts +11 -1
  313. package/dist/src/runtime/request/root-execution-kernel.js +35 -68
  314. package/dist/src/runtime/request/root-reference-action.d.ts +15 -0
  315. package/dist/src/runtime/request/root-reference-action.js +48 -0
  316. package/dist/src/runtime/request/root-skill-read-admission.d.ts +4 -0
  317. package/dist/src/runtime/request/root-skill-read-admission.js +14 -0
  318. package/dist/src/runtime/request/root-skill-read.d.ts +13 -0
  319. package/dist/src/runtime/request/root-skill-read.js +110 -0
  320. package/dist/src/runtime/request/runner.js +10 -0
  321. package/dist/src/runtime/request/super-payload-context-failure.js +13 -4
  322. package/dist/src/runtime/request/supervisor-root-execution.js +48 -1
  323. package/dist/src/runtime/request/supervisor-skill-edit-target.d.ts +9 -0
  324. package/dist/src/runtime/request/supervisor-skill-edit-target.js +25 -0
  325. package/dist/src/runtime/request/supervisor-skill-payload-context.d.ts +21 -0
  326. package/dist/src/runtime/request/supervisor-skill-payload-context.js +91 -0
  327. package/dist/src/runtime/request/supervisor-skill-selection-window.d.ts +16 -0
  328. package/dist/src/runtime/request/supervisor-skill-selection-window.js +17 -0
  329. package/dist/src/runtime/request/supervisor-skill-write-preparation.d.ts +25 -0
  330. package/dist/src/runtime/request/supervisor-skill-write-preparation.js +71 -0
  331. package/dist/src/runtime/request/worker-capability-composition.d.ts +4 -1
  332. package/dist/src/runtime/request/worker-capability-composition.js +6 -1
  333. package/dist/src/runtime/request/worker-capability-payload.d.ts +1 -1
  334. package/dist/src/runtime/request/worker-capability-payload.js +44 -37
  335. package/dist/src/runtime/runtime-environment.d.ts +2 -0
  336. package/dist/src/runtime/runtime-environment.js +12 -1
  337. package/dist/src/runtime/scheduler/contracts.d.ts +11 -1
  338. package/dist/src/runtime/scheduler/job-management.js +7 -1
  339. package/dist/src/runtime/scheduler/run-list-filter.d.ts +11 -0
  340. package/dist/src/runtime/scheduler/run-list-filter.js +56 -0
  341. package/dist/src/runtime/scheduler/run-list-query.d.ts +2 -2
  342. package/dist/src/runtime/scheduler/run-list-query.js +4 -1
  343. package/dist/src/runtime/scheduler/run-records.js +2 -0
  344. package/dist/src/runtime/scheduler/schedule-validation.js +2 -0
  345. package/dist/src/runtime/scheduler/scheduler-engine.js +1 -0
  346. package/dist/src/runtime/scheduler/snapshot-validation.js +2 -0
  347. package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +2 -0
  348. package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +2 -2
  349. package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +2 -34
  350. package/dist/src/runtime/steps/auditor-decision/input.js +21 -3
  351. package/dist/src/runtime/steps/auditor-decision/projection.js +7 -0
  352. package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
  353. package/dist/src/runtime/steps/auditor-decision/prompt.js +14 -3
  354. package/dist/src/runtime/steps/capability-execution-guidance.d.ts +7 -0
  355. package/dist/src/runtime/steps/capability-execution-guidance.js +28 -0
  356. package/dist/src/runtime/steps/capability-execution-instructions.d.ts +0 -2
  357. package/dist/src/runtime/steps/capability-execution-instructions.js +0 -2
  358. package/dist/src/runtime/steps/execution-agent/capability-controls-partition.d.ts +9 -0
  359. package/dist/src/runtime/steps/execution-agent/capability-controls-partition.js +29 -0
  360. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +5 -2
  361. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +22 -3
  362. package/dist/src/runtime/steps/execution-agent/capability-scope.d.ts +17 -0
  363. package/dist/src/runtime/steps/execution-agent/capability-scope.js +54 -0
  364. package/dist/src/runtime/steps/execution-agent/compaction.d.ts +3 -2
  365. package/dist/src/runtime/steps/execution-agent/compaction.js +31 -7
  366. package/dist/src/runtime/steps/execution-agent/controls-compacted-evidence.js +2 -0
  367. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +14 -14
  368. package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.d.ts +6 -0
  369. package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.js +13 -0
  370. package/dist/src/runtime/steps/execution-agent/format.js +3 -6
  371. package/dist/src/runtime/steps/execution-agent/input.d.ts +5 -1
  372. package/dist/src/runtime/steps/execution-agent/input.js +24 -38
  373. package/dist/src/runtime/steps/execution-agent/observation-guidance.d.ts +11 -0
  374. package/dist/src/runtime/steps/execution-agent/observation-guidance.js +33 -0
  375. package/dist/src/runtime/steps/execution-agent/prompt.js +42 -38
  376. package/dist/src/runtime/steps/execution-agent/refinement-input.d.ts +1 -0
  377. package/dist/src/runtime/steps/execution-agent/refinement-prompt.js +4 -1
  378. package/dist/src/runtime/steps/execution-agent/refinement.d.ts +3 -2
  379. package/dist/src/runtime/steps/execution-agent/refinement.js +17 -6
  380. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  381. package/dist/src/runtime/steps/execution-agent/response-run.js +1 -1
  382. package/dist/src/runtime/steps/execution-agent/run.js +8 -2
  383. package/dist/src/runtime/steps/execution-agent/state-context.js +1 -1
  384. package/dist/src/runtime/steps/knowledge-skill-instructions.d.ts +3 -0
  385. package/dist/src/runtime/steps/knowledge-skill-instructions.js +3 -0
  386. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -2
  387. package/dist/src/runtime/steps/planner-decision/capability-brief.js +5 -1
  388. package/dist/src/runtime/steps/planner-decision/input.d.ts +2 -2
  389. package/dist/src/runtime/steps/planner-decision/input.js +7 -1
  390. package/dist/src/runtime/steps/planner-decision/prompt.js +3 -0
  391. package/dist/src/runtime/steps/planner-graph/input.d.ts +2 -2
  392. package/dist/src/runtime/steps/planner-graph/input.js +9 -8
  393. package/dist/src/runtime/steps/planner-graph/prompt.js +2 -2
  394. package/dist/src/runtime/steps/planner-graph/run.d.ts +2 -2
  395. package/dist/src/runtime/steps/planner-graph/run.js +5 -5
  396. package/dist/src/runtime/steps/planner-graph/skill-guidance.d.ts +5 -0
  397. package/dist/src/runtime/steps/planner-graph/skill-guidance.js +62 -0
  398. package/dist/src/runtime/steps/reviewer-decision/final-evidence.d.ts +1 -0
  399. package/dist/src/runtime/steps/reviewer-decision/final-evidence.js +3 -1
  400. package/dist/src/runtime/steps/reviewer-decision/input.d.ts +3 -1
  401. package/dist/src/runtime/steps/reviewer-decision/input.js +2 -22
  402. package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +21 -0
  403. package/dist/src/runtime/steps/reviewer-decision/model-context.js +32 -1
  404. package/dist/src/runtime/steps/reviewer-decision/projection.js +4 -0
  405. package/dist/src/runtime/steps/reviewer-decision/prompt.d.ts +1 -1
  406. package/dist/src/runtime/steps/reviewer-decision/prompt.js +15 -4
  407. package/dist/src/runtime/steps/reviewer-decision/run.d.ts +2 -0
  408. package/dist/src/runtime/steps/reviewer-decision/run.js +6 -0
  409. package/dist/src/runtime/steps/skill-read-decision.d.ts +35 -0
  410. package/dist/src/runtime/steps/skill-read-decision.js +96 -0
  411. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +27 -0
  412. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +147 -0
  413. package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +2 -0
  414. package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +9 -2
  415. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +12 -3
  416. package/dist/src/runtime/steps/supervisor-decision/contracts.js +5 -0
  417. package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +40 -0
  418. package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +143 -0
  419. package/dist/src/runtime/steps/supervisor-decision/delegation-contract.d.ts +9 -0
  420. package/dist/src/runtime/steps/supervisor-decision/delegation-contract.js +82 -0
  421. package/dist/src/runtime/steps/supervisor-decision/delegation-input.d.ts +7 -0
  422. package/dist/src/runtime/steps/supervisor-decision/delegation-input.js +105 -0
  423. package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.d.ts +7 -0
  424. package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.js +13 -0
  425. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +5 -1
  426. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +4 -0
  427. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +1 -0
  428. package/dist/src/runtime/steps/supervisor-decision/format.js +2 -0
  429. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +8 -1
  430. package/dist/src/runtime/steps/supervisor-decision/input.js +30 -11
  431. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +1 -0
  432. package/dist/src/runtime/steps/supervisor-decision/parser.js +11 -0
  433. package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +24 -0
  434. package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +23 -0
  435. package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +20 -0
  436. package/dist/src/runtime/steps/supervisor-decision/preparation.js +117 -0
  437. package/dist/src/runtime/steps/supervisor-decision/presentation.d.ts +13 -0
  438. package/dist/src/runtime/steps/supervisor-decision/presentation.js +47 -0
  439. package/dist/src/runtime/steps/supervisor-decision/procedure-entry.d.ts +22 -0
  440. package/dist/src/runtime/steps/supervisor-decision/procedure-entry.js +61 -0
  441. package/dist/src/runtime/steps/supervisor-decision/procedure-gate.d.ts +39 -0
  442. package/dist/src/runtime/steps/supervisor-decision/procedure-gate.js +146 -0
  443. package/dist/src/runtime/steps/supervisor-decision/procedure-memory.d.ts +9 -0
  444. package/dist/src/runtime/steps/supervisor-decision/procedure-memory.js +100 -0
  445. package/dist/src/runtime/steps/supervisor-decision/procedure-recall.d.ts +10 -0
  446. package/dist/src/runtime/steps/supervisor-decision/procedure-recall.js +52 -0
  447. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +4 -0
  448. package/dist/src/runtime/steps/supervisor-decision/prompt.js +85 -111
  449. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +2 -0
  450. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -0
  451. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +3 -0
  452. package/dist/src/runtime/steps/supervisor-decision/resume.js +20 -0
  453. package/dist/src/runtime/steps/supervisor-decision/role-guidance.d.ts +3 -0
  454. package/dist/src/runtime/steps/supervisor-decision/role-guidance.js +20 -0
  455. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +6 -0
  456. package/dist/src/runtime/steps/supervisor-decision/run.js +120 -163
  457. package/dist/src/runtime/steps/supervisor-decision/skill-read-state.d.ts +10 -0
  458. package/dist/src/runtime/steps/supervisor-decision/skill-read-state.js +45 -0
  459. package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.d.ts +15 -0
  460. package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.js +25 -0
  461. package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.d.ts +3 -0
  462. package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.js +15 -0
  463. package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.d.ts +10 -0
  464. package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.js +65 -0
  465. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +23 -0
  466. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +27 -0
  467. package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +17 -0
  468. package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +91 -0
  469. package/dist/src/runtime/steps/supervisor-response/input.d.ts +3 -0
  470. package/dist/src/runtime/steps/supervisor-response/input.js +5 -0
  471. package/dist/src/runtime/steps/supervisor-response/prompt.js +20 -4
  472. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +3 -0
  473. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +24 -4
  474. package/dist/src/runtime/steps/supervisor-response/run.d.ts +5 -0
  475. package/dist/src/runtime/steps/supervisor-skill-authoring/contract.d.ts +43 -0
  476. package/dist/src/runtime/steps/supervisor-skill-authoring/contract.js +85 -0
  477. package/dist/src/runtime/steps/supervisor-skill-authoring/input.d.ts +35 -0
  478. package/dist/src/runtime/steps/supervisor-skill-authoring/input.js +87 -0
  479. package/dist/src/runtime/steps/supervisor-skill-authoring/run.d.ts +10 -0
  480. package/dist/src/runtime/steps/supervisor-skill-authoring/run.js +35 -0
  481. package/dist/src/runtime/steps/supervisor-skill-instructions.d.ts +4 -0
  482. package/dist/src/runtime/steps/supervisor-skill-instructions.js +4 -0
  483. package/dist/src/runtime/steps/worker-capability-scope-decision.js +14 -1
  484. package/dist/src/runtime/steps/worker-decision/contracts.d.ts +1 -0
  485. package/dist/src/runtime/steps/worker-decision/input/execution-guidance.d.ts +5 -0
  486. package/dist/src/runtime/steps/worker-decision/input/execution-guidance.js +31 -0
  487. package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +2 -25
  488. package/dist/src/runtime/steps/worker-decision/input/reference-context.js +4 -0
  489. package/dist/src/runtime/steps/worker-decision/prompt.js +6 -2
  490. package/dist/src/runtime/steps/worker-decision/result-author.js +6 -0
  491. package/dist/src/shared/model-reasoning-modes.d.ts +5 -0
  492. package/dist/src/shared/model-reasoning-modes.js +20 -0
  493. package/dist/src/shared/model-reasoning-schema.d.ts +38 -0
  494. package/dist/src/shared/model-reasoning-schema.js +29 -0
  495. package/dist/src/shared/model-reasoning.d.ts +35 -0
  496. package/dist/src/shared/model-reasoning.js +100 -0
  497. package/dist/src/web-ui/app/ARCHITECTURE.md +13 -0
  498. package/dist/src/web-ui/app/app-bootstrap.js +12 -12
  499. package/dist/src/web-ui/app/app-dom.js +6 -1
  500. package/dist/src/web-ui/app/app-state.js +1 -0
  501. package/dist/src/web-ui/app/app.js +14 -4
  502. package/dist/src/web-ui/app/appearance-feature.js +28 -0
  503. package/dist/src/web-ui/app/automations-feature.js +20 -11
  504. package/dist/src/web-ui/app/components/appearance-dialog.js +79 -0
  505. package/dist/src/web-ui/app/components/automations/archive-actions.js +5 -3
  506. package/dist/src/web-ui/app/components/automations/authoring-entry.js +26 -7
  507. package/dist/src/web-ui/app/components/automations/confirmation-actions.js +78 -0
  508. package/dist/src/web-ui/app/components/automations/draft-recovery-actions.js +1 -0
  509. package/dist/src/web-ui/app/components/automations/node-inspector.js +5 -1
  510. package/dist/src/web-ui/app/components/automations/run-history-controls.js +77 -0
  511. package/dist/src/web-ui/app/components/automations/run-history.js +55 -0
  512. package/dist/src/web-ui/app/components/automations/run.js +3 -8
  513. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +4 -2
  514. package/dist/src/web-ui/app/components/automations/timeline.js +2 -2
  515. package/dist/src/web-ui/app/components/automations/workspace-navigation.js +37 -0
  516. package/dist/src/web-ui/app/components/automations/workspace.js +39 -45
  517. package/dist/src/web-ui/app/components/config-workspace/config-model.js +6 -0
  518. package/dist/src/web-ui/app/components/config-workspace/model-removal.js +4 -2
  519. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +8 -16
  520. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget-edit.js +113 -0
  521. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.d.ts +16 -0
  522. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.js +67 -0
  523. package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.d.ts +7 -0
  524. package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.js +25 -0
  525. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +15 -7
  526. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +32 -12
  527. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +1 -1
  528. package/dist/src/web-ui/app/components/config-workspace.js +2 -1
  529. package/dist/src/web-ui/app/components/confirmation-dialog.js +88 -0
  530. package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
  531. package/dist/src/web-ui/app/components/conversation-activity.js +32 -3
  532. package/dist/src/web-ui/app/components/conversation-memory-activity.js +31 -0
  533. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +2 -0
  534. package/dist/src/web-ui/app/components/conversation-role-cards.js +32 -2
  535. package/dist/src/web-ui/app/components/conversation-role-delegations.d.ts +12 -0
  536. package/dist/src/web-ui/app/components/conversation-role-delegations.js +24 -0
  537. package/dist/src/web-ui/app/components/conversation-role-history.d.ts +13 -0
  538. package/dist/src/web-ui/app/components/conversation-role-history.js +81 -0
  539. package/dist/src/web-ui/app/components/conversation-role-returns.d.ts +12 -0
  540. package/dist/src/web-ui/app/components/conversation-role-returns.js +23 -0
  541. package/dist/src/web-ui/app/components/conversation-skill-activity.js +67 -0
  542. package/dist/src/web-ui/app/components/conversation-tools.js +5 -5
  543. package/dist/src/web-ui/app/components/conversation-view.js +6 -0
  544. package/dist/src/web-ui/app/components/dashboard/approvals.js +13 -1
  545. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.d.ts +38 -0
  546. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.js +289 -0
  547. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-feature.js +75 -0
  548. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-rendering.js +31 -0
  549. package/dist/src/web-ui/app/components/long-term-memory/manager.js +15 -5
  550. package/dist/src/web-ui/app/components/long-term-memory/saved-embedding-profiles.js +114 -0
  551. package/dist/src/web-ui/app/components/long-term-memory/setup-rendering.js +55 -0
  552. package/dist/src/web-ui/app/components/long-term-memory-setup.js +141 -76
  553. package/dist/src/web-ui/app/components/model-setup/rendering.js +3 -2
  554. package/dist/src/web-ui/app/components/model-setup/validation.js +6 -2
  555. package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +1 -0
  556. package/dist/src/web-ui/app/components/model-setup/wizard.js +28 -5
  557. package/dist/src/web-ui/app/components/onboarding-workspace-access.js +1 -1
  558. package/dist/src/web-ui/app/components/passive-learning/memory.js +12 -5
  559. package/dist/src/web-ui/app/components/plugins/manager.js +14 -0
  560. package/dist/src/web-ui/app/components/plugins/removal.js +10 -2
  561. package/dist/src/web-ui/app/components/project-group-actions.js +35 -0
  562. package/dist/src/web-ui/app/components/project-session-groups.js +17 -31
  563. package/dist/src/web-ui/app/components/runtime-setup/commands.js +1 -1
  564. package/dist/src/web-ui/app/components/runtime-setup/connection-form.d.ts +15 -0
  565. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +32 -9
  566. package/dist/src/web-ui/app/components/runtime-setup/connection-input.js +23 -0
  567. package/dist/src/web-ui/app/components/runtime-setup/connection-inspection.js +57 -0
  568. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +18 -4
  569. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +3 -0
  570. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-options.js +54 -0
  571. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +3 -0
  572. package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +22 -22
  573. package/dist/src/web-ui/app/components/runtime-setup/embedding.js +60 -16
  574. package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.d.ts +17 -0
  575. package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.js +54 -0
  576. package/dist/src/web-ui/app/components/runtime-setup/validation.js +5 -1
  577. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +9 -3
  578. package/dist/src/web-ui/app/components/runtime-setup-guide.js +20 -29
  579. package/dist/src/web-ui/app/components/schedules/details.js +2 -2
  580. package/dist/src/web-ui/app/components/schedules/form.js +12 -5
  581. package/dist/src/web-ui/app/components/schedules/workspace.js +30 -18
  582. package/dist/src/web-ui/app/components/session-list-viewport.js +49 -0
  583. package/dist/src/web-ui/app/components/session-search-disclosure.js +27 -0
  584. package/dist/src/web-ui/app/components/skills/workspace.js +123 -0
  585. package/dist/src/web-ui/app/components/spark-chat/panel.js +7 -3
  586. package/dist/src/web-ui/app/components/spark-chat/settings.js +57 -15
  587. package/dist/src/web-ui/app/components/tool-approval-card.d.ts +2 -1
  588. package/dist/src/web-ui/app/components/tool-approval-card.js +10 -2
  589. package/dist/src/web-ui/app/components/tool-approval-rejection-input.js +116 -0
  590. package/dist/src/web-ui/app/components/workspace-shell.js +41 -39
  591. package/dist/src/web-ui/app/components/workspace-transitions.js +42 -0
  592. package/dist/src/web-ui/app/configuration-feature.js +34 -4
  593. package/dist/src/web-ui/app/controllers/app-event-bindings.js +45 -29
  594. package/dist/src/web-ui/app/controllers/appearance-controller.js +105 -0
  595. package/dist/src/web-ui/app/controllers/automation-read-projection.js +8 -4
  596. package/dist/src/web-ui/app/controllers/automation-run-actions.js +3 -1
  597. package/dist/src/web-ui/app/controllers/automation-run-history.js +159 -0
  598. package/dist/src/web-ui/app/controllers/automations-controller.js +36 -12
  599. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +1 -1
  600. package/dist/src/web-ui/app/controllers/composer-feature.js +10 -3
  601. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +1 -1
  602. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +9 -3
  603. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +1 -1
  604. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +8 -2
  605. package/dist/src/web-ui/app/controllers/dashboard-approvals-controller.js +10 -9
  606. package/dist/src/web-ui/app/controllers/environment-transition.js +2 -2
  607. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +12 -6
  608. package/dist/src/web-ui/app/controllers/preference-view-sync.js +35 -0
  609. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +4 -0
  610. package/dist/src/web-ui/app/controllers/projects-controller.js +64 -3
  611. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +22 -1
  612. package/dist/src/web-ui/app/controllers/reasoning-budget-controller.d.ts +17 -0
  613. package/dist/src/web-ui/app/controllers/reasoning-budget-controller.js +80 -0
  614. package/dist/src/web-ui/app/controllers/reasoning-budget-menu-events.js +45 -0
  615. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +35 -40
  616. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +6 -1
  617. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +23 -4
  618. package/dist/src/web-ui/app/controllers/session-controller.js +34 -9
  619. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +4 -3
  620. package/dist/src/web-ui/app/controllers/skills-controller.js +254 -0
  621. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +1 -1
  622. package/dist/src/web-ui/app/controllers/spark-handoff-navigation.js +7 -1
  623. package/dist/src/web-ui/app/controllers/tool-approval-controller.d.ts +2 -1
  624. package/dist/src/web-ui/app/controllers/tool-approval-controller.js +36 -3
  625. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +8 -2
  626. package/dist/src/web-ui/app/controllers/workspace-route-controller.js +41 -10
  627. package/dist/src/web-ui/app/index.html +38 -32
  628. package/dist/src/web-ui/app/lib/color-palettes.d.ts +17 -0
  629. package/dist/src/web-ui/app/lib/color-palettes.js +20 -0
  630. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +5 -0
  631. package/dist/src/web-ui/app/lib/conversation-role-model.js +63 -5
  632. package/dist/src/web-ui/app/lib/event-presentation.js +34 -0
  633. package/dist/src/web-ui/app/lib/memory-activity-model.d.ts +12 -0
  634. package/dist/src/web-ui/app/lib/memory-activity-model.js +61 -0
  635. package/dist/src/web-ui/app/lib/navigation-display.d.ts +8 -0
  636. package/dist/src/web-ui/app/lib/navigation-display.js +12 -0
  637. package/dist/src/web-ui/app/lib/reasoning-controls.js +47 -6
  638. package/dist/src/web-ui/app/lib/reasoning-preference.d.ts +9 -0
  639. package/dist/src/web-ui/app/lib/reasoning-preference.js +75 -0
  640. package/dist/src/web-ui/app/lib/role-delegation-event.d.ts +18 -0
  641. package/dist/src/web-ui/app/lib/role-delegation-event.js +47 -0
  642. package/dist/src/web-ui/app/lib/role-return-event.d.ts +19 -0
  643. package/dist/src/web-ui/app/lib/role-return-event.js +36 -0
  644. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +4 -0
  645. package/dist/src/web-ui/app/lib/session-composer-queue.js +4 -0
  646. package/dist/src/web-ui/app/lib/session-project-groups.js +28 -0
  647. package/dist/src/web-ui/app/lib/session-sidebar-order.js +7 -5
  648. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +1 -0
  649. package/dist/src/web-ui/app/lib/tool-activity-event.js +9 -6
  650. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +1 -0
  651. package/dist/src/web-ui/app/lib/tool-activity-model.js +1 -0
  652. package/dist/src/web-ui/app/lib/tool-approval-rejection-drafts.js +45 -0
  653. package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +50 -0
  654. package/dist/src/web-ui/app/lib/workspace-route.js +1 -0
  655. package/dist/src/web-ui/app/notifications-feature.js +10 -2
  656. package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
  657. package/dist/src/web-ui/app/projects-feature.js +40 -10
  658. package/dist/src/web-ui/app/runtime-onboarding-feature.js +1 -0
  659. package/dist/src/web-ui/app/schedules-feature.js +28 -5
  660. package/dist/src/web-ui/app/services/client-preferences.d.ts +4 -1
  661. package/dist/src/web-ui/app/services/client-preferences.js +2 -0
  662. package/dist/src/web-ui/app/services/conversation-reasoning-preferences.d.ts +11 -0
  663. package/dist/src/web-ui/app/services/conversation-reasoning-preferences.js +30 -0
  664. package/dist/src/web-ui/app/services/runtime-web-client/automations.d.ts +9 -1
  665. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +16 -6
  666. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +5 -0
  667. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +21 -0
  668. package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +2 -1
  669. package/dist/src/web-ui/app/services/runtime-web-client/projects.js +4 -0
  670. package/dist/src/web-ui/app/services/runtime-web-client/skills.js +23 -0
  671. package/dist/src/web-ui/app/services/runtime-web-client/tool-approvals.js +2 -0
  672. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +16 -0
  673. package/dist/src/web-ui/app/services/runtime-web-client.js +4 -0
  674. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +33 -13
  675. package/dist/src/web-ui/app/skills-feature.js +35 -0
  676. package/dist/src/web-ui/app/spark-chat-conversation.js +29 -3
  677. package/dist/src/web-ui/app/spark-chat-feature.js +13 -7
  678. package/dist/src/web-ui/app/styles/01-color-palettes.css +90 -0
  679. package/dist/src/web-ui/app/styles/11-product-links.css +6 -2
  680. package/dist/src/web-ui/app/styles/11-workspace-header-width.css +37 -25
  681. package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +56 -22
  682. package/dist/src/web-ui/app/styles/13-projects.css +56 -19
  683. package/dist/src/web-ui/app/styles/19-runtime-setup.css +16 -0
  684. package/dist/src/web-ui/app/styles/22-reasoning-budget.css +39 -0
  685. package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +58 -0
  686. package/dist/src/web-ui/app/styles/27-conversation-memory.css +45 -0
  687. package/dist/src/web-ui/app/styles/27-conversation-skills.css +96 -0
  688. package/dist/src/web-ui/app/styles/28-tool-approval-card.css +38 -1
  689. package/dist/src/web-ui/app/styles/35-embedding-profiles.css +159 -0
  690. package/dist/src/web-ui/app/styles/40-skills.css +34 -0
  691. package/dist/src/web-ui/app/styles/50-automations.css +24 -3
  692. package/dist/src/web-ui/app/styles/54-spark-chat.css +62 -46
  693. package/dist/src/web-ui/app/styles/65-appearance.css +60 -0
  694. package/dist/src/web-ui/app/styles/66-navigation-display.css +30 -0
  695. package/dist/src/web-ui/app/styles/67-confirmation-dialog.css +32 -0
  696. package/dist/src/web-ui/app/styles/95-home-widgets.css +2 -1
  697. package/dist/src/web-ui/app/styles.css +9 -0
  698. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  699. package/dist/src/web-ui/app/ui-behavior.js +1 -0
  700. package/dist/src/web-ui/client-state/preference-shapes.js +6 -1
  701. package/dist/src/web-ui/client-state/preferences.js +8 -2
  702. package/dist/src/web-ui/client-state/reasoning-preference-shape.d.ts +1 -0
  703. package/dist/src/web-ui/client-state/reasoning-preference-shape.js +18 -0
  704. package/dist/src/web-ui/client-state/store.js +3 -2
  705. package/dist/src/web-ui/client-state/transaction-order.d.ts +2 -0
  706. package/dist/src/web-ui/client-state/transaction-order.js +18 -0
  707. package/dist/src/web-ui/local-runtime/api-router.d.ts +2 -0
  708. package/dist/src/web-ui/local-runtime/api-router.js +18 -0
  709. package/dist/src/web-ui/local-runtime/automation-routes.js +2 -1
  710. package/dist/src/web-ui/local-runtime/automation-run-page.d.ts +5 -0
  711. package/dist/src/web-ui/local-runtime/automation-run-page.js +26 -0
  712. package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.d.ts +7 -0
  713. package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.js +22 -0
  714. package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.d.ts +20 -0
  715. package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.js +47 -0
  716. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +32 -0
  717. package/dist/src/web-ui/local-runtime/model-connection-inspection.d.ts +7 -0
  718. package/dist/src/web-ui/local-runtime/model-connection-inspection.js +48 -0
  719. package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +2 -1
  720. package/dist/src/web-ui/local-runtime/model-setup-catalog.js +3 -1
  721. package/dist/src/web-ui/local-runtime/model-setup-identity.js +1 -1
  722. package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +5 -2
  723. package/dist/src/web-ui/local-runtime/model-setup-input.js +29 -6
  724. package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +1 -1
  725. package/dist/src/web-ui/local-runtime/model-setup-provider.js +9 -6
  726. package/dist/src/web-ui/local-runtime/model-setup-retry.js +4 -1
  727. package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +2 -1
  728. package/dist/src/web-ui/local-runtime/pending-tool-approvals.js +4 -1
  729. package/dist/src/web-ui/local-runtime/project-routes.js +10 -2
  730. package/dist/src/web-ui/local-runtime/request-execution.js +1 -0
  731. package/dist/src/web-ui/local-runtime/runtime-setup-auth.d.ts +2 -0
  732. package/dist/src/web-ui/local-runtime/runtime-setup-auth.js +20 -0
  733. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +3 -2
  734. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +6 -1
  735. package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +3 -2
  736. package/dist/src/web-ui/local-runtime/runtime-setup-input.js +17 -5
  737. package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +4 -1
  738. package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +6 -2
  739. package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +11 -2
  740. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +11 -2
  741. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +3 -2
  742. package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +25 -4
  743. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +19 -9
  744. package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +3 -1
  745. package/dist/src/web-ui/local-runtime/setup-embedding-input.js +38 -6
  746. package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.d.ts +11 -0
  747. package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.js +53 -0
  748. package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +23 -9
  749. package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +7 -2
  750. package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +5 -3
  751. package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +1 -0
  752. package/dist/src/web-ui/local-runtime/skill-management-routes.d.ts +18 -0
  753. package/dist/src/web-ui/local-runtime/skill-management-routes.js +118 -0
  754. package/docs/configuration.md +11 -1
  755. package/docs/installation.md +11 -5
  756. package/docs/llamacpp.md +248 -0
  757. package/docs/long-term-memory.md +12 -0
  758. package/docs/running-locally.md +7 -1
  759. package/docs/runtime-public-contracts.md +37 -0
  760. package/examples/request-runner.config.example.json +3 -0
  761. package/package.json +2 -1
  762. package/plugins/project-orientation/source/index.ts +2 -3
  763. package/plugins/project-orientation/source/inspection-failure.ts +1 -1
  764. package/plugins/project-orientation/source/project-target.ts +29 -0
  765. package/plugins/project-orientation/src/index.cjs +21 -2
  766. package/plugins/web/skills/web_fetch_skill/SKILL.md +1 -2
  767. package/plugins/web/skills/web_search_skill/SKILL.md +3 -7
  768. package/runtime.config.schema.json +140 -0
  769. package/src/runtime/README.md +145 -4
@@ -143,6 +143,7 @@
143
143
  <span class="rail-button-label">System</span>
144
144
  </button>
145
145
  </div>
146
+ <div id="appearanceRoot"></div>
146
147
  <div class="rail-spacer"></div>
147
148
  <div class="rail-runtime">
148
149
  <select
@@ -206,6 +207,10 @@
206
207
  <h1 id="sessionsHeading">Conversations</h1>
207
208
  </div>
208
209
  <div class="sheet-heading-actions">
210
+ <button id="sessionSearchToggleButton" class="icon-button" type="button"
211
+ aria-label="Search conversations" title="Search conversations" aria-controls="sessionSearchField" aria-expanded="false">
212
+ <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="6.5" /><path d="m16 16 4 4" /></svg>
213
+ </button>
209
214
  <button
210
215
  id="refreshSessionsButton"
211
216
  class="icon-button"
@@ -233,7 +238,16 @@
233
238
  </div>
234
239
  </div>
235
240
 
236
- <div class="session-create-row">
241
+ <div class="session-navigation-tools">
242
+ <label id="sessionSearchField" class="session-search" hidden>
243
+ <span class="sr-only">Search conversations</span>
244
+ <input
245
+ id="sessionSearchInput"
246
+ type="search"
247
+ placeholder="Search conversations"
248
+ autocomplete="off"
249
+ />
250
+ </label>
237
251
  <button
238
252
  id="newSessionButton"
239
253
  class="sessions-new-button"
@@ -246,41 +260,25 @@
246
260
  </svg>
247
261
  <span>New chat</span>
248
262
  </button>
249
- <button
250
- id="newProjectButton"
251
- class="sessions-project-button"
252
- type="button"
253
- disabled
254
- aria-label="Create a project"
255
- title="Create a project"
256
- aria-controls="projectCreationRoot"
257
- >
258
- <svg viewBox="0 0 24 24" aria-hidden="true">
259
- <path d="M3 7V5h6l2 2h10v13H3ZM12 10v7M8.5 13.5h7" />
260
- </svg>
261
- <span>New project</span>
262
- </button>
263
263
  </div>
264
264
 
265
265
  <section class="sessions-section" aria-labelledby="sessionsHeading">
266
- <div class="sessions-heading-row">
267
- <span class="sessions-list-label">Recent conversations</span>
268
- <span id="sessionsCount" class="count-badge">0</span>
266
+ <div id="sessionsList" class="sessions-list">
267
+ <button
268
+ id="newProjectButton"
269
+ class="sessions-project-button"
270
+ type="button"
271
+ disabled
272
+ aria-label="Create a project"
273
+ title="Create a project"
274
+ aria-controls="projectCreationRoot"
275
+ >
276
+ <svg viewBox="0 0 24 24" aria-hidden="true">
277
+ <path d="M3 7V5h6l2 2h10v13H3ZM12 10v7M8.5 13.5h7" />
278
+ </svg>
279
+ <span>New project</span>
280
+ </button>
269
281
  </div>
270
- <label class="session-search">
271
- <svg viewBox="0 0 24 24" aria-hidden="true">
272
- <circle cx="11" cy="11" r="6.5" />
273
- <path d="m16 16 4 4" />
274
- </svg>
275
- <span class="sr-only">Search conversations</span>
276
- <input
277
- id="sessionSearchInput"
278
- type="search"
279
- placeholder="Search conversations"
280
- autocomplete="off"
281
- />
282
- </label>
283
- <div id="sessionsList" class="sessions-list"></div>
284
282
  </section>
285
283
  </aside>
286
284
 
@@ -437,6 +435,14 @@
437
435
  </button>
438
436
  <div id="agentModeMenu" class="agent-mode-menu"></div>
439
437
  </div>
438
+ <div id="reasoningBudgetControl" class="control-cluster reasoning-budget-control" hidden>
439
+ <span class="control-label">Budget</span>
440
+ <button id="reasoningBudgetButton" class="agent-mode-button reasoning-budget-button"
441
+ type="button" aria-controls="reasoningBudgetMenu" aria-haspopup="dialog" aria-expanded="false">
442
+ Profile default
443
+ </button>
444
+ <div id="reasoningBudgetMenu" class="agent-mode-menu reasoning-budget-menu" hidden></div>
445
+ </div>
440
446
  <div
441
447
  id="composerContextWindow"
442
448
  class="composer-context-window"
@@ -0,0 +1,17 @@
1
+ export const PALETTE_PREFERENCE_KEY: "abot-web.colorPalette";
2
+ export const DEFAULT_PALETTE_ID: "harbor";
3
+ export type ColorPaletteId = "harbor" | "midnight" | "graphite" | "charcoal" | "onyx" | "sand";
4
+ export interface ColorPalette {
5
+ id: ColorPaletteId;
6
+ name: string;
7
+ description: string;
8
+ background: string;
9
+ panel: string;
10
+ accent: string;
11
+ }
12
+ export const COLOR_PALETTES: ColorPalette[];
13
+ export function isColorPaletteId(value: unknown): value is ColorPaletteId;
14
+ export function savedColorPalette(storage: {
15
+ getItem(key: string): string | null;
16
+ snapshot?(): { preferences: Record<string, string> } | null;
17
+ }): ColorPaletteId;
@@ -0,0 +1,20 @@
1
+ export const PALETTE_PREFERENCE_KEY = "abot-web.colorPalette";
2
+ export const DEFAULT_PALETTE_ID = "harbor";
3
+ export const COLOR_PALETTES = [
4
+ { id: "harbor", name: "Harbor", description: "Deep blue · sea glass", background: "#090f17", panel: "#0d151e", accent: "#82d4c2" },
5
+ { id: "midnight", name: "Midnight", description: "Near black · ice blue", background: "#090b10", panel: "#10131b", accent: "#97bdff" },
6
+ { id: "graphite", name: "Graphite", description: "Soft charcoal · lilac", background: "#101012", panel: "#18181c", accent: "#c4b5ed" },
7
+ { id: "charcoal", name: "Onyx Soft", description: "Soft black · silver", background: "#0d0d0d", panel: "#151515", accent: "#c7c7c7" },
8
+ { id: "onyx", name: "Onyx", description: "Pure black · soft white", background: "#070707", panel: "#101010", accent: "#d4d4d4" },
9
+ { id: "sand", name: "Onyx Steel", description: "Cool black · steel", background: "#080b0e", panel: "#101519", accent: "#b5c6d2" },
10
+ ];
11
+
12
+ export function isColorPaletteId(value) {
13
+ return COLOR_PALETTES.some((palette) => palette.id === value);
14
+ }
15
+
16
+ export function savedColorPalette(storage) {
17
+ const acknowledged = storage.snapshot?.();
18
+ const value = acknowledged ? acknowledged.preferences[PALETTE_PREFERENCE_KEY] : storage.getItem(PALETTE_PREFERENCE_KEY);
19
+ return isColorPaletteId(value) ? value : DEFAULT_PALETTE_ID;
20
+ }
@@ -1,4 +1,6 @@
1
1
  import type { ConversationToolAction } from "./tool-activity-model.js";
2
+ import type { RoleDelegation } from "./role-delegation-event.js";
3
+ import type { RoleReturn } from "./role-return-event.js";
2
4
 
3
5
  export type ConversationRole =
4
6
  | "supervisor"
@@ -17,6 +19,9 @@ export interface ConversationRoleCard {
17
19
  summary: string;
18
20
  facts: string[];
19
21
  toolActions?: ConversationToolAction[];
22
+ skillActivities?: { summary: string; tone: string }[];
23
+ delegations?: RoleDelegation[];
24
+ returns?: RoleReturn[];
20
25
  active: boolean;
21
26
  tone: "active" | "failed" | "recorded";
22
27
  }
@@ -5,6 +5,14 @@ import {
5
5
  titleCaseEventValue,
6
6
  } from "./event-presentation.js";
7
7
  import { textOf } from "./text-format.js";
8
+ import {
9
+ isRoleDelegationEvent,
10
+ projectRoleDelegationEvent,
11
+ } from "./role-delegation-event.js";
12
+ import {
13
+ isRoleReturnEvent,
14
+ projectRoleReturnEvent,
15
+ } from "./role-return-event.js";
8
16
  import { countToolInvocations } from "./tool-invocation-count.js";
9
17
  import { projectToolActivityEvent } from "./tool-activity-event.js";
10
18
  import { correlateToolApprovalActivity } from "./tool-approval-activity.js";
@@ -32,13 +40,16 @@ const ROLE_RESPONSIBILITIES = Object.freeze({
32
40
  });
33
41
 
34
42
  function latestRoleAction(group) {
43
+ if (group.summarySupersededByReturn) return "";
44
+ if (!group.latestEvent) return "";
35
45
  if (group.toolActions.some((action) => !action.legacy)) {
36
- return group.latestRoleEvent
46
+ return group.latestRoleEvent && !isSupervisorSkillActivity(group.latestRoleEvent)
37
47
  ? roleActivitySummary(group.latestRoleEvent)
38
48
  : "";
39
49
  }
40
50
  const toolEvent = group.toolEvents.at(-1);
41
- return roleActivitySummary(toolEvent || group.latestEvent);
51
+ const event = toolEvent || group.latestEvent;
52
+ return isSupervisorSkillActivity(event) ? "" : roleActivitySummary(event);
42
53
  }
43
54
 
44
55
  function belongsToRoleRequest(event, requestId) {
@@ -64,14 +75,20 @@ function orderedRequestActivity(events, requestId) {
64
75
  for (const event of events) {
65
76
  if (!belongsToRoleRequest(event, requestId)) continue;
66
77
  const position = activityPosition(event);
67
- if (!position) {
78
+ const delegation = projectRoleDelegationEvent(event);
79
+ const receipt = projectRoleReturnEvent(event);
80
+ if (!position && !delegation && !receipt) {
68
81
  unique.push({ event, position });
69
82
  continue;
70
83
  }
71
- const identity = `${position.domain}:${position.value}`;
84
+ let identity;
85
+ if (receipt) identity = `return:${receipt.id}`;
86
+ else if (delegation) identity = `delegation:${delegation.id}`;
87
+ else identity = `${position.domain}:${position.value}`;
72
88
  if (seen.has(identity)) continue;
73
89
  seen.add(identity);
74
90
  unique.push({ event, position });
91
+ if (!position) continue;
75
92
  const domain = domains.get(position.domain) || { events: [], next: 0 };
76
93
  domain.events.push({ event, position });
77
94
  domains.set(position.domain, domain);
@@ -104,8 +121,14 @@ function isToolActivityEvent(event) {
104
121
  return activityEventName(event).startsWith("tool.");
105
122
  }
106
123
 
124
+ function isSupervisorSkillActivity(event) {
125
+ return event.stage === "supervisor" && event.phase === "skills"
126
+ && !isToolActivityEvent(event);
127
+ }
128
+
107
129
  function roleActivityStage(event) {
108
130
  if (isToolActivityEvent(event)) return "";
131
+ if (isRoleDelegationEvent(event) || isRoleReturnEvent(event)) return "";
109
132
  return textOf(event.stage).trim();
110
133
  }
111
134
 
@@ -114,6 +137,7 @@ function hasSupportedRoleStage(stage) {
114
137
  }
115
138
 
116
139
  function isFailedRoleActivity(event) {
140
+ if (!event) return false;
117
141
  if (isToolActivityEvent(event)) return false;
118
142
  return (textOf(event.tone) || eventTone(event)) === "failed";
119
143
  }
@@ -134,6 +158,10 @@ function createRoleGroup(role, event) {
134
158
  latestRoleEvent: null,
135
159
  toolEvents: [],
136
160
  toolActions: [],
161
+ skillActivities: [],
162
+ delegations: [],
163
+ returns: [],
164
+ summarySupersededByReturn: false,
137
165
  };
138
166
  }
139
167
 
@@ -153,6 +181,7 @@ function buildRoleCard(group, activeRole, streaming) {
153
181
  const active = isActiveRoleActivity(group, activeRole, streaming);
154
182
  const toolCount = countToolInvocations(group.toolEvents);
155
183
  const toolSummary = summarizeConversationTools(group.toolActions);
184
+ const roleIdentityRecorded = group.latestRoleEvent || group.delegations[0];
156
185
  let tone = "recorded";
157
186
  if (active) tone = "active";
158
187
  if (failed) tone = "failed";
@@ -160,12 +189,17 @@ function buildRoleCard(group, activeRole, streaming) {
160
189
  id: group.role,
161
190
  role: group.role,
162
191
  title:
163
- group.role === "supervisor" && !group.latestRoleEvent
192
+ group.role === "supervisor" && !roleIdentityRecorded
164
193
  ? "Root agent"
165
194
  : ROLE_TITLES[group.role],
166
195
  responsibility: ROLE_RESPONSIBILITIES[group.role],
167
196
  phaseLabel: titleCaseEventValue(group.phase),
168
197
  summary: latestRoleAction(group),
198
+ ...(group.skillActivities.length > 0
199
+ ? { skillActivities: group.skillActivities }
200
+ : {}),
201
+ ...(group.delegations.length > 0 ? { delegations: group.delegations } : {}),
202
+ ...(group.returns.length > 0 ? { returns: group.returns } : {}),
169
203
  toolActions: group.toolActions,
170
204
  facts: toolSummary
171
205
  ? [toolSummary]
@@ -203,6 +237,23 @@ export function buildConversationRoleCards({
203
237
  continue;
204
238
  }
205
239
 
240
+ const delegation = projectRoleDelegationEvent(event);
241
+ if (delegation) {
242
+ const group = groups.get("supervisor") || createRoleGroup("supervisor", null);
243
+ group.delegations.push(delegation);
244
+ groups.set("supervisor", group);
245
+ continue;
246
+ }
247
+
248
+ const receipt = projectRoleReturnEvent(event);
249
+ if (receipt) {
250
+ const group = groups.get("planner") || createRoleGroup("planner", null);
251
+ group.returns.push(receipt);
252
+ group.summarySupersededByReturn = true;
253
+ groups.set("planner", group);
254
+ continue;
255
+ }
256
+
206
257
  const stage = roleActivityStage(event);
207
258
  if (stage) {
208
259
  activeRole = "";
@@ -212,6 +263,13 @@ export function buildConversationRoleCards({
212
263
  group.phase = textOf(event.phase);
213
264
  group.latestEvent = event;
214
265
  group.latestRoleEvent = event;
266
+ group.summarySupersededByReturn = false;
267
+ if (isSupervisorSkillActivity(event)) {
268
+ group.skillActivities.push({
269
+ summary: roleActivitySummary(event),
270
+ tone: textOf(event.tone) || eventTone(event),
271
+ });
272
+ }
215
273
  groups.set(stage, group);
216
274
  }
217
275
  }
@@ -1,8 +1,19 @@
1
1
  import { textOf } from "./text-format.js";
2
2
  import { isStopResult } from "./request-stop-state.js";
3
+ import {
4
+ isRoleDelegationEvent,
5
+ projectRoleDelegationEvent,
6
+ } from "./role-delegation-event.js";
7
+
8
+ import {
9
+ isRoleReturnEvent,
10
+ projectRoleReturnEvent,
11
+ } from "./role-return-event.js";
3
12
 
4
13
  function canMergeEventTimelineEntries(previous, event, name, summary) {
5
14
  if (!previous) return false;
15
+ if (isRoleDelegationEvent(previous) || isRoleDelegationEvent(event)) return false;
16
+ if (isRoleReturnEvent(previous) || isRoleReturnEvent(event)) return false;
6
17
  if (previous.name !== name) return false;
7
18
  if (previous.summary !== summary) return false;
8
19
  if (previous.tone !== event.tone) return false;
@@ -119,7 +130,22 @@ export function getPlanItemPayload(message) {
119
130
  };
120
131
  }
121
132
 
133
+ function isMissingSkillLookup(message) {
134
+ if (message.type !== "event") return false;
135
+ if (message.stage !== "supervisor") return false;
136
+ if (message.phase !== "skills") return false;
137
+ // Runtime-owned status text, before or after event enrichment.
138
+ const name = textOf(message.name || message.rawType);
139
+ const status = textOf(message.message || name);
140
+ return (name === "runtime.state" || name === status)
141
+ && status === "Skill lookup failed: knowledge_skill_not_found";
142
+ }
143
+
122
144
  export function formatEventLabel(message) {
145
+ const receipt = projectRoleReturnEvent(message);
146
+ if (receipt) return receipt.outcome === "failed" ? "Planner failed" : "Returned result";
147
+ const delegation = projectRoleDelegationEvent(message);
148
+ if (delegation) return `Delegated to ${titleCaseEventValue(delegation.childRole)}`;
123
149
  const name = textOf(message.name || message.rawType || message.type);
124
150
  const status = textOf(message.status);
125
151
  const phase = textOf(message.phase);
@@ -155,6 +181,7 @@ export function formatEventLabel(message) {
155
181
  if (name === "request.failed" || message.type === "failed") {
156
182
  return isStopResult(message) ? "Response stopped" : "Response failed";
157
183
  }
184
+ if (isMissingSkillLookup(message)) return "Skill not found";
158
185
  if (name === "runtime.state") {
159
186
  return status || textOf(message.output) || "Runtime state";
160
187
  }
@@ -180,6 +207,11 @@ function uncompletedToolLabel(message, name) {
180
207
  }
181
208
 
182
209
  export function formatEventDetail(message) {
210
+ const receipt = projectRoleReturnEvent(message);
211
+ if (receipt) return receipt.summary;
212
+ const delegation = projectRoleDelegationEvent(message);
213
+ if (delegation) return delegation.objective;
214
+ if (isMissingSkillLookup(message)) return "";
183
215
  if (isStopResult(message)) return "Stopped by you.";
184
216
  const parts = [];
185
217
  const name = textOf(message.name || message.rawType || message.type);
@@ -209,10 +241,12 @@ export function formatEventDetail(message) {
209
241
  }
210
242
 
211
243
  export function eventTone(message) {
244
+ if (isRoleReturnEvent(message)) return "neutral";
212
245
  const name = textOf(message.name || message.type);
213
246
  const normalized = name.toLowerCase();
214
247
  if (isStopResult(message)) return "neutral";
215
248
  if (isUncompletedToolEvent(message)) return "neutral";
249
+ if (isMissingSkillLookup(message)) return "neutral";
216
250
  if (
217
251
  message.ok === false ||
218
252
  textOf(message.status).toLowerCase() === "failed" ||
@@ -0,0 +1,12 @@
1
+ export type MemoryActivity = {
2
+ state: "active" | "done" | "failed" | "incomplete";
3
+ label: string;
4
+ detail: string;
5
+ };
6
+
7
+ export declare function isMemoryRetrievalEvent(event: unknown): boolean;
8
+ export declare function buildMemoryActivities(input?: {
9
+ requestId?: string;
10
+ events?: Record<string, unknown>[];
11
+ streaming?: boolean;
12
+ }): MemoryActivity[];
@@ -0,0 +1,61 @@
1
+ import { textOf } from "./text-format.js";
2
+
3
+ const RETRIEVAL_STATES = Object.freeze({
4
+ "memory.retrieval.started": "active",
5
+ "memory.retrieval.completed": "done",
6
+ "memory.retrieval.failed": "failed",
7
+ });
8
+
9
+ export function isMemoryRetrievalEvent(event) {
10
+ return Object.hasOwn(RETRIEVAL_STATES, memoryEventName(event));
11
+ }
12
+
13
+ function memoryEventName(event) {
14
+ return textOf(event?.eventName || event?.name || event?.rawType || event?.type);
15
+ }
16
+
17
+ function sequenceOf(event, field) {
18
+ const value = field === "replay" ? event.lastSeqNo ?? event.seqNo : event.eventSequence;
19
+ return Number.isSafeInteger(value) && value > 0 ? value : null;
20
+ }
21
+
22
+ function hasCompleteMemoryOrdering(events, field) {
23
+ return events.every((event) => sequenceOf(event, field) !== null);
24
+ }
25
+
26
+ function orderedMemoryEvents(events) {
27
+ for (const field of ["runtime", "replay"]) {
28
+ if (!hasCompleteMemoryOrdering(events, field)) continue;
29
+ const unique = new Map();
30
+ for (const event of events) {
31
+ const sequence = sequenceOf(event, field);
32
+ if (!unique.has(sequence)) unique.set(sequence, event);
33
+ }
34
+ return [...unique.entries()].sort(([left], [right]) => left - right).map(([, event]) => event);
35
+ }
36
+ return events;
37
+ }
38
+
39
+ function memoryActivity(event, streaming) {
40
+ const recordedState = RETRIEVAL_STATES[memoryEventName(event)];
41
+ const state = recordedState === "active" && !streaming ? "incomplete" : recordedState;
42
+ const labels = {
43
+ active: "Checking memory…",
44
+ done: "Memory checked",
45
+ failed: "Memory retrieval failed",
46
+ incomplete: "Memory check incomplete",
47
+ };
48
+ return {
49
+ state,
50
+ label: labels[state],
51
+ detail: state === "failed" ? textOf(event.summary || event.reason || event.error) : "",
52
+ };
53
+ }
54
+
55
+ /** Show the latest retrieval status for this request; recorded events stay intact. */
56
+ export function buildMemoryActivities({ requestId, events = [], streaming = false } = {}) {
57
+ const scoped = events.filter((event) =>
58
+ textOf(event?.requestId) === requestId && isMemoryRetrievalEvent(event));
59
+ const latest = orderedMemoryEvents(scoped).at(-1);
60
+ return latest ? [memoryActivity(latest, streaming)] : [];
61
+ }
@@ -0,0 +1,8 @@
1
+ export const NAVIGATION_PREFERENCE_KEY: "abot-web.navigationDisplay";
2
+ export const DEFAULT_NAVIGATION_MODE: "labels";
3
+ export type NavigationMode = "labels" | "icons";
4
+ export function isNavigationMode(value: unknown): value is NavigationMode;
5
+ export function savedNavigationMode(storage: {
6
+ getItem(key: string): string | null;
7
+ snapshot?(): { preferences: Record<string, string> } | null;
8
+ }): NavigationMode;
@@ -0,0 +1,12 @@
1
+ export const NAVIGATION_PREFERENCE_KEY = "abot-web.navigationDisplay";
2
+ export const DEFAULT_NAVIGATION_MODE = "labels";
3
+
4
+ export function isNavigationMode(value) {
5
+ return value === "labels" || value === "icons";
6
+ }
7
+
8
+ export function savedNavigationMode(storage) {
9
+ const acknowledged = storage.snapshot?.();
10
+ const value = acknowledged ? acknowledged.preferences[NAVIGATION_PREFERENCE_KEY] : storage.getItem(NAVIGATION_PREFERENCE_KEY);
11
+ return isNavigationMode(value) ? value : DEFAULT_NAVIGATION_MODE;
12
+ }
@@ -1,6 +1,8 @@
1
+ import { reasoningPreferenceLabel, renderReasoningPreferenceField, syncReasoningPreferenceField } from "./reasoning-preference.js";
1
2
  import { escapeHtml } from "./text-format.js";
2
3
 
3
- export function displayReasoningMode(mode) {
4
+ export function displayReasoningMode(mode, preference) {
5
+ if (preference) return `${agentModeMeta(mode).label} · ${reasoningPreferenceLabel(preference)}`;
4
6
  if (mode === "fast") return "Low";
5
7
  return mode;
6
8
  }
@@ -16,10 +18,34 @@ export function reasoningModeOptions(mode, enabled, modes = ["fast", "reasoning"
16
18
  return modes.map((value) => `<option value="${escapeHtml(value)}"${value === mode ? " selected" : ""}>${escapeHtml(labels[value] || value)}</option>`).join("");
17
19
  }
18
20
 
19
- export function renderReasoningModeField(mode, profile, modes) {
21
+ export function agentModeMeta(mode) {
22
+ const modes = {
23
+ auto: { label: "Auto", description: "Lets the agent choose", icon: "*" },
24
+ fast: { label: "Low", description: "Shorter and quicker", icon: "!" },
25
+ reasoning: { label: "Reasoning", description: "Balanced speed and thinking", icon: "R" },
26
+ deep: { label: "Deep", description: "More careful responses", icon: "D" },
27
+ };
28
+ return modes[mode] || modes.reasoning;
29
+ }
30
+
31
+ export function renderReasoningModeButtons(mode, modes, disabled = false) {
32
+ return modes.map((value) => {
33
+ const item = agentModeMeta(value);
34
+ const selected = value === mode;
35
+ return `<button class="agent-mode-option ${selected ? "selected" : ""}" type="button"
36
+ role="menuitemradio" aria-checked="${selected}" tabindex="${selected ? "0" : "-1"}"
37
+ data-mode="${escapeHtml(value)}" ${disabled ? "disabled" : ""}>
38
+ <span class="agent-mode-option-icon">${escapeHtml(item.icon)}</span>
39
+ <span><strong>${escapeHtml(item.label)}</strong><small>${escapeHtml(item.description)}</small></span>
40
+ </button>`;
41
+ }).join("");
42
+ }
43
+
44
+ export function renderReasoningModeField(mode, profile, modes, preference) {
20
45
  const enabled = canChooseReasoning(profile);
21
- return `<label>Reasoning depth<select name="agentMode" data-reasoning-mode${enabled ? "" : " disabled"}>${reasoningModeOptions(mode, enabled, modes)}</select>
22
- <small data-reasoning-mode-note${enabled ? " hidden" : ""}>Uses the provider default. Enable reasoning controls for this model in Models.</small></label>`;
46
+ return `<label data-legacy-reasoning>Reasoning depth<select name="agentMode" data-reasoning-mode data-retained-mode="${escapeHtml(mode || "reasoning")}"${enabled ? "" : " disabled"}>${reasoningModeOptions(mode, enabled, modes)}</select>
47
+ <small data-reasoning-mode-note${enabled ? " hidden" : ""}>Uses the provider default. Enable reasoning controls for this model in Models.</small>
48
+ <small data-reasoning-default-note${enabled ? "" : " hidden"}>Sets the default depth; model profile and calibration settings may override it. Token budgets are separate. Changing the mode turns Thinking Off back on.</small></label>${renderReasoningPreferenceField(profile, preference)}`;
23
49
  }
24
50
 
25
51
  export function syncReasoningModeField(form, profiles, modes) {
@@ -28,13 +54,28 @@ export function syncReasoningModeField(form, profiles, modes) {
28
54
  const profileId = form.querySelector('[name="modelProfileId"]')?.value;
29
55
  const profile = profiles?.find((item) => item.id === profileId);
30
56
  const enabled = canChooseReasoning(profile);
31
- const mode = select.value;
57
+ syncReasoningPreferenceField(form, profile);
58
+ const mode = select.value || select.dataset.retainedMode || "reasoning";
59
+ select.dataset.retainedMode = mode;
32
60
  select.innerHTML = reasoningModeOptions(mode, enabled, modes);
33
61
  select.disabled = !enabled;
34
62
  const note = form.querySelector("[data-reasoning-mode-note]");
35
63
  if (note) note.hidden = enabled;
64
+ const defaultNote = form.querySelector("[data-reasoning-default-note]");
65
+ if (defaultNote) defaultNote.hidden = !enabled;
66
+ }
67
+
68
+ export function clearReasoningOffForMode(form, profiles, modes) {
69
+ const select = form.querySelector("[data-reasoning-mode]");
70
+ if (!select?.value || select.disabled) return;
71
+ select.dataset.retainedMode = select.value;
72
+ const preferenceMode = form.querySelector("[data-reasoning-preference-mode]");
73
+ if (preferenceMode?.value !== "off") return;
74
+ preferenceMode.value = "inherit";
75
+ syncReasoningModeField(form, profiles, modes);
36
76
  }
37
77
 
38
78
  export function retainedReasoningMode(form, fallback) {
39
- return form.querySelector("[data-reasoning-mode]")?.value || fallback;
79
+ const select = form.querySelector("[data-reasoning-mode]");
80
+ return select?.value || select?.dataset.retainedMode || fallback;
40
81
  }
@@ -0,0 +1,9 @@
1
+ import type { ModelReasoningPreference } from "../../../shared/model-reasoning.js";
2
+ export type ReasoningProfile = { id?: string; supportsThinking?: boolean; reasoningControls?: { budgetTokens: boolean } };
3
+ export declare const MAX_REASONING_BUDGET_TOKENS: number;
4
+ export declare function canChooseReasoningBudget(profile: ReasoningProfile | null | undefined): boolean;
5
+ export declare function isReasoningPreference(value: unknown): value is ModelReasoningPreference;
6
+ export declare function reasoningPreferenceLabel(preference?: ModelReasoningPreference): string;
7
+ export declare function renderReasoningPreferenceField(profile?: ReasoningProfile | null, preference?: ModelReasoningPreference): string;
8
+ export declare function syncReasoningPreferenceField(form: ParentNode, profile?: ReasoningProfile | null): void;
9
+ export declare function readReasoningPreferenceField(form: ParentNode): ModelReasoningPreference | undefined;
@@ -0,0 +1,75 @@
1
+ import { escapeHtml } from "./text-format.js";
2
+
3
+ export const MAX_REASONING_BUDGET_TOKENS = 2147483647;
4
+ export function canChooseReasoningBudget(profile) {
5
+ return profile?.supportsThinking === true && profile?.reasoningControls?.budgetTokens === true;
6
+ }
7
+ export function isReasoningPreference(value) {
8
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
9
+ if (typeof value.profileId !== "string" || !value.profileId.trim()) return false;
10
+ if (!["off", "budget", "server-default"].includes(value.mode)) return false;
11
+ const fields = value.mode === "budget" ? ["profileId", "mode", "budgetTokens"] : ["profileId", "mode"];
12
+ if (Object.keys(value).some((key) => !fields.includes(key))) return false;
13
+ return value.mode !== "budget" || (Number.isInteger(value.budgetTokens)
14
+ && value.budgetTokens >= 0 && value.budgetTokens <= MAX_REASONING_BUDGET_TOKENS);
15
+ }
16
+ export function reasoningPreferenceLabel(preference) {
17
+ const zeroBudgetDisablesThinking = preference?.mode === "budget" && preference.budgetTokens === 0;
18
+ if (zeroBudgetDisablesThinking) return "Thinking off";
19
+ if (preference?.mode === "budget") return `${preference.budgetTokens} thinking tokens`;
20
+ if (preference?.mode === "off") return "Thinking off";
21
+ if (preference?.mode === "server-default") return "Server thinking default";
22
+ return "Profile default";
23
+ }
24
+ export function renderReasoningPreferenceField(profile, preference) {
25
+ const available = canChooseReasoningBudget(profile);
26
+ const mode = preference?.mode || "inherit";
27
+ const profileId = profile?.id || preference?.profileId || "";
28
+ return `<div data-reasoning-preference data-profile-id="${escapeHtml(profileId)}" data-budget-available="${available}"${available || preference ? "" : " hidden"}>
29
+ <label>Thinking budget<select name="reasoningPreferenceMode" data-reasoning-preference-mode>
30
+ ${[["inherit", "Profile default"], ["off", "Off"], ["budget", "Custom token budget"], ["server-default", "Server default"]].map(([value, label]) => `<option value="${value}"${value === mode ? " selected" : ""}${!available && value !== "inherit" ? " disabled" : ""}>${label}</option>`).join("")}
31
+ </select></label>
32
+ <label data-reasoning-budget-label${mode === "budget" ? "" : " hidden"}>Thinking tokens<input name="reasoningBudgetTokens" data-reasoning-budget type="number" min="0" max="${MAX_REASONING_BUDGET_TOKENS}" step="1" inputmode="numeric" value="${preference?.mode === "budget" ? escapeHtml(String(preference.budgetTokens)) : ""}"${mode === "budget" ? " required" : " disabled"}></label>
33
+ <small data-reasoning-preference-note>${available ? "The token limit is independent of reasoning depth and counts toward the total output limit. Off or a token limit of 0 disables thinking." : "This model cannot use the saved thinking budget. Choose Profile default to clear it."}</small>
34
+ </div><small data-reasoning-model-change-note hidden>Changing the model reset the thinking budget to Profile default.</small>`;
35
+ }
36
+ export function syncReasoningPreferenceField(form, profile) {
37
+ const field = form?.querySelector("[data-reasoning-preference]");
38
+ if (!field) return;
39
+ const changed = field.dataset.profileId !== (profile?.id || "");
40
+ const mode = field.querySelector("[data-reasoning-preference-mode]");
41
+ const notice = form.querySelector("[data-reasoning-model-change-note]");
42
+ if (changed) {
43
+ if (notice) notice.hidden = mode.value === "inherit";
44
+ field.dataset.profileId = profile?.id || "";
45
+ mode.value = "inherit";
46
+ field.querySelector("[data-reasoning-budget]").value = "";
47
+ }
48
+ const available = canChooseReasoningBudget(profile);
49
+ field.dataset.budgetAvailable = String(available);
50
+ field.hidden = !available && mode.value === "inherit";
51
+ for (const option of mode.querySelectorAll("option")) option.disabled = !available && option.value !== "inherit";
52
+ if (!changed && mode.value !== "inherit" && notice) notice.hidden = true;
53
+ const custom = mode.value === "budget";
54
+ field.querySelector("[data-reasoning-budget-label]").hidden = !custom;
55
+ const input = field.querySelector("[data-reasoning-budget]");
56
+ input.disabled = !custom; input.required = custom;
57
+ }
58
+ function readReasoningBudgetTokens(field) {
59
+ const raw = field.querySelector("[data-reasoning-budget]").value;
60
+ if (raw.trim() === "") return NaN;
61
+ return Number(raw);
62
+ }
63
+
64
+ export function readReasoningPreferenceField(form) {
65
+ const field = form?.querySelector("[data-reasoning-preference]");
66
+ const mode = field?.querySelector("[data-reasoning-preference-mode]")?.value || "inherit";
67
+ if (mode === "inherit") return undefined;
68
+ if (field.dataset.budgetAvailable !== "true")
69
+ throw new Error("This model does not support thinking budgets. Choose Profile default.");
70
+ const preference = { profileId: field.dataset.profileId, mode };
71
+ if (mode === "budget") preference.budgetTokens = readReasoningBudgetTokens(field);
72
+ if (!isReasoningPreference(preference))
73
+ throw new Error(`Enter a whole thinking token budget from 0 to ${MAX_REASONING_BUDGET_TOKENS}; 0 disables thinking.`);
74
+ return preference;
75
+ }