@abot-ai/runtime 1.8.0 → 1.9.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 (423) hide show
  1. package/README.md +216 -222
  2. package/dist/scripts/runtime-setup-files.js +46 -2
  3. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
  4. package/dist/src/capabilities/tool-types.d.ts +4 -0
  5. package/dist/src/model-gateway/client/chat.js +9 -5
  6. package/dist/src/model-gateway/client/invocation-error.d.ts +9 -0
  7. package/dist/src/model-gateway/client/invocation-error.js +30 -0
  8. package/dist/src/model-gateway/client/stream-consumer.js +9 -2
  9. package/dist/src/model-gateway/client/stream-parser.js +2 -1
  10. package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
  11. package/dist/src/model-gateway/protocol/message-contract.js +1 -1
  12. package/dist/src/model-gateway/server/chat-handler.js +5 -7
  13. package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
  14. package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
  15. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +5 -1
  16. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +15 -1
  17. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-execution.js +7 -5
  18. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-snapshot.js +9 -2
  19. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
  20. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
  21. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
  22. package/dist/src/runtime/automations/service.d.ts +1 -1
  23. package/dist/src/runtime/capabilities/automation-builder/tool-module.js +4 -4
  24. package/dist/src/runtime/capabilities/automations/draft-index.d.ts +1 -1
  25. package/dist/src/runtime/capabilities/automations/tool-module.js +4 -4
  26. package/dist/src/runtime/capabilities/core-tool-contracts.d.ts +29 -0
  27. package/dist/src/runtime/capabilities/core-tool-contracts.js +38 -0
  28. package/dist/src/runtime/capabilities/knowledge-skills/read-many.d.ts +4 -0
  29. package/dist/src/runtime/capabilities/knowledge-skills/read-many.js +21 -0
  30. package/dist/src/runtime/capabilities/knowledge-skills/read-targets.d.ts +13 -0
  31. package/dist/src/runtime/capabilities/knowledge-skills/read-targets.js +44 -0
  32. package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.d.ts +141 -0
  33. package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.js +58 -0
  34. package/dist/src/runtime/capabilities/knowledge-skills/tool-module.d.ts +4 -0
  35. package/dist/src/runtime/capabilities/knowledge-skills/tool-module.js +78 -0
  36. package/dist/src/runtime/capabilities/knowledge-skills/tool-output.d.ts +12 -0
  37. package/dist/src/runtime/capabilities/knowledge-skills/tool-output.js +21 -0
  38. package/dist/src/runtime/capabilities/knowledge-skills/write-contract.d.ts +77 -0
  39. package/dist/src/runtime/capabilities/knowledge-skills/write-contract.js +28 -0
  40. package/dist/src/runtime/capabilities/knowledge-skills/write-operations.d.ts +3 -0
  41. package/dist/src/runtime/capabilities/knowledge-skills/write-operations.js +34 -0
  42. package/dist/src/runtime/capabilities/scheduling/tool-module.js +3 -3
  43. package/dist/src/runtime/capabilities/tool-availability.js +6 -0
  44. package/dist/src/runtime/composition.d.ts +5 -0
  45. package/dist/src/runtime/context/capability-brief.d.ts +2 -2
  46. package/dist/src/runtime/context/capability-brief.js +3 -3
  47. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
  48. package/dist/src/runtime/context/capability-descriptions.js +57 -20
  49. package/dist/src/runtime/context/capability-result-compaction-source.d.ts +3 -1
  50. package/dist/src/runtime/context/capability-result-compaction-source.js +13 -1
  51. package/dist/src/runtime/context/core-skill-read-context.d.ts +16 -0
  52. package/dist/src/runtime/context/core-skill-read-context.js +76 -0
  53. package/dist/src/runtime/context/exact-evidence-match.d.ts +3 -0
  54. package/dist/src/runtime/context/exact-evidence-match.js +34 -0
  55. package/dist/src/runtime/context/model-step-compaction.js +20 -6
  56. package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.d.ts +9 -0
  57. package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.js +38 -0
  58. package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +2 -0
  59. package/dist/src/runtime/context/semantic-compaction/prompt.js +7 -7
  60. package/dist/src/runtime/context/semantic-compaction/run.js +10 -3
  61. package/dist/src/runtime/context/semantic-compaction/super-source-integrity.js +33 -3
  62. package/dist/src/runtime/context/session-artifact-paths.d.ts +2 -1
  63. package/dist/src/runtime/context/session-artifact-paths.js +2 -1
  64. package/dist/src/runtime/context/session-memory/model-step-controller.d.ts +2 -2
  65. package/dist/src/runtime/context/super-worker-compaction-failure.d.ts +1 -1
  66. package/dist/src/runtime/context/super-worker-compaction-failure.js +2 -1
  67. package/dist/src/runtime/context/super-worker-compaction-sidecar.d.ts +2 -1
  68. package/dist/src/runtime/context/super-worker-compaction-sidecar.js +9 -3
  69. package/dist/src/runtime/default-environment-adapters.d.ts +2 -1
  70. package/dist/src/runtime/default-environment-adapters.js +5 -1
  71. package/dist/src/runtime/knowledge-skills/available-skills-projection.d.ts +17 -0
  72. package/dist/src/runtime/knowledge-skills/available-skills-projection.js +66 -0
  73. package/dist/src/runtime/knowledge-skills/available-skills.d.ts +7 -0
  74. package/dist/src/runtime/knowledge-skills/available-skills.js +17 -0
  75. package/dist/src/runtime/knowledge-skills/builtins/abot-studio.d.ts +2 -0
  76. package/dist/src/runtime/knowledge-skills/builtins/abot-studio.js +27 -0
  77. package/dist/src/runtime/knowledge-skills/builtins/computer-use.d.ts +2 -0
  78. package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +34 -0
  79. package/dist/src/runtime/knowledge-skills/builtins/skill-creator.d.ts +2 -0
  80. package/dist/src/runtime/knowledge-skills/builtins/skill-creator.js +29 -0
  81. package/dist/src/runtime/knowledge-skills/builtins/technical-work.d.ts +2 -0
  82. package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +27 -0
  83. package/dist/src/runtime/knowledge-skills/catalog.d.ts +2 -0
  84. package/dist/src/runtime/knowledge-skills/catalog.js +12 -0
  85. package/dist/src/runtime/knowledge-skills/personal-contracts.d.ts +48 -0
  86. package/dist/src/runtime/knowledge-skills/personal-contracts.js +29 -0
  87. package/dist/src/runtime/knowledge-skills/personal-documents.d.ts +6 -0
  88. package/dist/src/runtime/knowledge-skills/personal-documents.js +56 -0
  89. package/dist/src/runtime/knowledge-skills/personal-management.d.ts +9 -0
  90. package/dist/src/runtime/knowledge-skills/personal-management.js +64 -0
  91. package/dist/src/runtime/knowledge-skills/personal-repository.d.ts +6 -0
  92. package/dist/src/runtime/knowledge-skills/personal-repository.js +76 -0
  93. package/dist/src/runtime/knowledge-skills/personal-store.d.ts +4 -0
  94. package/dist/src/runtime/knowledge-skills/personal-store.js +33 -0
  95. package/dist/src/runtime/knowledge-skills/read-evidence.d.ts +3 -0
  96. package/dist/src/runtime/knowledge-skills/read-evidence.js +13 -0
  97. package/dist/src/runtime/knowledge-skills/store.d.ts +19 -0
  98. package/dist/src/runtime/knowledge-skills/store.js +41 -0
  99. package/dist/src/runtime/local-application.d.ts +2 -1
  100. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -0
  101. package/dist/src/runtime/local-host/app-service-dispatch.js +5 -0
  102. package/dist/src/runtime/local-host/client-services.d.ts +3 -1
  103. package/dist/src/runtime/local-host/client-services.js +3 -2
  104. package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +7 -1
  105. package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
  106. package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.d.ts +5 -0
  107. package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.js +28 -0
  108. package/dist/src/runtime/long-term-memory/initial-context.d.ts +18 -0
  109. package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
  110. package/dist/src/runtime/long-term-memory/projection.js +1 -1
  111. package/dist/src/runtime/model/context-compaction-admission.d.ts +1 -0
  112. package/dist/src/runtime/model/context-compaction-admission.js +35 -1
  113. package/dist/src/runtime/model/context-compaction-contracts.d.ts +9 -1
  114. package/dist/src/runtime/model/invoke-step.js +6 -2
  115. package/dist/src/runtime/model/provider-failure.d.ts +13 -0
  116. package/dist/src/runtime/model/provider-failure.js +37 -0
  117. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  118. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +4 -1
  119. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
  120. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +7 -3
  121. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
  122. package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.d.ts +4 -0
  123. package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.js +48 -0
  124. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
  125. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +8 -4
  126. package/dist/src/runtime/orchestration/role-calls/contracts.js +3 -3
  127. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
  128. package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
  129. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
  130. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
  131. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
  132. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  133. package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
  134. package/dist/src/runtime/orchestration/role-calls/skill-read.d.ts +47 -0
  135. package/dist/src/runtime/orchestration/role-calls/skill-read.js +196 -0
  136. package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.d.ts +1 -1
  137. package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.js +4 -2
  138. package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.js +4 -1
  139. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +4 -2
  140. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +2 -2
  141. package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +10 -4
  142. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
  143. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
  144. package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.d.ts +2 -0
  145. package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.js +7 -2
  146. package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.d.ts +19 -0
  147. package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.js +43 -0
  148. package/dist/src/runtime/plugins/loader.js +7 -6
  149. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  150. package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
  151. package/dist/src/runtime/request/bound-runtime-handler.js +1 -0
  152. package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
  153. package/dist/src/runtime/request/contracts.d.ts +2 -0
  154. package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
  155. package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +2 -2
  156. package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
  157. package/dist/src/runtime/request/execution-scope-surfaces.js +7 -0
  158. package/dist/src/runtime/request/execution-scope.d.ts +6 -2
  159. package/dist/src/runtime/request/execution-scope.js +11 -0
  160. package/dist/src/runtime/request/payload-settled-evidence.d.ts +11 -0
  161. package/dist/src/runtime/request/payload-settled-evidence.js +29 -0
  162. package/dist/src/runtime/request/prepared-execution.js +2 -0
  163. package/dist/src/runtime/request/role-call-delegation-events.d.ts +19 -0
  164. package/dist/src/runtime/request/role-call-delegation-events.js +52 -0
  165. package/dist/src/runtime/request/role-call-return-events.d.ts +19 -0
  166. package/dist/src/runtime/request/role-call-return-events.js +63 -0
  167. package/dist/src/runtime/request/role-executor-composition.js +2 -2
  168. package/dist/src/runtime/request/root-capability-binding.d.ts +24 -0
  169. package/dist/src/runtime/request/root-capability-binding.js +57 -0
  170. package/dist/src/runtime/request/root-capability-catalog.d.ts +16 -0
  171. package/dist/src/runtime/request/root-capability-catalog.js +20 -0
  172. package/dist/src/runtime/request/root-contract.d.ts +13 -1
  173. package/dist/src/runtime/request/root-execution-kernel.js +36 -68
  174. package/dist/src/runtime/request/root-reference-action.d.ts +15 -0
  175. package/dist/src/runtime/request/root-reference-action.js +48 -0
  176. package/dist/src/runtime/request/root-skill-read.d.ts +13 -0
  177. package/dist/src/runtime/request/root-skill-read.js +102 -0
  178. package/dist/src/runtime/request/runner.js +19 -3
  179. package/dist/src/runtime/request/super-payload-context-failure.js +13 -4
  180. package/dist/src/runtime/request/supervisor-root-execution.js +54 -1
  181. package/dist/src/runtime/request/supervisor-skill-edit-target.d.ts +9 -0
  182. package/dist/src/runtime/request/supervisor-skill-edit-target.js +25 -0
  183. package/dist/src/runtime/request/supervisor-skill-payload-context.d.ts +21 -0
  184. package/dist/src/runtime/request/supervisor-skill-payload-context.js +91 -0
  185. package/dist/src/runtime/request/supervisor-skill-write-preparation.d.ts +25 -0
  186. package/dist/src/runtime/request/supervisor-skill-write-preparation.js +71 -0
  187. package/dist/src/runtime/request/worker-capability-composition.d.ts +4 -1
  188. package/dist/src/runtime/request/worker-capability-composition.js +4 -1
  189. package/dist/src/runtime/request/worker-capability-payload.d.ts +1 -1
  190. package/dist/src/runtime/request/worker-capability-payload.js +44 -37
  191. package/dist/src/runtime/runtime-environment.d.ts +2 -0
  192. package/dist/src/runtime/runtime-environment.js +12 -1
  193. package/dist/src/runtime/scheduler/contracts.d.ts +4 -0
  194. package/dist/src/runtime/scheduler/run-list-filter.d.ts +11 -0
  195. package/dist/src/runtime/scheduler/run-list-filter.js +56 -0
  196. package/dist/src/runtime/scheduler/run-list-query.d.ts +2 -2
  197. package/dist/src/runtime/scheduler/run-list-query.js +4 -1
  198. package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +2 -0
  199. package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +2 -2
  200. package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +2 -34
  201. package/dist/src/runtime/steps/auditor-decision/input.js +21 -3
  202. package/dist/src/runtime/steps/auditor-decision/projection.js +5 -0
  203. package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
  204. package/dist/src/runtime/steps/auditor-decision/prompt.js +14 -3
  205. package/dist/src/runtime/steps/capability-execution-guidance.d.ts +7 -0
  206. package/dist/src/runtime/steps/capability-execution-guidance.js +28 -0
  207. package/dist/src/runtime/steps/capability-execution-instructions.d.ts +0 -2
  208. package/dist/src/runtime/steps/capability-execution-instructions.js +0 -2
  209. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +5 -2
  210. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +22 -3
  211. package/dist/src/runtime/steps/execution-agent/compaction.d.ts +3 -2
  212. package/dist/src/runtime/steps/execution-agent/compaction.js +9 -1
  213. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
  214. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
  215. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
  216. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
  217. package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
  218. package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
  219. package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
  220. package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
  221. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
  222. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
  223. package/dist/src/runtime/steps/execution-agent/format.js +2 -0
  224. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
  225. package/dist/src/runtime/steps/execution-agent/input.js +35 -2
  226. package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
  227. package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
  228. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  229. package/dist/src/runtime/steps/execution-agent/prompt.js +42 -41
  230. package/dist/src/runtime/steps/execution-agent/refinement-input.d.ts +1 -0
  231. package/dist/src/runtime/steps/execution-agent/refinement-prompt.js +4 -1
  232. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  233. package/dist/src/runtime/steps/execution-agent/response-run.js +6 -12
  234. package/dist/src/runtime/steps/execution-agent/run.js +5 -2
  235. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
  236. package/dist/src/runtime/steps/execution-agent/state-context.js +3 -40
  237. package/dist/src/runtime/steps/knowledge-skill-instructions.d.ts +3 -0
  238. package/dist/src/runtime/steps/knowledge-skill-instructions.js +3 -0
  239. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +4 -2
  240. package/dist/src/runtime/steps/planner-decision/capability-brief.js +5 -1
  241. package/dist/src/runtime/steps/planner-decision/input.d.ts +2 -2
  242. package/dist/src/runtime/steps/planner-decision/input.js +7 -1
  243. package/dist/src/runtime/steps/planner-decision/prompt.js +29 -49
  244. package/dist/src/runtime/steps/planner-graph/input.d.ts +2 -2
  245. package/dist/src/runtime/steps/planner-graph/input.js +9 -8
  246. package/dist/src/runtime/steps/planner-graph/prompt.js +2 -2
  247. package/dist/src/runtime/steps/planner-graph/run.d.ts +2 -2
  248. package/dist/src/runtime/steps/planner-graph/run.js +5 -5
  249. package/dist/src/runtime/steps/planner-graph/skill-guidance.d.ts +5 -0
  250. package/dist/src/runtime/steps/planner-graph/skill-guidance.js +62 -0
  251. package/dist/src/runtime/steps/reviewer-decision/final-evidence.d.ts +1 -0
  252. package/dist/src/runtime/steps/reviewer-decision/final-evidence.js +3 -1
  253. package/dist/src/runtime/steps/reviewer-decision/input.d.ts +3 -1
  254. package/dist/src/runtime/steps/reviewer-decision/input.js +2 -22
  255. package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +21 -0
  256. package/dist/src/runtime/steps/reviewer-decision/model-context.js +32 -1
  257. package/dist/src/runtime/steps/reviewer-decision/projection.js +4 -0
  258. package/dist/src/runtime/steps/reviewer-decision/prompt.d.ts +1 -1
  259. package/dist/src/runtime/steps/reviewer-decision/prompt.js +15 -4
  260. package/dist/src/runtime/steps/reviewer-decision/run.d.ts +2 -0
  261. package/dist/src/runtime/steps/reviewer-decision/run.js +6 -0
  262. package/dist/src/runtime/steps/skill-read-decision.d.ts +34 -0
  263. package/dist/src/runtime/steps/skill-read-decision.js +91 -0
  264. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +22 -0
  265. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +132 -0
  266. package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +2 -0
  267. package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +9 -2
  268. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +12 -3
  269. package/dist/src/runtime/steps/supervisor-decision/contracts.js +3 -0
  270. package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +37 -0
  271. package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +124 -0
  272. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +5 -1
  273. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +4 -0
  274. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +1 -0
  275. package/dist/src/runtime/steps/supervisor-decision/format.js +2 -0
  276. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +8 -1
  277. package/dist/src/runtime/steps/supervisor-decision/input.js +35 -11
  278. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +1 -0
  279. package/dist/src/runtime/steps/supervisor-decision/parser.js +11 -0
  280. package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +26 -0
  281. package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +39 -0
  282. package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +17 -0
  283. package/dist/src/runtime/steps/supervisor-decision/preparation.js +65 -0
  284. package/dist/src/runtime/steps/supervisor-decision/presentation.d.ts +13 -0
  285. package/dist/src/runtime/steps/supervisor-decision/presentation.js +47 -0
  286. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +5 -0
  287. package/dist/src/runtime/steps/supervisor-decision/prompt.js +97 -106
  288. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +2 -0
  289. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -0
  290. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +3 -0
  291. package/dist/src/runtime/steps/supervisor-decision/resume.js +20 -0
  292. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +7 -0
  293. package/dist/src/runtime/steps/supervisor-decision/run.js +76 -158
  294. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +21 -0
  295. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +29 -0
  296. package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +16 -0
  297. package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +44 -0
  298. package/dist/src/runtime/steps/supervisor-response/input.d.ts +3 -0
  299. package/dist/src/runtime/steps/supervisor-response/input.js +5 -0
  300. package/dist/src/runtime/steps/supervisor-response/prompt.js +2 -0
  301. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +3 -0
  302. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +24 -4
  303. package/dist/src/runtime/steps/supervisor-response/run.d.ts +7 -0
  304. package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
  305. package/dist/src/runtime/steps/supervisor-skill-authoring/contract.d.ts +43 -0
  306. package/dist/src/runtime/steps/supervisor-skill-authoring/contract.js +85 -0
  307. package/dist/src/runtime/steps/supervisor-skill-authoring/input.d.ts +35 -0
  308. package/dist/src/runtime/steps/supervisor-skill-authoring/input.js +87 -0
  309. package/dist/src/runtime/steps/supervisor-skill-authoring/run.d.ts +10 -0
  310. package/dist/src/runtime/steps/supervisor-skill-authoring/run.js +35 -0
  311. package/dist/src/runtime/steps/supervisor-skill-instructions.d.ts +4 -0
  312. package/dist/src/runtime/steps/supervisor-skill-instructions.js +4 -0
  313. package/dist/src/runtime/steps/worker-capability-scope-decision.js +14 -1
  314. package/dist/src/runtime/steps/worker-decision/contracts.d.ts +1 -0
  315. package/dist/src/runtime/steps/worker-decision/input/execution-guidance.d.ts +5 -0
  316. package/dist/src/runtime/steps/worker-decision/input/execution-guidance.js +31 -0
  317. package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +2 -25
  318. package/dist/src/runtime/steps/worker-decision/input/reference-context.js +4 -0
  319. package/dist/src/runtime/steps/worker-decision/prompt.js +6 -2
  320. package/dist/src/runtime/steps/worker-decision/result-author.js +6 -0
  321. package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
  322. package/dist/src/web-ui/app/app-bootstrap.js +3 -0
  323. package/dist/src/web-ui/app/app.js +7 -1
  324. package/dist/src/web-ui/app/components/automations/run-history-controls.js +77 -0
  325. package/dist/src/web-ui/app/components/automations/run-history.js +55 -0
  326. package/dist/src/web-ui/app/components/automations/run.js +3 -8
  327. package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
  328. package/dist/src/web-ui/app/components/automations/workspace.js +11 -2
  329. package/dist/src/web-ui/app/components/conversation-role-cards.js +27 -0
  330. package/dist/src/web-ui/app/components/conversation-role-delegations.d.ts +12 -0
  331. package/dist/src/web-ui/app/components/conversation-role-delegations.js +24 -0
  332. package/dist/src/web-ui/app/components/conversation-role-history.d.ts +13 -0
  333. package/dist/src/web-ui/app/components/conversation-role-history.js +81 -0
  334. package/dist/src/web-ui/app/components/conversation-role-returns.d.ts +12 -0
  335. package/dist/src/web-ui/app/components/conversation-role-returns.js +23 -0
  336. package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
  337. package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
  338. package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
  339. package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
  340. package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
  341. package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
  342. package/dist/src/web-ui/app/components/onboarding-workspace-access.js +1 -1
  343. package/dist/src/web-ui/app/components/operations-summary.js +2 -1
  344. package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
  345. package/dist/src/web-ui/app/components/passive-learning/home.js +4 -1
  346. package/dist/src/web-ui/app/components/schedules/details.js +3 -2
  347. package/dist/src/web-ui/app/components/skills/workspace.js +119 -0
  348. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
  349. package/dist/src/web-ui/app/components/spark-chat/settings.js +1 -1
  350. package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
  351. package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
  352. package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
  353. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +1 -1
  354. package/dist/src/web-ui/app/components/system-host/rendering.js +3 -3
  355. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
  356. package/dist/src/web-ui/app/components/workspace-shell.js +11 -1
  357. package/dist/src/web-ui/app/computer-access-feature.js +13 -1
  358. package/dist/src/web-ui/app/configuration-feature.js +2 -0
  359. package/dist/src/web-ui/app/controllers/automation-read-projection.js +8 -4
  360. package/dist/src/web-ui/app/controllers/automation-run-actions.js +3 -1
  361. package/dist/src/web-ui/app/controllers/automation-run-history.js +159 -0
  362. package/dist/src/web-ui/app/controllers/automations-controller.js +27 -11
  363. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +6 -2
  364. package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
  365. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +22 -1
  366. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +1 -1
  367. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +7 -1
  368. package/dist/src/web-ui/app/controllers/skills-controller.js +237 -0
  369. package/dist/src/web-ui/app/dashboard-feature.js +9 -0
  370. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +5 -0
  371. package/dist/src/web-ui/app/lib/conversation-role-model.js +63 -5
  372. package/dist/src/web-ui/app/lib/event-presentation.js +34 -0
  373. package/dist/src/web-ui/app/lib/reasoning-controls.js +6 -1
  374. package/dist/src/web-ui/app/lib/role-delegation-event.d.ts +18 -0
  375. package/dist/src/web-ui/app/lib/role-delegation-event.js +47 -0
  376. package/dist/src/web-ui/app/lib/role-return-event.d.ts +19 -0
  377. package/dist/src/web-ui/app/lib/role-return-event.js +36 -0
  378. package/dist/src/web-ui/app/lib/tool-activity-event.js +8 -6
  379. package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +50 -0
  380. package/dist/src/web-ui/app/lib/workspace-route.js +1 -0
  381. package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
  382. package/dist/src/web-ui/app/services/runtime-web-client/automations.d.ts +9 -1
  383. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  384. package/dist/src/web-ui/app/services/runtime-web-client/skills.js +23 -0
  385. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  386. package/dist/src/web-ui/app/skills-feature.js +36 -0
  387. package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +58 -0
  388. package/dist/src/web-ui/app/styles/40-skills.css +34 -0
  389. package/dist/src/web-ui/app/styles/50-automations.css +24 -3
  390. package/dist/src/web-ui/app/styles/95-home-widgets.css +110 -0
  391. package/dist/src/web-ui/app/styles.css +2 -0
  392. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  393. package/dist/src/web-ui/app/ui-behavior.js +1 -0
  394. package/dist/src/web-ui/client-state/store.js +3 -2
  395. package/dist/src/web-ui/client-state/transaction-order.d.ts +2 -0
  396. package/dist/src/web-ui/client-state/transaction-order.js +18 -0
  397. package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
  398. package/dist/src/web-ui/local-runtime/api-router.js +7 -0
  399. package/dist/src/web-ui/local-runtime/automation-routes.js +2 -1
  400. package/dist/src/web-ui/local-runtime/automation-run-page.d.ts +5 -0
  401. package/dist/src/web-ui/local-runtime/automation-run-page.js +26 -0
  402. package/dist/src/web-ui/local-runtime/skill-management-routes.d.ts +18 -0
  403. package/dist/src/web-ui/local-runtime/skill-management-routes.js +118 -0
  404. package/docs/configuration.md +8 -0
  405. package/docs/plugins.md +37 -32
  406. package/docs/runtime-public-contracts.md +37 -0
  407. package/examples/request-runner.config.example.json +3 -0
  408. package/package.json +1 -1
  409. package/plugins/capability-brief/plugin.json +1 -1
  410. package/plugins/code-outline/plugin.json +1 -1
  411. package/plugins/document-reader/plugin.json +1 -1
  412. package/plugins/exec/plugin.json +1 -1
  413. package/plugins/filesystem/plugin.json +1 -1
  414. package/plugins/json-inspector/plugin.json +1 -1
  415. package/plugins/local-search/plugin.json +1 -1
  416. package/plugins/memory/plugin.json +1 -1
  417. package/plugins/project-orientation/plugin.json +1 -1
  418. package/plugins/system/plugin.json +1 -1
  419. package/plugins/system-probe/plugin.json +1 -1
  420. package/plugins/web/plugin.json +1 -1
  421. package/plugins/web/skills/web_fetch_skill/SKILL.md +1 -2
  422. package/plugins/web/skills/web_search_skill/SKILL.md +3 -7
  423. package/src/runtime/README.md +96 -1
