@wjarka/cezarion 0.14.8 → 0.14.9-dev.1004

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 (274) hide show
  1. package/README.md +129 -2
  2. package/dist/application-update/bin-recovery.d.ts +5 -0
  3. package/dist/application-update/bin-recovery.js +96 -0
  4. package/dist/application-update/bin-recovery.js.map +1 -0
  5. package/dist/application-update/discovery.d.ts +22 -0
  6. package/dist/application-update/discovery.js +91 -0
  7. package/dist/application-update/discovery.js.map +1 -0
  8. package/dist/application-update/helper.d.ts +57 -0
  9. package/dist/application-update/helper.js +374 -0
  10. package/dist/application-update/helper.js.map +1 -0
  11. package/dist/application-update/launcher.d.ts +8 -0
  12. package/dist/application-update/launcher.js +53 -0
  13. package/dist/application-update/launcher.js.map +1 -0
  14. package/dist/application-update/lock.d.ts +4 -0
  15. package/dist/application-update/lock.js +70 -0
  16. package/dist/application-update/lock.js.map +1 -0
  17. package/dist/application-update/npm-process.d.ts +17 -0
  18. package/dist/application-update/npm-process.js +133 -0
  19. package/dist/application-update/npm-process.js.map +1 -0
  20. package/dist/application-update/service.d.ts +69 -0
  21. package/dist/application-update/service.js +456 -0
  22. package/dist/application-update/service.js.map +1 -0
  23. package/dist/artifacts/cli.d.ts +1 -0
  24. package/dist/artifacts/cli.js +32 -0
  25. package/dist/artifacts/cli.js.map +1 -0
  26. package/dist/artifacts/lifecycle.d.ts +4 -0
  27. package/dist/artifacts/lifecycle.js +42 -0
  28. package/dist/artifacts/lifecycle.js.map +1 -0
  29. package/dist/artifacts/resolve.d.ts +18 -0
  30. package/dist/artifacts/resolve.js +102 -0
  31. package/dist/artifacts/resolve.js.map +1 -0
  32. package/dist/artifacts/store.d.ts +8 -0
  33. package/dist/artifacts/store.js +323 -0
  34. package/dist/artifacts/store.js.map +1 -0
  35. package/dist/automations/scheduler.d.ts +6 -0
  36. package/dist/automations/scheduler.js +45 -17
  37. package/dist/automations/scheduler.js.map +1 -1
  38. package/dist/automations/store.d.ts +12 -4
  39. package/dist/automations/store.js +199 -22
  40. package/dist/automations/store.js.map +1 -1
  41. package/dist/automations/types.d.ts +2 -0
  42. package/dist/automations/types.js +1 -0
  43. package/dist/automations/types.js.map +1 -1
  44. package/dist/ci-wait/mcp.d.ts +3 -0
  45. package/dist/ci-wait/mcp.js +14 -3
  46. package/dist/ci-wait/mcp.js.map +1 -1
  47. package/dist/contract/application-update.d.ts +32 -0
  48. package/dist/contract/artifacts.d.ts +83 -0
  49. package/dist/contract/ask-schema.d.ts +32 -0
  50. package/dist/contract/ask.d.ts +2 -32
  51. package/dist/contract/automations.d.ts +6 -0
  52. package/dist/contract/conversations.d.ts +165 -0
  53. package/dist/contract/delegation.d.ts +68 -0
  54. package/dist/contract/discovery.d.ts +134 -0
  55. package/dist/contract/events.d.ts +49 -0
  56. package/dist/contract/health.d.ts +12 -0
  57. package/dist/contract/index.d.ts +3 -0
  58. package/dist/contract/index.js +1654 -1454
  59. package/dist/contract/projects.d.ts +40 -0
  60. package/dist/contract/runs.d.ts +186 -0
  61. package/dist/contract/skills.d.ts +33 -0
  62. package/dist/core/agent-runner.d.ts +33 -4
  63. package/dist/core/agent-runner.js +5 -0
  64. package/dist/core/agent-runner.js.map +1 -1
  65. package/dist/core/claude-cli-runner.d.ts +6 -12
  66. package/dist/core/claude-cli-runner.js +90 -20
  67. package/dist/core/claude-cli-runner.js.map +1 -1
  68. package/dist/core/codex-app-server-runner.d.ts +2 -1
  69. package/dist/core/codex-app-server-runner.js +327 -92
  70. package/dist/core/codex-app-server-runner.js.map +1 -1
  71. package/dist/core/codex-app-server-transport.d.ts +13 -1
  72. package/dist/core/codex-app-server-transport.js +58 -17
  73. package/dist/core/codex-app-server-transport.js.map +1 -1
  74. package/dist/core/cursor-acp-runner.d.ts +6 -1
  75. package/dist/core/cursor-acp-runner.js +162 -26
  76. package/dist/core/cursor-acp-runner.js.map +1 -1
  77. package/dist/core/cursor-provider-error.d.ts +3 -0
  78. package/dist/core/cursor-provider-error.js +16 -1
  79. package/dist/core/cursor-provider-error.js.map +1 -1
  80. package/dist/core/input-submissions.d.ts +14 -0
  81. package/dist/core/input-submissions.js +26 -0
  82. package/dist/core/input-submissions.js.map +1 -0
  83. package/dist/core/opencode-server-runner.d.ts +4 -1
  84. package/dist/core/opencode-server-runner.js +156 -26
  85. package/dist/core/opencode-server-runner.js.map +1 -1
  86. package/dist/core/pi-runner.d.ts +2 -1
  87. package/dist/core/pi-runner.js +88 -10
  88. package/dist/core/pi-runner.js.map +1 -1
  89. package/dist/core/provider-auth.d.ts +99 -1
  90. package/dist/core/provider-auth.js +203 -2
  91. package/dist/core/provider-auth.js.map +1 -1
  92. package/dist/delegation/cli.d.ts +1 -0
  93. package/dist/delegation/cli.js +103 -7
  94. package/dist/delegation/cli.js.map +1 -1
  95. package/dist/delegation/conversations.js +13 -5
  96. package/dist/delegation/conversations.js.map +1 -1
  97. package/dist/delegation/input.d.ts +2 -1
  98. package/dist/delegation/input.js +6 -1
  99. package/dist/delegation/input.js.map +1 -1
  100. package/dist/delegation/policy.d.ts +3 -2
  101. package/dist/delegation/policy.js +3 -1
  102. package/dist/delegation/policy.js.map +1 -1
  103. package/dist/delegation/process-liveness.d.ts +66 -0
  104. package/dist/delegation/process-liveness.js +215 -0
  105. package/dist/delegation/process-liveness.js.map +1 -0
  106. package/dist/delegation/provision.d.ts +1 -1
  107. package/dist/delegation/provision.js +10 -5
  108. package/dist/delegation/provision.js.map +1 -1
  109. package/dist/delegation/questions.d.ts +19 -0
  110. package/dist/delegation/questions.js +45 -0
  111. package/dist/delegation/questions.js.map +1 -0
  112. package/dist/delegation/results.d.ts +1 -1
  113. package/dist/delegation/results.js +33 -19
  114. package/dist/delegation/results.js.map +1 -1
  115. package/dist/delegation/routes.d.ts +185 -11
  116. package/dist/delegation/routes.js +6 -2
  117. package/dist/delegation/routes.js.map +1 -1
  118. package/dist/delegation/service.d.ts +16 -5
  119. package/dist/delegation/service.js +161 -13
  120. package/dist/delegation/service.js.map +1 -1
  121. package/dist/delegation/transport.d.ts +228 -65
  122. package/dist/discovery/catalog.d.ts +14 -0
  123. package/dist/discovery/catalog.js +31 -0
  124. package/dist/discovery/catalog.js.map +1 -0
  125. package/dist/discovery/cli.d.ts +8 -0
  126. package/dist/discovery/cli.js +104 -0
  127. package/dist/discovery/cli.js.map +1 -0
  128. package/dist/git-worktree.d.ts +3 -1
  129. package/dist/git-worktree.js +26 -4
  130. package/dist/git-worktree.js.map +1 -1
  131. package/dist/index.js +92 -26
  132. package/dist/index.js.map +1 -1
  133. package/dist/open-url.d.ts +2 -0
  134. package/dist/open-url.js +20 -0
  135. package/dist/open-url.js.map +1 -0
  136. package/dist/release/snapshot.d.ts +3 -3
  137. package/dist/release/snapshot.js +6 -6
  138. package/dist/release/snapshot.js.map +1 -1
  139. package/dist/runs/agent-tmpdir.d.ts +2 -0
  140. package/dist/runs/agent-tmpdir.js +5 -2
  141. package/dist/runs/agent-tmpdir.js.map +1 -1
  142. package/dist/runs/client-request.d.ts +11 -0
  143. package/dist/runs/client-request.js +26 -0
  144. package/dist/runs/client-request.js.map +1 -0
  145. package/dist/runs/delegation-state.d.ts +17 -0
  146. package/dist/runs/event-history.js +6 -0
  147. package/dist/runs/event-history.js.map +1 -1
  148. package/dist/runs/retention.d.ts +7 -2
  149. package/dist/runs/retention.js +39 -7
  150. package/dist/runs/retention.js.map +1 -1
  151. package/dist/runs/store.d.ts +100 -6
  152. package/dist/runs/store.js +245 -2
  153. package/dist/runs/store.js.map +1 -1
  154. package/dist/runs/webhook.d.ts +125 -0
  155. package/dist/runs/webhook.js +256 -0
  156. package/dist/runs/webhook.js.map +1 -0
  157. package/dist/server/provider-auth-runtime.d.ts +30 -4
  158. package/dist/server/provider-auth-runtime.js +71 -6
  159. package/dist/server/provider-auth-runtime.js.map +1 -1
  160. package/dist/server/server.d.ts +8226 -4860
  161. package/dist/server/server.js +309 -15
  162. package/dist/server/server.js.map +1 -1
  163. package/dist/server-install/platforms/ubuntu-vps.d.ts +5 -1
  164. package/dist/server-install/platforms/ubuntu-vps.js +160 -18
  165. package/dist/server-install/platforms/ubuntu-vps.js.map +1 -1
  166. package/dist/server-install/steps.d.ts +4 -2
  167. package/dist/server-install/steps.js +5 -4
  168. package/dist/server-install/steps.js.map +1 -1
  169. package/dist/skills-remote.d.ts +30 -5
  170. package/dist/skills-remote.js +122 -32
  171. package/dist/skills-remote.js.map +1 -1
  172. package/dist/skills.js +15 -6
  173. package/dist/skills.js.map +1 -1
  174. package/dist/task-cli/cli.d.ts +38 -0
  175. package/dist/task-cli/cli.js +580 -0
  176. package/dist/task-cli/cli.js.map +1 -0
  177. package/dist/task-cli/discovery.d.ts +22 -0
  178. package/dist/task-cli/discovery.js +96 -0
  179. package/dist/task-cli/discovery.js.map +1 -0
  180. package/dist/task-cli/http.d.ts +46 -0
  181. package/dist/task-cli/http.js +101 -0
  182. package/dist/task-cli/http.js.map +1 -0
  183. package/dist/task-cli/projections.d.ts +40 -0
  184. package/dist/task-cli/projections.js +45 -0
  185. package/dist/task-cli/projections.js.map +1 -0
  186. package/dist/task-cli/watch.d.ts +78 -0
  187. package/dist/task-cli/watch.js +336 -0
  188. package/dist/task-cli/watch.js.map +1 -0
  189. package/dist/workflows/run.d.ts +160 -2
  190. package/dist/workflows/run.js +1141 -108
  191. package/dist/workflows/run.js.map +1 -1
  192. package/dist/workspace/agent-profiles.d.ts +22 -0
  193. package/dist/workspace/agent-profiles.js +15 -0
  194. package/dist/workspace/agent-profiles.js.map +1 -1
  195. package/dist/workspace/config.d.ts +9 -0
  196. package/dist/workspace/config.js +13 -1
  197. package/dist/workspace/config.js.map +1 -1
  198. package/dist/workspace/projects-cli.js +1 -1
  199. package/dist/workspace/projects.d.ts +24 -1
  200. package/dist/workspace/projects.js +14 -1
  201. package/dist/workspace/projects.js.map +1 -1
  202. package/package.json +5 -5
  203. package/scripts/mock-claude.mjs +64 -2
  204. package/scripts/mock-codex-app-server.mjs +124 -1
  205. package/scripts/mock-cursor-acp.mjs +54 -3
  206. package/scripts/mock-cursor-hang-stdin-late.mjs +35 -0
  207. package/scripts/mock-cursor-hang-stdin.mjs +30 -0
  208. package/scripts/mock-opencode-serve.mjs +102 -2
  209. package/scripts/mock-pi-rpc.mjs +82 -3
  210. package/web/dist/assets/agent-accounts-CerclGiO.js +1 -0
  211. package/web/dist/assets/centered-state-DH8qtCz-.js +43 -0
  212. package/web/dist/assets/collapsible-De2G0xqQ.js +1 -0
  213. package/web/dist/assets/commit-list-CQubP1iS.js +1 -0
  214. package/web/dist/assets/compare-variants-C_NijJvg.js +1 -0
  215. package/web/dist/assets/{diff-tRE59UNb2.js → diff-8M5HlDxq2.js} +2 -2
  216. package/web/dist/assets/diff-controls-B6ok0TtQ.js +1 -0
  217. package/web/dist/assets/{diff-stat-Cgnl_hYF.js → diff-stat-D1AODN2a.js} +1 -1
  218. package/web/dist/assets/{diff-view-DN1ort7Q.js → diff-view-Bs5Gh7UF.js} +2 -2
  219. package/web/dist/assets/dropdown-menu-7KGQMoFj.js +1 -0
  220. package/web/dist/assets/git-toolbar-DqbapMXr.js +1 -0
  221. package/web/dist/assets/github-lMHiuYSx.js +1 -0
  222. package/web/dist/assets/{image-preview-C2JGcBlC.js → image-preview-jzHoEyLM.js} +1 -1
  223. package/web/dist/assets/index-D4OJTArJ.js +7 -0
  224. package/web/dist/assets/index-D5NkwqY7.css +1 -0
  225. package/web/dist/assets/markdown-DvbymqXz.js +2 -0
  226. package/web/dist/assets/pill-BL6ugwXo.js +1 -0
  227. package/web/dist/assets/project-router-ChC5Rb-Y.js +1 -0
  228. package/web/dist/assets/prompt-templates-j8qlK7c-.js +15 -0
  229. package/web/dist/assets/repo-git-BbPAgkqb.js +1 -0
  230. package/web/dist/assets/{run-diff-CyG0Nciv.js → run-diff-BuATgZpx.js} +2 -2
  231. package/web/dist/assets/run-header-DuAWswYM.js +1 -0
  232. package/web/dist/assets/skills-DiC2XrU1.js +1 -0
  233. package/web/dist/assets/{tab-link-BWNp3mLY.js → tab-link-BmGKj9Rt.js} +1 -1
  234. package/web/dist/assets/task-changes-CP9kPnsy.js +1 -0
  235. package/web/dist/assets/task-commits-D6NfTw5r.js +1 -0
  236. package/web/dist/assets/task-files-W-b_gtcb.js +2 -0
  237. package/web/dist/assets/task-thread-Bw_nQuTx.css +1 -0
  238. package/web/dist/assets/task-thread-Q7Nj33DH.js +9 -0
  239. package/web/dist/assets/textarea-ByZ-txS7.js +1 -0
  240. package/web/dist/assets/thread-loading-DHT9p5o5.js +1 -0
  241. package/web/dist/assets/token-metrics-k4XoovDS.js +1 -0
  242. package/web/dist/assets/utils-BTFBhZ55.js +64 -0
  243. package/web/dist/assets/workflows-DqQszPHJ.js +11 -0
  244. package/web/dist/assets/{zoomable-image-Z3JDnm0b.js → zoomable-image-Ba6y6Wyl.js} +1 -1
  245. package/web/dist/index.html +14 -14
  246. package/web/dist/assets/agent-accounts-BZm_2WAv.js +0 -1
  247. package/web/dist/assets/alert-dialog-B422RI-k.js +0 -43
  248. package/web/dist/assets/collapsible-Cy_Fmkrd.js +0 -1
  249. package/web/dist/assets/commit-list-Dcnk7TnI.js +0 -1
  250. package/web/dist/assets/compare-variants-Ciqwvd_f.js +0 -1
  251. package/web/dist/assets/diff-controls-BGrXGi7O.js +0 -1
  252. package/web/dist/assets/dropdown-menu-dwDGT8MM.js +0 -1
  253. package/web/dist/assets/git-toolbar-UiHnGvE0.js +0 -1
  254. package/web/dist/assets/github-D-MrkbJ7.js +0 -1
  255. package/web/dist/assets/ibm-plex-mono-regular-BF3vfe7_.ttf +0 -0
  256. package/web/dist/assets/index-BszfYvBq.js +0 -7
  257. package/web/dist/assets/index-CWh4pKP3.css +0 -1
  258. package/web/dist/assets/markdown-C_IcKVQd.js +0 -2
  259. package/web/dist/assets/pill-BsbO6G7y.js +0 -1
  260. package/web/dist/assets/project-router-DbLkll25.js +0 -1
  261. package/web/dist/assets/prompt-templates-BlTGJB5W.js +0 -15
  262. package/web/dist/assets/repo-git-Bm3s6Why.js +0 -1
  263. package/web/dist/assets/run-header-IFyIGCey.js +0 -1
  264. package/web/dist/assets/skills-C-C4DVFY.js +0 -1
  265. package/web/dist/assets/task-changes-D2PHtWUW.js +0 -1
  266. package/web/dist/assets/task-commits-N5u9U0_R.js +0 -1
  267. package/web/dist/assets/task-files-BS7c7CFm.js +0 -2
  268. package/web/dist/assets/task-thread-BQFdz1dJ.css +0 -1
  269. package/web/dist/assets/task-thread-DGM2dZV-.js +0 -9
  270. package/web/dist/assets/textarea-FjaU370i.js +0 -1
  271. package/web/dist/assets/thread-loading-77sJ8Yu_.js +0 -1
  272. package/web/dist/assets/token-metrics-Clxh03bE.js +0 -1
  273. package/web/dist/assets/utils-PYYcpCFZ.js +0 -64
  274. package/web/dist/assets/workflows-Czl0ZfXH.js +0 -11
