@app-vitals/agent-admin 0.0.1 → 0.1.1

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 (325) hide show
  1. package/Dockerfile +43 -0
  2. package/README.md +72 -2
  3. package/e2e/agents-page.e2e.ts +338 -0
  4. package/e2e/chat-degraded.e2e.ts +153 -0
  5. package/e2e/chat-page.e2e.ts +169 -0
  6. package/e2e/chat-progress.e2e.ts +206 -0
  7. package/e2e/chat-thread-page.e2e.ts +444 -0
  8. package/e2e/login-page.e2e.ts +148 -0
  9. package/e2e/test-server.ts +427 -0
  10. package/openapi.json +6098 -0
  11. package/openapi.platform.json +5553 -0
  12. package/package.json +62 -4
  13. package/playwright.config.ts +25 -0
  14. package/prisma/client/browser.ts +134 -0
  15. package/prisma/client/client.ts +158 -0
  16. package/prisma/client/commonInputTypes.ts +578 -0
  17. package/prisma/client/enums.ts +15 -0
  18. package/prisma/client/internal/class.ts +424 -0
  19. package/prisma/client/internal/prismaNamespace.ts +2898 -0
  20. package/prisma/client/internal/prismaNamespaceBrowser.ts +476 -0
  21. package/prisma/client/models/Account.ts +1774 -0
  22. package/prisma/client/models/AccountInvite.ts +1386 -0
  23. package/prisma/client/models/AccountMember.ts +1351 -0
  24. package/prisma/client/models/Agent.ts +4554 -0
  25. package/prisma/client/models/AgentAsk.ts +1373 -0
  26. package/prisma/client/models/AgentChatTokenUsageDailyByModel.ts +1638 -0
  27. package/prisma/client/models/AgentCronJob.ts +2416 -0
  28. package/prisma/client/models/AgentCronRun.ts +2858 -0
  29. package/prisma/client/models/AgentCronRunModelBreakdown.ts +1532 -0
  30. package/prisma/client/models/AgentCronRunSkillUsage.ts +1642 -0
  31. package/prisma/client/models/AgentEnv.ts +1421 -0
  32. package/prisma/client/models/AgentGitHubInstallationsSnapshot.ts +1289 -0
  33. package/prisma/client/models/AgentMember.ts +1316 -0
  34. package/prisma/client/models/AgentPhaseMethodology.ts +1355 -0
  35. package/prisma/client/models/AgentPlugin.ts +1421 -0
  36. package/prisma/client/models/AgentToken.ts +1380 -0
  37. package/prisma/client/models/AgentTool.ts +1351 -0
  38. package/prisma/client/models/AgentWorkQueueSnapshot.ts +1297 -0
  39. package/prisma/client/models/ChatThreadWatch.ts +1183 -0
  40. package/prisma/client/models/PushSubscription.ts +1233 -0
  41. package/prisma/client/models/SessionAlertState.ts +1187 -0
  42. package/prisma/client/models/SessionFollow.ts +1187 -0
  43. package/prisma/client/models/UserNotificationPrefs.ts +1221 -0
  44. package/prisma/client/models.ts +34 -0
  45. package/prisma/migrations/20260608000000_init/migration.sql +112 -0
  46. package/prisma/migrations/20260616000000_agent_members/migration.sql +18 -0
  47. package/prisma/migrations/20260624000000_add_agent_self_hosted/migration.sql +2 -0
  48. package/prisma/migrations/20260624120000_add_agent_repos/migration.sql +3 -0
  49. package/prisma/migrations/20260625000000_add_agent_cron_run/migration.sql +26 -0
  50. package/prisma/migrations/20260626000000_add_cron_run_token_fields/migration.sql +10 -0
  51. package/prisma/migrations/20260627000000_add_agent_chat_token_usage_daily/migration.sql +18 -0
  52. package/prisma/migrations/20260627010000_add_agent_chat_token_usage_fk/migration.sql +2 -0
  53. package/prisma/migrations/20260701000000_add_chat_threads_messages/migration.sql +37 -0
  54. package/prisma/migrations/20260701010000_drop_chat_threads_messages/migration.sql +17 -0
  55. package/prisma/migrations/20260701020000_add_cron_run_model_breakdown/migration.sql +23 -0
  56. package/prisma/migrations/20260701020000_chat_token_by_model/migration.sql +25 -0
  57. package/prisma/migrations/20260701030000_add_secret_flag_to_agent_env/migration.sql +2 -0
  58. package/prisma/migrations/20260701030000_drop_cron_run_legacy_columns/migration.sql +5 -0
  59. package/prisma/migrations/20260706000000_consolidate_cron_run_token_accounting/migration.sql +54 -0
  60. package/prisma/migrations/20260709000000_add_phase_to_agent_cron_run/migration.sql +8 -0
  61. package/prisma/migrations/20260717000000_add_item_tracking_to_agent_cron_run/migration.sql +10 -0
  62. package/prisma/migrations/20260717010000_add_agent_work_queue_snapshot/migration.sql +20 -0
  63. package/prisma/migrations/20260718000000_add_cron_phase_columns/migration.sql +25 -0
  64. package/prisma/migrations/20260718100000_drop_agent_cron_run_phase_column/migration.sql +8 -0
  65. package/prisma/migrations/20260724000000_add_agent_type_name/migration.sql +3 -0
  66. package/prisma/migrations/20260725232433_add_agent_author_allowlist/migration.sql +2 -0
  67. package/prisma/migrations/20260727120000_add_not_null_to_agent_author_allowlist/migration.sql +3 -0
  68. package/prisma/migrations/20260731000000_add_session_id_to_agent_cron_run/migration.sql +2 -0
  69. package/prisma/migrations/20260821000000_add_agent_restrict_slack_to_members/migration.sql +3 -0
  70. package/prisma/migrations/20260901000000_add_push_subscription_and_chat_thread_watch/migration.sql +40 -0
  71. package/prisma/migrations/20260903000000_add_agent_patch_author_allowlist/migration.sql +2 -0
  72. package/prisma/migrations/20260903120000_add_agent_review_author_allowlist/migration.sql +18 -0
  73. package/prisma/migrations/20260903150000_drop_agent_author_allowlist/migration.sql +14 -0
  74. package/prisma/migrations/20260905000000_add_started_at_index_to_agent_cron_run/migration.sql +11 -0
  75. package/prisma/migrations/20260906000000_add_session_follow_notification_prefs_alert_state/migration.sql +47 -0
  76. package/prisma/migrations/20260911000000_backfill_auto_follow_since/migration.sql +16 -0
  77. package/prisma/migrations/20260923115814_add_last_heartbeat_at_to_agent_cron_run/migration.sql +2 -0
  78. package/prisma/migrations/20260924120000_add_trial_expiry_fields_to_agent/migration.sql +6 -0
  79. package/prisma/migrations/20260929000000_add_agent_phase_methodology/migration.sql +21 -0
  80. package/prisma/migrations/20260929120000_add_agent_policy_fields/migration.sql +15 -0
  81. package/prisma/migrations/20261005000000_add_agent_github_installations_snapshot/migration.sql +21 -0
  82. package/prisma/migrations/20261008000000_add_cron_run_telemetry/migration.sql +50 -0
  83. package/prisma/migrations/20261008010000_add_account_models/migration.sql +48 -0
  84. package/prisma/migrations/20261008020000_add_cron_lockdown_disabled_at/migration.sql +3 -0
  85. package/prisma/migrations/20261009000000_chat_token_usage_bigint/migration.sql +7 -0
  86. package/prisma/migrations/20261010000000_add_cron_run_command_variant/migration.sql +2 -0
  87. package/prisma/migrations/20261019000000_add_agent_anthropic_identity/migration.sql +9 -0
  88. package/prisma/migrations/20261025000000_add_agent_ask/migration.sql +23 -0
  89. package/prisma/migrations/migration_lock.toml +3 -0
  90. package/prisma/schema/coding.prisma +85 -0
  91. package/prisma/schema/schema.prisma +506 -0
  92. package/prisma.config.ts +34 -0
  93. package/pwa-assets/icons/apple-touch-icon.png +0 -0
  94. package/pwa-assets/icons/favicon-32.png +0 -0
  95. package/pwa-assets/icons/icon-192.png +0 -0
  96. package/pwa-assets/icons/icon-512.png +0 -0
  97. package/pwa-assets/icons/icon-maskable-192.png +0 -0
  98. package/pwa-assets/icons/icon-maskable-512.png +0 -0
  99. package/src/account-agent-create.ts +42 -0
  100. package/src/account-agent-create.unit.test.ts +28 -0
  101. package/src/account-created-notifier.ts +71 -0
  102. package/src/account-created-notifier.unit.test.ts +70 -0
  103. package/src/account-email.ts +9 -0
  104. package/src/account-email.unit.test.ts +21 -0
  105. package/src/account-invites.ts +70 -0
  106. package/src/account-lifecycle.integration.test.ts +329 -0
  107. package/src/account-lifecycle.ts +206 -0
  108. package/src/account-lifecycle.unit.test.ts +108 -0
  109. package/src/account-members.ts +128 -0
  110. package/src/account-onboarding.integration.test.ts +101 -0
  111. package/src/account-onboarding.ts +95 -0
  112. package/src/account-trial-expiry-sweeper.ts +85 -0
  113. package/src/account-trial-warning-sweeper.integration.test.ts +228 -0
  114. package/src/account-trial-warning-sweeper.ts +216 -0
  115. package/src/accounts-api.integration.test.ts +196 -0
  116. package/src/accounts-api.smoke.test.ts +292 -0
  117. package/src/accounts-api.ts +289 -0
  118. package/src/accounts-api.unit.test.ts +93 -0
  119. package/src/accounts.integration.test.ts +178 -0
  120. package/src/accounts.ts +208 -0
  121. package/src/admin-boot-config.ts +574 -0
  122. package/src/admin-boot-config.unit.test.ts +28 -0
  123. package/src/admin-boot.boot-order.unit.test.ts +91 -0
  124. package/src/admin-boot.ts +690 -0
  125. package/src/admin-dev-login.smoke.test.ts +317 -0
  126. package/src/admin-extension.ts +432 -0
  127. package/src/admin-extension.unit.test.ts +532 -0
  128. package/src/admin-local-agent.smoke.test.ts +1643 -0
  129. package/src/admin-spec.smoke.test.ts +96 -0
  130. package/src/admin-spec.ts +186 -0
  131. package/src/admin-ui-account-nav.ts +20 -0
  132. package/src/admin-ui-account-pages.ts +131 -0
  133. package/src/admin-ui-account-pages.unit.test.ts +112 -0
  134. package/src/admin-ui-account.smoke.test.ts +286 -0
  135. package/src/admin-ui-account.ts +185 -0
  136. package/src/admin-ui-accounts-pages.ts +202 -0
  137. package/src/admin-ui-accounts-pages.unit.test.ts +138 -0
  138. package/src/admin-ui-accounts.smoke.test.ts +434 -0
  139. package/src/admin-ui-accounts.ts +266 -0
  140. package/src/admin-ui-layout.ts +60 -0
  141. package/src/admin-ui-layout.unit.test.ts +140 -0
  142. package/src/admin-ui-pages.ts +3489 -0
  143. package/src/admin-ui-pages.unit.test.ts +4355 -0
  144. package/src/admin-ui-push-test.smoke.test.ts +125 -0
  145. package/src/admin-ui-push-test.ts +102 -0
  146. package/src/admin-ui-styles.ts +656 -0
  147. package/src/admin-ui-styles.unit.test.ts +103 -0
  148. package/src/admin-ui.fixtures.ts +457 -0
  149. package/src/admin-ui.smoke.test.ts +7227 -0
  150. package/src/admin-ui.ts +3824 -0
  151. package/src/agent-account-assignment.ts +49 -0
  152. package/src/agent-account-assignment.unit.test.ts +99 -0
  153. package/src/agent-anthropic-identity.integration.test.ts +99 -0
  154. package/src/agent-anthropic-identity.ts +78 -0
  155. package/src/agent-anthropic-identity.unit.test.ts +77 -0
  156. package/src/agent-ask-config.ts +59 -0
  157. package/src/agent-ask-config.unit.test.ts +70 -0
  158. package/src/agent-ask.integration.test.ts +175 -0
  159. package/src/agent-ask.smoke.test.ts +457 -0
  160. package/src/agent-ask.ts +378 -0
  161. package/src/agent-chat-tokens.integration.test.ts +420 -0
  162. package/src/agent-chat-tokens.smoke.test.ts +551 -0
  163. package/src/agent-chat-tokens.ts +259 -0
  164. package/src/agent-cron-jobs.integration.test.ts +582 -0
  165. package/src/agent-cron-jobs.ts +615 -0
  166. package/src/agent-cron-jobs.unit.test.ts +420 -0
  167. package/src/agent-cron-run-stats.integration.test.ts +1551 -0
  168. package/src/agent-cron-run-stats.smoke.test.ts +953 -0
  169. package/src/agent-cron-run-stats.ts +752 -0
  170. package/src/agent-cron-runs.integration.test.ts +1491 -0
  171. package/src/agent-cron-runs.ts +489 -0
  172. package/src/agent-deletion-checklist.ts +128 -0
  173. package/src/agent-deletion-checklist.unit.test.ts +201 -0
  174. package/src/agent-deletion-per-agent.integration.test.ts +323 -0
  175. package/src/agent-deletion.integration.test.ts +323 -0
  176. package/src/agent-deletion.ts +329 -0
  177. package/src/agent-deletion.unit.test.ts +412 -0
  178. package/src/agent-envs.integration.test.ts +323 -0
  179. package/src/agent-envs.ts +244 -0
  180. package/src/agent-github-installations.integration.test.ts +115 -0
  181. package/src/agent-github-installations.ts +52 -0
  182. package/src/agent-manifest.ts +685 -0
  183. package/src/agent-manifest.unit.test.ts +870 -0
  184. package/src/agent-members.ts +69 -0
  185. package/src/agent-members.unit.test.ts +250 -0
  186. package/src/agent-patch-author-allowlist.integration.test.ts +218 -0
  187. package/src/agent-plugins.integration.test.ts +157 -0
  188. package/src/agent-plugins.ts +95 -0
  189. package/src/agent-plugins.unit.test.ts +43 -0
  190. package/src/agent-provisioner-per-agent.integration.test.ts +949 -0
  191. package/src/agent-provisioner.integration.test.ts +1245 -0
  192. package/src/agent-provisioner.ts +1650 -0
  193. package/src/agent-provisioner.unit.test.ts +1852 -0
  194. package/src/agent-tokens.integration.test.ts +150 -0
  195. package/src/agent-tokens.ts +112 -0
  196. package/src/agent-tools.integration.test.ts +129 -0
  197. package/src/agent-tools.ts +111 -0
  198. package/src/agents-api.integration.test.ts +705 -0
  199. package/src/agents-api.sentry.smoke.test.ts +478 -0
  200. package/src/agents-api.smoke.test.ts +5986 -0
  201. package/src/agents-api.ts +2826 -0
  202. package/src/agents.integration.test.ts +512 -0
  203. package/src/agents.ts +1097 -0
  204. package/src/agents.unit.test.ts +1736 -0
  205. package/src/anthropic-credential-guard.ts +44 -0
  206. package/src/anthropic-credential-guard.unit.test.ts +88 -0
  207. package/src/anthropic-federated-token-provider.integration.test.ts +248 -0
  208. package/src/anthropic-federated-token-provider.ts +249 -0
  209. package/src/anthropic-identity-client.fixtures.ts +237 -0
  210. package/src/anthropic-identity-client.integration.test.ts +342 -0
  211. package/src/anthropic-identity-client.ts +473 -0
  212. package/src/anthropic-identity-fixture-spec.integration.test.ts +169 -0
  213. package/src/anthropic-identity-name.integration.test.ts +83 -0
  214. package/src/anthropic-identity-name.ts +163 -0
  215. package/src/anthropic-identity-name.unit.test.ts +345 -0
  216. package/src/anthropic-openapi-contract.fixtures.ts +192 -0
  217. package/src/api-auth.ts +383 -0
  218. package/src/api-auth.unit.test.ts +837 -0
  219. package/src/api.smoke.test.ts +1225 -0
  220. package/src/api.ts +376 -0
  221. package/src/attachment-validation.ts +124 -0
  222. package/src/attachment-validation.unit.test.ts +218 -0
  223. package/src/caller-scope.ts +131 -0
  224. package/src/caller-scope.unit.test.ts +116 -0
  225. package/src/chat-credential-config.ts +22 -0
  226. package/src/chat-credentials-logging.unit.test.ts +92 -0
  227. package/src/chat-markers.ts +114 -0
  228. package/src/chat-markers.unit.test.ts +116 -0
  229. package/src/chat-service-provisioning-client.integration.test.ts +412 -0
  230. package/src/chat-service-provisioning-client.ts +221 -0
  231. package/src/chat.smoke.test.ts +1875 -0
  232. package/src/clock.ts +47 -0
  233. package/src/coding-task-store-provisioning-client.integration.test.ts +372 -0
  234. package/src/coding-task-store-provisioning-client.ts +156 -0
  235. package/src/crypto.ts +83 -0
  236. package/src/dev-auth-guard.ts +29 -0
  237. package/src/dev-auth-guard.unit.test.ts +51 -0
  238. package/src/errors.ts +77 -0
  239. package/src/errors.unit.test.ts +52 -0
  240. package/src/fixtures/anthropic-identity-recorded-fixtures.json +850 -0
  241. package/src/fixtures/anthropic-openapi/SDK_VERSION +1 -0
  242. package/src/fixtures/anthropic-openapi/mock-spec.json.gz +0 -0
  243. package/src/fixtures/chat-service-provisioning-cassette.json +156 -0
  244. package/src/fixtures/github-app-manifest-cassette.json +44 -0
  245. package/src/fixtures/google-auth-cassette.json +36 -0
  246. package/src/fixtures/http-chat-client-cassette.json +226 -0
  247. package/src/fixtures/k8s-cassette.json +470 -0
  248. package/src/fixtures/okta-auth-cassette.json +36 -0
  249. package/src/fixtures/slack-provision-cassette.json +12 -0
  250. package/src/fixtures/slack-provisioning-http-cassette.json +98 -0
  251. package/src/fixtures/task-store-provisioning-cassette.json +85 -0
  252. package/src/github-app-provisioning-client.integration.test.ts +149 -0
  253. package/src/github-app-provisioning-client.ts +161 -0
  254. package/src/github-app-provisioning-client.unit.test.ts +114 -0
  255. package/src/github-provisioning-service.ts +569 -0
  256. package/src/github-provisioning-service.unit.test.ts +123 -0
  257. package/src/google-auth-client.integration.test.ts +195 -0
  258. package/src/google-auth-client.ts +121 -0
  259. package/src/http-chat-client.integration.test.ts +554 -0
  260. package/src/http-chat-client.ts +533 -0
  261. package/src/http-chat-client.unit.test.ts +119 -0
  262. package/src/import-boundary.unit.test.ts +240 -0
  263. package/src/kubernetes-client.integration.test.ts +697 -0
  264. package/src/kubernetes-client.ts +1027 -0
  265. package/src/kubernetes-client.unit.test.ts +726 -0
  266. package/src/main.smoke.test.ts +91 -0
  267. package/src/main.ts +21 -0
  268. package/src/main.unit.test.ts +801 -0
  269. package/src/okta-auth-client.integration.test.ts +263 -0
  270. package/src/okta-auth-client.ts +152 -0
  271. package/src/openapi-schemas.ts +1310 -0
  272. package/src/openapi-schemas.unit.test.ts +348 -0
  273. package/src/per-agent-identity.fixtures.ts +305 -0
  274. package/src/platform-doc-route.ts +40 -0
  275. package/src/prisma-client.integration.test.ts +57 -0
  276. package/src/prisma-client.ts +187 -0
  277. package/src/prisma-client.unit.test.ts +178 -0
  278. package/src/prisma-tx.ts +23 -0
  279. package/src/push-content.ts +177 -0
  280. package/src/push-content.unit.test.ts +213 -0
  281. package/src/push-crypto.ts +135 -0
  282. package/src/push-crypto.unit.test.ts +66 -0
  283. package/src/push-sender.ts +169 -0
  284. package/src/push-sender.unit.test.ts +107 -0
  285. package/src/push-service.ts +332 -0
  286. package/src/push-service.unit.test.ts +679 -0
  287. package/src/push-toggle.ts +135 -0
  288. package/src/push-toggle.unit.test.ts +78 -0
  289. package/src/pwa-https-gating.smoke.test.ts +229 -0
  290. package/src/pwa-icons.unit.test.ts +41 -0
  291. package/src/pwa-routes.smoke.test.ts +276 -0
  292. package/src/pwa.ts +380 -0
  293. package/src/pwa.unit.test.ts +321 -0
  294. package/src/schema.unit.test.ts +122 -0
  295. package/src/self-serve-config.ts +52 -0
  296. package/src/self-serve-config.unit.test.ts +79 -0
  297. package/src/server.smoke.test.ts +273 -0
  298. package/src/server.ts +50 -0
  299. package/src/service-integration.ts +67 -0
  300. package/src/service-integration.unit.test.ts +129 -0
  301. package/src/slack-provisioning-client.integration.test.ts +308 -0
  302. package/src/slack-provisioning-client.ts +411 -0
  303. package/src/slack-provisioning-client.unit.test.ts +80 -0
  304. package/src/slack-provisioning-service.integration.test.ts +637 -0
  305. package/src/slack-provisioning-service.ts +451 -0
  306. package/src/slack-provisioning.integration.test.ts +395 -0
  307. package/src/specialty-manifest-loader.fixture.integration.test.ts +63 -0
  308. package/src/specialty-manifest-loader.ts +255 -0
  309. package/src/specialty-manifest-loader.unit.test.ts +301 -0
  310. package/src/specialty-registry.schema.unit.test.ts +35 -0
  311. package/src/specialty-registry.ts +236 -0
  312. package/src/specialty-registry.unit.test.ts +272 -0
  313. package/src/startup-policy-reconcile.ts +77 -0
  314. package/src/startup-policy-reconcile.unit.test.ts +251 -0
  315. package/src/theme-tokens.json +12 -0
  316. package/src/token-crypto.ts +60 -0
  317. package/src/token-crypto.unit.test.ts +182 -0
  318. package/src/trial-expiry-sweeper.integration.test.ts +318 -0
  319. package/src/trial-expiry-sweeper.ts +132 -0
  320. package/src/trial-expiry-sweeper.unit.test.ts +391 -0
  321. package/src/trial-expiry-warning-sweeper.integration.test.ts +468 -0
  322. package/src/trial-expiry-warning-sweeper.ts +447 -0
  323. package/src/trial-expiry-warning-sweeper.unit.test.ts +148 -0
  324. package/src/voice-contract.unit.test.ts +102 -0
  325. package/tsconfig.json +9 -0
