@openork/cli 0.1.0 → 0.2.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 (135) hide show
  1. package/README.md +33 -0
  2. package/dist/commands/doctor.d.ts +12 -0
  3. package/dist/commands/doctor.d.ts.map +1 -0
  4. package/dist/commands/doctor.js +110 -0
  5. package/dist/commands/doctor.js.map +1 -0
  6. package/dist/commands/gateway/start.d.ts +7 -0
  7. package/dist/commands/gateway/start.d.ts.map +1 -1
  8. package/dist/commands/gateway/start.js +64 -6
  9. package/dist/commands/gateway/start.js.map +1 -1
  10. package/dist/commands/setup.d.ts.map +1 -1
  11. package/dist/commands/setup.js +19 -0
  12. package/dist/commands/setup.js.map +1 -1
  13. package/dist/commands/uninstall.d.ts.map +1 -1
  14. package/dist/commands/uninstall.js +51 -31
  15. package/dist/commands/uninstall.js.map +1 -1
  16. package/dist/lib/doctor.d.ts +28 -0
  17. package/dist/lib/doctor.d.ts.map +1 -0
  18. package/dist/lib/doctor.js +227 -0
  19. package/dist/lib/doctor.js.map +1 -0
  20. package/dist/openapi.yml +770 -0
  21. package/dist/prisma/migrations/20260401085053_schema_sync/migration.sql +178 -0
  22. package/dist/prisma/migrations/20260401135027_add_auth_rbac_multitenancy/migration.sql +211 -0
  23. package/dist/prisma/schema.prisma +101 -0
  24. package/dist/server.js +74899 -175525
  25. package/dist/server.js.map +1 -1
  26. package/dist/web/assets/{activity-feed-D_eonDKG.js → activity-feed-CNgi7Qb_.js} +1 -1
  27. package/dist/web/assets/agent-edit-CgbnHiT5.js +98 -0
  28. package/dist/web/assets/agent-sessions-Bpay1_ZH.js +1 -0
  29. package/dist/web/assets/agent-use-BaBxQ2fx.js +1 -0
  30. package/dist/web/assets/agents-Dwbd6TQx.js +1 -0
  31. package/dist/web/assets/api-DNWoqIPN.js +1 -0
  32. package/dist/web/assets/arrow-down-upU5tcpi.js +1 -0
  33. package/dist/web/assets/arrow-left-BiNeYcK0.js +1 -0
  34. package/dist/web/assets/auth-client-ys1jC854.js +1 -0
  35. package/dist/web/assets/chat-BP5H9CWl.js +4 -0
  36. package/dist/web/assets/{chat-input-BepRPV_L.js → chat-input-CKAtAtgG.js} +2 -2
  37. package/dist/web/assets/{chat-message-CbcDeDcb.js → chat-message-CW-HnO3f.js} +3 -3
  38. package/dist/web/assets/chat-new-BQp9Bn7Q.js +1 -0
  39. package/dist/web/assets/chat-sessions-D3bS5vba.js +1 -0
  40. package/dist/web/assets/chats-DJolHH4e.js +1 -0
  41. package/dist/web/assets/{circle-alert-W8QX9LOG.js → circle-alert-D040vPU_.js} +1 -1
  42. package/dist/web/assets/circle-check-CW3adL8A.js +1 -0
  43. package/dist/web/assets/{circle-x-D_8Tcgt1.js → circle-x-34c-1fVL.js} +1 -1
  44. package/dist/web/assets/code-BFUT4gGT.js +1 -0
  45. package/dist/web/assets/{code-editor-x9L6nkh4.js → code-editor-I6vK5q_W.js} +1 -1
  46. package/dist/web/assets/commands-DBI4Bb2N.js +8 -0
  47. package/dist/web/assets/{copy-C87mjn_Y.js → copy-DI5qjA1p.js} +1 -1
  48. package/dist/web/assets/credentials-D8VN8A5M.js +1 -0
  49. package/dist/web/assets/{crown-BJEsQkh4.js → crown-DWB5bSnq.js} +1 -1
  50. package/dist/web/assets/dashboard-Cc6KWs62.js +1 -0
  51. package/dist/web/assets/{database-BohjTljV.js → database-5jczNGML.js} +1 -1
  52. package/dist/web/assets/debug-DewdHeoW.js +1 -0
  53. package/dist/web/assets/{download-B2UOiYAS.js → download-CwO6xusv.js} +1 -1
  54. package/dist/web/assets/{eye-DN-Km5vf.js → eye-BQGasWwb.js} +1 -1
  55. package/dist/web/assets/{file-plus-B8qWemgt.js → file-plus-kHgvf9P8.js} +1 -1
  56. package/dist/web/assets/file-tree-CTe61XCg.js +1 -0
  57. package/dist/web/assets/{folder-plus-DsmP6Mur.js → folder-plus-mZAz-QpJ.js} +1 -1
  58. package/dist/web/assets/{globe-fwFSeXZn.js → globe-C0WHVFW_.js} +1 -1
  59. package/dist/web/assets/{grip-vertical-Djo-yR-o.js → grip-vertical-CdhrWSnV.js} +1 -1
  60. package/dist/web/assets/{history-CyBBboEp.js → history-w7qYglj5.js} +1 -1
  61. package/dist/web/assets/index-9X_UIor3.css +2 -0
  62. package/dist/web/assets/index-DWNLSHpo.js +4 -0
  63. package/dist/web/assets/key-DJEQ_jUi.js +1 -0
  64. package/dist/web/assets/{layers-ephyCrDm.js → layers-KZu6CpGE.js} +1 -1
  65. package/dist/web/assets/{layout-grid-DCVGg8ZA.js → layout-grid-U17jhSjz.js} +1 -1
  66. package/dist/web/assets/login-DoSA7KtI.js +1 -0
  67. package/dist/web/assets/mcp-setup-Cyj1YAiY.js +17 -0
  68. package/dist/web/assets/memory-DWZU2Tfl.js +1 -0
  69. package/dist/web/assets/new-chat-BRS3DM8Z.js +1 -0
  70. package/dist/web/assets/play-BzkxV_O-.js +1 -0
  71. package/dist/web/assets/{refresh-cw-RFYUf5GB.js → refresh-cw-D3_GZ86i.js} +1 -1
  72. package/dist/web/assets/register-BS5OkCgS.js +1 -0
  73. package/dist/web/assets/rotate-ccw-CkJIdGxi.js +1 -0
  74. package/dist/web/assets/{save-Dewm93H6.js → save-BXEZF80P.js} +1 -1
  75. package/dist/web/assets/search-BmZSwFnA.js +1 -0
  76. package/dist/web/assets/{send-FWvygYFQ.js → send-CNiXC6KO.js} +1 -1
  77. package/dist/web/assets/server-C5bKQLDi.js +1 -0
  78. package/dist/web/assets/settings-CBAhSOZM.js +1 -0
  79. package/dist/web/assets/shield-CMMTdOiM.js +1 -0
  80. package/dist/web/assets/{shield-check-Dt7sXtBF.js → shield-check-BmphmMlD.js} +1 -1
  81. package/dist/web/assets/{shuffle-DjvBJ7XV.js → shuffle-Dv_-PFl5.js} +1 -1
  82. package/dist/web/assets/src-CaF63bXY.js +24 -0
  83. package/dist/web/assets/sse-url-qohTy4Sw.js +1 -0
  84. package/dist/web/assets/team-edit-BW1bePKn.js +1 -0
  85. package/dist/web/assets/team-sessions-GspGc7zN.js +1 -0
  86. package/dist/web/assets/team-use-BVC7nt9K.js +3 -0
  87. package/dist/web/assets/terminal-CjSFIwMK.js +1 -0
  88. package/dist/web/assets/{timer-C9X20mTO.js → timer-3siC9tpd.js} +1 -1
  89. package/dist/web/assets/{useMutation-BlOHt3MR.js → useMutation-DA8-TvTt.js} +1 -1
  90. package/dist/web/assets/{utils-DHTPP40O.js → utils-D1nRmcA6.js} +1 -1
  91. package/dist/web/assets/workflow-edit-DkmsARCv.js +4 -0
  92. package/dist/web/assets/workflow-runs-DcJPL7Bo.js +1 -0
  93. package/dist/web/assets/workflows-Dnx0dwJn.js +1 -0
  94. package/dist/web/assets/{wrench-DZBtSPP8.js → wrench-u8B_fDwT.js} +1 -1
  95. package/dist/web/assets/{zap-CbT5plGA.js → zap-hOn7wkXe.js} +1 -1
  96. package/dist/web/index.html +9 -7
  97. package/package.json +1 -1
  98. package/dist/web/assets/agent-edit-CblZItU5.js +0 -98
  99. package/dist/web/assets/agent-sessions-COpCcffa.js +0 -1
  100. package/dist/web/assets/agent-use-F4pOt3KJ.js +0 -1
  101. package/dist/web/assets/agents-Av7w2wHE.js +0 -1
  102. package/dist/web/assets/arrow-down-XHN5PD1k.js +0 -1
  103. package/dist/web/assets/arrow-left-wtNmm6Le.js +0 -1
  104. package/dist/web/assets/chat-CQvfLy7Y.js +0 -4
  105. package/dist/web/assets/chat-new-BOtDuYij.js +0 -1
  106. package/dist/web/assets/chat-sessions-CaCaK_PC.js +0 -1
  107. package/dist/web/assets/chats-64IReeGV.js +0 -1
  108. package/dist/web/assets/circle-check-DLl9fl65.js +0 -1
  109. package/dist/web/assets/code-Brz4KHlI.js +0 -1
  110. package/dist/web/assets/commands-DT9K8bae.js +0 -8
  111. package/dist/web/assets/credentials-DC-HOVxW.js +0 -1
  112. package/dist/web/assets/dashboard-OfnNUjFX.js +0 -1
  113. package/dist/web/assets/debug-Et9rgBM8.js +0 -1
  114. package/dist/web/assets/file-tree-DkLQ1z0I.js +0 -1
  115. package/dist/web/assets/index-YgjFlLLv.css +0 -2
  116. package/dist/web/assets/index-dc8HGqTp.js +0 -2
  117. package/dist/web/assets/mcp-setup-BfMdYdsI.js +0 -17
  118. package/dist/web/assets/memory-DAQ474-p.js +0 -1
  119. package/dist/web/assets/new-chat-DtMw6FMg.js +0 -1
  120. package/dist/web/assets/play-DXJMtO-K.js +0 -1
  121. package/dist/web/assets/search-Ww0msJQz.js +0 -1
  122. package/dist/web/assets/settings-Auyn4Z5T.js +0 -1
  123. package/dist/web/assets/src-DUhGoAQb.js +0 -24
  124. package/dist/web/assets/team-edit-DO-RX3lC.js +0 -1
  125. package/dist/web/assets/team-sessions-DSw8MTtZ.js +0 -1
  126. package/dist/web/assets/team-use-BfNvsFcO.js +0 -3
  127. package/dist/web/assets/terminal-CIapYonS.js +0 -1
  128. package/dist/web/assets/workflow-edit-D0FNyl64.js +0 -4
  129. package/dist/web/assets/workflow-runs-CPVvaVzN.js +0 -1
  130. package/dist/web/assets/workflows-C9jurJiE.js +0 -1
  131. /package/dist/web/assets/{api-docs-BQzn4-6U.js → api-docs-DgRFxVfh.js} +0 -0
  132. /package/dist/web/assets/{bi-gM8sIAZV.js → bi-Da3wz7XD.js} +0 -0
  133. /package/dist/web/assets/{cron-COUPKvGu.js → cron-3VyztcE9.js} +0 -0
  134. /package/dist/web/assets/{vendor-editor-BORFA-rZ.js → vendor-editor-Cx3Ogh9u.js} +0 -0
  135. /package/dist/web/assets/{vendor-ui-Dpw9mBc-.js → vendor-ui-DnL9d3od.js} +0 -0