@@ -332,3 +332,61 @@
332
332
  overflow-y: auto;
333
333
  scrollbar-gutter: stable;
334
334
  }
335
+
336
+ .conversation-role-history {
337
+ display: grid;
338
+ gap: 8px;
339
+ margin: 0;
340
+ padding: 0;
341
+ list-style: none;
342
+ }
343
+
344
+ .conversation-role-history + .conversation-role-summary {
345
+ margin-block-start: 8px;
346
+ }
347
+
348
+ .conversation-role-history-toggle {
349
+ display: grid;
350
+ grid-template-columns: minmax(0, 1fr) auto;
351
+ gap: 3px 8px;
352
+ cursor: pointer;
353
+ list-style: none;
354
+ border-radius: 4px;
355
+ }
356
+
357
+ .conversation-role-history-toggle::-webkit-details-marker {
358
+ display: none;
359
+ }
360
+
361
+ .conversation-role-history-toggle:focus-visible {
362
+ outline: 2px solid var(--role-accent);
363
+ outline-offset: 3px;
364
+ }
365
+
366
+ .conversation-role-history-label,
367
+ .conversation-role-history-chevron {
368
+ color: var(--role-accent);
369
+ font-size: var(--font-size-xs);
370
+ line-height: 1.5;
371
+ }
372
+
373
+ .conversation-role-history-text {
374
+ grid-column: 1 / -1;
375
+ display: -webkit-box;
376
+ -webkit-box-orient: vertical;
377
+ -webkit-line-clamp: 2;
378
+ overflow: hidden;
379
+ white-space: pre-wrap;
380
+ overflow-wrap: anywhere;
381
+ font-size: var(--font-size-md);
382
+ line-height: 1.6;
383
+ }
384
+
385
+ .conversation-role-history-item[open] .conversation-role-history-text {
386
+ display: block;
387
+ -webkit-line-clamp: unset;
388
+ }
389
+
390
+ .conversation-role-history-item[open] .conversation-role-history-chevron {
391
+ transform: rotate(180deg);
392
+ }
@@ -0,0 +1,34 @@
1
+ .skills-workspace-panel {
2
+ --config-surface: var(--panel);
3
+ --config-control: var(--panel-raised);
4
+ --config-control-hover: var(--accent-soft);
5
+ --config-line: var(--line);
6
+ --config-line-strong: var(--line-strong);
7
+ --config-copy: var(--text);
8
+ --config-muted: var(--muted);
9
+ --config-faint: var(--muted-2);
10
+ }
11
+ /* Buttons reuse config-dashboard, config-category-tab and config-model-button. */
12
+ .skills-workspace-content { display: block; width: min(var(--workspace-content-width), 100%); min-width: 0; border: 0; border-radius: 0; overflow: visible; background: transparent; }
13
+ .skills-toolbar, .skills-toolbar-actions, .skills-filters, .skills-editor-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
14
+ .skills-toolbar { justify-content: space-between; }
15
+ .skills-intro, .skills-description, .skills-empty, .skills-id, .skills-archived-note { color: var(--muted); font-size: var(--font-size-sm); }
16
+ .skills-intro { margin: 14px 0 22px; }
17
+ .skills-layout { display: grid; grid-template-columns: minmax(190px, 30%) minmax(0, 1fr); gap: 24px; }
18
+ .skills-list { display: flex; flex-direction: column; align-items: stretch; gap: 8px; min-width: 0; }
19
+ .skills-list-item { display: flex; flex-direction: column; gap: 7px; text-align: start; overflow-wrap: anywhere; }
20
+ .skills-list-item strong, .skills-list-item span { width: 100%; }
21
+ .skills-list-item span { white-space: normal; overflow: visible; color: var(--muted); font-size: var(--font-size-sm); }
22
+ .skills-detail { min-width: 0; border: 1px solid var(--line); border-radius: 12px; padding: 20px; background: var(--panel); }
23
+ .skills-detail h3 { margin: 0 0 8px; overflow-wrap: anywhere; }
24
+ .skills-description { overflow-wrap: anywhere; white-space: pre-wrap; }
25
+ .skills-id { overflow-wrap: anywhere; }
26
+ .skills-content-label { display: flex; flex-direction: column; gap: 8px; margin-top: 20px; font-size: var(--font-size-sm); }
27
+ .skills-content-label textarea { box-sizing: border-box; width: 100%; min-height: 300px; resize: vertical; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--control-bg); color: var(--text); font: inherit; line-height: 1.6; }
28
+ .skills-editor-actions { margin-top: 14px; }
29
+ .skills-feedback { padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; overflow-wrap: anywhere; }
30
+ .skills-feedback[role="alert"] { color: var(--danger, var(--text)); }
31
+ @media (max-width: 760px) { .skills-layout { grid-template-columns: 1fr; } .skills-detail { padding: 14px; } .skills-content-label textarea { min-height: 250px; } }
32
+ .skills-creation-label { display: flex; flex-direction: column; gap: 8px; margin-top: 14px; font-size: var(--font-size-sm); }
33
+ .skills-creation-label :is(input, textarea) { box-sizing: border-box; padding: 8px 10px; font: inherit; }
34
+ .skills-creation-label textarea { min-height: 76px; resize: vertical; line-height: 1.5; }
@@ -268,9 +268,30 @@
268
268
  .automation-text-button { border: 0; border-radius: 6px; background: transparent; padding: 6px 10px; color: var(--accent); font-size: var(--font-size-sm); }
