@stackbone/sdk 0.1.0-alpha.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/package.json ADDED
@@ -0,0 +1,108 @@
1
+ {
2
+ "name": "@stackbone/sdk",
3
+ "version": "0.1.0-alpha.0",
4
+ "license": "UNLICENSED",
5
+ "description": "Official TypeScript SDK for Stackbone — the marketplace and managed runtime for containerized AI agents.",
6
+ "type": "module",
7
+ "main": "./index.cjs",
8
+ "module": "./index.js",
9
+ "types": "./index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": {
13
+ "types": "./index.d.ts",
14
+ "default": "./index.js"
15
+ },
16
+ "require": {
17
+ "types": "./index.d.cts",
18
+ "default": "./index.cjs"
19
+ }
20
+ },
21
+ "./db": {
22
+ "import": {
23
+ "types": "./db/index.d.ts",
24
+ "default": "./db/index.js"
25
+ },
26
+ "require": {
27
+ "types": "./db/index.d.cts",
28
+ "default": "./db/index.cjs"
29
+ }
30
+ },
31
+ "./db/testing": {
32
+ "import": {
33
+ "types": "./db/testing/index.d.ts",
34
+ "default": "./db/testing/index.js"
35
+ },
36
+ "require": {
37
+ "types": "./db/testing/index.d.cts",
38
+ "default": "./db/testing/index.cjs"
39
+ }
40
+ },
41
+ "./queues/types": {
42
+ "import": {
43
+ "types": "./queues/types.d.ts",
44
+ "default": "./queues/types.js"
45
+ },
46
+ "require": {
47
+ "types": "./queues/types.d.cts",
48
+ "default": "./queues/types.cjs"
49
+ }
50
+ },
51
+ "./rag/migrations": {
52
+ "import": {
53
+ "types": "./rag/migrations/index.d.ts",
54
+ "default": "./rag/migrations/index.js"
55
+ },
56
+ "require": {
57
+ "types": "./rag/migrations/index.d.cts",
58
+ "default": "./rag/migrations/index.cjs"
59
+ }
60
+ },
61
+ "./rag/schema": {
62
+ "import": {
63
+ "types": "./rag/schema.d.ts",
64
+ "default": "./rag/schema.js"
65
+ },
66
+ "require": {
67
+ "types": "./rag/schema.d.cts",
68
+ "default": "./rag/schema.cjs"
69
+ }
70
+ },
71
+ "./package.json": "./package.json"
72
+ },
73
+ "engines": {
74
+ "node": ">=24"
75
+ },
76
+ "publishConfig": {
77
+ "access": "public"
78
+ },
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "git+https://github.com/stackbone/stackbone.git",
82
+ "directory": "libs/sdk"
83
+ },
84
+ "homepage": "https://stackbone.ai",
85
+ "bugs": {
86
+ "url": "https://github.com/stackbone/stackbone/issues"
87
+ },
88
+ "keywords": [
89
+ "stackbone",
90
+ "ai-agents",
91
+ "agent-sdk",
92
+ "containerized-agents",
93
+ "openrouter",
94
+ "rag",
95
+ "pgvector",
96
+ "drizzle",
97
+ "openai",
98
+ "postgres"
99
+ ],
100
+ "dependencies": {
101
+ "@aws-sdk/client-s3": "^3.1038.0",
102
+ "@aws-sdk/s3-request-presigner": "^3.1038.0",
103
+ "drizzle-orm": "0.45.2",
104
+ "openai": "^4.104.0",
105
+ "postgres": "3.4.9",
106
+ "unpdf": "^0.12.1"
107
+ }
108
+ }
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=types.cjs.map
4
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"types.cjs"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Registry of typed queue jobs. Consumers extend this interface via module
3
+ * augmentation so publisher and receiver share payload shapes:
4
+ *
5
+ * declare module '@stackbone/sdk/queues/types' {
6
+ * interface QueueJobs {
7
+ * 'send-email': { to: string; templateId: string };
8
+ * }
9
+ * }
10
+ */
11
+ interface QueueJobs {
12
+ }
13
+
14
+ export type { QueueJobs };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Registry of typed queue jobs. Consumers extend this interface via module
3
+ * augmentation so publisher and receiver share payload shapes:
4
+ *
5
+ * declare module '@stackbone/sdk/queues/types' {
6
+ * interface QueueJobs {
7
+ * 'send-email': { to: string; templateId: string };
8
+ * }
9
+ * }
10
+ */
11
+ interface QueueJobs {
12
+ }
13
+
14
+ export type { QueueJobs };
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"types.js"}
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ // src/modules/rag/migrations/index.ts
4
+ var STACKBONE_RAG_MARKER_PREFIX = "-- @stackbone:rag@";
5
+ var STACKBONE_RAG_MARKER_REGEX = /^-- @stackbone:rag@v(\d+)$/;
6
+ var STACKBONE_RAG_V1_FILENAME_SUFFIX = "stackbone_rag_v1.sql";
7
+ var STACKBONE_RAG_V1_SQL = `-- @stackbone:rag@v1
8
+ CREATE EXTENSION IF NOT EXISTS vector;
9
+ --> statement-breakpoint
10
+ CREATE TABLE "stackbone_rag_collections" (
11
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
12
+ "name" text NOT NULL,
13
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
14
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
15
+ CONSTRAINT "stackbone_rag_collections_name_unique" UNIQUE("name")
16
+ );
17
+ --> statement-breakpoint
18
+ CREATE TABLE "stackbone_rag_documents" (
19
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
20
+ "collection_id" uuid NOT NULL,
21
+ "source" text NOT NULL,
22
+ "content_hash" text NOT NULL,
23
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
24
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
25
+ );
26
+ --> statement-breakpoint
27
+ CREATE TABLE "stackbone_rag_chunks" (
28
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
29
+ "document_id" uuid NOT NULL,
30
+ "ordinal" integer NOT NULL,
31
+ "content" text NOT NULL,
32
+ "embedding" vector(1536) NOT NULL,
33
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL
34
+ );
35
+ --> statement-breakpoint
36
+ CREATE TABLE "stackbone_rag_jobs" (
37
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
38
+ "collection_id" uuid NOT NULL,
39
+ "status" text DEFAULT 'queued' NOT NULL,
40
+ "progress" jsonb DEFAULT '{"totalChunks":0,"processedChunks":0}'::jsonb NOT NULL,
41
+ "error" text,
42
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
43
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
44
+ CONSTRAINT "stackbone_rag_jobs_status_check" CHECK ("status" IN ('queued','running','succeeded','failed','cancelled'))
45
+ );
46
+ --> statement-breakpoint
47
+ ALTER TABLE "stackbone_rag_documents" ADD CONSTRAINT "stackbone_rag_documents_collection_id_fk" FOREIGN KEY ("collection_id") REFERENCES "public"."stackbone_rag_collections"("id") ON DELETE cascade ON UPDATE no action;
48
+ --> statement-breakpoint
49
+ ALTER TABLE "stackbone_rag_chunks" ADD CONSTRAINT "stackbone_rag_chunks_document_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."stackbone_rag_documents"("id") ON DELETE cascade ON UPDATE no action;
50
+ --> statement-breakpoint
51
+ ALTER TABLE "stackbone_rag_jobs" ADD CONSTRAINT "stackbone_rag_jobs_collection_id_fk" FOREIGN KEY ("collection_id") REFERENCES "public"."stackbone_rag_collections"("id") ON DELETE cascade ON UPDATE no action;
52
+ --> statement-breakpoint
53
+ CREATE INDEX "stackbone_rag_documents_collection_idx" ON "stackbone_rag_documents" USING btree ("collection_id");
54
+ --> statement-breakpoint
55
+ CREATE INDEX "stackbone_rag_documents_hash_idx" ON "stackbone_rag_documents" USING btree ("collection_id","content_hash");
56
+ --> statement-breakpoint
57
+ CREATE INDEX "stackbone_rag_chunks_document_idx" ON "stackbone_rag_chunks" USING btree ("document_id");
58
+ --> statement-breakpoint
59
+ CREATE INDEX "stackbone_rag_chunks_embedding_hnsw" ON "stackbone_rag_chunks" USING hnsw ("embedding" vector_cosine_ops);
60
+ --> statement-breakpoint
61
+ CREATE INDEX "stackbone_rag_jobs_collection_idx" ON "stackbone_rag_jobs" USING btree ("collection_id");
62
+ --> statement-breakpoint
63
+ CREATE INDEX "stackbone_rag_jobs_status_idx" ON "stackbone_rag_jobs" USING btree ("status");
64
+ `;
65
+
66
+ exports.STACKBONE_RAG_MARKER_PREFIX = STACKBONE_RAG_MARKER_PREFIX;
67
+ exports.STACKBONE_RAG_MARKER_REGEX = STACKBONE_RAG_MARKER_REGEX;
68
+ exports.STACKBONE_RAG_V1_FILENAME_SUFFIX = STACKBONE_RAG_V1_FILENAME_SUFFIX;
69
+ exports.STACKBONE_RAG_V1_SQL = STACKBONE_RAG_V1_SQL;
70
+ //# sourceMappingURL=index.cjs.map
71
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../libs/sdk/src/modules/rag/migrations/index.ts"],"names":["STACKBONE_RAG_MARKER_PREFIX","STACKBONE_RAG_MARKER_REGEX","STACKBONE_RAG_V1_FILENAME_SUFFIX","STACKBONE_RAG_V1_SQL"],"mappings":";;;AAqBO,IAAMA,2BAAAA,GAA8B;AAOpC,IAAMC,0BAAAA,GAA6B;AAGnC,IAAMC,gCAAAA,GAAmC;AAUzC,IAAMC,oBAAAA,GAAuB,CAAA","file":"index.cjs","sourcesContent":["// Runtime-resolvable bundle of the canonical RAG migrations. The CLI's\n// `add-rag` installer copies `STACKBONE_RAG_V1_SQL` verbatim into the\n// creator's `.stackbone/migrations/` directory. The literal `.sql` sibling\n// (`stackbone_rag_v1.sql`) is the human-readable source — a snapshot test\n// pins the two together so they cannot drift.\n//\n// We inline the body here (instead of `readFileSync`) because tsup bundles\n// the SDK into `dist/*.{js,cjs}` and does NOT copy `.sql` assets across.\n// Inlining sidesteps the runtime-asset question: any consumer that imports\n// `@stackbone/sdk/rag/migrations` gets the SQL as a plain string, no fs\n// access required, no path-resolution edge cases inside packed CLIs.\n\n/**\n * Header marker stamped on the first line of every Stackbone-managed RAG\n * migration. The `add-rag` installer is **idempotent** by detection of this\n * exact regex on the first line of any file under\n * `.stackbone/migrations/*.sql`.\n *\n * Format locked in ADR 2026-05-10 §D3: literal `-- @stackbone:rag@v<N>` with\n * no leading/trailing whitespace and no quoting.\n */\nexport const STACKBONE_RAG_MARKER_PREFIX = '-- @stackbone:rag@';\n\n/**\n * Regex matching the marker on the first line of a migration file. Group 1\n * is the integer version. Anchored on both ends so the match is robust to\n * accidental copy-paste of the marker into a comment further down the file.\n */\nexport const STACKBONE_RAG_MARKER_REGEX = /^-- @stackbone:rag@v(\\d+)$/;\n\n/** Filename used when bundling into `.stackbone/migrations/<NNNN>_stackbone_rag_v<N>.sql`. */\nexport const STACKBONE_RAG_V1_FILENAME_SUFFIX = 'stackbone_rag_v1.sql';\n\n/**\n * Canonical body of `stackbone_rag_v1.sql`. Generated from\n * `libs/sdk/src/modules/rag/schema.ts` via `drizzle-kit generate`, then\n * prefixed with the `-- @stackbone:rag@v1` marker required by the installer.\n *\n * The literal `.sql` sibling exists for tooling (drizzle-kit studio, manual\n * inspection); a snapshot test asserts the two stay byte-equal.\n */\nexport const STACKBONE_RAG_V1_SQL = `-- @stackbone:rag@v1\nCREATE EXTENSION IF NOT EXISTS vector;\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_collections\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"name\" text NOT NULL,\n\\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\\tCONSTRAINT \"stackbone_rag_collections_name_unique\" UNIQUE(\"name\")\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_documents\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"collection_id\" uuid NOT NULL,\n\\t\"source\" text NOT NULL,\n\\t\"content_hash\" text NOT NULL,\n\\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_chunks\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"document_id\" uuid NOT NULL,\n\\t\"ordinal\" integer NOT NULL,\n\\t\"content\" text NOT NULL,\n\\t\"embedding\" vector(1536) NOT NULL,\n\\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_jobs\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"collection_id\" uuid NOT NULL,\n\\t\"status\" text DEFAULT 'queued' NOT NULL,\n\\t\"progress\" jsonb DEFAULT '{\"totalChunks\":0,\"processedChunks\":0}'::jsonb NOT NULL,\n\\t\"error\" text,\n\\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\\t\"updated_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\\tCONSTRAINT \"stackbone_rag_jobs_status_check\" CHECK (\"status\" IN ('queued','running','succeeded','failed','cancelled'))\n);\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_documents\" ADD CONSTRAINT \"stackbone_rag_documents_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_chunks\" ADD CONSTRAINT \"stackbone_rag_chunks_document_id_fk\" FOREIGN KEY (\"document_id\") REFERENCES \"public\".\"stackbone_rag_documents\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_jobs\" ADD CONSTRAINT \"stackbone_rag_jobs_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_collection_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_hash_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\",\"content_hash\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_document_idx\" ON \"stackbone_rag_chunks\" USING btree (\"document_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_embedding_hnsw\" ON \"stackbone_rag_chunks\" USING hnsw (\"embedding\" vector_cosine_ops);\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_collection_idx\" ON \"stackbone_rag_jobs\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_status_idx\" ON \"stackbone_rag_jobs\" USING btree (\"status\");\n`;\n"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Header marker stamped on the first line of every Stackbone-managed RAG
3
+ * migration. The `add-rag` installer is **idempotent** by detection of this
4
+ * exact regex on the first line of any file under
5
+ * `.stackbone/migrations/*.sql`.
6
+ *
7
+ * Format locked in ADR 2026-05-10 §D3: literal `-- @stackbone:rag@v<N>` with
8
+ * no leading/trailing whitespace and no quoting.
9
+ */
10
+ declare const STACKBONE_RAG_MARKER_PREFIX = "-- @stackbone:rag@";
11
+ /**
12
+ * Regex matching the marker on the first line of a migration file. Group 1
13
+ * is the integer version. Anchored on both ends so the match is robust to
14
+ * accidental copy-paste of the marker into a comment further down the file.
15
+ */
16
+ declare const STACKBONE_RAG_MARKER_REGEX: RegExp;
17
+ /** Filename used when bundling into `.stackbone/migrations/<NNNN>_stackbone_rag_v<N>.sql`. */
18
+ declare const STACKBONE_RAG_V1_FILENAME_SUFFIX = "stackbone_rag_v1.sql";
19
+ /**
20
+ * Canonical body of `stackbone_rag_v1.sql`. Generated from
21
+ * `libs/sdk/src/modules/rag/schema.ts` via `drizzle-kit generate`, then
22
+ * prefixed with the `-- @stackbone:rag@v1` marker required by the installer.
23
+ *
24
+ * The literal `.sql` sibling exists for tooling (drizzle-kit studio, manual
25
+ * inspection); a snapshot test asserts the two stay byte-equal.
26
+ */
27
+ declare const STACKBONE_RAG_V1_SQL = "-- @stackbone:rag@v1\nCREATE EXTENSION IF NOT EXISTS vector;\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_collections\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\tCONSTRAINT \"stackbone_rag_collections_name_unique\" UNIQUE(\"name\")\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_documents\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"collection_id\" uuid NOT NULL,\n\t\"source\" text NOT NULL,\n\t\"content_hash\" text NOT NULL,\n\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_chunks\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"document_id\" uuid NOT NULL,\n\t\"ordinal\" integer NOT NULL,\n\t\"content\" text NOT NULL,\n\t\"embedding\" vector(1536) NOT NULL,\n\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_jobs\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"collection_id\" uuid NOT NULL,\n\t\"status\" text DEFAULT 'queued' NOT NULL,\n\t\"progress\" jsonb DEFAULT '{\"totalChunks\":0,\"processedChunks\":0}'::jsonb NOT NULL,\n\t\"error\" text,\n\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\t\"updated_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\tCONSTRAINT \"stackbone_rag_jobs_status_check\" CHECK (\"status\" IN ('queued','running','succeeded','failed','cancelled'))\n);\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_documents\" ADD CONSTRAINT \"stackbone_rag_documents_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_chunks\" ADD CONSTRAINT \"stackbone_rag_chunks_document_id_fk\" FOREIGN KEY (\"document_id\") REFERENCES \"public\".\"stackbone_rag_documents\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_jobs\" ADD CONSTRAINT \"stackbone_rag_jobs_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_collection_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_hash_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\",\"content_hash\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_document_idx\" ON \"stackbone_rag_chunks\" USING btree (\"document_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_embedding_hnsw\" ON \"stackbone_rag_chunks\" USING hnsw (\"embedding\" vector_cosine_ops);\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_collection_idx\" ON \"stackbone_rag_jobs\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_status_idx\" ON \"stackbone_rag_jobs\" USING btree (\"status\");\n";
28
+
29
+ export { STACKBONE_RAG_MARKER_PREFIX, STACKBONE_RAG_MARKER_REGEX, STACKBONE_RAG_V1_FILENAME_SUFFIX, STACKBONE_RAG_V1_SQL };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Header marker stamped on the first line of every Stackbone-managed RAG
3
+ * migration. The `add-rag` installer is **idempotent** by detection of this
4
+ * exact regex on the first line of any file under
5
+ * `.stackbone/migrations/*.sql`.
6
+ *
7
+ * Format locked in ADR 2026-05-10 §D3: literal `-- @stackbone:rag@v<N>` with
8
+ * no leading/trailing whitespace and no quoting.
9
+ */
10
+ declare const STACKBONE_RAG_MARKER_PREFIX = "-- @stackbone:rag@";
11
+ /**
12
+ * Regex matching the marker on the first line of a migration file. Group 1
13
+ * is the integer version. Anchored on both ends so the match is robust to
14
+ * accidental copy-paste of the marker into a comment further down the file.
15
+ */
16
+ declare const STACKBONE_RAG_MARKER_REGEX: RegExp;
17
+ /** Filename used when bundling into `.stackbone/migrations/<NNNN>_stackbone_rag_v<N>.sql`. */
18
+ declare const STACKBONE_RAG_V1_FILENAME_SUFFIX = "stackbone_rag_v1.sql";
19
+ /**
20
+ * Canonical body of `stackbone_rag_v1.sql`. Generated from
21
+ * `libs/sdk/src/modules/rag/schema.ts` via `drizzle-kit generate`, then
22
+ * prefixed with the `-- @stackbone:rag@v1` marker required by the installer.
23
+ *
24
+ * The literal `.sql` sibling exists for tooling (drizzle-kit studio, manual
25
+ * inspection); a snapshot test asserts the two stay byte-equal.
26
+ */
27
+ declare const STACKBONE_RAG_V1_SQL = "-- @stackbone:rag@v1\nCREATE EXTENSION IF NOT EXISTS vector;\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_collections\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\tCONSTRAINT \"stackbone_rag_collections_name_unique\" UNIQUE(\"name\")\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_documents\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"collection_id\" uuid NOT NULL,\n\t\"source\" text NOT NULL,\n\t\"content_hash\" text NOT NULL,\n\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_chunks\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"document_id\" uuid NOT NULL,\n\t\"ordinal\" integer NOT NULL,\n\t\"content\" text NOT NULL,\n\t\"embedding\" vector(1536) NOT NULL,\n\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_jobs\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"collection_id\" uuid NOT NULL,\n\t\"status\" text DEFAULT 'queued' NOT NULL,\n\t\"progress\" jsonb DEFAULT '{\"totalChunks\":0,\"processedChunks\":0}'::jsonb NOT NULL,\n\t\"error\" text,\n\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\t\"updated_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\tCONSTRAINT \"stackbone_rag_jobs_status_check\" CHECK (\"status\" IN ('queued','running','succeeded','failed','cancelled'))\n);\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_documents\" ADD CONSTRAINT \"stackbone_rag_documents_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_chunks\" ADD CONSTRAINT \"stackbone_rag_chunks_document_id_fk\" FOREIGN KEY (\"document_id\") REFERENCES \"public\".\"stackbone_rag_documents\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_jobs\" ADD CONSTRAINT \"stackbone_rag_jobs_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_collection_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_hash_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\",\"content_hash\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_document_idx\" ON \"stackbone_rag_chunks\" USING btree (\"document_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_embedding_hnsw\" ON \"stackbone_rag_chunks\" USING hnsw (\"embedding\" vector_cosine_ops);\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_collection_idx\" ON \"stackbone_rag_jobs\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_status_idx\" ON \"stackbone_rag_jobs\" USING btree (\"status\");\n";
28
+
29
+ export { STACKBONE_RAG_MARKER_PREFIX, STACKBONE_RAG_MARKER_REGEX, STACKBONE_RAG_V1_FILENAME_SUFFIX, STACKBONE_RAG_V1_SQL };
@@ -0,0 +1,66 @@
1
+ // src/modules/rag/migrations/index.ts
2
+ var STACKBONE_RAG_MARKER_PREFIX = "-- @stackbone:rag@";
3
+ var STACKBONE_RAG_MARKER_REGEX = /^-- @stackbone:rag@v(\d+)$/;
4
+ var STACKBONE_RAG_V1_FILENAME_SUFFIX = "stackbone_rag_v1.sql";
5
+ var STACKBONE_RAG_V1_SQL = `-- @stackbone:rag@v1
6
+ CREATE EXTENSION IF NOT EXISTS vector;
7
+ --> statement-breakpoint
8
+ CREATE TABLE "stackbone_rag_collections" (
9
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
10
+ "name" text NOT NULL,
11
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
12
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
13
+ CONSTRAINT "stackbone_rag_collections_name_unique" UNIQUE("name")
14
+ );
15
+ --> statement-breakpoint
16
+ CREATE TABLE "stackbone_rag_documents" (
17
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
18
+ "collection_id" uuid NOT NULL,
19
+ "source" text NOT NULL,
20
+ "content_hash" text NOT NULL,
21
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
22
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
23
+ );
24
+ --> statement-breakpoint
25
+ CREATE TABLE "stackbone_rag_chunks" (
26
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
27
+ "document_id" uuid NOT NULL,
28
+ "ordinal" integer NOT NULL,
29
+ "content" text NOT NULL,
30
+ "embedding" vector(1536) NOT NULL,
31
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL
32
+ );
33
+ --> statement-breakpoint
34
+ CREATE TABLE "stackbone_rag_jobs" (
35
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
36
+ "collection_id" uuid NOT NULL,
37
+ "status" text DEFAULT 'queued' NOT NULL,
38
+ "progress" jsonb DEFAULT '{"totalChunks":0,"processedChunks":0}'::jsonb NOT NULL,
39
+ "error" text,
40
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
41
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
42
+ CONSTRAINT "stackbone_rag_jobs_status_check" CHECK ("status" IN ('queued','running','succeeded','failed','cancelled'))
43
+ );
44
+ --> statement-breakpoint
45
+ ALTER TABLE "stackbone_rag_documents" ADD CONSTRAINT "stackbone_rag_documents_collection_id_fk" FOREIGN KEY ("collection_id") REFERENCES "public"."stackbone_rag_collections"("id") ON DELETE cascade ON UPDATE no action;
46
+ --> statement-breakpoint
47
+ ALTER TABLE "stackbone_rag_chunks" ADD CONSTRAINT "stackbone_rag_chunks_document_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."stackbone_rag_documents"("id") ON DELETE cascade ON UPDATE no action;
48
+ --> statement-breakpoint
49
+ ALTER TABLE "stackbone_rag_jobs" ADD CONSTRAINT "stackbone_rag_jobs_collection_id_fk" FOREIGN KEY ("collection_id") REFERENCES "public"."stackbone_rag_collections"("id") ON DELETE cascade ON UPDATE no action;
50
+ --> statement-breakpoint
51
+ CREATE INDEX "stackbone_rag_documents_collection_idx" ON "stackbone_rag_documents" USING btree ("collection_id");
52
+ --> statement-breakpoint
53
+ CREATE INDEX "stackbone_rag_documents_hash_idx" ON "stackbone_rag_documents" USING btree ("collection_id","content_hash");
54
+ --> statement-breakpoint
55
+ CREATE INDEX "stackbone_rag_chunks_document_idx" ON "stackbone_rag_chunks" USING btree ("document_id");
56
+ --> statement-breakpoint
57
+ CREATE INDEX "stackbone_rag_chunks_embedding_hnsw" ON "stackbone_rag_chunks" USING hnsw ("embedding" vector_cosine_ops);
58
+ --> statement-breakpoint
59
+ CREATE INDEX "stackbone_rag_jobs_collection_idx" ON "stackbone_rag_jobs" USING btree ("collection_id");
60
+ --> statement-breakpoint
61
+ CREATE INDEX "stackbone_rag_jobs_status_idx" ON "stackbone_rag_jobs" USING btree ("status");
62
+ `;
63
+
64
+ export { STACKBONE_RAG_MARKER_PREFIX, STACKBONE_RAG_MARKER_REGEX, STACKBONE_RAG_V1_FILENAME_SUFFIX, STACKBONE_RAG_V1_SQL };
65
+ //# sourceMappingURL=index.js.map
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../libs/sdk/src/modules/rag/migrations/index.ts"],"names":["STACKBONE_RAG_MARKER_PREFIX","STACKBONE_RAG_MARKER_REGEX","STACKBONE_RAG_V1_FILENAME_SUFFIX","STACKBONE_RAG_V1_SQL"],"mappings":";AAqBO,IAAMA,2BAAAA,GAA8B;AAOpC,IAAMC,0BAAAA,GAA6B;AAGnC,IAAMC,gCAAAA,GAAmC;AAUzC,IAAMC,oBAAAA,GAAuB,CAAA","file":"index.js","sourcesContent":["// Runtime-resolvable bundle of the canonical RAG migrations. The CLI's\n// `add-rag` installer copies `STACKBONE_RAG_V1_SQL` verbatim into the\n// creator's `.stackbone/migrations/` directory. The literal `.sql` sibling\n// (`stackbone_rag_v1.sql`) is the human-readable source — a snapshot test\n// pins the two together so they cannot drift.\n//\n// We inline the body here (instead of `readFileSync`) because tsup bundles\n// the SDK into `dist/*.{js,cjs}` and does NOT copy `.sql` assets across.\n// Inlining sidesteps the runtime-asset question: any consumer that imports\n// `@stackbone/sdk/rag/migrations` gets the SQL as a plain string, no fs\n// access required, no path-resolution edge cases inside packed CLIs.\n\n/**\n * Header marker stamped on the first line of every Stackbone-managed RAG\n * migration. The `add-rag` installer is **idempotent** by detection of this\n * exact regex on the first line of any file under\n * `.stackbone/migrations/*.sql`.\n *\n * Format locked in ADR 2026-05-10 §D3: literal `-- @stackbone:rag@v<N>` with\n * no leading/trailing whitespace and no quoting.\n */\nexport const STACKBONE_RAG_MARKER_PREFIX = '-- @stackbone:rag@';\n\n/**\n * Regex matching the marker on the first line of a migration file. Group 1\n * is the integer version. Anchored on both ends so the match is robust to\n * accidental copy-paste of the marker into a comment further down the file.\n */\nexport const STACKBONE_RAG_MARKER_REGEX = /^-- @stackbone:rag@v(\\d+)$/;\n\n/** Filename used when bundling into `.stackbone/migrations/<NNNN>_stackbone_rag_v<N>.sql`. */\nexport const STACKBONE_RAG_V1_FILENAME_SUFFIX = 'stackbone_rag_v1.sql';\n\n/**\n * Canonical body of `stackbone_rag_v1.sql`. Generated from\n * `libs/sdk/src/modules/rag/schema.ts` via `drizzle-kit generate`, then\n * prefixed with the `-- @stackbone:rag@v1` marker required by the installer.\n *\n * The literal `.sql` sibling exists for tooling (drizzle-kit studio, manual\n * inspection); a snapshot test asserts the two stay byte-equal.\n */\nexport const STACKBONE_RAG_V1_SQL = `-- @stackbone:rag@v1\nCREATE EXTENSION IF NOT EXISTS vector;\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_collections\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"name\" text NOT NULL,\n\\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\\tCONSTRAINT \"stackbone_rag_collections_name_unique\" UNIQUE(\"name\")\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_documents\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"collection_id\" uuid NOT NULL,\n\\t\"source\" text NOT NULL,\n\\t\"content_hash\" text NOT NULL,\n\\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL,\n\\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_chunks\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"document_id\" uuid NOT NULL,\n\\t\"ordinal\" integer NOT NULL,\n\\t\"content\" text NOT NULL,\n\\t\"embedding\" vector(1536) NOT NULL,\n\\t\"metadata\" jsonb DEFAULT '{}'::jsonb NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"stackbone_rag_jobs\" (\n\\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\\t\"collection_id\" uuid NOT NULL,\n\\t\"status\" text DEFAULT 'queued' NOT NULL,\n\\t\"progress\" jsonb DEFAULT '{\"totalChunks\":0,\"processedChunks\":0}'::jsonb NOT NULL,\n\\t\"error\" text,\n\\t\"created_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\\t\"updated_at\" timestamp with time zone DEFAULT now() NOT NULL,\n\\tCONSTRAINT \"stackbone_rag_jobs_status_check\" CHECK (\"status\" IN ('queued','running','succeeded','failed','cancelled'))\n);\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_documents\" ADD CONSTRAINT \"stackbone_rag_documents_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_chunks\" ADD CONSTRAINT \"stackbone_rag_chunks_document_id_fk\" FOREIGN KEY (\"document_id\") REFERENCES \"public\".\"stackbone_rag_documents\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nALTER TABLE \"stackbone_rag_jobs\" ADD CONSTRAINT \"stackbone_rag_jobs_collection_id_fk\" FOREIGN KEY (\"collection_id\") REFERENCES \"public\".\"stackbone_rag_collections\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_collection_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_documents_hash_idx\" ON \"stackbone_rag_documents\" USING btree (\"collection_id\",\"content_hash\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_document_idx\" ON \"stackbone_rag_chunks\" USING btree (\"document_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_chunks_embedding_hnsw\" ON \"stackbone_rag_chunks\" USING hnsw (\"embedding\" vector_cosine_ops);\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_collection_idx\" ON \"stackbone_rag_jobs\" USING btree (\"collection_id\");\n--> statement-breakpoint\nCREATE INDEX \"stackbone_rag_jobs_status_idx\" ON \"stackbone_rag_jobs\" USING btree (\"status\");\n`;\n"]}
package/rag/schema.cjs ADDED
@@ -0,0 +1,124 @@
1
+ 'use strict';
2
+
3
+ var drizzle_orm_star = require('drizzle-orm');
4
+ var pg_core_star = require('drizzle-orm/pg-core');
5
+
6
+ function _interopNamespace(e) {
7
+ if (e && e.__esModule) return e;
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var drizzle_orm_star__namespace = /*#__PURE__*/_interopNamespace(drizzle_orm_star);
25
+ var pg_core_star__namespace = /*#__PURE__*/_interopNamespace(pg_core_star);
26
+
27
+ var __defProp = Object.defineProperty;
28
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
29
+ var __getOwnPropNames = Object.getOwnPropertyNames;
30
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
31
+ var __copyProps = (to, from, except, desc) => {
32
+ if (from && typeof from === "object" || typeof from === "function") {
33
+ for (let key of __getOwnPropNames(from))
34
+ if (!__hasOwnProp.call(to, key) && key !== except)
35
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
36
+ }
37
+ return to;
38
+ };
39
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget);
40
+
41
+ // src/db/index.ts
42
+ var db_exports = {};
43
+ __reExport(db_exports, drizzle_orm_star__namespace);
44
+ __reExport(db_exports, pg_core_star__namespace);
45
+
46
+ // src/modules/rag/schema.ts
47
+ var RAG_EMBEDDING_DIMENSIONS = 1536;
48
+ var STACKBONE_RAG_SCHEMA_VERSION = "v1";
49
+ var stackboneRagCollections = (0, db_exports.pgTable)("stackbone_rag_collections", {
50
+ id: (0, db_exports.uuid)("id").defaultRandom().primaryKey(),
51
+ name: (0, db_exports.text)("name").notNull().unique(),
52
+ metadata: (0, db_exports.jsonb)("metadata").$type().notNull().default({}),
53
+ createdAt: (0, db_exports.timestamp)("created_at", {
54
+ withTimezone: true
55
+ }).notNull().defaultNow()
56
+ });
57
+ var stackboneRagDocuments = (0, db_exports.pgTable)("stackbone_rag_documents", {
58
+ id: (0, db_exports.uuid)("id").defaultRandom().primaryKey(),
59
+ collectionId: (0, db_exports.uuid)("collection_id").notNull().references(() => stackboneRagCollections.id, {
60
+ onDelete: "cascade"
61
+ }),
62
+ source: (0, db_exports.text)("source").notNull(),
63
+ contentHash: (0, db_exports.text)("content_hash").notNull(),
64
+ metadata: (0, db_exports.jsonb)("metadata").$type().notNull().default({}),
65
+ createdAt: (0, db_exports.timestamp)("created_at", {
66
+ withTimezone: true
67
+ }).notNull().defaultNow()
68
+ }, (t) => ({
69
+ byCollection: (0, db_exports.index)("stackbone_rag_documents_collection_idx").on(t.collectionId),
70
+ byHash: (0, db_exports.index)("stackbone_rag_documents_hash_idx").on(t.collectionId, t.contentHash)
71
+ }));
72
+ var stackboneRagChunks = (0, db_exports.pgTable)("stackbone_rag_chunks", {
73
+ id: (0, db_exports.uuid)("id").defaultRandom().primaryKey(),
74
+ documentId: (0, db_exports.uuid)("document_id").notNull().references(() => stackboneRagDocuments.id, {
75
+ onDelete: "cascade"
76
+ }),
77
+ ordinal: (0, db_exports.integer)("ordinal").notNull(),
78
+ content: (0, db_exports.text)("content").notNull(),
79
+ embedding: (0, db_exports.vector)("embedding", {
80
+ dimensions: RAG_EMBEDDING_DIMENSIONS
81
+ }).notNull(),
82
+ metadata: (0, db_exports.jsonb)("metadata").$type().notNull().default({})
83
+ }, (t) => ({
84
+ byDocument: (0, db_exports.index)("stackbone_rag_chunks_document_idx").on(t.documentId),
85
+ ann: (0, db_exports.index)("stackbone_rag_chunks_embedding_hnsw").using("hnsw", t.embedding.op("vector_cosine_ops"))
86
+ }));
87
+ var stackboneRagJobs = (0, db_exports.pgTable)("stackbone_rag_jobs", {
88
+ id: (0, db_exports.uuid)("id").defaultRandom().primaryKey(),
89
+ collectionId: (0, db_exports.uuid)("collection_id").notNull().references(() => stackboneRagCollections.id, {
90
+ onDelete: "cascade"
91
+ }),
92
+ status: (0, db_exports.text)("status", {
93
+ enum: [
94
+ "queued",
95
+ "running",
96
+ "succeeded",
97
+ "failed",
98
+ "cancelled"
99
+ ]
100
+ }).notNull().default("queued"),
101
+ progress: (0, db_exports.jsonb)("progress").$type().notNull().default({
102
+ totalChunks: 0,
103
+ processedChunks: 0
104
+ }),
105
+ error: (0, db_exports.text)("error"),
106
+ createdAt: (0, db_exports.timestamp)("created_at", {
107
+ withTimezone: true
108
+ }).notNull().defaultNow(),
109
+ updatedAt: (0, db_exports.timestamp)("updated_at", {
110
+ withTimezone: true
111
+ }).notNull().defaultNow()
112
+ }, (t) => ({
113
+ byCollection: (0, db_exports.index)("stackbone_rag_jobs_collection_idx").on(t.collectionId),
114
+ byStatus: (0, db_exports.index)("stackbone_rag_jobs_status_idx").on(t.status)
115
+ }));
116
+
117
+ exports.RAG_EMBEDDING_DIMENSIONS = RAG_EMBEDDING_DIMENSIONS;
118
+ exports.STACKBONE_RAG_SCHEMA_VERSION = STACKBONE_RAG_SCHEMA_VERSION;
119
+ exports.stackboneRagChunks = stackboneRagChunks;
120
+ exports.stackboneRagCollections = stackboneRagCollections;
121
+ exports.stackboneRagDocuments = stackboneRagDocuments;
122
+ exports.stackboneRagJobs = stackboneRagJobs;
123
+ //# sourceMappingURL=schema.cjs.map
124
+ //# sourceMappingURL=schema.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../libs/sdk/src/db/index.ts","../../../../libs/sdk/src/modules/rag/schema.ts"],"names":["pg_core_star","RAG_EMBEDDING_DIMENSIONS","STACKBONE_RAG_SCHEMA_VERSION","stackboneRagCollections","pgTable","id","uuid","defaultRandom","primaryKey","name","text","notNull","unique","metadata","jsonb","$type","default","createdAt","timestamp","withTimezone","defaultNow","stackboneRagDocuments","collectionId","references","onDelete","source","contentHash","t","byCollection","index","on","byHash","stackboneRagChunks","documentId","ordinal","integer","content","embedding","vector","dimensions","byDocument","ann","using","op","stackboneRagJobs","status","enum","progress","totalChunks","processedChunks","error","updatedAt","byStatus"],"mappings":"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","file":"schema.cjs","sourcesContent":["export * from 'drizzle-orm';\nexport * from 'drizzle-orm/pg-core';\n\n// Re-exporting both `drizzle-orm` and `drizzle-orm/pg-core` produces TS2308\n// (ambiguous re-export) for the type names below, since both barrels expose\n// them. Pinning them to the pg-core variant — the one creators write Postgres\n// schemas against — resolves the ambiguity.\nexport type {\n ColumnsWithTable,\n SelectedFields,\n SelectedFieldsFlat,\n SelectedFieldsOrdered,\n TableConfig,\n} from 'drizzle-orm/pg-core';\n","// Single source of truth for the RAG tables installed by `stackbone db\n// migrate add-rag`. This module is **internal** — never re-exported from\n// `@stackbone/sdk`'s public barrel. Only the SDK's own RAG pipeline (slices\n// F03–F07) and the CLI (this slice) read from it.\n//\n// The bundled SQL migration in `./migrations/stackbone_rag_v1.sql` is the\n// snapshot generated from the Drizzle definitions below via\n// `drizzle-kit generate`. The two MUST stay in sync; the snapshot test in\n// `schema.spec.ts` pins the expected table/column shape so a drift in the\n// hand-maintained SQL is caught at CI.\n//\n// Column helpers come from `@stackbone/sdk/db` (its public re-export of\n// `drizzle-orm/pg-core`) so creators and the SDK use the exact same `vector`\n// implementation. Importing directly from `drizzle-orm/pg-core` here would\n// fork the chain; routing through the SDK's barrel is the canonical path\n// locked in ADR 2026-05-10 §D1.\nimport { index, integer, jsonb, pgTable, text, timestamp, uuid, vector } from '../../db';\n\nexport type RagJobStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';\n\nexport interface RagJobProgress {\n totalChunks: number;\n processedChunks: number;\n currentDocument?: { source: string; ordinal: number };\n}\n\n/** Embedding vector dimension — atado a `openai/text-embedding-3-small` (ADR §D2). */\nexport const RAG_EMBEDDING_DIMENSIONS = 1536;\n\n/** Schema major version. Bumped only on breaking change (ADR §D4). */\nexport const STACKBONE_RAG_SCHEMA_VERSION = 'v1';\n\nexport const stackboneRagCollections = pgTable('stackbone_rag_collections', {\n id: uuid('id').defaultRandom().primaryKey(),\n name: text('name').notNull().unique(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>().notNull().default({}),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const stackboneRagDocuments = pgTable(\n 'stackbone_rag_documents',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n collectionId: uuid('collection_id')\n .notNull()\n .references(() => stackboneRagCollections.id, { onDelete: 'cascade' }),\n source: text('source').notNull(),\n contentHash: text('content_hash').notNull(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>().notNull().default({}),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (t) => ({\n byCollection: index('stackbone_rag_documents_collection_idx').on(t.collectionId),\n byHash: index('stackbone_rag_documents_hash_idx').on(t.collectionId, t.contentHash),\n }),\n);\n\nexport const stackboneRagChunks = pgTable(\n 'stackbone_rag_chunks',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n documentId: uuid('document_id')\n .notNull()\n .references(() => stackboneRagDocuments.id, { onDelete: 'cascade' }),\n ordinal: integer('ordinal').notNull(),\n content: text('content').notNull(),\n embedding: vector('embedding', { dimensions: RAG_EMBEDDING_DIMENSIONS }).notNull(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>().notNull().default({}),\n },\n (t) => ({\n byDocument: index('stackbone_rag_chunks_document_idx').on(t.documentId),\n ann: index('stackbone_rag_chunks_embedding_hnsw').using(\n 'hnsw',\n t.embedding.op('vector_cosine_ops'),\n ),\n }),\n);\n\nexport const stackboneRagJobs = pgTable(\n 'stackbone_rag_jobs',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n collectionId: uuid('collection_id')\n .notNull()\n .references(() => stackboneRagCollections.id, { onDelete: 'cascade' }),\n status: text('status', {\n enum: ['queued', 'running', 'succeeded', 'failed', 'cancelled'],\n })\n .notNull()\n .default('queued'),\n progress: jsonb('progress')\n .$type<RagJobProgress>()\n .notNull()\n .default({ totalChunks: 0, processedChunks: 0 }),\n error: text('error'),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (t) => ({\n byCollection: index('stackbone_rag_jobs_collection_idx').on(t.collectionId),\n byStatus: index('stackbone_rag_jobs_status_idx').on(t.status),\n }),\n);\n"]}