loopable-cli 0.2.1 → 0.3.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 (134) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/_connectorId-CDCuSgpN.js +1 -0
  3. package/.output/public/assets/_loopId-DOnIsVTW.js +1 -0
  4. package/.output/public/assets/_taskId-BO5MZnlZ.js +1 -0
  5. package/.output/public/assets/agents-CBozi7oi.js +1 -0
  6. package/.output/public/assets/alert-Bn_wjgTX.js +1 -0
  7. package/.output/public/assets/button-K3ypIhAZ.js +1 -0
  8. package/.output/public/assets/card-DiVnaTIE.js +1 -0
  9. package/.output/public/assets/chevron-right-BrctLtFK.js +1 -0
  10. package/.output/public/assets/connection-status-DKWelvLO.js +1 -0
  11. package/.output/public/assets/connector-icon-CEbdE71G.js +1 -0
  12. package/.output/public/assets/connectors-JyX3IzJj.js +1 -0
  13. package/.output/public/assets/gaps-PjmcbaWo.js +1 -0
  14. package/.output/public/assets/inbox-CujRR0Cz.js +1 -0
  15. package/.output/public/assets/index-C9SQ_Baq.js +16 -0
  16. package/.output/public/assets/loop-form-Dw3cuTzw.js +1 -0
  17. package/.output/public/assets/loops-DcEfZa2_.js +1 -0
  18. package/.output/public/assets/manifests-yJpevyye.js +1 -0
  19. package/.output/public/assets/new-CwsnNuRW.js +1 -0
  20. package/.output/public/assets/page-bvnfRMum.js +1 -0
  21. package/.output/public/assets/play-yHLs4DjK.js +1 -0
  22. package/.output/public/assets/plus-Ber25lrU.js +1 -0
  23. package/.output/public/assets/preload-helper-BoU_7EQC.js +3 -0
  24. package/.output/public/assets/{refresh-cw-C3xBnKfy.js → refresh-cw-BzSY7M8I.js} +1 -1
  25. package/.output/public/assets/rotate-ccw-DLv9EfCX.js +1 -0
  26. package/.output/public/assets/runners-DzX-RU3i.js +2 -0
  27. package/.output/public/assets/select-C9grIFwG.js +1 -0
  28. package/.output/public/assets/setting-fields-DUc3npgh.js +3 -0
  29. package/.output/public/assets/styles-B9B98zLk.css +2 -0
  30. package/.output/public/assets/switch-DwABVI6d.js +1 -0
  31. package/.output/public/assets/task-list-Ddk8-qt7.js +1 -0
  32. package/.output/public/assets/textarea-Ds-gIYUQ.js +1 -0
  33. package/.output/public/assets/time-goBWd-5J.js +1 -0
  34. package/.output/public/assets/use-live-tasks-DZNNuECy.js +1 -0
  35. package/.output/public/assets/useCompositeListItem-P4Nmmn7j.js +1 -0
  36. package/.output/public/assets/usePositioner-B7i9Ejzh.js +1 -0
  37. package/.output/server/_chunks/ssr-renderer.mjs +1 -1
  38. package/.output/server/{_connectorId-C9yydJrC.mjs → _connectorId-COuQN02a.mjs} +198 -188
  39. package/.output/server/_libs/@base-ui/react+[...].mjs +1410 -804
  40. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  41. package/.output/server/_libs/lucide-react.mjs +93 -84
  42. package/.output/server/_libs/next-themes.mjs +1 -1
  43. package/.output/server/_libs/sonner.mjs +1 -1
  44. package/.output/server/_loopId-CZh6_Yhr.mjs +310 -0
  45. package/.output/server/_ssr/{agents-DG643yoJ.mjs → agents-B_qo1gpL.mjs} +195 -6
  46. package/.output/server/_ssr/{agents-C7B6RJ6-.mjs → agents-Bz10gz_m.mjs} +8 -8
  47. package/.output/server/_ssr/agents-CjbOUp3Z.mjs +206 -0
  48. package/.output/server/_ssr/{alert-DQvzE7bu.mjs → alert-C2WBWfzo.mjs} +2 -2
  49. package/.output/server/_ssr/card-r1cV-PCN.mjs +36 -0
  50. package/.output/server/_ssr/{client-BtVRVhQ2.mjs → client-Dk3SD8Il.mjs} +5 -1
  51. package/.output/server/_ssr/connection-status-BogAL-Fj.mjs +32 -0
  52. package/.output/server/_ssr/{connections-Df-aDpfJ.mjs → connections-Cqvb6Gw2.mjs} +372 -325
  53. package/.output/server/_ssr/connector-icon-DrhVbhs6.mjs +190 -0
  54. package/.output/server/_ssr/connectors-BfS5tQKr.mjs +81 -0
  55. package/.output/server/_ssr/{connectors-e0mf2pMs.mjs → connectors-DJI-rzPU.mjs} +10 -10
  56. package/.output/server/_ssr/{createServerRpc-DPDrnFdH.mjs → createServerRpc-DDrp2nLT.mjs} +2 -2
  57. package/.output/server/_ssr/{gaps-Cz76ZicM.mjs → gaps-CcvHiLcj.mjs} +15 -7
  58. package/.output/server/_ssr/inbox-D1ef761v.mjs +178 -0
  59. package/.output/server/_ssr/loop-form-DWwOR05R.mjs +346 -0
  60. package/.output/server/_ssr/{loops-D8WuK7Ke.mjs → loops-6WhUe_lc.mjs} +37 -27
  61. package/.output/server/_ssr/loops-DHPjzG-t.mjs +217 -0
  62. package/.output/server/_ssr/new-ChKBdcXJ.mjs +245 -0
  63. package/.output/server/_ssr/page-DZVxKvdn.mjs +120 -0
  64. package/.output/server/_ssr/{router-54IDWTVz.mjs → router-DdwREiOf.mjs} +162 -489
  65. package/.output/server/_ssr/runners-CK9Cx9fS.mjs +217 -0
  66. package/.output/server/_ssr/runners-CrznFPHt.mjs +140 -0
  67. package/.output/server/_ssr/{runners-Cj6z9Mqh.mjs → runners-W-pgo5yo.mjs} +5 -5
  68. package/.output/server/_ssr/{secrets-CRnpwGBh.mjs → secrets-CV5scFlt.mjs} +2 -2
  69. package/.output/server/_ssr/select-BtndHhHb.mjs +76 -0
  70. package/.output/server/_ssr/{setting-fields-DzBlslan.mjs → setting-fields-LNgywAW7.mjs} +25 -20
  71. package/.output/server/_ssr/ssr.mjs +43 -42
  72. package/.output/server/_ssr/{start-Vq3Oan3v.mjs → start-C_j-e4vF.mjs} +9 -4
  73. package/.output/server/_ssr/{switch-1pnd_bPJ.mjs → switch-odxNO_S4.mjs} +3 -3
  74. package/.output/server/_ssr/task-list-Dnmq_WeE.mjs +150 -0
  75. package/.output/server/_ssr/{tasks-Qtml5TlK.mjs → tasks-D-kXLgVP.mjs} +13 -13
  76. package/.output/server/_ssr/{tasks-BDqznm57.mjs → tasks-D7aUvA33.mjs} +44 -17
  77. package/.output/server/_ssr/{textarea-CHJTKtsJ.mjs → textarea-D2c_vTIC.mjs} +2 -2
  78. package/.output/server/_ssr/time-Cy8TZP0Z.mjs +13 -0
  79. package/.output/server/_ssr/use-live-tasks-BzhTkEOL.mjs +40 -0
  80. package/.output/server/_tanstack-start-manifest_v-2HUdn-2E.mjs +166 -0
  81. package/.output/server/_taskId-D3KkNJW1.mjs +263 -0
  82. package/.output/server/index.mjs +199 -164
  83. package/README.md +36 -6
  84. package/dist/cli.mjs +161 -8
  85. package/dist/dispatcher.mjs +671 -285
  86. package/dist/runner.mjs +333 -46
  87. package/drizzle/0025_prompt_tasks_done.sql +2 -0
  88. package/drizzle/0026_guidance_into_prompt.sql +3 -0
  89. package/drizzle/0027_relative_folders.sql +5 -0
  90. package/drizzle/0028_runner_version.sql +5 -0
  91. package/drizzle/meta/_journal.json +29 -1
  92. package/package.json +4 -2
  93. package/.output/public/assets/_connectorId-CkygNLny.js +0 -1
  94. package/.output/public/assets/_loopId-Cshlc5Ja.js +0 -1
  95. package/.output/public/assets/_taskId-BKDIJ_Fg.js +0 -1
  96. package/.output/public/assets/alert-BT2EVMJP.js +0 -1
  97. package/.output/public/assets/arrow-left-CWUZt6k2.js +0 -1
  98. package/.output/public/assets/arrow-right-dy_oOg_c.js +0 -1
  99. package/.output/public/assets/connection-status-DCqqmY_6.js +0 -1
  100. package/.output/public/assets/connector-icon-BUoK6Cru.js +0 -1
  101. package/.output/public/assets/connectors-CeLBtEtg.js +0 -1
  102. package/.output/public/assets/external-link-DC11orFA.js +0 -1
  103. package/.output/public/assets/gaps-BtFoD7mF.js +0 -1
  104. package/.output/public/assets/inbox-BYNjkNDJ.js +0 -1
  105. package/.output/public/assets/index-0yP3Jn_G.js +0 -18
  106. package/.output/public/assets/loader-B4Epchm_.js +0 -1
  107. package/.output/public/assets/loop-form-DnSJNc1k.js +0 -1
  108. package/.output/public/assets/loops-1CvbqO6m.js +0 -1
  109. package/.output/public/assets/new-m5NlqYQT.js +0 -1
  110. package/.output/public/assets/play-DD4xQgvi.js +0 -1
  111. package/.output/public/assets/preload-helper-CfdAYKD7.js +0 -3
  112. package/.output/public/assets/rolldown-runtime-CbXtAM7H.js +0 -1
  113. package/.output/public/assets/runners-D8QVl-Y6.js +0 -1
  114. package/.output/public/assets/select-Cppu-hti.js +0 -1
  115. package/.output/public/assets/setting-fields-bJ_gTG7Q.js +0 -3
  116. package/.output/public/assets/styles-ClTGaXU0.css +0 -2
  117. package/.output/public/assets/switch-hRIbNGOj.js +0 -1
  118. package/.output/public/assets/task-list-BAxjcVgr.js +0 -1
  119. package/.output/public/assets/textarea-Fyuzi6Vp.js +0 -1
  120. package/.output/public/assets/trash-2-BXZzBsoV.js +0 -1
  121. package/.output/public/assets/useValueChanged-VVyq4hb9.js +0 -1
  122. package/.output/server/_loopId-B0VG-eBC.mjs +0 -301
  123. package/.output/server/_ssr/connection-status-BZr3Y-IC.mjs +0 -31
  124. package/.output/server/_ssr/connector-icon-WvxwZ5TF.mjs +0 -56
  125. package/.output/server/_ssr/connectors-BU0IiRge.mjs +0 -107
  126. package/.output/server/_ssr/inbox-CAUBa1I3.mjs +0 -114
  127. package/.output/server/_ssr/loop-form-FqSaXiHl.mjs +0 -413
  128. package/.output/server/_ssr/loops-Dqoebe8q.mjs +0 -222
  129. package/.output/server/_ssr/new-bBsVaWD6.mjs +0 -169
  130. package/.output/server/_ssr/runners-D2UAdLyj.mjs +0 -106
  131. package/.output/server/_ssr/runners-DGWaVvWi.mjs +0 -116
  132. package/.output/server/_ssr/task-list-_qgBS9LU.mjs +0 -187
  133. package/.output/server/_tanstack-start-manifest_v-CvheE7ZF.mjs +0 -131
  134. package/.output/server/_taskId-V4QLBO2N.mjs +0 -256
