teamcopilot 0.0.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 (209) hide show
  1. package/.env.example +10 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +131 -0
  4. package/bin/teamcopilot.js +281 -0
  5. package/dist/auth/index.js +189 -0
  6. package/dist/change-user-role.js +77 -0
  7. package/dist/chat/index.js +849 -0
  8. package/dist/constants.js +2 -0
  9. package/dist/create-user.js +98 -0
  10. package/dist/cronjob/index.js +16 -0
  11. package/dist/cronjob/resource-reconciliation.js +33 -0
  12. package/dist/delete-user.js +66 -0
  13. package/dist/frontend/assets/abap-CRCWOmpq.js +1 -0
  14. package/dist/frontend/assets/apex-DnsZk_dE.js +1 -0
  15. package/dist/frontend/assets/azcli-1IWB1ccx.js +1 -0
  16. package/dist/frontend/assets/bat-DPkNLes8.js +1 -0
  17. package/dist/frontend/assets/bicep-Corcdgou.js +2 -0
  18. package/dist/frontend/assets/cameligo-CGrWLZr3.js +1 -0
  19. package/dist/frontend/assets/clojure-D9WOWImG.js +1 -0
  20. package/dist/frontend/assets/codicon-DCmgc-ay.ttf +0 -0
  21. package/dist/frontend/assets/coffee-B7EJu28W.js +1 -0
  22. package/dist/frontend/assets/cpp-SEyurbux.js +1 -0
  23. package/dist/frontend/assets/csharp-BoL64M5l.js +1 -0
  24. package/dist/frontend/assets/csp-C46ZqvIl.js +1 -0
  25. package/dist/frontend/assets/css-DQU6DXDx.js +3 -0
  26. package/dist/frontend/assets/cssMode-BDT3WbVs.js +4 -0
  27. package/dist/frontend/assets/cypher-D84EuPTj.js +1 -0
  28. package/dist/frontend/assets/dart-D8lhlL1r.js +1 -0
  29. package/dist/frontend/assets/dockerfile-DLk6rpji.js +1 -0
  30. package/dist/frontend/assets/ecl-BO6FnfXk.js +1 -0
  31. package/dist/frontend/assets/editor.worker-B4pQIWZD.js +12 -0
  32. package/dist/frontend/assets/elixir-BRjLKONM.js +1 -0
  33. package/dist/frontend/assets/flow9-Cac8vKd7.js +1 -0
  34. package/dist/frontend/assets/freemarker2-C7-hEgID.js +3 -0
  35. package/dist/frontend/assets/fsharp-fd1GTHhf.js +1 -0
  36. package/dist/frontend/assets/go-O9LJTZXk.js +1 -0
  37. package/dist/frontend/assets/graphql-LQdxqEYJ.js +1 -0
  38. package/dist/frontend/assets/handlebars-4cwTkPir.js +1 -0
  39. package/dist/frontend/assets/hcl-DxDQ3s82.js +1 -0
  40. package/dist/frontend/assets/html-YNfE1Q0A.js +1 -0
  41. package/dist/frontend/assets/htmlMode-opTQ1HoB.js +4 -0
  42. package/dist/frontend/assets/index-DWyaVa1h.js +782 -0
  43. package/dist/frontend/assets/index-lXrsgeTF.css +1 -0
  44. package/dist/frontend/assets/ini-BvajGCUy.js +1 -0
  45. package/dist/frontend/assets/java-SYsfObOQ.js +1 -0
  46. package/dist/frontend/assets/javascript-BEwGzk7T.js +1 -0
  47. package/dist/frontend/assets/jsonMode-CGhIS5Al.js +10 -0
  48. package/dist/frontend/assets/julia-DQXNmw_w.js +1 -0
  49. package/dist/frontend/assets/kotlin-qQ0MG-9I.js +1 -0
  50. package/dist/frontend/assets/less-GGFNNJHn.js +2 -0
  51. package/dist/frontend/assets/lexon-Canl7DCW.js +1 -0
  52. package/dist/frontend/assets/liquid-QekTGCGJ.js +1 -0
  53. package/dist/frontend/assets/lua-D28Ae8-K.js +1 -0
  54. package/dist/frontend/assets/m3-DPitgjJI.js +1 -0
  55. package/dist/frontend/assets/markdown-B811l8j2.js +1 -0
  56. package/dist/frontend/assets/mdx-BAVDaB7v.js +1 -0
  57. package/dist/frontend/assets/mips-CdjsipkG.js +1 -0
  58. package/dist/frontend/assets/msdax-CYqgjx_P.js +1 -0
  59. package/dist/frontend/assets/mysql-BHd6q0vd.js +1 -0
  60. package/dist/frontend/assets/objective-c-B1aVtJYH.js +1 -0
  61. package/dist/frontend/assets/pascal-BhNW15KB.js +1 -0
  62. package/dist/frontend/assets/pascaligo-5jv8CcQD.js +1 -0
  63. package/dist/frontend/assets/perl-DlYyT36c.js +1 -0
  64. package/dist/frontend/assets/pgsql-Dy0bjov7.js +1 -0
  65. package/dist/frontend/assets/php-120yhfDK.js +1 -0
  66. package/dist/frontend/assets/pla-CjnFlu4u.js +1 -0
  67. package/dist/frontend/assets/postiats-CQpG440k.js +1 -0
  68. package/dist/frontend/assets/powerquery-DdJtto1Z.js +1 -0
  69. package/dist/frontend/assets/powershell-Bu_VLpJB.js +1 -0
  70. package/dist/frontend/assets/protobuf-IBS6jZEB.js +2 -0
  71. package/dist/frontend/assets/pug-kFxLfcjb.js +1 -0
  72. package/dist/frontend/assets/python-BQlHw7XO.js +1 -0
  73. package/dist/frontend/assets/qsharp-q7JyzKFN.js +1 -0
  74. package/dist/frontend/assets/r-BIFz-_sK.js +1 -0
  75. package/dist/frontend/assets/razor-Be3Wwc2E.js +1 -0
  76. package/dist/frontend/assets/redis-CHOsPHWR.js +1 -0
  77. package/dist/frontend/assets/redshift-CBifECDb.js +1 -0
  78. package/dist/frontend/assets/restructuredtext-CghPJEOS.js +1 -0
  79. package/dist/frontend/assets/ruby-CYWGW-b1.js +1 -0
  80. package/dist/frontend/assets/rust-DMDD0SHb.js +1 -0
  81. package/dist/frontend/assets/sb-BYAiYHFx.js +1 -0
  82. package/dist/frontend/assets/scala-Bqvq8jcR.js +1 -0
  83. package/dist/frontend/assets/scheme-Dhb-2j9p.js +1 -0
  84. package/dist/frontend/assets/scss-CTwUZ5N7.js +3 -0
  85. package/dist/frontend/assets/shell-CsDZo4DB.js +1 -0
  86. package/dist/frontend/assets/solidity-CME5AdoB.js +1 -0
  87. package/dist/frontend/assets/sophia-RYC1BQQz.js +1 -0
  88. package/dist/frontend/assets/sparql-KEyrF7De.js +1 -0
  89. package/dist/frontend/assets/sql-BdTr02Mf.js +1 -0
  90. package/dist/frontend/assets/st-C7iG7M4S.js +1 -0
  91. package/dist/frontend/assets/swift-D7IUmUK8.js +1 -0
  92. package/dist/frontend/assets/systemverilog-DgMryOEJ.js +1 -0
  93. package/dist/frontend/assets/tcl-PloMZuKG.js +1 -0
  94. package/dist/frontend/assets/tsMode-CIBFoN3z.js +11 -0
  95. package/dist/frontend/assets/twig-BfRIq3la.js +1 -0
  96. package/dist/frontend/assets/typescript-BuV9wEIE.js +1 -0
  97. package/dist/frontend/assets/typespec-CzxlYoT_.js +1 -0
  98. package/dist/frontend/assets/vb-BwAE3J76.js +1 -0
  99. package/dist/frontend/assets/wgsl-B_1kOXbF.js +298 -0
  100. package/dist/frontend/assets/xml-DcDKYaM4.js +1 -0
  101. package/dist/frontend/assets/yaml-CuBNmOuI.js +1 -0
  102. package/dist/frontend/index.html +14 -0
  103. package/dist/frontend/logo.svg +50 -0
  104. package/dist/index.js +169 -0
  105. package/dist/logging.js +30 -0
  106. package/dist/opencode-auth/index.js +122 -0
  107. package/dist/opencode-server.js +91 -0
  108. package/dist/prisma/client.js +38 -0
  109. package/dist/reset-password.js +73 -0
  110. package/dist/rotate-jwt-secret.js +20 -0
  111. package/dist/scripts/prisma-workspace.js +34 -0
  112. package/dist/skills/index.js +311 -0
  113. package/dist/types/permissions.js +2 -0
  114. package/dist/types/shared/permissions.js +17 -0
  115. package/dist/types/shared/skill.js +17 -0
  116. package/dist/types/shared/workflow-files.js +17 -0
  117. package/dist/types/shared/workflow.js +17 -0
  118. package/dist/types/skill.js +2 -0
  119. package/dist/types/workflow-files.js +2 -0
  120. package/dist/types/workflow.js +2 -0
  121. package/dist/users/index.js +22 -0
  122. package/dist/utils/approval-snapshot-common.js +596 -0
  123. package/dist/utils/assert.js +20 -0
  124. package/dist/utils/chat-session.js +44 -0
  125. package/dist/utils/cli-bootstrap.js +26 -0
  126. package/dist/utils/index.js +95 -0
  127. package/dist/utils/jwt-secret.js +63 -0
  128. package/dist/utils/opencode-auth.js +126 -0
  129. package/dist/utils/opencode-client.js +109 -0
  130. package/dist/utils/password-policy.js +12 -0
  131. package/dist/utils/permission-common.js +280 -0
  132. package/dist/utils/redact.js +108 -0
  133. package/dist/utils/resource-access.js +37 -0
  134. package/dist/utils/resource-file-routes.js +115 -0
  135. package/dist/utils/resource-files.js +572 -0
  136. package/dist/utils/runtime-paths.js +61 -0
  137. package/dist/utils/session-abort.js +52 -0
  138. package/dist/utils/skill-approval-snapshot.js +39 -0
  139. package/dist/utils/skill-files.js +17 -0
  140. package/dist/utils/skill-permissions.js +15 -0
  141. package/dist/utils/skill.js +217 -0
  142. package/dist/utils/user-role.js +14 -0
  143. package/dist/utils/workflow-approval-snapshot.js +38 -0
  144. package/dist/utils/workflow-files.js +17 -0
  145. package/dist/utils/workflow-interruption.js +50 -0
  146. package/dist/utils/workflow-permissions.js +27 -0
  147. package/dist/utils/workflow-runner.js +414 -0
  148. package/dist/utils/workflow.js +158 -0
  149. package/dist/utils/workspace-sync.js +204 -0
  150. package/dist/workflows/index.js +751 -0
  151. package/dist/workspace_files/.opencode/opencode.json +17 -0
  152. package/dist/workspace_files/.opencode/package.json +14 -0
  153. package/dist/workspace_files/.opencode/plugins/createSkill.ts +339 -0
  154. package/dist/workspace_files/.opencode/plugins/createWorkflow.ts +345 -0
  155. package/dist/workspace_files/.opencode/plugins/findSimilarWorkflow.ts +173 -0
  156. package/dist/workspace_files/.opencode/plugins/findSkill.ts +211 -0
  157. package/dist/workspace_files/.opencode/plugins/getSkillContent.ts +135 -0
  158. package/dist/workspace_files/.opencode/plugins/honeytoken-protection.ts +64 -0
  159. package/dist/workspace_files/.opencode/plugins/listAvailableSkills.ts +93 -0
  160. package/dist/workspace_files/.opencode/plugins/listAvailableWorkflows.ts +93 -0
  161. package/dist/workspace_files/.opencode/plugins/python-protection.ts +184 -0
  162. package/dist/workspace_files/.opencode/plugins/runWorkflow.ts +168 -0
  163. package/dist/workspace_files/.opencode/tsconfig.json +16 -0
  164. package/dist/workspace_files/AGENTS.md +483 -0
  165. package/dist/workspace_files/package-lock.json +167 -0
  166. package/dist/workspace_files/package.json +5 -0
  167. package/package.json +86 -0
  168. package/prisma/migrations/20260203040755_init/migration.sql +20 -0
  169. package/prisma/migrations/20260204034845_replace_google_auth_with_email_password/migration.sql +25 -0
  170. package/prisma/migrations/20260207022226_add_user_role/migration.sql +25 -0
  171. package/prisma/migrations/20260210161254_add_workflow_runs/migration.sql +16 -0
  172. package/prisma/migrations/20260211050606_adds_workflow_table/migration.sql +40 -0
  173. package/prisma/migrations/20260211050750_adds_fkey_constraint/migration.sql +21 -0
  174. package/prisma/migrations/20260211051912_removes_workflow_table/migration.sql +34 -0
  175. package/prisma/migrations/20260211052238_changes_workflow_id_to_slug/migration.sql +27 -0
  176. package/prisma/migrations/20260212051912_add_output_to_workflow_runs/migration.sql +2 -0
  177. package/prisma/migrations/20260213073006_add_chat_sessions/migration.sql +13 -0
  178. package/prisma/migrations/20260216053202_add_chat_sessions_opencode_session_id_idx/migration.sql +2 -0
  179. package/prisma/migrations/20260216053237_drop_redundant_chat_sessions_opencode_idx/migration.sql +2 -0
  180. package/prisma/migrations/20260219060705_makes/migration.sql +24 -0
  181. package/prisma/migrations/20260222040542_add_workflow_execution_permissions/migration.sql +18 -0
  182. package/prisma/migrations/20260222040815_remove_workflow_execution_permissions/migration.sql +10 -0
  183. package/prisma/migrations/20260222041348_add_workflow_execution_permissions_final/migration.sql +17 -0
  184. package/prisma/migrations/20260222041741_rename_to_tool_execution_permissions/migration.sql +30 -0
  185. package/prisma/migrations/20260222041826_simplify_tool_execution_permissions/migration.sql +29 -0
  186. package/prisma/migrations/20260222041950_add_fields_for_standalone_permissions/migration.sql +32 -0
  187. package/prisma/migrations/20260222042954_simplify_tool_permissions_table/migration.sql +27 -0
  188. package/prisma/migrations/20260223073902_add_workflow_run_permissions_tables/migration.sql +23 -0
  189. package/prisma/migrations/20260225025151_add_workflow_metadata/migration.sql +16 -0
  190. package/prisma/migrations/20260225031035_merge_workflow_permissions_into_metadata/migration.sql +44 -0
  191. package/prisma/migrations/20260225031752_removes_default_for_run_permission_mode/migration.sql +20 -0
  192. package/prisma/migrations/20260225033603_remove_workflow_metadata_user_fkeys/migration.sql +18 -0
  193. package/prisma/migrations/20260225043032_restore_workflow_metadata_user_fkeys/migration.sql +20 -0
  194. package/prisma/migrations/20260225091423_add_workflow_approved_snapshots/migration.sql +28 -0
  195. package/prisma/migrations/20260226032121_add_is_approved_to_workflow_metadata/migration.sql +21 -0
  196. package/prisma/migrations/20260226032444_undoes_last_db_change/migration.sql +26 -0
  197. package/prisma/migrations/20260227120000_remove_snapshot_hash_from_approved_snapshots/migration.sql +16 -0
  198. package/prisma/migrations/20260228071125_adds_workspace_path_to_snapshot_table/migration.sql +22 -0
  199. package/prisma/migrations/20260228071217_modifies_index_and_removes_default_value/migration.sql +22 -0
  200. package/prisma/migrations/20260228071710_undoes_previous/migration.sql +27 -0
  201. package/prisma/migrations/20260228105022_add_must_change_password_first_login/migration.sql +20 -0
  202. package/prisma/migrations/20260301115439_add_workflow_run_log_refs/migration.sql +8 -0
  203. package/prisma/migrations/20260301122557_add_workflow_aborted_sessions/migration.sql +5 -0
  204. package/prisma/migrations/20260302045545_move_workflow_run_log_refs_into_workflow_runs/migration.sql +17 -0
  205. package/prisma/migrations/20260303040318_add_skill_tables/migration.sql +61 -0
  206. package/prisma/migrations/20260303051533_unify_resource_permissions/migration.sql +97 -0
  207. package/prisma/migrations/20260303064255_unify_resource_metadata_and_snapshots/migration.sql +179 -0
  208. package/prisma/migrations/migration_lock.toml +3 -0
  209. package/prisma/schema.prisma +147 -0
