@boringos/db 0.1.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.
- package/LICENSE +21 -0
- package/dist/connection.d.ts +10 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +40 -0
- package/dist/connection.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/migrate.d.ts +4 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +507 -0
- package/dist/migrate.js.map +1 -0
- package/dist/schema/activity.d.ts +163 -0
- package/dist/schema/activity.d.ts.map +1 -0
- package/dist/schema/activity.js +14 -0
- package/dist/schema/activity.js.map +1 -0
- package/dist/schema/agents.d.ts +531 -0
- package/dist/schema/agents.d.ts.map +1 -0
- package/dist/schema/agents.js +40 -0
- package/dist/schema/agents.js.map +1 -0
- package/dist/schema/approvals.d.ts +289 -0
- package/dist/schema/approvals.d.ts.map +1 -0
- package/dist/schema/approvals.js +25 -0
- package/dist/schema/approvals.js.map +1 -0
- package/dist/schema/budgets.d.ts +338 -0
- package/dist/schema/budgets.d.ts.map +1 -0
- package/dist/schema/budgets.js +27 -0
- package/dist/schema/budgets.js.map +1 -0
- package/dist/schema/connectors.d.ts +165 -0
- package/dist/schema/connectors.d.ts.map +1 -0
- package/dist/schema/connectors.js +14 -0
- package/dist/schema/connectors.js.map +1 -0
- package/dist/schema/device-auth.d.ts +161 -0
- package/dist/schema/device-auth.d.ts.map +1 -0
- package/dist/schema/device-auth.js +13 -0
- package/dist/schema/device-auth.js.map +1 -0
- package/dist/schema/drive.d.ts +270 -0
- package/dist/schema/drive.d.ts.map +1 -0
- package/dist/schema/drive.js +22 -0
- package/dist/schema/drive.js.map +1 -0
- package/dist/schema/entity-refs.d.ts +127 -0
- package/dist/schema/entity-refs.d.ts.map +1 -0
- package/dist/schema/entity-refs.js +15 -0
- package/dist/schema/entity-refs.js.map +1 -0
- package/dist/schema/evals.d.ts +343 -0
- package/dist/schema/evals.d.ts.map +1 -0
- package/dist/schema/evals.js +26 -0
- package/dist/schema/evals.js.map +1 -0
- package/dist/schema/inbox.d.ts +231 -0
- package/dist/schema/inbox.d.ts.map +1 -0
- package/dist/schema/inbox.js +18 -0
- package/dist/schema/inbox.js.map +1 -0
- package/dist/schema/index.d.ts +22 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +22 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/onboarding.d.ts +165 -0
- package/dist/schema/onboarding.d.ts.map +1 -0
- package/dist/schema/onboarding.js +14 -0
- package/dist/schema/onboarding.js.map +1 -0
- package/dist/schema/plugins.d.ts +400 -0
- package/dist/schema/plugins.d.ts.map +1 -0
- package/dist/schema/plugins.js +31 -0
- package/dist/schema/plugins.js.map +1 -0
- package/dist/schema/projects.d.ts +357 -0
- package/dist/schema/projects.d.ts.map +1 -0
- package/dist/schema/projects.js +27 -0
- package/dist/schema/projects.js.map +1 -0
- package/dist/schema/routines.d.ts +212 -0
- package/dist/schema/routines.d.ts.map +1 -0
- package/dist/schema/routines.js +18 -0
- package/dist/schema/routines.js.map +1 -0
- package/dist/schema/runs.d.ts +657 -0
- package/dist/schema/runs.d.ts.map +1 -0
- package/dist/schema/runs.js +49 -0
- package/dist/schema/runs.js.map +1 -0
- package/dist/schema/runtimes.d.ts +216 -0
- package/dist/schema/runtimes.d.ts.map +1 -0
- package/dist/schema/runtimes.js +19 -0
- package/dist/schema/runtimes.js.map +1 -0
- package/dist/schema/skills.d.ts +342 -0
- package/dist/schema/skills.d.ts.map +1 -0
- package/dist/schema/skills.js +27 -0
- package/dist/schema/skills.js.map +1 -0
- package/dist/schema/task-features.d.ts +386 -0
- package/dist/schema/task-features.d.ts.map +1 -0
- package/dist/schema/task-features.js +33 -0
- package/dist/schema/task-features.js.map +1 -0
- package/dist/schema/tasks.d.ts +689 -0
- package/dist/schema/tasks.d.ts.map +1 -0
- package/dist/schema/tasks.js +52 -0
- package/dist/schema/tasks.js.map +1 -0
- package/dist/schema/tenants.d.ts +202 -0
- package/dist/schema/tenants.d.ts.map +1 -0
- package/dist/schema/tenants.js +17 -0
- package/dist/schema/tenants.js.map +1 -0
- package/dist/schema/workflows.d.ts +182 -0
- package/dist/schema/workflows.d.ts.map +1 -0
- package/dist/schema/workflows.js +16 -0
- package/dist/schema/workflows.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +38 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 BoringOS Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { drizzle } from "drizzle-orm/postgres-js";
|
|
2
|
+
import * as schema from "./schema/index.js";
|
|
3
|
+
import type { DatabaseConfig } from "./types.js";
|
|
4
|
+
export type Db = ReturnType<typeof drizzle<typeof schema>>;
|
|
5
|
+
export interface DatabaseConnection {
|
|
6
|
+
db: Db;
|
|
7
|
+
close(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare function createDatabase(config: DatabaseConfig): Promise<DatabaseConnection>;
|
|
10
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,EAAE,CAAC;IACP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwCxF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { drizzle } from "drizzle-orm/postgres-js";
|
|
2
|
+
import postgres from "postgres";
|
|
3
|
+
import * as schema from "./schema/index.js";
|
|
4
|
+
export async function createDatabase(config) {
|
|
5
|
+
if ("url" in config) {
|
|
6
|
+
const client = postgres(config.url);
|
|
7
|
+
const db = drizzle(client, { schema });
|
|
8
|
+
return {
|
|
9
|
+
db,
|
|
10
|
+
async close() {
|
|
11
|
+
await client.end();
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
// Embedded Postgres
|
|
16
|
+
const EmbeddedPostgres = (await import("embedded-postgres")).default;
|
|
17
|
+
const dataDir = config.dataDir ?? "./.data/postgres";
|
|
18
|
+
const port = config.port ?? 5433;
|
|
19
|
+
const pg = new EmbeddedPostgres({
|
|
20
|
+
databaseDir: dataDir,
|
|
21
|
+
user: "boringos",
|
|
22
|
+
password: "boringos",
|
|
23
|
+
port,
|
|
24
|
+
persistent: true,
|
|
25
|
+
});
|
|
26
|
+
await pg.initialise();
|
|
27
|
+
await pg.start();
|
|
28
|
+
await pg.createDatabase("boringos");
|
|
29
|
+
const url = `postgres://boringos:boringos@127.0.0.1:${port}/boringos`;
|
|
30
|
+
const client = postgres(url);
|
|
31
|
+
const db = drizzle(client, { schema });
|
|
32
|
+
return {
|
|
33
|
+
db,
|
|
34
|
+
async close() {
|
|
35
|
+
await client.end();
|
|
36
|
+
await pg.stop();
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB;IACzD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,OAAO;YACL,EAAE;YACF,KAAK,CAAC,KAAK;gBACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,MAAM,gBAAgB,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IAEjC,MAAM,EAAE,GAAG,IAAI,gBAAgB,CAAC;QAC9B,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,UAAU;QACpB,IAAI;QACJ,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACjB,MAAM,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,0CAA0C,IAAI,WAAW,CAAC;IACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvC,OAAO;QACL,EAAE;QACF,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { DatabaseConfig, MigrationManager, MigrationInfo, MigrationResult, FrameworkTable, } from "./types.js";
|
|
2
|
+
export { FRAMEWORK_TABLES } from "./types.js";
|
|
3
|
+
export { createDatabase } from "./connection.js";
|
|
4
|
+
export type { Db, DatabaseConnection } from "./connection.js";
|
|
5
|
+
export { createMigrationManager } from "./migrate.js";
|
|
6
|
+
export * from "./schema/index.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAkC,MAAM,YAAY,CAAC;AAGnF,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAe/D"}
|
package/dist/migrate.js
ADDED
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { sql } from "drizzle-orm";
|
|
2
|
+
import { FRAMEWORK_TABLES } from "./types.js";
|
|
3
|
+
export function createMigrationManager(db) {
|
|
4
|
+
return {
|
|
5
|
+
async pending() {
|
|
6
|
+
return FRAMEWORK_TABLES.map((name) => ({ name, appliedAt: null }));
|
|
7
|
+
},
|
|
8
|
+
async apply() {
|
|
9
|
+
await ensureSchema(db);
|
|
10
|
+
return { applied: [...FRAMEWORK_TABLES], skipped: [] };
|
|
11
|
+
},
|
|
12
|
+
async status() {
|
|
13
|
+
return FRAMEWORK_TABLES.map((name) => ({ name, appliedAt: new Date() }));
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async function ensureSchema(db) {
|
|
18
|
+
// Create all framework tables using raw SQL DDL.
|
|
19
|
+
// This is the bootstrap path — creates tables if they don't exist.
|
|
20
|
+
await db.execute(sql `
|
|
21
|
+
CREATE TABLE IF NOT EXISTS tenants (
|
|
22
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
23
|
+
name TEXT NOT NULL,
|
|
24
|
+
slug TEXT NOT NULL UNIQUE,
|
|
25
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
26
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS tenant_settings (
|
|
30
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
31
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
32
|
+
key TEXT NOT NULL,
|
|
33
|
+
value TEXT,
|
|
34
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
35
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CREATE TABLE IF NOT EXISTS runtimes (
|
|
39
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
40
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
41
|
+
name TEXT NOT NULL,
|
|
42
|
+
type TEXT NOT NULL,
|
|
43
|
+
config JSONB NOT NULL DEFAULT '{}',
|
|
44
|
+
model TEXT,
|
|
45
|
+
status TEXT NOT NULL DEFAULT 'unchecked',
|
|
46
|
+
health_result JSONB,
|
|
47
|
+
last_checked_at TIMESTAMPTZ,
|
|
48
|
+
is_default BOOLEAN NOT NULL DEFAULT false,
|
|
49
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
50
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
51
|
+
UNIQUE(tenant_id, name)
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
55
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
56
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
57
|
+
name TEXT NOT NULL,
|
|
58
|
+
role TEXT NOT NULL DEFAULT 'general',
|
|
59
|
+
type TEXT NOT NULL DEFAULT 'user',
|
|
60
|
+
title TEXT,
|
|
61
|
+
icon TEXT,
|
|
62
|
+
status TEXT NOT NULL DEFAULT 'idle',
|
|
63
|
+
reports_to UUID REFERENCES agents(id),
|
|
64
|
+
instructions TEXT,
|
|
65
|
+
runtime_id UUID REFERENCES runtimes(id) ON DELETE SET NULL,
|
|
66
|
+
fallback_runtime_id UUID REFERENCES runtimes(id) ON DELETE SET NULL,
|
|
67
|
+
budget_monthly_cents INTEGER NOT NULL DEFAULT 0,
|
|
68
|
+
spent_monthly_cents INTEGER NOT NULL DEFAULT 0,
|
|
69
|
+
pause_reason TEXT,
|
|
70
|
+
paused_at TIMESTAMPTZ,
|
|
71
|
+
permissions JSONB NOT NULL DEFAULT '{}',
|
|
72
|
+
last_heartbeat_at TIMESTAMPTZ,
|
|
73
|
+
metadata JSONB,
|
|
74
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
75
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CREATE TABLE IF NOT EXISTS agent_runtime_state (
|
|
79
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
80
|
+
agent_id UUID NOT NULL UNIQUE REFERENCES agents(id),
|
|
81
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
82
|
+
session_id TEXT,
|
|
83
|
+
state_json JSONB,
|
|
84
|
+
cumulative_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
85
|
+
cumulative_output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
86
|
+
cumulative_cost_usd TEXT NOT NULL DEFAULT '0',
|
|
87
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
91
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
92
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
93
|
+
parent_id UUID REFERENCES tasks(id),
|
|
94
|
+
title TEXT NOT NULL,
|
|
95
|
+
description TEXT,
|
|
96
|
+
status TEXT NOT NULL DEFAULT 'todo',
|
|
97
|
+
priority TEXT NOT NULL DEFAULT 'medium',
|
|
98
|
+
assignee_agent_id UUID REFERENCES agents(id) ON DELETE SET NULL,
|
|
99
|
+
assignee_user_id UUID,
|
|
100
|
+
created_by_agent_id UUID REFERENCES agents(id) ON DELETE SET NULL,
|
|
101
|
+
created_by_user_id UUID,
|
|
102
|
+
issue_number INTEGER,
|
|
103
|
+
identifier TEXT,
|
|
104
|
+
origin_kind TEXT NOT NULL DEFAULT 'manual',
|
|
105
|
+
origin_id TEXT,
|
|
106
|
+
request_depth INTEGER NOT NULL DEFAULT 0,
|
|
107
|
+
started_at TIMESTAMPTZ,
|
|
108
|
+
completed_at TIMESTAMPTZ,
|
|
109
|
+
cancelled_at TIMESTAMPTZ,
|
|
110
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
111
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
CREATE TABLE IF NOT EXISTS task_comments (
|
|
115
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
116
|
+
task_id UUID NOT NULL REFERENCES tasks(id),
|
|
117
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
118
|
+
body TEXT NOT NULL,
|
|
119
|
+
author_agent_id UUID REFERENCES agents(id) ON DELETE SET NULL,
|
|
120
|
+
author_user_id UUID,
|
|
121
|
+
mentions JSONB DEFAULT '[]',
|
|
122
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
123
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
CREATE TABLE IF NOT EXISTS task_work_products (
|
|
127
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
128
|
+
task_id UUID NOT NULL REFERENCES tasks(id),
|
|
129
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
130
|
+
kind TEXT NOT NULL,
|
|
131
|
+
title TEXT NOT NULL,
|
|
132
|
+
url TEXT,
|
|
133
|
+
metadata JSONB,
|
|
134
|
+
created_by_agent_id UUID REFERENCES agents(id) ON DELETE SET NULL,
|
|
135
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
CREATE TABLE IF NOT EXISTS agent_wakeup_requests (
|
|
139
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
140
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
141
|
+
agent_id UUID NOT NULL REFERENCES agents(id),
|
|
142
|
+
task_id UUID,
|
|
143
|
+
reason TEXT NOT NULL,
|
|
144
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
145
|
+
payload JSONB,
|
|
146
|
+
coalesced_count INTEGER NOT NULL DEFAULT 0,
|
|
147
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
148
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
CREATE TABLE IF NOT EXISTS agent_runs (
|
|
152
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
153
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
154
|
+
agent_id UUID NOT NULL REFERENCES agents(id),
|
|
155
|
+
wakeup_request_id UUID REFERENCES agent_wakeup_requests(id),
|
|
156
|
+
status TEXT NOT NULL DEFAULT 'queued',
|
|
157
|
+
exit_code INTEGER,
|
|
158
|
+
error TEXT,
|
|
159
|
+
error_code TEXT,
|
|
160
|
+
stdout_excerpt TEXT,
|
|
161
|
+
stderr_excerpt TEXT,
|
|
162
|
+
usage_json JSONB,
|
|
163
|
+
context_snapshot JSONB,
|
|
164
|
+
session_id_before TEXT,
|
|
165
|
+
session_id_after TEXT,
|
|
166
|
+
started_at TIMESTAMPTZ,
|
|
167
|
+
finished_at TIMESTAMPTZ,
|
|
168
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
169
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
CREATE TABLE IF NOT EXISTS cost_events (
|
|
173
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
174
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
175
|
+
agent_id UUID NOT NULL REFERENCES agents(id),
|
|
176
|
+
run_id UUID REFERENCES agent_runs(id),
|
|
177
|
+
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
178
|
+
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
179
|
+
model TEXT,
|
|
180
|
+
cost_usd TEXT,
|
|
181
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
CREATE TABLE IF NOT EXISTS approvals (
|
|
185
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
186
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
187
|
+
type TEXT NOT NULL,
|
|
188
|
+
requested_by_agent_id UUID REFERENCES agents(id) ON DELETE SET NULL,
|
|
189
|
+
requested_by_user_id UUID,
|
|
190
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
191
|
+
payload JSONB NOT NULL DEFAULT '{}',
|
|
192
|
+
decision_note TEXT,
|
|
193
|
+
decided_by_user_id UUID,
|
|
194
|
+
decided_at TIMESTAMPTZ,
|
|
195
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
196
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
CREATE TABLE IF NOT EXISTS task_approvals (
|
|
200
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
201
|
+
task_id UUID NOT NULL REFERENCES tasks(id),
|
|
202
|
+
approval_id UUID NOT NULL REFERENCES approvals(id),
|
|
203
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
CREATE TABLE IF NOT EXISTS connectors (
|
|
207
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
208
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
209
|
+
kind TEXT NOT NULL,
|
|
210
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
211
|
+
config JSONB NOT NULL DEFAULT '{}',
|
|
212
|
+
credentials JSONB,
|
|
213
|
+
last_sync_at TIMESTAMPTZ,
|
|
214
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
215
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
CREATE TABLE IF NOT EXISTS company_skills (
|
|
219
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
220
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
221
|
+
key TEXT NOT NULL,
|
|
222
|
+
name TEXT NOT NULL,
|
|
223
|
+
description TEXT,
|
|
224
|
+
source_type TEXT NOT NULL,
|
|
225
|
+
source_config JSONB NOT NULL DEFAULT '{}',
|
|
226
|
+
trust_level TEXT NOT NULL DEFAULT 'markdown_only',
|
|
227
|
+
sync_status TEXT NOT NULL DEFAULT 'pending',
|
|
228
|
+
last_sync_at TIMESTAMPTZ,
|
|
229
|
+
file_inventory JSONB,
|
|
230
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
231
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
CREATE TABLE IF NOT EXISTS agent_skills (
|
|
235
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
236
|
+
agent_id UUID NOT NULL REFERENCES agents(id),
|
|
237
|
+
skill_id UUID NOT NULL REFERENCES company_skills(id),
|
|
238
|
+
state TEXT NOT NULL DEFAULT 'active',
|
|
239
|
+
sync_mode TEXT NOT NULL DEFAULT 'auto',
|
|
240
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
CREATE TABLE IF NOT EXISTS drive_files (
|
|
244
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
245
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
246
|
+
path TEXT NOT NULL,
|
|
247
|
+
filename TEXT NOT NULL,
|
|
248
|
+
format TEXT,
|
|
249
|
+
size INTEGER NOT NULL DEFAULT 0,
|
|
250
|
+
hash TEXT,
|
|
251
|
+
synced_to_memory BOOLEAN NOT NULL DEFAULT false,
|
|
252
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
253
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
CREATE TABLE IF NOT EXISTS workflows (
|
|
257
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
258
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
259
|
+
name TEXT NOT NULL,
|
|
260
|
+
type TEXT NOT NULL DEFAULT 'user',
|
|
261
|
+
status TEXT NOT NULL DEFAULT 'draft',
|
|
262
|
+
governing_agent_id UUID REFERENCES agents(id) ON DELETE SET NULL,
|
|
263
|
+
blocks JSONB NOT NULL DEFAULT '[]',
|
|
264
|
+
edges JSONB NOT NULL DEFAULT '[]',
|
|
265
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
266
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
CREATE TABLE IF NOT EXISTS activity_log (
|
|
270
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
271
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
272
|
+
action TEXT NOT NULL,
|
|
273
|
+
entity_type TEXT NOT NULL,
|
|
274
|
+
entity_id UUID NOT NULL,
|
|
275
|
+
actor_type TEXT,
|
|
276
|
+
actor_id UUID,
|
|
277
|
+
metadata JSONB,
|
|
278
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
CREATE TABLE IF NOT EXISTS budget_policies (
|
|
282
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
283
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
284
|
+
agent_id UUID REFERENCES agents(id) ON DELETE CASCADE,
|
|
285
|
+
scope TEXT NOT NULL DEFAULT 'tenant',
|
|
286
|
+
period TEXT NOT NULL DEFAULT 'monthly',
|
|
287
|
+
limit_cents INTEGER NOT NULL,
|
|
288
|
+
warn_threshold_pct INTEGER NOT NULL DEFAULT 80,
|
|
289
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
290
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
CREATE TABLE IF NOT EXISTS budget_incidents (
|
|
294
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
295
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
296
|
+
policy_id UUID NOT NULL REFERENCES budget_policies(id),
|
|
297
|
+
agent_id UUID REFERENCES agents(id),
|
|
298
|
+
type TEXT NOT NULL,
|
|
299
|
+
spent_cents INTEGER NOT NULL,
|
|
300
|
+
limit_cents INTEGER NOT NULL,
|
|
301
|
+
run_id UUID,
|
|
302
|
+
dismissed TEXT DEFAULT 'false',
|
|
303
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
CREATE TABLE IF NOT EXISTS routines (
|
|
307
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
308
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
309
|
+
title TEXT NOT NULL,
|
|
310
|
+
description TEXT,
|
|
311
|
+
assignee_agent_id UUID NOT NULL REFERENCES agents(id),
|
|
312
|
+
cron_expression TEXT NOT NULL,
|
|
313
|
+
timezone TEXT DEFAULT 'UTC',
|
|
314
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
315
|
+
concurrency_policy TEXT NOT NULL DEFAULT 'skip_if_active',
|
|
316
|
+
last_triggered_at TIMESTAMPTZ,
|
|
317
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
318
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
CREATE TABLE IF NOT EXISTS plugins (
|
|
322
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
323
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
324
|
+
name TEXT NOT NULL,
|
|
325
|
+
version TEXT NOT NULL,
|
|
326
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
327
|
+
config JSONB NOT NULL DEFAULT '{}',
|
|
328
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
329
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
CREATE TABLE IF NOT EXISTS plugin_state (
|
|
333
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
334
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
335
|
+
plugin_name TEXT NOT NULL,
|
|
336
|
+
key TEXT NOT NULL,
|
|
337
|
+
value JSONB,
|
|
338
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
339
|
+
);
|
|
340
|
+
|
|
341
|
+
CREATE TABLE IF NOT EXISTS plugin_job_runs (
|
|
342
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
343
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
344
|
+
plugin_name TEXT NOT NULL,
|
|
345
|
+
job_name TEXT NOT NULL,
|
|
346
|
+
status TEXT NOT NULL DEFAULT 'running',
|
|
347
|
+
error TEXT,
|
|
348
|
+
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
349
|
+
finished_at TIMESTAMPTZ
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
353
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
354
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
355
|
+
name TEXT NOT NULL,
|
|
356
|
+
description TEXT,
|
|
357
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
358
|
+
prefix TEXT,
|
|
359
|
+
next_issue_number TEXT NOT NULL DEFAULT '1',
|
|
360
|
+
repo_url TEXT,
|
|
361
|
+
default_branch TEXT DEFAULT 'main',
|
|
362
|
+
branch_template TEXT DEFAULT 'bos/{{identifier}}-{{slug}}',
|
|
363
|
+
settings JSONB NOT NULL DEFAULT '{}',
|
|
364
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
365
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
CREATE TABLE IF NOT EXISTS goals (
|
|
369
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
370
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
371
|
+
title TEXT NOT NULL,
|
|
372
|
+
description TEXT,
|
|
373
|
+
status TEXT NOT NULL DEFAULT 'planned',
|
|
374
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
375
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
376
|
+
);
|
|
377
|
+
|
|
378
|
+
CREATE TABLE IF NOT EXISTS labels (
|
|
379
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
380
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
381
|
+
name TEXT NOT NULL,
|
|
382
|
+
color TEXT,
|
|
383
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
384
|
+
);
|
|
385
|
+
|
|
386
|
+
CREATE TABLE IF NOT EXISTS task_labels (
|
|
387
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
388
|
+
task_id UUID NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
389
|
+
label_id UUID NOT NULL REFERENCES labels(id) ON DELETE CASCADE,
|
|
390
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
391
|
+
);
|
|
392
|
+
|
|
393
|
+
CREATE TABLE IF NOT EXISTS task_attachments (
|
|
394
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
395
|
+
task_id UUID NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
396
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
397
|
+
filename TEXT NOT NULL,
|
|
398
|
+
path TEXT NOT NULL,
|
|
399
|
+
size INTEGER NOT NULL DEFAULT 0,
|
|
400
|
+
mime_type TEXT,
|
|
401
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
CREATE TABLE IF NOT EXISTS task_read_states (
|
|
405
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
406
|
+
task_id UUID NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
407
|
+
user_id TEXT NOT NULL,
|
|
408
|
+
last_read_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
409
|
+
);
|
|
410
|
+
|
|
411
|
+
CREATE TABLE IF NOT EXISTS drive_skill_revisions (
|
|
412
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
413
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
414
|
+
content TEXT NOT NULL,
|
|
415
|
+
changed_by TEXT,
|
|
416
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
CREATE TABLE IF NOT EXISTS onboarding_state (
|
|
420
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
421
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id) UNIQUE,
|
|
422
|
+
current_step INTEGER NOT NULL DEFAULT 1,
|
|
423
|
+
total_steps INTEGER NOT NULL DEFAULT 5,
|
|
424
|
+
completed_steps JSONB NOT NULL DEFAULT '[]',
|
|
425
|
+
metadata JSONB NOT NULL DEFAULT '{}',
|
|
426
|
+
completed_at TIMESTAMPTZ,
|
|
427
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
428
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
429
|
+
);
|
|
430
|
+
|
|
431
|
+
CREATE TABLE IF NOT EXISTS cli_auth_challenges (
|
|
432
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
433
|
+
device_code TEXT NOT NULL UNIQUE,
|
|
434
|
+
user_code TEXT NOT NULL UNIQUE,
|
|
435
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
436
|
+
session_token TEXT,
|
|
437
|
+
user_id TEXT,
|
|
438
|
+
tenant_id UUID,
|
|
439
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
440
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
441
|
+
);
|
|
442
|
+
|
|
443
|
+
CREATE TABLE IF NOT EXISTS evals (
|
|
444
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
445
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
446
|
+
name TEXT NOT NULL,
|
|
447
|
+
description TEXT,
|
|
448
|
+
test_cases JSONB NOT NULL DEFAULT '[]',
|
|
449
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
450
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
451
|
+
);
|
|
452
|
+
|
|
453
|
+
CREATE TABLE IF NOT EXISTS eval_runs (
|
|
454
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
455
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
456
|
+
eval_id UUID NOT NULL REFERENCES evals(id),
|
|
457
|
+
agent_id UUID NOT NULL REFERENCES agents(id),
|
|
458
|
+
status TEXT NOT NULL DEFAULT 'running',
|
|
459
|
+
total_cases INTEGER NOT NULL DEFAULT 0,
|
|
460
|
+
passed_cases INTEGER NOT NULL DEFAULT 0,
|
|
461
|
+
failed_cases INTEGER NOT NULL DEFAULT 0,
|
|
462
|
+
results JSONB,
|
|
463
|
+
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
464
|
+
finished_at TIMESTAMPTZ
|
|
465
|
+
);
|
|
466
|
+
|
|
467
|
+
CREATE TABLE IF NOT EXISTS inbox_items (
|
|
468
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
469
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
470
|
+
source TEXT NOT NULL,
|
|
471
|
+
source_id TEXT,
|
|
472
|
+
subject TEXT NOT NULL,
|
|
473
|
+
body TEXT,
|
|
474
|
+
"from" TEXT,
|
|
475
|
+
status TEXT NOT NULL DEFAULT 'unread',
|
|
476
|
+
metadata JSONB,
|
|
477
|
+
linked_task_id UUID,
|
|
478
|
+
archived_at TIMESTAMPTZ,
|
|
479
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
480
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
481
|
+
);
|
|
482
|
+
|
|
483
|
+
CREATE TABLE IF NOT EXISTS entity_references (
|
|
484
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
485
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id),
|
|
486
|
+
entity_type TEXT NOT NULL,
|
|
487
|
+
entity_id TEXT NOT NULL,
|
|
488
|
+
ref_type TEXT NOT NULL,
|
|
489
|
+
ref_id UUID NOT NULL,
|
|
490
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
491
|
+
);
|
|
492
|
+
|
|
493
|
+
CREATE INDEX IF NOT EXISTS entity_refs_entity_idx ON entity_references(entity_type, entity_id);
|
|
494
|
+
CREATE INDEX IF NOT EXISTS entity_refs_ref_idx ON entity_references(ref_type, ref_id);
|
|
495
|
+
|
|
496
|
+
-- Add columns to tasks if they don't exist
|
|
497
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS project_id UUID REFERENCES projects(id);
|
|
498
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS goal_id UUID;
|
|
499
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS checkout_run_id UUID;
|
|
500
|
+
|
|
501
|
+
CREATE INDEX IF NOT EXISTS agents_tenant_status_idx ON agents(tenant_id, status);
|
|
502
|
+
CREATE INDEX IF NOT EXISTS tasks_tenant_status_idx ON tasks(tenant_id, status);
|
|
503
|
+
CREATE INDEX IF NOT EXISTS tasks_assignee_agent_idx ON tasks(assignee_agent_id);
|
|
504
|
+
CREATE INDEX IF NOT EXISTS agent_runs_tenant_agent_idx ON agent_runs(tenant_id, agent_id);
|
|
505
|
+
`);
|
|
506
|
+
}
|
|
507
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,UAAU,sBAAsB,CAAC,EAAM;IAC3C,OAAO;QACL,KAAK,CAAC,OAAO;YACX,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzD,CAAC;QAED,KAAK,CAAC,MAAM;YACV,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAM;IAChC,iDAAiD;IACjD,mEAAmE;IACnE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqenB,CAAC,CAAC;AACL,CAAC"}
|