@wjarka/cezarion 0.16.0 → 0.17.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 (907) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +594 -207
  3. package/dist/agent-config/account-identity.d.ts +3 -19
  4. package/dist/agent-config/account-identity.js +8 -5
  5. package/dist/agent-config/account-identity.js.map +1 -1
  6. package/dist/agent-config/catalog.d.ts +3 -14
  7. package/dist/agent-config/catalog.js.map +1 -1
  8. package/dist/agent-config/files.d.ts +2 -6
  9. package/dist/agent-config/files.js +2 -6
  10. package/dist/agent-config/files.js.map +1 -1
  11. package/dist/agent-config/model-settings/types.d.ts +1 -1
  12. package/dist/agent-config/seed.d.ts +11 -3
  13. package/dist/agent-config/seed.js +52 -48
  14. package/dist/agent-config/seed.js.map +1 -1
  15. package/dist/agent-config/service.js +3 -2
  16. package/dist/agent-config/service.js.map +1 -1
  17. package/dist/agent-config/validate.d.ts +1 -4
  18. package/dist/agent-config/validate.js.map +1 -1
  19. package/dist/application-update/helper.d.ts +2 -2
  20. package/dist/application-update/helper.js +7 -12
  21. package/dist/application-update/helper.js.map +1 -1
  22. package/dist/application-update/launcher.d.ts +4 -0
  23. package/dist/application-update/launcher.js +18 -12
  24. package/dist/application-update/launcher.js.map +1 -1
  25. package/dist/application-update/service.d.ts +3 -3
  26. package/dist/application-update/service.js +1 -1
  27. package/dist/application-update/service.js.map +1 -1
  28. package/dist/archive-on-merge-setting.d.ts +15 -0
  29. package/dist/archive-on-merge-setting.js +14 -0
  30. package/dist/archive-on-merge-setting.js.map +1 -0
  31. package/dist/artifacts/cli.d.ts +8 -0
  32. package/dist/artifacts/cli.js +21 -2
  33. package/dist/artifacts/cli.js.map +1 -1
  34. package/dist/artifacts/resolve.js +2 -1
  35. package/dist/artifacts/resolve.js.map +1 -1
  36. package/dist/artifacts/store.js.map +1 -1
  37. package/dist/automations/automation-cli.d.ts +59 -0
  38. package/dist/automations/automation-cli.js +509 -0
  39. package/dist/automations/automation-cli.js.map +1 -0
  40. package/dist/automations/builtin-skill.d.ts +7 -0
  41. package/dist/automations/builtin-skill.js +14 -0
  42. package/dist/automations/builtin-skill.js.map +1 -0
  43. package/dist/automations/github-baseline.d.ts +3 -0
  44. package/dist/automations/github-baseline.js +17 -0
  45. package/dist/automations/github-baseline.js.map +1 -0
  46. package/dist/automations/github-poller.d.ts +23 -4
  47. package/dist/automations/github-poller.js +157 -88
  48. package/dist/automations/github-poller.js.map +1 -1
  49. package/dist/automations/prompts.d.ts +12 -0
  50. package/dist/automations/prompts.js +160 -0
  51. package/dist/automations/prompts.js.map +1 -0
  52. package/dist/automations/schedule-runner.d.ts +43 -24
  53. package/dist/automations/schedule-runner.js +207 -20
  54. package/dist/automations/schedule-runner.js.map +1 -1
  55. package/dist/automations/scheduler.d.ts +10 -2
  56. package/dist/automations/scheduler.js +200 -54
  57. package/dist/automations/scheduler.js.map +1 -1
  58. package/dist/automations/service.d.ts +777 -0
  59. package/dist/automations/service.js +444 -0
  60. package/dist/automations/service.js.map +1 -0
  61. package/dist/automations/store.d.ts +17 -7
  62. package/dist/automations/store.js +88 -17
  63. package/dist/automations/store.js.map +1 -1
  64. package/dist/automations/task-template.d.ts +7 -2
  65. package/dist/automations/task-template.js +93 -44
  66. package/dist/automations/task-template.js.map +1 -1
  67. package/dist/automations/tool-adapter.d.ts +6 -0
  68. package/dist/automations/tool-adapter.js +108 -0
  69. package/dist/automations/tool-adapter.js.map +1 -0
  70. package/dist/automations/types.d.ts +1 -405
  71. package/dist/automations/types.js +1 -218
  72. package/dist/automations/types.js.map +1 -1
  73. package/dist/autosave-cleanup.d.ts +26 -0
  74. package/dist/autosave-cleanup.js +87 -0
  75. package/dist/autosave-cleanup.js.map +1 -0
  76. package/dist/autosave-git.d.ts +3 -0
  77. package/dist/autosave-git.js +67 -35
  78. package/dist/autosave-git.js.map +1 -1
  79. package/dist/autosave-group.d.ts +8 -0
  80. package/dist/autosave-group.js +61 -0
  81. package/dist/autosave-group.js.map +1 -0
  82. package/dist/autosave-holders.d.ts +31 -4
  83. package/dist/autosave-holders.js +92 -7
  84. package/dist/autosave-holders.js.map +1 -1
  85. package/dist/autosave-windows.d.ts +14 -0
  86. package/dist/autosave-windows.js +36 -2
  87. package/dist/autosave-windows.js.map +1 -1
  88. package/dist/ci-wait/client.d.ts +20 -3
  89. package/dist/ci-wait/client.js +40 -44
  90. package/dist/ci-wait/client.js.map +1 -1
  91. package/dist/ci-wait/controller.d.ts +622 -36
  92. package/dist/ci-wait/controller.js +152 -20
  93. package/dist/ci-wait/controller.js.map +1 -1
  94. package/dist/ci-wait/errors.d.ts +19 -0
  95. package/dist/ci-wait/errors.js +180 -2
  96. package/dist/ci-wait/errors.js.map +1 -1
  97. package/dist/ci-wait/github.d.ts +25 -1
  98. package/dist/ci-wait/github.js +76 -9
  99. package/dist/ci-wait/github.js.map +1 -1
  100. package/dist/ci-wait/mcp.d.ts +0 -1
  101. package/dist/ci-wait/mcp.js +0 -2
  102. package/dist/ci-wait/mcp.js.map +1 -1
  103. package/dist/ci-wait/supervisor.d.ts +7 -0
  104. package/dist/ci-wait/supervisor.js +113 -17
  105. package/dist/ci-wait/supervisor.js.map +1 -1
  106. package/dist/ci-wait/tools.d.ts +536 -16
  107. package/dist/ci-wait/tools.js +165 -20
  108. package/dist/ci-wait/tools.js.map +1 -1
  109. package/dist/config.d.ts +3 -17
  110. package/dist/config.js +4 -60
  111. package/dist/config.js.map +1 -1
  112. package/dist/contract/active-provider.d.ts +12 -0
  113. package/dist/contract/agent-profiles.d.ts +2 -10
  114. package/dist/contract/ask-schema.d.ts +22 -4
  115. package/dist/contract/ask.d.ts +6 -4
  116. package/dist/contract/attachments.d.ts +35 -0
  117. package/dist/contract/attention.d.ts +46 -37
  118. package/dist/contract/automation-requests.d.ts +308 -0
  119. package/dist/contract/automation-schedule.d.ts +40 -11
  120. package/dist/contract/automation-storage.d.ts +512 -0
  121. package/dist/contract/automations.d.ts +421 -40
  122. package/dist/contract/ci-wait.d.ts +41 -4
  123. package/dist/contract/config-requests.d.ts +36 -0
  124. package/dist/contract/conversations.d.ts +24 -10
  125. package/dist/contract/defined.d.ts +8 -0
  126. package/dist/contract/delegation.d.ts +312 -8
  127. package/dist/contract/events.d.ts +24 -3
  128. package/dist/contract/github-requests.d.ts +26 -0
  129. package/dist/contract/github.d.ts +60 -27
  130. package/dist/contract/handoff.d.ts +43 -0
  131. package/dist/contract/health.d.ts +2 -2
  132. package/dist/contract/image-path.d.ts +6 -0
  133. package/dist/contract/index.d.ts +31 -0
  134. package/dist/contract/index.js +3756 -1525
  135. package/dist/contract/live-coordination.d.ts +158 -0
  136. package/dist/contract/live-limits.d.ts +8 -0
  137. package/dist/contract/live.d.ts +123 -0
  138. package/dist/contract/pending-ask.d.ts +58 -0
  139. package/dist/contract/permissions.d.ts +54 -0
  140. package/dist/contract/preview.d.ts +33 -0
  141. package/dist/contract/project-limits.d.ts +33 -0
  142. package/dist/contract/projects.d.ts +486 -20
  143. package/dist/contract/provider-requests.d.ts +77 -0
  144. package/dist/contract/query-requests.d.ts +52 -0
  145. package/dist/contract/repo-requests.d.ts +12 -0
  146. package/dist/contract/run-labels.d.ts +8 -0
  147. package/dist/contract/run-limits.d.ts +8 -0
  148. package/dist/contract/run-predicates.d.ts +32 -0
  149. package/dist/contract/run-requests.d.ts +33 -0
  150. package/dist/contract/run-search.d.ts +193 -0
  151. package/dist/contract/runs.d.ts +2232 -1894
  152. package/dist/contract/scheduled-tasks.d.ts +187 -0
  153. package/dist/contract/skills.d.ts +22 -772
  154. package/dist/contract/team-skill-ref.d.ts +10 -0
  155. package/dist/{core → contract}/tool-display.d.ts +4 -10
  156. package/dist/contract/ui-state-requests.d.ts +60 -0
  157. package/dist/contract/version.d.ts +3 -0
  158. package/dist/contract/voice.d.ts +213 -0
  159. package/dist/contract/waits.d.ts +1204 -0
  160. package/dist/contract/workflow-file.d.ts +37 -0
  161. package/dist/contract/workflow-requests.d.ts +7 -0
  162. package/dist/contract/workflows.d.ts +1 -2
  163. package/dist/contract/workspace.d.ts +34 -82
  164. package/dist/contract/zoned-time.d.ts +2 -11
  165. package/dist/core/agent-env.d.ts +4 -16
  166. package/dist/core/agent-env.js +14 -16
  167. package/dist/core/agent-env.js.map +1 -1
  168. package/dist/core/agent-profiles.d.ts +28 -40
  169. package/dist/core/agent-profiles.js +56 -51
  170. package/dist/core/agent-profiles.js.map +1 -1
  171. package/dist/core/agent-runner.d.ts +88 -44
  172. package/dist/core/agent-runner.js +17 -18
  173. package/dist/core/agent-runner.js.map +1 -1
  174. package/dist/core/ask.d.ts +3 -0
  175. package/dist/core/ask.js +12 -0
  176. package/dist/core/ask.js.map +1 -1
  177. package/dist/core/backend-detect.js +16 -2
  178. package/dist/core/backend-detect.js.map +1 -1
  179. package/dist/core/claude-cli-runner.d.ts +23 -4
  180. package/dist/core/claude-cli-runner.js +280 -76
  181. package/dist/core/claude-cli-runner.js.map +1 -1
  182. package/dist/core/claude-model-catalog.d.ts +2 -10
  183. package/dist/core/claude-model-catalog.js +2 -10
  184. package/dist/core/claude-model-catalog.js.map +1 -1
  185. package/dist/core/claude-ui-mapper.d.ts +2 -2
  186. package/dist/core/claude-ui-mapper.js +94 -2
  187. package/dist/core/claude-ui-mapper.js.map +1 -1
  188. package/dist/core/codex-app-server-runner.d.ts +3 -4
  189. package/dist/core/codex-app-server-runner.js +146 -51
  190. package/dist/core/codex-app-server-runner.js.map +1 -1
  191. package/dist/core/codex-app-server-transport.d.ts +4 -3
  192. package/dist/core/codex-app-server-transport.js +11 -7
  193. package/dist/core/codex-app-server-transport.js.map +1 -1
  194. package/dist/core/codex-approvals.d.ts +12 -0
  195. package/dist/core/codex-approvals.js +161 -0
  196. package/dist/core/codex-approvals.js.map +1 -0
  197. package/dist/core/codex-permissions.d.ts +1 -1
  198. package/dist/core/codex-ui-mapper.js +45 -1
  199. package/dist/core/codex-ui-mapper.js.map +1 -1
  200. package/dist/core/cursor-acp-runner.d.ts +1 -1
  201. package/dist/core/cursor-acp-runner.js +39 -15
  202. package/dist/core/cursor-acp-runner.js.map +1 -1
  203. package/dist/core/cursor-cli-flags.d.ts +19 -0
  204. package/dist/core/cursor-cli-flags.js +47 -0
  205. package/dist/core/cursor-cli-flags.js.map +1 -0
  206. package/dist/core/cursor-model-catalog.d.ts +22 -0
  207. package/dist/core/cursor-model-catalog.js +53 -24
  208. package/dist/core/cursor-model-catalog.js.map +1 -1
  209. package/dist/core/cursor-print-capabilities.d.ts +16 -0
  210. package/dist/core/cursor-print-capabilities.js +141 -0
  211. package/dist/core/cursor-print-capabilities.js.map +1 -0
  212. package/dist/core/cursor-print-process.d.ts +31 -0
  213. package/dist/core/cursor-print-process.js +117 -0
  214. package/dist/core/cursor-print-process.js.map +1 -0
  215. package/dist/core/cursor-print-runner.d.ts +31 -0
  216. package/dist/core/cursor-print-runner.js +555 -0
  217. package/dist/core/cursor-print-runner.js.map +1 -0
  218. package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
  219. package/dist/core/cursor-print-tool-catalog.js +91 -0
  220. package/dist/core/cursor-print-tool-catalog.js.map +1 -0
  221. package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
  222. package/dist/core/cursor-print-ui-mapper.js +553 -0
  223. package/dist/core/cursor-print-ui-mapper.js.map +1 -0
  224. package/dist/core/cursor-runner.d.ts +24 -0
  225. package/dist/core/cursor-runner.js +149 -0
  226. package/dist/core/cursor-runner.js.map +1 -0
  227. package/dist/core/cursor-ui-mapper.js +5 -2
  228. package/dist/core/cursor-ui-mapper.js.map +1 -1
  229. package/dist/core/defined.d.ts +1 -0
  230. package/dist/core/defined.js +2 -0
  231. package/dist/core/defined.js.map +1 -0
  232. package/dist/core/hook-items.d.ts +14 -0
  233. package/dist/core/hook-items.js +13 -0
  234. package/dist/core/hook-items.js.map +1 -0
  235. package/dist/core/host-model-catalog.d.ts +2 -9
  236. package/dist/core/host-model-catalog.js +2 -9
  237. package/dist/core/host-model-catalog.js.map +1 -1
  238. package/dist/core/managed-session.js +15 -3
  239. package/dist/core/managed-session.js.map +1 -1
  240. package/dist/core/model-identity.d.ts +4 -21
  241. package/dist/core/model-identity.js.map +1 -1
  242. package/dist/core/model-presets.d.ts +2 -13
  243. package/dist/core/model-presets.js +2 -13
  244. package/dist/core/model-presets.js.map +1 -1
  245. package/dist/core/omp-model-catalog.js.map +1 -1
  246. package/dist/core/omp-runner.d.ts +6 -7
  247. package/dist/core/omp-runner.js +92 -33
  248. package/dist/core/omp-runner.js.map +1 -1
  249. package/dist/core/omp-ui-mapper.js +1 -1
  250. package/dist/core/omp-ui-mapper.js.map +1 -1
  251. package/dist/core/opencode-model-catalog.js.map +1 -1
  252. package/dist/core/opencode-permissions.d.ts +52 -0
  253. package/dist/core/opencode-permissions.js +101 -0
  254. package/dist/core/opencode-permissions.js.map +1 -0
  255. package/dist/core/opencode-server-runner.d.ts +10 -9
  256. package/dist/core/opencode-server-runner.js +286 -28
  257. package/dist/core/opencode-server-runner.js.map +1 -1
  258. package/dist/core/opencode-session-error.d.ts +15 -7
  259. package/dist/core/opencode-session-error.js +25 -9
  260. package/dist/core/opencode-session-error.js.map +1 -1
  261. package/dist/core/opencode-ui-mapper.js +2 -2
  262. package/dist/core/opencode-ui-mapper.js.map +1 -1
  263. package/dist/core/pi-model-catalog.js.map +1 -1
  264. package/dist/core/pi-runner.d.ts +12 -4
  265. package/dist/core/pi-runner.js +171 -63
  266. package/dist/core/pi-runner.js.map +1 -1
  267. package/dist/core/pi-ui-mapper.js +1 -1
  268. package/dist/core/pi-ui-mapper.js.map +1 -1
  269. package/dist/core/process-usage.d.ts +5 -0
  270. package/dist/core/process-usage.js +24 -4
  271. package/dist/core/process-usage.js.map +1 -1
  272. package/dist/core/provider-auth.d.ts +16 -107
  273. package/dist/core/provider-auth.js +16 -132
  274. package/dist/core/provider-auth.js.map +1 -1
  275. package/dist/core/runner-factory.d.ts +4 -1
  276. package/dist/core/runner-factory.js +3 -3
  277. package/dist/core/runner-factory.js.map +1 -1
  278. package/dist/core/runner-runtime.d.ts +22 -0
  279. package/dist/core/runner-runtime.js +66 -5
  280. package/dist/core/runner-runtime.js.map +1 -1
  281. package/dist/core/runner-tool-grants.d.ts +21 -0
  282. package/dist/core/runner-tool-grants.js +64 -0
  283. package/dist/core/runner-tool-grants.js.map +1 -0
  284. package/dist/core/secret-redaction.d.ts +3 -20
  285. package/dist/core/secret-redaction.js +3 -20
  286. package/dist/core/secret-redaction.js.map +1 -1
  287. package/dist/core/session-process.d.ts +22 -2
  288. package/dist/core/session-process.js +170 -12
  289. package/dist/core/session-process.js.map +1 -1
  290. package/dist/core/shell-env.d.ts +2 -15
  291. package/dist/core/shell-env.js +2 -15
  292. package/dist/core/shell-env.js.map +1 -1
  293. package/dist/core/ui-events.d.ts +60 -47
  294. package/dist/core/ui-events.js +0 -23
  295. package/dist/core/ui-events.js.map +1 -1
  296. package/dist/core/usage-limit.js.map +1 -1
  297. package/dist/data-gitignore.js +3 -1
  298. package/dist/data-gitignore.js.map +1 -1
  299. package/dist/delegation/capacity.d.ts +4 -8
  300. package/dist/delegation/capacity.js +4 -8
  301. package/dist/delegation/capacity.js.map +1 -1
  302. package/dist/delegation/cli.js +123 -21
  303. package/dist/delegation/cli.js.map +1 -1
  304. package/dist/delegation/context.d.ts +19 -3
  305. package/dist/delegation/context.js +217 -22
  306. package/dist/delegation/context.js.map +1 -1
  307. package/dist/delegation/conversations.d.ts +4 -3
  308. package/dist/delegation/conversations.js +7 -5
  309. package/dist/delegation/conversations.js.map +1 -1
  310. package/dist/delegation/destroy-observation.d.ts +1 -1
  311. package/dist/delegation/destroy-observation.js.map +1 -1
  312. package/dist/delegation/effort.js.map +1 -1
  313. package/dist/delegation/execution-identity.d.ts +1 -1
  314. package/dist/delegation/execution-identity.js +41 -7
  315. package/dist/delegation/execution-identity.js.map +1 -1
  316. package/dist/delegation/idle-test-app.d.ts +4 -0
  317. package/dist/delegation/idle-test-app.js +174 -0
  318. package/dist/delegation/idle-test-app.js.map +1 -0
  319. package/dist/delegation/input.js.map +1 -1
  320. package/dist/delegation/park-notice.d.ts +42 -0
  321. package/dist/delegation/park-notice.js +71 -0
  322. package/dist/delegation/park-notice.js.map +1 -0
  323. package/dist/delegation/policy.d.ts +2 -0
  324. package/dist/delegation/policy.js +9 -1
  325. package/dist/delegation/policy.js.map +1 -1
  326. package/dist/delegation/process-liveness.d.ts +10 -15
  327. package/dist/delegation/process-liveness.js +11 -35
  328. package/dist/delegation/process-liveness.js.map +1 -1
  329. package/dist/delegation/provision.js +21 -19
  330. package/dist/delegation/provision.js.map +1 -1
  331. package/dist/delegation/questions.d.ts +3 -1
  332. package/dist/delegation/questions.js +10 -5
  333. package/dist/delegation/questions.js.map +1 -1
  334. package/dist/delegation/readiness.d.ts +2 -2
  335. package/dist/delegation/results.d.ts +4 -1
  336. package/dist/delegation/results.js +49 -18
  337. package/dist/delegation/results.js.map +1 -1
  338. package/dist/delegation/retry-backoff.d.ts +8 -0
  339. package/dist/delegation/retry-backoff.js +8 -0
  340. package/dist/delegation/retry-backoff.js.map +1 -1
  341. package/dist/delegation/routes.d.ts +114 -30
  342. package/dist/delegation/routes.js +4 -1
  343. package/dist/delegation/routes.js.map +1 -1
  344. package/dist/delegation/scratch-cleanup.d.ts +4 -5
  345. package/dist/delegation/scratch-cleanup.js +10 -8
  346. package/dist/delegation/scratch-cleanup.js.map +1 -1
  347. package/dist/delegation/service.d.ts +12 -4
  348. package/dist/delegation/service.js +76 -28
  349. package/dist/delegation/service.js.map +1 -1
  350. package/dist/delegation/transport.d.ts +154 -70
  351. package/dist/delegation/wait.d.ts +11 -0
  352. package/dist/delegation/wait.js +24 -0
  353. package/dist/delegation/wait.js.map +1 -1
  354. package/dist/delegation/windows-test-app.d.ts +5 -0
  355. package/dist/delegation/windows-test-app.js +63 -0
  356. package/dist/delegation/windows-test-app.js.map +1 -0
  357. package/dist/delegation/windows-workspace-identity.d.ts +3 -0
  358. package/dist/delegation/windows-workspace-identity.js +22 -0
  359. package/dist/delegation/windows-workspace-identity.js.map +1 -0
  360. package/dist/delegation/workspace.d.ts +5 -10
  361. package/dist/delegation/workspace.js +136 -75
  362. package/dist/delegation/workspace.js.map +1 -1
  363. package/dist/detached-process.d.ts +103 -0
  364. package/dist/detached-process.js +301 -0
  365. package/dist/detached-process.js.map +1 -0
  366. package/dist/discovery/catalog.d.ts +2 -1
  367. package/dist/discovery/catalog.js.map +1 -1
  368. package/dist/discovery/cli.js +3 -1
  369. package/dist/discovery/cli.js.map +1 -1
  370. package/dist/git-diff-base.d.ts +6 -61
  371. package/dist/git-diff-base.js +6 -70
  372. package/dist/git-diff-base.js.map +1 -1
  373. package/dist/git-index-copy.d.ts +4 -0
  374. package/dist/git-index-copy.js +10 -0
  375. package/dist/git-index-copy.js.map +1 -0
  376. package/dist/git-worktree-lock.d.ts +2 -4
  377. package/dist/git-worktree-lock.js +2 -4
  378. package/dist/git-worktree-lock.js.map +1 -1
  379. package/dist/git-worktree-release.d.ts +2 -2
  380. package/dist/git-worktree-release.js.map +1 -1
  381. package/dist/git-worktree.d.ts +47 -76
  382. package/dist/git-worktree.js +240 -94
  383. package/dist/git-worktree.js.map +1 -1
  384. package/dist/handoff.d.ts +51 -41
  385. package/dist/handoff.js +130 -78
  386. package/dist/handoff.js.map +1 -1
  387. package/dist/index.js +60 -39
  388. package/dist/index.js.map +1 -1
  389. package/dist/merge-observations.d.ts +13 -0
  390. package/dist/merge-observations.js +55 -0
  391. package/dist/merge-observations.js.map +1 -0
  392. package/dist/open-url.js +4 -14
  393. package/dist/open-url.js.map +1 -1
  394. package/dist/paths.d.ts +10 -13
  395. package/dist/paths.js +36 -17
  396. package/dist/paths.js.map +1 -1
  397. package/dist/planner.d.ts +2 -1
  398. package/dist/planner.js +9 -6
  399. package/dist/planner.js.map +1 -1
  400. package/dist/preview/agent-address.d.ts +34 -0
  401. package/dist/preview/agent-address.js +51 -0
  402. package/dist/preview/agent-address.js.map +1 -0
  403. package/dist/preview/agent-marker.d.ts +17 -0
  404. package/dist/preview/agent-marker.js +71 -0
  405. package/dist/preview/agent-marker.js.map +1 -0
  406. package/dist/preview/cdp-proxy.d.ts +54 -0
  407. package/dist/preview/cdp-proxy.js +151 -0
  408. package/dist/preview/cdp-proxy.js.map +1 -0
  409. package/dist/preview/cdp.d.ts +39 -3
  410. package/dist/preview/cdp.js +155 -57
  411. package/dist/preview/cdp.js.map +1 -1
  412. package/dist/preview/chromium.d.ts +18 -6
  413. package/dist/preview/chromium.js +112 -25
  414. package/dist/preview/chromium.js.map +1 -1
  415. package/dist/preview/dev-server.d.ts +1 -1
  416. package/dist/preview/dev-server.js +20 -44
  417. package/dist/preview/dev-server.js.map +1 -1
  418. package/dist/preview/host.d.ts +70 -3
  419. package/dist/preview/host.js +314 -28
  420. package/dist/preview/host.js.map +1 -1
  421. package/dist/preview/registration.d.ts +10 -5
  422. package/dist/preview/registration.js +2 -0
  423. package/dist/preview/registration.js.map +1 -1
  424. package/dist/preview/session.d.ts +2 -0
  425. package/dist/preview/session.js +10 -0
  426. package/dist/preview/session.js.map +1 -1
  427. package/dist/process-wait/exit-file.d.ts +29 -0
  428. package/dist/process-wait/exit-file.js +67 -0
  429. package/dist/process-wait/exit-file.js.map +1 -0
  430. package/dist/process-wait/supervisor.d.ts +30 -0
  431. package/dist/process-wait/supervisor.js +71 -0
  432. package/dist/process-wait/supervisor.js.map +1 -0
  433. package/dist/release/snapshot.d.ts +6 -6
  434. package/dist/runs/agent-tmpdir.d.ts +51 -36
  435. package/dist/runs/agent-tmpdir.js +389 -132
  436. package/dist/runs/agent-tmpdir.js.map +1 -1
  437. package/dist/runs/auto-name.d.ts +6 -6
  438. package/dist/runs/auto-name.js +1 -1
  439. package/dist/runs/auto-name.js.map +1 -1
  440. package/dist/runs/client-request.d.ts +3 -3
  441. package/dist/runs/client-request.js +3 -3
  442. package/dist/runs/client-request.js.map +1 -1
  443. package/dist/runs/delegation-state.d.ts +11 -2
  444. package/dist/runs/delegation-state.js.map +1 -1
  445. package/dist/runs/event-history-agent-context.d.ts +14 -0
  446. package/dist/runs/event-history-agent-context.js +105 -0
  447. package/dist/runs/event-history-agent-context.js.map +1 -0
  448. package/dist/runs/event-history-context.d.ts +15 -0
  449. package/dist/runs/event-history-context.js +109 -0
  450. package/dist/runs/event-history-context.js.map +1 -0
  451. package/dist/runs/event-history.d.ts +4 -1
  452. package/dist/runs/event-history.js +29 -130
  453. package/dist/runs/event-history.js.map +1 -1
  454. package/dist/runs/history-stream.d.ts +2 -0
  455. package/dist/runs/history-stream.js +62 -0
  456. package/dist/runs/history-stream.js.map +1 -0
  457. package/dist/runs/legacy-index.d.ts +6 -19
  458. package/dist/runs/legacy-index.js +6 -19
  459. package/dist/runs/legacy-index.js.map +1 -1
  460. package/dist/runs/live-item-snapshots.d.ts +13 -0
  461. package/dist/runs/live-item-snapshots.js +79 -0
  462. package/dist/runs/live-item-snapshots.js.map +1 -0
  463. package/dist/runs/loaded-run-healing.d.ts +3 -0
  464. package/dist/runs/loaded-run-healing.js +17 -0
  465. package/dist/runs/loaded-run-healing.js.map +1 -0
  466. package/dist/runs/outcome-commit.d.ts +98 -0
  467. package/dist/runs/outcome-commit.js +132 -0
  468. package/dist/runs/outcome-commit.js.map +1 -0
  469. package/dist/runs/pull-requests.d.ts +14 -0
  470. package/dist/runs/pull-requests.js +96 -0
  471. package/dist/runs/pull-requests.js.map +1 -0
  472. package/dist/runs/raw-record.d.ts +3 -15
  473. package/dist/runs/raw-record.js +3 -15
  474. package/dist/runs/raw-record.js.map +1 -1
  475. package/dist/runs/retention.d.ts +2 -2
  476. package/dist/runs/retention.js +7 -0
  477. package/dist/runs/retention.js.map +1 -1
  478. package/dist/runs/review-gate.d.ts +1 -1
  479. package/dist/runs/review-gate.js.map +1 -1
  480. package/dist/runs/run-claims.d.ts +2 -9
  481. package/dist/runs/run-claims.js.map +1 -1
  482. package/dist/runs/run-database.d.ts +29 -34
  483. package/dist/runs/run-database.js +124 -46
  484. package/dist/runs/run-database.js.map +1 -1
  485. package/dist/runs/run-index.d.ts +6 -25
  486. package/dist/runs/run-index.js +25 -38
  487. package/dist/runs/run-index.js.map +1 -1
  488. package/dist/runs/run-row.d.ts +5 -34
  489. package/dist/runs/run-row.js +13 -38
  490. package/dist/runs/run-row.js.map +1 -1
  491. package/dist/runs/store.d.ts +1597 -744
  492. package/dist/runs/store.js +1231 -739
  493. package/dist/runs/store.js.map +1 -1
  494. package/dist/runs/task-markers.d.ts +1 -0
  495. package/dist/runs/task-markers.js +5 -1
  496. package/dist/runs/task-markers.js.map +1 -1
  497. package/dist/runs/task-refs.d.ts +3 -3
  498. package/dist/runs/transcript-facts-fold.d.ts +64 -0
  499. package/dist/runs/transcript-facts-fold.js +109 -0
  500. package/dist/runs/transcript-facts-fold.js.map +1 -0
  501. package/dist/runs/transcript-facts-load.d.ts +11 -0
  502. package/dist/runs/transcript-facts-load.js +66 -0
  503. package/dist/runs/transcript-facts-load.js.map +1 -0
  504. package/dist/runs/transcript-facts-queue.d.ts +30 -0
  505. package/dist/runs/transcript-facts-queue.js +227 -0
  506. package/dist/runs/transcript-facts-queue.js.map +1 -0
  507. package/dist/runs/transcript-facts-worker.d.ts +15 -0
  508. package/dist/runs/transcript-facts-worker.js +26 -0
  509. package/dist/runs/transcript-facts-worker.js.map +1 -0
  510. package/dist/runs/transcript-facts.d.ts +13 -51
  511. package/dist/runs/transcript-facts.js +86 -202
  512. package/dist/runs/transcript-facts.js.map +1 -1
  513. package/dist/runs/ui-event-sink.d.ts +5 -30
  514. package/dist/runs/ui-event-sink.js +8 -30
  515. package/dist/runs/ui-event-sink.js.map +1 -1
  516. package/dist/runs/webhook.d.ts +104 -38
  517. package/dist/runs/webhook.js +180 -77
  518. package/dist/runs/webhook.js.map +1 -1
  519. package/dist/server/app-type.d.ts +2 -17
  520. package/dist/server/archive-on-merge.d.ts +35 -0
  521. package/dist/server/archive-on-merge.js +202 -0
  522. package/dist/server/archive-on-merge.js.map +1 -0
  523. package/dist/server/capabilities.d.ts +3 -15
  524. package/dist/server/capabilities.js +6 -19
  525. package/dist/server/capabilities.js.map +1 -1
  526. package/dist/server/checkout-progress.d.ts +10 -0
  527. package/dist/server/checkout-progress.js +27 -0
  528. package/dist/server/checkout-progress.js.map +1 -0
  529. package/dist/server/checkout.d.ts +10 -19
  530. package/dist/server/checkout.js +15 -45
  531. package/dist/server/checkout.js.map +1 -1
  532. package/dist/server/cockpit-ownership.d.ts +2 -0
  533. package/dist/server/cockpit-ownership.js +9 -0
  534. package/dist/server/cockpit-ownership.js.map +1 -1
  535. package/dist/server/cold-repo-handles.d.ts +2 -7
  536. package/dist/server/cold-repo-handles.js +2 -7
  537. package/dist/server/cold-repo-handles.js.map +1 -1
  538. package/dist/server/completion-actions.d.ts +30 -0
  539. package/dist/server/completion-actions.js +204 -0
  540. package/dist/server/completion-actions.js.map +1 -0
  541. package/dist/server/create-project.d.ts +71 -0
  542. package/dist/server/create-project.js +448 -0
  543. package/dist/server/create-project.js.map +1 -0
  544. package/dist/server/forge/github-filters.d.ts +7 -1
  545. package/dist/server/forge/github-filters.js +66 -51
  546. package/dist/server/forge/github-filters.js.map +1 -1
  547. package/dist/server/forge/github-merge-requirements.d.ts +18 -0
  548. package/dist/server/forge/github-merge-requirements.js +137 -0
  549. package/dist/server/forge/github-merge-requirements.js.map +1 -0
  550. package/dist/server/forge/github.d.ts +98 -111
  551. package/dist/server/forge/github.js +625 -306
  552. package/dist/server/forge/github.js.map +1 -1
  553. package/dist/server/forge/types.d.ts +25 -22
  554. package/dist/server/fs-browse.d.ts +3 -28
  555. package/dist/server/fs-browse.js.map +1 -1
  556. package/dist/server/git-changes.d.ts +5 -15
  557. package/dist/server/git-changes.js +3 -50
  558. package/dist/server/git-changes.js.map +1 -1
  559. package/dist/server/git.d.ts +3 -1
  560. package/dist/server/git.js +12 -0
  561. package/dist/server/git.js.map +1 -1
  562. package/dist/server/github.d.ts +1 -1
  563. package/dist/server/github.js +1 -1
  564. package/dist/server/github.js.map +1 -1
  565. package/dist/server/launch-key.d.ts +2 -4
  566. package/dist/server/launch-key.js +2 -4
  567. package/dist/server/launch-key.js.map +1 -1
  568. package/dist/server/live-routes.d.ts +68 -0
  569. package/dist/server/live-routes.js +147 -0
  570. package/dist/server/live-routes.js.map +1 -0
  571. package/dist/server/open-in-app.d.ts +4 -13
  572. package/dist/server/open-in-app.js +5 -41
  573. package/dist/server/open-in-app.js.map +1 -1
  574. package/dist/server/open-in-targets.d.ts +42 -0
  575. package/dist/server/open-in-targets.js +110 -0
  576. package/dist/server/open-in-targets.js.map +1 -0
  577. package/dist/server/open-in-terminal.d.ts +3 -0
  578. package/dist/server/open-in-terminal.js +6 -26
  579. package/dist/server/open-in-terminal.js.map +1 -1
  580. package/dist/server/preview-cdp-socket.d.ts +21 -0
  581. package/dist/server/preview-cdp-socket.js +112 -0
  582. package/dist/server/preview-cdp-socket.js.map +1 -0
  583. package/dist/server/preview-socket.d.ts +11 -11
  584. package/dist/server/preview-socket.js +22 -22
  585. package/dist/server/preview-socket.js.map +1 -1
  586. package/dist/server/preview-sockets.d.ts +14 -0
  587. package/dist/server/preview-sockets.js +18 -0
  588. package/dist/server/preview-sockets.js.map +1 -0
  589. package/dist/server/project-context.d.ts +54 -18
  590. package/dist/server/project-context.js +178 -5
  591. package/dist/server/project-context.js.map +1 -1
  592. package/dist/server/provider-action-gate.d.ts +0 -2
  593. package/dist/server/provider-action-gate.js +0 -21
  594. package/dist/server/provider-action-gate.js.map +1 -1
  595. package/dist/server/provider-auth-runtime.d.ts +3 -18
  596. package/dist/server/provider-auth-runtime.js +3 -18
  597. package/dist/server/provider-auth-runtime.js.map +1 -1
  598. package/dist/server/repo-branches.d.ts +3 -9
  599. package/dist/server/repo-branches.js +6 -22
  600. package/dist/server/repo-branches.js.map +1 -1
  601. package/dist/server/run-event-feed.d.ts +20 -0
  602. package/dist/server/run-event-feed.js +190 -0
  603. package/dist/server/run-event-feed.js.map +1 -0
  604. package/dist/server/server-deps.d.ts +37 -0
  605. package/dist/server/server-deps.js +114 -0
  606. package/dist/server/server-deps.js.map +1 -0
  607. package/dist/server/server.d.ts +14082 -11998
  608. package/dist/server/server.js +785 -1647
  609. package/dist/server/server.js.map +1 -1
  610. package/dist/server/start-run-options.d.ts +82 -0
  611. package/dist/server/start-run-options.js +111 -0
  612. package/dist/server/start-run-options.js.map +1 -0
  613. package/dist/server/validators.d.ts +3 -29
  614. package/dist/server/validators.js +1 -2
  615. package/dist/server/validators.js.map +1 -1
  616. package/dist/server/ws.d.ts +3 -23
  617. package/dist/server/ws.js +3 -23
  618. package/dist/server/ws.js.map +1 -1
  619. package/dist/server-install/engine.d.ts +6 -9
  620. package/dist/server-install/engine.js +2 -9
  621. package/dist/server-install/engine.js.map +1 -1
  622. package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
  623. package/dist/server-install/state.d.ts +2 -4
  624. package/dist/server-install/state.js +2 -4
  625. package/dist/server-install/state.js.map +1 -1
  626. package/dist/server-install/steps.d.ts +2 -5
  627. package/dist/server-install/steps.js +3 -6
  628. package/dist/server-install/steps.js.map +1 -1
  629. package/dist/server-install/types.d.ts +3 -6
  630. package/dist/server-install/types.js +2 -5
  631. package/dist/server-install/types.js.map +1 -1
  632. package/dist/server-install/ui.d.ts +2 -8
  633. package/dist/server-install/ui.js +3 -3
  634. package/dist/server-install/ui.js.map +1 -1
  635. package/dist/session-context.d.ts +64 -0
  636. package/dist/session-context.js +264 -0
  637. package/dist/session-context.js.map +1 -0
  638. package/dist/skills-provision.d.ts +62 -0
  639. package/dist/skills-provision.js +325 -0
  640. package/dist/skills-provision.js.map +1 -0
  641. package/dist/skills-remote.d.ts +29 -27
  642. package/dist/skills-remote.js +236 -100
  643. package/dist/skills-remote.js.map +1 -1
  644. package/dist/skills.d.ts +25 -36
  645. package/dist/skills.js +43 -54
  646. package/dist/skills.js.map +1 -1
  647. package/dist/subcommands.d.ts +11 -0
  648. package/dist/subcommands.js +24 -0
  649. package/dist/subcommands.js.map +1 -0
  650. package/dist/task-cli/cli.js +78 -25
  651. package/dist/task-cli/cli.js.map +1 -1
  652. package/dist/task-cli/discovery.d.ts +4 -2
  653. package/dist/task-cli/discovery.js +14 -13
  654. package/dist/task-cli/discovery.js.map +1 -1
  655. package/dist/task-cli/hint.d.ts +20 -0
  656. package/dist/task-cli/hint.js +14 -0
  657. package/dist/task-cli/hint.js.map +1 -0
  658. package/dist/task-cli/http.d.ts +1 -0
  659. package/dist/task-cli/http.js +3 -1
  660. package/dist/task-cli/http.js.map +1 -1
  661. package/dist/task-cli/projections.d.ts +14 -11
  662. package/dist/task-cli/projections.js +15 -11
  663. package/dist/task-cli/projections.js.map +1 -1
  664. package/dist/task-cli/watch.d.ts +18 -10
  665. package/dist/task-cli/watch.js +128 -20
  666. package/dist/task-cli/watch.js.map +1 -1
  667. package/dist/ui-state.d.ts +17 -3
  668. package/dist/ui-state.js +56 -9
  669. package/dist/ui-state.js.map +1 -1
  670. package/dist/update-check.d.ts +0 -10
  671. package/dist/update-check.js +1 -16
  672. package/dist/update-check.js.map +1 -1
  673. package/dist/voice/decide.d.ts +32 -0
  674. package/dist/voice/decide.js +297 -0
  675. package/dist/voice/decide.js.map +1 -0
  676. package/dist/voice/decision-log.d.ts +52 -0
  677. package/dist/voice/decision-log.js +107 -0
  678. package/dist/voice/decision-log.js.map +1 -0
  679. package/dist/voice/engine.d.ts +119 -0
  680. package/dist/voice/engine.js +60 -0
  681. package/dist/voice/engine.js.map +1 -0
  682. package/dist/voice/fake-engine.d.ts +10 -0
  683. package/dist/voice/fake-engine.js +192 -0
  684. package/dist/voice/fake-engine.js.map +1 -0
  685. package/dist/voice/jev-engine.d.ts +17 -0
  686. package/dist/voice/jev-engine.js +110 -0
  687. package/dist/voice/jev-engine.js.map +1 -0
  688. package/dist/voice/pending-ask.d.ts +17 -0
  689. package/dist/voice/pending-ask.js +50 -0
  690. package/dist/voice/pending-ask.js.map +1 -0
  691. package/dist/voice/routes.d.ts +115 -0
  692. package/dist/voice/routes.js +91 -0
  693. package/dist/voice/routes.js.map +1 -0
  694. package/dist/voice/sentence.d.ts +21 -0
  695. package/dist/voice/sentence.js +61 -0
  696. package/dist/voice/sentence.js.map +1 -0
  697. package/dist/voice/thresholds.d.ts +28 -0
  698. package/dist/voice/thresholds.js +29 -0
  699. package/dist/voice/thresholds.js.map +1 -0
  700. package/dist/webhooks/cli.d.ts +18 -0
  701. package/dist/webhooks/cli.js +145 -0
  702. package/dist/webhooks/cli.js.map +1 -0
  703. package/dist/webhooks/prompt.d.ts +5 -0
  704. package/dist/webhooks/prompt.js +26 -0
  705. package/dist/webhooks/prompt.js.map +1 -0
  706. package/dist/workflows/active-run.d.ts +167 -0
  707. package/dist/workflows/active-run.js +21 -0
  708. package/dist/workflows/active-run.js.map +1 -0
  709. package/dist/workflows/continuation-admission.d.ts +913 -0
  710. package/dist/workflows/continuation-admission.js +265 -0
  711. package/dist/workflows/continuation-admission.js.map +1 -0
  712. package/dist/workflows/execution-account.d.ts +13 -0
  713. package/dist/workflows/execution-account.js +18 -0
  714. package/dist/workflows/execution-account.js.map +1 -0
  715. package/dist/workflows/input-acknowledgement.d.ts +152 -0
  716. package/dist/workflows/input-acknowledgement.js +38 -0
  717. package/dist/workflows/input-acknowledgement.js.map +1 -0
  718. package/dist/workflows/line-order.d.ts +5 -0
  719. package/dist/workflows/line-order.js +25 -0
  720. package/dist/workflows/line-order.js.map +1 -0
  721. package/dist/workflows/outcome-batches.d.ts +20 -0
  722. package/dist/workflows/outcome-batches.js +25 -0
  723. package/dist/workflows/outcome-batches.js.map +1 -0
  724. package/dist/workflows/question-routing.d.ts +8 -0
  725. package/dist/workflows/question-routing.js +18 -0
  726. package/dist/workflows/question-routing.js.map +1 -0
  727. package/dist/workflows/run-scheduling.d.ts +35 -0
  728. package/dist/workflows/run-scheduling.js +61 -0
  729. package/dist/workflows/run-scheduling.js.map +1 -0
  730. package/dist/workflows/run-states.d.ts +190 -0
  731. package/dist/workflows/run-states.js +295 -0
  732. package/dist/workflows/run-states.js.map +1 -0
  733. package/dist/workflows/run.d.ts +1296 -278
  734. package/dist/workflows/run.js +5730 -3265
  735. package/dist/workflows/run.js.map +1 -1
  736. package/dist/workflows/turn-end.d.ts +116 -0
  737. package/dist/workflows/turn-end.js +68 -0
  738. package/dist/workflows/turn-end.js.map +1 -0
  739. package/dist/workflows/types.d.ts +35 -130
  740. package/dist/workflows/types.js +47 -100
  741. package/dist/workflows/types.js.map +1 -1
  742. package/dist/workflows/waits.d.ts +74 -0
  743. package/dist/workflows/waits.js +197 -0
  744. package/dist/workflows/waits.js.map +1 -0
  745. package/dist/workspace/agent-accounts.d.ts +5 -38
  746. package/dist/workspace/agent-accounts.js +14 -40
  747. package/dist/workspace/agent-accounts.js.map +1 -1
  748. package/dist/workspace/agent-profiles.d.ts +40 -16
  749. package/dist/workspace/agent-profiles.js +77 -17
  750. package/dist/workspace/agent-profiles.js.map +1 -1
  751. package/dist/workspace/config.d.ts +48 -49
  752. package/dist/workspace/config.js +68 -72
  753. package/dist/workspace/config.js.map +1 -1
  754. package/dist/workspace/migrations.d.ts +3 -13
  755. package/dist/workspace/migrations.js.map +1 -1
  756. package/dist/workspace/projects-cli.d.ts +1 -1
  757. package/dist/workspace/projects-cli.js.map +1 -1
  758. package/dist/workspace/projects.d.ts +15 -18
  759. package/dist/workspace/projects.js +20 -16
  760. package/dist/workspace/projects.js.map +1 -1
  761. package/dist/workspace/semaphore.d.ts +11 -45
  762. package/dist/workspace/semaphore.js +6 -18
  763. package/dist/workspace/semaphore.js.map +1 -1
  764. package/dist/workspace/ui-state.d.ts +6 -4
  765. package/dist/workspace/ui-state.js +6 -4
  766. package/dist/workspace/ui-state.js.map +1 -1
  767. package/dist/workspace/webhooks.d.ts +40 -0
  768. package/dist/workspace/webhooks.js +146 -0
  769. package/dist/workspace/webhooks.js.map +1 -0
  770. package/dist/worktree-manifest.d.ts +165 -0
  771. package/dist/worktree-manifest.js +530 -0
  772. package/dist/worktree-manifest.js.map +1 -0
  773. package/dist/worktree-setup.js.map +1 -1
  774. package/package.json +6 -5
  775. package/scripts/benchmark-run-store-fixture.ts +7 -3
  776. package/scripts/check-pack.mjs +3 -1
  777. package/scripts/inline-contract.mjs +80 -27
  778. package/scripts/install-as-command.mjs +3 -1
  779. package/scripts/measure-transcript-facts-health.mjs +87 -0
  780. package/scripts/measure-transcript-facts-lag.mjs +68 -0
  781. package/scripts/mock-ci-tool.mjs +49 -6
  782. package/scripts/mock-claude-model-refusal.mjs +42 -0
  783. package/scripts/mock-claude.mjs +833 -591
  784. package/scripts/mock-codex-app-server.mjs +785 -418
  785. package/scripts/mock-cursor-acp.mjs +296 -125
  786. package/scripts/mock-cursor-print.mjs +256 -0
  787. package/scripts/mock-deferred-turn-start.mjs +16 -0
  788. package/scripts/mock-delivery-control.d.mts +23 -0
  789. package/scripts/mock-delivery-control.mjs +80 -0
  790. package/scripts/mock-env-record.mjs +11 -0
  791. package/scripts/mock-failure-control.d.mts +13 -0
  792. package/scripts/mock-failure-control.mjs +68 -0
  793. package/scripts/mock-multi-pr.mjs +7 -0
  794. package/scripts/mock-nudge.mjs +45 -0
  795. package/scripts/mock-omp-rpc.mjs +429 -255
  796. package/scripts/mock-opencode-serve.mjs +972 -557
  797. package/scripts/mock-pi-rpc.mjs +558 -331
  798. package/scripts/mock-runner-crash.mjs +18 -2
  799. package/scripts/mock-session-context.d.mts +5 -0
  800. package/scripts/mock-session-context.mjs +56 -0
  801. package/scripts/mock-silent-tail.mjs +10 -3
  802. package/scripts/pi-default-tools.mjs +22 -0
  803. package/scripts/pi-project-skills.mjs +59 -0
  804. package/scripts/probe-cursor-print.mjs +627 -0
  805. package/scripts/transcript-facts-fixture.mjs +53 -0
  806. package/scripts/voice-replay.ts +50 -0
  807. package/scripts/windows-workspace-identity.cs +208 -0
  808. package/scripts/windows-workspace-identity.ps1 +10 -0
  809. package/web/dist/assets/alert-dialog-DfctKUMw.js +1 -0
  810. package/web/dist/assets/button-CeupvoKG.js +41 -0
  811. package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
  812. package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
  813. package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
  814. package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
  815. package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
  816. package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
  817. package/web/dist/assets/eye-B8okNWXU.js +1 -0
  818. package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
  819. package/web/dist/assets/github-DwU6ALRK.js +1 -0
  820. package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
  821. package/web/dist/assets/index-BOfE8pyD.js +34 -0
  822. package/web/dist/assets/index-D9HpsmdW.css +1 -0
  823. package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
  824. package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
  825. package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
  826. package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
  827. package/web/dist/assets/popover-D56fhiXj.js +1 -0
  828. package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
  829. package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
  830. package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
  831. package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
  832. package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
  833. package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
  834. package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
  835. package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
  836. package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
  837. package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
  838. package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
  839. package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
  840. package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
  841. package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
  842. package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
  843. package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
  844. package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
  845. package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
  846. package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
  847. package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
  848. package/web/dist/index.html +13 -17
  849. package/web/dist/live-worker.js +4 -0
  850. package/dist/core/tool-display.js +0 -179
  851. package/dist/core/tool-display.js.map +0 -1
  852. package/dist/runs/human-ask-summary.d.ts +0 -9
  853. package/dist/runs/human-ask-summary.js +0 -39
  854. package/dist/runs/human-ask-summary.js.map +0 -1
  855. package/dist/runs/run-search.d.ts +0 -29
  856. package/dist/runs/run-search.js +0 -63
  857. package/dist/runs/run-search.js.map +0 -1
  858. package/dist/skills-banner.d.ts +0 -22
  859. package/dist/skills-banner.js +0 -41
  860. package/dist/skills-banner.js.map +0 -1
  861. package/dist/skills-update.d.ts +0 -88
  862. package/dist/skills-update.js +0 -392
  863. package/dist/skills-update.js.map +0 -1
  864. package/dist/todos.d.ts +0 -48
  865. package/dist/todos.js +0 -201
  866. package/dist/todos.js.map +0 -1
  867. package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
  868. package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
  869. package/web/dist/assets/button-C_rd7CPp.js +0 -43
  870. package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
  871. package/web/dist/assets/diff-DrEARXTV.js +0 -3
  872. package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
  873. package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
  874. package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
  875. package/web/dist/assets/format-DpNe3S0A.js +0 -1
  876. package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
  877. package/web/dist/assets/github-CfV5sqL0.js +0 -1
  878. package/web/dist/assets/index-DgWWlOLy.js +0 -13
  879. package/web/dist/assets/index-fBFnuvxu.css +0 -1
  880. package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
  881. package/web/dist/assets/popover-BohP6WTx.js +0 -1
  882. package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
  883. package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
  884. package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
  885. package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
  886. package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
  887. package/web/dist/assets/run-header-68WHf9wV.js +0 -1
  888. package/web/dist/assets/run-header-8GObNx6F.css +0 -1
  889. package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
  890. package/web/dist/assets/skills-DFBiAuJG.js +0 -1
  891. package/web/dist/assets/skills-DiVIgKeU.js +0 -1
  892. package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
  893. package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
  894. package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
  895. package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
  896. package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
  897. package/web/dist/assets/task-files-D50s-gKW.js +0 -2
  898. package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
  899. package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
  900. package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
  901. package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
  902. package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
  903. package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
  904. package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
  905. package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
  906. package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
  907. package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
