@kky42/pievo-server 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{MarkdownView-BuFKr9Jg.js → MarkdownView-T28pBEgh.js} +1 -1
- package/.output/public/assets/{actionUi-BZrLpgHT.js → actionUi-CY207nNM.js} +1 -1
- package/.output/public/assets/app-Cye1TgwS.css +2 -0
- package/.output/public/assets/{index-D0FIKiiW.js → index-BxXrF3gW.js} +3 -3
- package/.output/public/assets/loops._loopId-DuSEcu38.js +2 -0
- package/.output/public/assets/loops._loopId_.runs._runId-vjQaPXEe.js +3 -0
- package/.output/public/assets/{preload-helper-BSxGu4d0.js → preload-helper-B7p1iHUP.js} +2 -2
- package/.output/public/assets/routes-BUMEAWuS.js +1 -0
- package/.output/public/assets/{routes-BIOJZsig.js → routes-BrqOpUEi.js} +1 -1
- package/.output/server/_ssr/{MachinesModal-CLBZxZkq.mjs → MachinesModal-CB8rpDG2.mjs} +60 -29
- package/.output/server/_ssr/{MarkdownView-D1J7ImYF.mjs → MarkdownView-BOe75tli.mjs} +3 -6
- package/.output/server/_ssr/{actionUi-DE-Pb2tv.mjs → actionUi-CPYgZIr7.mjs} +57 -61
- package/.output/server/_ssr/artifactFiles-DLfSRhrV.mjs +67 -0
- package/.output/server/_ssr/{artifactKind-a2oxT2wQ.mjs → artifactKind-C0oXLA23.mjs} +2 -7
- package/.output/server/_ssr/{boot-DmpKtb0A.mjs → boot-jtVCf_pN.mjs} +239 -289
- package/.output/server/_ssr/{lifecycleUi-DEjM8Etm.mjs → lifecycleUi-Bd7_sthp.mjs} +8 -15
- package/.output/server/_ssr/{loopApi-DK1lQPrx.mjs → loopApi-0nR35Kh2.mjs} +12 -18
- package/.output/server/_ssr/{loopProjection-DdFivf7-.mjs → loopProjection-ZNfSmA5e.mjs} +3 -2
- package/.output/server/_ssr/{loops._loopId-DVCvGSEc.mjs → loops._loopId-CcJ3rxCU.mjs} +18 -89
- package/.output/server/_ssr/loops._loopId_.runs._runId-DFlrV3dJ.mjs +11 -0
- package/.output/server/_ssr/{loops._loopId_.runs._runId-BXbTfLlC.mjs → loops._loopId_.runs._runId-XkGF7HKo.mjs} +28 -19
- package/.output/server/_ssr/{machineFns-DLRHgDdS.mjs → machineFns-D-97a_hz.mjs} +6 -20
- package/.output/server/_ssr/{router-BhHsTGqu.mjs → router-CZ9CFWS2.mjs} +22 -31
- package/.output/server/_ssr/{routes-CCallyCT.mjs → routes-BBmuVs6n.mjs} +2 -2
- package/.output/server/_ssr/{routes-ngpX7h8D.mjs → routes-JxTh5mbj.mjs} +2 -2
- package/.output/server/_ssr/{routes-CL2Kef-Q.mjs → routes-fHRtSpkH.mjs} +6 -6
- package/.output/server/_ssr/ssr.mjs +22 -22
- package/.output/server/{_tanstack-start-manifest_v-BPiJ4yWT.mjs → _tanstack-start-manifest_v-C9JsxlwC.mjs} +8 -8
- package/.output/server/drizzle/0002_run_attention.sql +1 -0
- package/.output/server/drizzle/0003_run_status_ok.sql +13 -0
- package/.output/server/drizzle/meta/_journal.json +14 -0
- package/.output/server/index.mjs +49 -49
- package/drizzle/0002_run_attention.sql +1 -0
- package/drizzle/0003_run_status_ok.sql +13 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +1 -1
- package/.output/public/assets/app-x1CeeY7N.css +0 -2
- package/.output/public/assets/loops._loopId-DTkIz4C0.js +0 -2
- package/.output/public/assets/loops._loopId_.runs._runId-CsV2Ih4Z.js +0 -3
- package/.output/public/assets/routes-m4Z90DTR.js +0 -1
- package/.output/server/_ssr/artifactFiles-B0NPRDOR.mjs +0 -52
- package/.output/server/_ssr/loops._loopId_.runs._runId-Dr6E-FA5.mjs +0 -16
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
2
|
import { g as require_react, h as require_jsx_runtime, s as TooltipProvider } from "../_libs/@base-ui/react+[...].mjs";
|
|
3
3
|
import { c as createFileRoute, d as useNavigate, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
|
-
import { c as getConfig, f as listLoops, m as mintConnectKey, p as loadOlderRuns } from "./lifecycleUi-
|
|
5
|
-
import {
|
|
6
|
-
import { c as listMachines, i as ModalHead, l as mergeRuns, n as MachinesModal, o as connectServerUrl, r as Modal, s as daemonConnectCommand, t as LoopOverview } from "./MachinesModal-
|
|
7
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/routes-
|
|
4
|
+
import { c as getConfig, f as listLoops, m as mintConnectKey, p as loadOlderRuns } from "./lifecycleUi-Bd7_sthp.mjs";
|
|
5
|
+
import { p as btnSm, v as focusRing } from "./actionUi-CPYgZIr7.mjs";
|
|
6
|
+
import { c as listMachines, i as ModalHead, l as mergeRuns, n as MachinesModal, o as connectServerUrl, r as Modal, s as daemonConnectCommand, t as LoopOverview } from "./MachinesModal-CB8rpDG2.mjs";
|
|
7
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/routes-fHRtSpkH.js
|
|
8
8
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
9
9
|
var import_jsx_runtime = require_jsx_runtime();
|
|
10
10
|
function LoopCard({ loop, onOpen, onPickRun }) {
|
|
@@ -520,8 +520,8 @@ function DashboardView({ initial }) {
|
|
|
520
520
|
}
|
|
521
521
|
var headerBtn = "inline-flex shrink-0 cursor-pointer items-center rounded-full px-3 py-1.5 text-meta font-medium text-secondary transition-colors hover:bg-raised hover:text-display";
|
|
522
522
|
var headerIconBtn = "shrink-0 cursor-pointer items-center rounded-full p-1.5 text-secondary transition-colors hover:bg-raised hover:text-display";
|
|
523
|
-
var $$splitErrorComponentImporter = () => import("./routes-
|
|
524
|
-
var $$splitComponentImporter = () => import("./routes-
|
|
523
|
+
var $$splitErrorComponentImporter = () => import("./routes-JxTh5mbj.mjs");
|
|
524
|
+
var $$splitComponentImporter = () => import("./routes-BBmuVs6n.mjs");
|
|
525
525
|
var Route = createFileRoute("/")({
|
|
526
526
|
ssr: false,
|
|
527
527
|
loader: () => fetchLiveData(),
|
|
@@ -3414,7 +3414,7 @@ var defaultSerovalPlugins = [
|
|
|
3414
3414
|
* the dev styles URL for route-scoped CSS collection.
|
|
3415
3415
|
*/
|
|
3416
3416
|
async function getStartManifest(matchedRoutes) {
|
|
3417
|
-
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-
|
|
3417
|
+
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-C9JsxlwC.mjs");
|
|
3418
3418
|
const startManifest = tsrStartManifest();
|
|
3419
3419
|
let routes = startManifest.routes;
|
|
3420
3420
|
routes[rootRouteId];
|
|
@@ -3436,83 +3436,83 @@ async function getStartManifest(matchedRoutes) {
|
|
|
3436
3436
|
var manifest = {
|
|
3437
3437
|
"08565e35f6a3dd06ef25401de0343976c47f7ae319d3baed6320b56dd3718311": {
|
|
3438
3438
|
functionName: "runLoop_createServerFn_handler",
|
|
3439
|
-
importer: () => import("./loopApi-
|
|
3439
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3440
3440
|
},
|
|
3441
3441
|
"08c28b892712a1b491b120b74c7dcb81761988d31ccea60216d1807b73c1182c": {
|
|
3442
3442
|
functionName: "getRunDiff_createServerFn_handler",
|
|
3443
|
-
importer: () => import("./loopApi-
|
|
3443
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3444
3444
|
},
|
|
3445
3445
|
"169566e7637a22599b4eb32ee3775574e99677406922bbef7482a102036c33dd": {
|
|
3446
3446
|
functionName: "machineStatus_createServerFn_handler",
|
|
3447
|
-
importer: () => import("./machineFns-
|
|
3447
|
+
importer: () => import("./machineFns-D-97a_hz.mjs")
|
|
3448
3448
|
},
|
|
3449
3449
|
"23e290b2b7483ceea6fe669024c35b12c2c4ddd76649f6fab21c958ceda02940": {
|
|
3450
3450
|
functionName: "listLoops_createServerFn_handler",
|
|
3451
|
-
importer: () => import("./loopApi-
|
|
3451
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3452
3452
|
},
|
|
3453
3453
|
"27d7eba0b6a2257949392fdd56057275a5c5366484ae01faf3b5897a225ecd83": {
|
|
3454
3454
|
functionName: "finalizeMachine_createServerFn_handler",
|
|
3455
|
-
importer: () => import("./machineFns-
|
|
3455
|
+
importer: () => import("./machineFns-D-97a_hz.mjs")
|
|
3456
3456
|
},
|
|
3457
3457
|
"5660ea82ea5ff2549e0ce2f8f070c54f3e9e24fee84d547601ef5d6ef49a4016": {
|
|
3458
3458
|
functionName: "startLoop_createServerFn_handler",
|
|
3459
|
-
importer: () => import("./loopApi-
|
|
3459
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3460
3460
|
},
|
|
3461
3461
|
"5e0d6b55f5629faac2f55a68661eeb82668b2be752192b16264ffb5cd1e6fabe": {
|
|
3462
3462
|
functionName: "deleteLoop_createServerFn_handler",
|
|
3463
|
-
importer: () => import("./loopApi-
|
|
3463
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3464
3464
|
},
|
|
3465
3465
|
"6850ba403da9dec5aff45794eb52636ca540ddec2d9e59f5c75ccbb852bfeacb": {
|
|
3466
3466
|
functionName: "stopRun_createServerFn_handler",
|
|
3467
|
-
importer: () => import("./loopApi-
|
|
3467
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3468
3468
|
},
|
|
3469
3469
|
"85fdf73d4fee43aed762f93c5d47d33200fbff39e2d082647dc921f610d32698": {
|
|
3470
3470
|
functionName: "loadOlderRuns_createServerFn_handler",
|
|
3471
|
-
importer: () => import("./loopApi-
|
|
3471
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3472
3472
|
},
|
|
3473
3473
|
"95b7483b333d7649e70c848319417e83c2af6a0327bbcda2d0e331f626dffe05": {
|
|
3474
3474
|
functionName: "pauseLoop_createServerFn_handler",
|
|
3475
|
-
importer: () => import("./loopApi-
|
|
3475
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3476
3476
|
},
|
|
3477
3477
|
"9befe6b8d67ccbbd7aa9b538bde2a161a9894761c8936761a9503fda1a88c0fc": {
|
|
3478
3478
|
functionName: "patchLoop_createServerFn_handler",
|
|
3479
|
-
importer: () => import("./loopApi-
|
|
3479
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3480
3480
|
},
|
|
3481
3481
|
"a6384dc7154d9930422d29396f5de64b3ac69c62ad3824bc4a22d745fc07b293": {
|
|
3482
3482
|
functionName: "deleteMachine_createServerFn_handler",
|
|
3483
|
-
importer: () => import("./machineFns-
|
|
3483
|
+
importer: () => import("./machineFns-D-97a_hz.mjs")
|
|
3484
3484
|
},
|
|
3485
3485
|
"aa46310016bb8a58b273a648ffd498c87f1f450d12827e30110a3b83ba6a27d9": {
|
|
3486
3486
|
functionName: "listMachines_createServerFn_handler",
|
|
3487
|
-
importer: () => import("./machineFns-
|
|
3487
|
+
importer: () => import("./machineFns-D-97a_hz.mjs")
|
|
3488
3488
|
},
|
|
3489
3489
|
"b050455aacc84dd2a2c9a45517826ad10f91d8f1545e87cc7015784cc7116a97": {
|
|
3490
3490
|
functionName: "getLoopDetail_createServerFn_handler",
|
|
3491
|
-
importer: () => import("./loopApi-
|
|
3491
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3492
3492
|
},
|
|
3493
3493
|
"b18bbec3d06dfc77714e1e527dfb9172fd7575a64a6c0d6e73ba6dc658dccf0d": {
|
|
3494
3494
|
functionName: "getArtifacts_createServerFn_handler",
|
|
3495
|
-
importer: () => import("./loopApi-
|
|
3495
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3496
3496
|
},
|
|
3497
3497
|
"cbb6a1b09b309459bbba3dc3851ae85fc468658b3cda77e22b6c6f3e28b65af4": {
|
|
3498
3498
|
functionName: "getConfig_createServerFn_handler",
|
|
3499
|
-
importer: () => import("./loopApi-
|
|
3499
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3500
3500
|
},
|
|
3501
3501
|
"ce43dcb9366e7c8f7338a6ad28e4290b75a5ee3b13d0d2c9cb585020008f12c6": {
|
|
3502
3502
|
functionName: "mintConnectKey_createServerFn_handler",
|
|
3503
|
-
importer: () => import("./loopApi-
|
|
3503
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3504
3504
|
},
|
|
3505
3505
|
"e233a461e4526dec3cc4cbaa891a7c3621d5967ce7f32b4fb17e9fb645857b9a": {
|
|
3506
3506
|
functionName: "stopLoop_createServerFn_handler",
|
|
3507
|
-
importer: () => import("./loopApi-
|
|
3507
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3508
3508
|
},
|
|
3509
3509
|
"ed10d5fe79208e5e0e4e18e4a17b18d7f7db4dd16204c00c3ac90c4644668841": {
|
|
3510
3510
|
functionName: "getArtifact_createServerFn_handler",
|
|
3511
|
-
importer: () => import("./loopApi-
|
|
3511
|
+
importer: () => import("./loopApi-0nR35Kh2.mjs")
|
|
3512
3512
|
},
|
|
3513
3513
|
"ed679b4e1e05e903a5d4ba4a70d9b9d883991ab22ed59b4d2d69078941818415": {
|
|
3514
3514
|
functionName: "createMachine_createServerFn_handler",
|
|
3515
|
-
importer: () => import("./machineFns-
|
|
3515
|
+
importer: () => import("./machineFns-D-97a_hz.mjs")
|
|
3516
3516
|
}
|
|
3517
3517
|
};
|
|
3518
3518
|
async function getServerFnById(id, access) {
|
|
@@ -5344,7 +5344,7 @@ var getBaseManifest = getProdBaseManifest;
|
|
|
5344
5344
|
var createEarlyHintsForRequest = createEarlyHintsCollector;
|
|
5345
5345
|
async function loadEntries() {
|
|
5346
5346
|
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
5347
|
-
import("./router-
|
|
5347
|
+
import("./router-CZ9CFWS2.mjs"),
|
|
5348
5348
|
import("./start-B5_9Z5W-.mjs"),
|
|
5349
5349
|
import("./empty-plugin-adapters-DKUlnwwl.mjs")
|
|
5350
5350
|
]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-
|
|
1
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-C9JsxlwC.js
|
|
2
2
|
var tsrStartManifest = () => ({ routes: {
|
|
3
3
|
__root__: {
|
|
4
4
|
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/__root.tsx",
|
|
@@ -16,30 +16,30 @@ var tsrStartManifest = () => ({ routes: {
|
|
|
16
16
|
"/loops/$loopId_/runs/$runId"
|
|
17
17
|
],
|
|
18
18
|
preloads: [
|
|
19
|
-
"/assets/index-
|
|
20
|
-
"/assets/actionUi-
|
|
21
|
-
"/assets/preload-helper-
|
|
19
|
+
"/assets/index-BxXrF3gW.js",
|
|
20
|
+
"/assets/actionUi-CY207nNM.js",
|
|
21
|
+
"/assets/preload-helper-B7p1iHUP.js"
|
|
22
22
|
],
|
|
23
23
|
scripts: [{ attrs: {
|
|
24
24
|
type: "module",
|
|
25
25
|
async: !0,
|
|
26
|
-
src: "/assets/index-
|
|
26
|
+
src: "/assets/index-BxXrF3gW.js"
|
|
27
27
|
} }]
|
|
28
28
|
},
|
|
29
29
|
"/": {
|
|
30
30
|
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/index.tsx",
|
|
31
31
|
children: void 0,
|
|
32
|
-
preloads: ["/assets/routes-
|
|
32
|
+
preloads: ["/assets/routes-BUMEAWuS.js", "/assets/routes-BrqOpUEi.js"]
|
|
33
33
|
},
|
|
34
34
|
"/loops/$loopId": {
|
|
35
35
|
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/loops.$loopId.tsx",
|
|
36
36
|
children: void 0,
|
|
37
|
-
preloads: ["/assets/loops._loopId-
|
|
37
|
+
preloads: ["/assets/loops._loopId-DuSEcu38.js", "/assets/MarkdownView-T28pBEgh.js"]
|
|
38
38
|
},
|
|
39
39
|
"/loops/$loopId_/runs/$runId": {
|
|
40
40
|
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/loops.$loopId_.runs.$runId.tsx",
|
|
41
41
|
children: void 0,
|
|
42
|
-
preloads: ["/assets/loops._loopId_.runs._runId-
|
|
42
|
+
preloads: ["/assets/loops._loopId_.runs._runId-vjQaPXEe.js", "/assets/MarkdownView-T28pBEgh.js"]
|
|
43
43
|
}
|
|
44
44
|
} });
|
|
45
45
|
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "runs" ADD COLUMN "attention" text;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-- Run status collapses to ok|block; per-loop status definitions are dropped.
|
|
2
|
+
-- DATA LOSS (intentional): every loop's keep/no-change/block definition text is
|
|
3
|
+
-- removed, and keep/no-change history becomes ok. Legacy done runs without a
|
|
4
|
+
-- status become errors so that done always means a reported status.
|
|
5
|
+
ALTER TABLE "runs" DROP CONSTRAINT "runs_status_check";--> statement-breakpoint
|
|
6
|
+
UPDATE "runs" SET "status" = 'ok' WHERE "status" IN ('keep', 'no-change');--> statement-breakpoint
|
|
7
|
+
UPDATE "runs" SET "phase" = 'error', "error" = coalesce("error", 'run protocol incomplete: the final response has no STATUS line') WHERE "phase" = 'done' AND "status" IS NULL;--> statement-breakpoint
|
|
8
|
+
UPDATE "runs" SET "status" = NULL WHERE "phase" <> 'done' AND "status" IS NOT NULL;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE "runs" ADD CONSTRAINT "runs_status_check" CHECK ("runs"."status" IS NULL OR "runs"."status" IN ('ok', 'block'));--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "runs" ADD CONSTRAINT "runs_done_status_check" CHECK (("runs"."phase" = 'done') = ("runs"."status" IS NOT NULL));--> statement-breakpoint
|
|
11
|
+
ALTER TABLE "loops" DROP COLUMN "status_keep";--> statement-breakpoint
|
|
12
|
+
ALTER TABLE "loops" DROP COLUMN "status_no_change";--> statement-breakpoint
|
|
13
|
+
ALTER TABLE "loops" DROP COLUMN "status_block";
|
|
@@ -15,6 +15,20 @@
|
|
|
15
15
|
"when": 1792900000000,
|
|
16
16
|
"tag": "0001_loop_files",
|
|
17
17
|
"breakpoints": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"idx": 2,
|
|
21
|
+
"version": "7",
|
|
22
|
+
"when": 1793000000000,
|
|
23
|
+
"tag": "0002_run_attention",
|
|
24
|
+
"breakpoints": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"idx": 3,
|
|
28
|
+
"version": "7",
|
|
29
|
+
"when": 1793100000000,
|
|
30
|
+
"tag": "0003_run_status_ok",
|
|
31
|
+
"breakpoints": true
|
|
18
32
|
}
|
|
19
33
|
]
|
|
20
34
|
}
|
package/.output/server/index.mjs
CHANGED
|
@@ -14,79 +14,79 @@ var public_assets_data_default = {
|
|
|
14
14
|
"/favicon.svg": {
|
|
15
15
|
"type": "image/svg+xml",
|
|
16
16
|
"etag": "\"2f9-diQHMODwkdsIQ2ssl9fzDaFKaXE\"",
|
|
17
|
-
"mtime": "2026-10-
|
|
17
|
+
"mtime": "2026-10-23T03:32:56.381Z",
|
|
18
18
|
"size": 761,
|
|
19
19
|
"path": "../public/favicon.svg"
|
|
20
20
|
},
|
|
21
|
-
"/assets/MarkdownView-
|
|
21
|
+
"/assets/MarkdownView-T28pBEgh.js": {
|
|
22
22
|
"type": "text/javascript; charset=utf-8",
|
|
23
|
-
"etag": "\"1094f-
|
|
24
|
-
"mtime": "2026-10-
|
|
23
|
+
"etag": "\"1094f-xfVVNUR3CCvkDYxhF1A9oQwzRCc\"",
|
|
24
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
25
25
|
"size": 67919,
|
|
26
|
-
"path": "../public/assets/MarkdownView-
|
|
26
|
+
"path": "../public/assets/MarkdownView-T28pBEgh.js"
|
|
27
27
|
},
|
|
28
|
-
"/assets/
|
|
28
|
+
"/assets/loops._loopId_.runs._runId-vjQaPXEe.js": {
|
|
29
29
|
"type": "text/javascript; charset=utf-8",
|
|
30
|
-
"etag": "\"
|
|
31
|
-
"mtime": "2026-10-
|
|
32
|
-
"size":
|
|
33
|
-
"path": "../public/assets/
|
|
30
|
+
"etag": "\"34b5-CD9qyrJkQEALL6bAAImEVYgj63c\"",
|
|
31
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
32
|
+
"size": 13493,
|
|
33
|
+
"path": "../public/assets/loops._loopId_.runs._runId-vjQaPXEe.js"
|
|
34
34
|
},
|
|
35
|
-
"/assets/
|
|
35
|
+
"/assets/preload-helper-B7p1iHUP.js": {
|
|
36
36
|
"type": "text/javascript; charset=utf-8",
|
|
37
|
-
"etag": "\"
|
|
38
|
-
"mtime": "2026-10-
|
|
39
|
-
"size":
|
|
40
|
-
"path": "../public/assets/
|
|
37
|
+
"etag": "\"1166e-ouoXfTbdw/3tOezCHiLMkXNp4Co\"",
|
|
38
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
39
|
+
"size": 71278,
|
|
40
|
+
"path": "../public/assets/preload-helper-B7p1iHUP.js"
|
|
41
41
|
},
|
|
42
|
-
"/assets/
|
|
42
|
+
"/assets/actionUi-CY207nNM.js": {
|
|
43
43
|
"type": "text/javascript; charset=utf-8",
|
|
44
|
-
"etag": "\"
|
|
45
|
-
"mtime": "2026-10-
|
|
46
|
-
"size":
|
|
47
|
-
"path": "../public/assets/
|
|
44
|
+
"etag": "\"4246-TWV9yRy401dArUEOUqGwNU3VUfQ\"",
|
|
45
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
46
|
+
"size": 16966,
|
|
47
|
+
"path": "../public/assets/actionUi-CY207nNM.js"
|
|
48
48
|
},
|
|
49
|
-
"/assets/
|
|
50
|
-
"type": "text/
|
|
51
|
-
"etag": "\"
|
|
52
|
-
"mtime": "2026-10-
|
|
53
|
-
"size":
|
|
54
|
-
"path": "../public/assets/
|
|
49
|
+
"/assets/loops._loopId-DuSEcu38.js": {
|
|
50
|
+
"type": "text/javascript; charset=utf-8",
|
|
51
|
+
"etag": "\"66a3-61wjsTyqhE469dT3D3sQy/LLoK0\"",
|
|
52
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
53
|
+
"size": 26275,
|
|
54
|
+
"path": "../public/assets/loops._loopId-DuSEcu38.js"
|
|
55
55
|
},
|
|
56
|
-
"/assets/index-
|
|
56
|
+
"/assets/index-BxXrF3gW.js": {
|
|
57
57
|
"type": "text/javascript; charset=utf-8",
|
|
58
|
-
"etag": "\"
|
|
59
|
-
"mtime": "2026-10-
|
|
60
|
-
"size":
|
|
61
|
-
"path": "../public/assets/index-
|
|
58
|
+
"etag": "\"5e6dc-Jff/8pjzdhWcKkaYnHo8qM5M614\"",
|
|
59
|
+
"mtime": "2026-10-23T03:32:55.968Z",
|
|
60
|
+
"size": 386780,
|
|
61
|
+
"path": "../public/assets/index-BxXrF3gW.js"
|
|
62
62
|
},
|
|
63
|
-
"/assets/routes-
|
|
63
|
+
"/assets/routes-BUMEAWuS.js": {
|
|
64
64
|
"type": "text/javascript; charset=utf-8",
|
|
65
|
-
"etag": "\"
|
|
66
|
-
"mtime": "2026-10-
|
|
67
|
-
"size":
|
|
68
|
-
"path": "../public/assets/routes-
|
|
65
|
+
"etag": "\"b7-4cj4TecIBiL+8nAbi3FmGwjefN0\"",
|
|
66
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
67
|
+
"size": 183,
|
|
68
|
+
"path": "../public/assets/routes-BUMEAWuS.js"
|
|
69
|
+
},
|
|
70
|
+
"/assets/app-Cye1TgwS.css": {
|
|
71
|
+
"type": "text/css; charset=utf-8",
|
|
72
|
+
"etag": "\"984d-t/2Z+0aLpA+ibFIkFH5cVnEEge8\"",
|
|
73
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
74
|
+
"size": 38989,
|
|
75
|
+
"path": "../public/assets/app-Cye1TgwS.css"
|
|
69
76
|
},
|
|
70
|
-
"/assets/
|
|
77
|
+
"/assets/routes-BrqOpUEi.js": {
|
|
71
78
|
"type": "text/javascript; charset=utf-8",
|
|
72
|
-
"etag": "\"
|
|
73
|
-
"mtime": "2026-10-
|
|
74
|
-
"size":
|
|
75
|
-
"path": "../public/assets/
|
|
79
|
+
"etag": "\"135-ib/05XwyCvmKG1gkwZ/bZIj3j64\"",
|
|
80
|
+
"mtime": "2026-10-23T03:32:55.970Z",
|
|
81
|
+
"size": 309,
|
|
82
|
+
"path": "../public/assets/routes-BrqOpUEi.js"
|
|
76
83
|
},
|
|
77
84
|
"/fonts/GeistPixel-Square.woff2": {
|
|
78
85
|
"type": "font/woff2",
|
|
79
86
|
"etag": "\"6f7c-IQXyklzDeInO8O/YtOs5/0tckOE\"",
|
|
80
|
-
"mtime": "2026-10-
|
|
87
|
+
"mtime": "2026-10-23T03:32:56.381Z",
|
|
81
88
|
"size": 28540,
|
|
82
89
|
"path": "../public/fonts/GeistPixel-Square.woff2"
|
|
83
|
-
},
|
|
84
|
-
"/assets/routes-m4Z90DTR.js": {
|
|
85
|
-
"type": "text/javascript; charset=utf-8",
|
|
86
|
-
"etag": "\"b7-4IBOQXhD+4FU+W+UeF0P6Bs7mxM\"",
|
|
87
|
-
"mtime": "2026-10-22T10:50:50.447Z",
|
|
88
|
-
"size": 183,
|
|
89
|
-
"path": "../public/assets/routes-m4Z90DTR.js"
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "runs" ADD COLUMN "attention" text;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-- Run status collapses to ok|block; per-loop status definitions are dropped.
|
|
2
|
+
-- DATA LOSS (intentional): every loop's keep/no-change/block definition text is
|
|
3
|
+
-- removed, and keep/no-change history becomes ok. Legacy done runs without a
|
|
4
|
+
-- status become errors so that done always means a reported status.
|
|
5
|
+
ALTER TABLE "runs" DROP CONSTRAINT "runs_status_check";--> statement-breakpoint
|
|
6
|
+
UPDATE "runs" SET "status" = 'ok' WHERE "status" IN ('keep', 'no-change');--> statement-breakpoint
|
|
7
|
+
UPDATE "runs" SET "phase" = 'error', "error" = coalesce("error", 'run protocol incomplete: the final response has no STATUS line') WHERE "phase" = 'done' AND "status" IS NULL;--> statement-breakpoint
|
|
8
|
+
UPDATE "runs" SET "status" = NULL WHERE "phase" <> 'done' AND "status" IS NOT NULL;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE "runs" ADD CONSTRAINT "runs_status_check" CHECK ("runs"."status" IS NULL OR "runs"."status" IN ('ok', 'block'));--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "runs" ADD CONSTRAINT "runs_done_status_check" CHECK (("runs"."phase" = 'done') = ("runs"."status" IS NOT NULL));--> statement-breakpoint
|
|
11
|
+
ALTER TABLE "loops" DROP COLUMN "status_keep";--> statement-breakpoint
|
|
12
|
+
ALTER TABLE "loops" DROP COLUMN "status_no_change";--> statement-breakpoint
|
|
13
|
+
ALTER TABLE "loops" DROP COLUMN "status_block";
|
|
@@ -15,6 +15,20 @@
|
|
|
15
15
|
"when": 1792900000000,
|
|
16
16
|
"tag": "0001_loop_files",
|
|
17
17
|
"breakpoints": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"idx": 2,
|
|
21
|
+
"version": "7",
|
|
22
|
+
"when": 1793000000000,
|
|
23
|
+
"tag": "0002_run_attention",
|
|
24
|
+
"breakpoints": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"idx": 3,
|
|
28
|
+
"version": "7",
|
|
29
|
+
"when": 1793100000000,
|
|
30
|
+
"tag": "0003_run_status_ok",
|
|
31
|
+
"breakpoints": true
|
|
18
32
|
}
|
|
19
33
|
]
|
|
20
34
|
}
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", "Segoe UI", sans-serif;--font-mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-pixel:"Geist Pixel", ui-monospace, "SF Mono", Menlo, monospace;--radius-control:10px;--radius-card:16px;--radius-sheet:20px;--text-micro:10px;--text-caption:11px;--text-label:12px;--text-meta:12.5px;--text-body:13px;--color-paper:#f3f4f7;--color-surface:#fff;--color-raised:#eceef2;--color-hairline:#e3e5ea;--color-wire:#cfd3db;--color-disabled:#9aa0ab;--color-secondary:#666c78;--color-primary:#1c1e24;--color-display:#0d0f14;--color-rubik-green:#009b48;--color-rubik-red:#b71234;--color-rubik-orange:#ff5800;--color-rubik-yellow:#ffd500;--color-rubik-blue:#0046ad;--color-accent:#b71234;--color-accent-soft:#b7123414;--color-success:#00813c;--color-success-soft:#009b481a;--color-interactive:var(--color-rubik-blue);--color-warn:#c44700;--color-warn-soft:#ff58001a;--color-running:#8a6d00;--color-running-soft:#ffd50029;--color-run-keep:var(--color-success);--color-run-no-change:var(--color-secondary);--color-run-block:var(--color-running);--color-run-error:var(--color-accent);--color-run-warning:var(--color-warn);--color-run-canceled:var(--color-disabled);--color-run-queued:var(--color-secondary);--color-run-active:var(--color-display);--color-diff-add-bg:#009b481a;--color-diff-del-bg:#b7123414;--color-diff-hunk-bg:var(--color-raised)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.start-42{inset-inline-start:calc(var(--spacing) * 42)}.top-0{top:0}.top-1\/2{top:50%}.top-\[46\%\]{top:46%}.left-1\/2{left:50%}.z-10{z-index:10}.z-50{z-index:50}.z-\[900\]{z-index:900}.z-\[901\]{z-index:901}.m-0{margin:0}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-\[5px\]{margin-top:5px}.mt-\[18px\]{margin-top:18px}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-\[18px\]{margin-bottom:18px}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-\[11px\]{width:11px;height:11px}.size-\[17px\]{width:17px;height:17px}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-\[22px\]{height:22px}.h-\[min\(70vh\,620px\)\]{height:min(70vh,620px)}.h-\[min\(600px\,68vh\)\]{height:min(600px,68vh)}.h-auto{height:auto}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-\[150px\]{max-height:150px}.max-h-\[420px\]{max-height:420px}.max-h-\[calc\(100dvh-4rem\)\]{max-height:calc(100dvh - 4rem)}.max-h-\[clamp\(280px\,46vh\,520px\)\]{max-height:clamp(280px,46vh,520px)}.min-h-10{min-height:calc(var(--spacing) * 10)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-6{width:calc(var(--spacing) * 6)}.w-12{width:calc(var(--spacing) * 12)}.w-24{width:calc(var(--spacing) * 24)}.w-\[18px\]{width:18px}.w-full{width:100%}.w-px{width:1px}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-52{max-width:calc(var(--spacing) * 52)}.max-w-160{max-width:calc(var(--spacing) * 160)}.max-w-\[62rem\]{max-width:62rem}.max-w-\[340px\]{max-width:340px}.max-w-\[1180px\]{max-width:1180px}.max-w-\[1360px\]{max-width:1360px}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-28{min-width:calc(var(--spacing) * 28)}.min-w-max{min-width:max-content}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize-y{resize:vertical}.scrollbar-none{scrollbar-width:none}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[max-content_minmax\(0\,1fr\)\]{grid-template-columns:max-content minmax(0,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[3px\]{gap:3px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3.5) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-2\.5{column-gap:calc(var(--spacing) * 2.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-10{column-gap:calc(var(--spacing) * 10)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2\.5{row-gap:calc(var(--spacing) * 2.5)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-hairline>:not(:last-child)){border-color:var(--color-hairline)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-card{border-radius:var(--radius-card)}.rounded-control{border-radius:var(--radius-control)}.rounded-full{border-radius:3.40282e38px}.rounded-sheet{border-radius:var(--radius-sheet)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-display{border-color:var(--color-display)}.border-hairline{border-color:var(--color-hairline)}.border-transparent{border-color:#0000}.border-warn\/40{border-color:#c4470066}@supports (color:color-mix(in lab, red, red)){.border-warn\/40{border-color:color-mix(in oklab, var(--color-warn) 40%, transparent)}}.border-wire{border-color:var(--color-wire)}.bg-\[color\:var\(--color-diff-add-bg\)\]{background-color:var(--color-diff-add-bg)}.bg-\[color\:var\(--color-diff-del-bg\)\]{background-color:var(--color-diff-del-bg)}.bg-\[color\:var\(--color-diff-hunk-bg\)\]{background-color:var(--color-diff-hunk-bg)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab, red, red)){.bg-black\/25{background-color:color-mix(in oklab, var(--color-black) 25%, transparent)}}.bg-disabled{background-color:var(--color-disabled)}.bg-display{background-color:var(--color-display)}.bg-hairline{background-color:var(--color-hairline)}.bg-paper{background-color:var(--color-paper)}.bg-raised{background-color:var(--color-raised)}.bg-rubik-green{background-color:var(--color-rubik-green)}.bg-rubik-orange{background-color:var(--color-rubik-orange)}.bg-rubik-red{background-color:var(--color-rubik-red)}.bg-rubik-yellow{background-color:var(--color-rubik-yellow)}.bg-running-soft{background-color:var(--color-running-soft)}.bg-success-soft{background-color:var(--color-success-soft)}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:#0000}.bg-warn-soft{background-color:var(--color-warn-soft)}.bg-warn\/10{background-color:#c447001a}@supports (color:color-mix(in lab, red, red)){.bg-warn\/10{background-color:color-mix(in oklab, var(--color-warn) 10%, transparent)}}.bg-white{background-color:var(--color-white)}.object-contain{object-fit:contain}.p-0{padding:0}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-\[26px\]{padding-inline:26px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pt-\[22px\]{padding-top:22px}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-pixel{font-family:var(--font-pixel)}.font-sans{font-family:var(--font-sans)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-\[9px\]{font-size:9px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[24px\]{font-size:24px}.text-\[26px\]{font-size:26px}.text-\[clamp\(28px\,4\.5vw\,38px\)\]{font-size:clamp(28px,4.5vw,38px)}.text-body{font-size:var(--text-body)}.text-caption{font-size:var(--text-caption)}.text-label{font-size:var(--text-label)}.text-meta{font-size:var(--text-meta)}.text-micro{font-size:var(--text-micro)}.leading-\[1\.15\]{--tw-leading:1.15;line-height:1.15}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-\[-0\.015em\]{--tw-tracking:-.015em;letter-spacing:-.015em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-disabled{color:var(--color-disabled)}.text-display{color:var(--color-display)}.text-interactive{color:var(--color-interactive)}.text-paper{color:var(--color-paper)}.text-paper\/70{color:#f3f4f7b3}@supports (color:color-mix(in lab, red, red)){.text-paper\/70{color:color-mix(in oklab, var(--color-paper) 70%, transparent)}}.text-primary{color:var(--color-primary)}.text-running{color:var(--color-running)}.text-secondary{color:var(--color-secondary)}.text-success{color:var(--color-success)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.text-wire{color:var(--color-wire)}.lowercase{text-transform:lowercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-60{opacity:.6}.shadow-card{--tw-shadow:0 2px 2px var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[8px\]{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.marker\:content-\[\'\'\] ::marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\]::marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\] ::-webkit-details-marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\]::-webkit-details-marker{--tw-content:"";content:var(--tw-content)}.placeholder\:text-disabled::placeholder{color:var(--color-disabled)}.first\:mt-2:first-child{margin-top:calc(var(--spacing) * 2)}.focus-within\:border-transparent:focus-within{border-color:#0000}.focus-within\:shadow-focus:focus-within{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.hover\:border-display:hover{border-color:var(--color-display)}.hover\:border-wire:hover{border-color:var(--color-wire)}.hover\:bg-raised:hover{background-color:var(--color-raised)}.hover\:bg-raised\/60:hover{background-color:#eceef299}@supports (color:color-mix(in lab, red, red)){.hover\:bg-raised\/60:hover{background-color:color-mix(in oklab, var(--color-raised) 60%, transparent)}}.hover\:bg-surface:hover{background-color:var(--color-surface)}.hover\:text-display:hover{color:var(--color-display)}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-85:hover{opacity:.85}}.focus\:border-transparent:focus{border-color:#0000}.focus\:shadow-focus:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:text-display:focus-visible{color:var(--color-display)}.focus-visible\:shadow-focus:focus-visible{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-interactive:focus-visible{--tw-ring-color:var(--color-interactive)}.focus-visible\:ring-offset-4:focus-visible{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-surface:focus-visible{--tw-ring-offset-color:var(--color-surface)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-40:disabled{opacity:.4}.data-\[ending-style\]\:opacity-0[data-ending-style],.data-\[starting-style\]\:opacity-0[data-starting-style]{opacity:0}@media (width>=40rem){.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:max-h-none{max-height:none}.sm\:grid-cols-\[210px_1fr\]{grid-template-columns:210px 1fr}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media (width>=48rem){.md\:grid-cols-\[180px_minmax\(0\,1fr\)\]{grid-template-columns:180px minmax(0,1fr)}}@media (width>=64rem){.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(300px\,360px\)\]{grid-template-columns:minmax(0,1fr) minmax(300px,360px)}.lg\:grid-cols-\[minmax\(300px\,380px\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(300px,380px) minmax(0,1fr)}}@media (prefers-color-scheme:dark){.dark\:bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab, red, red)){.dark\:bg-black\/45{background-color:color-mix(in oklab, var(--color-black) 45%, transparent)}}}}@font-face{font-family:Geist Pixel;src:url(/fonts/GeistPixel-Square.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--glass-bg:#ffffff8c}@supports (color:color-mix(in lab, red, red)){:root{--glass-bg:color-mix(in srgb, var(--color-surface) 55%, transparent)}}:root{--glass-bg-strong:#ffffffc7}@supports (color:color-mix(in lab, red, red)){:root{--glass-bg-strong:color-mix(in srgb, var(--color-surface) 78%, transparent)}}:root{--glass-border:#0d0f141a}@supports (color:color-mix(in lab, red, red)){:root{--glass-border:color-mix(in srgb, var(--color-display) 10%, transparent)}}:root{--glass-highlight:#ffffffbf;--glass-shadow:0 1px 1px #00000005, 0 8px 24px -8px #0000001a, 0 24px 48px -16px #00000014}@media (prefers-color-scheme:dark){:root{--color-paper:#0a0a0c;--color-surface:#141416;--color-raised:#1c1c1f;--color-hairline:#26262a;--color-wire:#3a3a40;--color-disabled:#6e6e76;--color-secondary:#98989f;--color-primary:#e8e8ed;--color-display:#fff;--color-accent:#ff5d75;--color-accent-soft:#ff5d751f;--color-success:#33c56f;--color-success-soft:#009b482e;--color-interactive:#5c9dff;--color-interactive-soft:#5c9dff21;--color-warn:#ff7a3d;--color-warn-soft:#ff7a3d24;--color-running:#ffd500;--color-running-soft:#ffd5001f;--color-diff-add-bg:#009b482e;--color-diff-del-bg:#ff5d7524;--glass-highlight:#ffffff17;--glass-shadow:0 1px 1px #0003, 0 12px 32px -8px #00000080;--shadow-card:0 0 0 0 transparent}}.glass,.glass-strong{-webkit-backdrop-filter:blur(22px)saturate(1.7);backdrop-filter:blur(22px)saturate(1.7);border:1px solid var(--glass-border);box-shadow:inset 0 1px 0 var(--glass-highlight), var(--glass-shadow)}.glass{background:var(--glass-bg)}.glass-strong{background:var(--glass-bg-strong)}.glass-bar{box-shadow:inset 0 1px 0 var(--glass-highlight);border-width:0 0 1px;border-radius:0}.artifact-markdown{font-family:var(--font-sans);color:var(--color-secondary);font-size:13px;line-height:1.6}.artifact-markdown>:first-child{margin-top:0}.artifact-markdown h1,.artifact-markdown h2,.artifact-markdown h3,.artifact-markdown h4{color:var(--color-display);margin:1.1em 0 .4em;font-weight:600;line-height:1.3}.artifact-markdown h1{font-size:15px}.artifact-markdown h2{font-size:13.5px}.artifact-markdown h3,.artifact-markdown h4{font-size:12.5px}.artifact-markdown p{margin:.5em 0}.artifact-markdown ul,.artifact-markdown ol{margin:.5em 0;padding-left:1.3em}.artifact-markdown ul{list-style:outside}.artifact-markdown ol{list-style:decimal}.artifact-markdown li{margin:.2em 0}.artifact-markdown a{color:var(--color-interactive);text-underline-offset:2px;text-decoration:underline}.artifact-markdown strong{color:var(--color-primary);font-weight:600}.artifact-markdown code{font-family:var(--font-mono);background:var(--color-surface);overflow-wrap:anywhere;border-radius:4px;padding:.1em .35em;font-size:.9em}.artifact-markdown pre{font-family:var(--font-mono);background:var(--color-surface);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;margin:.6em 0;padding:12px 14px;font-size:12px;line-height:1.5}.artifact-markdown pre code{background:0 0;padding:0}.artifact-markdown blockquote{border-left:2px solid var(--color-wire);color:var(--color-disabled);margin:.6em 0;padding-left:12px}.artifact-markdown hr{border:0;border-top:1px solid var(--color-hairline);margin:1em 0}.artifact-markdown table{border-collapse:collapse;width:max-content;max-width:100%;margin:.6em 0;display:block;overflow-x:auto}.artifact-markdown th,.artifact-markdown td{border:1px solid var(--color-hairline);text-align:left;white-space:nowrap;padding:4px 8px}.artifact-markdown img{max-width:100%}*{scrollbar-width:thin;scrollbar-color:var(--color-wire) transparent}.scrollbar-none{scrollbar-width:none}.scrollbar-none::-webkit-scrollbar{display:none}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-wire);background-clip:padding-box;border:2px solid #0000;border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:var(--color-disabled);background-clip:padding-box}::-webkit-scrollbar-corner{background:0 0}.lp-select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%23999999' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.75 4.5 6 7.75 9.25 4.5'/%3E%3C/svg%3E");background-position:right .7rem center;background-repeat:no-repeat;padding-right:2rem}.dot-grid-subtle{background-image:radial-gradient(circle, var(--color-hairline) .5px, transparent .5px);background-size:12px 12px}@keyframes fadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@keyframes runPulse{0%,to{opacity:.9}50%{opacity:.26}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.ring-logo{--ring-base:currentColor;vertical-align:middle;display:inline-block}.ring-logo-plate{--ring-base:#ededed}.ring-logo .ring-cell{fill:var(--ring-base)}.ring-logo .ring-runner{fill:var(--color-interactive)}.ring-logo .ring-trail-1{fill:#0046ad}@supports (color:color-mix(in lab, red, red)){.ring-logo .ring-trail-1{fill:color-mix(in srgb, var(--color-interactive) 55%, var(--ring-base))}}.ring-logo .ring-trail-2{fill:#0046ad}@supports (color:color-mix(in lab, red, red)){.ring-logo .ring-trail-2{fill:color-mix(in srgb, var(--color-interactive) 25%, var(--ring-base))}}.ring-logo-animated .ring-cell{animation:4s linear infinite ringChase}.ring-logo-animated .rc0{animation-delay:-4s}.ring-logo-animated .rc1{animation-delay:-3.5s}.ring-logo-animated .rc2{animation-delay:-3s}.ring-logo-animated .rc3{animation-delay:-2.5s}.ring-logo-animated .rc4{animation-delay:-2s}.ring-logo-animated .rc5{animation-delay:-1.5s}.ring-logo-animated .rc6{animation-delay:-1s}.ring-logo-animated .rc7{animation-delay:-.5s}@keyframes ringChase{0%,9%{fill:var(--color-interactive)}16%,to{fill:var(--ring-base)}}@media (prefers-reduced-motion:reduce){.ring-logo-animated .ring-cell{animation:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,E as n,I as r,L as i,M as a,O as o,S as s,T as c,a as l,b as u,d,f,g as p,h as m,i as h,l as g,m as _,n as ee,o as te,r as ne,t as re,u as ie,v,y,z as ae}from"./actionUi-BZrLpgHT.js";import{E as oe,T as b,_ as se,c as x,g as ce,h as le,i as ue,n as de,o as fe,p as pe,r as me,s as S,u as he,v as ge,y as _e}from"./preload-helper-BSxGu4d0.js";import{a as ve,c as C,n as w,o as ye,s as T}from"./index-D0FIKiiW.js";import{t as E}from"./MarkdownView-BuFKr9Jg.js";var D=ae(i(),1),O={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,bmp:`image/bmp`,ico:`image/x-icon`,svg:`image/svg+xml`};function k(e){return(e.match(/\.([a-z0-9]+)$/i)?.[1]??``).toLowerCase()}function A(e){return O[k(e)]??null}var j=e=>A(e)!==null,M=e=>k(e)===`html`||k(e)===`htm`,N=e=>k(e)===`md`||k(e)===`markdown`;function P(e){return j(e)?`image`:M(e)?`html`:N(e)?`markdown`:`text`}function F(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`/api/artifact/${encodeURIComponent(e)}/${n}`}function I(e,t){return`${F(e,t)}?view=inline`}var L=r();function R({path:e,meta:t,action:n}){return(0,L.jsxs)(`div`,{className:`sticky top-0 z-10 flex flex-wrap items-center gap-x-2 gap-y-1 border-b border-hairline bg-surface px-5 py-2.5`,children:[(0,L.jsx)(`span`,{className:`break-all font-mono text-label text-primary`,children:e}),t&&(0,L.jsxs)(`span`,{className:`font-mono text-caption text-disabled`,children:[`· `,t]}),n&&(0,L.jsx)(`span`,{className:`ml-auto shrink-0`,children:n})]})}function z({loopId:e,path:t,oversize:n}){return(0,L.jsx)(`div`,{className:`px-5 py-8 text-body text-secondary`,children:n?(0,L.jsx)(`span`,{className:`text-disabled`,children:`Too large to preview - stored as metadata only (no synced bytes).`}):(0,L.jsxs)(L.Fragment,{children:[`Binary file - not previewable.`,` `,(0,L.jsx)(`a`,{href:F(e,t),download:!0,className:`text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Download`})]})})}function B({loopId:e,path:t,mode:n,onMode:r,showToggle:i}){return(0,L.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-hairline bg-surface px-5 py-1.5`,children:[i&&n&&r&&(0,L.jsx)(`div`,{className:`inline-flex overflow-hidden rounded-control border border-hairline`,children:[`preview`,`source`].map(e=>(0,L.jsx)(`button`,{type:`button`,onClick:()=>r(e),className:`cursor-pointer border-none px-2.5 py-0.5 text-caption font-medium transition-colors ${n===e?`bg-raised text-display`:`bg-transparent text-secondary hover:text-display`}`,children:e===`preview`?`Preview`:`Source`},e))}),(0,L.jsx)(`a`,{href:F(e,t),download:!0,className:`ml-auto shrink-0 text-caption font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Download ↓`})]})}function V({html:e}){return(0,L.jsx)(`iframe`,{title:`Rendered HTML artifact (sandboxed)`,srcDoc:e,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,className:`h-[min(70vh,620px)] w-full border-0 bg-white`})}function H({loopId:e,file:t}){let[n,r]=(0,D.useState)(!1);return(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(B,{loopId:e,path:t.path,showToggle:!1}),n?(0,L.jsxs)(`div`,{className:`px-5 py-8 text-body text-secondary`,children:[`Couldn't load this image.`,` `,(0,L.jsx)(`a`,{href:F(e,t.path),download:!0,className:`text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Download`}),` `,`instead.`]}):(0,L.jsx)(`div`,{className:`flex justify-center overflow-auto px-5 py-6`,children:(0,L.jsx)(`img`,{src:I(e,t.path),alt:t.path,onError:()=>r(!0),className:`max-w-full rounded-control border border-hairline bg-white object-contain`})})]})}function U({loopId:e,file:t,kind:n}){let[r,i]=(0,D.useState)({loading:!0}),[a,o]=(0,D.useState)(`preview`);if((0,D.useEffect)(()=>{let n=!0;return i({loading:!0}),S({data:{loopId:e,path:t.path}}).then(e=>n&&i(e)).catch(e=>n&&i({error:String(e)})),()=>{n=!1}},[e,t.path,t.updatedAt]),`loading`in r)return(0,L.jsx)(`div`,{className:`px-5 py-6 text-body text-disabled`,children:`Loading…`});if(`binary`in r)return(0,L.jsx)(z,{loopId:e,path:t.path,oversize:r.oversize});if(`error`in r)return(0,L.jsxs)(`div`,{className:`px-5 py-6 text-body text-accent`,children:[`Couldn't load this file - `,r.error]});let s=r.text||`(empty file)`,c=n===`html`||n===`markdown`,l=!c||a===`source`;return(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(B,{loopId:e,path:t.path,mode:a,onMode:o,showToggle:c}),n===`html`&&!l?(0,L.jsx)(V,{html:r.text||``}):n===`markdown`&&!l?(0,L.jsx)(E,{content:s}):(0,L.jsx)(`pre`,{className:`m-0 overflow-x-auto whitespace-pre-wrap px-5 py-4 font-mono text-label leading-relaxed text-secondary`,children:s})]})}function W({loopId:e,file:t}){let n=P(t.path);return t.oversize?(0,L.jsx)(z,{loopId:e,path:t.path,oversize:!0}):n===`image`?(0,L.jsx)(H,{loopId:e,file:t},`${t.path}:${t.updatedAt??``}`):t.binary?(0,L.jsx)(z,{loopId:e,path:t.path,oversize:!1}):(0,L.jsx)(U,{loopId:e,file:t,kind:n},t.path)}function be({loopId:e,configuredPaths:t,running:r}){let[i,a]=(0,D.useState)(null),[s,c]=(0,D.useState)(null),l=(0,D.useRef)(0),u=(0,D.useCallback)(async()=>{let t=++l.current;try{let n=await x({data:{loopId:e}});t===l.current&&a(n)}catch{t===l.current&&a(e=>e??[])}},[e]);(0,D.useEffect)(()=>{a(null),c(null),u()},[e,u]),(0,D.useEffect)(()=>{let e=setInterval(()=>void u(),r?4e3:12e3);return()=>clearInterval(e)},[r,u]);let d=i??[],f=s&&d.some(e=>e.path===s)?s:d[0]?.path??null,p=d.find(e=>e.path===f)??null;return(0,L.jsxs)(`section`,{id:`files`,className:`min-w-0`,children:[(0,L.jsxs)(`div`,{className:`mb-2.5 flex items-end justify-between gap-3 border-b border-hairline pb-1.5`,children:[(0,L.jsxs)(`h2`,{className:`text-label font-semibold text-secondary`,children:[`Files`,i?` (${d.length})`:``]}),(0,L.jsxs)(`span`,{className:`text-caption font-medium text-disabled`,children:[`MEMORY.md + `,t.length,` artifact`,t.length===1?``:`s`]})]}),d.length===0?(0,L.jsx)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 py-10 text-center text-body text-disabled shadow-card`,children:i==null?`Loading…`:`No loop file has been written yet. Runs create MEMORY.md and any configured artifacts.`}):(0,L.jsxs)(`div`,{className:`grid h-[min(600px,68vh)] grid-cols-1 overflow-hidden rounded-card border border-hairline bg-surface shadow-card sm:grid-cols-[210px_1fr]`,children:[(0,L.jsx)(`nav`,{className:`max-h-44 overflow-y-auto border-b border-hairline sm:max-h-none sm:border-b-0 sm:border-r`,children:(0,L.jsx)(`ul`,{className:`py-1.5`,children:d.map(e=>{let t=e.path===f;return(0,L.jsx)(`li`,{children:(0,L.jsx)(`button`,{type:`button`,onClick:()=>c(e.path),className:`flex w-full items-center border-l-2 px-3 py-2 text-left transition-colors ${t?`border-display bg-raised`:`border-transparent hover:bg-raised/60`}`,children:(0,L.jsx)(`span`,{className:`block min-w-0 flex-1 truncate font-mono text-label ${t?`text-display`:`text-primary`}`,title:e.path,children:e.path})})},e.path)})})}),(0,L.jsx)(`div`,{className:`min-w-0 overflow-y-auto`,children:p&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(R,{path:p.path,meta:[p.size==null?``:o(p.size),`updated ${n(p.updatedAt)}`].filter(Boolean).join(` · `)}),(0,L.jsx)(W,{loopId:e,file:p})]})})]})]})}var xe=[`claude-code`,`codex`,`pi`],Se=new Set([`all loops`,`active`,`paused`,`blocked`]);function Ce(e){return e.normalize(`NFKC`).trim().replace(/\s+/gu,` `).toLocaleLowerCase(`en-US`)}function G(e){if(e===void 0)return{ok:!0,value:[]};if(!Array.isArray(e))return{ok:!1,detail:`tags must be an array of strings`};if(e.length>4)return{ok:!1,detail:`tags must contain at most 4 values`};let t=[],n=new Set;for(let r of e){if(typeof r!=`string`)return{ok:!1,detail:`tags must contain only strings`};if(/\p{Cc}|\p{Cf}|\p{Default_Ignorable_Code_Point}/u.test(r))return{ok:!1,detail:`tags must not contain control or invisible characters`};let e=Ce(r);if(!e)return{ok:!1,detail:`tags must not contain empty values`};if([...e].length>64)return{ok:!1,detail:`each tag must contain at most 64 characters`};if(Se.has(e))return{ok:!1,detail:`reserved tag: ${e}`};if(n.has(e))return{ok:!1,detail:`duplicate tag: ${e}`};n.add(e),t.push(e)}return{ok:!0,value:[...t].sort()}}var K={"claude-code":`Claude Code`,codex:`Codex`,pi:`Pi`},q=`mt-1 text-caption leading-snug text-disabled`;function J(e){let t=e?.schedule;return{name:e?.name??``,tags:e?.tags??[],tagDraft:``,mode:t?.mode??`cron`,cron:t?.mode===`cron`?t.cron:`0 */3 * * *`,timezone:t?.mode===`cron`?t.timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`,overlap:t?.mode===`cron`?t.overlap:`queue-one`,delayMinutes:String(t?.mode===`continuous`?t.delayMinutes:1),workdir:e?.workdir??``,agent:e?.agent??`claude-code`,model:e?.model??``,reasoningEffort:e?.reasoningEffort??``,prompt:e?.prompt??``,keep:e?.statusDefinitions?.keep??``,noChange:e?.statusDefinitions?.noChange??``,block:e?.statusDefinitions?.block??``,artifacts:(e?.artifacts??[]).join(`
|
|
2
|
-
`)}}function Y({title:e,hint:t}){return(0,L.jsxs)(`div`,{className:`mb-3 mt-7 border-b border-hairline pb-1.5 first:mt-2`,children:[(0,L.jsx)(`h2`,{className:y,children:e}),t&&(0,L.jsx)(`div`,{className:`mt-0.5 text-caption text-disabled`,children:t})]})}function X({label:e,value:t,onChange:n,mono:r,hint:i,placeholder:a}){let o=(0,D.useId)();return(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`label`,{htmlFor:o,className:p,children:e}),(0,L.jsx)(`input`,{id:o,className:`${m} ${r?`font-mono`:``}`,value:t,placeholder:a,onChange:e=>n(e.target.value)}),i&&(0,L.jsx)(`div`,{className:q,children:i})]})}function Z({label:e,value:t,onChange:n,rows:r=4,mono:i,hint:a}){let o=(0,D.useId)();return(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`label`,{htmlFor:o,className:p,children:e}),(0,L.jsx)(`textarea`,{id:o,rows:r,className:`${m} h-auto resize-y ${i?`font-mono`:``}`,value:t,onChange:e=>n(e.target.value)}),a&&(0,L.jsx)(`div`,{className:q,children:a})]})}var we=(0,D.forwardRef)(function({initial:e},t){let[n,r]=(0,D.useState)(()=>J(e)),[i,a]=(0,D.useState)(null),[o,s]=(0,D.useState)(null),c=(0,D.useId)(),l=(0,D.useId)(),d=(0,D.useId)(),f=(0,D.useRef)(null),m=(0,D.useRef)(null),h=(e,t)=>r(n=>({...n,[e]:t})),g=()=>{let e=n.tagDraft.trim()?[n.tagDraft]:[];if(!e.length){h(`tagDraft`,``);return}let t=G([...n.tags,...e]);if(!t.ok){s(t.detail);return}r(e=>({...e,tags:t.value,tagDraft:``})),s(null),t.value.length===4&&requestAnimationFrame(()=>{document.activeElement===document.body&&f.current?.focus()})};return(0,D.useImperativeHandle)(t,()=>({read(){let e=[[`Name`,n.name],[`Working directory`,n.workdir],[`Prompt`,n.prompt],[`Keep definition`,n.keep],[`No-change definition`,n.noChange],[`Block definition`,n.block]].find(([,e])=>!e.trim());if(e)return a(`${e[0]} is required.`),null;let t=G([...n.tags,...n.tagDraft.trim()?[n.tagDraft]:[]]);if(!t.ok)return s(t.detail),a(null),null;let r=Number(n.delayMinutes);if(n.mode===`continuous`&&(!Number.isInteger(r)||r<1))return a(`Continuous delay must be an integer of at least 1 minute.`),null;let i=n.mode===`cron`?{mode:`cron`,cron:n.cron.trim(),timezone:n.timezone.trim(),overlap:n.overlap}:{mode:`continuous`,delayMinutes:r};return a(null),s(null),{name:n.name.trim(),tags:t.value,schedule:i,workdir:n.workdir.trim(),agent:n.agent,model:n.model.trim()||null,reasoningEffort:n.reasoningEffort.trim()||null,prompt:n.prompt,statusDefinitions:{keep:n.keep,noChange:n.noChange,block:n.block},artifacts:n.artifacts.split(/\r?\n/).filter(e=>e.length>0)}}})),(0,L.jsxs)(`div`,{className:`grid gap-x-10 lg:grid-cols-[minmax(300px,380px)_minmax(0,1fr)]`,children:[(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(Y,{title:`Basics`}),(0,L.jsx)(X,{label:`Name`,value:n.name,onChange:e=>h(`name`,e)}),(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`div`,{id:c,className:p,children:`Tags`}),(0,L.jsxs)(`div`,{ref:f,role:`group`,tabIndex:-1,"aria-labelledby":c,"aria-describedby":`${l}${o?` ${d}`:``}`,"aria-invalid":o?`true`:void 0,className:`flex min-h-10 flex-wrap items-center gap-1.5 rounded-control border border-wire bg-surface px-2.5 py-1.5 outline-none transition-shadow focus-within:border-transparent focus-within:shadow-focus`,children:[n.tags.map(e=>(0,L.jsxs)(`span`,{className:`inline-flex h-6 max-w-full items-center gap-1 rounded-full bg-raised px-2.5 text-caption font-medium text-secondary`,children:[(0,L.jsx)(`span`,{className:`max-w-52 truncate`,title:e,children:e}),(0,L.jsx)(`button`,{type:`button`,"aria-label":`Remove tag ${e}`,onClick:()=>{h(`tags`,n.tags.filter(t=>t!==e)),s(null),requestAnimationFrame(()=>(m.current??f.current)?.focus())},className:`-mr-1 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-full text-disabled transition-colors hover:bg-surface hover:text-primary ${_}`,children:(0,L.jsx)(`span`,{"aria-hidden":!0,children:`×`})})]},e)),n.tags.length<4&&(0,L.jsx)(`input`,{ref:m,"aria-label":`Add tag`,value:n.tagDraft,placeholder:n.tags.length?`Add another…`:`Add a tag…`,onChange:e=>{h(`tagDraft`,e.target.value),s(null)},onKeyDown:e=>{e.nativeEvent.isComposing||(e.key===`Enter`?(e.preventDefault(),g()):e.key===`Backspace`&&!n.tagDraft&&n.tags.length&&h(`tags`,n.tags.slice(0,-1)))},onBlur:g,className:`h-6 min-w-28 flex-1 bg-transparent px-1 text-sm text-primary outline-none placeholder:text-disabled`})]}),(0,L.jsxs)(`div`,{id:l,className:q,children:[`Up to `,4,`. Press Enter to add.`]}),o&&(0,L.jsx)(`div`,{id:d,role:`alert`,className:`mt-1 text-caption text-accent`,children:o})]}),(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`label`,{className:p,children:`Schedule`}),(0,L.jsxs)(`select`,{"aria-label":`Schedule`,className:u,value:n.mode,onChange:e=>h(`mode`,e.target.value),children:[(0,L.jsx)(`option`,{value:`cron`,children:`Cron`}),(0,L.jsx)(`option`,{value:`continuous`,children:`Continuous`})]})]}),n.mode===`cron`?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(X,{label:`Cron expression`,value:n.cron,onChange:e=>h(`cron`,e),mono:!0}),(0,L.jsx)(X,{label:`Timezone`,value:n.timezone,onChange:e=>h(`timezone`,e),mono:!0,hint:`IANA timezone, for example America/Los_Angeles.`}),(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`label`,{className:p,children:`Cron overlap`}),(0,L.jsxs)(`select`,{"aria-label":`Cron overlap`,className:u,value:n.overlap,onChange:e=>h(`overlap`,e.target.value),children:[(0,L.jsx)(`option`,{value:`skip`,children:`Skip occurrence`}),(0,L.jsx)(`option`,{value:`queue-one`,children:`Queue one follow-up`})]}),(0,L.jsx)(`div`,{className:q,children:`Applies only when a cron occurrence is due while a run is still open.`})]})]}):(0,L.jsx)(X,{label:`Delay after terminal run (minutes)`,value:n.delayMinutes,onChange:e=>h(`delayMinutes`,e),mono:!0}),(0,L.jsx)(Y,{title:`Execution`}),(0,L.jsx)(X,{label:`Working directory`,value:n.workdir,onChange:e=>h(`workdir`,e),mono:!0,placeholder:`/Users/you/project`}),(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`label`,{className:p,children:`Coding agent`}),(0,L.jsx)(`select`,{"aria-label":`Coding agent`,className:u,value:n.agent,onChange:e=>h(`agent`,e.target.value),children:xe.map(e=>(0,L.jsx)(`option`,{value:e,children:K[e]??e},e))})]}),(0,L.jsx)(X,{label:`Model`,value:n.model,onChange:e=>h(`model`,e),placeholder:`default`,hint:`Optional. Empty uses the agent default.`}),(0,L.jsx)(X,{label:`Reasoning effort`,value:n.reasoningEffort,onChange:e=>h(`reasoningEffort`,e),placeholder:`default`,hint:`Optional. Empty uses the agent default.`})]}),(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(Y,{title:`Prompt`,hint:`Sent unchanged before Pievo appends the report contract.`}),(0,L.jsx)(Z,{label:`User prompt`,value:n.prompt,onChange:e=>h(`prompt`,e),rows:10}),(0,L.jsx)(Y,{title:`Status definitions`,hint:`All three definitions are required and are appended to every run.`}),(0,L.jsx)(Z,{label:`keep`,value:n.keep,onChange:e=>h(`keep`,e),rows:2}),(0,L.jsx)(Z,{label:`no-change`,value:n.noChange,onChange:e=>h(`noChange`,e),rows:2}),(0,L.jsx)(Z,{label:`block`,value:n.block,onChange:e=>h(`block`,e),rows:2}),(0,L.jsx)(Y,{title:`Artifacts`,hint:`Optional .md or .html file names (up to 4, 2 MB each) that runs update and the dashboard renders. One name per line. Every loop also has MEMORY.md.`}),(0,L.jsx)(Z,{label:`Artifact files`,value:n.artifacts,onChange:e=>h(`artifacts`,e),rows:6,mono:!0}),i&&(0,L.jsx)(`div`,{className:`mt-4 text-body text-accent`,children:i})]})]})}),Te={"claude-code":`Claude Code`,codex:`Codex`,pi:`Pi`};function Ee({id:t}){let n=oe(),[r,i]=(0,D.useState)(null),[a,o]=(0,D.useState)(null),[s,c]=(0,D.useState)(null),[u,f]=(0,D.useState)(!1),[p,m]=(0,D.useState)(!1),[_,v]=(0,D.useState)(null),[ae,x]=(0,D.useState)(!1),[S,w]=h(),[T,E]=(0,D.useState)([]),O=(0,D.useRef)(null),k=(0,D.useRef)(!1),A=(0,D.useCallback)(async(e=!1)=>{try{let e=await he({data:t});i(e),k.current=e.summary.deleteRequestedAt!=null,o(null)}catch(t){k.current?n({to:`/`}):e||o(String(t))}},[t]);(0,D.useEffect)(()=>{i(null),f(!1),x(!1),E([]),A()},[t,A]);let j=!!r?.summary.running;(0,D.useEffect)(()=>{if(u)return;let e=setInterval(()=>void A(!0),j||k.current?3e3:8e3);return()=>clearInterval(e)},[u,j,A]);async function M(){c(null),v(`run`);try{let e=await se({data:t});if(e.error)return c(`Run failed: ${e.error}`);w({label:e.coalesced?`Already queued`:`Queued`,hold:4e3}),await A()}finally{v(null)}}async function N(e){c(null),v(`lifecycle`);try{let r=e===`pause`?await ce({data:t}):e===`start`?await ge({data:t}):e===`stop`?await _e({data:t}):await fe({data:t});if(r.error)return c(`${e[0].toUpperCase()+e.slice(1)} failed: ${r.error}`);if(x(!1),r.deleted)return n({to:`/`});e===`delete`&&(k.current=!0),await A(),w({label:e===`start`?`Started`:e===`pause`?`Paused`:e===`stop`?`Stop requested`:`Deleting`})}finally{v(null)}}async function P(){let e=O.current?.read();if(e){c(null),v(`save`);try{let n=await le({data:{id:t,patch:e}});if(n.error)return c(`Save failed: ${n.error}`);f(!1),await A(),w({label:`Saved`})}finally{v(null)}}}let F=(0,L.jsxs)(b,{to:`/`,className:`inline-flex items-center gap-1.5 text-meta font-medium text-secondary hover:text-display`,children:[(0,L.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Loops`]});if(a)return(0,L.jsx)($,{back:F,children:(0,L.jsx)(ne,{title:`Couldn't load this loop.`,detail:a,onRetry:()=>void A()})});if(!r)return(0,L.jsx)($,{back:F,children:(0,L.jsx)(te,{})});let{loop:I,summary:R,runs:z}=r,B=ue(R)===`deleting`,V=R.enabled&&!B,H=!R.enabled&&!B,U=_!=null,W=me(r.machine.daemonProtocol),xe=!B&&!!R.running&&W.supported,Se=r.machine.online,Ce=r.machine.presence===`asleep`;if(u)return(0,L.jsxs)($,{back:F,children:[(0,L.jsx)(Oe,{name:R.name,onBack:()=>f(!1)}),(0,L.jsxs)(`div`,{className:`mt-5 rounded-card border border-hairline bg-surface px-6 pb-6 pt-2 shadow-card`,children:[(0,L.jsx)(we,{ref:O,initial:I}),(0,L.jsxs)(`div`,{className:`mt-7 border-t border-hairline pt-4`,children:[s&&(0,L.jsx)(l,{message:s,onDismiss:()=>c(null),className:`mb-3`}),(0,L.jsxs)(`div`,{className:`flex gap-2.5`,children:[(0,L.jsx)(`button`,{className:d,disabled:_===`save`,onClick:()=>void P(),children:_===`save`?`Saving…`:`Save`}),(0,L.jsx)(`button`,{className:g,disabled:_===`save`,onClick:()=>f(!1),children:`Cancel`})]})]})]})]});let G=I.schedule.mode===`cron`?`${I.schedule.cron} · ${I.schedule.timezone} · overlap ${I.schedule.overlap}`:`continuous · ${I.schedule.delayMinutes}m after terminal`,K=I.model||`default`,q=I.reasoningEffort||`default`,J=T.length?C(R.runs,T):R.runs,Y=async()=>{let e=J[0];if(!e)return 0;let n=await pe({data:{loopId:t,beforeTs:e.ts,limit:16}});return n.length&&E(e=>C(e,n)),n.length};return(0,L.jsxs)($,{back:F,children:[(0,L.jsxs)(`header`,{className:`rounded-card border border-hairline bg-surface px-[26px] pb-5 pt-[22px] shadow-card`,children:[(0,L.jsx)(ye,{loop:R,runs:J,onLoadMore:Y,onPickRun:e=>n({to:`/loops/$loopId/runs/$runId`,params:{loopId:t,runId:e.id}})}),(0,L.jsxs)(`div`,{className:`mt-5 border-t border-hairline pt-4`,children:[r.machine.needsUpdate&&(0,L.jsx)(De,{tone:`warn`,text:`Daemon update required · server requires v${r.machine.requiredDaemonVersion}; machine reports ${r.machine.daemonVersion?`v${r.machine.daemonVersion}`:`an unknown version`}.`,action:`Update daemon`,onAction:()=>m(!0)}),!Se&&(0,L.jsx)(De,{text:`Machine ${Ce?`seems asleep or offline`:`is offline`}; queued work starts when it reconnects.${r.machine.lastSeen?` Last seen ${e(r.machine.lastSeen)}.`:``}`,action:`Reconnect`,onAction:()=>m(!0)}),s&&(0,L.jsx)(l,{message:s,onDismiss:()=>c(null),className:`mb-2.5`}),S&&(0,L.jsx)(`div`,{className:`mb-2.5`,children:(0,L.jsx)(ee,{label:S.label,tone:S.tone,onUndo:S.undo})}),(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,L.jsx)(`button`,{className:d,disabled:U||B,onClick:()=>void M(),children:_===`run`?`Queuing…`:`Run once`}),(0,L.jsx)(`button`,{className:g,disabled:U||B,onClick:()=>f(!0),children:`Settings`}),(0,L.jsx)(`button`,{className:g,disabled:U||!H,onClick:()=>void N(`start`),children:`Start`}),(0,L.jsx)(`button`,{className:g,disabled:U||!V,onClick:()=>void N(`pause`),children:`Pause`}),(0,L.jsx)(`button`,{className:ie,disabled:U||!xe,title:R.running&&!W.supported?de:R.running?void 0:`No run is currently running`,onClick:()=>void N(`stop`),children:`Stop`}),(0,L.jsx)(`button`,{className:ie,disabled:U||B,onClick:()=>x(!0),children:B?`Deleting…`:`Delete`})]}),ae&&!B&&(0,L.jsx)(`div`,{className:`mt-3`,children:(0,L.jsx)(re,{prompt:`Stop this loop and delete its server data?`,note:`This stops the loop and deletes server history, the loop memory, and artifacts. Files in the working directory are not deleted. If the machine is unreachable, its local process may continue running.`,cta:`Delete`,danger:!0,busy:U,onConfirm:()=>void N(`delete`),onCancel:()=>x(!1)})})]})]}),(0,L.jsxs)(`div`,{className:`mt-6 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(300px,360px)]`,children:[(0,L.jsx)(be,{loopId:t,configuredPaths:I.artifacts,running:j}),(0,L.jsx)(ke,{loopId:t,summary:R,runs:z,older:T,onPickRun:e=>n({to:`/loops/$loopId/runs/$runId`,params:{loopId:t,runId:e.id}}),onMore:Y})]}),(0,L.jsxs)(`section`,{className:`mt-6 min-w-0 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card`,children:[(0,L.jsx)(`h2`,{className:`mb-4 border-b border-hairline pb-1.5 ${y}`,children:`Configuration`}),(0,L.jsxs)(`dl`,{className:`grid min-w-0 gap-x-6 gap-y-4 md:grid-cols-[180px_minmax(0,1fr)]`,children:[(0,L.jsx)(Q,{label:`Schedule`,children:(0,L.jsx)(`code`,{className:`break-all font-mono`,children:G})}),(0,L.jsx)(Q,{label:`Tags`,children:I.tags.length?(0,L.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:I.tags.map(e=>(0,L.jsx)(`span`,{className:`inline-flex h-[22px] max-w-52 items-center truncate rounded-full bg-raised px-2.5 text-caption font-medium text-secondary`,title:e,children:e},e))}):(0,L.jsx)(`span`,{className:`text-disabled`,children:`None`})}),(0,L.jsx)(Q,{label:`Working directory`,children:(0,L.jsx)(`code`,{className:`break-all font-mono`,children:I.workdir})}),(0,L.jsx)(Q,{label:`Agent`,children:Te[I.agent]}),(0,L.jsxs)(Q,{label:`Model / effort`,children:[K,` / `,q]}),(0,L.jsx)(Q,{label:`Prompt`,children:(0,L.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-sans`,children:I.prompt})}),(0,L.jsx)(Q,{label:`Status definitions`,children:(0,L.jsxs)(`ul`,{className:`space-y-1`,children:[(0,L.jsxs)(`li`,{children:[(0,L.jsx)(`b`,{children:`keep:`}),` `,I.statusDefinitions.keep]}),(0,L.jsxs)(`li`,{children:[(0,L.jsx)(`b`,{children:`no-change:`}),` `,I.statusDefinitions.noChange]}),(0,L.jsxs)(`li`,{children:[(0,L.jsx)(`b`,{children:`block:`}),` `,I.statusDefinitions.block]})]})}),(0,L.jsx)(Q,{label:`Artifacts`,children:I.artifacts.length?(0,L.jsx)(`ul`,{className:`space-y-1`,children:I.artifacts.map(e=>(0,L.jsx)(`li`,{children:(0,L.jsx)(`code`,{className:`break-all font-mono`,children:e})},e))}):(0,L.jsx)(`span`,{className:`text-disabled`,children:`None`})})]})]}),(0,L.jsx)(ve,{open:p,onClose:()=>m(!1)})]})}function Q({label:e,children:t}){return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`dt`,{className:`text-label font-medium text-secondary`,children:e}),(0,L.jsx)(`dd`,{className:`min-w-0 text-body text-primary`,children:t})]})}function De({text:e,action:t,onAction:n,tone:r}){return(0,L.jsxs)(`div`,{className:`mb-2.5 flex flex-wrap items-center gap-3 rounded-control border px-4 py-2.5 text-meta ${r===`warn`?`border-warn/40 bg-warn/10`:`border-hairline bg-raised`}`,children:[(0,L.jsx)(`span`,{className:`text-secondary`,children:e}),(0,L.jsx)(`button`,{onClick:n,className:`ml-auto font-medium text-interactive underline`,children:t})]})}function Oe({name:e,onBack:t}){return(0,L.jsxs)(`div`,{children:[(0,L.jsxs)(`button`,{type:`button`,onClick:t,className:f,children:[(0,L.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Back to loop`]}),(0,L.jsxs)(`h1`,{className:`mt-2.5 text-[24px] font-semibold text-display`,children:[`Settings · `,e]}),(0,L.jsx)(`p`,{className:`mt-1.5 text-meta text-secondary`,children:`Edit tags, schedule, execution settings, prompt, status definitions, and artifact files.`})]})}function $({back:e,children:t}){return(0,L.jsxs)(`main`,{className:`mx-auto max-w-[1360px] px-8 pb-24 pt-10`,children:[(0,L.jsx)(`div`,{className:`mb-5`,children:e}),t]})}function ke({loopId:e,summary:n,runs:r,older:i,onMore:o,onPickRun:l}){let u=(0,D.useMemo)(()=>i.length?C(n.runs,i):n.runs,[n.runs,i]);return(0,L.jsxs)(`section`,{className:`min-w-0`,children:[(0,L.jsx)(`div`,{className:`mb-2.5 border-b border-hairline pb-1.5`,children:(0,L.jsxs)(`h2`,{className:y,children:[`Runs (`,n.runCount,`)`]})}),n.runCount===0?(0,L.jsx)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 py-10 text-center text-body text-disabled`,children:`Never run`}):(0,L.jsxs)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 pb-4 pt-5 shadow-card`,children:[(0,L.jsx)(T,{loop:n,runs:u,total:n.runCount,onLoadMore:o,onPickRun:l}),(0,L.jsx)(`ul`,{className:`mt-5 max-h-[clamp(280px,46vh,520px)] divide-y divide-hairline overflow-y-auto border-t border-hairline`,children:r.map(n=>(0,L.jsx)(`li`,{children:(0,L.jsxs)(b,{to:`/loops/$loopId/runs/$runId`,params:{loopId:e,runId:n.id},className:`flex items-start gap-2.5 py-2.5 hover:bg-raised`,children:[(0,L.jsx)(`span`,{className:`mt-1 inline-block size-2.5 shrink-0 rounded-[2px]`,style:{background:s(n)},title:t(n)}),(0,L.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,L.jsxs)(`span`,{className:`flex justify-between gap-2`,children:[(0,L.jsx)(`span`,{className:`font-mono text-label text-secondary`,children:a(n.ts)}),(0,L.jsx)(`span`,{className:`font-mono text-caption text-disabled`,children:c(n.durationMs)})]}),(0,L.jsx)(`span`,{className:`mt-0.5 block line-clamp-2 text-meta text-primary`,children:n.phase===`pending`?`Queued`:n.phase===`running`?(0,L.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,L.jsx)(`span`,{className:`size-1.5 rounded-full`,style:v}),`Running`]}):n.error||n.message||t(n)})]})]})},n.id))})]})]})}function Ae(){let{loopId:e}=w.useParams();return(0,L.jsx)(Ee,{id:e})}export{Ae as component};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{D as e,E as t,I as n,L as r,O as i,T as a,c as o,l as s,o as c,r as l,s as u,u as d,v as f,y as p,z as m}from"./actionUi-BZrLpgHT.js";import{T as h,b as g,d as _,p as v,u as y}from"./preload-helper-BSxGu4d0.js";import{t as b}from"./index-D0FIKiiW.js";import{t as x}from"./MarkdownView-BuFKr9Jg.js";var S=m(r(),1);function C(e,t){return e.startsWith(`@@`)?{kind:`hunk`,text:e,gutter:``}:t?e.startsWith(`+`)?{kind:`add`,text:e.slice(1),gutter:`+`}:e.startsWith(`-`)?{kind:`del`,text:e.slice(1),gutter:`-`}:e.startsWith(` `)?{kind:`context`,text:e.slice(1),gutter:``}:{kind:`context`,text:e,gutter:``}:e.startsWith(`---`)||e.startsWith(`+++`)||e.startsWith(`diff `)||e.startsWith(`index `)||e.startsWith(`Index:`)||e.startsWith(`===`)?{kind:`meta`,text:e,gutter:``}:{kind:`context`,text:e,gutter:``}}function w(e){if(!e)return[];let t=e.endsWith(`
|
|
2
|
-
`)?e.slice(0,-1):e,n=!1;return t.split(`
|
|
3
|
-
`).map(e=>{let t=C(e,n);return t.kind===`hunk`&&(n=!0),t})}function T(e){let t=0,n=0;for(let r of e)r.kind===`add`?t++:r.kind===`del`&&n++;return{added:t,removed:n}}var E=n(),D={added:`Added`,modified:`Changed`,removed:`Removed`},O={added:`text-success`,modified:`text-secondary`,removed:`text-accent`};function k(e){return e==null||e===0?``:`${e>0?`+`:`−`}${i(e)}`}var A={add:`bg-[color:var(--color-diff-add-bg)] text-primary`,del:`bg-[color:var(--color-diff-del-bg)] text-primary`,hunk:`bg-[color:var(--color-diff-hunk-bg)] text-disabled`,meta:`text-disabled`,context:`text-secondary`},j={add:`text-success`,del:`text-accent`,hunk:`text-disabled`,meta:`text-disabled`,context:`text-disabled`};function M({lines:e}){return(0,E.jsx)(`div`,{className:`min-w-0 max-h-[420px] overflow-auto border-t border-hairline bg-raised font-mono text-label leading-[1.55]`,children:(0,E.jsx)(`div`,{className:`min-w-max`,children:e.map((e,t)=>(0,E.jsxs)(`div`,{className:`flex ${A[e.kind]}`,children:[(0,E.jsx)(`span`,{"aria-hidden":!0,className:`w-6 shrink-0 select-none pl-2.5 text-center ${j[e.kind]}`,children:e.gutter}),(0,E.jsx)(`span`,{className:`whitespace-pre pr-4`,children:e.text||`\xA0`})]},t))})})}function N({f:e,lines:t}){let n=k(e.sizeDelta),r=t?T(t):null;return(0,E.jsxs)(`span`,{className:`flex min-w-0 flex-wrap items-baseline gap-x-2.5 gap-y-1 text-meta`,children:[(0,E.jsx)(`span`,{className:`shrink-0 text-caption font-medium ${O[e.status]}`,children:D[e.status]}),(0,E.jsx)(`span`,{className:`min-w-0 break-all font-mono text-primary`,children:e.path}),r&&(r.added>0||r.removed>0)&&(0,E.jsxs)(`span`,{className:`shrink-0 font-mono text-caption`,children:[r.added>0&&(0,E.jsxs)(`span`,{className:`text-success`,children:[`+`,r.added]}),r.added>0&&r.removed>0&&` `,r.removed>0&&(0,E.jsxs)(`span`,{className:`text-accent`,children:[`−`,r.removed]})]}),n&&(0,E.jsx)(`span`,{className:`shrink-0 font-mono text-caption text-disabled`,children:n}),e.binary&&(0,E.jsx)(`span`,{className:`shrink-0 text-caption text-secondary`,children:`Binary`}),e.tooLarge&&(0,E.jsx)(`span`,{className:`shrink-0 text-caption text-secondary`,children:`Too large to diff`})]})}var P=40;function F({files:e}){return(0,E.jsx)(`div`,{className:`space-y-1.5`,children:e.map(e=>{if(!e.diff)return(0,E.jsx)(`div`,{className:`rounded-control border border-hairline bg-surface px-3.5 py-2`,children:(0,E.jsx)(N,{f:e,lines:null})},e.path);let t=w(e.diff);return(0,E.jsxs)(`details`,{open:t.length<=P,className:`group min-w-0 overflow-hidden rounded-control border border-hairline bg-surface`,children:[(0,E.jsxs)(`summary`,{className:`flex cursor-pointer select-none items-center gap-2 px-3.5 py-2 marker:content-['']`,children:[(0,E.jsx)(`span`,{"aria-hidden":!0,className:`shrink-0 text-micro text-disabled transition-transform group-open:rotate-90`,children:`▸`}),(0,E.jsx)(N,{f:e,lines:t})]}),(0,E.jsx)(M,{lines:t})]},e.path)})})}function I({label:e,count:t,children:n}){return(0,E.jsxs)(`section`,{className:`min-w-0 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card`,children:[(0,E.jsxs)(`div`,{className:`mb-3.5 border-b border-hairline pb-1.5 ${p}`,children:[e,t!=null&&(0,E.jsxs)(`span`,{className:`text-disabled`,children:[` (`,t,`)`]})]}),n]})}function L({k:e,children:t}){return(0,E.jsxs)(`div`,{className:`min-w-0`,children:[(0,E.jsx)(`div`,{className:`mb-0.5 text-label font-medium text-secondary`,children:e}),(0,E.jsx)(`div`,{className:`min-w-0 text-body text-primary`,children:t})]})}function R(e){return!e||e.inputTokens===void 0&&e.outputTokens===void 0?null:(e.inputTokens??0)+(e.outputTokens??0)}function z({run:e}){let[t,n]=(0,S.useState)(null);return(0,S.useEffect)(()=>{if(e.phase===`pending`||e.phase===`running`)return;let t=!0;return _({data:{runId:e.id}}).then(e=>t&&n(e)).catch(()=>t&&n({hasSnapshot:!1,files:[]})),()=>{t=!1}},[e.id,e.phase]),e.phase===`pending`||e.phase===`running`?(0,E.jsx)(I,{label:`Changes`,children:(0,E.jsx)(`div`,{className:`text-body text-disabled`,children:`File changes appear once the run finishes.`})}):t?t.hasSnapshot?(0,E.jsx)(I,{label:`Changes`,count:t.files.length,children:t.files.length===0?(0,E.jsx)(`div`,{className:`text-body text-disabled`,children:`No files changed since the previous run.`}):(0,E.jsx)(F,{files:t.files})}):(0,E.jsx)(I,{label:`Changes`,children:(0,E.jsx)(`div`,{className:`text-body text-disabled`,children:`No file snapshot was recorded for this run.`})}):(0,E.jsx)(I,{label:`Changes`,children:(0,E.jsx)(c,{})})}function B({run:e}){let t=a(Math.max(0,Date.now()-Date.parse(e.ts)));return(0,E.jsx)(I,{label:`Activity`,children:(0,E.jsxs)(`div`,{className:`flex items-center gap-2.5 text-body text-secondary`,children:[(0,E.jsx)(`span`,{"aria-hidden":!0,className:`size-2 shrink-0 rounded-full`,style:f}),(0,E.jsxs)(`span`,{children:[`Run in progress`,t?` for ${t}`:``,`.`]})]})})}function V({id:e}){let[t,n]=(0,S.useState)(!1);return(0,E.jsxs)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(e),n(!0),setTimeout(()=>n(!1),1200)},title:`Copy session id`,className:`inline-flex max-w-full cursor-pointer items-center gap-1.5 border-none bg-transparent p-0 text-left font-mono text-label text-secondary transition-colors hover:text-display`,children:[(0,E.jsx)(`span`,{className:`truncate`,children:e}),(0,E.jsx)(`span`,{"aria-hidden":!0,className:`shrink-0 text-micro text-disabled`,children:t?`✓ copied`:`copy`})]})}var H=64;function U({loopId:n,runId:r}){let[i,f]=(0,S.useState)(null),[p,m]=(0,S.useState)(null),[_,b]=(0,S.useState)(!1),[C,w]=(0,S.useState)(null),T=(0,S.useCallback)(async()=>{try{f(await y({data:n})),w(null)}catch(e){w(String(e))}},[n]),D=(0,S.useCallback)(async()=>{try{f(await y({data:n}))}catch{}},[n]);(0,S.useEffect)(()=>{f(null),m(null),b(!1),w(null),T()},[n,r,T]);let O=i?.runs.find(e=>e.id===r)??p,k=R(O?.usage??null);(0,S.useEffect)(()=>{if(!i||O||_)return;let e=!0;return(async()=>{try{let t=i.runs.length?i.runs[i.runs.length-1].ts:new Date().toISOString();for(let i=0;i<H&&e;i++){let i=await v({data:{loopId:n,beforeTs:t,limit:100}});if(!i.length)break;let a=i.find(e=>e.id===r);if(a){e&&m(a);return}t=i[0].ts}}finally{e&&b(!0)}})(),()=>{e=!1}},[i,O,_,n,r]);let A=!!O&&(O.phase===`pending`||O.phase===`running`||!!O.reconciliation);(0,S.useEffect)(()=>{if(!A)return;let e=setInterval(()=>void D(),3e3);return()=>clearInterval(e)},[A,D]);async function j(){if(!O||!confirm(`Stop this run? If it is running, Pievo will ask the daemon to terminate it.`))return;let e=await g({data:O.id});if(e?.error){alert(`Stop failed: ${e.error}`);return}await T()}if(C)return(0,E.jsx)(l,{title:`Couldn't load this run.`,detail:C,onRetry:()=>void T()});if(!i||!O&&!_)return(0,E.jsx)(c,{});if(!O)return(0,E.jsxs)(`div`,{className:`rounded-card border border-hairline bg-surface px-6 py-10 text-center shadow-card`,children:[(0,E.jsx)(`div`,{className:`text-[14px] text-secondary`,children:`This run is no longer available.`}),(0,E.jsx)(h,{to:`/loops/$loopId`,params:{loopId:n},className:`mt-3 inline-block text-label font-medium text-interactive underline underline-offset-2 hover:text-display`,children:`← Back to the loop`})]});let M=i.summary.name;return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`header`,{className:`rounded-card border border-hairline bg-surface px-6 pb-5 pt-[22px] shadow-card`,children:[(0,E.jsx)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-6 gap-y-4`,children:(0,E.jsxs)(`div`,{className:`min-w-0`,children:[(0,E.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,E.jsxs)(`h1`,{className:`text-[26px] font-medium leading-tight tracking-tight text-display`,children:[`Run · `,M]}),(0,E.jsx)(o,{run:O,colorText:!0})]}),(0,E.jsxs)(`div`,{className:`mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1.5 text-meta text-secondary`,children:[(0,E.jsx)(`span`,{className:`text-primary`,children:t(O.ts)}),(0,E.jsx)(`span`,{className:`text-wire`,children:`·`}),O.durationMs!=null&&(0,E.jsx)(u,{tone:`ink`,children:a(O.durationMs)}),(0,E.jsx)(`code`,{className:`font-mono text-disabled`,children:O.id})]})]})}),(0,E.jsxs)(`div`,{className:`mt-5 flex flex-wrap gap-2.5 border-t border-hairline pt-4`,children:[(0,E.jsx)(h,{to:`/loops/$loopId`,params:{loopId:n},className:s,children:`View the whole loop →`}),(O.phase===`pending`||O.phase===`running`)&&(0,E.jsx)(`button`,{type:`button`,onClick:j,className:d,disabled:O.phase===`running`&&i.machine.daemonProtocol!==5,title:O.phase===`running`&&i.machine.daemonProtocol!==5?"Daemon upgrade required to stop a running process. Run `npm install -g @kky42/pievo@latest`, then `pievo daemon restart`.":void 0,children:`Stop run`})]})]}),(0,E.jsxs)(`div`,{className:`mt-6 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(300px,360px)]`,children:[(0,E.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-6`,children:[O.phase===`pending`?(0,E.jsx)(I,{label:`Activity`,children:(0,E.jsx)(`div`,{className:`text-body text-secondary`,children:`Queued; it starts when this loop is free and the machine polls.`})}):O.phase===`running`?(0,E.jsx)(B,{run:O}):O.reconciliation?(0,E.jsx)(I,{label:`Recovery`,children:(0,E.jsx)(`div`,{className:`text-body text-secondary`,children:O.reconciliation===`blocking`?i.machine.presence===`online`?`The machine is online and checking an interrupted run. Queued work starts automatically after recovery.`:`Waiting for the machine to reconnect and check an interrupted run. Queued work starts automatically; no action is required.`:`This interrupted run no longer blocks queued work. Pievo will still accept its saved report if it arrives.`})}):null,O.reportIncident&&(0,E.jsx)(I,{label:`Terminal report rejected`,children:(0,E.jsxs)(`div`,{className:`space-y-3 text-body text-primary`,children:[(0,E.jsx)(`div`,{className:`font-medium`,children:O.reportIncident.code}),(0,E.jsx)(`div`,{className:`break-words text-secondary`,children:O.reportIncident.reason}),(0,E.jsxs)(`dl`,{className:`grid min-w-0 grid-cols-[max-content_minmax(0,1fr)] gap-x-3 gap-y-1.5 text-label`,children:[(0,E.jsx)(`dt`,{className:`text-secondary`,children:`Fault domain`}),(0,E.jsx)(`dd`,{children:O.reportIncident.faultDomain}),(0,E.jsx)(`dt`,{className:`text-secondary`,children:`Recommended action`}),(0,E.jsx)(`dd`,{className:`break-words`,children:O.reportIncident.recommendedAction}),(0,E.jsx)(`dt`,{className:`text-secondary`,children:`Report ID`}),(0,E.jsx)(`dd`,{className:`break-all font-mono`,children:O.reportIncident.reportId})]})]})}),O.fileNotices&&O.fileNotices.length>0&&(0,E.jsx)(I,{label:`Loop files not kept`,children:(0,E.jsx)(`ul`,{className:`list-disc space-y-1.5 pl-5 text-body text-primary`,children:O.fileNotices.map(e=>(0,E.jsx)(`li`,{className:`break-words`,children:e},e))})}),O.message&&(0,E.jsx)(I,{label:`Report`,children:(0,E.jsx)(`div`,{className:`break-words rounded-control border border-hairline bg-raised text-body leading-relaxed text-primary`,children:(0,E.jsx)(x,{content:O.message})})}),(0,E.jsx)(z,{run:O}),O.finalText&&!O.message&&(0,E.jsx)(I,{label:`Final output`,children:(0,E.jsx)(`div`,{className:`whitespace-pre-wrap break-words text-body text-primary`,children:O.finalText})})]}),(0,E.jsx)(`div`,{className:`flex min-w-0 flex-col gap-6`,children:(0,E.jsx)(I,{label:`Details`,children:(0,E.jsxs)(`div`,{className:`space-y-3.5`,children:[O.status&&(0,E.jsx)(L,{k:`Status`,children:O.status}),O.durationMs!=null&&(0,E.jsx)(L,{k:`Duration`,children:a(O.durationMs)}),O.exitCode!=null&&(0,E.jsx)(L,{k:`Exit code`,children:O.exitCode}),k!=null&&(0,E.jsx)(L,{k:`Token usage`,children:(0,E.jsxs)(`span`,{className:`text-disabled`,children:[e(k),` tokens`]})}),O.error&&(0,E.jsx)(L,{k:`Error`,children:(0,E.jsx)(`span`,{className:`break-words`,style:{color:`var(--color-run-error)`},children:O.error})}),O.sessionId&&(0,E.jsx)(L,{k:`Session`,children:(0,E.jsx)(V,{id:O.sessionId})})]})})})]})]})}function W(){let{loopId:e,runId:t}=b.useParams();return(0,E.jsxs)(`main`,{className:`mx-auto max-w-[1360px] px-8 pb-24 pt-6`,children:[(0,E.jsx)(`div`,{className:`mb-5`,children:(0,E.jsxs)(h,{to:`/loops/$loopId`,params:{loopId:e},className:`inline-flex items-center gap-1.5 text-label font-medium text-secondary transition-colors hover:text-display`,children:[(0,E.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Back to loop`]})}),(0,E.jsx)(U,{loopId:e,runId:t})]})}export{W as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as e}from"./actionUi-BZrLpgHT.js";import{i as t,r as n}from"./index-D0FIKiiW.js";var r=e();function i(){return(0,r.jsx)(t,{initial:n.useLoaderData()})}export{i as component};
|