@kky42/pievo-server 2.4.13 → 3.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.
Files changed (89) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{actionUi-D8m1FDHO.js → actionUi-BZrLpgHT.js} +1 -1
  3. package/.output/public/assets/app-DXLuQNb9.css +2 -0
  4. package/.output/public/assets/index-Di_wpAtL.js +10 -0
  5. package/.output/public/assets/loops._loopId-X3ClNPMY.js +67 -0
  6. package/.output/public/assets/loops._loopId_.runs._runId-ByU2BSyF.js +3 -0
  7. package/.output/public/assets/preload-helper-hRTYB_ju.js +3 -0
  8. package/.output/public/assets/{routes-79D939J4.js → routes-BIOJZsig.js} +1 -1
  9. package/.output/public/assets/routes-K8D5uBiV.js +1 -0
  10. package/.output/server/_chunks/ssr-renderer.mjs +1 -1
  11. package/.output/server/_libs/{drizzle-orm+postgres.mjs → drizzle-orm.mjs} +93 -2218
  12. package/.output/server/_ssr/{MachinesModal-DBIP648Z.mjs → MachinesModal-CmVMec6B.mjs} +52 -46
  13. package/.output/server/_ssr/{actionUi-C_WswNb1.mjs → actionUi-DE-Pb2tv.mjs} +4 -5
  14. package/.output/server/_ssr/{artifactFiles-BvVmixrs.mjs → artifactFiles-Di1xDKvX.mjs} +5 -7
  15. package/.output/server/_ssr/{artifactKind-DRCbYHZU.mjs → artifactKind-DqpmtxDU.mjs} +3 -9
  16. package/.output/server/_ssr/{boot-U-CFI65B.mjs → boot-CYRi-wez.mjs} +531 -1976
  17. package/.output/server/_ssr/lifecycleUi-BsbUsi5K.mjs +106 -0
  18. package/.output/server/_ssr/{loopApi-C4nN0msL.mjs → loopApi-Bez1rHV0.mjs} +50 -65
  19. package/.output/server/_ssr/{loopProjection-DMSNHux6.mjs → loopProjection-esCjyZJg.mjs} +4 -20
  20. package/.output/server/_ssr/{loops._loopId-Q4pRYPip.mjs → loops._loopId-KUezNY69.mjs} +133 -24
  21. package/.output/server/_ssr/{loops._loopId_.runs._runId-DNXVmCt5.mjs → loops._loopId_.runs._runId-BFP9oMrp.mjs} +2 -7
  22. package/.output/server/_ssr/{loops._loopId_.runs._runId-ty3AhkOi.mjs → loops._loopId_.runs._runId-DOkUEesG.mjs} +18 -33
  23. package/.output/server/_ssr/{machineFns-CkNms3zA.mjs → machineFns-CniGcY8s.mjs} +13 -49
  24. package/.output/server/_ssr/networkAccess-CIlK3ION.mjs +30 -0
  25. package/.output/server/_ssr/router-BFIH2UAE.mjs +362 -0
  26. package/.output/server/_ssr/routes-BSVBANI3.mjs +12 -0
  27. package/.output/server/_ssr/{routes-BaanDO41.mjs → routes-DnE7XDe_.mjs} +242 -77
  28. package/.output/server/_ssr/{routes-B3fulW5I.mjs → routes-ngpX7h8D.mjs} +2 -4
  29. package/.output/server/_ssr/ssr.mjs +25 -34
  30. package/.output/server/_ssr/start-B5_9Z5W-.mjs +35 -0
  31. package/.output/server/{_tanstack-start-manifest_v-DkmxsHDK.mjs → _tanstack-start-manifest_v-DnwAupbZ.mjs} +8 -13
  32. package/.output/server/drizzle/0000_baseline.sql +6 -97
  33. package/.output/server/drizzle/meta/_journal.json +2 -16
  34. package/.output/server/index.mjs +43 -50
  35. package/drizzle/0000_baseline.sql +6 -97
  36. package/drizzle/meta/_journal.json +2 -16
  37. package/package.json +4 -8
  38. package/scripts/pievo-server.mjs +49 -47
  39. package/scripts/server-cli-lib.mjs +21 -12
  40. package/scripts/server-network.mjs +139 -0
  41. package/.output/public/assets/SignIn-CDCdDD1a.js +0 -1
  42. package/.output/public/assets/app-PPhgN9iN.css +0 -2
  43. package/.output/public/assets/index-c0XPWXuz.js +0 -10
  44. package/.output/public/assets/loops._loopId-D7i_BGiE.js +0 -67
  45. package/.output/public/assets/loops._loopId_.runs._runId-CksSrEY7.js +0 -3
  46. package/.output/public/assets/preload-helper-Zcmr31XG.js +0 -5
  47. package/.output/public/assets/routes-BYgl3Tmv.js +0 -1
  48. package/.output/server/_libs/@aws-crypto/crc32+[...].mjs +0 -419
  49. package/.output/server/_libs/@aws-sdk/checksums+[...].mjs +0 -10732
  50. package/.output/server/_libs/@aws-sdk/client-s3+[...].mjs +0 -9475
  51. package/.output/server/_libs/@aws-sdk/credential-provider-http+[...].mjs +0 -137
  52. package/.output/server/_libs/@aws-sdk/credential-provider-ini+[...].mjs +0 -440
  53. package/.output/server/_libs/@aws-sdk/credential-provider-process+[...].mjs +0 -62
  54. package/.output/server/_libs/@aws-sdk/credential-provider-sso+[...].mjs +0 -818
  55. package/.output/server/_libs/@aws-sdk/credential-provider-web-identity+[...].mjs +0 -59
  56. package/.output/server/_libs/@smithy/credential-provider-imds+[...].mjs +0 -342
  57. package/.output/server/_libs/aws-crypto__crc32c.mjs +0 -314
  58. package/.output/server/_libs/aws-sdk__nested-clients.mjs +0 -2671
  59. package/.output/server/_ssr/SignIn-Bp3uWaCQ.mjs +0 -53
  60. package/.output/server/_ssr/artifacts-CzDJLaa6.mjs +0 -2
  61. package/.output/server/_ssr/auth-BV0MxVdo.mjs +0 -38355
  62. package/.output/server/_ssr/auth-client-RTpMpT4L.mjs +0 -1070
  63. package/.output/server/_ssr/boot-CsLXrLEa.mjs +0 -2
  64. package/.output/server/_ssr/bun-sqlite-dialect-BW9W1_Ps-D9KUBJ-L.mjs +0 -162
  65. package/.output/server/_ssr/core-RrmWoKne.mjs +0 -5
  66. package/.output/server/_ssr/d1-sqlite-dialect-BLC8LXE6-CVHRzH1n.mjs +0 -112
  67. package/.output/server/_ssr/db-BTX-xORB.mjs +0 -2
  68. package/.output/server/_ssr/dist-D7UDVZ5G.mjs +0 -342
  69. package/.output/server/_ssr/factory-DYFx1fg-.mjs +0 -6903
  70. package/.output/server/_ssr/kysely-adapter-CwdB7yBh.mjs +0 -2
  71. package/.output/server/_ssr/kysely-migration-tables-JkVUjPF_-bPAX9LR_.mjs +0 -19
  72. package/.output/server/_ssr/logger-CwiKSMp6.mjs +0 -2
  73. package/.output/server/_ssr/node-sqlite-dialect-B_g92oFK.mjs +0 -162
  74. package/.output/server/_ssr/router-DCNZ2xLm.mjs +0 -543
  75. package/.output/server/_ssr/routes-8JSF7bX_.mjs +0 -27
  76. package/.output/server/_ssr/runDiff-D7CxAgYL.mjs +0 -2
  77. package/.output/server/_ssr/start-4ifArtKx.mjs +0 -4
  78. package/.output/server/_ssr/store-DSNbXxqz.mjs +0 -2
  79. package/.output/server/_ssr/tokens-DzUv7CCp.mjs +0 -2
  80. package/.output/server/drizzle/0001_add_pi_agent.sql +0 -9
  81. package/.output/server/drizzle/0002_remove_teams.sql +0 -15
  82. package/.output/server/node_modules/tslib/modules/index.js +0 -70
  83. package/.output/server/node_modules/tslib/modules/package.json +0 -3
  84. package/.output/server/node_modules/tslib/package.json +0 -47
  85. package/.output/server/node_modules/tslib/tslib.js +0 -484
  86. package/.output/server/package.json +0 -9
  87. package/drizzle/0001_add_pi_agent.sql +0 -9
  88. package/drizzle/0002_remove_teams.sql +0 -15
  89. package/scripts/prestart.mjs +0 -66
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-DkmxsHDK.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-DnwAupbZ.js
2
2
  var tsrStartManifest = () => ({ routes: {
3
3
  __root__: {
4
4
  filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/__root.tsx",
@@ -8,7 +8,6 @@ var tsrStartManifest = () => ({ routes: {
8
8
  "/api/ready",
9
9
  "/loops/$loopId",
10
10
  "/machine/report",
11
- "/api/auth/$",
12
11
  "/api/machine/cli",
13
12
  "/api/machine/poll",
14
13
  "/api/machine/status",
@@ -18,34 +17,30 @@ var tsrStartManifest = () => ({ routes: {
18
17
  "/loops/$loopId_/runs/$runId"
19
18
  ],
20
19
  preloads: [
21
- "/assets/index-c0XPWXuz.js",
22
- "/assets/actionUi-D8m1FDHO.js",
23
- "/assets/preload-helper-Zcmr31XG.js"
20
+ "/assets/index-Di_wpAtL.js",
21
+ "/assets/actionUi-BZrLpgHT.js",
22
+ "/assets/preload-helper-hRTYB_ju.js"
24
23
  ],
25
24
  scripts: [{ attrs: {
26
25
  type: "module",
27
26
  async: !0,
28
- src: "/assets/index-c0XPWXuz.js"
27
+ src: "/assets/index-Di_wpAtL.js"
29
28
  } }]
30
29
  },
31
30
  "/": {
32
31
  filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/index.tsx",
33
32
  children: void 0,
34
- preloads: [
35
- "/assets/routes-79D939J4.js",
36
- "/assets/routes-BYgl3Tmv.js",
37
- "/assets/SignIn-CDCdDD1a.js"
38
- ]
33
+ preloads: ["/assets/routes-BIOJZsig.js", "/assets/routes-K8D5uBiV.js"]
39
34
  },
40
35
  "/loops/$loopId": {
41
36
  filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/loops.$loopId.tsx",
42
37
  children: void 0,
43
- preloads: ["/assets/loops._loopId-D7i_BGiE.js", "/assets/SignIn-CDCdDD1a.js"]
38
+ preloads: ["/assets/loops._loopId-X3ClNPMY.js"]
44
39
  },
45
40
  "/loops/$loopId_/runs/$runId": {
46
41
  filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/loops.$loopId_.runs.$runId.tsx",
47
42
  children: void 0,
48
- preloads: ["/assets/loops._loopId_.runs._runId-CksSrEY7.js", "/assets/SignIn-CDCdDD1a.js"]
43
+ preloads: ["/assets/loops._loopId_.runs._runId-ByU2BSyF.js"]
49
44
  }
50
45
  } });
51
46
  //#endregion
@@ -18,17 +18,14 @@ CREATE TABLE "blobs" (
18
18
  --> statement-breakpoint
19
19
  CREATE TABLE "connect_keys" (
20
20
  "machine_id" text PRIMARY KEY NOT NULL,
21
- "user_id" text NOT NULL,
22
- "team_id" text NOT NULL,
23
21
  "minted_at" text NOT NULL
24
22
  );
25
23
  --> statement-breakpoint
26
24
  CREATE TABLE "loops" (
27
25
  "id" text PRIMARY KEY NOT NULL,
28
- "user_id" text NOT NULL,
29
- "team_id" text NOT NULL,
30
26
  "machine_id" text NOT NULL,
31
27
  "name" text NOT NULL,
28
+ "tags" text[] DEFAULT ARRAY[]::text[] NOT NULL,
32
29
  "prompt" text NOT NULL,
33
30
  "status_keep" text NOT NULL,
34
31
  "status_no_change" text NOT NULL,
@@ -51,15 +48,15 @@ CREATE TABLE "loops" (
51
48
  "last_run_index" integer DEFAULT 0 NOT NULL,
52
49
  "created_at" text NOT NULL,
53
50
  "updated_at" text NOT NULL,
54
- CONSTRAINT "loops_agent_check" CHECK ("loops"."agent" IN ('claude-code', 'codex')),
51
+ CONSTRAINT "loops_agent_check" CHECK ("loops"."agent" IN ('claude-code', 'codex', 'pi')),
52
+ CONSTRAINT "loops_tags_count_check" CHECK (cardinality("loops"."tags") <= 4),
53
+ CONSTRAINT "loops_tags_reserved_check" CHECK (NOT ("loops"."tags" && ARRAY['all loops', 'active', 'paused', 'blocked']::text[])),
55
54
  CONSTRAINT "loops_schedule_mode_check" CHECK ("loops"."schedule_mode" IN ('cron', 'continuous')),
56
55
  CONSTRAINT "loops_cron_overlap_check" CHECK ("loops"."cron_overlap" IN ('skip', 'queue-one'))
57
56
  );
58
57
  --> statement-breakpoint
59
58
  CREATE TABLE "machines" (
60
59
  "id" text PRIMARY KEY NOT NULL,
61
- "user_id" text NOT NULL,
62
- "team_id" text NOT NULL,
63
60
  "name" text NOT NULL,
64
61
  "hostname" text,
65
62
  "platform" text,
@@ -125,40 +122,12 @@ CREATE TABLE "runs" (
125
122
  "cancel_requested_at" timestamp with time zone,
126
123
  "heartbeat_at" text,
127
124
  "report_incident" jsonb,
128
- CONSTRAINT "runs_agent_check" CHECK ("runs"."agent" IS NULL OR "runs"."agent" IN ('claude-code', 'codex')),
125
+ CONSTRAINT "runs_agent_check" CHECK ("runs"."agent" IS NULL OR "runs"."agent" IN ('claude-code', 'codex', 'pi')),
129
126
  CONSTRAINT "runs_phase_check" CHECK ("runs"."phase" IN ('pending', 'running', 'done', 'error', 'canceled')),
130
127
  CONSTRAINT "runs_requested_by_check" CHECK ("runs"."requested_by" IN ('owner', 'system')),
131
128
  CONSTRAINT "runs_status_check" CHECK ("runs"."status" IS NULL OR "runs"."status" IN ('keep', 'no-change', 'block'))
132
129
  );
133
130
  --> statement-breakpoint
134
- CREATE TABLE "team_invites" (
135
- "token" text PRIMARY KEY NOT NULL,
136
- "team_id" text NOT NULL,
137
- "role" text DEFAULT 'member' NOT NULL,
138
- "invited_by_user_id" text NOT NULL,
139
- "expires_at" text NOT NULL,
140
- "redeemed_at" text,
141
- "redeemed_by_user_id" text,
142
- "created_at" text NOT NULL,
143
- CONSTRAINT "team_invites_role_check" CHECK ("team_invites"."role" IN ('owner', 'member'))
144
- );
145
- --> statement-breakpoint
146
- CREATE TABLE "team_members" (
147
- "id" text PRIMARY KEY NOT NULL,
148
- "team_id" text NOT NULL,
149
- "user_id" text NOT NULL,
150
- "role" text DEFAULT 'member' NOT NULL,
151
- "created_at" text NOT NULL,
152
- CONSTRAINT "team_members_role_check" CHECK ("team_members"."role" IN ('owner', 'member'))
153
- );
154
- --> statement-breakpoint
155
- CREATE TABLE "teams" (
156
- "id" text PRIMARY KEY NOT NULL,
157
- "name" text NOT NULL,
158
- "owner_user_id" text,
159
- "created_at" text NOT NULL
160
- );
161
- --> statement-breakpoint
162
131
  CREATE TABLE "terminal_report_incidents" (
163
132
  "id" text PRIMARY KEY NOT NULL,
164
133
  "run_id" text NOT NULL,
@@ -170,65 +139,11 @@ CREATE TABLE "terminal_report_incidents" (
170
139
  CONSTRAINT "terminal_report_incidents_disposition_check" CHECK ("terminal_report_incidents"."disposition" IN ('run-error', 'telemetry-rejected'))
171
140
  );
172
141
  --> statement-breakpoint
173
- CREATE TABLE "account" (
174
- "id" text PRIMARY KEY NOT NULL,
175
- "account_id" text NOT NULL,
176
- "provider_id" text NOT NULL,
177
- "user_id" text NOT NULL,
178
- "access_token" text,
179
- "refresh_token" text,
180
- "id_token" text,
181
- "access_token_expires_at" timestamp,
182
- "refresh_token_expires_at" timestamp,
183
- "scope" text,
184
- "password" text,
185
- "created_at" timestamp DEFAULT now() NOT NULL,
186
- "updated_at" timestamp NOT NULL
187
- );
188
- --> statement-breakpoint
189
- CREATE TABLE "session" (
190
- "id" text PRIMARY KEY NOT NULL,
191
- "expires_at" timestamp NOT NULL,
192
- "token" text NOT NULL,
193
- "created_at" timestamp DEFAULT now() NOT NULL,
194
- "updated_at" timestamp NOT NULL,
195
- "ip_address" text,
196
- "user_agent" text,
197
- "user_id" text NOT NULL,
198
- CONSTRAINT "session_token_unique" UNIQUE("token")
199
- );
200
- --> statement-breakpoint
201
- CREATE TABLE "user" (
202
- "id" text PRIMARY KEY NOT NULL,
203
- "name" text NOT NULL,
204
- "email" text NOT NULL,
205
- "email_verified" boolean DEFAULT false NOT NULL,
206
- "image" text,
207
- "created_at" timestamp DEFAULT now() NOT NULL,
208
- "updated_at" timestamp DEFAULT now() NOT NULL,
209
- CONSTRAINT "user_email_unique" UNIQUE("email")
210
- );
211
- --> statement-breakpoint
212
- CREATE TABLE "verification" (
213
- "id" text PRIMARY KEY NOT NULL,
214
- "identifier" text NOT NULL,
215
- "value" text NOT NULL,
216
- "expires_at" timestamp NOT NULL,
217
- "created_at" timestamp DEFAULT now() NOT NULL,
218
- "updated_at" timestamp DEFAULT now() NOT NULL
219
- );
220
- --> statement-breakpoint
221
- ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
222
- ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
223
142
  CREATE INDEX "artifact_files_loop_idx" ON "artifact_files" USING btree ("loop_id");--> statement-breakpoint
224
143
  CREATE UNIQUE INDEX "artifact_files_loop_path_idx" ON "artifact_files" USING btree ("loop_id","path");--> statement-breakpoint
225
144
  CREATE INDEX "artifact_files_hash_idx" ON "artifact_files" USING btree ("hash");--> statement-breakpoint
226
- CREATE INDEX "loops_user_idx" ON "loops" USING btree ("user_id");--> statement-breakpoint
227
- CREATE INDEX "loops_team_idx" ON "loops" USING btree ("team_id");--> statement-breakpoint
228
145
  CREATE INDEX "loops_machine_idx" ON "loops" USING btree ("machine_id");--> statement-breakpoint
229
146
  CREATE INDEX "delete_requested_loops" ON "loops" USING btree ("delete_requested_at") WHERE "loops"."delete_requested_at" IS NOT NULL;--> statement-breakpoint
230
- CREATE INDEX "machines_user_idx" ON "machines" USING btree ("user_id");--> statement-breakpoint
231
- CREATE INDEX "machines_team_idx" ON "machines" USING btree ("team_id");--> statement-breakpoint
232
147
  CREATE INDEX "run_leases_run_idx" ON "run_leases" USING btree ("run_id");--> statement-breakpoint
233
148
  CREATE INDEX "run_leases_loop_idx" ON "run_leases" USING btree ("loop_id");--> statement-breakpoint
234
149
  CREATE INDEX "report_receipts_created" ON "run_report_receipts" USING btree ("created_at");--> statement-breakpoint
@@ -241,11 +156,5 @@ CREATE UNIQUE INDEX "runs_loop_run_index_idx" ON "runs" USING btree ("loop_id","
241
156
  CREATE INDEX "runs_loop_terminal_history_idx" ON "runs" USING btree ("loop_id","run_index") WHERE "runs"."run_index" IS NOT NULL AND "runs"."phase" IN ('done', 'error', 'canceled');--> statement-breakpoint
242
157
  CREATE UNIQUE INDEX "runs_loop_pending_idx" ON "runs" USING btree ("loop_id") WHERE "runs"."phase" = 'pending';--> statement-breakpoint
243
158
  CREATE UNIQUE INDEX "one_running_run_per_loop" ON "runs" USING btree ("loop_id") WHERE "runs"."phase" = 'running';--> statement-breakpoint
244
- CREATE INDEX "team_invites_team_idx" ON "team_invites" USING btree ("team_id");--> statement-breakpoint
245
- CREATE INDEX "team_members_team_idx" ON "team_members" USING btree ("team_id");--> statement-breakpoint
246
- CREATE INDEX "team_members_user_idx" ON "team_members" USING btree ("user_id");--> statement-breakpoint
247
159
  CREATE INDEX "terminal_report_incidents_report_id" ON "terminal_report_incidents" USING btree ("report_id");--> statement-breakpoint
248
- CREATE INDEX "terminal_report_incidents_created" ON "terminal_report_incidents" USING btree ("created_at");--> statement-breakpoint
249
- CREATE INDEX "account_userId_idx" ON "account" USING btree ("user_id");--> statement-breakpoint
250
- CREATE INDEX "session_userId_idx" ON "session" USING btree ("user_id");--> statement-breakpoint
251
- CREATE INDEX "verification_identifier_idx" ON "verification" USING btree ("identifier");
160
+ CREATE INDEX "terminal_report_incidents_created" ON "terminal_report_incidents" USING btree ("created_at");
@@ -5,23 +5,9 @@
5
5
  {
6
6
  "idx": 0,
7
7
  "version": "7",
8
- "when": 1785146849042,
8
+ "when": 1792651729223,
9
9
  "tag": "0000_baseline",
10
10
  "breakpoints": true
11
- },
12
- {
13
- "idx": 1,
14
- "version": "7",
15
- "when": 1785146849043,
16
- "tag": "0001_add_pi_agent",
17
- "breakpoints": true
18
- },
19
- {
20
- "idx": 2,
21
- "version": "7",
22
- "when": 1785146849044,
23
- "tag": "0002_remove_teams",
24
- "breakpoints": true
25
11
  }
26
12
  ]
27
- }
13
+ }
@@ -11,80 +11,73 @@ var headers = ((m) => function headersRouteRule(event) {
11
11
  //#endregion
12
12
  //#region #nitro/virtual/public-assets-data
13
13
  var public_assets_data_default = {
14
- "/assets/SignIn-CDCdDD1a.js": {
14
+ "/assets/actionUi-BZrLpgHT.js": {
15
15
  "type": "text/javascript; charset=utf-8",
16
- "etag": "\"40c-/RdTmrHZx2QyiwvMHmltFRGrzQ0\"",
17
- "mtime": "2026-07-30T21:15:58.613Z",
18
- "size": 1036,
19
- "path": "../public/assets/SignIn-CDCdDD1a.js"
16
+ "etag": "\"4286-Qit0x3bDDnN7vmOhgEqWGOFur4I\"",
17
+ "mtime": "2026-10-22T07:10:25.845Z",
18
+ "size": 17030,
19
+ "path": "../public/assets/actionUi-BZrLpgHT.js"
20
+ },
21
+ "/assets/app-DXLuQNb9.css": {
22
+ "type": "text/css; charset=utf-8",
23
+ "etag": "\"982e-ISvSlt1vwctZ1Z6CMWC173FpzQY\"",
24
+ "mtime": "2026-10-22T07:10:25.845Z",
25
+ "size": 38958,
26
+ "path": "../public/assets/app-DXLuQNb9.css"
20
27
  },
21
28
  "/favicon.svg": {
22
29
  "type": "image/svg+xml",
23
30
  "etag": "\"2f9-diQHMODwkdsIQ2ssl9fzDaFKaXE\"",
24
- "mtime": "2026-07-30T21:15:59.407Z",
31
+ "mtime": "2026-10-22T07:10:26.305Z",
25
32
  "size": 761,
26
33
  "path": "../public/favicon.svg"
27
34
  },
28
- "/assets/actionUi-D8m1FDHO.js": {
29
- "type": "text/javascript; charset=utf-8",
30
- "etag": "\"4271-I+roDotQQJ9hIEa30gnj8d+Lfj4\"",
31
- "mtime": "2026-07-30T21:15:58.613Z",
32
- "size": 17009,
33
- "path": "../public/assets/actionUi-D8m1FDHO.js"
34
- },
35
- "/assets/app-PPhgN9iN.css": {
36
- "type": "text/css; charset=utf-8",
37
- "etag": "\"9412-GPk4dFarpnxamyPdzARrMdrHqgg\"",
38
- "mtime": "2026-07-30T21:15:58.613Z",
39
- "size": 37906,
40
- "path": "../public/assets/app-PPhgN9iN.css"
41
- },
42
- "/assets/index-c0XPWXuz.js": {
35
+ "/assets/loops._loopId_.runs._runId-ByU2BSyF.js": {
43
36
  "type": "text/javascript; charset=utf-8",
44
- "etag": "\"5d450-d96Q3MhOLrsAXScJghge6DQBbIk\"",
45
- "mtime": "2026-07-30T21:15:58.611Z",
46
- "size": 382032,
47
- "path": "../public/assets/index-c0XPWXuz.js"
37
+ "etag": "\"329d-FjaefYK56yjpjbOEISrMQmnn39E\"",
38
+ "mtime": "2026-10-22T07:10:25.845Z",
39
+ "size": 12957,
40
+ "path": "../public/assets/loops._loopId_.runs._runId-ByU2BSyF.js"
48
41
  },
49
- "/assets/loops._loopId-D7i_BGiE.js": {
42
+ "/assets/preload-helper-hRTYB_ju.js": {
50
43
  "type": "text/javascript; charset=utf-8",
51
- "etag": "\"1680c-h0isD8j2WpvNXeMACyilcQln5Xw\"",
52
- "mtime": "2026-07-30T21:15:58.613Z",
53
- "size": 92172,
54
- "path": "../public/assets/loops._loopId-D7i_BGiE.js"
44
+ "etag": "\"11674-LVTbrEq23Rxhef/ahfiBpq1pgSo\"",
45
+ "mtime": "2026-10-22T07:10:25.845Z",
46
+ "size": 71284,
47
+ "path": "../public/assets/preload-helper-hRTYB_ju.js"
55
48
  },
56
- "/assets/loops._loopId_.runs._runId-CksSrEY7.js": {
49
+ "/assets/index-Di_wpAtL.js": {
57
50
  "type": "text/javascript; charset=utf-8",
58
- "etag": "\"33f3-qHDK/IatLTMcKL1+9qi7QwDUg1M\"",
59
- "mtime": "2026-07-30T21:15:58.613Z",
60
- "size": 13299,
61
- "path": "../public/assets/loops._loopId_.runs._runId-CksSrEY7.js"
51
+ "etag": "\"5e2fa-fuWeczqLYxjWaK1uhVFAhHesD/M\"",
52
+ "mtime": "2026-10-22T07:10:25.844Z",
53
+ "size": 385786,
54
+ "path": "../public/assets/index-Di_wpAtL.js"
62
55
  },
63
- "/assets/preload-helper-Zcmr31XG.js": {
56
+ "/assets/loops._loopId-X3ClNPMY.js": {
64
57
  "type": "text/javascript; charset=utf-8",
65
- "etag": "\"18d18-G9+i7Qzcamv5ZtCE4/XQZiijK8g\"",
66
- "mtime": "2026-07-30T21:15:58.613Z",
67
- "size": 101656,
68
- "path": "../public/assets/preload-helper-Zcmr31XG.js"
58
+ "etag": "\"1749a-wvaPKbjZ5o8Gbh6hWtl3zld70zs\"",
59
+ "mtime": "2026-10-22T07:10:25.845Z",
60
+ "size": 95386,
61
+ "path": "../public/assets/loops._loopId-X3ClNPMY.js"
69
62
  },
70
- "/assets/routes-79D939J4.js": {
63
+ "/assets/routes-BIOJZsig.js": {
71
64
  "type": "text/javascript; charset=utf-8",
72
- "etag": "\"135-gCKzpj3BwMk9RN/0tzV8niPFaMI\"",
73
- "mtime": "2026-07-30T21:15:58.613Z",
65
+ "etag": "\"135-XoZP43FtQXsg+qNy3Rq8mg5WHbw\"",
66
+ "mtime": "2026-10-22T07:10:25.845Z",
74
67
  "size": 309,
75
- "path": "../public/assets/routes-79D939J4.js"
68
+ "path": "../public/assets/routes-BIOJZsig.js"
76
69
  },
77
- "/assets/routes-BYgl3Tmv.js": {
70
+ "/assets/routes-K8D5uBiV.js": {
78
71
  "type": "text/javascript; charset=utf-8",
79
- "etag": "\"1f4-tB+1GC0GoumAqxccSYZc96PAwXk\"",
80
- "mtime": "2026-07-30T21:15:58.613Z",
81
- "size": 500,
82
- "path": "../public/assets/routes-BYgl3Tmv.js"
72
+ "etag": "\"b7-hAMu5A8ozNBh8/2rgmiGEhnAvIs\"",
73
+ "mtime": "2026-10-22T07:10:25.845Z",
74
+ "size": 183,
75
+ "path": "../public/assets/routes-K8D5uBiV.js"
83
76
  },
84
77
  "/fonts/GeistPixel-Square.woff2": {
85
78
  "type": "font/woff2",
86
79
  "etag": "\"6f7c-IQXyklzDeInO8O/YtOs5/0tckOE\"",
87
- "mtime": "2026-07-30T21:15:59.407Z",
80
+ "mtime": "2026-10-22T07:10:26.305Z",
88
81
  "size": 28540,
89
82
  "path": "../public/fonts/GeistPixel-Square.woff2"
90
83
  }
@@ -18,17 +18,14 @@ CREATE TABLE "blobs" (
18
18
  --> statement-breakpoint
19
19
  CREATE TABLE "connect_keys" (
20
20
  "machine_id" text PRIMARY KEY NOT NULL,
21
- "user_id" text NOT NULL,
22
- "team_id" text NOT NULL,
23
21
  "minted_at" text NOT NULL
24
22
  );
25
23
  --> statement-breakpoint
26
24
  CREATE TABLE "loops" (
27
25
  "id" text PRIMARY KEY NOT NULL,
28
- "user_id" text NOT NULL,
29
- "team_id" text NOT NULL,
30
26
  "machine_id" text NOT NULL,
31
27
  "name" text NOT NULL,
28
+ "tags" text[] DEFAULT ARRAY[]::text[] NOT NULL,
32
29
  "prompt" text NOT NULL,
33
30
  "status_keep" text NOT NULL,
34
31
  "status_no_change" text NOT NULL,
@@ -51,15 +48,15 @@ CREATE TABLE "loops" (
51
48
  "last_run_index" integer DEFAULT 0 NOT NULL,
52
49
  "created_at" text NOT NULL,
53
50
  "updated_at" text NOT NULL,
54
- CONSTRAINT "loops_agent_check" CHECK ("loops"."agent" IN ('claude-code', 'codex')),
51
+ CONSTRAINT "loops_agent_check" CHECK ("loops"."agent" IN ('claude-code', 'codex', 'pi')),
52
+ CONSTRAINT "loops_tags_count_check" CHECK (cardinality("loops"."tags") <= 4),
53
+ CONSTRAINT "loops_tags_reserved_check" CHECK (NOT ("loops"."tags" && ARRAY['all loops', 'active', 'paused', 'blocked']::text[])),
55
54
  CONSTRAINT "loops_schedule_mode_check" CHECK ("loops"."schedule_mode" IN ('cron', 'continuous')),
56
55
  CONSTRAINT "loops_cron_overlap_check" CHECK ("loops"."cron_overlap" IN ('skip', 'queue-one'))
57
56
  );
58
57
  --> statement-breakpoint
59
58
  CREATE TABLE "machines" (
60
59
  "id" text PRIMARY KEY NOT NULL,
61
- "user_id" text NOT NULL,
62
- "team_id" text NOT NULL,
63
60
  "name" text NOT NULL,
64
61
  "hostname" text,
65
62
  "platform" text,
@@ -125,40 +122,12 @@ CREATE TABLE "runs" (
125
122
  "cancel_requested_at" timestamp with time zone,
126
123
  "heartbeat_at" text,
127
124
  "report_incident" jsonb,
128
- CONSTRAINT "runs_agent_check" CHECK ("runs"."agent" IS NULL OR "runs"."agent" IN ('claude-code', 'codex')),
125
+ CONSTRAINT "runs_agent_check" CHECK ("runs"."agent" IS NULL OR "runs"."agent" IN ('claude-code', 'codex', 'pi')),
129
126
  CONSTRAINT "runs_phase_check" CHECK ("runs"."phase" IN ('pending', 'running', 'done', 'error', 'canceled')),
130
127
  CONSTRAINT "runs_requested_by_check" CHECK ("runs"."requested_by" IN ('owner', 'system')),
131
128
  CONSTRAINT "runs_status_check" CHECK ("runs"."status" IS NULL OR "runs"."status" IN ('keep', 'no-change', 'block'))
132
129
  );
133
130
  --> statement-breakpoint
134
- CREATE TABLE "team_invites" (
135
- "token" text PRIMARY KEY NOT NULL,
136
- "team_id" text NOT NULL,
137
- "role" text DEFAULT 'member' NOT NULL,
138
- "invited_by_user_id" text NOT NULL,
139
- "expires_at" text NOT NULL,
140
- "redeemed_at" text,
141
- "redeemed_by_user_id" text,
142
- "created_at" text NOT NULL,
143
- CONSTRAINT "team_invites_role_check" CHECK ("team_invites"."role" IN ('owner', 'member'))
144
- );
145
- --> statement-breakpoint
146
- CREATE TABLE "team_members" (
147
- "id" text PRIMARY KEY NOT NULL,
148
- "team_id" text NOT NULL,
149
- "user_id" text NOT NULL,
150
- "role" text DEFAULT 'member' NOT NULL,
151
- "created_at" text NOT NULL,
152
- CONSTRAINT "team_members_role_check" CHECK ("team_members"."role" IN ('owner', 'member'))
153
- );
154
- --> statement-breakpoint
155
- CREATE TABLE "teams" (
156
- "id" text PRIMARY KEY NOT NULL,
157
- "name" text NOT NULL,
158
- "owner_user_id" text,
159
- "created_at" text NOT NULL
160
- );
161
- --> statement-breakpoint
162
131
  CREATE TABLE "terminal_report_incidents" (
163
132
  "id" text PRIMARY KEY NOT NULL,
164
133
  "run_id" text NOT NULL,
@@ -170,65 +139,11 @@ CREATE TABLE "terminal_report_incidents" (
170
139
  CONSTRAINT "terminal_report_incidents_disposition_check" CHECK ("terminal_report_incidents"."disposition" IN ('run-error', 'telemetry-rejected'))
171
140
  );
172
141
  --> statement-breakpoint
173
- CREATE TABLE "account" (
174
- "id" text PRIMARY KEY NOT NULL,
175
- "account_id" text NOT NULL,
176
- "provider_id" text NOT NULL,
177
- "user_id" text NOT NULL,
178
- "access_token" text,
179
- "refresh_token" text,
180
- "id_token" text,
181
- "access_token_expires_at" timestamp,
182
- "refresh_token_expires_at" timestamp,
183
- "scope" text,
184
- "password" text,
185
- "created_at" timestamp DEFAULT now() NOT NULL,
186
- "updated_at" timestamp NOT NULL
187
- );
188
- --> statement-breakpoint
189
- CREATE TABLE "session" (
190
- "id" text PRIMARY KEY NOT NULL,
191
- "expires_at" timestamp NOT NULL,
192
- "token" text NOT NULL,
193
- "created_at" timestamp DEFAULT now() NOT NULL,
194
- "updated_at" timestamp NOT NULL,
195
- "ip_address" text,
196
- "user_agent" text,
197
- "user_id" text NOT NULL,
198
- CONSTRAINT "session_token_unique" UNIQUE("token")
199
- );
200
- --> statement-breakpoint
201
- CREATE TABLE "user" (
202
- "id" text PRIMARY KEY NOT NULL,
203
- "name" text NOT NULL,
204
- "email" text NOT NULL,
205
- "email_verified" boolean DEFAULT false NOT NULL,
206
- "image" text,
207
- "created_at" timestamp DEFAULT now() NOT NULL,
208
- "updated_at" timestamp DEFAULT now() NOT NULL,
209
- CONSTRAINT "user_email_unique" UNIQUE("email")
210
- );
211
- --> statement-breakpoint
212
- CREATE TABLE "verification" (
213
- "id" text PRIMARY KEY NOT NULL,
214
- "identifier" text NOT NULL,
215
- "value" text NOT NULL,
216
- "expires_at" timestamp NOT NULL,
217
- "created_at" timestamp DEFAULT now() NOT NULL,
218
- "updated_at" timestamp DEFAULT now() NOT NULL
219
- );
220
- --> statement-breakpoint
221
- ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
222
- ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
223
142
  CREATE INDEX "artifact_files_loop_idx" ON "artifact_files" USING btree ("loop_id");--> statement-breakpoint
224
143
  CREATE UNIQUE INDEX "artifact_files_loop_path_idx" ON "artifact_files" USING btree ("loop_id","path");--> statement-breakpoint
225
144
  CREATE INDEX "artifact_files_hash_idx" ON "artifact_files" USING btree ("hash");--> statement-breakpoint
226
- CREATE INDEX "loops_user_idx" ON "loops" USING btree ("user_id");--> statement-breakpoint
227
- CREATE INDEX "loops_team_idx" ON "loops" USING btree ("team_id");--> statement-breakpoint
228
145
  CREATE INDEX "loops_machine_idx" ON "loops" USING btree ("machine_id");--> statement-breakpoint
229
146
  CREATE INDEX "delete_requested_loops" ON "loops" USING btree ("delete_requested_at") WHERE "loops"."delete_requested_at" IS NOT NULL;--> statement-breakpoint
230
- CREATE INDEX "machines_user_idx" ON "machines" USING btree ("user_id");--> statement-breakpoint
231
- CREATE INDEX "machines_team_idx" ON "machines" USING btree ("team_id");--> statement-breakpoint
232
147
  CREATE INDEX "run_leases_run_idx" ON "run_leases" USING btree ("run_id");--> statement-breakpoint
233
148
  CREATE INDEX "run_leases_loop_idx" ON "run_leases" USING btree ("loop_id");--> statement-breakpoint
234
149
  CREATE INDEX "report_receipts_created" ON "run_report_receipts" USING btree ("created_at");--> statement-breakpoint
@@ -241,11 +156,5 @@ CREATE UNIQUE INDEX "runs_loop_run_index_idx" ON "runs" USING btree ("loop_id","
241
156
  CREATE INDEX "runs_loop_terminal_history_idx" ON "runs" USING btree ("loop_id","run_index") WHERE "runs"."run_index" IS NOT NULL AND "runs"."phase" IN ('done', 'error', 'canceled');--> statement-breakpoint
242
157
  CREATE UNIQUE INDEX "runs_loop_pending_idx" ON "runs" USING btree ("loop_id") WHERE "runs"."phase" = 'pending';--> statement-breakpoint
243
158
  CREATE UNIQUE INDEX "one_running_run_per_loop" ON "runs" USING btree ("loop_id") WHERE "runs"."phase" = 'running';--> statement-breakpoint
244
- CREATE INDEX "team_invites_team_idx" ON "team_invites" USING btree ("team_id");--> statement-breakpoint
245
- CREATE INDEX "team_members_team_idx" ON "team_members" USING btree ("team_id");--> statement-breakpoint
246
- CREATE INDEX "team_members_user_idx" ON "team_members" USING btree ("user_id");--> statement-breakpoint
247
159
  CREATE INDEX "terminal_report_incidents_report_id" ON "terminal_report_incidents" USING btree ("report_id");--> statement-breakpoint
248
- CREATE INDEX "terminal_report_incidents_created" ON "terminal_report_incidents" USING btree ("created_at");--> statement-breakpoint
249
- CREATE INDEX "account_userId_idx" ON "account" USING btree ("user_id");--> statement-breakpoint
250
- CREATE INDEX "session_userId_idx" ON "session" USING btree ("user_id");--> statement-breakpoint
251
- CREATE INDEX "verification_identifier_idx" ON "verification" USING btree ("identifier");
160
+ CREATE INDEX "terminal_report_incidents_created" ON "terminal_report_incidents" USING btree ("created_at");
@@ -5,23 +5,9 @@
5
5
  {
6
6
  "idx": 0,
7
7
  "version": "7",
8
- "when": 1785146849042,
8
+ "when": 1792651729223,
9
9
  "tag": "0000_baseline",
10
10
  "breakpoints": true
11
- },
12
- {
13
- "idx": 1,
14
- "version": "7",
15
- "when": 1785146849043,
16
- "tag": "0001_add_pi_agent",
17
- "breakpoints": true
18
- },
19
- {
20
- "idx": 2,
21
- "version": "7",
22
- "when": 1785146849044,
23
- "tag": "0002_remove_teams",
24
- "breakpoints": true
25
11
  }
26
12
  ]
27
- }
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kky42/pievo-server",
3
- "version": "2.4.13",
3
+ "version": "3.0.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,7 +8,7 @@
8
8
  "directory": "packages/server"
9
9
  },
10
10
  "type": "module",
11
- "description": "Pievo server — a self-hostable zero-exec control plane for scheduled agent loops.",
11
+ "description": "Pievo server — the single-user dashboard and scheduler for Pievo loops. Usually run through `pievo server`.",
12
12
  "bin": {
13
13
  "pievo-server": "scripts/pievo-server.mjs"
14
14
  },
@@ -17,7 +17,7 @@
17
17
  "drizzle",
18
18
  "scripts/pievo-server.mjs",
19
19
  "scripts/server-cli-lib.mjs",
20
- "scripts/prestart.mjs",
20
+ "scripts/server-network.mjs",
21
21
  "LICENSE"
22
22
  ],
23
23
  "publishConfig": {
@@ -30,28 +30,24 @@
30
30
  "dev": "vite dev",
31
31
  "build": "vite build && node scripts/copy-pglite-assets.mjs",
32
32
  "build:publish": "vite build && node scripts/copy-pglite-assets.mjs --strict",
33
- "start": "node scripts/prestart.mjs && node .output/server/index.mjs",
33
+ "start": "node scripts/pievo-server.mjs start --foreground",
34
34
  "routes:generate": "tsr generate",
35
35
  "typecheck": "tsr generate && tsc --noEmit",
36
36
  "test": "node --test ../../scripts/dev-profile.test.mjs && vitest run",
37
37
  "db:generate": "drizzle-kit generate",
38
- "db:migrate": "drizzle-kit migrate",
39
38
  "verify:package": "node scripts/verify-package.mjs",
40
39
  "prepublishOnly": "pnpm build:publish"
41
40
  },
42
41
  "dependencies": {
43
- "@aws-sdk/client-s3": "^3.1075.0",
44
42
  "@base-ui/react": "^1.6.0",
45
43
  "@electric-sql/pglite": "^0.5.4",
46
44
  "@tanstack/react-router": "^1.170.16",
47
45
  "@tanstack/react-start": "^1.168.26",
48
- "better-auth": "^1.6.19",
49
46
  "croner": "^10.0.1",
50
47
  "diff": "^9.0.0",
51
48
  "dompurify": "^3.4.11",
52
49
  "drizzle-orm": "^0.45.2",
53
50
  "marked": "^18.0.5",
54
- "postgres": "^3.4.9",
55
51
  "pino": "^10.3.1",
56
52
  "pino-pretty": "^13.1.3",
57
53
  "react": "^19.2.7",