@@ -0,0 +1,18 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_workflow_metadata" (
5
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
6
+ "created_by_user_id" TEXT,
7
+ "approved_by_user_id" TEXT,
8
+ "run_permission_mode" TEXT NOT NULL,
9
+ "created_at" BIGINT NOT NULL,
10
+ "updated_at" BIGINT NOT NULL
11
+ );
12
+ INSERT INTO "new_workflow_metadata" ("approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug") SELECT "approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug" FROM "workflow_metadata";
13
+ DROP TABLE "workflow_metadata";
14
+ ALTER TABLE "new_workflow_metadata" RENAME TO "workflow_metadata";
15
+ CREATE INDEX "workflow_metadata_created_by_user_id_idx" ON "workflow_metadata"("created_by_user_id");
16
+ CREATE INDEX "workflow_metadata_approved_by_user_id_idx" ON "workflow_metadata"("approved_by_user_id");
17
+ PRAGMA foreign_keys=ON;
18
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,20 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_workflow_metadata" (
5
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
6
+ "created_by_user_id" TEXT,
7
+ "approved_by_user_id" TEXT,
8
+ "run_permission_mode" TEXT NOT NULL,
9
+ "created_at" BIGINT NOT NULL,
10
+ "updated_at" BIGINT NOT NULL,
11
+ CONSTRAINT "workflow_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
12
+ CONSTRAINT "workflow_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
13
+ );
14
+ INSERT INTO "new_workflow_metadata" ("approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug") SELECT "approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug" FROM "workflow_metadata";
15
+ DROP TABLE "workflow_metadata";
16
+ ALTER TABLE "new_workflow_metadata" RENAME TO "workflow_metadata";
17
+ CREATE INDEX "workflow_metadata_created_by_user_id_idx" ON "workflow_metadata"("created_by_user_id");
18
+ CREATE INDEX "workflow_metadata_approved_by_user_id_idx" ON "workflow_metadata"("approved_by_user_id");
19
+ PRAGMA foreign_keys=ON;
20
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,28 @@
1
+ -- CreateTable
2
+ CREATE TABLE "workflow_approved_snapshots" (
3
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
4
+ "snapshot_hash" TEXT NOT NULL,
5
+ "file_count" INTEGER NOT NULL,
6
+ "created_at" BIGINT NOT NULL,
7
+ "updated_at" BIGINT NOT NULL,
8
+ CONSTRAINT "workflow_approved_snapshots_workflow_slug_fkey" FOREIGN KEY ("workflow_slug") REFERENCES "workflow_metadata" ("workflow_slug") ON DELETE CASCADE ON UPDATE CASCADE
9
+ );
10
+
11
+ -- CreateTable
12
+ CREATE TABLE "workflow_approved_snapshot_files" (
13
+ "id" TEXT NOT NULL PRIMARY KEY,
14
+ "workflow_slug" TEXT NOT NULL,
15
+ "relative_path" TEXT NOT NULL,
16
+ "content_kind" TEXT NOT NULL,
17
+ "text_content" TEXT,
18
+ "binary_content" BLOB,
19
+ "size_bytes" INTEGER NOT NULL,
20
+ "content_sha256" TEXT NOT NULL,
21
+ CONSTRAINT "workflow_approved_snapshot_files_workflow_slug_fkey" FOREIGN KEY ("workflow_slug") REFERENCES "workflow_approved_snapshots" ("workflow_slug") ON DELETE CASCADE ON UPDATE CASCADE
22
+ );
23
+
24
+ -- CreateIndex
25
+ CREATE INDEX "workflow_approved_snapshot_files_workflow_slug_idx" ON "workflow_approved_snapshot_files"("workflow_slug");
26
+
27
+ -- CreateIndex
28
+ CREATE UNIQUE INDEX "workflow_approved_snapshot_files_workflow_slug_relative_path_key" ON "workflow_approved_snapshot_files"("workflow_slug", "relative_path");
@@ -0,0 +1,21 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_workflow_metadata" (
5
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
6
+ "created_by_user_id" TEXT,
7
+ "approved_by_user_id" TEXT,
8
+ "is_approved" BOOLEAN NOT NULL DEFAULT false,
9
+ "run_permission_mode" TEXT NOT NULL,
10
+ "created_at" BIGINT NOT NULL,
11
+ "updated_at" BIGINT NOT NULL,
12
+ CONSTRAINT "workflow_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
13
+ CONSTRAINT "workflow_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
14
+ );
15
+ INSERT INTO "new_workflow_metadata" ("approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug") SELECT "approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug" FROM "workflow_metadata";
16
+ DROP TABLE "workflow_metadata";
17
+ ALTER TABLE "new_workflow_metadata" RENAME TO "workflow_metadata";
18
+ CREATE INDEX "workflow_metadata_created_by_user_id_idx" ON "workflow_metadata"("created_by_user_id");
19
+ CREATE INDEX "workflow_metadata_approved_by_user_id_idx" ON "workflow_metadata"("approved_by_user_id");
20
+ PRAGMA foreign_keys=ON;
21
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,26 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `is_approved` on the `workflow_metadata` table. All the data in the column will be lost.
5
+
6
+ */
7
+ -- RedefineTables
8
+ PRAGMA defer_foreign_keys=ON;
9
+ PRAGMA foreign_keys=OFF;
10
+ CREATE TABLE "new_workflow_metadata" (
11
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
12
+ "created_by_user_id" TEXT,
13
+ "approved_by_user_id" TEXT,
14
+ "run_permission_mode" TEXT NOT NULL,
15
+ "created_at" BIGINT NOT NULL,
16
+ "updated_at" BIGINT NOT NULL,
17
+ CONSTRAINT "workflow_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
18
+ CONSTRAINT "workflow_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
19
+ );
20
+ INSERT INTO "new_workflow_metadata" ("approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug") SELECT "approved_by_user_id", "created_at", "created_by_user_id", "run_permission_mode", "updated_at", "workflow_slug" FROM "workflow_metadata";
21
+ DROP TABLE "workflow_metadata";
22
+ ALTER TABLE "new_workflow_metadata" RENAME TO "workflow_metadata";
23
+ CREATE INDEX "workflow_metadata_created_by_user_id_idx" ON "workflow_metadata"("created_by_user_id");
24
+ CREATE INDEX "workflow_metadata_approved_by_user_id_idx" ON "workflow_metadata"("approved_by_user_id");
25
+ PRAGMA foreign_keys=ON;
26
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,16 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_workflow_approved_snapshots" (
5
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
6
+ "file_count" INTEGER NOT NULL,
7
+ "created_at" BIGINT NOT NULL,
8
+ "updated_at" BIGINT NOT NULL,
9
+ CONSTRAINT "workflow_approved_snapshots_workflow_slug_fkey" FOREIGN KEY ("workflow_slug") REFERENCES "workflow_metadata" ("workflow_slug") ON DELETE CASCADE ON UPDATE CASCADE
10
+ );
11
+ INSERT INTO "new_workflow_approved_snapshots" ("created_at", "file_count", "updated_at", "workflow_slug") SELECT "created_at", "file_count", "updated_at", "workflow_slug" FROM "workflow_approved_snapshots";
12
+ DROP TABLE "workflow_approved_snapshots";
13
+ ALTER TABLE "new_workflow_approved_snapshots" RENAME TO "workflow_approved_snapshots";
14
+ PRAGMA foreign_keys=ON;
15
+ PRAGMA defer_foreign_keys=OFF;
16
+
@@ -0,0 +1,22 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_workflow_approved_snapshot_files" (
5
+ "id" TEXT NOT NULL PRIMARY KEY,
6
+ "workflow_slug" TEXT NOT NULL,
7
+ "workspace_path" TEXT NOT NULL DEFAULT '/Users/rishabhpoddar/Desktop/trythisapp/localtool/src/workspace_files',
8
+ "relative_path" TEXT NOT NULL,
9
+ "content_kind" TEXT NOT NULL,
10
+ "text_content" TEXT,
11
+ "binary_content" BLOB,
12
+ "size_bytes" INTEGER NOT NULL,
13
+ "content_sha256" TEXT NOT NULL,
14
+ CONSTRAINT "workflow_approved_snapshot_files_workflow_slug_fkey" FOREIGN KEY ("workflow_slug") REFERENCES "workflow_approved_snapshots" ("workflow_slug") ON DELETE CASCADE ON UPDATE CASCADE
15
+ );
16
+ INSERT INTO "new_workflow_approved_snapshot_files" ("binary_content", "content_kind", "content_sha256", "id", "relative_path", "size_bytes", "text_content", "workflow_slug") SELECT "binary_content", "content_kind", "content_sha256", "id", "relative_path", "size_bytes", "text_content", "workflow_slug" FROM "workflow_approved_snapshot_files";
17
+ DROP TABLE "workflow_approved_snapshot_files";
18
+ ALTER TABLE "new_workflow_approved_snapshot_files" RENAME TO "workflow_approved_snapshot_files";
19
+ CREATE INDEX "workflow_approved_snapshot_files_workflow_slug_idx" ON "workflow_approved_snapshot_files"("workflow_slug");
20
+ CREATE UNIQUE INDEX "workflow_approved_snapshot_files_workflow_slug_workspace_path_relative_path_key" ON "workflow_approved_snapshot_files"("workflow_slug", "workspace_path", "relative_path");
21
+ PRAGMA foreign_keys=ON;
22
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,22 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_workflow_approved_snapshot_files" (
5
+ "id" TEXT NOT NULL PRIMARY KEY,
6
+ "workflow_slug" TEXT NOT NULL,
7
+ "workspace_path" TEXT NOT NULL,
8
+ "relative_path" TEXT NOT NULL,
9
+ "content_kind" TEXT NOT NULL,
10
+ "text_content" TEXT,
11
+ "binary_content" BLOB,
12
+ "size_bytes" INTEGER NOT NULL,
13
+ "content_sha256" TEXT NOT NULL,
14
+ CONSTRAINT "workflow_approved_snapshot_files_workflow_slug_fkey" FOREIGN KEY ("workflow_slug") REFERENCES "workflow_approved_snapshots" ("workflow_slug") ON DELETE CASCADE ON UPDATE CASCADE
15
+ );
16
+ INSERT INTO "new_workflow_approved_snapshot_files" ("binary_content", "content_kind", "content_sha256", "id", "relative_path", "size_bytes", "text_content", "workflow_slug", "workspace_path") SELECT "binary_content", "content_kind", "content_sha256", "id", "relative_path", "size_bytes", "text_content", "workflow_slug", "workspace_path" FROM "workflow_approved_snapshot_files";
17
+ DROP TABLE "workflow_approved_snapshot_files";
18
+ ALTER TABLE "new_workflow_approved_snapshot_files" RENAME TO "workflow_approved_snapshot_files";
19
+ CREATE INDEX "workflow_approved_snapshot_files_workspace_path_workflow_slug_idx" ON "workflow_approved_snapshot_files"("workspace_path", "workflow_slug");
20
+ CREATE UNIQUE INDEX "workflow_approved_snapshot_files_workflow_slug_workspace_path_relative_path_key" ON "workflow_approved_snapshot_files"("workflow_slug", "workspace_path", "relative_path");
21
+ PRAGMA foreign_keys=ON;
22
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,27 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `workspace_path` on the `workflow_approved_snapshot_files` table. All the data in the column will be lost.
5
+
6
+ */
7
+ -- RedefineTables
8
+ PRAGMA defer_foreign_keys=ON;
9
+ PRAGMA foreign_keys=OFF;
10
+ CREATE TABLE "new_workflow_approved_snapshot_files" (
11
+ "id" TEXT NOT NULL PRIMARY KEY,
12
+ "workflow_slug" TEXT NOT NULL,
13
+ "relative_path" TEXT NOT NULL,
14
+ "content_kind" TEXT NOT NULL,
15
+ "text_content" TEXT,
16
+ "binary_content" BLOB,
17
+ "size_bytes" INTEGER NOT NULL,
18
+ "content_sha256" TEXT NOT NULL,
19
+ CONSTRAINT "workflow_approved_snapshot_files_workflow_slug_fkey" FOREIGN KEY ("workflow_slug") REFERENCES "workflow_approved_snapshots" ("workflow_slug") ON DELETE CASCADE ON UPDATE CASCADE
20
+ );
21
+ INSERT INTO "new_workflow_approved_snapshot_files" ("binary_content", "content_kind", "content_sha256", "id", "relative_path", "size_bytes", "text_content", "workflow_slug") SELECT "binary_content", "content_kind", "content_sha256", "id", "relative_path", "size_bytes", "text_content", "workflow_slug" FROM "workflow_approved_snapshot_files";
22
+ DROP TABLE "workflow_approved_snapshot_files";
23
+ ALTER TABLE "new_workflow_approved_snapshot_files" RENAME TO "workflow_approved_snapshot_files";
24
+ CREATE INDEX "workflow_approved_snapshot_files_workflow_slug_idx" ON "workflow_approved_snapshot_files"("workflow_slug");
25
+ CREATE UNIQUE INDEX "workflow_approved_snapshot_files_workflow_slug_relative_path_key" ON "workflow_approved_snapshot_files"("workflow_slug", "relative_path");
26
+ PRAGMA foreign_keys=ON;
27
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,20 @@
1
+ -- RedefineTables
2
+ PRAGMA defer_foreign_keys=ON;
3
+ PRAGMA foreign_keys=OFF;
4
+ CREATE TABLE "new_users" (
5
+ "id" TEXT NOT NULL PRIMARY KEY,
6
+ "email" TEXT NOT NULL,
7
+ "name" TEXT NOT NULL,
8
+ "role" TEXT NOT NULL,
9
+ "created_at" BIGINT NOT NULL,
10
+ "password_hash" TEXT NOT NULL,
11
+ "must_change_password" BOOLEAN NOT NULL DEFAULT false,
12
+ "reset_token" TEXT,
13
+ "reset_token_expires_at" BIGINT
14
+ );
15
+ INSERT INTO "new_users" ("created_at", "email", "id", "name", "password_hash", "reset_token", "reset_token_expires_at", "role") SELECT "created_at", "email", "id", "name", "password_hash", "reset_token", "reset_token_expires_at", "role" FROM "users";
16
+ DROP TABLE "users";
17
+ ALTER TABLE "new_users" RENAME TO "users";
18
+ CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
19
+ PRAGMA foreign_keys=ON;
20
+ PRAGMA defer_foreign_keys=OFF;
@@ -0,0 +1,8 @@
1
+ -- CreateTable
2
+ CREATE TABLE "workflow_run_log_refs" (
3
+ "run_id" TEXT NOT NULL PRIMARY KEY,
4
+ "session_id" TEXT NOT NULL,
5
+ "message_id" TEXT NOT NULL,
6
+ "created_at" BIGINT NOT NULL,
7
+ CONSTRAINT "workflow_run_log_refs_run_id_fkey" FOREIGN KEY ("run_id") REFERENCES "workflow_runs" ("id") ON DELETE CASCADE ON UPDATE CASCADE
8
+ );
@@ -0,0 +1,5 @@
1
+ -- CreateTable
2
+ CREATE TABLE "workflow_aborted_sessions" (
3
+ "session_id" TEXT NOT NULL PRIMARY KEY,
4
+ "created_at" BIGINT NOT NULL
5
+ );
@@ -0,0 +1,17 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the `workflow_run_log_refs` table. If the table is not empty, all the data it contains will be lost.
5
+
6
+ */
7
+ -- AlterTable
8
+ ALTER TABLE "workflow_runs" ADD COLUMN "message_id" TEXT;
9
+ ALTER TABLE "workflow_runs" ADD COLUMN "session_id" TEXT;
10
+
11
+ -- DropTable
12
+ PRAGMA foreign_keys=off;
13
+ DROP TABLE "workflow_run_log_refs";
14
+ PRAGMA foreign_keys=on;
15
+
16
+ -- CreateIndex
17
+ CREATE INDEX "workflow_runs_session_id_message_id_idx" ON "workflow_runs"("session_id", "message_id");
@@ -0,0 +1,61 @@
1
+ -- CreateTable
2
+ CREATE TABLE "skill_access_permission_users" (
3
+ "id" TEXT NOT NULL PRIMARY KEY,
4
+ "skill_slug" TEXT NOT NULL,
5
+ "user_id" TEXT NOT NULL,
6
+ "created_at" BIGINT NOT NULL,
7
+ CONSTRAINT "skill_access_permission_users_skill_slug_fkey" FOREIGN KEY ("skill_slug") REFERENCES "skill_metadata" ("skill_slug") ON DELETE CASCADE ON UPDATE CASCADE,
8
+ CONSTRAINT "skill_access_permission_users_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE
9
+ );
10
+
11
+ -- CreateTable
12
+ CREATE TABLE "skill_metadata" (
13
+ "skill_slug" TEXT NOT NULL PRIMARY KEY,
14
+ "created_by_user_id" TEXT,
15
+ "approved_by_user_id" TEXT,
16
+ "access_permission_mode" TEXT NOT NULL,
17
+ "created_at" BIGINT NOT NULL,
18
+ "updated_at" BIGINT NOT NULL,
19
+ CONSTRAINT "skill_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
20
+ CONSTRAINT "skill_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
21
+ );
22
+
23
+ -- CreateTable
24
+ CREATE TABLE "skill_approved_snapshots" (
25
+ "skill_slug" TEXT NOT NULL PRIMARY KEY,
26
+ "file_count" INTEGER NOT NULL,
27
+ "created_at" BIGINT NOT NULL,
28
+ "updated_at" BIGINT NOT NULL,
29
+ CONSTRAINT "skill_approved_snapshots_skill_slug_fkey" FOREIGN KEY ("skill_slug") REFERENCES "skill_metadata" ("skill_slug") ON DELETE CASCADE ON UPDATE CASCADE
30
+ );
31
+
32
+ -- CreateTable
33
+ CREATE TABLE "skill_approved_snapshot_files" (
34
+ "id" TEXT NOT NULL PRIMARY KEY,
35
+ "skill_slug" TEXT NOT NULL,
36
+ "relative_path" TEXT NOT NULL,
37
+ "content_kind" TEXT NOT NULL,
38
+ "text_content" TEXT,
39
+ "binary_content" BLOB,
40
+ "size_bytes" INTEGER NOT NULL,
41
+ "content_sha256" TEXT NOT NULL,
42
+ CONSTRAINT "skill_approved_snapshot_files_skill_slug_fkey" FOREIGN KEY ("skill_slug") REFERENCES "skill_approved_snapshots" ("skill_slug") ON DELETE CASCADE ON UPDATE CASCADE
43
+ );
44
+
45
+ -- CreateIndex
46
+ CREATE INDEX "skill_access_permission_users_skill_slug_idx" ON "skill_access_permission_users"("skill_slug");
47
+
48
+ -- CreateIndex
49
+ CREATE UNIQUE INDEX "skill_access_permission_users_skill_slug_user_id_key" ON "skill_access_permission_users"("skill_slug", "user_id");
50
+
51
+ -- CreateIndex
52
+ CREATE INDEX "skill_metadata_created_by_user_id_idx" ON "skill_metadata"("created_by_user_id");
53
+
54
+ -- CreateIndex
55
+ CREATE INDEX "skill_metadata_approved_by_user_id_idx" ON "skill_metadata"("approved_by_user_id");
56
+
57
+ -- CreateIndex
58
+ CREATE INDEX "skill_approved_snapshot_files_skill_slug_idx" ON "skill_approved_snapshot_files"("skill_slug");
59
+
60
+ -- CreateIndex
61
+ CREATE UNIQUE INDEX "skill_approved_snapshot_files_skill_slug_relative_path_key" ON "skill_approved_snapshot_files"("skill_slug", "relative_path");
@@ -0,0 +1,97 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the `skill_access_permission_users` table. If the table is not empty, all the data it contains will be lost.
5
+ - You are about to drop the `workflow_run_permission_users` table. If the table is not empty, all the data it contains will be lost.
6
+ - You are about to drop the column `access_permission_mode` on the `skill_metadata` table. All the data in the column will be lost.
7
+ - You are about to drop the column `run_permission_mode` on the `workflow_metadata` table. All the data in the column will be lost.
8
+
9
+ */
10
+ -- CreateTable
11
+ CREATE TABLE "resource_permissions" (
12
+ "resource_kind" TEXT NOT NULL,
13
+ "resource_slug" TEXT NOT NULL,
14
+ "permission_mode" TEXT NOT NULL,
15
+ "created_at" BIGINT NOT NULL,
16
+ "updated_at" BIGINT NOT NULL,
17
+
18
+ PRIMARY KEY ("resource_kind", "resource_slug")
19
+ );
20
+
21
+ -- CreateTable
22
+ CREATE TABLE "resource_permission_users" (
23
+ "id" TEXT NOT NULL PRIMARY KEY,
24
+ "resource_kind" TEXT NOT NULL,
25
+ "resource_slug" TEXT NOT NULL,
26
+ "user_id" TEXT NOT NULL,
27
+ "created_at" BIGINT NOT NULL,
28
+ CONSTRAINT "resource_permission_users_resource_kind_resource_slug_fkey" FOREIGN KEY ("resource_kind", "resource_slug") REFERENCES "resource_permissions" ("resource_kind", "resource_slug") ON DELETE CASCADE ON UPDATE CASCADE,
29
+ CONSTRAINT "resource_permission_users_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE
30
+ );
31
+
32
+ -- Backfill workflow permissions into unified tables
33
+ INSERT INTO "resource_permissions" ("resource_kind", "resource_slug", "permission_mode", "created_at", "updated_at")
34
+ SELECT "workflow", "workflow_slug", "run_permission_mode", "created_at", "updated_at"
35
+ FROM "workflow_metadata";
36
+
37
+ INSERT INTO "resource_permission_users" ("id", "resource_kind", "resource_slug", "user_id", "created_at")
38
+ SELECT "wf-" || "id", "workflow", "workflow_slug", "user_id", "created_at"
39
+ FROM "workflow_run_permission_users";
40
+
41
+ -- Backfill skill permissions into unified tables
42
+ INSERT INTO "resource_permissions" ("resource_kind", "resource_slug", "permission_mode", "created_at", "updated_at")
43
+ SELECT "skill", "skill_slug", "access_permission_mode", "created_at", "updated_at"
44
+ FROM "skill_metadata";
45
+
46
+ INSERT INTO "resource_permission_users" ("id", "resource_kind", "resource_slug", "user_id", "created_at")
47
+ SELECT "sk-" || "id", "skill", "skill_slug", "user_id", "created_at"
48
+ FROM "skill_access_permission_users";
49
+
50
+ -- RedefineTables
51
+ PRAGMA defer_foreign_keys=ON;
52
+ PRAGMA foreign_keys=OFF;
53
+ CREATE TABLE "new_skill_metadata" (
54
+ "skill_slug" TEXT NOT NULL PRIMARY KEY,
55
+ "created_by_user_id" TEXT,
56
+ "approved_by_user_id" TEXT,
57
+ "created_at" BIGINT NOT NULL,
58
+ "updated_at" BIGINT NOT NULL,
59
+ CONSTRAINT "skill_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
60
+ CONSTRAINT "skill_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
61
+ );
62
+ INSERT INTO "new_skill_metadata" ("approved_by_user_id", "created_at", "created_by_user_id", "skill_slug", "updated_at") SELECT "approved_by_user_id", "created_at", "created_by_user_id", "skill_slug", "updated_at" FROM "skill_metadata";
63
+ DROP TABLE "skill_metadata";
64
+ ALTER TABLE "new_skill_metadata" RENAME TO "skill_metadata";
65
+ CREATE INDEX "skill_metadata_created_by_user_id_idx" ON "skill_metadata"("created_by_user_id");
66
+ CREATE INDEX "skill_metadata_approved_by_user_id_idx" ON "skill_metadata"("approved_by_user_id");
67
+ CREATE TABLE "new_workflow_metadata" (
68
+ "workflow_slug" TEXT NOT NULL PRIMARY KEY,
69
+ "created_by_user_id" TEXT,
70
+ "approved_by_user_id" TEXT,
71
+ "created_at" BIGINT NOT NULL,
72
+ "updated_at" BIGINT NOT NULL,
73
+ CONSTRAINT "workflow_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
74
+ CONSTRAINT "workflow_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
75
+ );
76
+ INSERT INTO "new_workflow_metadata" ("approved_by_user_id", "created_at", "created_by_user_id", "updated_at", "workflow_slug") SELECT "approved_by_user_id", "created_at", "created_by_user_id", "updated_at", "workflow_slug" FROM "workflow_metadata";
77
+ DROP TABLE "workflow_metadata";
78
+ ALTER TABLE "new_workflow_metadata" RENAME TO "workflow_metadata";
79
+ CREATE INDEX "workflow_metadata_created_by_user_id_idx" ON "workflow_metadata"("created_by_user_id");
80
+ CREATE INDEX "workflow_metadata_approved_by_user_id_idx" ON "workflow_metadata"("approved_by_user_id");
81
+ PRAGMA foreign_keys=ON;
82
+ PRAGMA defer_foreign_keys=OFF;
83
+
84
+ -- Drop old permission tables after successful backfill
85
+ PRAGMA foreign_keys=off;
86
+ DROP TABLE "skill_access_permission_users";
87
+ DROP TABLE "workflow_run_permission_users";
88
+ PRAGMA foreign_keys=on;
89
+
90
+ -- CreateIndex
91
+ CREATE INDEX "resource_permissions_resource_slug_idx" ON "resource_permissions"("resource_slug");
92
+
93
+ -- CreateIndex
94
+ CREATE INDEX "resource_permission_users_resource_kind_resource_slug_idx" ON "resource_permission_users"("resource_kind", "resource_slug");
95
+
96
+ -- CreateIndex
97
+ CREATE UNIQUE INDEX "resource_permission_users_resource_kind_resource_slug_user_id_key" ON "resource_permission_users"("resource_kind", "resource_slug", "user_id");
@@ -0,0 +1,179 @@
1
+ -- CreateTable
2
+ CREATE TABLE "resource_metadata" (
3
+ "resource_kind" TEXT NOT NULL,
4
+ "resource_slug" TEXT NOT NULL,
5
+ "created_by_user_id" TEXT,
6
+ "approved_by_user_id" TEXT,
7
+ "created_at" BIGINT NOT NULL,
8
+ "updated_at" BIGINT NOT NULL,
9
+
10
+ PRIMARY KEY ("resource_kind", "resource_slug"),
11
+ CONSTRAINT "resource_metadata_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
12
+ CONSTRAINT "resource_metadata_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE
13
+ );
14
+
15
+ -- CreateTable
16
+ CREATE TABLE "resource_approved_snapshots" (
17
+ "resource_kind" TEXT NOT NULL,
18
+ "resource_slug" TEXT NOT NULL,
19
+ "file_count" INTEGER NOT NULL,
20
+ "created_at" BIGINT NOT NULL,
21
+ "updated_at" BIGINT NOT NULL,
22
+
23
+ PRIMARY KEY ("resource_kind", "resource_slug"),
24
+ CONSTRAINT "resource_approved_snapshots_resource_kind_resource_slug_fkey" FOREIGN KEY ("resource_kind", "resource_slug") REFERENCES "resource_metadata" ("resource_kind", "resource_slug") ON DELETE CASCADE ON UPDATE CASCADE
25
+ );
26
+
27
+ -- CreateTable
28
+ CREATE TABLE "resource_approved_snapshot_files" (
29
+ "id" TEXT NOT NULL PRIMARY KEY,
30
+ "resource_kind" TEXT NOT NULL,
31
+ "resource_slug" TEXT NOT NULL,
32
+ "relative_path" TEXT NOT NULL,
33
+ "content_kind" TEXT NOT NULL,
34
+ "text_content" TEXT,
35
+ "binary_content" BLOB,
36
+ "size_bytes" INTEGER NOT NULL,
37
+ "content_sha256" TEXT NOT NULL,
38
+ CONSTRAINT "resource_approved_snapshot_files_resource_kind_resource_slug_fkey" FOREIGN KEY ("resource_kind", "resource_slug") REFERENCES "resource_approved_snapshots" ("resource_kind", "resource_slug") ON DELETE CASCADE ON UPDATE CASCADE
39
+ );
40
+
41
+ -- CreateIndex
42
+ CREATE INDEX "resource_metadata_resource_slug_idx" ON "resource_metadata"("resource_slug");
43
+
44
+ -- CreateIndex
45
+ CREATE INDEX "resource_metadata_created_by_user_id_idx" ON "resource_metadata"("created_by_user_id");
46
+
47
+ -- CreateIndex
48
+ CREATE INDEX "resource_metadata_approved_by_user_id_idx" ON "resource_metadata"("approved_by_user_id");
49
+
50
+ -- CreateIndex
51
+ CREATE INDEX "resource_approved_snapshots_resource_slug_idx" ON "resource_approved_snapshots"("resource_slug");
52
+
53
+ -- CreateIndex
54
+ CREATE INDEX "resource_approved_snapshot_files_resource_kind_resource_slug_idx" ON "resource_approved_snapshot_files"("resource_kind", "resource_slug");
55
+
56
+ -- CreateIndex
57
+ CREATE UNIQUE INDEX "resource_approved_snapshot_files_resource_kind_resource_slug_relative_path_key" ON "resource_approved_snapshot_files"("resource_kind", "resource_slug", "relative_path");
58
+
59
+ -- Migrate workflow metadata/snapshots into shared resource tables
60
+ INSERT OR IGNORE INTO "resource_metadata" (
61
+ "resource_kind",
62
+ "resource_slug",
63
+ "created_by_user_id",
64
+ "approved_by_user_id",
65
+ "created_at",
66
+ "updated_at"
67
+ )
68
+ SELECT
69
+ 'workflow',
70
+ "workflow_slug",
71
+ "created_by_user_id",
72
+ "approved_by_user_id",
73
+ "created_at",
74
+ "updated_at"
75
+ FROM "workflow_metadata";
76
+
77
+ INSERT OR IGNORE INTO "resource_approved_snapshots" (
78
+ "resource_kind",
79
+ "resource_slug",
80
+ "file_count",
81
+ "created_at",
82
+ "updated_at"
83
+ )
84
+ SELECT
85
+ 'workflow',
86
+ "workflow_slug",
87
+ "file_count",
88
+ "created_at",
89
+ "updated_at"
90
+ FROM "workflow_approved_snapshots";
91
+
92
+ INSERT OR IGNORE INTO "resource_approved_snapshot_files" (
93
+ "id",
94
+ "resource_kind",
95
+ "resource_slug",
96
+ "relative_path",
97
+ "content_kind",
98
+ "text_content",
99
+ "binary_content",
100
+ "size_bytes",
101
+ "content_sha256"
102
+ )
103
+ SELECT
104
+ "id",
105
+ 'workflow',
106
+ "workflow_slug",
107
+ "relative_path",
108
+ "content_kind",
109
+ "text_content",
110
+ "binary_content",
111
+ "size_bytes",
112
+ "content_sha256"
113
+ FROM "workflow_approved_snapshot_files";
114
+
115
+ -- Migrate skill metadata/snapshots into shared resource tables
116
+ INSERT OR IGNORE INTO "resource_metadata" (
117
+ "resource_kind",
118
+ "resource_slug",
119
+ "created_by_user_id",
120
+ "approved_by_user_id",
121
+ "created_at",
122
+ "updated_at"
123
+ )
124
+ SELECT
125
+ 'skill',
126
+ "skill_slug",
127
+ "created_by_user_id",
128
+ "approved_by_user_id",
129
+ "created_at",
130
+ "updated_at"
131
+ FROM "skill_metadata";
132
+
133
+ INSERT OR IGNORE INTO "resource_approved_snapshots" (
134
+ "resource_kind",
135
+ "resource_slug",
136
+ "file_count",
137
+ "created_at",
138
+ "updated_at"
139
+ )
140
+ SELECT
141
+ 'skill',
142
+ "skill_slug",
143
+ "file_count",
144
+ "created_at",
145
+ "updated_at"
146
+ FROM "skill_approved_snapshots";
147
+
148
+ INSERT OR IGNORE INTO "resource_approved_snapshot_files" (
149
+ "id",
150
+ "resource_kind",
151
+ "resource_slug",
152
+ "relative_path",
153
+ "content_kind",
154
+ "text_content",
155
+ "binary_content",
156
+ "size_bytes",
157
+ "content_sha256"
158
+ )
159
+ SELECT
160
+ "id",
161
+ 'skill',
162
+ "skill_slug",
163
+ "relative_path",
164
+ "content_kind",
165
+ "text_content",
166
+ "binary_content",
167
+ "size_bytes",
168
+ "content_sha256"
169
+ FROM "skill_approved_snapshot_files";
170
+
171
+ -- Drop legacy duplicated tables
172
+ PRAGMA foreign_keys=off;
173
+ DROP TABLE "skill_approved_snapshot_files";
174
+ DROP TABLE "skill_approved_snapshots";
175
+ DROP TABLE "skill_metadata";
176
+ DROP TABLE "workflow_approved_snapshot_files";
177
+ DROP TABLE "workflow_approved_snapshots";
178
+ DROP TABLE "workflow_metadata";
179
+ PRAGMA foreign_keys=on;
@@ -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 = "sqlite"