269
269
  .automation-text-button:hover, .automation-text-button:focus-visible { background: var(--control-bg); color: var(--accent-strong); }
270
270
  .automation-heading .automation-text-button { margin-inline-start: -10px; }
271
- .automation-run-choices { display: flex; flex-wrap: wrap; gap: 6px; }
272
- .automation-run-choices button { min-height: 30px; font-size: var(--font-size-xs); }
273
- .automation-run-choices button[aria-current="true"] { border-color: var(--accent); color: var(--accent); }
271
+ .automation-run-history { display: grid; gap: 10px; min-width: 0; }
272
+ .automation-run-history h4 { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin: 0; color: var(--text-strong); font-size: var(--font-size-sm); font-weight: 600; }
273
+ .automation-run-history h4 span { color: var(--muted); font-size: var(--font-size-xs); font-weight: 400; }
274
+ .automation-run-filters { display: flex; flex-wrap: wrap; align-items: end; gap: 10px; }
275
+ .automation-run-filters label { display: grid; gap: 5px; min-width: 0; flex: 1 1 150px; color: var(--muted); font-size: var(--font-size-xs); }
276
+ .automation-run-filters :is(select, input) { box-sizing: border-box; width: 100%; min-width: 0; min-height: 36px; padding: 6px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--control-bg); color: var(--text); font: inherit; }
277
+ .automation-run-filters select { text-transform: capitalize; }
278
+ .automation-run-filters button, .automation-run-history-footer button { min-height: 36px; font-size: var(--font-size-xs); }
279
+ .automation-run-filters small { flex-basis: 100%; color: var(--muted); font-size: var(--font-size-xs); }
280
+ .automation-run-history-footer { display: flex; justify-content: space-between; align-items: center; gap: 10px; min-height: 20px; color: var(--muted); font-size: var(--font-size-xs); }
281
+ .automation-run-history-error { margin: 0; color: var(--danger); font-size: var(--font-size-sm); }
282
+ .automation-run-choices > .automation-muted { margin: 16px; }
283
+ .automation-run-choices { max-height: 264px; overflow-y: auto; overscroll-behavior-y: contain; scrollbar-gutter: stable; border: 1px solid var(--line); border-radius: 8px; background: var(--panel); }
284
+ .automation-run-choices button { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: 8px 16px; width: 100%; min-height: 44px; padding: 10px 12px; border: 0; border-bottom: 1px solid var(--line); border-inline-start: 3px solid transparent; border-radius: 0; background: transparent; color: var(--text); text-align: start; font-size: var(--font-size-xs); }
285
+ .automation-run-choices button:last-child { border-bottom: 0; }
286
+ .automation-run-choices button:hover { background: var(--panel-soft); }
287
+ .automation-run-choices button[aria-current="true"] { border-inline-start-color: var(--accent); background: var(--accent-soft); color: var(--accent-strong); }
288
+ .automation-run-choices button:focus-visible { outline: 2px solid var(--accent); outline-offset: -3px; }
289
+ .automation-run-time { font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
290
+ .automation-run-status { justify-self: end; display: inline-flex; align-items: center; gap: 7px; max-width: 100%; color: var(--muted); text-transform: capitalize; overflow-wrap: anywhere; }
291
+ .automation-run-status::before { content: ""; flex: none; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
292
+ .automation-run-status[data-status="succeeded"] { color: var(--green); }
293
+ .automation-run-status:is([data-status="failed"], [data-status="rejected"]) { color: var(--danger); }
294
+ .automation-run-status:is([data-status="pending"], [data-status="running"], [data-status="stopping"], [data-status="completed_with_skips"]) { color: var(--amber); }
274
295
  .automation-permission-modal { width: min(560px, calc(100vw - 24px)); max-height: min(80vh, 760px); overflow: auto; padding: 20px; color: var(--text); background: var(--panel); border: 1px solid var(--line-strong); border-radius: 9px; box-shadow: var(--shadow); }
275
296
  .automation-permission-modal::backdrop { background: rgba(2, 9, 15, .68); }
276
297
  .automation-permission-dialog { display: grid; gap: 13px; }
@@ -0,0 +1,110 @@
1
+ /* Home-only small-screen summaries. Full live components retain their owners. */
2
+ .home-widget-grid[hidden] { display: none; }
3
+
4
+ .home-widget-dialog {
5
+ width: min(720px, calc(100vw - 32px));
6
+ max-height: calc(100dvh - 40px);
7
+ padding: 0;
8
+ border: 1px solid var(--line-strong);
9
+ border-radius: 12px;
10
+ background: var(--panel);
11
+ color: var(--text);
12
+ }
13
+ .home-widget-dialog[open] { display: flex; flex-direction: column; }
14
+ .home-widget-dialog::backdrop { background: color-mix(in srgb, var(--bg) 78%, transparent); }
15
+ .home-widget-dialog-header {
16
+ display: flex; align-items: center; justify-content: space-between;
17
+ gap: 16px; padding: 14px 20px; border-bottom: 1px solid var(--line); flex: none;
18
+ }
19
+ .home-widget-dialog-header h2 { margin: 0; font-size: var(--font-size-2xl); font-weight: 500; }
20
+ .home-widget-dialog-body { overflow: auto; min-height: 0; padding: 20px; overscroll-behavior: contain; }
21
+ .home-widget-dialog-body > .home-widget-source { width: 100%; margin: 0; }
22
+ .home-widget-dialog .home-panel-rows,
23
+ .home-widget-dialog .system-host-permission-details .system-host-permissions {
24
+ max-height: none; overflow: visible;
25
+ }
26
+ .home-widget-dialog .home-panel { border: 0; border-radius: 0; }
27
+ .home-widget-dialog .home-approval { max-height: none; }
28
+ .home-widget-dialog .home-automation-status { display: block; }
29
+ .home-widget-dialog .home-automation-runs { margin-top: 12px; flex-wrap: wrap; }
30
+
31
+ @media (max-width: 1440px) {
32
+ .home-widgets-compact .home-widget-source:not(.home-widget-expanded) { display: none !important; }
33
+ .home-widgets-compact .home-overview { display: contents; }
34
+ .home-widgets-compact .home-approval-dock { display: none; }
35
+ .home-widgets-compact .home-workspace-body { padding-block: 16px; }
36
+ .home-widgets-compact .home-widget-grid {
37
+ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-auto-rows: 1fr; gap: 12px; order: 1;
38
+ }
39
+ .home-widgets-compact .home-widget-grid[hidden] { display: none; }
40
+ .home-widget {
41
+ display: flex; flex-direction: column; align-items: stretch; gap: 12px;
42
+ min-width: 0; min-height: 160px; width: 100%; padding: 15px 16px;
43
+ text-align: start; background: var(--panel); color: var(--text);
44
+ border: 1px solid var(--line); border-radius: 10px; box-shadow: none;
45
+ }
46
+ .home-widget:hover { border-color: var(--line-strong); background: var(--panel-soft); }
47
+ .home-widget-heading {
48
+ display: flex; align-items: center; gap: 9px; padding-bottom: 11px;
49
+ border-bottom: 1px solid var(--line); color: var(--text-strong);
50
+ font-size: var(--font-size-lg); font-weight: 500; line-height: 1.4;
51
+ }
52
+ .home-widget-heading-icon {
53
+ display: flex; align-items: center; justify-content: center; flex: none;
54
+ width: 27px; height: 27px; border-radius: 6px; background: var(--control-fill); color: var(--muted);
55
+ }
56
+ .home-widget-heading-icon > svg, .home-widget-heading-icon > img { width: 17px; height: 17px; }
57
+ .home-widget svg { fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
58
+ .home-widget [data-widget-label] { flex: 1; min-width: 0; }
59
+ .home-widget-arrow { margin-inline-start: auto; color: var(--muted-2); flex: none; }
60
+ .home-widget-badge { flex: none; }
61
+ .home-widget-badge .home-widget-symbol { font-size: var(--font-size-xs); }
62
+ .home-widget-preview { display: flex; flex-direction: column; justify-content: center; gap: 10px; min-width: 0; min-height: 74px; }
63
+ .home-widget-row { display: flex; align-items: flex-start; gap: 10px; min-height: 31px; min-width: 0; }
64
+ .home-widget-row > .home-widget-symbol { min-height: calc(var(--font-size-md) * 1.4); }
65
+ .home-widget-copy { display: flex; flex: 1; flex-direction: column; gap: 3px; min-width: 0; }
66
+ .home-widget-item-title { display: block; font-size: var(--font-size-md); font-weight: 400; line-height: 1.4; }
67
+ .home-widget-row .home-widget-item-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
68
+ .home-widget-meta { font-size: var(--font-size-xs); color: var(--muted-2); line-height: 1.4; overflow-wrap: anywhere; }
69
+ .home-widget-meta:empty { display: none; }
70
+ .home-widget-row .home-widget-meta { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
71
+ .home-widget-automation .home-widget-item-title, .home-widget-fallback .home-widget-title, .home-widget-fallback .home-widget-detail { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
72
+ .home-widget-symbol { display: inline-flex; align-items: center; justify-content: center; gap: 5px; flex: none; color: var(--muted); font-size: var(--font-size-sm); font-weight: 400; font-variant-numeric: tabular-nums; }
73
+ .home-widget-symbol svg { width: 16px; height: 16px; flex: none; }
74
+ .home-widget-symbol[data-tone="active"] { color: var(--accent); }
75
+ .home-widget-symbol[data-tone="success"] { color: var(--green); }
76
+ .home-widget-symbol[data-tone="attention"] { color: var(--amber); }
77
+ .home-widget-symbol[data-tone="failed"] { color: var(--danger); }
78
+ .home-widget-badge .home-widget-symbol[data-tone="attention"] { padding: 2px 6px; border-radius: 5px; background: color-mix(in srgb, var(--amber) 10%, var(--panel)); }
79
+ .home-widget-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: center; gap: 10px; min-height: 74px; }
80
+ .home-widget-metric { display: flex; flex-direction: column; align-items: center; gap: 9px; min-width: 0; color: var(--muted); font-size: var(--font-size-xs); }
81
+ .home-widget-metric .home-widget-symbol { min-height: 23px; font-size: var(--font-size-4xl); }
82
+ .home-widget-metric .home-widget-symbol svg { width: 20px; height: 20px; }
83
+ .home-widget-automation { display: flex; align-items: center; gap: 13px; min-height: 74px; }
84
+ .home-widget-automation > .home-widget-symbol { flex-direction: column; gap: 5px; min-width: 33px; font-size: var(--font-size-3xl); }
85
+ .home-widget-automation > .home-widget-symbol svg { width: 20px; height: 20px; }
86
+ .home-widget-computer { display: flex; flex-direction: column; justify-content: center; gap: 14px; min-height: 74px; }
87
+ .home-widget-device { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; min-width: 0; }
88
+ .home-widget-device .home-widget-item-title { overflow-wrap: anywhere; }
89
+ .home-widget-device .home-widget-meta { flex: none; }
90
+ .home-widget-checks { display: flex; flex-wrap: wrap; gap: 10px 16px; }
91
+ .home-widget-check { display: inline-flex; align-items: center; gap: 6px; font-size: var(--font-size-xs); color: var(--muted); }
92
+ .home-widget-fallback { display: flex; flex-direction: column; gap: 5px; }
93
+ .home-widget-title { font-size: var(--font-size-md); font-weight: 400; line-height: 1.4; }
94
+ .home-widget-detail { font-size: var(--font-size-xs); color: var(--muted); }
95
+ .home-widget-status { font-size: var(--font-size-xs); color: var(--muted-2); }
96
+ .home-widget-title, .home-widget-detail, .home-widget-status { overflow-wrap: anywhere; }
97
+ .home-widget[data-tone="success"] .home-widget-status { color: var(--green); }
98
+ .home-widget[data-tone="attention"] .home-widget-status { color: var(--amber); }
99
+ .home-widget[data-tone="failed"] .home-widget-status { color: var(--danger); }
100
+ .home-widget[data-tone="active"] .home-widget-status { color: var(--accent); }
101
+ }
102
+ @media (max-width: 1000px) {
103
+ .home-widgets-compact .home-widget-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
104
+ .home-widgets-compact .home-widget { padding: 14px; }
105
+ }
106
+ @media (max-width: 520px) {
107
+ .home-widgets-compact .home-widget-grid { grid-template-columns: minmax(0, 1fr); }
108
+ .home-widget-dialog-body { padding: 12px; }
109
+ .home-widget-dialog-header { padding: 12px; }
110
+ }
@@ -28,6 +28,7 @@
28
28
  @import url("./styles/35-memory-onboarding.css");
29
29
  @import url("./styles/36-memory-management.css");
30
30
  @import url("./styles/39-memory-workspace.css");
31
+ @import url("./styles/40-skills.css");
31
32
  @import url("./styles/39-passive-learning.css");
32
33
  @import url("./styles/37-config-operations.css");
33
34
  @import url("./styles/37-runtime-activation.css");
@@ -63,3 +64,4 @@
63
64
  @import url("./styles/54-spark-chat.css");
64
65
  @import url("./styles/94-automations-responsive.css");
65
66
  @import url("./styles/64-workspace-storage.css");
67
+ @import url("./styles/95-home-widgets.css");
@@ -28,7 +28,7 @@ export declare function wrappedIndex(
28
28
 
29
29
  export declare function normalizeWorkspaceDestination(
30
30
  value: unknown,
31
- ): "chat" | "config" | "models" | "plugins" | "schedules" | "learning" | "memory" | "home" | "notifications";
31
+ ): "chat" | "config" | "models" | "plugins" | "schedules" | "learning" | "memory" | "skills" | "home" | "notifications";
32
32
 
33
33
  export declare function createInitialWorkspaceShellState(): {
34
34
  workspace: "chat";
@@ -42,6 +42,7 @@ export function normalizeWorkspaceDestination(value) {
42
42
  if (destination === "automations") return "automations";
43
43
  if (destination === "learning") return "learning";
44
44
  if (destination === "memory") return "memory";
45
+ if (destination === "skills") return "skills";
45
46
  if (destination === "home") return "home";
46
47
  if (destination === "models") return "models";
47
48
  if (destination === "plugins") return "plugins";
@@ -7,6 +7,7 @@ import { replacePreparedSessionFile } from "../../sessions/prepared-session-repl
7
7
  import { isPersistedStore } from "../app/lib/session-composer-queue.js";
8
8
  import { ClientStateError, emptyClientState } from "./contracts.js";
9
9
  import { decodePreference } from "./preferences.js";
10
+ import { serializeClientStateTransaction } from "./transaction-order.js";
10
11
  const maxStateBytes = 8 * 1024 * 1024;
11
12
  function decodeState(raw) {
12
13
  const state = JSON.parse(raw);
@@ -74,7 +75,7 @@ export class WebClientStateStore {
74
75
  this.initialization = undefined;
75
76
  throw error;
76
77
  }
77
- return withFileLock(join(this.directory, "state.lock"), async () => {
78
+ return serializeClientStateTransaction(this.path, () => withFileLock(join(this.directory, "state.lock"), async () => {
78
79
  const state = await this.load();
79
80
  const before = JSON.stringify(state);
80
81
  const result = operation(state);
@@ -83,6 +84,6 @@ export class WebClientStateStore {
83
84
  await this.save(state);
84
85
  }
85
86
  return { result, state };
86
- });
87
+ }));
87
88
  }
88
89
  }
@@ -0,0 +1,2 @@
1
+ /** Order this process's callers before they contend for the cross-process file lock. */
2
+ export declare function serializeClientStateTransaction<T>(path: string, operation: () => Promise<T>): Promise<T>;
@@ -0,0 +1,18 @@
1
+ const pendingTransactions = new Map();
2
+ /** Order this process's callers before they contend for the cross-process file lock. */
3
+ export async function serializeClientStateTransaction(path, operation) {
4
+ const previous = pendingTransactions.get(path) ?? Promise.resolve();
5
+ // Report each failure to its own caller without blocking later transactions.
6
+ const pending = previous.catch(() => undefined).then(operation);
7
+ pendingTransactions.set(path, pending);
8
+ try {
9
+ return await pending;
10
+ }
11
+ finally {
12
+ if (isCurrentTransactionTail(path, pending))
13
+ pendingTransactions.delete(path);
14
+ }
15
+ }
16
+ function isCurrentTransactionTail(path, pending) {
17
+ return pendingTransactions.get(path) === pending;
18
+ }
@@ -13,6 +13,7 @@ export declare class LocalRuntimeApiRouter {
13
13
  private readonly modelSetup;
14
14
  private readonly setupEmbedding;
15
15
  private readonly plugins;
16
+ private readonly skillManagement;
16
17
  private readonly memoryManagement;
17
18
  private readonly memoryOnboarding;
18
19
  private readonly schedules;
@@ -1,3 +1,4 @@
1
+ import { PersonalSkillManagementRoutes } from "./skill-management-routes.js";
1
2
  import { ProjectRoutes } from "./project-routes.js";
2
3
  import { cancelWebRequest } from "./request-cancellation-route.js";
3
4
  import { ConversationFileRoutes } from "./conversation-file-routes.js";
@@ -45,6 +46,7 @@ export class LocalRuntimeApiRouter {
45
46
  modelSetup;
46
47
  setupEmbedding;
47
48
  plugins;
49
+ skillManagement;
48
50
  memoryManagement;
49
51
  memoryOnboarding;
50
52
  schedules;
@@ -104,6 +106,7 @@ export class LocalRuntimeApiRouter {
104
106
  providerAdapters: options.providerAdapters,
105
107
  configPath: options.configPath ?? process.env.LLM_RUNTIME_CONFIG_FILE,
106
108
  }));
109
+ this.skillManagement = new PersonalSkillManagementRoutes((id) => this.environments.get(id).services.personalSkills);
107
110
  this.memoryManagement = new LongTermMemoryManagementRoutes((environmentId) => this.environments.get(environmentId).services.longTermMemory);
108
111
  }
109
112
  async applyWhenRequestsIdle(expectedRevision) {
@@ -251,6 +254,10 @@ export class LocalRuntimeApiRouter {
251
254
  })) {
252
255
  return;
253
256
  }
257
+ if (await this.skillManagement.handle({
258
+ method, segments, body, environmentId, request: req, response: res,
259
+ }))
260
+ return;
254
261
  if (await this.memoryManagement.handle({
255
262
  method,
256
263
  route,
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { AutomationPublicationError } from "../../runtime/automations/publication.js";
3
3
  import { acceptConfigMutationRequest } from "./config-mutation-request.js";
4
4
  import { sendJson } from "./http.js";
5
+ import { readAutomationRunPage } from "./automation-run-page.js";
5
6
  function requiredRevision(value) {
6
7
  if (!Number.isSafeInteger(value) || Number(value) < 1)
7
8
  throw new Error("automation_revision_required");
@@ -182,7 +183,7 @@ export class AutomationRoutes {
182
183
  }
183
184
  if (action === "runs" && method === "GET") {
184
185
  sendJson(response, 200, { ok: true,
185
- runs: await service.listRuns(automationId, { limit: 100 }),
186
+ ...await readAutomationRunPage(service, automationId, request.url.searchParams),
186
187
  });
187
188
  return;
188
189
  }
@@ -0,0 +1,5 @@
1
+ import type { AutomationService } from "../../runtime/automations/service.js";
2
+ export declare function readAutomationRunPage(service: Pick<AutomationService, "listRuns">, automationId: string, params: URLSearchParams): Promise<{
3
+ runs: import("../../runtime/index.js").SchedulerAutomationRun[];
4
+ nextCursor: string | null;
5
+ }>;
@@ -0,0 +1,26 @@
1
+ import { parseSchedulerRunFilters } from "../../runtime/scheduler/run-list-filter.js";
2
+ export async function readAutomationRunPage(service, automationId, params) {
3
+ const limit = requireAutomationRunPageLimit(params.get("limit"));
4
+ const cursor = params.get("cursor") ?? undefined;
5
+ const filters = parseSchedulerRunFilters({
6
+ status: params.get("status") ?? undefined,
7
+ from: params.get("from") ?? undefined,
8
+ to: params.get("to") ?? undefined,
9
+ });
10
+ // Select metadata in the owner before loading or serializing run payloads.
11
+ const page = await service.listRuns(automationId, { ...filters, cursor, limit: limit + 1 });
12
+ const runs = page.slice(0, limit);
13
+ return { runs, nextCursor: page.length > limit ? runs.at(-1).id : null };
14
+ }
15
+ function requireAutomationRunPageLimit(value) {
16
+ if (value === null)
17
+ return 50;
18
+ const limit = Number(value);
19
+ if (!Number.isSafeInteger(limit))
20
+ throw new Error("scheduler_run_page_limit_invalid");
21
+ if (limit < 1)
22
+ throw new Error("scheduler_run_page_limit_invalid");
23
+ if (limit > 100)
24
+ throw new Error("scheduler_run_page_limit_invalid");
25
+ return limit;
26
+ }
@@ -0,0 +1,18 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import { type PersonalSkillManagementService } from "../../runtime/knowledge-skills/personal-contracts.js";
3
+ import type { JsonObject } from "./contracts.js";
4
+ type SkillManagementRequest = Readonly<{
5
+ method: string;
6
+ segments: readonly string[];
7
+ body: JsonObject | null;
8
+ environmentId: string;
9
+ request: IncomingMessage;
10
+ response: ServerResponse;
11
+ }>;
12
+ /** Personal records only; the runtime owner shares the model Store's lock. */
13
+ export declare class PersonalSkillManagementRoutes {
14
+ private readonly resolveService;
15
+ constructor(resolveService: (environmentId: string) => PersonalSkillManagementService | undefined);
16
+ handle(request: SkillManagementRequest): Promise<boolean>;
17
+ }
18
+ export {};
@@ -0,0 +1,118 @@
1
+ import { KnowledgeSkillError, PERSONAL_SKILL_LIMITS, } from "../../runtime/knowledge-skills/personal-contracts.js";
2
+ import { acceptConfigMutationRequest } from "./config-mutation-request.js";
3
+ import { sendJson } from "./http.js";
4
+ /** Personal records only; the runtime owner shares the model Store's lock. */
5
+ export class PersonalSkillManagementRoutes {
6
+ resolveService;
7
+ constructor(resolveService) {
8
+ this.resolveService = resolveService;
9
+ }
10
+ async handle(request) {
11
+ const { segments, method, response } = request;
12
+ if (segments[0] !== "runtime" || segments[1] !== "skills")
13
+ return false;
14
+ const isItem = segments.length === 3 && Boolean(segments[2]);
15
+ const isArchiveAction = segments.length === 4 && Boolean(segments[2]) &&
16
+ (segments[3] === "archive" || segments[3] === "restore");
17
+ if (segments.length !== 2 && !isItem && !isArchiveAction)
18
+ return false;
19
+ const allow = isArchiveAction ? "POST" : isItem ? "GET, PATCH" : "GET, POST";
20
+ if (!allow.split(", ").includes(method)) {
21
+ response.setHeader("allow", allow);
22
+ sendJson(response, 405, { ok: false, error: "method_not_allowed" });
23
+ return true;
24
+ }
25
+ if (method !== "GET" && !acceptConfigMutationRequest(request.request, response))
26
+ return true;
27
+ try {
28
+ const service = this.resolveService(request.environmentId);
29
+ if (!service)
30
+ throw new KnowledgeSkillError("knowledge_skill_management_unavailable");
31
+ if (segments.length === 2) {
32
+ if (method === "POST") {
33
+ const skill = await service.create(readCreation(request.body));
34
+ sendJson(response, 201, { ok: true, skill });
35
+ }
36
+ else {
37
+ sendJson(response, 200, { ok: true, items: await service.list() });
38
+ }
39
+ return true;
40
+ }
41
+ const skillId = segments[2];
42
+ let skill;
43
+ if (method === "GET") {
44
+ skill = await service.get(skillId);
45
+ if (!skill)
46
+ throw new KnowledgeSkillError("knowledge_skill_not_found");
47
+ }
48
+ else {
49
+ const expectedRevision = readMutation(request.body, method === "PATCH");
50
+ if (method === "PATCH") {
51
+ skill = await service.updateContent(skillId, expectedRevision, request.body.content);
52
+ }
53
+ else if (segments[3] === "archive") {
54
+ skill = await service.archive(skillId, expectedRevision);
55
+ }
56
+ else {
57
+ skill = await service.restore(skillId, expectedRevision);
58
+ }
59
+ }
60
+ sendJson(response, 200, { ok: true, skill });
61
+ }
62
+ catch (error) {
63
+ sendManagementError(response, error);
64
+ }
65
+ return true;
66
+ }
67
+ }
68
+ function readCreation(body) {
69
+ const allowed = ["name", "description", "content", "environment", "environmentId"];
70
+ if (!body || Object.keys(body).some((key) => !allowed.includes(key)) ||
71
+ typeof body.name !== "string" || typeof body.description !== "string" || typeof body.content !== "string") {
72
+ throw new KnowledgeSkillError("knowledge_skill_input_invalid");
73
+ }
74
+ return { name: body.name, description: body.description, content: body.content };
75
+ }
76
+ function readMutation(body, contentRequired) {
77
+ const allowed = ["expectedRevision", "environment", "environmentId", ...(contentRequired ? ["content"] : [])];
78
+ if (!body || Object.keys(body).some((key) => !allowed.includes(key)) ||
79
+ (contentRequired && typeof body.content !== "string")) {
80
+ throw new KnowledgeSkillError("knowledge_skill_input_invalid");
81
+ }
82
+ const revision = body.expectedRevision;
83
+ if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < 1 ||
84
+ revision > PERSONAL_SKILL_LIMITS.revision) {
85
+ throw new KnowledgeSkillError("knowledge_skill_revision_invalid");
86
+ }
87
+ return revision;
88
+ }
89
+ const ERROR_STATUSES = Object.freeze({
90
+ knowledge_skill_not_found: 404,
91
+ knowledge_skill_read_only: 403,
92
+ knowledge_skill_revision_conflict: 409,
93
+ knowledge_skill_revision_limit: 409,
94
+ knowledge_skill_archived: 409,
95
+ knowledge_skill_input_invalid: 400,
96
+ knowledge_skill_id_invalid: 400,
97
+ knowledge_skill_revision_invalid: 400,
98
+ knowledge_skill_content_invalid: 400,
99
+ knowledge_skill_content_too_large: 400,
100
+ knowledge_skill_name_invalid: 400,
101
+ knowledge_skill_description_invalid: 400,
102
+ knowledge_skill_storage_unavailable: 503,
103
+ knowledge_skill_storage_invalid: 503,
104
+ knowledge_skill_storage_too_large: 503,
105
+ knowledge_skill_management_unavailable: 503,
106
+ });
107
+ function sendManagementError(response, error) {
108
+ // RPC reconstructs Error with its code; do not rely on prototype identity.
109
+ const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
110
+ if (typeof code === "string" && Object.hasOwn(ERROR_STATUSES, code)) {
111
+ sendJson(response, ERROR_STATUSES[code], { ok: false, error: code });
112
+ return;
113
+ }
114
+ const unavailable = error instanceof Error && error.message === "local_runtime_service_unavailable";
115
+ sendJson(response, unavailable ? 503 : 500, {
116
+ ok: false, error: unavailable ? "knowledge_skill_management_unavailable" : "knowledge_skill_management_failed",
117
+ });
118
+ }
@@ -610,6 +610,14 @@ The common slots and their first tuning targets are:
610
610
  | Context compaction | `context.compact` | Structured format and preservation of facts that later steps still require; physical capacity remains profile-owned. |
611
611
  | Literal tool payloads | `toolPayload.raw` | Literal-payload instructions and any intentional provider-native output controls. Verify the produced payload or artifact directly, not the model's description of it. |
612
612
 
613
+ New OpenAI profiles created through CLI setup or Web onboarding set
614
+ `calibration["context.compact"].timeoutMs` to `300000` (five minutes). This
615
+ profile override takes precedence over the shared 180-second compaction
616
+ default; other steps retain their own timeouts. An explicit template timeout
617
+ is preserved, and existing profiles are not migrated automatically. To apply
618
+ the same setting to an existing GPT profile, add `"timeoutMs": 300000` to its
619
+ `calibration["context.compact"]` object. This does not change reasoning effort.
620
+
613
621
  `timeoutMs` addresses provider latency only; raising it does not improve model
614
622
  reasoning. Top-level `contextWindowTokens` declares the concrete model
615
623
  profile's physical capacity. Calibration context fields can tune projection