@jagit/shared 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.
- package/dist/approval-bridge.d.ts +12 -0
- package/dist/approval-bridge.js +35 -0
- package/dist/branch.d.ts +10 -0
- package/dist/branch.js +20 -0
- package/dist/branch.test.d.ts +1 -0
- package/dist/branch.test.js +32 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.js +36 -0
- package/dist/config.test.d.ts +1 -0
- package/dist/config.test.js +31 -0
- package/dist/credentials.d.ts +82 -0
- package/dist/credentials.js +94 -0
- package/dist/credentials.test.d.ts +1 -0
- package/dist/credentials.test.js +206 -0
- package/dist/crypto.d.ts +12 -0
- package/dist/crypto.js +29 -0
- package/dist/crypto.test.d.ts +1 -0
- package/dist/crypto.test.js +20 -0
- package/dist/events.d.ts +13 -0
- package/dist/events.js +24 -0
- package/dist/git-worktree.d.ts +2 -0
- package/dist/git-worktree.js +14 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +14 -0
- package/dist/mcp-config.d.ts +77 -0
- package/dist/mcp-config.js +71 -0
- package/dist/mcp-servers.d.ts +54 -0
- package/dist/mcp-servers.js +73 -0
- package/dist/prisma.d.ts +3 -0
- package/dist/prisma.js +20 -0
- package/dist/prisma.test.d.ts +1 -0
- package/dist/prisma.test.js +16 -0
- package/dist/queue.d.ts +10 -0
- package/dist/queue.js +7 -0
- package/dist/retry.d.ts +5 -0
- package/dist/retry.js +16 -0
- package/dist/retry.test.d.ts +1 -0
- package/dist/retry.test.js +24 -0
- package/dist/seed.d.ts +99 -0
- package/dist/seed.js +123 -0
- package/dist/seed.test.d.ts +1 -0
- package/dist/seed.test.js +126 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.js +5 -0
- package/package.json +29 -0
- package/prisma/migrations/20260615000000_init/migration.sql +157 -0
- package/prisma/migrations/20260615000001_add_updated_at_agent_template/migration.sql +2 -0
- package/prisma/migrations/20260616000000_mcp_review/migration.sql +23 -0
- package/prisma/migrations/20260616100000_mcp_http_transport/migration.sql +5 -0
- package/prisma/migrations/20260616120000_review_default_false/migration.sql +1 -0
- package/prisma/migrations/20260620040203_add_usage_models/migration.sql +28 -0
- package/prisma/migrations/20260620120000_add_agent_session/migration.sql +35 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +257 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
datasource db {
|
|
6
|
+
provider = "postgresql"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// ─── Enums ───────────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
enum JobStatus {
|
|
12
|
+
queued
|
|
13
|
+
cloning
|
|
14
|
+
running
|
|
15
|
+
awaiting_approval
|
|
16
|
+
pushing
|
|
17
|
+
opening_mr
|
|
18
|
+
reporting
|
|
19
|
+
done
|
|
20
|
+
paused
|
|
21
|
+
stopped
|
|
22
|
+
failed
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
enum CredentialKind {
|
|
26
|
+
jira
|
|
27
|
+
gitlab
|
|
28
|
+
telegram
|
|
29
|
+
anthropic
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
enum ApprovalStatus {
|
|
33
|
+
pending
|
|
34
|
+
approved
|
|
35
|
+
rejected
|
|
36
|
+
expired
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ─── AgentTemplate ───────────────────────────────────────────────────────────
|
|
40
|
+
// Seeded; CRUD deferred to Phase 2+.
|
|
41
|
+
// Controls which model and tools are used for a coding run.
|
|
42
|
+
|
|
43
|
+
model AgentTemplate {
|
|
44
|
+
id String @id @default(cuid())
|
|
45
|
+
name String @unique
|
|
46
|
+
model String // e.g. "claude-opus-4-5"
|
|
47
|
+
systemPrompt String
|
|
48
|
+
maxConcurrent Int @default(1)
|
|
49
|
+
allowedTools Json @default("[]") // string[] of ACP tool names
|
|
50
|
+
skills Json @default("[]") // string[] of skill names (MVP: name-only)
|
|
51
|
+
mcpServerIds Json @default("[]") // string[] of McpServerConfig ids
|
|
52
|
+
requireReviewBeforeCommit Boolean @default(false)
|
|
53
|
+
createdAt DateTime @default(now())
|
|
54
|
+
updatedAt DateTime @updatedAt
|
|
55
|
+
|
|
56
|
+
jobs Job[]
|
|
57
|
+
repoMappings RepoMapping[]
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ─── McpServerConfig ───────────────────────────────────────────────────────────
|
|
61
|
+
// MCP servers injected into ACP session/new via AgentTemplate.mcpServerIds.
|
|
62
|
+
// transport: "stdio" (command/args/env) or "http" (url/headers).
|
|
63
|
+
// env/headers values are literals or credential refs (resolved at session spawn).
|
|
64
|
+
|
|
65
|
+
model McpServerConfig {
|
|
66
|
+
id String @id @default(cuid())
|
|
67
|
+
name String @unique
|
|
68
|
+
transport String @default("stdio") // "stdio" | "http"
|
|
69
|
+
command String @default("")
|
|
70
|
+
args Json @default("[]") // string[] — stdio only
|
|
71
|
+
env Json @default("{}") // stdio process env
|
|
72
|
+
url String? // http only
|
|
73
|
+
headers Json @default("{}") // http request headers
|
|
74
|
+
enabled Boolean @default(true)
|
|
75
|
+
createdAt DateTime @default(now())
|
|
76
|
+
updatedAt DateTime @updatedAt
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ─── Credential ──────────────────────────────────────────────────────────────
|
|
80
|
+
// One row per integration account. `secrets` stores an encrypted JSON blob
|
|
81
|
+
// (never logged or returned in API responses). `meta` stores non-secret config
|
|
82
|
+
// like base URLs, project IDs, Telegram chat IDs.
|
|
83
|
+
|
|
84
|
+
model Credential {
|
|
85
|
+
id String @id @default(cuid())
|
|
86
|
+
kind CredentialKind
|
|
87
|
+
name String
|
|
88
|
+
secrets Json // encrypted at rest with APP_ENCRYPTION_KEY
|
|
89
|
+
meta Json @default("{}")
|
|
90
|
+
createdAt DateTime @default(now())
|
|
91
|
+
updatedAt DateTime @updatedAt
|
|
92
|
+
|
|
93
|
+
@@unique([kind, name])
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ─── RepoMapping ─────────────────────────────────────────────────────────────
|
|
97
|
+
// Maps a Jira project to a GitLab project + agent template + branch rules.
|
|
98
|
+
// branchPrefixRules example: { "Bug": "bugfix/", "Story": "feature/", "default": "feature/" }
|
|
99
|
+
|
|
100
|
+
model RepoMapping {
|
|
101
|
+
id String @id @default(cuid())
|
|
102
|
+
jiraProjectKey String @unique
|
|
103
|
+
gitlabProjectId String
|
|
104
|
+
defaultBaseBranch String @default("main")
|
|
105
|
+
branchPrefixRules Json @default("{}")
|
|
106
|
+
agentTemplateId String
|
|
107
|
+
agentTemplate AgentTemplate @relation(fields: [agentTemplateId], references: [id])
|
|
108
|
+
createdAt DateTime @default(now())
|
|
109
|
+
updatedAt DateTime @updatedAt
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ─── Job ─────────────────────────────────────────────────────────────────────
|
|
113
|
+
// One row per triggered coding run.
|
|
114
|
+
// checkpointThreadId: used by the LangGraph Postgres checkpointer (= dedupeKey).
|
|
115
|
+
// dedupeKey: SHA-1 of (source:issueKey:eventId) — prevents duplicate jobs.
|
|
116
|
+
|
|
117
|
+
model Job {
|
|
118
|
+
id String @id @default(cuid())
|
|
119
|
+
source String // "jira" | "gitlab"
|
|
120
|
+
jiraIssueKey String?
|
|
121
|
+
gitlabProjectId String?
|
|
122
|
+
branch String?
|
|
123
|
+
mrUrl String?
|
|
124
|
+
status JobStatus @default(queued)
|
|
125
|
+
agentTemplateId String?
|
|
126
|
+
agentTemplate AgentTemplate? @relation(fields: [agentTemplateId], references: [id])
|
|
127
|
+
checkpointThreadId String @unique
|
|
128
|
+
dedupeKey String @unique
|
|
129
|
+
tokensUsed Int @default(0)
|
|
130
|
+
costUsd Float @default(0)
|
|
131
|
+
error String?
|
|
132
|
+
workdir String? // ephemeral clone path (cleaned on terminal state)
|
|
133
|
+
reviewApprovedAt DateTime? // set when human_review approved before commit
|
|
134
|
+
createdAt DateTime @default(now())
|
|
135
|
+
updatedAt DateTime @updatedAt
|
|
136
|
+
|
|
137
|
+
steps JobStep[]
|
|
138
|
+
events JobEvent[]
|
|
139
|
+
approvals Approval[]
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// ─── JobStep ─────────────────────────────────────────────────────────────────
|
|
143
|
+
// One row per LangGraph node execution.
|
|
144
|
+
// name: node name (e.g. "resolveContext", "cloneRepo", "runAgent")
|
|
145
|
+
// status: "pending" | "running" | "done" | "failed"
|
|
146
|
+
|
|
147
|
+
model JobStep {
|
|
148
|
+
id String @id @default(cuid())
|
|
149
|
+
jobId String
|
|
150
|
+
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade)
|
|
151
|
+
name String
|
|
152
|
+
status String @default("pending")
|
|
153
|
+
detail Json @default("{}")
|
|
154
|
+
startedAt DateTime?
|
|
155
|
+
finishedAt DateTime?
|
|
156
|
+
createdAt DateTime @default(now())
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ─── JobEvent ────────────────────────────────────────────────────────────────
|
|
160
|
+
// Append-only timeline; streamed to the dashboard over SSE.
|
|
161
|
+
// type examples: "step_started", "step_done", "agent_message", "tool_use",
|
|
162
|
+
// "approval_requested", "approval_resolved", "error"
|
|
163
|
+
|
|
164
|
+
model JobEvent {
|
|
165
|
+
id String @id @default(cuid())
|
|
166
|
+
jobId String
|
|
167
|
+
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade)
|
|
168
|
+
ts DateTime @default(now())
|
|
169
|
+
level String @default("info") // "info" | "warn" | "error"
|
|
170
|
+
type String
|
|
171
|
+
message String
|
|
172
|
+
payload Json @default("{}")
|
|
173
|
+
|
|
174
|
+
@@index([jobId, ts])
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ─── Approval ────────────────────────────────────────────────────────────────
|
|
178
|
+
// Created when Claude Code emits a session/request_permission event.
|
|
179
|
+
// Single-resolution: whichever channel (Telegram or dashboard) responds first
|
|
180
|
+
// wins; subsequent resolutions are no-ops.
|
|
181
|
+
// telegramMessageRef: message_id from the sent Telegram message (for editing it
|
|
182
|
+
// after resolution to show the chosen option).
|
|
183
|
+
|
|
184
|
+
model Approval {
|
|
185
|
+
id String @id @default(cuid())
|
|
186
|
+
jobId String
|
|
187
|
+
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade)
|
|
188
|
+
stepId String? // FK to the JobStep that triggered this approval
|
|
189
|
+
kind String // e.g. "tool_permission"
|
|
190
|
+
prompt String
|
|
191
|
+
options Json @default("[]") // { optionId: string; name: string }[]
|
|
192
|
+
status ApprovalStatus @default(pending)
|
|
193
|
+
decidedBy String? // user identifier or "system" (timeout)
|
|
194
|
+
decidedVia String? // "telegram" | "dashboard" | "system"
|
|
195
|
+
chosenOptionId String?
|
|
196
|
+
telegramMessageRef String? // stringified Telegram message_id
|
|
197
|
+
createdAt DateTime @default(now())
|
|
198
|
+
decidedAt DateTime?
|
|
199
|
+
|
|
200
|
+
@@index([jobId, status])
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// ─── User ────────────────────────────────────────────────────────────────────
|
|
204
|
+
// Represents a user for usage tracking (CodeBurn consolidation).
|
|
205
|
+
|
|
206
|
+
model User {
|
|
207
|
+
id String @id @default(cuid())
|
|
208
|
+
username String @unique
|
|
209
|
+
createdAt DateTime @default(now())
|
|
210
|
+
uploads UsageUpload[]
|
|
211
|
+
agentSessions AgentSession[]
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// ─── UsageUpload ─────────────────────────────────────────────────────────────
|
|
215
|
+
// Stores parsed usage data (e.g., from CSV uploads) per user and period.
|
|
216
|
+
|
|
217
|
+
model UsageUpload {
|
|
218
|
+
id String @id @default(cuid())
|
|
219
|
+
userId String
|
|
220
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
221
|
+
uploadedAt DateTime @default(now())
|
|
222
|
+
period String // "today", "7days", "30days"
|
|
223
|
+
data Json // structured JSON containing all parsed CSV data
|
|
224
|
+
|
|
225
|
+
@@index([userId, uploadedAt])
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// ─── AgentSession ────────────────────────────────────────────────────────────
|
|
229
|
+
// Live per-session usage snapshots pushed by per-tool hook adapters.
|
|
230
|
+
|
|
231
|
+
enum AgentTool {
|
|
232
|
+
claude_code
|
|
233
|
+
codex
|
|
234
|
+
copilot
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
model AgentSession {
|
|
238
|
+
id String @id @default(cuid())
|
|
239
|
+
tool AgentTool
|
|
240
|
+
sessionId String
|
|
241
|
+
userId String
|
|
242
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
243
|
+
model String
|
|
244
|
+
inputTokens Int @default(0)
|
|
245
|
+
cachedInputTokens Int @default(0)
|
|
246
|
+
outputTokens Int @default(0)
|
|
247
|
+
costUsd Float?
|
|
248
|
+
toolCallCount Int?
|
|
249
|
+
startedAt DateTime
|
|
250
|
+
lastUpdatedAt DateTime @updatedAt
|
|
251
|
+
rawPayload Json @default("{}")
|
|
252
|
+
createdAt DateTime @default(now())
|
|
253
|
+
|
|
254
|
+
@@unique([tool, sessionId])
|
|
255
|
+
@@index([userId, lastUpdatedAt])
|
|
256
|
+
@@index([tool, lastUpdatedAt])
|
|
257
|
+
}
|