@@ -0,0 +1,580 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { open as openFile } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ import { parseArgs } from 'node:util';
5
+ import { apiRunSchema, archiveFinishedResponseSchema, cancelResponseSchema, changesPayloadSchema, finishResponseSchema, messageResponseSchema, runHistoryContextSchema, runRecordSchema, runStatusSchema, skillSchema, } from '../contract/index.js';
6
+ import { openUrl } from '../open-url.js';
7
+ import { discoverCockpit } from './discovery.js';
8
+ import { invalidResponse, refuse, request, TaskCliError, threadUrl } from './http.js';
9
+ import { projectListRow, projectStatus } from './projections.js';
10
+ import { readLog, waitForRuns } from './watch.js';
11
+ /**
12
+ * `cez task` — start, watch and steer cockpit tasks from a terminal or a bot (#504, spec
13
+ * 2026-09-24-cez-task-cli). A thin JSON client over the cockpit's own run routes: one JSON
14
+ * object per invocation, and an exit code a caller can branch on without parsing a status.
15
+ */
16
+ export const EXIT = { ok: 0, failed: 1, refused: 2, timeout: 3, usage: 64 };
17
+ const COMMON = {
18
+ url: { type: 'string', help: '<origin> Cockpit to use instead of discovery (also CEZ_URL).' },
19
+ repo: { type: 'string', help: '<dir> Checkout whose cockpit to find (default: cwd).' },
20
+ help: { type: 'boolean', help: ' Show help; needs no cockpit.' },
21
+ };
22
+ const TASK_TEXT_MAX_CHARS = 100_000;
23
+ const DEFAULT_TIMEOUT_SECONDS = 600;
24
+ const MAX_TIMEOUT_SECONDS = 1_800;
25
+ const TIMEOUT_FLAG = { type: 'string', help: `<1-${MAX_TIMEOUT_SECONDS}> Give up after this many seconds (default ${DEFAULT_TIMEOUT_SECONDS}).` };
26
+ export const OPERATIONS = {
27
+ start: {
28
+ args: "--task-file <path|-> | '<task>'",
29
+ description: 'Start a task in the cockpit serving this checkout.',
30
+ positionals: [0, 1],
31
+ flags: {
32
+ 'task-file': { type: 'string', help: '<path|-> Read the task from a file, or stdin with -.' },
33
+ 'request-id': { type: 'string', help: '<UUID> Retry-safe id; reuse it when retrying this start.' },
34
+ workflow: { type: 'string', help: '<name> Workflow (default quick-task).' },
35
+ skill: { type: 'string', help: '<name> Run one discovered skill instead of a workflow.' },
36
+ backend: { type: 'string', help: '<id> claude | codex | opencode | pi | cursor.' },
37
+ model: { type: 'string', help: '<model> Model override.' },
38
+ effort: { type: 'string', help: '<level> Reasoning effort.' },
39
+ autonomous: { type: 'boolean', help: ' Never park for input; run to completion.' },
40
+ 'no-worktree': { type: 'boolean', help: ' Run in the repo working tree, not a worktree.' },
41
+ wait: { type: 'boolean', help: ' Then wait until the task settles (see wait).' },
42
+ 'timeout-seconds': TIMEOUT_FLAG,
43
+ notify: { type: 'boolean', help: ' POST status changes to the project webhook (default when it has one).' },
44
+ 'no-notify': { type: 'boolean', help: ' Do not notify the project webhook.' },
45
+ },
46
+ },
47
+ list: {
48
+ args: '',
49
+ description: 'List tasks, newest first.',
50
+ positionals: [0, 0],
51
+ flags: {
52
+ status: { type: 'string', help: '<s>[,<s>…] Only these statuses.' },
53
+ limit: { type: 'string', help: '<n> At most n rows (default 20).' },
54
+ all: { type: 'boolean', help: ' Include archived tasks.' },
55
+ full: { type: 'boolean', help: ' Print contract ApiRun rows.' },
56
+ },
57
+ },
58
+ status: {
59
+ args: '<id>',
60
+ description: 'Show one task.',
61
+ positionals: [1, 1],
62
+ flags: { full: { type: 'boolean', help: ' Print the contract ApiRun.' } },
63
+ },
64
+ log: {
65
+ args: '<id>',
66
+ description: "Print a task's recent transcript as JSON lines, oldest first.",
67
+ positionals: [1, 1],
68
+ flags: {
69
+ since: { type: 'string', help: '<seq> Only events after this seq.' },
70
+ 'max-chars': { type: 'string', help: '<n> Keep the newest lines within n characters (default 8000).' },
71
+ follow: { type: 'boolean', help: ' Keep streaming until the task ends or the timeout.' },
72
+ 'timeout-seconds': TIMEOUT_FLAG,
73
+ },
74
+ },
75
+ wait: {
76
+ args: '<id>...',
77
+ description: 'Block until the tasks settle; exit 0 done/review, 1 failed/cancelled, 3 timeout.',
78
+ positionals: [1, 32],
79
+ flags: {
80
+ mode: { type: 'string', help: '<any|all> Return on the first task or on all of them (default all).' },
81
+ until: { type: 'string', help: '<settled|attention> Also stop on waiting or a pending question (attention).' },
82
+ 'timeout-seconds': TIMEOUT_FLAG,
83
+ },
84
+ },
85
+ send: {
86
+ args: "<id> '<text>' | <id> --text-file <path|->",
87
+ description: 'Steer a task: deliver, queue or (with --resume) reopen.',
88
+ positionals: [1, 2],
89
+ flags: {
90
+ 'text-file': { type: 'string', help: '<path|-> Read the text from a file, or stdin with -.' },
91
+ resume: { type: 'boolean', help: ' Reopen a closed session with this text.' },
92
+ notify: { type: 'boolean', help: ' Also turn the project webhook on for this task.' },
93
+ },
94
+ },
95
+ notify: {
96
+ args: "<id> [--message '<note>' | --message-file <path|->]",
97
+ description: 'Hand a task to the project webhook (on), or stop notifying it (--off).',
98
+ positionals: [1, 1],
99
+ flags: {
100
+ off: { type: 'boolean', help: ' Stop notifying the webhook about this task.' },
101
+ message: { type: 'string', help: "'<note>' Note for the webhook's task.subscribed delivery." },
102
+ 'message-file': { type: 'string', help: '<path|-> Read the note from a file, or stdin with -.' },
103
+ },
104
+ },
105
+ stop: { args: '<id>', description: 'Cancel a task.', positionals: [1, 1], flags: {} },
106
+ finish: { args: '<id>', description: 'Close a waiting session as done.', positionals: [1, 1], flags: {} },
107
+ archive: { args: '<id>', description: 'Archive a task.', positionals: [1, 1], flags: {} },
108
+ unarchive: { args: '<id>', description: 'Restore an archived task.', positionals: [1, 1], flags: {} },
109
+ 'archive-finished': { args: '', description: 'Archive all finished tasks.', positionals: [0, 0], flags: {} },
110
+ diff: {
111
+ args: '<id>',
112
+ description: "Show a task's changes.",
113
+ positionals: [1, 1],
114
+ flags: { stat: { type: 'boolean', help: ' Per-file counts instead of the patch.' } },
115
+ },
116
+ open: {
117
+ args: '<id>',
118
+ description: "Print (and open) a task's thread URL.",
119
+ positionals: [1, 1],
120
+ flags: { 'no-open': { type: 'boolean', help: ' Print the URL only.' } },
121
+ },
122
+ };
123
+ function usage() {
124
+ return { operations: Object.entries(OPERATIONS).map(([name, op]) => ({ name, synopsis: `cez task ${name} ${op.args}`.trim() })) };
125
+ }
126
+ function usageError(error) {
127
+ throw new TaskCliError(EXIT.usage, { code: 'invalid_input', error, usage: usage() });
128
+ }
129
+ export function taskHelp(operation) {
130
+ const names = operation ? [operation] : Object.keys(OPERATIONS);
131
+ const flags = new Map();
132
+ for (const name of names)
133
+ for (const [flag, spec] of Object.entries(OPERATIONS[name].flags))
134
+ flags.set(flag, spec);
135
+ for (const [flag, spec] of Object.entries(COMMON))
136
+ flags.set(flag, spec);
137
+ return [
138
+ 'cezar task — start, watch and steer cockpit tasks from the terminal', '', 'Usage:',
139
+ ...names.flatMap((name) => {
140
+ const op = OPERATIONS[name];
141
+ return [` cez task ${name} ${op.args}`.trimEnd(), ` ${op.description}`];
142
+ }), '', 'Options:',
143
+ ...[...flags].map(([flag, spec]) => ` --${flag} ${spec.help}`), '',
144
+ ...(names.includes('start') ? [
145
+ 'Safe task input (file or stdin):',
146
+ ' cez task start --task-file task.md',
147
+ " cez task start --task-file - <<'EOF'",
148
+ 'Fix the `cez task` docs; keep $(example) literal.',
149
+ 'EOF', '',
150
+ 'POSIX shells expand backticks and $() in double-quoted arguments',
151
+ 'before the CLI receives the text. Do not put raw backticks in double-quoted task arguments.',
152
+ 'Use --task-file PATH or --task-file - with a quoted heredoc delimiter as above.',
153
+ "For short tasks, a single-quoted positional argument still works: cez task start 'Fix the typo'.", '',
154
+ ] : []),
155
+ 'Commands find the running cockpit that serves this checkout (ports 4321-4370) and print JSON.',
156
+ 'notify: with a task webhook set in Settings → General, start notifies it unless --no-notify;',
157
+ 'the webhook gets task.status, task.question, task.activity and task.subscribed POSTs.',
158
+ 'Exit codes: 0 ok · 1 task failed/cancelled or message not delivered · 2 no cockpit or refused ·',
159
+ '3 timed out · 64 usage error.',
160
+ ].join('\n');
161
+ }
162
+ async function readStdin() {
163
+ const chunks = [];
164
+ let size = 0;
165
+ for await (const chunk of process.stdin) {
166
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
167
+ size += buffer.length;
168
+ if (size > TASK_TEXT_MAX_CHARS * 4)
169
+ usageError('stdin is larger than the 100000-character limit');
170
+ chunks.push(buffer);
171
+ }
172
+ return Buffer.concat(chunks, size).toString('utf8');
173
+ }
174
+ async function readTextFile(path) {
175
+ let handle;
176
+ try {
177
+ handle = await openFile(path, 'r');
178
+ }
179
+ catch {
180
+ usageError(`cannot read ${path}`);
181
+ }
182
+ try {
183
+ const buffer = Buffer.alloc(TASK_TEXT_MAX_CHARS * 4 + 1);
184
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
185
+ if (bytesRead > TASK_TEXT_MAX_CHARS * 4)
186
+ usageError(`${path} is larger than the 100000-character limit`);
187
+ return buffer.subarray(0, bytesRead).toString('utf8');
188
+ }
189
+ finally {
190
+ await handle.close();
191
+ }
192
+ }
193
+ /** A positional, or `--*-file <path|->`; never both, never empty. */
194
+ async function textArgument(io, operation, positional, file, what) {
195
+ if (positional !== undefined && file !== undefined)
196
+ usageError(`${operation} takes the ${what} as an argument or a file, not both`);
197
+ const text = file === undefined ? positional : file === '-' ? await (io.stdin ?? readStdin)() : await readTextFile(file);
198
+ if (text === undefined || !text.trim())
199
+ usageError(`${operation} is missing the ${what}`);
200
+ if (text.length > TASK_TEXT_MAX_CHARS)
201
+ usageError(`${what} is longer than ${TASK_TEXT_MAX_CHARS} characters`);
202
+ return text;
203
+ }
204
+ function parseOperation(argv) {
205
+ const [name, ...rest] = argv;
206
+ if (name === undefined)
207
+ usageError('missing operation');
208
+ const operation = OPERATIONS[name];
209
+ if (!operation)
210
+ usageError(`unknown operation '${name}'`);
211
+ const options = Object.fromEntries(Object.entries({ ...operation.flags, ...COMMON }).map(([flag, spec]) => [flag, { type: spec.type, ...(spec.multiple ? { multiple: true } : {}) }]));
212
+ let parsed;
213
+ try {
214
+ parsed = parseArgs({ args: rest, options, allowPositionals: true, strict: true });
215
+ }
216
+ catch (error) {
217
+ usageError(`${name}: ${error instanceof Error ? error.message : 'invalid arguments'}`);
218
+ }
219
+ const values = parsed.values;
220
+ if (!values.help) {
221
+ const [min, max] = operation.positionals;
222
+ if (parsed.positionals.length < min)
223
+ usageError(`${name} is missing a positional`);
224
+ if (parsed.positionals.length > max)
225
+ usageError(`${name} has an extra argument`);
226
+ }
227
+ return { name, values, positionals: parsed.positionals };
228
+ }
229
+ function positiveInt(value, flag, max) {
230
+ if (value === undefined)
231
+ return undefined;
232
+ if (typeof value !== 'string' || !/^\d+$/.test(value) || Number(value) < 1 || Number(value) > max) {
233
+ usageError(`--${flag} must be an integer from 1 to ${max}`);
234
+ }
235
+ return Number(value);
236
+ }
237
+ function nonNegativeInt(value, flag) {
238
+ if (value === undefined)
239
+ return undefined;
240
+ if (typeof value !== 'string' || !/^\d+$/.test(value))
241
+ usageError(`--${flag} must be a non-negative integer`);
242
+ return Number(value);
243
+ }
244
+ function timeoutMs(values) {
245
+ return (positiveInt(values['timeout-seconds'], 'timeout-seconds', MAX_TIMEOUT_SECONDS) ?? DEFAULT_TIMEOUT_SECONDS) * 1_000;
246
+ }
247
+ function oneOf(value, flag, allowed, fallback) {
248
+ if (value === undefined)
249
+ return fallback;
250
+ if (typeof value !== 'string' || !allowed.includes(value))
251
+ usageError(`--${flag} must be one of ${allowed.join(', ')}`);
252
+ return value;
253
+ }
254
+ function statuses(value) {
255
+ if (typeof value !== 'string')
256
+ return undefined;
257
+ const list = value.split(',').map((entry) => entry.trim()).filter(Boolean);
258
+ const invalid = list.find((entry) => !runStatusSchema.safeParse(entry).success);
259
+ if (invalid)
260
+ usageError(`unknown status '${invalid}'`);
261
+ return new Set(list);
262
+ }
263
+ /** Every flag check `execute` makes, run up front so a bad flag never waits on discovery. */
264
+ function validateFlags(name, values) {
265
+ if (name === 'start') {
266
+ if (values.skill !== undefined && values.workflow !== undefined)
267
+ usageError('--skill and --workflow cannot be used together');
268
+ if (typeof values.skill === 'string' && !values.skill.trim())
269
+ usageError('--skill must name a skill');
270
+ if (values.notify && values['no-notify'])
271
+ usageError('--notify and --no-notify cannot be used together');
272
+ }
273
+ if (name === 'notify') {
274
+ if (values.message !== undefined && values['message-file'] !== undefined)
275
+ usageError('notify takes the note as --message or --message-file, not both');
276
+ if (values.off && (values.message !== undefined || values['message-file'] !== undefined))
277
+ usageError('--off takes no note');
278
+ }
279
+ if (name === 'list') {
280
+ statuses(values.status);
281
+ positiveInt(values.limit, 'limit', 1_000);
282
+ }
283
+ if (name === 'wait') {
284
+ oneOf(values.mode, 'mode', ['any', 'all'], 'all');
285
+ oneOf(values.until, 'until', ['settled', 'attention'], 'settled');
286
+ }
287
+ if (name === 'log') {
288
+ nonNegativeInt(values.since, 'since');
289
+ positiveInt(values['max-chars'], 'max-chars', 1_000_000);
290
+ }
291
+ if (name === 'wait' || name === 'log' || (name === 'start' && values.wait))
292
+ timeoutMs(values);
293
+ }
294
+ async function getRun(cockpit, id) {
295
+ const result = await request(cockpit, `/runs/${encodeURIComponent(id)}`);
296
+ if (result.status !== 200)
297
+ refuse(result);
298
+ const run = apiRunSchema.safeParse(result.data);
299
+ return run.success ? run.data : invalidResponse('run');
300
+ }
301
+ async function listRuns(cockpit) {
302
+ const result = await request(cockpit, '/runs');
303
+ if (result.status !== 200)
304
+ refuse(result);
305
+ const runs = apiRunSchema.array().safeParse(result.data);
306
+ return runs.success ? runs.data : invalidResponse('run list');
307
+ }
308
+ /** The latest valid unanswered question, from the same derivation the cockpit renders. */
309
+ async function pendingQuestion(cockpit, id) {
310
+ const result = await request(cockpit, `/runs/${encodeURIComponent(id)}/history-context`);
311
+ const context = runHistoryContextSchema.safeParse(result.data);
312
+ if (result.status !== 200 || !context.success)
313
+ return undefined;
314
+ const ask = [...context.data.contextEvents].reverse().find((event) => event.type === 'ask.requested');
315
+ return ask?.questions;
316
+ }
317
+ async function start(cockpit, io, values, task, print) {
318
+ const waitMs = values.wait ? timeoutMs(values) : undefined;
319
+ const requestId = values['request-id'] ?? randomUUID();
320
+ const skill = values.skill;
321
+ // `--notify` is an explicit opt-in the server may refuse (no webhook: 400 with a hint). The
322
+ // implicit default only opts in where the project has a webhook, so a bot on a fresh project
323
+ // is never blocked (#589).
324
+ const notify = values['no-notify'] ? false : values.notify ? true : cockpit.hasWebhook ? true : undefined;
325
+ let warning;
326
+ if (skill !== undefined) {
327
+ // Discovery is advisory: the catalog can change before a queued run executes. The server
328
+ // handles missing skills with a plain prompt, and idempotent retries still go to POST /runs.
329
+ const unverified = `could not check whether skill "${skill}" is available; the run may use the plain prompt`;
330
+ try {
331
+ const catalog = await request(cockpit, '/skills?wait=1');
332
+ if (catalog.status === 200) {
333
+ const skills = skillSchema.array().safeParse(catalog.data);
334
+ warning = skills.success
335
+ ? skills.data.some((entry) => entry.name === skill)
336
+ ? undefined
337
+ : `skill "${skill}" is not currently available; the run may use the plain prompt`
338
+ : unverified;
339
+ }
340
+ else {
341
+ warning = unverified;
342
+ }
343
+ }
344
+ catch {
345
+ warning = unverified;
346
+ }
347
+ }
348
+ const result = await request(cockpit, '/runs', {
349
+ body: {
350
+ task,
351
+ ...(skill === undefined
352
+ ? { workflow: values.workflow ?? 'quick-task' }
353
+ : { steps: [{ id: 'task', name: skill, skill, prompt: '{{task}}' }] }),
354
+ ...(values.backend === undefined ? {} : { runner: values.backend }),
355
+ ...(values.model === undefined ? {} : { model: values.model }),
356
+ ...(values.effort === undefined ? {} : { effort: values.effort }),
357
+ ...(values.autonomous ? { autonomous: true } : {}),
358
+ ...(values['no-worktree'] ? { worktree: false } : {}),
359
+ ...(notify === undefined ? {} : { notify }),
360
+ clientRequestId: requestId,
361
+ },
362
+ });
363
+ if (result.status !== 200 && result.status !== 201)
364
+ refuse(result);
365
+ const run = runRecordSchema.safeParse(result.data);
366
+ if (!run.success)
367
+ invalidResponse('start');
368
+ const started = {
369
+ id: run.data.id,
370
+ url: threadUrl(cockpit, run.data.id),
371
+ status: run.data.status,
372
+ created: result.status === 201,
373
+ requestId,
374
+ notify: run.data.notify === true,
375
+ ...(warning === undefined ? {} : { warning }),
376
+ ...(run.data.branch === undefined ? {} : { branch: run.data.branch }),
377
+ };
378
+ if (waitMs === undefined) {
379
+ print(started);
380
+ return EXIT.ok;
381
+ }
382
+ const waited = await waitForRuns(cockpit, [run.data.id], { mode: 'all', until: 'settled', timeoutMs: waitMs, pollMs: io.pollMs });
383
+ const final = waited.runs[0];
384
+ print({ ...started, ...final, timedOut: waited.timedOut });
385
+ return waited.exitCode;
386
+ }
387
+ async function setNotify(cockpit, id, notify, message) {
388
+ const result = await request(cockpit, `/runs/${encodeURIComponent(id)}/notify`, {
389
+ body: { notify, ...(message === undefined ? {} : { message }) },
390
+ });
391
+ if (result.status !== 200)
392
+ refuse(result);
393
+ const run = runRecordSchema.safeParse(result.data);
394
+ return run.success ? run.data : invalidResponse('notify');
395
+ }
396
+ async function send(cockpit, values, id, text, print) {
397
+ const path = `/runs/${encodeURIComponent(id)}`;
398
+ // Before the message, so the status change it causes is already reported.
399
+ const notified = values.notify ? { notify: (await setNotify(cockpit, id, true, undefined)).notify === true } : {};
400
+ const delivered = await request(cockpit, `${path}/messages`, { body: { text } });
401
+ if (delivered.status === 200) {
402
+ const answer = messageResponseSchema.safeParse(delivered.data);
403
+ if (!answer.success)
404
+ invalidResponse('message');
405
+ const delivery = 'delivered' in answer.data ? 'delivered' : 'queued' in answer.data ? 'queued' : 'deferred';
406
+ print({ id, delivery, ...notified });
407
+ return EXIT.ok;
408
+ }
409
+ const closed = delivered.status === 409 && delivered.data?.error === 'session closed';
410
+ if (!closed)
411
+ refuse(delivered);
412
+ if (!values.resume) {
413
+ print({ id, delivery: 'not-delivered', reason: 'session closed', next: `cez task send ${id} '…' --resume`, ...notified });
414
+ return EXIT.failed;
415
+ }
416
+ const resumed = await request(cockpit, `${path}/continue`, { body: { text } });
417
+ if (resumed.status !== 200)
418
+ refuse(resumed);
419
+ print({ id, delivery: 'resumed', ...notified });
420
+ return EXIT.ok;
421
+ }
422
+ async function execute(name, cockpit, io, values, positionals, text, print) {
423
+ const id = positionals[0];
424
+ const path = `/runs/${encodeURIComponent(id)}`;
425
+ switch (name) {
426
+ case 'start':
427
+ return start(cockpit, io, values, text, print);
428
+ case 'send':
429
+ return send(cockpit, values, id, text, print);
430
+ case 'notify': {
431
+ const run = await setNotify(cockpit, id, !values.off, text);
432
+ print({ id, notify: run.notify === true, ...(text === undefined ? {} : { message: true }) });
433
+ return EXIT.ok;
434
+ }
435
+ case 'wait': {
436
+ const mode = oneOf(values.mode, 'mode', ['any', 'all'], 'all');
437
+ const until = oneOf(values.until, 'until', ['settled', 'attention'], 'settled');
438
+ const waited = await waitForRuns(cockpit, positionals, { mode, until, timeoutMs: timeoutMs(values), pollMs: io.pollMs });
439
+ print({ runs: waited.runs, timedOut: waited.timedOut });
440
+ return waited.exitCode;
441
+ }
442
+ case 'log': {
443
+ const since = nonNegativeInt(values.since, 'since') ?? 0;
444
+ const maxChars = positiveInt(values['max-chars'], 'max-chars', 1_000_000) ?? 8_000;
445
+ // An unknown run is the history route's 404, passed through. Without --follow the replay
446
+ // ends at its boundary; the deadline is only a backstop there.
447
+ return readLog(cockpit, id, {
448
+ afterSeq: since, maxChars, follow: values.follow === true,
449
+ deadline: Date.now() + (values.follow ? timeoutMs(values) : 45_000),
450
+ print: (line) => io.stdout(line),
451
+ });
452
+ }
453
+ case 'status': {
454
+ const run = await getRun(cockpit, id);
455
+ if (values.full) {
456
+ print(run);
457
+ return EXIT.ok;
458
+ }
459
+ const question = run.hasPendingHumanAsk ? await pendingQuestion(cockpit, id) : undefined;
460
+ print(projectStatus(run, threadUrl(cockpit, id), question));
461
+ return EXIT.ok;
462
+ }
463
+ case 'list': {
464
+ const wanted = statuses(values.status);
465
+ const limit = positiveInt(values.limit, 'limit', 1_000) ?? 20;
466
+ const runs = (await listRuns(cockpit))
467
+ .filter((run) => values.all || !run.archived)
468
+ .filter((run) => !wanted || wanted.has(run.status))
469
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
470
+ print({ runs: runs.slice(0, limit).map((run) => (values.full ? run : projectListRow(run))), total: runs.length });
471
+ return EXIT.ok;
472
+ }
473
+ case 'stop': {
474
+ const result = await request(cockpit, `${path}/cancel`, { body: {} });
475
+ const answer = cancelResponseSchema.safeParse(result.data);
476
+ if (result.status !== 200)
477
+ refuse(result);
478
+ if (!answer.success)
479
+ invalidResponse('cancel');
480
+ print({ id, cancelled: answer.data.cancelled });
481
+ return EXIT.ok;
482
+ }
483
+ case 'finish': {
484
+ const result = await request(cockpit, `${path}/finish`, { body: {} });
485
+ if (result.status !== 200)
486
+ refuse(result);
487
+ if (!finishResponseSchema.safeParse(result.data).success)
488
+ invalidResponse('finish');
489
+ print({ id, finished: true });
490
+ return EXIT.ok;
491
+ }
492
+ case 'archive':
493
+ case 'unarchive': {
494
+ const archived = name === 'archive';
495
+ const result = await request(cockpit, `${path}/archive`, { body: { archived } });
496
+ if (result.status !== 200)
497
+ refuse(result);
498
+ const run = runRecordSchema.safeParse(result.data);
499
+ if (!run.success)
500
+ invalidResponse('archive');
501
+ print({ id: run.data.id, archived: run.data.archived === true });
502
+ return EXIT.ok;
503
+ }
504
+ case 'archive-finished': {
505
+ const result = await request(cockpit, '/runs/archive-finished', { method: 'POST' });
506
+ if (result.status !== 200)
507
+ refuse(result);
508
+ const answer = archiveFinishedResponseSchema.safeParse(result.data);
509
+ if (!answer.success)
510
+ invalidResponse('archive-finished');
511
+ print(answer.data);
512
+ return EXIT.ok;
513
+ }
514
+ case 'diff': {
515
+ if (values.stat) {
516
+ const result = await request(cockpit, `${path}/changes`);
517
+ if (result.status !== 200)
518
+ refuse(result);
519
+ const changes = changesPayloadSchema.safeParse(result.data);
520
+ if (!changes.success)
521
+ invalidResponse('changes');
522
+ print({ id, stat: changes.data.stat, files: changes.data.files.map((file) => ({ path: file.path, status: file.status, adds: file.adds, dels: file.dels })) });
523
+ return EXIT.ok;
524
+ }
525
+ const result = await request(cockpit, `${path}/diff`);
526
+ if (result.status !== 200)
527
+ refuse(result);
528
+ print({ id, diff: typeof result.data === 'string' ? result.data : invalidResponse('diff') });
529
+ return EXIT.ok;
530
+ }
531
+ case 'open': {
532
+ const run = await getRun(cockpit, id);
533
+ const url = threadUrl(cockpit, run.id);
534
+ if (!values['no-open'])
535
+ (io.open ?? openUrl)(url);
536
+ print({ id: run.id, url, opened: !values['no-open'] });
537
+ return EXIT.ok;
538
+ }
539
+ default:
540
+ return usageError(`unknown operation '${name}'`);
541
+ }
542
+ }
543
+ export async function runTaskCommand(argv, env, io = { stdout: (line) => console.log(line) }) {
544
+ const print = (value) => io.stdout(JSON.stringify(value));
545
+ try {
546
+ if (argv.length === 1 && (argv[0] === '-h' || argv[0] === '--help')) {
547
+ io.stdout(taskHelp());
548
+ return EXIT.ok;
549
+ }
550
+ const { name, values, positionals } = parseOperation(argv);
551
+ if (values.help) {
552
+ io.stdout(taskHelp(name));
553
+ return EXIT.ok;
554
+ }
555
+ // Input is judged before any cockpit is looked for: a usage error is exit 64 whether or not
556
+ // a cockpit is running, and stdin is read once, here.
557
+ const text = name === 'start'
558
+ ? await textArgument(io, 'start', positionals[0], values['task-file'], 'task')
559
+ : name === 'send'
560
+ ? await textArgument(io, 'send', positionals[1], values['text-file'], 'text')
561
+ : name === 'notify' && (values.message !== undefined || values['message-file'] !== undefined)
562
+ ? await textArgument(io, 'notify', values.message, values['message-file'], 'note')
563
+ : undefined;
564
+ validateFlags(name, values);
565
+ const cockpit = await (io.discover ?? discoverCockpit)({
566
+ url: values.url ?? (env.CEZ_URL?.trim() || undefined),
567
+ repoDir: resolve(values.repo ?? process.cwd()),
568
+ });
569
+ return await execute(name, cockpit, io, values, positionals, text, print);
570
+ }
571
+ catch (error) {
572
+ if (error instanceof TaskCliError) {
573
+ print(error.body);
574
+ return error.exitCode;
575
+ }
576
+ print({ code: 'internal', error: error instanceof Error ? error.message : String(error) });
577
+ return EXIT.refused;
578
+ }
579
+ }
580
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/task-cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type Cockpit } from './http.ts';
2
+ /**
3
+ * Which cockpit serves this checkout (#504, spec 2026-09-24-cez-task-cli). Zero config: probe the
4
+ * range `pickPort` can land on and match the registry's project roots against this repo. Never
5
+ * starts a server and never writes anything — a missing cockpit is an answer, not a fallback.
6
+ */
7
+ /** The ports `cez` can bind: 4321 plus the 49 `pickPort` tries after it. */
8
+ export declare const COCKPIT_PORTS: readonly number[];
9
+ /**
10
+ * The main checkout that owns `dir`. A task worktree's common git dir is the parent repo's
11
+ * `.git`, so this is what maps `.ai/cezar/worktrees/<id>` back to the project that ran it.
12
+ * Submodules instead keep their git dir under `.git/modules/` and record `core.worktree`.
13
+ */
14
+ export declare function checkoutRoot(dir: string): Promise<string>;
15
+ export interface DiscoverOptions {
16
+ /** `--url` / `CEZ_URL`: skip the probe. */
17
+ url?: string;
18
+ repoDir: string;
19
+ ports?: readonly number[];
20
+ timeoutMs?: number;
21
+ }
22
+ export declare function discoverCockpit(options: DiscoverOptions): Promise<Cockpit>;