@@ -0,0 +1,178 @@
1
+ -- AlterTable
2
+ ALTER TABLE "AgentRun" ADD COLUMN "cacheReadTokens" INTEGER;
3
+ ALTER TABLE "AgentRun" ADD COLUMN "cacheWriteTokens" INTEGER;
4
+ ALTER TABLE "AgentRun" ADD COLUMN "inputTokens" INTEGER;
5
+ ALTER TABLE "AgentRun" ADD COLUMN "model" TEXT;
6
+ ALTER TABLE "AgentRun" ADD COLUMN "outputTokens" INTEGER;
7
+ ALTER TABLE "AgentRun" ADD COLUMN "summary" TEXT;
8
+
9
+ -- AlterTable
10
+ ALTER TABLE "WorkflowRun" ADD COLUMN "payload" TEXT;
11
+
12
+ -- CreateTable
13
+ CREATE TABLE "Credential" (
14
+ "id" TEXT NOT NULL PRIMARY KEY,
15
+ "name" TEXT NOT NULL,
16
+ "type" TEXT NOT NULL,
17
+ "data" TEXT NOT NULL,
18
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
19
+ "updatedAt" DATETIME NOT NULL
20
+ );
21
+
22
+ -- CreateTable
23
+ CREATE TABLE "LogEntry" (
24
+ "id" TEXT NOT NULL PRIMARY KEY,
25
+ "agentRunId" TEXT NOT NULL,
26
+ "stream" TEXT NOT NULL DEFAULT 'stdout',
27
+ "text" TEXT NOT NULL,
28
+ "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
29
+ CONSTRAINT "LogEntry_agentRunId_fkey" FOREIGN KEY ("agentRunId") REFERENCES "AgentRun" ("id") ON DELETE CASCADE ON UPDATE CASCADE
30
+ );
31
+
32
+ -- CreateTable
33
+ CREATE TABLE "TeamSession" (
34
+ "id" TEXT NOT NULL PRIMARY KEY,
35
+ "teamId" TEXT NOT NULL,
36
+ "teamName" TEXT NOT NULL,
37
+ "strategy" TEXT NOT NULL,
38
+ "status" TEXT NOT NULL,
39
+ "prompt" TEXT NOT NULL,
40
+ "maxRounds" INTEGER NOT NULL,
41
+ "totalRounds" INTEGER NOT NULL,
42
+ "error" TEXT,
43
+ "inputTokens" INTEGER NOT NULL DEFAULT 0,
44
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
45
+ "cacheReadTokens" INTEGER NOT NULL DEFAULT 0,
46
+ "cacheWriteTokens" INTEGER NOT NULL DEFAULT 0,
47
+ "startedAt" DATETIME NOT NULL,
48
+ "completedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
49
+ );
50
+
51
+ -- CreateTable
52
+ CREATE TABLE "AgentChatSession" (
53
+ "id" TEXT NOT NULL PRIMARY KEY,
54
+ "agentId" TEXT NOT NULL,
55
+ "agentName" TEXT NOT NULL,
56
+ "status" TEXT NOT NULL,
57
+ "prompt" TEXT NOT NULL,
58
+ "output" TEXT,
59
+ "model" TEXT,
60
+ "cli" TEXT,
61
+ "error" TEXT,
62
+ "inputTokens" INTEGER NOT NULL DEFAULT 0,
63
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
64
+ "cacheReadTokens" INTEGER NOT NULL DEFAULT 0,
65
+ "cacheWriteTokens" INTEGER NOT NULL DEFAULT 0,
66
+ "streamId" TEXT,
67
+ "sessionId" TEXT,
68
+ "startedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
69
+ "completedAt" DATETIME
70
+ );
71
+
72
+ -- CreateTable
73
+ CREATE TABLE "TeamSessionAgent" (
74
+ "id" TEXT NOT NULL PRIMARY KEY,
75
+ "teamSessionId" TEXT NOT NULL,
76
+ "agentId" TEXT NOT NULL,
77
+ "agentName" TEXT NOT NULL,
78
+ "nodeId" TEXT NOT NULL,
79
+ "role" TEXT NOT NULL,
80
+ "status" TEXT NOT NULL,
81
+ "round" INTEGER NOT NULL,
82
+ "output" TEXT,
83
+ "model" TEXT,
84
+ "inputTokens" INTEGER NOT NULL DEFAULT 0,
85
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
86
+ "cacheReadTokens" INTEGER NOT NULL DEFAULT 0,
87
+ "cacheWriteTokens" INTEGER NOT NULL DEFAULT 0,
88
+ CONSTRAINT "TeamSessionAgent_teamSessionId_fkey" FOREIGN KEY ("teamSessionId") REFERENCES "TeamSession" ("id") ON DELETE CASCADE ON UPDATE CASCADE
89
+ );
90
+
91
+ -- RedefineTables
92
+ PRAGMA defer_foreign_keys=ON;
93
+ PRAGMA foreign_keys=OFF;
94
+ CREATE TABLE "new_Action" (
95
+ "id" TEXT NOT NULL PRIMARY KEY,
96
+ "name" TEXT,
97
+ "type" TEXT NOT NULL DEFAULT 'cli-agent',
98
+ "order" INTEGER NOT NULL,
99
+ "dependsOn" TEXT,
100
+ "workflowId" TEXT NOT NULL,
101
+ "cli" TEXT,
102
+ "model" TEXT,
103
+ "prompt" TEXT,
104
+ "trustMode" BOOLEAN NOT NULL DEFAULT true,
105
+ "script" TEXT,
106
+ "httpMethod" TEXT,
107
+ "httpUrl" TEXT,
108
+ "httpHeaders" TEXT,
109
+ "httpBody" TEXT,
110
+ "credentialId" TEXT,
111
+ "timeoutMs" INTEGER,
112
+ "targetWorkflowId" TEXT,
113
+ "agentId" TEXT,
114
+ "teamId" TEXT,
115
+ CONSTRAINT "Action_workflowId_fkey" FOREIGN KEY ("workflowId") REFERENCES "Workflow" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
116
+ CONSTRAINT "Action_credentialId_fkey" FOREIGN KEY ("credentialId") REFERENCES "Credential" ("id") ON DELETE SET NULL ON UPDATE CASCADE
117
+ );
118
+ INSERT INTO "new_Action" ("cli", "httpBody", "httpHeaders", "httpMethod", "httpUrl", "id", "order", "prompt", "script", "type", "workflowId") SELECT "cli", "httpBody", "httpHeaders", "httpMethod", "httpUrl", "id", "order", "prompt", "script", "type", "workflowId" FROM "Action";
119
+ DROP TABLE "Action";
120
+ ALTER TABLE "new_Action" RENAME TO "Action";
121
+ CREATE INDEX "Action_workflowId_idx" ON "Action"("workflowId");
122
+ CREATE TABLE "new_Workflow" (
123
+ "id" TEXT NOT NULL PRIMARY KEY,
124
+ "name" TEXT NOT NULL,
125
+ "description" TEXT,
126
+ "workspace" TEXT,
127
+ "cli" TEXT NOT NULL DEFAULT 'cursor',
128
+ "model" TEXT,
129
+ "cronExpression" TEXT,
130
+ "enabled" BOOLEAN NOT NULL DEFAULT true,
131
+ "summaryEnabled" BOOLEAN NOT NULL DEFAULT false,
132
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
133
+ "updatedAt" DATETIME NOT NULL
134
+ );
135
+ INSERT INTO "new_Workflow" ("cli", "createdAt", "cronExpression", "description", "enabled", "id", "model", "name", "updatedAt", "workspace") SELECT "cli", "createdAt", "cronExpression", "description", "enabled", "id", "model", "name", "updatedAt", "workspace" FROM "Workflow";
136
+ DROP TABLE "Workflow";
137
+ ALTER TABLE "new_Workflow" RENAME TO "Workflow";
138
+ PRAGMA foreign_keys=ON;
139
+ PRAGMA defer_foreign_keys=OFF;
140
+
141
+ -- CreateIndex
142
+ CREATE INDEX "LogEntry_agentRunId_idx" ON "LogEntry"("agentRunId");
143
+
144
+ -- CreateIndex
145
+ CREATE INDEX "TeamSession_teamId_idx" ON "TeamSession"("teamId");
146
+
147
+ -- CreateIndex
148
+ CREATE INDEX "TeamSession_status_idx" ON "TeamSession"("status");
149
+
150
+ -- CreateIndex
151
+ CREATE INDEX "TeamSession_startedAt_idx" ON "TeamSession"("startedAt");
152
+
153
+ -- CreateIndex
154
+ CREATE INDEX "TeamSession_completedAt_idx" ON "TeamSession"("completedAt");
155
+
156
+ -- CreateIndex
157
+ CREATE INDEX "AgentChatSession_agentId_idx" ON "AgentChatSession"("agentId");
158
+
159
+ -- CreateIndex
160
+ CREATE INDEX "AgentChatSession_status_idx" ON "AgentChatSession"("status");
161
+
162
+ -- CreateIndex
163
+ CREATE INDEX "AgentChatSession_startedAt_idx" ON "AgentChatSession"("startedAt");
164
+
165
+ -- CreateIndex
166
+ CREATE INDEX "TeamSessionAgent_teamSessionId_idx" ON "TeamSessionAgent"("teamSessionId");
167
+
168
+ -- CreateIndex
169
+ CREATE INDEX "TeamSessionAgent_agentId_idx" ON "TeamSessionAgent"("agentId");
170
+
171
+ -- CreateIndex
172
+ CREATE INDEX "AgentRun_workflowRunId_status_idx" ON "AgentRun"("workflowRunId", "status");
173
+
174
+ -- CreateIndex
175
+ CREATE INDEX "Trigger_type_eventName_idx" ON "Trigger"("type", "eventName");
176
+
177
+ -- CreateIndex
178
+ CREATE INDEX "WorkflowRun_status_idx" ON "WorkflowRun"("status");
@@ -0,0 +1,211 @@
1
+ -- CreateTable
2
+ CREATE TABLE "user" (
3
+ "id" TEXT NOT NULL PRIMARY KEY,
4
+ "name" TEXT NOT NULL,
5
+ "email" TEXT NOT NULL,
6
+ "emailVerified" BOOLEAN NOT NULL DEFAULT false,
7
+ "image" TEXT,
8
+ "roleId" TEXT NOT NULL,
9
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
10
+ "updatedAt" DATETIME NOT NULL,
11
+ CONSTRAINT "user_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "role" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
12
+ );
13
+
14
+ -- CreateTable
15
+ CREATE TABLE "role" (
16
+ "id" TEXT NOT NULL PRIMARY KEY,
17
+ "name" TEXT NOT NULL,
18
+ "description" TEXT,
19
+ "isSystem" BOOLEAN NOT NULL DEFAULT false,
20
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
21
+ "updatedAt" DATETIME NOT NULL
22
+ );
23
+
24
+ -- CreateTable
25
+ CREATE TABLE "rolePermission" (
26
+ "id" TEXT NOT NULL PRIMARY KEY,
27
+ "roleId" TEXT NOT NULL,
28
+ "entity" TEXT NOT NULL,
29
+ "action" TEXT NOT NULL,
30
+ "scope" TEXT NOT NULL DEFAULT 'all',
31
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
32
+ CONSTRAINT "rolePermission_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "role" ("id") ON DELETE CASCADE ON UPDATE CASCADE
33
+ );
34
+
35
+ -- CreateTable
36
+ CREATE TABLE "session" (
37
+ "id" TEXT NOT NULL PRIMARY KEY,
38
+ "expiresAt" DATETIME NOT NULL,
39
+ "token" TEXT NOT NULL,
40
+ "ipAddress" TEXT,
41
+ "userAgent" TEXT,
42
+ "userId" TEXT NOT NULL,
43
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
44
+ "updatedAt" DATETIME NOT NULL,
45
+ CONSTRAINT "session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE CASCADE
46
+ );
47
+
48
+ -- CreateTable
49
+ CREATE TABLE "account" (
50
+ "id" TEXT NOT NULL PRIMARY KEY,
51
+ "accountId" TEXT NOT NULL,
52
+ "providerId" TEXT NOT NULL,
53
+ "userId" TEXT NOT NULL,
54
+ "accessToken" TEXT,
55
+ "refreshToken" TEXT,
56
+ "idToken" TEXT,
57
+ "accessTokenExpiresAt" DATETIME,
58
+ "refreshTokenExpiresAt" DATETIME,
59
+ "scope" TEXT,
60
+ "password" TEXT,
61
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
62
+ "updatedAt" DATETIME NOT NULL,
63
+ CONSTRAINT "account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE CASCADE ON UPDATE CASCADE
64
+ );
65
+
66
+ -- CreateTable
67
+ CREATE TABLE "verification" (
68
+ "id" TEXT NOT NULL PRIMARY KEY,
69
+ "identifier" TEXT NOT NULL,
70
+ "value" TEXT NOT NULL,
71
+ "expiresAt" DATETIME NOT NULL,
72
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
73
+ "updatedAt" DATETIME NOT NULL
74
+ );
75
+
76
+ -- RedefineTables
77
+ PRAGMA defer_foreign_keys=ON;
78
+ PRAGMA foreign_keys=OFF;
79
+ CREATE TABLE "new_AgentChatSession" (
80
+ "id" TEXT NOT NULL PRIMARY KEY,
81
+ "agentId" TEXT NOT NULL,
82
+ "agentName" TEXT NOT NULL,
83
+ "status" TEXT NOT NULL,
84
+ "prompt" TEXT NOT NULL,
85
+ "output" TEXT,
86
+ "model" TEXT,
87
+ "cli" TEXT,
88
+ "error" TEXT,
89
+ "userId" TEXT NOT NULL DEFAULT '',
90
+ "inputTokens" INTEGER NOT NULL DEFAULT 0,
91
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
92
+ "cacheReadTokens" INTEGER NOT NULL DEFAULT 0,
93
+ "cacheWriteTokens" INTEGER NOT NULL DEFAULT 0,
94
+ "streamId" TEXT,
95
+ "sessionId" TEXT,
96
+ "startedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
97
+ "completedAt" DATETIME
98
+ );
99
+ INSERT INTO "new_AgentChatSession" ("agentId", "agentName", "cacheReadTokens", "cacheWriteTokens", "cli", "completedAt", "error", "id", "inputTokens", "model", "output", "outputTokens", "prompt", "sessionId", "startedAt", "status", "streamId") SELECT "agentId", "agentName", "cacheReadTokens", "cacheWriteTokens", "cli", "completedAt", "error", "id", "inputTokens", "model", "output", "outputTokens", "prompt", "sessionId", "startedAt", "status", "streamId" FROM "AgentChatSession";
100
+ DROP TABLE "AgentChatSession";
101
+ ALTER TABLE "new_AgentChatSession" RENAME TO "AgentChatSession";
102
+ CREATE INDEX "AgentChatSession_agentId_idx" ON "AgentChatSession"("agentId");
103
+ CREATE INDEX "AgentChatSession_status_idx" ON "AgentChatSession"("status");
104
+ CREATE INDEX "AgentChatSession_startedAt_idx" ON "AgentChatSession"("startedAt");
105
+ CREATE INDEX "AgentChatSession_userId_idx" ON "AgentChatSession"("userId");
106
+ CREATE TABLE "new_Credential" (
107
+ "id" TEXT NOT NULL PRIMARY KEY,
108
+ "name" TEXT NOT NULL,
109
+ "type" TEXT NOT NULL,
110
+ "data" TEXT NOT NULL,
111
+ "userId" TEXT NOT NULL DEFAULT '',
112
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
113
+ "updatedAt" DATETIME NOT NULL
114
+ );
115
+ INSERT INTO "new_Credential" ("createdAt", "data", "id", "name", "type", "updatedAt") SELECT "createdAt", "data", "id", "name", "type", "updatedAt" FROM "Credential";
116
+ DROP TABLE "Credential";
117
+ ALTER TABLE "new_Credential" RENAME TO "Credential";
118
+ CREATE INDEX "Credential_userId_idx" ON "Credential"("userId");
119
+ CREATE TABLE "new_TeamSession" (
120
+ "id" TEXT NOT NULL PRIMARY KEY,
121
+ "teamId" TEXT NOT NULL,
122
+ "teamName" TEXT NOT NULL,
123
+ "strategy" TEXT NOT NULL,
124
+ "status" TEXT NOT NULL,
125
+ "prompt" TEXT NOT NULL,
126
+ "maxRounds" INTEGER NOT NULL,
127
+ "totalRounds" INTEGER NOT NULL,
128
+ "error" TEXT,
129
+ "userId" TEXT NOT NULL DEFAULT '',
130
+ "inputTokens" INTEGER NOT NULL DEFAULT 0,
131
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
132
+ "cacheReadTokens" INTEGER NOT NULL DEFAULT 0,
133
+ "cacheWriteTokens" INTEGER NOT NULL DEFAULT 0,
134
+ "startedAt" DATETIME NOT NULL,
135
+ "completedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
136
+ );
137
+ INSERT INTO "new_TeamSession" ("cacheReadTokens", "cacheWriteTokens", "completedAt", "error", "id", "inputTokens", "maxRounds", "outputTokens", "prompt", "startedAt", "status", "strategy", "teamId", "teamName", "totalRounds") SELECT "cacheReadTokens", "cacheWriteTokens", "completedAt", "error", "id", "inputTokens", "maxRounds", "outputTokens", "prompt", "startedAt", "status", "strategy", "teamId", "teamName", "totalRounds" FROM "TeamSession";
138
+ DROP TABLE "TeamSession";
139
+ ALTER TABLE "new_TeamSession" RENAME TO "TeamSession";
140
+ CREATE INDEX "TeamSession_teamId_idx" ON "TeamSession"("teamId");
141
+ CREATE INDEX "TeamSession_status_idx" ON "TeamSession"("status");
142
+ CREATE INDEX "TeamSession_startedAt_idx" ON "TeamSession"("startedAt");
143
+ CREATE INDEX "TeamSession_completedAt_idx" ON "TeamSession"("completedAt");
144
+ CREATE INDEX "TeamSession_userId_idx" ON "TeamSession"("userId");
145
+ CREATE TABLE "new_Workflow" (
146
+ "id" TEXT NOT NULL PRIMARY KEY,
147
+ "name" TEXT NOT NULL,
148
+ "description" TEXT,
149
+ "workspace" TEXT,
150
+ "cli" TEXT NOT NULL DEFAULT 'cursor',
151
+ "model" TEXT,
152
+ "cronExpression" TEXT,
153
+ "enabled" BOOLEAN NOT NULL DEFAULT true,
154
+ "summaryEnabled" BOOLEAN NOT NULL DEFAULT false,
155
+ "userId" TEXT NOT NULL DEFAULT '',
156
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
157
+ "updatedAt" DATETIME NOT NULL
158
+ );
159
+ INSERT INTO "new_Workflow" ("cli", "createdAt", "cronExpression", "description", "enabled", "id", "model", "name", "summaryEnabled", "updatedAt", "workspace") SELECT "cli", "createdAt", "cronExpression", "description", "enabled", "id", "model", "name", "summaryEnabled", "updatedAt", "workspace" FROM "Workflow";
160
+ DROP TABLE "Workflow";
161
+ ALTER TABLE "new_Workflow" RENAME TO "Workflow";
162
+ CREATE INDEX "Workflow_userId_idx" ON "Workflow"("userId");
163
+ CREATE TABLE "new_WorkflowRun" (
164
+ "id" TEXT NOT NULL PRIMARY KEY,
165
+ "workflowId" TEXT NOT NULL,
166
+ "status" TEXT NOT NULL DEFAULT 'pending',
167
+ "payload" TEXT,
168
+ "userId" TEXT NOT NULL DEFAULT '',
169
+ "startedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
170
+ "completedAt" DATETIME,
171
+ "error" TEXT,
172
+ CONSTRAINT "WorkflowRun_workflowId_fkey" FOREIGN KEY ("workflowId") REFERENCES "Workflow" ("id") ON DELETE CASCADE ON UPDATE CASCADE
173
+ );
174
+ INSERT INTO "new_WorkflowRun" ("completedAt", "error", "id", "payload", "startedAt", "status", "workflowId") SELECT "completedAt", "error", "id", "payload", "startedAt", "status", "workflowId" FROM "WorkflowRun";
175
+ DROP TABLE "WorkflowRun";
176
+ ALTER TABLE "new_WorkflowRun" RENAME TO "WorkflowRun";
177
+ CREATE INDEX "WorkflowRun_workflowId_idx" ON "WorkflowRun"("workflowId");
178
+ CREATE INDEX "WorkflowRun_status_idx" ON "WorkflowRun"("status");
179
+ CREATE INDEX "WorkflowRun_userId_idx" ON "WorkflowRun"("userId");
180
+ PRAGMA foreign_keys=ON;
181
+ PRAGMA defer_foreign_keys=OFF;
182
+
183
+ -- CreateIndex
184
+ CREATE UNIQUE INDEX "user_email_key" ON "user"("email");
185
+
186
+ -- CreateIndex
187
+ CREATE INDEX "user_roleId_idx" ON "user"("roleId");
188
+
189
+ -- CreateIndex
190
+ CREATE UNIQUE INDEX "role_name_key" ON "role"("name");
191
+
192
+ -- CreateIndex
193
+ CREATE INDEX "rolePermission_roleId_idx" ON "rolePermission"("roleId");
194
+
195
+ -- CreateIndex
196
+ CREATE UNIQUE INDEX "rolePermission_roleId_entity_action_key" ON "rolePermission"("roleId", "entity", "action");
197
+
198
+ -- CreateIndex
199
+ CREATE UNIQUE INDEX "session_token_key" ON "session"("token");
200
+
201
+ -- CreateIndex
202
+ CREATE INDEX "session_userId_idx" ON "session"("userId");
203
+
204
+ -- CreateIndex
205
+ CREATE INDEX "session_token_idx" ON "session"("token");
206
+
207
+ -- CreateIndex
208
+ CREATE INDEX "account_userId_idx" ON "account"("userId");
209
+
210
+ -- CreateIndex
211
+ CREATE INDEX "verification_identifier_idx" ON "verification"("identifier");
@@ -7,6 +7,95 @@ datasource db {
7
7
  provider = "sqlite"
8
8
  }