@@ -0,0 +1,7 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./react-runtime-CCIEwYL0.js";import{E as r,t as i}from"./button-CeupvoKG.js";import{Dt as a,E as o,Ft as s,G as c,Ha as l,Hr as u,K as d,Mt as f,N as p,Ni as m,Nt as ee,P as h,Rr as g,Rt as te,St as ne,U as _,Ut as re,bt as v,i as y,jt as ie,k as ae,ka as oe,p as b,pn as se,q as ce,r as x,t as S,vn as le}from"./dropdown-menu-COj_J5wd.js";import{Bt as ue,In as C,It as de,Nt as fe,i as pe,t as me}from"./centered-state-hDsyXrnH.js";import{a as he,c as ge,i as _e,n as ve,o as ye,r as be,s as xe,t as Se}from"./alert-dialog-DfctKUMw.js";import{$n as Ce,An as w,At as T,Ct as we,Dt as Te,Et as E,Mn as Ee,Ot as De,Pn as Oe,Qn as ke,Qt as D,St as Ae,Tt as je,Yt as Me,Zn as Ne,_t as O,bt as k,jt as A,kt as Pe,nr as Fe,tr as Ie,vt as Le,wt as Re,xt as ze,yt as j}from"./index-BOfE8pyD.js";import{n as M}from"./skill-empty-hint-oOtzR3v0.js";var N=e(t(),1);function P(e){let t=[];for(let n of e){if(n.command||!n.skill||n.prompt!==void 0&&n.prompt!==`{{task}}`||n.name!==void 0&&n.name!==n.skill||n.timeoutMs!==void 0||n.model||n.effort!==void 0||n.runner||n.agentProfile||n.allowedTools||n.bashAllowlist||n.onFail)return null;t.push(n.skill)}return t.length?t:null}function Be(e,t){let n=new Set(t.map(e=>e.id)),r=e;for(let t=2;n.has(r);t++)r=`${e}-${t}`;return{id:r,name:e,skill:e,prompt:`{{task}}`}}function Ve(e,t,n){let r=[...e];return r.splice(Math.max(0,Math.min(n,r.length)),0,t),r}function He(e,t,n){if(t===n||t<0||t>=e.length||n<0||n>=e.length)return[...e];let r=[...e],[i]=r.splice(t,1);return i===void 0?[...e]:(r.splice(n,0,i),r)}function Ue(e,t){return e.filter((e,n)=>n!==t)}function F(e){let t=String(e),n=/^[A-Za-z0-9._][A-Za-z0-9 ._/-]*$/.test(t)&&!t.endsWith(` `),r=/^(true|false|yes|no|on|off|null|~)$/i.test(t)||/^[-+.]?\d/.test(t);return n&&!r?t:JSON.stringify(t)}function I(e,t,n){let r=` `.repeat(n);return t.includes(`
2
+ `)?[`${r}${e}: |`,...t.split(`
3
+ `).map(e=>`${r} ${e}`)]:[`${r}${e}: ${F(t)}`]}function We(e,t,n){let r=[`name: ${F(e.trim()||`my-workflow`)}`];t.trim()&&r.push(...I(`description`,t.trim(),0));let i=P(n);if(i){r.push(`skills:`);for(let e of i)r.push(` - ${F(e)}`)}else if(n.length){r.push(`steps:`);for(let e of n)r.push(` - id: ${F(e.id)}`),e.name&&e.name!==e.id&&r.push(` name: ${F(e.name)}`),e.skill&&r.push(` skill: ${F(e.skill)}`),e.prompt&&r.push(...I(`prompt`,e.prompt,4)),e.model&&r.push(` model: ${F(e.model)}`),e.timeoutMs!==void 0&&r.push(` timeoutMs: ${e.timeoutMs}`),e.effort!==void 0&&r.push(` effort: ${F(e.effort)}`),e.runner&&r.push(` runner: ${F(e.runner)}`),e.agentProfile&&r.push(` agentProfile: ${F(e.agentProfile)}`),e.allowedTools&&r.push(` allowedTools: [${e.allowedTools.map(F).join(`, `)}]`),e.bashAllowlist&&r.push(` bashAllowlist: [${e.bashAllowlist.map(F).join(`, `)}]`),e.command&&r.push(...I(`command`,e.command,4)),e.onFail&&r.push(` onFail:`,` retry: ${F(e.onFail.retry)}`,` max: ${e.onFail.max??2}`)}else r.push(`skills: []`);return`${r.join(`
4
+ `)}\n`}function Ge(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`workflow`}function Ke(e){let t=P(e)?`skill`:`step`;return`${e.length} ${t}${e.length===1?``:`s`}`}function qe(e,t){let n=new Set,r=[];for(let t of e.steps.slice(0,8)){let e=t.id||`step`,i=e;for(let t=2;n.has(i);t++)i=`${e}-${t}`;n.add(i),r.push({...t,id:i})}return{name:e.name?.trim()||t,steps:r}}function Je(e,t,n){let r=P(n);return{name:e.trim(),...t.trim()?{description:t.trim()}:{},...r?{skills:r}:{steps:[...n]}}}var L=n(),R=`wb-canvas`;function z(){return{name:`my-workflow`,description:``,steps:[]}}function Ye(e){return{name:e.name,description:e.description??``,steps:structuredClone(e.steps??[])}}function B(){let{name:e}=oe();return(0,L.jsx)(Xe,{routeName:e},e??``)}function Xe({routeName:e}){let t=ue(),n=fe(),r=de(),o=l(),[d,_]=(0,N.useState)(null),[y,ae]=(0,N.useState)(``),[oe,b]=(0,N.useState)(!1),[x,S]=(0,N.useState)(``),[w,T]=(0,N.useState)(null),[Te,E]=(0,N.useState)(!1),[O,k]=(0,N.useState)(``),[j,M]=(0,N.useState)(``),[P,F]=(0,N.useState)(!1),[I,B]=(0,N.useState)(``),[Xe,V]=(0,N.useState)(!1),[et,H]=(0,N.useState)(!1),[U,W]=(0,N.useState)(null),[nt,G]=(0,N.useState)(null),rt=(0,N.useRef)(null),it=(0,N.useRef)(null),K=t.data?.workflows??[],q=n.data??[],at=Ee(q,r.data?.skillUsage),ot=Oe(at,x,r.data?.skillUsage);(0,N.useEffect)(()=>{if(d!==null||t.data===void 0)return;let n=t.data.workflows,r=(e?n.find(t=>t.name===e):void 0)??n.find(e=>e.source===`file`);_(r?Ye(r):z())},[d,t.data,e]);let J=e=>_(t=>t===null?t:{...t,steps:e}),st=C({mutationFn:e=>g(e),onSuccess:e=>{_({name:e.name,description:e.description??``,steps:e.steps}),E(!1),k(``),M(``),m(`Imported "${e.name}" — review, then Save.`)},onError:e=>M(e.message)}),Y=C({mutationFn:e=>u(e),onSuccess:e=>{_(t=>{let n=t??z(),{name:r,steps:i}=qe(e,n.name);return{...n,name:r,steps:i}}),F(!1),B(``),m(e.fallback?`Planner unavailable — added a single step. Edit, then Save.`:`Built "${e.name??d?.name??`workflow`}" — review, tweak, then Save.`,e.fallback?{tone:`danger`}:void 0)},onError:e=>m(e instanceof Error?e.message:String(e),{tone:`danger`})}),X=C({mutationFn:e=>se({...Je(d?.name??``,d?.description??``,d?.steps??[]),...e?{overwrite:!0}:{}}),onSuccess:e=>{V(!1),m(`Saved — ${e.path.split(`/`).pop()??e.path}`),o.invalidateQueries({queryKey:pe.workflows})},onError:e=>{e instanceof re&&e.exists===!0?V(!0):m(e instanceof Error?e.message:String(e),{tone:`danger`})}}),ct=C({mutationFn:e=>le(e),onSuccess:(e,t)=>{H(!1),m(`Deleted "${t}".`),_(z()),o.invalidateQueries({queryKey:pe.workflows})},onError:e=>{H(!1),m(e instanceof Error?e.message:String(e),{tone:`danger`})}}),lt=Pe(De(Re,{activationConstraint:{distance:4}}),De(we,{coordinateGetter:Le}));if(t.isError)return(0,L.jsx)(`div`,{"data-route":`workflows`,className:`@container mx-auto min-h-full w-full px-[18px] py-6 md:p-9`,children:(0,L.jsx)(me,{icon:(0,L.jsx)(f,{}),tone:`danger`,title:`Could not load workflows`,subtitle:t.error.message})});if(d===null)return(0,L.jsx)(Me,{});let Z=d.steps,Q=d.name.trim(),ut=K.find(e=>e.name===Q&&e.source===`file`),$=We(d.name,d.description,Z),dt=(e,t=Z.length)=>{if(Z.length>=8){m(`A workflow holds at most 8 steps.`,{tone:`danger`});return}J(Ve(Z,Be(e,Z),t))},ft=e=>{let t=e.active.data.current;W(t??null)},pt=e=>{G(e.over?String(e.over.id):null)},mt=e=>{W(null),G(null);let{active:t,over:n}=e;if(n===null)return;let r=t.data.current;if(r?.type===`palette`){let e=n.id===R?Z.length:Z.findIndex(e=>e.id===n.id);dt(r.skill,e===-1?Z.length:e);return}if(n.id===t.id)return;let i=Z.findIndex(e=>e.id===t.id),a=Z.findIndex(e=>e.id===n.id);i!==-1&&a!==-1&&J(He(Z,i,a))},ht=()=>{let e=O.trim();e!==``&&st.mutate(e)},gt=()=>{let e=I.trim();e===``||Y.isPending||Y.mutate(e)};return(0,L.jsxs)(`div`,{"data-route":`workflows`,className:`@container mx-auto min-h-full w-full px-[18px] py-6 md:p-9`,children:[(0,L.jsxs)(`header`,{className:`mb-[22px] flex flex-wrap items-center justify-between gap-4`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`h1`,{className:`text-[25px] font-semibold md:text-[30px]`,children:`Workflows`}),(0,L.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground md:text-[13px]`,children:`Portable skill chains. Steps run from top to bottom.`})]}),(0,L.jsxs)(i,{variant:`primary`,"data-slot":`wb-new`,className:`min-h-11`,onClick:()=>_(z()),children:[(0,L.jsx)(v,{"aria-hidden":`true`,className:`size-4`}),`New workflow`]})]}),(0,L.jsxs)(ze,{sensors:lt,collisionDetection:je,onDragStart:ft,onDragOver:pt,onDragEnd:mt,onDragCancel:()=>{W(null),G(null)},children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[22px] pb-[calc(32px+env(safe-area-inset-bottom))]`,children:[(0,L.jsxs)(`section`,{"data-slot":`wb-metadata`,className:`flex min-w-0 flex-col gap-3`,children:[(0,L.jsxs)(`div`,{"data-slot":`wb-load`,className:`flex flex-col items-start gap-2`,children:[(0,L.jsx)(`label`,{htmlFor:`workflow-load`,className:`text-xs text-muted-foreground`,children:`Load an existing workflow`}),(0,L.jsxs)(`div`,{className:`relative max-w-full`,children:[(0,L.jsx)(h,{"aria-hidden":`true`,className:`pointer-events-none absolute left-3 top-3.5 size-4 text-muted-foreground`}),(0,L.jsxs)(`select`,{id:`workflow-load`,value:K.some(e=>e.name===Q)?Q:``,onChange:e=>{let t=K.find(t=>t.name===e.target.value);t&&_(Ye(t))},className:`h-11 max-w-full rounded-lg border border-border bg-card pl-9 pr-3 text-xs font-medium appearance-none focus-visible:outline-2 focus-visible:outline-ring`,children:[(0,L.jsx)(`option`,{value:``,disabled:!0,children:`Choose a workflow`}),K.map(e=>(0,L.jsx)(`option`,{value:e.name,"data-slot":`wb-load-option`,"data-name":e.name,children:e.name},e.name))]})]})]}),(0,L.jsx)(`label`,{htmlFor:`workflow-name`,className:`text-xs font-semibold`,children:`Workflow name`}),(0,L.jsx)(D,{id:`workflow-name`,ref:rt,"data-slot":`wb-name`,"aria-label":`Workflow name`,spellCheck:!1,value:d.name,onChange:e=>_({...d,name:e.target.value}),className:`h-12 bg-card text-sm`}),(0,L.jsx)(`label`,{htmlFor:`workflow-description`,className:`text-xs font-semibold`,children:`Description`}),(0,L.jsx)(A,{id:`workflow-description`,"data-slot":`wb-description`,"aria-label":`Description`,value:d.description,onChange:e=>_({...d,description:e.target.value}),className:`min-h-[72px] bg-card p-3.5 text-sm`})]}),(0,L.jsxs)(`div`,{"data-slot":`wb-actions`,className:`grid grid-cols-[max-content_max-content] items-center justify-start gap-2 sm:flex sm:flex-wrap [&_button]:min-h-11 [&_button]:border [&_button]:border-border [&_button]:bg-card`,children:[(0,L.jsxs)(i,{type:`button`,variant:`ghost`,size:`sm`,"data-slot":`wb-import`,className:`col-span-2 justify-self-start`,onClick:()=>{M(``),F(!1),E(e=>!e)},children:[(0,L.jsx)(ee,{"aria-hidden":`true`,className:`size-3`}),`Import`]}),(0,L.jsxs)(i,{type:`button`,variant:`ghost`,size:`sm`,"data-slot":`wb-export`,className:`col-span-2 justify-self-start`,title:`Download workflow.yaml`,onClick:()=>{let e=new Blob([$],{type:`text/yaml`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${Ge(d.name)}.yaml`,document.body.appendChild(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3)},children:[(0,L.jsx)(c,{"aria-hidden":`true`,className:`size-3`}),`Export`]}),(0,L.jsxs)(i,{type:`button`,variant:`ghost`,size:`sm`,"data-slot":`wb-auto`,"aria-expanded":P,title:`Describe a chain — the agent builds it`,onClick:()=>{E(!1),F(e=>!e)},children:[(0,L.jsx)(s,{"aria-hidden":`true`,className:`size-3`}),`Auto`]}),ut?(0,L.jsxs)(i,{type:`button`,variant:`ghost`,size:`sm`,"data-slot":`wb-delete`,className:`text-danger hover:text-danger`,title:`Delete the saved workflow file`,onClick:()=>H(!0),children:[(0,L.jsx)(ie,{"aria-hidden":`true`,className:`size-3`}),`Delete`]}):null]}),P?(0,L.jsxs)(`div`,{"data-slot":`wb-auto-panel`,className:`rounded-xl border border-border bg-card p-5 [&_button]:min-h-11`,children:[(0,L.jsx)(`h2`,{className:`text-lg font-normal`,children:`Build a chain from a prompt`}),(0,L.jsx)(`p`,{className:`mt-4 text-[13px] leading-relaxed text-muted-foreground`,children:`Describe the outcome. An agent proposes a title and ordered skill/check steps. Review the result, edit it, then Save.`}),(0,L.jsx)(A,{"data-slot":`wb-auto-text`,"aria-label":`Describe the chain to build`,rows:3,autoFocus:!0,placeholder:`e.g. Fix the bug, run the tests, then review the diff for regressions.`,value:I,onChange:e=>B(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),gt())},className:`mt-4 min-h-[108px] bg-background p-4 text-sm`}),(0,L.jsxs)(`div`,{className:`mt-3 flex items-center gap-1.5`,children:[(0,L.jsxs)(i,{type:`button`,variant:`primary`,size:`sm`,"data-slot":`wb-auto-run`,disabled:Y.isPending||I.trim()===``,onClick:gt,children:[(0,L.jsx)(s,{"aria-hidden":`true`,className:`size-3`}),Y.isPending?`Building…`:`Build chain`]}),(0,L.jsxs)(i,{type:`button`,variant:`ghost`,size:`sm`,"data-slot":`wb-auto-cancel`,onClick:()=>{F(!1),B(``)},children:[(0,L.jsx)(te,{"aria-hidden":`true`,className:`size-4`}),`Cancel`]})]}),(0,L.jsx)(`p`,{className:`mt-4 text-xs text-muted-foreground`,children:`Creates an editable draft. Review the generated name and steps before saving.`})]}):null,(0,L.jsx)(Ne,{open:Te,onOpenChange:E,children:(0,L.jsxs)(ke,{showCloseButton:!1,"data-slot":`wb-import-panel`,className:`max-md:translate-x-0 max-md:translate-y-0 sm:max-w-[660px] rounded-xl border border-border bg-card p-5 [&_button]:min-h-11`,children:[(0,L.jsx)(Fe,{className:`text-xl font-normal`,children:`Import workflow YAML`}),(0,L.jsx)(Ce,{className:`sr-only`,children:`Paste a portable workflow definition to import.`}),(0,L.jsx)(A,{"data-slot":`wb-import-text`,"aria-label":`Workflow YAML to import`,rows:4,spellCheck:!1,placeholder:`name: my-flow
5
+ skills:
6
+ - test-conventions
7
+ - commit-style`,value:O,onChange:e=>k(e.target.value),className:`mt-4 min-h-[124px] bg-background p-4 font-mono text-[13px] leading-relaxed`}),(0,L.jsx)(`p`,{className:`mt-4 text-[13px] text-muted-foreground`,children:`Paste a portable workflow definition. Imported steps appear in execution order.`}),j===``?null:(0,L.jsx)(`p`,{"data-slot":`wb-import-error`,role:`alert`,className:`mt-2 text-xs text-danger`,children:j}),(0,L.jsxs)(`div`,{className:`mt-3 flex items-center gap-1.5`,children:[(0,L.jsx)(i,{type:`button`,variant:`primary`,size:`sm`,"data-slot":`wb-import-run`,disabled:st.isPending,onClick:ht,children:`Import`}),(0,L.jsx)(i,{type:`button`,variant:`ghost`,size:`sm`,"data-slot":`wb-import-cancel`,onClick:()=>{E(!1),k(``),M(``)},children:`Cancel`})]})]})}),(0,L.jsxs)(`div`,{className:`grid min-w-0 items-start gap-[22px] @min-[700px]:grid-cols-[minmax(0,1fr)_300px]`,children:[(0,L.jsxs)(`section`,{"data-slot":`wb-main`,className:`min-w-0 rounded-xl border border-border bg-card p-5`,children:[(0,L.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Steps · `,Z.length,` of `,8,(0,L.jsx)(`span`,{"data-slot":`wb-count`,className:`sr-only`,children:Ke(Z)})]}),(0,L.jsx)(Ze,{steps:Z,skills:q,dragging:U!==null,overId:nt,activeStepId:U?.type===`step`?U.step.id:null,onRemove:e=>J(Ue(Z,e)),onMove:(e,t)=>J(He(Z,e,t))}),(0,L.jsxs)(i,{ref:it,variant:`outline`,className:`mt-4 min-h-11`,onClick:()=>{T(null),S(``),b(!0)},children:[(0,L.jsx)(v,{"aria-hidden":`true`,className:`size-4`}),`Add step`]}),(0,L.jsxs)(`p`,{className:`mt-4 text-xs leading-relaxed text-muted-foreground`,children:[(0,L.jsx)(`span`,{className:`hidden @min-[900px]:inline`,children:`Drag to reorder. The agent follows this sequence from top to bottom.`}),(0,L.jsx)(`span`,{className:`@min-[900px]:hidden`,children:`Use Move up / Move down to reorder without dragging.`})]}),(0,L.jsxs)(`footer`,{className:`mt-4 flex flex-wrap items-center justify-between gap-4 border-t border-border pt-4`,children:[(0,L.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:`Review the name and steps, then save to a workflow file.`}),(0,L.jsxs)(i,{type:`button`,variant:`primary`,size:`sm`,className:`min-h-11 max-sm:w-full`,"data-slot":`wb-save`,disabled:X.isPending,onClick:()=>{if(Q===``){rt.current?.focus();return}if(Z.length===0){m(`Add at least one step first.`,{tone:`danger`});return}X.mutate(!1)},children:[(0,L.jsx)(p,{"aria-hidden":`true`,className:`size-3`}),`Save`]})]})]}),(0,L.jsxs)(`aside`,{"data-slot":`wb-aside`,className:`min-w-0 rounded-xl border border-border bg-card p-5`,children:[(0,L.jsx)(`h2`,{className:`text-[16px] font-semibold`,children:`Available skills`}),(0,L.jsxs)(`div`,{className:`sw-search relative mt-4`,children:[(0,L.jsx)(ne,{"aria-hidden":`true`,className:`pointer-events-none absolute left-3 top-3.5 size-4 text-muted-foreground`}),(0,L.jsx)(D,{"data-slot":`wb-filter`,placeholder:`Find a skill…`,"aria-label":`Filter skills`,value:y,onChange:e=>ae(e.target.value),className:`h-11 pl-9 text-xs`})]}),(0,L.jsx)($e,{skills:at,query:y,error:n.isError?n.error.message:null,inFlow:new Set(Z.map(e=>e.skill).filter(e=>!!e)),onAdd:e=>dt(e)}),(0,L.jsx)(`h3`,{className:`mt-5 text-sm font-semibold`,children:`workflow.yaml`}),(0,L.jsx)(`p`,{className:`mt-3 text-xs leading-relaxed text-muted-foreground`,children:`Export the workflow to use this chain in another project.`}),(0,L.jsxs)(`details`,{className:`mt-4 min-w-0`,children:[(0,L.jsxs)(`summary`,{"data-slot":`wb-yaml-toggle`,className:`inline-flex min-h-[44px] cursor-pointer items-center rounded-lg border border-border px-3 text-xs font-medium focus-visible:outline-2 focus-visible:outline-ring`,children:[(0,L.jsx)(ce,{"aria-hidden":`true`,className:`mr-2 size-4`}),`View YAML`]}),(0,L.jsx)(`div`,{className:`mt-3 flex justify-end`,children:(0,L.jsx)(tt,{yaml:$})}),(0,L.jsx)(`pre`,{"data-slot":`wb-yaml`,className:`mt-2 max-h-96 overflow-auto rounded-lg border border-border bg-background p-3 font-mono text-[11px] leading-relaxed whitespace-pre text-muted-foreground`,children:$})]})]})]})]}),(0,L.jsx)(Ae,{children:U?.type===`palette`?(0,L.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-border bg-card px-2.5 py-1.5 font-mono text-[13px] font-medium shadow-md`,children:[(0,L.jsx)(a,{"aria-hidden":`true`,className:`size-3.5 text-link-foreground`}),U.skill]}):U?.type===`step`?(0,L.jsx)(Qe,{step:U.step,index:Z.findIndex(e=>e.id===U.step.id),skills:q,overlay:!0}):null})]}),(0,L.jsx)(Ne,{open:oe,onOpenChange:b,children:(0,L.jsxs)(ke,{"data-slot":`wb-add-dialog`,onCloseAutoFocus:e=>{e.preventDefault(),it.current?.focus()},className:`max-h-[85dvh] overflow-y-auto sm:max-w-[660px] [&_button]:min-h-11`,children:[(0,L.jsxs)(Ie,{children:[(0,L.jsx)(Fe,{className:`text-xl font-normal`,children:`Add step`}),(0,L.jsx)(Ce,{className:`sr-only`,children:`Choose a skill to append to this workflow.`})]}),(0,L.jsx)(D,{"aria-label":`Filter skills`,placeholder:`Filter skills…`,value:x,onChange:e=>S(e.target.value)}),n.isError?(0,L.jsxs)(`p`,{role:`alert`,className:`text-sm text-danger`,children:[`Could not load skills: `,n.error.message]}):(0,L.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Available skills`,className:`grid max-h-80 gap-2 overflow-y-auto`,children:[ot.map(e=>(0,L.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3 rounded-lg py-2 has-[:checked]:bg-accent-strong/10 has-[:focus-visible]:outline-2`,children:[(0,L.jsx)(`input`,{type:`radio`,name:`workflow-add-skill`,className:`sr-only`,value:e.name,checked:w===e.name,onChange:()=>T(e.name)}),(0,L.jsxs)(`span`,{className:`min-w-0 break-words text-sm`,children:[(0,L.jsx)(`span`,{className:`block`,children:e.name}),(0,L.jsx)(`span`,{className:`mt-2 block text-xs text-muted-foreground`,children:e.description})]})]},e.name)),ot.length===0?(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:q.length===0?`No skills available in this project.`:`No matching skills.`}):null]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-3`,children:[(0,L.jsx)(i,{variant:`outline`,onClick:()=>b(!1),children:`Cancel`}),(0,L.jsx)(i,{variant:`primary`,disabled:!w||Z.length>=8,onClick:()=>{w&&(dt(w),b(!1))},children:`Add selected skill`})]}),(0,L.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Append the selected skill, then reorder it in the existing canvas.`}),Z.length>=8?(0,L.jsxs)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,children:[`A workflow can contain up to `,8,` steps. Remove a step before adding another.`]}):null]})}),(0,L.jsx)(Se,{open:Xe,onOpenChange:e=>!e&&V(!1),children:(0,L.jsxs)(_e,{"data-slot":`wb-overwrite-dialog`,className:`sw-workflow-confirm sm:max-w-[660px]`,children:[(0,L.jsxs)(xe,{children:[(0,L.jsxs)(ge,{children:[`“`,Q,`” already exists`]}),(0,L.jsx)(he,{children:`Saving overwrites the existing workflow file. There is no undo.`})]}),(0,L.jsxs)(ye,{children:[(0,L.jsx)(be,{children:`Keep the file`}),(0,L.jsx)(ve,{"data-slot":`wb-overwrite-confirm`,className:`bg-danger text-danger-foreground`,onClick:()=>X.mutate(!0),children:`Overwrite`})]})]})}),(0,L.jsx)(Se,{open:et,onOpenChange:e=>!e&&H(!1),children:(0,L.jsxs)(_e,{"data-slot":`wb-delete-dialog`,className:`sw-workflow-confirm sm:max-w-[660px]`,children:[(0,L.jsxs)(xe,{children:[(0,L.jsxs)(ge,{children:[`Delete workflow “`,Q,`”?`]}),(0,L.jsxs)(he,{children:[`Removes `,ut?.path?.split(`/`).pop()??`the saved file`,` from`,` `,(0,L.jsx)(`span`,{className:`font-mono`,children:`.ai/cezar/workflows/`}),`. There is no undo.`]})]}),(0,L.jsxs)(ye,{children:[(0,L.jsx)(be,{children:`Keep the file`}),(0,L.jsx)(ve,{"data-slot":`wb-delete-confirm`,className:`bg-danger text-danger-foreground hover:brightness-[0.96]`,onClick:()=>ct.mutate(Q),children:`Delete workflow`})]})]})})]})}function Ze({steps:e,skills:t,dragging:n,overId:i,activeStepId:a,onRemove:o,onMove:s}){let{setNodeRef:c,isOver:l}=Te({id:R}),u=n&&i===R;return(0,L.jsx)(`div`,{ref:c,"data-slot":`wb-steps`,"data-dragging":n||void 0,className:r(`relative mt-4 rounded-lg transition-colors`,l?`border-accent-strong/60 bg-accent-strong/5`:`border-muted-foreground/25`),children:e.length===0?(0,L.jsx)(`p`,{className:r(`rounded-md px-3 py-10 text-center text-[13px] transition-colors`,l?`text-link-foreground`:`text-muted-foreground`),children:`Drop a skill here — or Import a workflow.yaml`}):(0,L.jsxs)(O,{items:e.map(e=>e.id),strategy:k,children:[(0,L.jsx)(`ol`,{className:`flex flex-col gap-4`,children:e.map((r,c)=>(0,L.jsx)(V,{step:r,index:c,skills:t,dragging:n,insertBefore:n&&i===r.id&&a!==r.id,onRemove:()=>o(c),onMoveUp:c>0?()=>s(c,c-1):void 0,onMoveDown:c<e.length-1?()=>s(c,c+1):void 0},r.id))}),(0,L.jsx)(`div`,{"aria-hidden":`true`,className:r(`absolute inset-x-0 mt-1 h-[3px] rounded-full transition-colors`,u?`bg-accent-strong`:`bg-transparent`)})]})})}function V({step:e,index:t,skills:n,dragging:i,insertBefore:a,onRemove:o,onMoveUp:s,onMoveDown:c}){let{attributes:l,listeners:u,setNodeRef:d,transform:f,transition:p,isDragging:m}=j({id:e.id,data:{type:`step`,step:e}});return(0,L.jsxs)(`li`,{ref:d,style:{transform:T.Transform.toString(f),transition:p},className:r(`relative`,m&&`opacity-40`),children:[a?(0,L.jsx)(`span`,{"aria-hidden":`true`,"data-slot":`wb-drop-line`,className:`pointer-events-none absolute -top-[7px] right-0 left-0 h-[3px] rounded-full bg-accent-strong`}):null,(0,L.jsx)(Qe,{step:e,index:t,skills:n,onRemove:o,onMoveUp:s,onMoveDown:c,gripProps:{...l,...u}})]})}function Qe({step:e,index:t,skills:n,onRemove:a,gripProps:s,onMoveUp:c,onMoveDown:l,overlay:u=!1}){let f=n.find(t=>t.name===e.skill),p=!!e.command,m=e.name??e.skill??e.id,ee=e.prompt?.trim()===`{{task}}`?void 0:e.prompt?.trim(),h=p?`$ ${e.command}${e.onFail?` — on fail retry from "${e.onFail.retry}" (×${e.onFail.max??2})`:``}`:e.skill?ee||f?.description||`Not in this repo or the team skills — the step runs on its plain prompt.`:e.prompt??``,g=e.skill&&!f?`unknown`:null;return(0,L.jsxs)(`div`,{"data-slot":`wb-step`,"data-id":e.id,"data-index":t,className:r(`rounded-lg border border-border bg-background p-4`,u&&`shadow-md`),children:[(0,L.jsxs)(`div`,{"data-slot":`wb-step-heading`,className:`flex min-w-0 items-center gap-2.5`,children:[(0,L.jsx)(`button`,{type:`button`,"data-slot":`wb-step-grip`,"aria-label":`Reorder step ${t+1}: ${m}`,className:`inline-flex size-[26px] shrink-0 cursor-grab items-center justify-center rounded-md text-muted-foreground transition-colors outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50`,...s,children:(0,L.jsx)(`span`,{className:`rounded bg-accent-strong/10 px-2 py-1 font-mono text-[12px] text-link-foreground`,children:String(t+1).padStart(2,`0`)})}),(0,L.jsx)(`div`,{className:`min-w-0 flex-1 break-words text-sm font-medium [overflow-wrap:anywhere]`,children:m}),g?(0,L.jsx)(`span`,{"data-slot":`wb-step-badge`,className:r(`shrink-0 rounded-full border px-2 py-px font-mono text-[11px]`,g===`unknown`&&`border-danger/35 text-danger`),children:g}):null,a?(0,L.jsxs)(S,{children:[(0,L.jsx)(b,{asChild:!0,children:(0,L.jsx)(i,{"data-slot":`wb-step-actions`,variant:`ghost`,size:`icon`,className:`size-[26px]`,"aria-label":`Step ${t+1} actions: ${m}`,children:(0,L.jsx)(d,{"aria-hidden":`true`,className:`size-4`})})}),(0,L.jsx)(x,{align:`end`,children:(0,L.jsxs)(y,{"data-slot":`wb-step-remove`,"aria-label":`Remove step ${t+1}: ${m}`,onSelect:a,children:[(0,L.jsx)(ie,{"aria-hidden":`true`}),` Remove step`]})})]}):null]}),h?(0,L.jsx)(`div`,{"data-slot":`wb-step-summary`,className:`mt-3 break-words text-xs leading-relaxed text-muted-foreground`,children:h}):null,(0,L.jsx)(`p`,{"data-slot":`wb-step-kind`,className:`mt-3 text-[12px] text-link-foreground`,children:p?`Command step${e.onFail?` · Retry ×${e.onFail.max??2}`:``}`:e.skill?`Skill step`:`Prompt step`}),u?null:(0,L.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2 @min-[900px]:hidden`,children:[(0,L.jsxs)(i,{variant:`outline`,size:`sm`,className:`min-h-11`,"aria-label":`Move step ${t+1} up`,disabled:!c,onClick:c,children:[(0,L.jsx)(ae,{"aria-hidden":`true`,className:`size-4`}),`Move up`]}),(0,L.jsxs)(i,{variant:`outline`,size:`sm`,className:`min-h-11`,"aria-label":`Move step ${t+1} down`,disabled:!l,onClick:l,children:[(0,L.jsx)(o,{"aria-hidden":`true`,className:`size-4`}),`Move down`]})]})]})}function $e({skills:e,query:t,error:n,inFlow:r,onAdd:i}){if(n!==null)return(0,L.jsxs)(`p`,{"data-slot":`wb-palette`,className:`mt-2.5 text-xs text-danger`,children:[`Could not load skills: `,n]});let a=Oe(e,t);return(0,L.jsx)(`div`,{"data-slot":`wb-palette`,className:`mt-2.5 flex flex-col gap-1`,children:a.length>0?a.map(e=>(0,L.jsx)(et,{skill:e,inFlow:r.has(e.name),onAdd:i},e.path)):(0,L.jsx)(`p`,{className:`py-1 text-xs leading-relaxed text-soft-foreground`,children:e.length>0?`No skills match.`:(0,L.jsx)(M,{})})})}function et({skill:e,inFlow:t,onAdd:n}){let{attributes:i,listeners:a,setNodeRef:o,isDragging:s}=E({id:`palette:${e.name}`,data:{type:`palette`,skill:e.name}});return(0,L.jsxs)(`div`,{ref:o,"data-slot":`wb-skill`,"data-skill":e.name,"data-in-flow":t||void 0,title:e.description??``,className:r(`flex min-h-11 cursor-grab items-center gap-2 rounded-md py-1 transition-colors hover:bg-muted`,s&&`opacity-40`),...i,...a,children:[(0,L.jsx)(`span`,{className:r(`min-w-0 flex-1 break-words text-xs`,w(e)?`font-semibold text-foreground`:`font-medium text-muted-foreground`),children:e.name}),(0,L.jsx)(`button`,{type:`button`,"data-slot":`wb-skill-add`,"aria-label":`Add ${e.name} to the flow`,title:`Add to the flow`,onClick:()=>n(e.name),className:`inline-flex size-11 shrink-0 items-center justify-center rounded-md text-link-foreground transition-colors outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:(0,L.jsx)(v,{"aria-hidden":`true`,className:`size-3.5`})})]})}function tt({yaml:e}){let[t,n]=(0,N.useState)(!1),r=(0,N.useRef)(null);return(0,N.useEffect)(()=>()=>{r.current!==null&&clearTimeout(r.current)},[]),(0,L.jsx)(`button`,{type:`button`,"data-slot":`wb-copy`,title:`Copy the YAML`,onClick:()=>{navigator.clipboard?.writeText(e).catch(()=>{}),n(!0),r.current!==null&&clearTimeout(r.current),r.current=setTimeout(()=>n(!1),1600)},className:`flex items-center gap-1 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground`,children:t?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(p,{"aria-hidden":`true`,className:`size-3 text-success`}),`Copied`]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(_,{"aria-hidden":`true`,className:`size-3`}),`Copy`]})})}export{B as WorkflowsRoute};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,r as n,t as r}from"./react-runtime-CCIEwYL0.js";import{E as i,N as a}from"./button-CeupvoKG.js";var o=e(t(),1),s=e(n(),1),c=r();function l({src:e,alt:t=``,className:n,...r}){let[l,u]=(0,o.useState)(!1),d=a(e);return(0,o.useEffect)(()=>{if(!l)return;let e=e=>{e.key===`Escape`&&u(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[l]),(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`img`,{...r,src:d,alt:t,loading:`lazy`,onClick:()=>u(!0),className:i(`cursor-zoom-in`,n)}),l?(0,s.createPortal)((0,c.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Image preview`,"data-slot":`image-lightbox`,onClick:()=>u(!1),className:`fixed inset-0 z-[100] flex cursor-zoom-out items-center justify-center bg-black/80 p-4 backdrop-blur-sm`,children:(0,c.jsx)(`img`,{src:d,alt:t,className:`max-h-full max-w-full rounded-md object-contain shadow-2xl`})}),document.body):null]})}export{l as t};
@@ -47,30 +47,26 @@
47
47
  }
48
48
  })()
49
49
  </script>
50
- <script type="module" crossorigin src="/assets/index-DgWWlOLy.js"></script>
50
+ <script type="module" crossorigin src="/assets/index-BOfE8pyD.js"></script>
51
51
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
52
52
  <link rel="modulepreload" crossorigin href="/assets/react-runtime-CCIEwYL0.js">
53
53
  <link rel="modulepreload" crossorigin href="/assets/bundle-mjs-BT31bpU6.js">
54
- <link rel="modulepreload" crossorigin href="/assets/utils-JsL3ZsJf.js">
55
- <link rel="modulepreload" crossorigin href="/assets/button-C_rd7CPp.js">
56
- <link rel="modulepreload" crossorigin href="/assets/alert-dialog-BrpNUwMt.js">
54
+ <link rel="modulepreload" crossorigin href="/assets/button-CeupvoKG.js">
55
+ <link rel="modulepreload" crossorigin href="/assets/live-protocol-Uce2NwEX.js">
56
+ <link rel="modulepreload" crossorigin href="/assets/dropdown-menu-COj_J5wd.js">
57
+ <link rel="modulepreload" crossorigin href="/assets/centered-state-hDsyXrnH.js">
58
+ <link rel="modulepreload" crossorigin href="/assets/cez-idle-D3aj_9lp.js">
57
59
  <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-BHp8sXmF.js">
58
- <link rel="modulepreload" crossorigin href="/assets/status-dot-CqTJHSP9.js">
59
- <link rel="modulepreload" crossorigin href="/assets/nav-row-styles-vp2JbhuJ.js">
60
- <link rel="modulepreload" crossorigin href="/assets/dropdown-menu-BegOZFrj.js">
61
- <link rel="modulepreload" crossorigin href="/assets/popover-BohP6WTx.js">
62
- <link rel="modulepreload" crossorigin href="/assets/textarea-D20O4Pw0.js">
63
- <link rel="modulepreload" crossorigin href="/assets/prompt-templates-Cubdut_C.js">
64
- <link rel="modulepreload" crossorigin href="/assets/format-DpNe3S0A.js">
65
- <link rel="modulepreload" crossorigin href="/assets/preview-state-vuMviq6q.js">
60
+ <link rel="modulepreload" crossorigin href="/assets/status-dot-1PR0i69P.js">
61
+ <link rel="modulepreload" crossorigin href="/assets/nav-row-styles-AoIhhIwf.js">
62
+ <link rel="modulepreload" crossorigin href="/assets/popover-D56fhiXj.js">
63
+ <link rel="modulepreload" crossorigin href="/assets/eye-B8okNWXU.js">
66
64
  <link rel="modulepreload" crossorigin href="/assets/play-CmVAj_fu.js">
67
- <link rel="modulepreload" crossorigin href="/assets/search-x-I9Q8pgUa.js">
68
- <link rel="modulepreload" crossorigin href="/assets/square-terminal-B6RYYieR.js">
69
- <link rel="modulepreload" crossorigin href="/assets/agent-accounts-CFOBMVHc.js">
70
- <link rel="modulepreload" crossorigin href="/assets/skills-DFBiAuJG.js">
65
+ <link rel="modulepreload" crossorigin href="/assets/reference-chip-gQNk-4jc.js">
66
+ <link rel="modulepreload" crossorigin href="/assets/alert-dialog-DfctKUMw.js">
71
67
  <link rel="modulepreload" crossorigin href="/assets/lib-BxQXEXDF.js">
72
68
  <link rel="modulepreload" crossorigin href="/assets/chunk-BO2N2NFS-DE6qKn3r.js">
73
- <link rel="stylesheet" crossorigin href="/assets/index-fBFnuvxu.css">
69
+ <link rel="stylesheet" crossorigin href="/assets/index-D9HpsmdW.css">
74
70
  </head>
75
71
  <body>
76
72
  <div id="root"></div>
@@ -0,0 +1,4 @@
1
+ import{c as e,o as t,u as n}from"./assets/live-protocol-Uce2NwEX.js";import{n as r}from"./assets/cez-idle-D3aj_9lp.js";var i=new Set;function a(e,t){t?i.add(e):i.delete(e),r(`ws`,i.size>0)}var o=`/api/v1/ws`,s=3e3,c=1e3,l=7e4,u=0,d=1;function f(e){let t=new Map,n=new Set,r={},i=!1,f=null,p,m,h,g=()=>{a(r,i||n.size>0)},_=()=>{clearTimeout(h),h=setTimeout(()=>{h=void 0,f?.close()},l)},v=()=>e??`${location.protocol===`https:`?`wss:`:`ws:`}//${location.host}${o}`,y=e=>{f?.readyState===d&&f.send(JSON.stringify(e))},b=()=>{let e=globalThis.WebSocket;if(typeof e!=`function`||f&&(f.readyState===u||f.readyState===d))return;let r=new e(v());f=r,i=!0,g(),r.addEventListener(`open`,()=>{if(r===f){i=!1;for(let e of t.keys())n.add(e);g(),_();for(let e of t.keys())y({type:`subscribe`,topic:e})}}),r.addEventListener(`message`,e=>{if(r!==f)return;_();let i;try{i=JSON.parse(e.data)}catch{return}if(typeof i!=`object`||!i)return;let{type:a,topic:o,data:s}=i;if(a!==`event`||typeof o!=`string`)return;let c=t.get(o);if(c){n.delete(o),g();for(let e of[...c])e(s)}}),r.addEventListener(`close`,()=>{r===f&&(f=null,i=!1,g(),clearTimeout(h),h=void 0,t.size>0&&p===void 0&&(p=setTimeout(()=>{p=void 0,t.size>0&&b()},s)))}),r.addEventListener(`error`,()=>void 0)};return{subscribe(e,r){let i=t.get(e);i||(i=new Set,t.set(e,i));let a=i.size===0;i.add(r),a&&n.add(e),g(),clearTimeout(m),m=void 0,f?a&&y({type:`subscribe`,topic:e}):(clearTimeout(p),p=void 0,b());let o=!0;return()=>{o&&(o=!1,i.delete(r),!(i.size>0)&&(t.delete(e),n.delete(e),g(),y({type:`unsubscribe`,topic:e}),t.size===0&&m===void 0&&(m=setTimeout(()=>{m=void 0,!(t.size>0)&&(clearTimeout(p),p=void 0,clearTimeout(h),h=void 0,f?.close(),f=null)},c))))}}}}function p(n){let r=new Set,i={workspace:{signature:``,lastFrame:0},runs:{signature:``,lastFrame:0}},a=new Map,o=new Map,s=new Map,c,l=!1,u=!1,d=!1,f=!1,p,m=e=>[...r].flatMap(t=>[...t.entries.values()].filter(t=>!t.paused&&(!e||t.demand.kind===e)).map(e=>({doc:t,entry:e}))),h=(e,t)=>{try{e.port.postMessage(t)}catch{T(e)}},g=e=>{if(!(!(e instanceof Error)||e.message!==`authentication required`))for(let t of[...r])h(t,{type:`unavailable`,version:1,epoch:t.epoch,reason:e.message}),T(t)},_=(e,t,n)=>{t.paused=!0,t.unacked=[],t.bytes=0,h(e,{type:`reset`,version:1,epoch:e.epoch,id:t.id,reason:n}),w()},v=(e,t,n)=>{if(`type`in n&&n.type===`event`){if(n.event.seq<=t.sent)return;let r=new TextEncoder().encode(JSON.stringify(n)).length;if(t.bytes+r>1048576){_(e,t,`subscriber fell behind — reload history`);return}t.sent=n.event.seq,t.bytes+=r,t.unacked.push({seq:t.sent,bytes:r})}h(e,{type:`frame`,version:1,epoch:e.epoch,id:t.id,frame:n})},y=e=>{let t=p!==void 0&&e!==p;if(p=e,t)for(let{doc:e,entry:t}of m())_(e,t,`server restarted`)},b=e=>{clearTimeout(e.retry),e.retry=void 0;let t=e.controller;e.controller=void 0,t?.abort()},x=t=>{let r=i[t];if(!r.signature||u)return;b(r);let a=new AbortController;if(r.controller=a,r.lastFrame=Date.now(),t===`workspace`){if(d||f)for(let{doc:e,entry:t}of m(`workspace`))v(e,t,{event:`reconnect`,data:``,id:``});d=!1,f=!1}let o=new Map;if(t===`runs`)for(let{entry:t}of m(`run`)){let n=t.demand,r=o.get(e(n));if(!r||t.ack<r.afterSeq){let{kind:r,...i}=n;o.set(e(i),{...i,afterSeq:t.ack})}}n.stream(t,[...o.values()],n=>{if(!(r.controller!==a||a.signal.aborted)){if(r.lastFrame=Date.now(),`type`in n&&n.type===`ready`&&y(n.generation),`data`in n&&n.event===`ready`)try{let e=JSON.parse(n.data);typeof e.generation==`string`&&y(e.generation)}catch{}t===`workspace`&&`event`in n&&n.event===`ping`&&(d=!0);for(let{doc:r,entry:i}of m(t===`workspace`?`workspace`:`run`))i.demand.kind===`run`&&`type`in n&&`runId`in n&&e(n)!==e(i.demand)||v(r,i,n)}},a.signal).catch(g).finally(()=>{if(!(r.controller!==a||a.signal.aborted||u)){if(r.controller=void 0,t===`workspace`&&d){for(let{doc:e,entry:t}of m(`workspace`))v(e,t,{event:`disconnect`,data:``,id:``});d=!1,f=!0}r.retry=setTimeout(()=>{r.retry=void 0,x(t)},1500)}})},S=(e,t)=>{clearTimeout(t.timer),t.timer=void 0;let r=++t.revision;t.controller.abort(),t.controller=new AbortController,clearTimeout(t.deadline);let i=t.controller,a=t.deadline=setTimeout(()=>i.abort(),1e4);n.read(e,t.controller.signal).then(n=>{if(!(s.get(e)!==t||r!==t.revision))for(let{doc:t,entry:r}of m(`read`))r.demand.kind===`read`&&r.demand.path===e&&h(t,{type:`value`,version:1,epoch:t.epoch,id:r.id,...n})}).catch(g).finally(()=>{clearTimeout(a),s.get(e)===t&&r===t.revision&&(t.deadline=void 0,t.nextAt=Date.now()+t.interval,t.timer=setTimeout(()=>S(e,t),t.interval))})},C=()=>{if(l=!1,u)return;let t=m(`workspace`),f=m(`run`),p=new Set;for(let{doc:t,entry:n}of f){let r=e(n.demand);!p.has(r)&&p.size>=32?_(t,n,`shared task capacity reached`):p.add(r)}let g={workspace:t.length?`workspace`:``,runs:m(`run`).map(({doc:e,entry:t})=>`${e.id}:${e.epoch}:${t.id}`).sort().join(`|`)};for(let e of[`workspace`,`runs`]){let t=i[e];t.signature!==g[e]&&(t.signature=g[e],b(t),t.signature?x(e):e===`workspace`&&(d=!1))}let v=new Set(m(`topic`).map(({entry:e})=>e.demand.topic));for(let[e,t]of a)v.has(e)||(t(),a.delete(e),o.delete(e));for(let e of v)a.has(e)||a.set(e,n.topic(e,t=>{o.set(e,t);for(let{doc:n,entry:r}of m(`topic`))r.demand.kind===`topic`&&r.demand.topic===e&&h(n,{type:`value`,version:1,epoch:n.epoch,id:r.id,value:t})}));let y=new Map;for(let{entry:e}of m(`read`))e.demand.kind===`read`&&y.set(e.demand.path,Math.min(y.get(e.demand.path)??1/0,e.demand.intervalMs));for(let[e,t]of s)y.has(e)||(s.delete(e),clearTimeout(t.timer),clearTimeout(t.deadline),t.controller.abort());for(let[e,t]of y){let n=s.get(e);if(n){t<n.interval&&n.timer&&(clearTimeout(n.timer),n.nextAt=Math.min(n.nextAt,Date.now()+t),n.timer=setTimeout(()=>S(e,n),Math.max(0,n.nextAt-Date.now()))),n.interval=t;continue}let r={controller:new AbortController,revision:0,interval:t,nextAt:Date.now()+t};s.set(e,r),r.timer=setTimeout(()=>S(e,r),t)}r.size||(clearInterval(c),c=void 0)};function w(){!l&&!u&&(l=!0,queueMicrotask(C))}function T(e){r.delete(e),e.port.onmessage=null,e.port.onmessageerror=null;try{e.port.close()}catch{}w()}return{attach:e=>{if(u||r.size>=128)return e.close(),()=>{};let n={port:e,id:``,epoch:-1,seenAt:Date.now(),entries:new Map};return r.add(n),e.onmessageerror=()=>T(n),e.onmessage=({data:e})=>{let r=t.safeParse(e);if(!r.success){T(n);return}let i=r.data;if(!(n.id&&i.documentId!==n.id||i.epoch<n.epoch)){if(i.type===`sync`){n.id=i.documentId;let e=n.epoch!==i.epoch;n.epoch=i.epoch,n.seenAt=Date.now();let t=new Map;for(let r of i.entries){let i=e?void 0:n.entries.get(r.id),a=i??{...r,sent:r.demand.kind===`run`?r.demand.afterSeq:0,ack:r.demand.kind===`run`?r.demand.afterSeq:0,unacked:[],bytes:0,paused:!1};t.set(r.id,a),!i&&r.demand.kind===`topic`&&o.has(r.demand.topic)&&h(n,{type:`value`,version:1,epoch:n.epoch,id:a.id,value:o.get(r.demand.topic)}),!i&&r.demand.kind===`workspace`&&d&&v(n,a,{event:`ping`,data:``,id:``})}if(n.entries=t,!t.size){T(n);return}h(n,{type:`alive`,version:1,epoch:n.epoch}),w()}else if(i.epoch===n.epoch){let e=n.entries.get(i.id);if(!e)return;if(i.type===`ack`&&i.seq<=e.sent&&i.seq>e.ack&&(e.ack=i.seq,e.unacked=e.unacked.filter(t=>t.seq>i.seq?!0:(e.bytes-=t.bytes,!1))),i.type===`refresh`&&e.demand.kind===`read`){let t=s.get(e.demand.path);t&&S(e.demand.path,t)}}}},e.start(),h(n,{type:`hello`,version:1}),c??=setInterval(()=>{for(let e of[...r])Date.now()-e.seenAt>=15e3&&T(e);for(let e of[`workspace`,`runs`])i[e].controller&&Date.now()-i[e].lastFrame>=4e4&&x(e)},1e3),()=>T(n)},dispose(){u=!0;for(let e of[...r])T(e);for(let e of Object.values(i))b(e);for(let e of a.values())e();a.clear(),o.clear();for(let e of s.values())clearTimeout(e.timer),clearTimeout(e.deadline),e.controller.abort();s.clear(),clearInterval(c),c=void 0}}}async function m(e,t,n){if(!e.ok||!e.body)throw Error(`live stream HTTP ${e.status}`);let r=e.body.getReader(),i=new TextDecoder,a=new TextEncoder,o=``,s=[],c=``,l=``,u=0,d=()=>{r.cancel().catch(()=>{})};n.addEventListener(`abort`,d,{once:!0});let f=(e,n)=>{if(u+=a.encode(e).length+n,u>1048576)throw Error(`SSE frame exceeds limit`);if(e===``){s.length&&t({event:c||`message`,data:s.join(`
2
+ `),id:l}),s=[],c=``,u=0;return}if(e.startsWith(`:`))return;let r=e.indexOf(`:`),i=r<0?e:e.slice(0,r),o=r<0?``:e.slice(r+1).replace(/^ /,``);i===`data`?s.push(o):i===`event`?c=o:i===`id`&&!o.includes(`\0`)&&(l=o)};try{for(;;){n.throwIfAborted();let{done:e,value:t}=await r.read();if(e)break;o+=i.decode(t,{stream:!0});let s=0;for(let e=0;e<o.length;e++){let t=o[e];if(t!==`
3
+ `&&t!==`\r`)continue;if(t===`\r`&&e===o.length-1)break;let n=t===`\r`&&o[e+1]===`
4
+ `;f(o.slice(s,e),n?2:1),n&&e++,s=e+1}if(o=o.slice(s),a.encode(o).length+u>1048576)throw Error(`SSE frame exceeds limit`)}n.throwIfAborted()}finally{n.removeEventListener(`abort`,d),await r.cancel().catch(()=>{}),r.releaseLock()}}var h=f(),g=p({async stream(e,t,r,i){let a=await fetch(e===`workspace`?`/api/v1/workspace/events`:`/api/v1/workspace/run-events`,{credentials:`include`,signal:i,...e===`runs`?{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({runs:t})}:{}});if(a.status===401||a.status===403)throw Error(`authentication required`);await m(a,t=>{if(e===`workspace`){r(t);return}if(t.event===`live`)try{let e=n.safeParse(JSON.parse(t.data));e.success&&r(e.data)}catch{}},i)},topic:(e,t)=>h.subscribe(e,t),async read(e,t){let n=await fetch(e,{credentials:`include`,signal:t});if(n.status===401||n.status===403)throw Error(`authentication required`);if(!n.ok)throw Error(`HTTP ${n.status}`);return{value:await n.json()}}}),_=globalThis;_.onconnect=e=>{let t=e.ports[0];t&&g.attach(t)};
@@ -1,179 +0,0 @@
1
- /**
2
- * Tool display model — turns a backend tool name + raw input into the
3
- * `{toolKind, title, subtitle?}` a tool card renders. Computed ONCE here in
4
- * the protocol layer (paseo's pattern), never in components, so the thread,
5
- * activity groups and notifications all say the same thing.
6
- *
7
- * Pure function over untrusted input: tool inputs come off the wire and may
8
- * be null, partial (streamed incrementally) or arbitrarily malformed —
9
- * `toolDisplay` must never throw.
10
- *
11
- * Known names covered (matched case-insensitively so claude's `Bash` and
12
- * opencode's `bash` share one row):
13
- * - claude: Bash, Edit, Write, NotebookEdit, Read, Glob, Grep, WebFetch,
14
- * WebSearch, Task, Agent, Skill, TodoWrite, TaskCreate,
15
- * TaskUpdate, TaskList, mcp__server__tool
16
- * - codex: commandExecution, contextCompaction, fileChange, imageView,
17
- * mcpToolCall, webSearch, plan
18
- * (codex's checklist arrives as the `turn/plan/updated`
19
- * notification, not as a tool call — `todoList` is kept below only
20
- * as tolerance for its non-app-server transports)
21
- * - opencode: bash, edit, write, read, grep, glob, webfetch, task, todowrite
22
- */
23
- /** Longest title/subtitle we emit — display truncation belongs here, not in
24
- * every component that renders a tool line. */
25
- const MAX_LABEL = 120;
26
- function isRecord(value) {
27
- return typeof value === 'object' && value !== null && !Array.isArray(value);
28
- }
29
- /** Collapse whitespace (multi-line commands become one line) and cap length. */
30
- function oneLine(text) {
31
- const collapsed = text.replace(/\s+/g, ' ').trim();
32
- return collapsed.length > MAX_LABEL ? `${collapsed.slice(0, MAX_LABEL - 1)}…` : collapsed;
33
- }
34
- /** First non-empty string among `input[keys...]`, normalized for display. */
35
- function field(input, ...keys) {
36
- if (!isRecord(input))
37
- return undefined;
38
- for (const key of keys) {
39
- const value = input[key];
40
- if (typeof value === 'string' && value.trim() !== '')
41
- return oneLine(value);
42
- }
43
- return undefined;
44
- }
45
- /** claude Bash carries `command: string`; codex commandExecution may carry
46
- * a string or an argv array — join the string members. */
47
- function commandText(input) {
48
- if (!isRecord(input))
49
- return undefined;
50
- const command = input.command;
51
- if (typeof command === 'string' && command.trim() !== '')
52
- return oneLine(command);
53
- if (Array.isArray(command)) {
54
- const argv = command.filter((part) => typeof part === 'string');
55
- if (argv.length > 0)
56
- return oneLine(argv.join(' '));
57
- }
58
- return undefined;
59
- }
60
- /** File paths listed by a codex `fileChange` item (`changes: [{path}]`). */
61
- function changePaths(input) {
62
- if (!isRecord(input) || !Array.isArray(input.changes))
63
- return [];
64
- const paths = [];
65
- for (const change of input.changes) {
66
- if (isRecord(change) && typeof change.path === 'string' && change.path.trim() !== '') {
67
- paths.push(change.path);
68
- }
69
- }
70
- return paths;
71
- }
72
- /** The opencode research heuristic for unknown tools: the first plausible
73
- * human label in the input, in a fixed priority order. */
74
- function heuristicLabel(input) {
75
- return field(input, 'description', 'query', 'url', 'filePath', 'file_path', 'path', 'pattern', 'name');
76
- }
77
- /** Verb + optional object → "Read src/a.ts", or just the verb when the
78
- * input gave us nothing usable. */
79
- function titled(verb, label) {
80
- return label ? `${verb} ${label}` : verb;
81
- }
82
- export function toolDisplay(name, input) {
83
- const key = typeof name === 'string' ? name.toLowerCase() : '';
84
- switch (key) {
85
- case 'bash':
86
- case 'commandexecution':
87
- return {
88
- toolKind: 'execute',
89
- title: titled('Ran', commandText(input)),
90
- subtitle: field(input, 'description'),
91
- };
92
- case 'edit':
93
- case 'multiedit':
94
- return { toolKind: 'edit', title: titled('Edit', field(input, 'file_path', 'filePath', 'path')) };
95
- case 'write':
96
- return { toolKind: 'edit', title: titled('Write', field(input, 'file_path', 'filePath', 'path')) };
97
- case 'notebookedit':
98
- return {
99
- toolKind: 'edit',
100
- title: titled('Edit', field(input, 'notebook_path', 'notebookPath', 'file_path', 'filePath', 'path')),
101
- };
102
- case 'filechange': {
103
- const paths = changePaths(input);
104
- const label = paths.length === 1 ? paths[0] : paths.length > 1 ? `${paths.length} files` : undefined;
105
- return { toolKind: 'edit', title: titled('Edit', label) };
106
- }
107
- case 'read':
108
- return { toolKind: 'read', title: titled('Read', field(input, 'file_path', 'filePath', 'path')) };
109
- case 'imageview':
110
- return { toolKind: 'read', title: titled('View image', field(input, 'path')) };
111
- case 'glob':
112
- case 'grep':
113
- return {
114
- toolKind: 'search',
115
- title: titled('Search', field(input, 'pattern', 'query')),
116
- subtitle: field(input, 'path'),
117
- };
118
- case 'webfetch':
119
- return { toolKind: 'fetch', title: titled('Fetch', field(input, 'url')) };
120
- case 'websearch':
121
- return { toolKind: 'fetch', title: titled('Web search', field(input, 'query')) };
122
- // Sub-agent spawns. claude dispatches these through `Agent` today and
123
- // `Task` historically (opencode uses `task`) — both spellings resolve, and
124
- // the row says which agent, falling back to the subagent type when the
125
- // call carried no description.
126
- case 'task':
127
- case 'agent': {
128
- const verb = key === 'agent' ? 'Agent' : 'Task';
129
- const subagent = field(input, 'subagent_type', 'subagentType');
130
- const label = field(input, 'description', 'prompt') ?? subagent;
131
- return {
132
- toolKind: 'task',
133
- title: label ? `${verb}: ${label}` : verb,
134
- // Don't repeat the subagent type when it is already the title.
135
- subtitle: label === subagent ? undefined : subagent,
136
- };
137
- }
138
- // claude's `Skill` invocation: `{skill, args?}` — the skill name is the
139
- // whole point of the row, so it goes in the title.
140
- case 'skill': {
141
- const skill = field(input, 'skill', 'name', 'command');
142
- return {
143
- toolKind: 'task',
144
- title: skill ? `Skill: ${skill}` : 'Skill',
145
- subtitle: field(input, 'args', 'description'),
146
- };
147
- }
148
- case 'todowrite':
149
- case 'todolist':
150
- case 'plan':
151
- case 'taskcreate':
152
- case 'taskupdate':
153
- case 'tasklist':
154
- return { toolKind: 'plan', title: 'Update plan' };
155
- case 'contextcompaction':
156
- return { toolKind: 'other', title: 'Compacted context' };
157
- case 'mcptoolcall': {
158
- const server = field(input, 'server');
159
- const tool = field(input, 'tool');
160
- if (server && tool)
161
- return { toolKind: 'other', title: `${server}.${tool}` };
162
- return { toolKind: 'other', title: 'MCP tool', subtitle: heuristicLabel(input) };
163
- }
164
- }
165
- // claude/opencode MCP tools are named `mcp__server__tool` → "server.tool".
166
- if (key.startsWith('mcp__')) {
167
- const parts = name.split('__').filter((part) => part !== '');
168
- if (parts.length >= 3) {
169
- return { toolKind: 'other', title: `${parts[1]}.${parts.slice(2).join('__')}` };
170
- }
171
- }
172
- // Unknown tool: keep the backend's name as the title, heuristic subtitle.
173
- return {
174
- toolKind: 'other',
175
- title: typeof name === 'string' && name.trim() !== '' ? oneLine(name) : 'Tool',
176
- subtitle: heuristicLabel(input),
177
- };
178
- }
179
- //# sourceMappingURL=tool-display.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-display.js","sourceRoot":"","sources":["../../src/core/tool-display.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- type AttentionSummary = {
2
- id: string;
3
- hasPendingHumanAsk?: boolean;
4
- };
5
- /** Rebuild display metadata from the same durable evidence as delivery admission.
6
- * Called only for question/receipt appends and root-wait recovery, never token ticks.
7
- * Shared by owned stores and the read-only cold index; no context or process is opened. */
8
- export declare function refreshHumanAskSummary(run: AttentionSummary, dataDir: string): boolean;
9
- export {};
@@ -1,39 +0,0 @@
1
- import { pendingHumanAsk } from '../contract/index.js';
2
- import { readHistoryText } from './history-file.js';
3
- /** Rebuild display metadata from the same durable evidence as delivery admission.
4
- * Called only for question/receipt appends and root-wait recovery, never token ticks.
5
- * Shared by owned stores and the read-only cold index; no context or process is opened. */
6
- export function refreshHumanAskSummary(run, dataDir) {
7
- let next;
8
- try {
9
- const raw = readHistoryText(dataDir, run.id);
10
- if (raw === undefined) {
11
- next = run.hasPendingHumanAsk === true;
12
- }
13
- else {
14
- const events = [];
15
- for (const line of raw.split('\n')) {
16
- if (!line)
17
- continue;
18
- try {
19
- const event = JSON.parse(line);
20
- if (event !== null && typeof event === 'object' && 'type' in event &&
21
- (event.type === 'ask.requested' || event.type === 'human-input-delivered'))
22
- events.push(event);
23
- }
24
- catch { /* Match readEvents: a damaged line does not hide later valid receipts. */ }
25
- }
26
- next = pendingHumanAsk(events) !== undefined;
27
- }
28
- }
29
- catch (error) {
30
- // An unavailable history cannot retract known human attention. Legacy runs with
31
- // no history need no new state; other read errors conservatively request attention.
32
- next = run.hasPendingHumanAsk === true || error.code !== 'ENOENT';
33
- }
34
- if (next === run.hasPendingHumanAsk)
35
- return false;
36
- run.hasPendingHumanAsk = next;
37
- return true;
38
- }
39
- //# sourceMappingURL=human-ask-summary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"human-ask-summary.js","sourceRoot":"","sources":["../../src/runs/human-ask-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;2FAE2F;AAC3F,MAAM,UAAU,sBAAsB,CAAC,GAAqB,EAAE,OAAe;IAC3E,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,GAAG,GAAG,CAAC,kBAAkB,KAAK,IAAI,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;wBAChE,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAiB,CAAC,CAAC;gBAC/G,CAAC;gBAAC,MAAM,CAAC,CAAC,0EAA0E,CAAC,CAAC;YACxF,CAAC;YACD,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gFAAgF;QAChF,oFAAoF;QACpF,IAAI,GAAG,GAAG,CAAC,kBAAkB,KAAK,IAAI,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC/F,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,CAAC,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAClD,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * The one rule for "does this run match what was typed" (#864): the archived-runs page, the store's
3
- * search and the cold reader's search all ask it, so a run found in one place is found in all.
4
- *
5
- * Every whitespace-separated token must match. A token matches a substring of the run's text
6
- * fields. A number — with a leading `#` stripped — matches the prose fields as a substring, the
7
- * id as a prefix, and the reference numbers EXACTLY, never digits inside a URL: `86` finding
8
- * #864 would turn every short query into noise.
9
- *
10
- * Pure and dependency-free on purpose: the cold reader imports it, and the cold reader must stay
11
- * cheap to load.
12
- */
13
- import type { RunSummary } from '../contract/index.js';
14
- /** The shortest query the search routes accept. One character matches nearly every run. */
15
- export declare const MIN_SEARCH_QUERY_LENGTH = 2;
16
- /** The `#N` in a forge URL — `…/pull/774` → 774. Null when the tail is not a number, so a URL
17
- * shape we do not recognise invalidates nothing rather than inventing a key. */
18
- export declare function refNumberFromUrl(url: string): number | null;
19
- /** The query as lowercased, whitespace-split tokens, empties dropped. */
20
- export declare function searchTokens(query: string): string[];
21
- /**
22
- * The tokens SQL may narrow rows with, as `instr(lower(summary), ?) > 0` over the stored summary
23
- * JSON. Only tokens that read the same there: ASCII, since SQLite's `lower()` folds ASCII alone,
24
- * and without `"` or `\`, which JSON escapes. Leaving a token out only widens the prefilter;
25
- * `matchesRunQuery` still checks it.
26
- */
27
- export declare function sqlPrefilterTokens(query: string): string[];
28
- /** Whether every token of `query` matches `run`. A blank query matches nothing. */
29
- export declare function matchesRunQuery(run: RunSummary, query: string): boolean;
@@ -1,63 +0,0 @@
1
- /** The shortest query the search routes accept. One character matches nearly every run. */
2
- export const MIN_SEARCH_QUERY_LENGTH = 2;
3
- /** The `#N` in a forge URL — `…/pull/774` → 774. Null when the tail is not a number, so a URL
4
- * shape we do not recognise invalidates nothing rather than inventing a key. */
5
- export function refNumberFromUrl(url) {
6
- const last = /\/(\d+)\/?$/.exec(url.trim());
7
- const parsed = last ? Number(last[1]) : Number.NaN;
8
- return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
9
- }
10
- /** The query as lowercased, whitespace-split tokens, empties dropped. */
11
- export function searchTokens(query) {
12
- return query.trim().toLowerCase().split(/\s+/).filter((token) => token !== '');
13
- }
14
- /**
15
- * The tokens SQL may narrow rows with, as `instr(lower(summary), ?) > 0` over the stored summary
16
- * JSON. Only tokens that read the same there: ASCII, since SQLite's `lower()` folds ASCII alone,
17
- * and without `"` or `\`, which JSON escapes. Leaving a token out only widens the prefilter;
18
- * `matchesRunQuery` still checks it.
19
- */
20
- export function sqlPrefilterTokens(query) {
21
- return searchTokens(query)
22
- .map((token) => token.replace(/^#/, ''))
23
- .filter((token) => token !== '' && /^[\x20-\x7e]+$/.test(token) && !/["\\]/.test(token));
24
- }
25
- function referenceNumbers(run) {
26
- const numbers = new Set();
27
- for (const url of [run.pullRequestUrl, run.referencedPullRequestUrl, run.referencedIssueUrl]) {
28
- const number = url ? refNumberFromUrl(url) : null;
29
- if (number !== null)
30
- numbers.add(String(number));
31
- }
32
- for (const number of [run.prNumber, run.issueNumber, run.markerRefs?.pr, run.markerRefs?.issue]) {
33
- if (typeof number === 'number' && Number.isInteger(number) && number > 0)
34
- numbers.add(String(number));
35
- }
36
- return numbers;
37
- }
38
- /** Whether every token of `query` matches `run`. A blank query matches nothing. */
39
- export function matchesRunQuery(run, query) {
40
- const tokens = searchTokens(query);
41
- if (tokens.length === 0)
42
- return false;
43
- // The fields a person reads. A number typed is a reference or part of a title, never a digit
44
- // run inside a URL or a uuid: `86` must not find #864 through `…/issues/864` (#864 review).
45
- const prose = [run.title, run.titleSummary, run.branch, run.workflow, run.workflowLabel]
46
- .filter((field) => typeof field === 'string').map((field) => field.toLowerCase());
47
- const urls = [run.pullRequestUrl, run.referencedPullRequestUrl, run.referencedIssueUrl]
48
- .filter((field) => typeof field === 'string').map((field) => field.toLowerCase());
49
- const id = run.id.toLowerCase();
50
- let numbers;
51
- return tokens.every((token) => {
52
- if (prose.some((field) => field.includes(token)))
53
- return true;
54
- const bare = token.replace(/^#/, '');
55
- if (/^\d+$/.test(bare)) {
56
- numbers ??= referenceNumbers(run);
57
- // A pasted id starts with digits as often as letters, so a number may still be its prefix.
58
- return numbers.has(String(Number(bare))) || id.startsWith(bare);
59
- }
60
- return id.includes(token) || urls.some((field) => field.includes(token));
61
- });
62
- }
63
- //# sourceMappingURL=run-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-search.js","sourceRoot":"","sources":["../../src/runs/run-search.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Promotes `open-mercato/skills` (#391) — cezar's built-in default skills source
3
- * (`DEFAULT_SKILLS_REPOS` in `src/config.ts`) that today only surfaces in `--help`. Split out of
4
- * `src/index.ts` so it is testable without importing `index.ts` (which runs `main()` on import).
5
- * It once had a cockpit twin to stay in step with; #603 replaced that with the opt-in
6
- * `packages/web/src/components/skills-import-panel.tsx`, so the terminal is now the only surface
7
- * that renders the promo.
8
- *
9
- * Printed on `serve` start — a few lines in an already-chatty startup block. It has two off
10
- * switches, because a promo that cannot be silenced is a nag:
11
- * - `CEZ_NO_BANNER=1` in the environment, and
12
- * - `dismissedSkillsBanner` in `.ai/cezar/ui-state.json` — written by the cockpit banner until
13
- * #603 removed it. The flag is still honoured, so anyone who dismissed it back then stays
14
- * silenced; nothing writes it today.
15
- * Reading that flag follows the `src/config.ts` rule: a missing/unreadable/malformed state file
16
- * degrades to showing the banner, never to a crash or a blocked startup.
17
- */
18
- export declare const SKILLS_BANNER_LINES: readonly string[];
19
- /** Both off switches in one place. Never throws. */
20
- export declare function shouldShowSkillsBanner(repoRoot: string): Promise<boolean>;
21
- /** The `serve` startup banner. `log` is injectable so the wiring is testable. */
22
- export declare function printSkillsBanner(repoRoot: string, log?: (line?: string) => void): Promise<void>;
@@ -1,41 +0,0 @@
1
- import { readUiState } from './ui-state.js';
2
- /**
3
- * Promotes `open-mercato/skills` (#391) — cezar's built-in default skills source
4
- * (`DEFAULT_SKILLS_REPOS` in `src/config.ts`) that today only surfaces in `--help`. Split out of
5
- * `src/index.ts` so it is testable without importing `index.ts` (which runs `main()` on import).
6
- * It once had a cockpit twin to stay in step with; #603 replaced that with the opt-in
7
- * `packages/web/src/components/skills-import-panel.tsx`, so the terminal is now the only surface
8
- * that renders the promo.
9
- *
10
- * Printed on `serve` start — a few lines in an already-chatty startup block. It has two off
11
- * switches, because a promo that cannot be silenced is a nag:
12
- * - `CEZ_NO_BANNER=1` in the environment, and
13
- * - `dismissedSkillsBanner` in `.ai/cezar/ui-state.json` — written by the cockpit banner until
14
- * #603 removed it. The flag is still honoured, so anyone who dismissed it back then stays
15
- * silenced; nothing writes it today.
16
- * Reading that flag follows the `src/config.ts` rule: a missing/unreadable/malformed state file
17
- * degrades to showing the banner, never to a crash or a blocked startup.
18
- */
19
- export const SKILLS_BANNER_LINES = [
20
- ' 🤖 Make the most of parallel coding with our AI skills',
21
- ' open-mercato/skills: reusable, technology-agnostic agent skills for PR',
22
- ' creation, code review, CI stabilisation, spec writing & more.',
23
- ' cezar already loads them for you — Skills → Refresh in the cockpit gets the latest.',
24
- " To use them outside cezar: npx skills add open-mercato/skills --skill '*'",
25
- ];
26
- /** Both off switches in one place. Never throws. */
27
- export async function shouldShowSkillsBanner(repoRoot) {
28
- if (process.env.CEZ_NO_BANNER === '1')
29
- return false;
30
- const uiState = await readUiState(repoRoot);
31
- return uiState.dismissedSkillsBanner !== true;
32
- }
33
- /** The `serve` startup banner. `log` is injectable so the wiring is testable. */
34
- export async function printSkillsBanner(repoRoot, log = console.log) {
35
- if (!(await shouldShowSkillsBanner(repoRoot)))
36
- return;
37
- for (const line of SKILLS_BANNER_LINES)
38
- log(line);
39
- log();
40
- }
41
- //# sourceMappingURL=skills-banner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-banner.js","sourceRoot":"","sources":["../src/skills-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,0DAA0D;IAC1D,0EAA0E;IAC1E,iEAAiE;IACjE,uFAAuF;IACvF,8EAA8E;CAC/E,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IAC3D,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,qBAAqB,KAAK,IAAI,CAAC;AAChD,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,GAAG,GAA4B,OAAO,CAAC,GAAG;IAE1C,IAAI,CAAC,CAAC,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO;IACtD,KAAK,MAAM,IAAI,IAAI,mBAAmB;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAClD,GAAG,EAAE,CAAC;AACR,CAAC"}