@@ -0,0 +1,47 @@
1
+ -- Session follow/notification-prefs/alert-state models (SES-6.1).
2
+ -- Three additive tables; no changes to existing tables.
3
+
4
+ -- CreateTable
5
+ CREATE TABLE "SessionFollow" (
6
+ "id" TEXT NOT NULL,
7
+ "userEmail" TEXT NOT NULL,
8
+ "sessionSlug" TEXT NOT NULL,
9
+ "muted" BOOLEAN NOT NULL DEFAULT false,
10
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
11
+ "updatedAt" TIMESTAMP(3) NOT NULL,
12
+
13
+ CONSTRAINT "SessionFollow_pkey" PRIMARY KEY ("id")
14
+ );
15
+
16
+ -- CreateTable
17
+ CREATE TABLE "UserNotificationPrefs" (
18
+ "userEmail" TEXT NOT NULL,
19
+ "autoFollowSessions" BOOLEAN NOT NULL DEFAULT true,
20
+ "reminderHourLocal" INTEGER NOT NULL DEFAULT 9,
21
+ "autoFollowSince" TIMESTAMP(3),
22
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
23
+ "updatedAt" TIMESTAMP(3) NOT NULL,
24
+
25
+ CONSTRAINT "UserNotificationPrefs_pkey" PRIMARY KEY ("userEmail")
26
+ );
27
+
28
+ -- CreateTable
29
+ CREATE TABLE "SessionAlertState" (
30
+ "id" TEXT NOT NULL,
31
+ "userEmail" TEXT NOT NULL,
32
+ "sessionSlug" TEXT NOT NULL,
33
+ "lastAlertedAt" TIMESTAMP(3),
34
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
35
+ "updatedAt" TIMESTAMP(3) NOT NULL,
36
+
37
+ CONSTRAINT "SessionAlertState_pkey" PRIMARY KEY ("id")
38
+ );
39
+
40
+ -- CreateIndex
41
+ CREATE INDEX "SessionFollow_sessionSlug_idx" ON "SessionFollow"("sessionSlug");
42
+
43
+ -- CreateIndex
44
+ CREATE UNIQUE INDEX "SessionFollow_userEmail_sessionSlug_key" ON "SessionFollow"("userEmail", "sessionSlug");
45
+
46
+ -- CreateIndex
47
+ CREATE UNIQUE INDEX "SessionAlertState_userEmail_sessionSlug_key" ON "SessionAlertState"("userEmail", "sessionSlug");
@@ -0,0 +1,16 @@
1
+ -- Backfill the auto-follow opt-in boundary for pre-existing prefs rows.
2
+ --
3
+ -- `UserNotificationPrefs.autoFollowSessions` defaults to true and a row is
4
+ -- created just by loading the session settings page, so every row that existed
5
+ -- before session-alert-sweeper.ts shipped sits in the null ("no boundary")
6
+ -- cohort. Without this backfill the sweeper's first tick after deploy would
7
+ -- auto-follow every currently-waiting session for those users and immediately
8
+ -- push each one — the pre-existing-backlog burst the boundary exists to
9
+ -- prevent.
10
+ --
11
+ -- Data-only: no schema change. Stamping `now()` means "auto-follow starts
12
+ -- here", so only sessions that start waiting after the deploy are
13
+ -- auto-followed. Explicit follows are untouched.
14
+ UPDATE "UserNotificationPrefs"
15
+ SET "autoFollowSince" = CURRENT_TIMESTAMP
16
+ WHERE "autoFollowSince" IS NULL;
@@ -0,0 +1,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "AgentCronRun" ADD COLUMN "lastHeartbeatAt" TIMESTAMP(3);
@@ -0,0 +1,6 @@
1
+ -- AddColumn: trialExpiresAt, trialExpiryWarnedAt TIMESTAMP(3) to Agent (additive, nullable, no backfill)
2
+ -- ATE-1.1: trial expiry tracking. Both columns default to NULL — trialExpiresAt
3
+ -- is user-settable via PATCH /agents/:id; trialExpiryWarnedAt is written
4
+ -- internally by ATE-2.1's warning check.
5
+ ALTER TABLE "Agent" ADD COLUMN "trialExpiresAt" TIMESTAMP(3);
6
+ ALTER TABLE "Agent" ADD COLUMN "trialExpiryWarnedAt" TIMESTAMP(3);
@@ -0,0 +1,21 @@
1
+ -- PMC-1.1: per-phase subagent-type override table. Additive; no changes to
2
+ -- existing tables. `phase` is constrained to the six-value pipeline-phase
3
+ -- enum (prd | plan-session | review | patch | deploy | dev-task) at the
4
+ -- service/route layer (Zod), not here.
5
+
6
+ -- CreateTable
7
+ CREATE TABLE "AgentPhaseMethodology" (
8
+ "id" TEXT NOT NULL,
9
+ "agentId" TEXT NOT NULL,
10
+ "phase" TEXT NOT NULL,
11
+ "subagentType" TEXT,
12
+ "updatedAt" TIMESTAMP(3) NOT NULL,
13
+
14
+ CONSTRAINT "AgentPhaseMethodology_pkey" PRIMARY KEY ("id")
15
+ );
16
+
17
+ -- CreateIndex
18
+ CREATE UNIQUE INDEX "AgentPhaseMethodology_agentId_phase_key" ON "AgentPhaseMethodology"("agentId", "phase");
19
+
20
+ -- AddForeignKey
21
+ ALTER TABLE "AgentPhaseMethodology" ADD CONSTRAINT "AgentPhaseMethodology_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,15 @@
1
+ -- AddColumn: autoPostReviews, allowSelfReview, minConfidence, maxFindings,
2
+ -- cleanupMergedWorktrees, cleanupAfterDays to Agent (additive, NOT NULL with
3
+ -- defaults, no backfill UPDATE needed)
4
+ -- APM-1.1: DB mirrors of the 6 real fields currently living only in each
5
+ -- agent's own state/agent-policy.md. Every existing row gets the documented
6
+ -- default via the column default below; a separate standalone script
7
+ -- (agent/scripts/backfill-agent-policy.ts) later overwrites a given agent's
8
+ -- row with its file's real values, same as patchAuthorAllowlist's original
9
+ -- addition — a fresh column needs no in-migration backfill UPDATE.
10
+ ALTER TABLE "Agent" ADD COLUMN "autoPostReviews" BOOLEAN NOT NULL DEFAULT true;
11
+ ALTER TABLE "Agent" ADD COLUMN "allowSelfReview" BOOLEAN NOT NULL DEFAULT false;
12
+ ALTER TABLE "Agent" ADD COLUMN "minConfidence" INTEGER NOT NULL DEFAULT 75;
13
+ ALTER TABLE "Agent" ADD COLUMN "maxFindings" INTEGER NOT NULL DEFAULT 5;
14
+ ALTER TABLE "Agent" ADD COLUMN "cleanupMergedWorktrees" BOOLEAN NOT NULL DEFAULT true;
15
+ ALTER TABLE "Agent" ADD COLUMN "cleanupAfterDays" INTEGER NOT NULL DEFAULT 14;
@@ -0,0 +1,21 @@
1
+ -- CreateTable: AgentGitHubInstallationsSnapshot — one row per agent, holding
2
+ -- the agent's most recently reported GitHub App installations. agentId is
3
+ -- unique so PUT /agents/:id/github-installations can upsert a single row.
4
+ -- Additive only.
5
+
6
+ -- CreateTable
7
+ CREATE TABLE "AgentGitHubInstallationsSnapshot" (
8
+ "id" TEXT NOT NULL,
9
+ "agentId" TEXT NOT NULL,
10
+ "reportedAt" TIMESTAMP(3) NOT NULL,
11
+ "installations" JSONB NOT NULL,
12
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
13
+
14
+ CONSTRAINT "AgentGitHubInstallationsSnapshot_pkey" PRIMARY KEY ("id")
15
+ );
16
+
17
+ -- CreateIndex
18
+ CREATE UNIQUE INDEX "AgentGitHubInstallationsSnapshot_agentId_key" ON "AgentGitHubInstallationsSnapshot"("agentId");
19
+
20
+ -- AddForeignKey
21
+ ALTER TABLE "AgentGitHubInstallationsSnapshot" ADD CONSTRAINT "AgentGitHubInstallationsSnapshot_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,50 @@
1
+ -- Run telemetry for the prompt-audit patrol (all additive, nullable):
2
+ -- * AgentCronRun gains the first-turn context baseline (the measured
3
+ -- always-loaded context per run), turn/tool-call counts, and the
4
+ -- always-loaded-context fingerprint + versions that group runs by what
5
+ -- the model was given.
6
+ -- * AgentCronRunSkillUsage holds per-skill / per-subagent token
7
+ -- attribution rows, one per [cronRunId, kind, name].
8
+ -- Older agent builds simply never set these; nothing is backfilled.
9
+
10
+ -- AlterTable
11
+ ALTER TABLE "AgentCronRun"
12
+ ADD COLUMN "baselineModel" TEXT,
13
+ ADD COLUMN "baselineContextTokens" INTEGER,
14
+ ADD COLUMN "baselineInputTokens" INTEGER,
15
+ ADD COLUMN "baselineCacheCreationTokens" INTEGER,
16
+ ADD COLUMN "baselineCacheReadTokens" INTEGER,
17
+ ADD COLUMN "turns" INTEGER,
18
+ ADD COLUMN "toolCalls" INTEGER,
19
+ ADD COLUMN "contextFingerprint" TEXT,
20
+ ADD COLUMN "pluginVersion" TEXT,
21
+ ADD COLUMN "claudeCodeVersion" TEXT;
22
+
23
+ -- CreateIndex
24
+ CREATE INDEX "AgentCronRun_contextFingerprint_idx" ON "AgentCronRun"("contextFingerprint");
25
+
26
+ -- CreateTable
27
+ CREATE TABLE "AgentCronRunSkillUsage" (
28
+ "id" TEXT NOT NULL,
29
+ "cronRunId" TEXT NOT NULL,
30
+ "kind" TEXT NOT NULL,
31
+ "name" TEXT NOT NULL,
32
+ "invocations" INTEGER NOT NULL DEFAULT 0,
33
+ "turns" INTEGER NOT NULL DEFAULT 0,
34
+ "inputTokens" INTEGER NOT NULL DEFAULT 0,
35
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
36
+ "cacheReadTokens" INTEGER NOT NULL DEFAULT 0,
37
+ "cacheCreationTokens" INTEGER NOT NULL DEFAULT 0,
38
+ "invokeContextDelta" INTEGER,
39
+
40
+ CONSTRAINT "AgentCronRunSkillUsage_pkey" PRIMARY KEY ("id")
41
+ );
42
+
43
+ -- CreateIndex
44
+ CREATE UNIQUE INDEX "AgentCronRunSkillUsage_cronRunId_kind_name_key" ON "AgentCronRunSkillUsage"("cronRunId", "kind", "name");
45
+
46
+ -- CreateIndex
47
+ CREATE INDEX "AgentCronRunSkillUsage_kind_name_idx" ON "AgentCronRunSkillUsage"("kind", "name");
48
+
49
+ -- AddForeignKey
50
+ ALTER TABLE "AgentCronRunSkillUsage" ADD CONSTRAINT "AgentCronRunSkillUsage_cronRunId_fkey" FOREIGN KEY ("cronRunId") REFERENCES "AgentCronRun"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,48 @@
1
+ -- SSP-1.2: Account, AccountMember, AccountInvite + nullable Agent.accountId.
2
+ -- Additive only: existing Agent rows keep accountId = NULL.
3
+ CREATE TABLE "Account" (
4
+ "id" TEXT NOT NULL,
5
+ "name" TEXT NOT NULL,
6
+ "status" TEXT NOT NULL DEFAULT 'active',
7
+ "maxAgents" INTEGER NOT NULL DEFAULT 0,
8
+ "plan" TEXT,
9
+ "trialExpiresAt" TIMESTAMP(3),
10
+ "trialExpiryWarnedAt" TIMESTAMP(3),
11
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
12
+ "updatedAt" TIMESTAMP(3) NOT NULL,
13
+
14
+ CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
15
+ );
16
+
17
+ CREATE TABLE "AccountMember" (
18
+ "id" TEXT NOT NULL,
19
+ "accountId" TEXT NOT NULL,
20
+ "email" TEXT NOT NULL,
21
+ "role" TEXT NOT NULL,
22
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
23
+
24
+ CONSTRAINT "AccountMember_pkey" PRIMARY KEY ("id")
25
+ );
26
+
27
+ CREATE TABLE "AccountInvite" (
28
+ "id" TEXT NOT NULL,
29
+ "accountId" TEXT NOT NULL,
30
+ "email" TEXT NOT NULL,
31
+ "invitedBy" TEXT NOT NULL,
32
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
33
+ "acceptedAt" TIMESTAMP(3),
34
+
35
+ CONSTRAINT "AccountInvite_pkey" PRIMARY KEY ("id")
36
+ );
37
+
38
+ ALTER TABLE "Agent" ADD COLUMN "accountId" TEXT;
39
+
40
+ CREATE UNIQUE INDEX "AccountMember_email_key" ON "AccountMember"("email");
41
+ CREATE UNIQUE INDEX "AccountMember_accountId_email_key" ON "AccountMember"("accountId", "email");
42
+ CREATE INDEX "AccountInvite_email_idx" ON "AccountInvite"("email");
43
+ CREATE UNIQUE INDEX "AccountInvite_accountId_email_key" ON "AccountInvite"("accountId", "email");
44
+ CREATE INDEX "Agent_accountId_idx" ON "Agent"("accountId");
45
+
46
+ ALTER TABLE "Agent" ADD CONSTRAINT "Agent_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
47
+ ALTER TABLE "AccountMember" ADD CONSTRAINT "AccountMember_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE CASCADE ON UPDATE CASCADE;
48
+ ALTER TABLE "AccountInvite" ADD CONSTRAINT "AccountInvite_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,3 @@
1
+ -- Records which crons the trial-expiry lockdown disabled (additive, nullable)
2
+ -- so they can be restored without touching crons the user disabled manually.
3
+ ALTER TABLE "AgentCronJob" ADD COLUMN "lockdownDisabledAt" TIMESTAMP(3);
@@ -0,0 +1,7 @@
1
+ -- Widen daily chat token counters to BIGINT: accumulated per-model daily sums
2
+ -- overflow INT4 (SQLSTATE 22003) — see Sentry VITALS-OS-5T.
3
+ ALTER TABLE "AgentChatTokenUsageDailyByModel"
4
+ ALTER COLUMN "inputTokens" TYPE BIGINT,
5
+ ALTER COLUMN "outputTokens" TYPE BIGINT,
6
+ ALTER COLUMN "cacheReadTokens" TYPE BIGINT,
7
+ ALTER COLUMN "cacheCreationTokens" TYPE BIGINT;
@@ -0,0 +1,2 @@
1
+ -- Records which slash-command variant a loop dispatch ran (additive, nullable).
2
+ ALTER TABLE "AgentCronRun" ADD COLUMN "commandVariant" TEXT;
@@ -0,0 +1,9 @@
1
+ -- PAI-1.1: owner and Anthropic identity columns on Agent (additive, nullable).
2
+ ALTER TABLE "Agent" ADD COLUMN "ownerEmail" TEXT;
3
+ ALTER TABLE "Agent" ADD COLUMN "anthropicIdentityName" TEXT;
4
+ ALTER TABLE "Agent" ADD COLUMN "anthropicServiceAccountId" TEXT;
5
+ ALTER TABLE "Agent" ADD COLUMN "anthropicFederationRuleId" TEXT;
6
+ ALTER TABLE "Agent" ADD COLUMN "k8sServiceAccountName" TEXT;
7
+
8
+ -- CreateIndex
9
+ CREATE UNIQUE INDEX "Agent_anthropicIdentityName_key" ON "Agent"("anthropicIdentityName");
@@ -0,0 +1,23 @@
1
+ -- COS-31.1: AgentAsk audit table for agent-to-agent asks (additive only).
2
+ -- CreateTable
3
+ CREATE TABLE "AgentAsk" (
4
+ "id" TEXT NOT NULL,
5
+ "fromAgentId" TEXT NOT NULL,
6
+ "toAgentId" TEXT NOT NULL,
7
+ "threadId" TEXT,
8
+ "depth" INTEGER NOT NULL,
9
+ "waitMs" INTEGER NOT NULL,
10
+ "ttlSeconds" INTEGER NOT NULL,
11
+ "status" TEXT NOT NULL,
12
+ "callerLabel" TEXT NOT NULL,
13
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
14
+ "repliedAt" TIMESTAMP(3),
15
+
16
+ CONSTRAINT "AgentAsk_pkey" PRIMARY KEY ("id")
17
+ );
18
+
19
+ -- CreateIndex
20
+ CREATE INDEX "AgentAsk_toAgentId_createdAt_idx" ON "AgentAsk"("toAgentId", "createdAt");
21
+
22
+ -- CreateIndex
23
+ CREATE INDEX "AgentAsk_fromAgentId_createdAt_idx" ON "AgentAsk"("fromAgentId", "createdAt");
@@ -0,0 +1,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (e.g., Git)
3
+ provider = "postgresql"
@@ -0,0 +1,85 @@
1
+ // Shipwright — Admin Service Schema: coding-owned models (AEP-3.4)
2
+ //
3
+ // Part of the admin Prisma multi-file schema (prisma/schema/). These models
4
+ // belong to the coding feature surface and are isolated here so the coding
5
+ // code can later be extracted. They share the single `db` datasource and
6
+ // generator declared in schema.prisma, so the generated client and the
7
+ // migrations are unchanged by this split.
8
+ //
9
+ // Coding-owned columns that live on the shared Agent model (schema.prisma)
10
+ // and are grouped/commented there: reviewAuthorAllowlist, patchAuthorAllowlist,
11
+ // autoPostReviews, allowSelfReview, minConfidence, maxFindings.
12
+
13
+ // ─── Agent Work Queue Snapshot ────────────────────────────────────────────────
14
+ // One row per agent, holding the agent's most recently pushed work-queue
15
+ // snapshot (its ranked view of pending tasks/PRs across pipeline phases).
16
+ // POST /agents/:id/work-queue upserts this single row, overwriting any prior
17
+ // snapshot — there is no history, only the latest state.
18
+
19
+ model AgentWorkQueueSnapshot {
20
+ id String @id @default(cuid())
21
+ agentId String @unique
22
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
23
+ computedAt DateTime
24
+ items Json // RankedWorkItem[]
25
+ createdAt DateTime @default(now())
26
+ }
27
+
28
+ // ─── Agent Phase Methodology ──────────────────────────────────────────────────
29
+ // Per-phase subagent-type override. Each row records which subagent type
30
+ // (e.g. a custom Specialty name) should handle one pipeline phase — prd,
31
+ // plan-session, review, patch, deploy, or dev-task — for a given agent,
32
+ // overriding that phase's default methodology. `subagentType` is nullable:
33
+ // a row with a null value (or the absence of a row) means "use the default".
34
+ // The `phase` value is constrained to the six-value enum at the service/route
35
+ // layer (Zod), not here — Postgres/Prisma has no native enum-column
36
+ // requirement in this schema style (mirrors AgentTool.pattern / AgentCronJob
37
+ // validation living at the service layer). The unique constraint on
38
+ // [agentId, phase] makes upsert-based writes idempotent (one override row per
39
+ // phase per agent), mirroring AgentTool's [agentId, pattern] and AgentPlugin's
40
+ // [agentId, name].
41
+
42
+ model AgentPhaseMethodology {
43
+ id String @id @default(cuid())
44
+ agentId String
45
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
46
+ phase String
47
+ subagentType String?
48
+ updatedAt DateTime @updatedAt
49
+
50
+ @@unique([agentId, phase])
51
+ }
52
+
53
+ // ─── Session Follow ───────────────────────────────────────────────────────────
54
+ // Records that a user is "following" a planning session (identified by its
55
+ // slug) so they can receive reminders/notifications about it. `muted` lets a
56
+ // user stay following (kept in listByUser) while suppressing alerts, distinct
57
+ // from unfollowing (row deleted entirely). The unique constraint on
58
+ // [userEmail, sessionSlug] makes follow() idempotent via upsert.
59
+ model SessionFollow {
60
+ id String @id @default(cuid())
61
+ userEmail String
62
+ sessionSlug String
63
+ muted Boolean @default(false)
64
+ createdAt DateTime @default(now())
65
+ updatedAt DateTime @updatedAt
66
+
67
+ @@unique([userEmail, sessionSlug])
68
+ @@index([sessionSlug])
69
+ }
70
+
71
+ // ─── Session Alert State ─────────────────────────────────────────────────────
72
+ // Tracks the last time a user was alerted about a given session, so a
73
+ // reminder job can avoid re-alerting the same user/session pair within a
74
+ // cooldown window. The unique constraint on [userEmail, sessionSlug] allows
75
+ // upsert semantics (one state row per user per session).
76
+ model SessionAlertState {
77
+ id String @id @default(cuid())
78
+ userEmail String
79
+ sessionSlug String
80
+ lastAlertedAt DateTime?
81
+ createdAt DateTime @default(now())
82
+ updatedAt DateTime @updatedAt
83
+
84
+ @@unique([userEmail, sessionSlug])
85
+ }