9
9
 
10
+ // ── Auth & RBAC ──
11
+
12
+ model user {
13
+ id String @id
14
+ name String
15
+ email String @unique
16
+ emailVerified Boolean @default(false)
17
+ image String?
18
+ roleId String
19
+ role role @relation(fields: [roleId], references: [id])
20
+ createdAt DateTime @default(now())
21
+ updatedAt DateTime @updatedAt
22
+ sessions session[]
23
+ accounts account[]
24
+
25
+ @@index([roleId])
26
+ }
27
+
28
+ model role {
29
+ id String @id @default(cuid())
30
+ name String @unique
31
+ description String?
32
+ isSystem Boolean @default(false)
33
+ createdAt DateTime @default(now())
34
+ updatedAt DateTime @updatedAt
35
+ users user[]
36
+ permissions rolePermission[]
37
+ }
38
+
39
+ model rolePermission {
40
+ id String @id @default(cuid())
41
+ roleId String
42
+ role role @relation(fields: [roleId], references: [id], onDelete: Cascade)
43
+ entity String // "workflow" | "credential" | "agent" | "team" | "user" | "settings" | "analytics" | "memory" | "command" | "mcp"
44
+ action String // "read" | "create" | "update" | "delete" | "execute"
45
+ scope String @default("all") // "all" | "own"
46
+ createdAt DateTime @default(now())
47
+
48
+ @@unique([roleId, entity, action])
49
+ @@index([roleId])
50
+ }
51
+
52
+ model session {
53
+ id String @id
54
+ expiresAt DateTime
55
+ token String @unique
56
+ ipAddress String?
57
+ userAgent String?
58
+ userId String
59
+ user user @relation(fields: [userId], references: [id], onDelete: Cascade)
60
+ createdAt DateTime @default(now())
61
+ updatedAt DateTime @updatedAt
62
+
63
+ @@index([userId])
64
+ @@index([token])
65
+ }
66
+
67
+ model account {
68
+ id String @id
69
+ accountId String
70
+ providerId String
71
+ userId String
72
+ user user @relation(fields: [userId], references: [id], onDelete: Cascade)
73
+ accessToken String?
74
+ refreshToken String?
75
+ idToken String?
76
+ accessTokenExpiresAt DateTime?
77
+ refreshTokenExpiresAt DateTime?
78
+ scope String?
79
+ password String?
80
+ createdAt DateTime @default(now())
81
+ updatedAt DateTime @updatedAt
82
+
83
+ @@index([userId])
84
+ }
85
+
86
+ model verification {
87
+ id String @id
88
+ identifier String
89
+ value String
90
+ expiresAt DateTime
91
+ createdAt DateTime @default(now())
92
+ updatedAt DateTime @updatedAt
93
+
94
+ @@index([identifier])
95
+ }
96
+
97
+ // ── Business Models ──
98
+
10
99
  model Credential {
11
100
  id String @id @default(cuid())
12
101
  name String
@@ -16,10 +105,13 @@ model Credential {
16
105
  // api-key: data = { key, value, addTo } (addTo = "header" | "query")
17
106
  // custom-header: data = { headers: [{ key, value }] }
18
107
  data String // JSON-encrypted credential data
108
+ userId String @default("")
19
109
  createdAt DateTime @default(now())
20
110
  updatedAt DateTime @updatedAt
21
111
 
22
112
  actions Action[]
113
+
114
+ @@index([userId])
23
115
  }
24
116
 
25
117
  model Workflow {
@@ -32,12 +124,15 @@ model Workflow {
32
124
  cronExpression String?
33
125
  enabled Boolean @default(true)
34
126
  summaryEnabled Boolean @default(false)
127
+ userId String @default("")
35
128
  createdAt DateTime @default(now())
36
129
  updatedAt DateTime @updatedAt
37
130
 
38
131
  triggers Trigger[]
39
132
  actions Action[]
40
133
  runs WorkflowRun[]
134
+
135
+ @@index([userId])
41
136
  }
42
137
 
43
138
  model Trigger {
@@ -100,6 +195,7 @@ model WorkflowRun {
100
195
  workflow Workflow @relation(fields: [workflowId], references: [id], onDelete: Cascade)
101
196
  status String @default("pending")
102
197
  payload String? // JSON-serialized trigger payload
198
+ userId String @default("")
103
199
  startedAt DateTime @default(now())
104
200
  completedAt DateTime?
105
201
  error String?
@@ -108,6 +204,7 @@ model WorkflowRun {
108
204
 
109
205
  @@index([workflowId])
110
206
  @@index([status])
207
+ @@index([userId])
111
208
  }
112
209
 
113
210
  model AgentRun {
@@ -162,6 +259,7 @@ model TeamSession {
162
259
  maxRounds Int
163
260
  totalRounds Int
164
261
  error String?
262
+ userId String @default("")
165
263
 
166
264
  // Aggregated token usage
167
265
  inputTokens Int @default(0)
@@ -178,6 +276,7 @@ model TeamSession {
178
276
  @@index([status])
179
277
  @@index([startedAt])
180
278
  @@index([completedAt])
279
+ @@index([userId])
181
280
  }
182
281
 
183
282
  // ── Agent Session Persistence (single-agent runs) ──
@@ -192,6 +291,7 @@ model AgentChatSession {
192
291
  model String? // LLM model used
193
292
  cli String? // CLI runtime used (cursor, claude, codex, etc.)
194
293
  error String?
294
+ userId String @default("")
195
295
 
196
296
  // Token usage
197
297
  inputTokens Int @default(0)
@@ -209,6 +309,7 @@ model AgentChatSession {
209
309
  @@index([agentId])
210
310
  @@index([status])
211
311
  @@index([startedAt])
312
+ @@index([userId])
212
313
  }
213
314
 
214
315
  model TeamSessionAgent {