@@ -1,131 +0,0 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-CvheE7ZF.js
2
- var tsrStartManifest = () => ({ routes: {
3
- __root__: {
4
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/__root.tsx",
5
- children: [
6
- "/",
7
- "/connectors/$connectorId",
8
- "/inbox/$taskId",
9
- "/loops/$loopId",
10
- "/loops/new",
11
- "/agents/",
12
- "/connectors/",
13
- "/inbox/",
14
- "/loops/",
15
- "/machines/",
16
- "/runners/",
17
- "/api/runners/claim",
18
- "/api/runners/heartbeat",
19
- "/api/runners/hello",
20
- "/api/connectors/$connectorId/authorize",
21
- "/api/connectors/$connectorId/callback",
22
- "/api/runners/jobs/$taskId/complete",
23
- "/api/runners/jobs/$taskId/log"
24
- ],
25
- preloads: [
26
- "/assets/index-0yP3Jn_G.js",
27
- "/assets/rolldown-runtime-CbXtAM7H.js",
28
- "/assets/preload-helper-CfdAYKD7.js",
29
- "/assets/select-Cppu-hti.js",
30
- "/assets/useValueChanged-VVyq4hb9.js"
31
- ],
32
- scripts: [{ attrs: {
33
- type: "module",
34
- async: !0,
35
- src: "/assets/index-0yP3Jn_G.js"
36
- } }]
37
- },
38
- "/connectors/$connectorId": {
39
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/connectors/$connectorId.tsx",
40
- children: void 0,
41
- preloads: [
42
- "/assets/_connectorId-CkygNLny.js",
43
- "/assets/arrow-left-CWUZt6k2.js",
44
- "/assets/connector-icon-BUoK6Cru.js",
45
- "/assets/external-link-DC11orFA.js",
46
- "/assets/loader-B4Epchm_.js",
47
- "/assets/refresh-cw-C3xBnKfy.js",
48
- "/assets/trash-2-BXZzBsoV.js",
49
- "/assets/setting-fields-bJ_gTG7Q.js",
50
- "/assets/connection-status-DCqqmY_6.js",
51
- "/assets/alert-BT2EVMJP.js"
52
- ]
53
- },
54
- "/inbox/$taskId": {
55
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/inbox/$taskId.tsx",
56
- children: void 0,
57
- preloads: [
58
- "/assets/_taskId-BKDIJ_Fg.js",
59
- "/assets/arrow-left-CWUZt6k2.js",
60
- "/assets/task-list-BAxjcVgr.js",
61
- "/assets/external-link-DC11orFA.js",
62
- "/assets/loader-B4Epchm_.js",
63
- "/assets/alert-BT2EVMJP.js"
64
- ]
65
- },
66
- "/loops/$loopId": {
67
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/loops/$loopId.tsx",
68
- children: void 0,
69
- preloads: [
70
- "/assets/_loopId-Cshlc5Ja.js",
71
- "/assets/arrow-left-CWUZt6k2.js",
72
- "/assets/loop-form-DnSJNc1k.js",
73
- "/assets/task-list-BAxjcVgr.js",
74
- "/assets/play-DD4xQgvi.js",
75
- "/assets/refresh-cw-C3xBnKfy.js",
76
- "/assets/switch-hRIbNGOj.js",
77
- "/assets/alert-BT2EVMJP.js",
78
- "/assets/gaps-BtFoD7mF.js"
79
- ]
80
- },
81
- "/loops/new": {
82
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/loops/new.tsx",
83
- children: void 0,
84
- preloads: [
85
- "/assets/new-m5NlqYQT.js",
86
- "/assets/arrow-left-CWUZt6k2.js",
87
- "/assets/arrow-right-dy_oOg_c.js",
88
- "/assets/loop-form-DnSJNc1k.js",
89
- "/assets/connector-icon-BUoK6Cru.js"
90
- ]
91
- },
92
- "/connectors/": {
93
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/connectors/index.tsx",
94
- children: void 0,
95
- preloads: [
96
- "/assets/connectors-CeLBtEtg.js",
97
- "/assets/arrow-right-dy_oOg_c.js",
98
- "/assets/connector-icon-BUoK6Cru.js",
99
- "/assets/connection-status-DCqqmY_6.js"
100
- ]
101
- },
102
- "/inbox/": {
103
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/inbox/index.tsx",
104
- children: void 0,
105
- preloads: [
106
- "/assets/inbox-BYNjkNDJ.js",
107
- "/assets/task-list-BAxjcVgr.js",
108
- "/assets/play-DD4xQgvi.js",
109
- "/assets/textarea-Fyuzi6Vp.js"
110
- ]
111
- },
112
- "/loops/": {
113
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/loops/index.tsx",
114
- children: void 0,
115
- preloads: [
116
- "/assets/loops-1CvbqO6m.js",
117
- "/assets/connector-icon-BUoK6Cru.js",
118
- "/assets/trash-2-BXZzBsoV.js",
119
- "/assets/switch-hRIbNGOj.js",
120
- "/assets/alert-BT2EVMJP.js",
121
- "/assets/gaps-BtFoD7mF.js"
122
- ]
123
- },
124
- "/runners/": {
125
- filePath: "/Users/bytedance/codex-projects/loopable/src/routes/runners/index.tsx",
126
- children: void 0,
127
- preloads: ["/assets/runners-D8QVl-Y6.js", "/assets/alert-BT2EVMJP.js"]
128
- }
129
- } });
130
- //#endregion
131
- export { tsrStartManifest };
@@ -1,256 +0,0 @@
1
- import { i as __toESM } from "./_runtime.mjs";
2
- import { U as require_jsx_runtime, W as require_react } from "./_libs/@base-ui/react+[...].mjs";
3
- import { f as Link, m as useRouter } from "./_libs/@tanstack/react-router+[...].mjs";
4
- import { a as connectorAction, o as connectorManifest } from "./_ssr/connections-Df-aDpfJ.mjs";
5
- import { B as ArrowLeft, C as ExternalLink, E as CircleStop, g as Loader, x as FileCode } from "./_libs/lucide-react.mjs";
6
- import { n as toast } from "./_libs/sonner.mjs";
7
- import { B as Card, H as CardHeader, R as Badge, U as CardTitle, V as CardContent, c as Route$12, j as stopTask, m as isTaskActive, p as useLiveTasks, z as Button$1 } from "./_ssr/router-54IDWTVz.mjs";
8
- import { n as AlertDescription, r as AlertTitle, t as Alert } from "./_ssr/alert-DQvzE7bu.mjs";
9
- import { i as taskTitle, r as TaskStateLabel, t as KIND_LABEL } from "./_ssr/task-list-_qgBS9LU.mjs";
10
- //#region node_modules/.nitro/vite/services/ssr/assets/_taskId-V4QLBO2N.js
11
- var import_react = /* @__PURE__ */ __toESM(require_react());
12
- var import_jsx_runtime = require_jsx_runtime();
13
- function TaskPage() {
14
- const { task, log } = Route$12.useLoaderData();
15
- const writer = connectorManifest(task.actionConnectorId);
16
- const action = connectorAction(task.actionConnectorId, task.actionId);
17
- useLiveTasks([task]);
18
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19
- className: "flex flex-col gap-6",
20
- children: [
21
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
22
- to: "/inbox",
23
- className: "flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground",
24
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowLeft, { className: "size-4" }), "Inbox"]
25
- }),
26
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
27
- className: "flex items-start gap-4",
28
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
29
- className: "flex-1",
30
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
31
- className: "text-xl font-semibold tracking-tight",
32
- children: taskTitle(task)
33
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
34
- className: "mt-1 text-sm text-muted-foreground",
35
- children: task.loopId ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
36
- task.sourceRef,
37
- " ·",
38
- " ",
39
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
40
- to: "/loops/$loopId",
41
- params: { loopId: task.loopId },
42
- className: "underline",
43
- children: task.loopName
44
- })
45
- ] }) : task.loopName
46
- })]
47
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
48
- className: "flex flex-col items-end gap-2",
49
- children: [
50
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TaskStateLabel, { state: task.state }),
51
- task.dryRun ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
52
- variant: "outline",
53
- children: "Dry run"
54
- }) : null,
55
- isTaskActive(task.state) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StopButton, { task }) : null
56
- ]
57
- })]
58
- }),
59
- task.error ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Alert, {
60
- variant: task.state === "failed" ? "destructive" : void 0,
61
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertTitle, { children: task.state === "failed" ? "This run failed" : task.state === "cancelled" ? "Stopped before it finished" : "Waiting to try again" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDescription, {
62
- className: "whitespace-pre-wrap",
63
- children: task.error
64
- })]
65
- }) : null,
66
- task.state === "skipped" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Alert, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertTitle, { children: "Nothing was written" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDescription, { children: "The agent judged there was nothing worth posting, so Loopable stayed quiet." })] }) : null,
67
- task.output ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardHeader, {
68
- className: "flex flex-row items-center gap-3",
69
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
70
- className: "flex-1 text-base",
71
- children: task.state === "done" ? "What was written" : "What the agent wrote"
72
- }), task.resultUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button$1, {
73
- variant: "outline",
74
- size: "sm",
75
- nativeButton: false,
76
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
77
- href: task.resultUrl,
78
- target: "_blank",
79
- rel: "noreferrer"
80
- }),
81
- children: [
82
- "See it on ",
83
- writer?.name ?? task.actionConnectorId,
84
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExternalLink, {})
85
- ]
86
- }) : null]
87
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardContent, {
88
- className: "flex flex-col gap-4",
89
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
90
- className: "whitespace-pre-wrap break-words text-sm",
91
- children: task.output
92
- }), task.comments.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comments, { comments: task.comments }) : null]
93
- })] }) : null,
94
- log ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AgentLog, {
95
- log,
96
- live: isTaskActive(task.state)
97
- }) : null,
98
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
99
- className: "text-base",
100
- children: "How this ran"
101
- }) }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardContent, {
102
- className: "flex flex-col gap-3 text-sm",
103
- children: [
104
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, {
105
- label: "Source",
106
- children: task.sourceKind === "prompt" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: KIND_LABEL.prompt }) : task.sourceUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("a", {
107
- href: task.sourceUrl,
108
- target: "_blank",
109
- rel: "noreferrer",
110
- className: "inline-flex items-center gap-1 underline",
111
- children: [
112
- KIND_LABEL[task.sourceKind],
113
- " ",
114
- task.sourceRef,
115
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExternalLink, { className: "size-3" })
116
- ]
117
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
118
- KIND_LABEL[task.sourceKind],
119
- " ",
120
- task.sourceRef
121
- ] })
122
- }),
123
- task.prompt ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
124
- className: "text-xs text-muted-foreground",
125
- children: "Prompt"
126
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
127
- className: "mt-1 overflow-x-auto whitespace-pre-wrap rounded-md bg-muted p-2.5 text-xs",
128
- children: task.prompt
129
- })] }) : null,
130
- task.sourceKind === "prompt" ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Row, {
131
- label: "Action",
132
- children: [action?.name ?? task.actionId, task.actionConnectorId === task.connectorId ? null : ` on ${writer?.name ?? task.actionConnectorId}`]
133
- }),
134
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, {
135
- label: "Agent",
136
- children: task.agentId ?? "unknown"
137
- }),
138
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, {
139
- label: "Queued",
140
- children: new Date(task.createdAt).toLocaleString()
141
- }),
142
- task.attempts > 1 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, {
143
- label: "Attempt",
144
- children: task.attempts
145
- }) : null,
146
- task.durationMs ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Row, {
147
- label: "Took",
148
- children: [(task.durationMs / 1e3).toFixed(1), "s"]
149
- }) : null,
150
- task.agentCommand ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
151
- className: "text-xs text-muted-foreground",
152
- children: "Command"
153
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
154
- className: "mt-1 overflow-x-auto rounded-md bg-muted p-2.5 text-xs",
155
- children: task.agentCommand
156
- })] }) : null
157
- ]
158
- })] })
159
- ]
160
- });
161
- }
162
- /**
163
- * The findings that go on the lines rather than in the body. Shown separately
164
- * because that is what they are: on GitHub they will be spread across the
165
- * diff, and this is the only place they can be read as a list.
166
- */
167
- function Comments({ comments }) {
168
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
169
- className: "flex flex-col gap-3 border-t pt-4",
170
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
171
- className: "text-xs text-muted-foreground",
172
- children: comments.length === 1 ? "One comment, on the line it is about" : `${comments.length} comments, each on the line it is about`
173
- }), comments.map((comment, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
174
- className: "flex flex-col gap-1",
175
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
176
- className: "flex items-center gap-1.5 font-mono text-xs text-muted-foreground",
177
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FileCode, { className: "size-3.5 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
178
- className: "truncate",
179
- children: [
180
- comment.path,
181
- ":",
182
- comment.startLine ? `${comment.startLine}-${comment.line}` : comment.line
183
- ]
184
- })]
185
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
186
- className: "whitespace-pre-wrap break-words border-l-2 pl-3 text-sm",
187
- children: comment.body
188
- })]
189
- }, `${comment.path}:${comment.line}:${index}`))]
190
- });
191
- }
192
- /**
193
- * Everything the agent printed, as it prints it. Four minutes of a spinner
194
- * tells you nothing; this is what tells you the run is alive, and afterwards
195
- * it is the only place that explains a failure.
196
- */
197
- function AgentLog({ log, live }) {
198
- const box = (0, import_react.useRef)(null);
199
- (0, import_react.useEffect)(() => {
200
- if (live && box.current) box.current.scrollTop = box.current.scrollHeight;
201
- }, [live, log]);
202
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardHeader, {
203
- className: "flex flex-row items-center gap-3",
204
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
205
- className: "flex-1 text-base",
206
- children: "Agent log"
207
- }), live ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
208
- className: "flex items-center gap-1.5 text-xs text-muted-foreground",
209
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loader, { className: "size-3.5 animate-spin" }), "still running"]
210
- }) : null]
211
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
212
- ref: box,
213
- className: "max-h-80 overflow-auto rounded-md bg-muted p-2.5 text-xs leading-relaxed whitespace-pre-wrap break-words",
214
- children: log
215
- }) })] });
216
- }
217
- /**
218
- * The run is in the other process, so this only leaves a note. The dispatcher
219
- * sees it when it next renews its claim, which is why the button says it has
220
- * been asked for rather than pretending it is already done.
221
- */
222
- function StopButton({ task }) {
223
- const router = useRouter();
224
- const [asked, setAsked] = (0, import_react.useState)(task.cancelRequested);
225
- const stop = async () => {
226
- setAsked(true);
227
- try {
228
- await stopTask({ data: { id: task.id } });
229
- await router.invalidate();
230
- } catch (error) {
231
- setAsked(false);
232
- toast.error(error instanceof Error ? error.message : String(error));
233
- }
234
- };
235
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button$1, {
236
- variant: "outline",
237
- size: "sm",
238
- onClick: stop,
239
- disabled: asked,
240
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CircleStop, {}), asked ? "Stopping" : "Stop"]
241
- });
242
- }
243
- function Row({ label, children }) {
244
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
245
- className: "flex gap-3",
246
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
247
- className: "w-20 shrink-0 text-xs text-muted-foreground",
248
- children: label
249
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
250
- className: "text-sm",
251
- children
252
- })]
253
- });
254
- }
255
- //#endregion
256
- export { TaskPage as component };