@sixb/pg 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/agents/rows.d.ts +8 -5
  2. package/dist/agents/rows.d.ts.map +1 -1
  3. package/dist/agents/runs.d.ts +3 -2
  4. package/dist/agents/runs.d.ts.map +1 -1
  5. package/dist/agents/threads.d.ts.map +1 -1
  6. package/dist/ai-cost-groups.d.ts +5 -0
  7. package/dist/ai-cost-groups.d.ts.map +1 -0
  8. package/dist/auth-storage/auth-storage.d.ts +4 -1
  9. package/dist/auth-storage/auth-storage.d.ts.map +1 -1
  10. package/dist/auth-storage/device-authorizations.d.ts +29 -0
  11. package/dist/auth-storage/device-authorizations.d.ts.map +1 -0
  12. package/dist/auth-storage/rows.d.ts +19 -1
  13. package/dist/auth-storage/rows.d.ts.map +1 -1
  14. package/dist/auth-storage/shared.d.ts +1 -1
  15. package/dist/auth-storage/shared.d.ts.map +1 -1
  16. package/dist/index.d.ts +6 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +8327 -5838
  19. package/dist/index.js.map +28 -19
  20. package/dist/migrations.d.ts.map +1 -1
  21. package/dist/objects/index.d.ts +2 -0
  22. package/dist/objects/index.d.ts.map +1 -0
  23. package/dist/{pg-object-query-compiler.d.ts → objects/query-compiler.d.ts} +25 -4
  24. package/dist/objects/query-compiler.d.ts.map +1 -0
  25. package/dist/objects/read-scope.d.ts +17 -0
  26. package/dist/objects/read-scope.d.ts.map +1 -0
  27. package/dist/objects/reader.d.ts +50 -0
  28. package/dist/objects/reader.d.ts.map +1 -0
  29. package/dist/objects/rows.d.ts +47 -0
  30. package/dist/objects/rows.d.ts.map +1 -0
  31. package/dist/objects/selected-reader.d.ts +8 -0
  32. package/dist/objects/selected-reader.d.ts.map +1 -0
  33. package/dist/{pg-object-storage.d.ts → objects/storage.d.ts} +12 -20
  34. package/dist/objects/storage.d.ts.map +1 -0
  35. package/dist/pg-ai-cost-storage.d.ts +2 -1
  36. package/dist/pg-ai-cost-storage.d.ts.map +1 -1
  37. package/dist/pg-ai-limit-storage.d.ts +34 -0
  38. package/dist/pg-ai-limit-storage.d.ts.map +1 -0
  39. package/dist/pg-ai-usage-storage.d.ts +28 -0
  40. package/dist/pg-ai-usage-storage.d.ts.map +1 -1
  41. package/dist/pg-execution-storage.d.ts +3 -2
  42. package/dist/pg-execution-storage.d.ts.map +1 -1
  43. package/dist/share-grant-storage.d.ts +11 -0
  44. package/dist/share-grant-storage.d.ts.map +1 -0
  45. package/dist/share-session-storage.d.ts +11 -0
  46. package/dist/share-session-storage.d.ts.map +1 -0
  47. package/dist/storage-errors.d.ts +2 -0
  48. package/dist/storage-errors.d.ts.map +1 -1
  49. package/dist/transactions.d.ts +9 -2
  50. package/dist/transactions.d.ts.map +1 -1
  51. package/package.json +4 -4
  52. package/src/agents/rows.ts +38 -9
  53. package/src/agents/runs.ts +148 -11
  54. package/src/agents/threads.ts +1 -17
  55. package/src/ai-cost-groups.ts +102 -0
  56. package/src/auth-storage/auth-storage.ts +84 -0
  57. package/src/auth-storage/device-authorizations.ts +131 -0
  58. package/src/auth-storage/rows.ts +41 -0
  59. package/src/auth-storage/shared.ts +1 -0
  60. package/src/index.ts +24 -4
  61. package/src/migrations/029-model-accounting.sql +24 -0
  62. package/src/migrations/030-ai-usage-limits.sql +94 -0
  63. package/src/migrations/031-subagent-runs.sql +97 -0
  64. package/src/migrations/032-conversation-run-spec.sql +23 -0
  65. package/src/migrations/033-retire-agent-definitions.sql +28 -0
  66. package/src/migrations/034-device-authorizations.sql +24 -0
  67. package/src/migrations/035-share-grants.sql +57 -0
  68. package/src/migrations/036-share-sessions.sql +173 -0
  69. package/src/migrations.ts +22 -0
  70. package/src/objects/index.ts +1 -0
  71. package/src/{pg-object-query-compiler.ts → objects/query-compiler.ts} +185 -100
  72. package/src/objects/read-scope.ts +324 -0
  73. package/src/objects/reader.ts +604 -0
  74. package/src/objects/rows.ts +146 -0
  75. package/src/objects/selected-reader.ts +118 -0
  76. package/src/objects/storage.ts +305 -0
  77. package/src/pg-ai-cost-storage.ts +71 -24
  78. package/src/pg-ai-limit-storage.ts +901 -0
  79. package/src/pg-ai-usage-storage.ts +34 -0
  80. package/src/pg-execution-storage.ts +21 -2
  81. package/src/pg-workflow-run-storage.ts +8 -8
  82. package/src/share-grant-storage.ts +236 -0
  83. package/src/share-session-storage.ts +127 -0
  84. package/src/storage-errors.ts +6 -0
  85. package/src/transactions.ts +46 -5
  86. package/dist/pg-object-query-compiler.d.ts.map +0 -1
  87. package/dist/pg-object-storage.d.ts.map +0 -1
  88. package/src/pg-object-storage.ts +0 -734
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAGV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAmE3B,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,2BAA2B,wBAAwB,CAAA;AAEhE,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAE1F;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC/D,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAAC,wBAAwB,CAAC,CAEzC;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,GACjB,SAAS,eAAe,EAAE,CAQ5B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAA;CAC5D,GAAG,eAAe,CAqBlB;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKrD;AA6KD,eAAO,MAAM,yBAAyB,wCAgCpC,CAAA"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAGV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAiF3B,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,2BAA2B,wBAAwB,CAAA;AAEhE,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAE1F;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC/D,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAAC,wBAAwB,CAAC,CAEzC;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,GACjB,SAAS,eAAe,EAAE,CAQ5B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAA;CAC5D,GAAG,eAAe,CAqBlB;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKrD;AA6KD,eAAO,MAAM,yBAAyB,wCAwCpC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { PgObjectStorage } from "./storage";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
@@ -47,9 +47,30 @@ type CompiledOrderField = {
47
47
  };
48
48
  export declare function compilePgObjectQuery(projectId: string, query: ObjectQuery, options?: {
49
49
  includeTotal?: boolean;
50
+ source?: PgObjectQuerySource;
50
51
  }): CompiledPgObjectQuery;
51
- export declare function compilePgObjectCountQuery(projectId: string, query: ObjectQuery): CompiledPgScalarQuery;
52
- export declare function compilePgObjectExistsQuery(projectId: string, query: ObjectQuery): CompiledPgScalarQuery;
53
- export declare function compilePgObjectFacetQuery(projectId: string, query: ObjectQuery, propertyId: string, limit: number): CompiledPgFacetQuery;
52
+ /** Physical relations used by the PostgreSQL object-query compiler. */
53
+ export interface PgObjectQuerySource {
54
+ readonly objectsTable: string;
55
+ readonly linksTable: string;
56
+ /** Wrap a terminal SELECT without its own WITH clause; the selected source owns the only WITH. */
57
+ wrapStatement(sql: string, args?: readonly unknown[]): {
58
+ readonly sql: string;
59
+ readonly args: unknown[];
60
+ };
61
+ wrapQuery(query: CompiledPgObjectQuery): CompiledPgObjectQuery;
62
+ }
63
+ /** Prefix an optional query source, then assign PostgreSQL positional placeholders. */
64
+ export declare function compilePgObjectStatement(sql: string, args?: readonly unknown[], source?: PgObjectQuerySource): CompiledPgScalarQuery;
65
+ export declare const DEFAULT_OBJECT_QUERY_SOURCE: PgObjectQuerySource;
66
+ export declare function compilePgObjectCountQuery(projectId: string, query: ObjectQuery, options?: {
67
+ source?: PgObjectQuerySource;
68
+ }): CompiledPgScalarQuery;
69
+ export declare function compilePgObjectExistsQuery(projectId: string, query: ObjectQuery, options?: {
70
+ source?: PgObjectQuerySource;
71
+ }): CompiledPgScalarQuery;
72
+ export declare function compilePgObjectFacetQuery(projectId: string, query: ObjectQuery, propertyId: string, limit: number, options?: {
73
+ source?: PgObjectQuerySource;
74
+ }): CompiledPgFacetQuery;
54
75
  export {};
55
- //# sourceMappingURL=pg-object-query-compiler.d.ts.map
76
+ //# sourceMappingURL=query-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-compiler.d.ts","sourceRoot":"","sources":["../../src/objects/query-compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { CompiledSelectedObjectReadScope } from "@sixb/core/storage";
2
+ import { type PgObjectQuerySource } from "./query-compiler";
3
+ export interface PgSelectedObjectReadSource extends PgObjectQuerySource {
4
+ readonly objectPropertyPermissionsTable: string;
5
+ readonly traversalProbe: {
6
+ readonly sql: string;
7
+ readonly args: readonly unknown[];
8
+ };
9
+ }
10
+ /**
11
+ * Prepare one immutable selected scope as live, path-sensitive PostgreSQL relations.
12
+ *
13
+ * The complete compiled scope is serialized once. Every statement receives that one JSONB
14
+ * document and the bound project id, keeping the parameter count constant as selections grow.
15
+ */
16
+ export declare function compilePgSelectedObjectReadSource(projectId: string, scope: CompiledSelectedObjectReadScope, maxTraversalFacts: number): PgSelectedObjectReadSource;
17
+ //# sourceMappingURL=read-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-scope.d.ts","sourceRoot":"","sources":["../../src/objects/read-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,QAAQ,CAAC,8BAA8B,EAAE,MAAM,CAAA;IAC/C,QAAQ,CAAC,cAAc,EAAE;QACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;KAClC,CAAA;CACF;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,+BAA+B,EACtC,iBAAiB,EAAE,MAAM,GACxB,0BAA0B,CAsD5B"}
@@ -0,0 +1,50 @@
1
+ import type { CountObjectsInput, CountObjectsResult, ExistsObjectsInput, ExistsObjectsResult, FacetObjectsInput, FacetObjectsResult, LinkBatchKey, LinkDirection, ObjectBatchKey, ObjectLinkRow, ObjectReadStorage, ObjectRow, QueryObjectLinksInput, QueryObjectLinksResult, QueryObjectsInput, QueryObjectsResult } from "@sixb/core/storage";
2
+ import type { SQLClient } from "../pg-client";
3
+ import { type PgObjectQuerySource } from "./query-compiler";
4
+ import type { PgSelectedObjectReadSource } from "./read-scope";
5
+ export declare class PgObjectReader {
6
+ private readonly sql;
7
+ private readonly source;
8
+ constructor(sql: SQLClient, source: PgObjectQuerySource | PgSelectedObjectReadSource);
9
+ queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult>;
10
+ countObjects(params: CountObjectsInput): Promise<CountObjectsResult>;
11
+ existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult>;
12
+ facetObjects(params: FacetObjectsInput): Promise<FacetObjectsResult>;
13
+ getByPrimaryId(params: {
14
+ projectId: string;
15
+ objectTypeId: string;
16
+ primaryId: string;
17
+ }): Promise<ObjectRow | null>;
18
+ selectsObjectProperties(params: Parameters<ObjectReadStorage["selectsObjectProperties"]>[0]): Promise<readonly boolean[]>;
19
+ listLinks(params: {
20
+ projectId: string;
21
+ objectTypeId: string;
22
+ objectId: string;
23
+ linkId?: string;
24
+ direction?: LinkDirection;
25
+ }): Promise<readonly ObjectLinkRow[]>;
26
+ getByPrimaryIdBatch(params: {
27
+ projectId: string;
28
+ items: readonly {
29
+ objectTypeId: string;
30
+ primaryId: string;
31
+ }[];
32
+ }): Promise<Map<ObjectBatchKey, ObjectRow>>;
33
+ listLinksBatch(params: {
34
+ projectId: string;
35
+ direction?: LinkDirection;
36
+ items: readonly {
37
+ objectTypeId: string;
38
+ objectId: string;
39
+ linkId: string;
40
+ }[];
41
+ }): Promise<Map<LinkBatchKey, ObjectLinkRow[]>>;
42
+ queryLinks(params: QueryObjectLinksInput): Promise<QueryObjectLinksResult>;
43
+ list(params: Parameters<ObjectReadStorage["list"]>[0]): Promise<{
44
+ objects: readonly ObjectRow[];
45
+ hasMore: boolean;
46
+ total: number;
47
+ }>;
48
+ }
49
+ export declare function assertLinkQueryLimit(limit: number): void;
50
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/objects/reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EAEd,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAA;AAC3D,OAAO,EAOL,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAgB9D,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,mBAAmB,GAAG,0BAA0B;IAGrE,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiCpE,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAapE,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAYvE,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsBpE,cAAc,CAAC,MAAM,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAA;QACjB,YAAY,EAAE,MAAM,CAAA;QACpB,SAAS,EAAE,MAAM,CAAA;KAClB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoBvB,uBAAuB,CAC3B,MAAM,EAAE,UAAU,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,GAClE,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IAqCxB,SAAS,CAAC,MAAM,EAAE;QACtB,SAAS,EAAE,MAAM,CAAA;QACjB,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,aAAa,CAAA;KAC1B,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAiC/B,mBAAmB,CAAC,MAAM,EAAE;QAChC,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,SAAS;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC9D,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IA+BrC,cAAc,CAAC,MAAM,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,aAAa,CAAA;QACzB,KAAK,EAAE,SAAS;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC7E,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;IAuFzC,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAuG1E,IAAI,CACR,MAAM,EAAE,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/C,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CA+E/E;AAuDD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxD"}
@@ -0,0 +1,47 @@
1
+ import type { ObjectLinkRow, ObjectRow } from "@sixb/core/storage";
2
+ export declare function rowToObject(row: ObjectDatabaseRow): ObjectRow;
3
+ export declare function queryRowToObject(row: ObjectQueryDatabaseRow): ObjectRow;
4
+ export declare function rowToLink(row: LinkDatabaseRow): ObjectLinkRow;
5
+ export declare function linkIdentity(link: ObjectLinkRow): string;
6
+ export interface ObjectDatabaseRow {
7
+ project_id: string;
8
+ object_type_id: string;
9
+ primary_id: string;
10
+ properties: unknown;
11
+ created_at: Date | string;
12
+ updated_at: Date | string;
13
+ version: number;
14
+ last_commit_id: string;
15
+ }
16
+ export interface ObjectQueryDatabaseRow extends ObjectDatabaseRow {
17
+ _cursor_properties?: unknown;
18
+ /** `jsonb_build_object(linkId, value, ...)` from an `expand` pushdown; absent otherwise. */
19
+ _expand?: unknown;
20
+ }
21
+ export interface ObjectBatchDatabaseRow extends ObjectDatabaseRow {
22
+ _batch_index: number;
23
+ }
24
+ export interface PropertyPermissionBatchDatabaseRow {
25
+ _batch_index: number;
26
+ }
27
+ export interface FacetDatabaseRow {
28
+ value_type: string | null;
29
+ value_text: string | null;
30
+ count: string | number | bigint;
31
+ }
32
+ export interface LinkDatabaseRow {
33
+ project_id: string;
34
+ source_type_id: string;
35
+ source_id: string;
36
+ link_id: string;
37
+ target_type_id: string;
38
+ target_id: string;
39
+ properties: unknown | null;
40
+ created_at: Date | string;
41
+ updated_at: Date | string;
42
+ last_commit_id: string;
43
+ }
44
+ export interface LinkBatchDatabaseRow extends LinkDatabaseRow {
45
+ _batch_index: number;
46
+ }
47
+ //# sourceMappingURL=rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/objects/rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACb,SAAS,EAEV,MAAM,oBAAoB,CAAA;AAE3B,wBAAgB,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,SAAS,CAW7D;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,sBAAsB,GAAG,SAAS,CAIvE;AA8CD,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,aAAa,CAa7D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAQxD;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,kCAAkC;IACjD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,YAAY,EAAE,MAAM,CAAA;CACrB"}
@@ -0,0 +1,8 @@
1
+ import type { CompiledSelectedObjectReadScope, ObjectQueryCapabilities, ObjectReadExecutionLimits, ObjectReadStorage } from "@sixb/core/storage";
2
+ import { type PgStoreClient } from "../transactions";
3
+ export declare function createPgSelectedReader(sql: PgStoreClient, params: {
4
+ projectId: string;
5
+ scope: CompiledSelectedObjectReadScope;
6
+ limits: ObjectReadExecutionLimits;
7
+ }, queryCapabilities: () => ObjectQueryCapabilities): ObjectReadStorage;
8
+ //# sourceMappingURL=selected-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selected-reader.d.ts","sourceRoot":"","sources":["../../src/objects/selected-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+BAA+B,EAC/B,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAS3B,OAAO,EAAE,KAAK,aAAa,EAAkC,MAAM,iBAAiB,CAAA;AAKpF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,+BAA+B,CAAA;IACtC,MAAM,EAAE,yBAAyB,CAAA;CAClC,EACD,iBAAiB,EAAE,MAAM,uBAAuB,GAC/C,iBAAiB,CA4EnB"}
@@ -1,26 +1,16 @@
1
- import type { CountObjectsInput, CountObjectsResult, ExistsObjectsInput, ExistsObjectsResult, FacetObjectsInput, FacetObjectsResult, LinkBatchKey, LinkDirection, ObjectBatchKey, ObjectLinkRow, ObjectQueryCapabilities, ObjectRow, ObjectStorage, QueryObjectLinksInput, QueryObjectLinksResult, QueryObjectsInput, QueryObjectsResult } from "@sixb/core/storage";
2
- import type { PgStoreClient } from "./transactions";
3
- /**
4
- * PostgreSQL-based ObjectStorage implementation.
5
- *
6
- * Stores object projections and links. V1 object-query IR pushdown covers the
7
- * scalar JSONB-property and link-traversal subset declared by queryCapabilities().
8
- *
9
- * Requires `search_path` to be set to the Sixb schema on the connection.
10
- *
11
- * JSONB handling notes (Bun SQL specifics):
12
- * - Writes use `${JSON.stringify(v)}::text::jsonb`. The `::text` forces the
13
- * text wire type so that `::jsonb` parses the JSON text into a proper JSONB
14
- * value (object, number, etc.) instead of a JSONB string literal.
15
- * - The `@>` containment operator receives a plain JS object which Bun SQL
16
- * auto-serialises as JSONB.
17
- * - Reads return JSONB as native JS types (objects, numbers, booleans) when
18
- * the data was stored correctly.
19
- */
1
+ import type { CompiledSelectedObjectReadScope, CountObjectsInput, CountObjectsResult, ExistsObjectsInput, ExistsObjectsResult, FacetObjectsInput, FacetObjectsResult, LinkBatchKey, LinkDirection, ObjectBatchKey, ObjectLinkRow, ObjectQueryCapabilities, ObjectReadExecutionLimits, ObjectReadStorage, ObjectRow, ObjectStorage, QueryObjectLinksInput, QueryObjectLinksResult, QueryObjectsInput, QueryObjectsResult } from "@sixb/core/storage";
2
+ import type { PgStoreClient } from "../transactions";
3
+ /** PostgreSQL object provider; interactive reads share one source-aware reader. */
20
4
  export declare class PgObjectStorage implements ObjectStorage {
21
5
  private readonly sql;
6
+ private readonly reader;
22
7
  constructor(sql: PgStoreClient);
23
8
  queryCapabilities(): ObjectQueryCapabilities;
9
+ createSelectedReadScope(params: {
10
+ projectId: string;
11
+ scope: CompiledSelectedObjectReadScope;
12
+ limits: ObjectReadExecutionLimits;
13
+ }): ObjectReadStorage;
24
14
  queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult>;
25
15
  countObjects(params: CountObjectsInput): Promise<CountObjectsResult>;
26
16
  existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult>;
@@ -30,6 +20,7 @@ export declare class PgObjectStorage implements ObjectStorage {
30
20
  objectTypeId: string;
31
21
  primaryId: string;
32
22
  }): Promise<ObjectRow | null>;
23
+ selectsObjectProperties(params: Parameters<ObjectReadStorage["selectsObjectProperties"]>[0]): Promise<readonly boolean[]>;
33
24
  listLinks(params: {
34
25
  projectId: string;
35
26
  objectTypeId: string;
@@ -46,6 +37,7 @@ export declare class PgObjectStorage implements ObjectStorage {
46
37
  }): Promise<Map<ObjectBatchKey, ObjectRow>>;
47
38
  listLinksBatch(params: {
48
39
  projectId: string;
40
+ direction?: LinkDirection;
49
41
  items: readonly {
50
42
  objectTypeId: string;
51
43
  objectId: string;
@@ -88,4 +80,4 @@ export declare class PgObjectStorage implements ObjectStorage {
88
80
  total: number;
89
81
  }>;
90
82
  }
91
- //# sourceMappingURL=pg-object-storage.d.ts.map
83
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/objects/storage.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { type AiAccountingOverview, type AiCostStorage, type AiCostSummary, type AiModelCallCostRecord, type ListAiModelCallAccountingInput, type ListAiModelCallAccountingResult, type QueryAiAccountingOverviewInput, type SummarizeAiCostExecutionsInput } from "@sixb/core/storage";
1
+ import { type AiAccountingOverview, type AiCostStorage, type AiCostSummary, type AiModelCallCostRecord, type ListAiModelCallAccountingInput, type ListAiModelCallAccountingResult, type ListAiModelCallGroupsInput, type ListAiModelCallGroupsResult, type QueryAiAccountingOverviewInput, type SummarizeAiCostExecutionsInput } from "@sixb/core/storage";
2
2
  import type { PgStoreClient } from "./transactions";
3
3
  /** PostgreSQL-backed immutable valuations stored in one append-only table. */
4
4
  export declare class PgAiCostStorage implements AiCostStorage {
5
5
  private readonly sql;
6
6
  constructor(sql: PgStoreClient);
7
+ listModelCallGroups(input: ListAiModelCallGroupsInput): Promise<ListAiModelCallGroupsResult>;
7
8
  recordModelCallCost(input: AiModelCallCostRecord): Promise<void>;
8
9
  summarizeExecutions(input: SummarizeAiCostExecutionsInput): Promise<readonly AiCostSummary[]>;
9
10
  queryProjectOverview(input: QueryAiAccountingOverviewInput): Promise<AiAccountingOverview>;
@@ -1 +1 @@
1
- {"version":3,"file":"pg-ai-cost-storage.d.ts","sourceRoot":"","sources":["../src/pg-ai-cost-storage.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAElB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAE1B,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,8EAA8E;AAC9E,qBAAa,eAAgB,YAAW,aAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,aAAa;IAEzC,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BhE,mBAAmB,CACvB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAsB9B,oBAAoB,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA6G1F,cAAc,CAClB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,+BAA+B,CAAC;CAsF5C"}
1
+ {"version":3,"file":"pg-ai-cost-storage.d.ts","sourceRoot":"","sources":["../src/pg-ai-cost-storage.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAElB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAE1B,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,8EAA8E;AAC9E,qBAAa,eAAgB,YAAW,aAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,aAAa;IAEzC,mBAAmB,CACvB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC;IAIjC,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BhE,mBAAmB,CACvB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAsB9B,oBAAoB,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoH1F,cAAc,CAClB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,+BAA+B,CAAC;CAwF5C"}
@@ -0,0 +1,34 @@
1
+ import type { AiLimitPolicy, AiLimitPolicyStatus, AiLimitStorage, AiModelCallReservation, CreateAiLimitPolicyInput, DeleteAiLimitPolicyInput, GetAiLimitPolicyInput, ListAiLimitPoliciesInput, ListAiLimitPolicyStatusesInput, MarkAiModelCallReservationUnknownInput, ReconcileAiModelCallInput, RecordAiModelCallLimitActualsInput, ReserveAiModelCallInput, ReserveAiModelCallResult, UpdateAiLimitPolicyInput } from "@sixb/core/storage";
2
+ import { type PgStoreClient } from "./transactions";
3
+ /** PostgreSQL-backed editable AI limits and atomic model-call reservations. */
4
+ export declare class PgAiLimitStorage implements AiLimitStorage {
5
+ private readonly sql;
6
+ private readonly operations;
7
+ constructor(sql: PgStoreClient);
8
+ /** @internal Keep queued work inside the lifetime of the owning SQL transaction. */
9
+ settleOperations(): Promise<void>;
10
+ createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy>;
11
+ updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy>;
12
+ deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean>;
13
+ getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null>;
14
+ listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]>;
15
+ listPolicyStatuses(input: ListAiLimitPolicyStatusesInput): Promise<readonly AiLimitPolicyStatus[]>;
16
+ reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult>;
17
+ recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void>;
18
+ reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation>;
19
+ markReservationUnknown(input: MarkAiModelCallReservationUnknownInput): Promise<AiModelCallReservation>;
20
+ private withProjectLock;
21
+ private policyRows;
22
+ private requirePolicy;
23
+ private statusForPolicy;
24
+ private changeCounters;
25
+ private moveEstimateCounters;
26
+ private reconcileEstimateCounters;
27
+ private insertReservation;
28
+ private updateReservation;
29
+ private findReservation;
30
+ private accountingEntries;
31
+ private requireAccountingEntry;
32
+ private assertExecutionExists;
33
+ }
34
+ //# sourceMappingURL=pg-ai-limit-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-ai-limit-storage.d.ts","sourceRoot":"","sources":["../src/pg-ai-limit-storage.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAEV,aAAa,EACb,mBAAmB,EAGnB,cAAc,EAEd,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,kCAAkC,EAClC,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAoB,KAAK,aAAa,EAAoB,MAAM,gBAAgB,CAAA;AAEvF,+EAA+E;AAC/E,qBAAa,gBAAiB,YAAW,cAAc;IAGzC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;gBAE3B,GAAG,EAAE,aAAa;IAE/C,oFAAoF;IACpF,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,YAAY,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBrE,YAAY,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBrE,YAAY,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAY/D,SAAS,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAStE,YAAY,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAOhF,kBAAkB,CACtB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAapC,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAqGnF,sBAAsB,CAAC,KAAK,EAAE,kCAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0ChF,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA+BrF,sBAAsB,CAC1B,KAAK,EAAE,sCAAsC,GAC5C,OAAO,CAAC,sBAAsB,CAAC;YAepB,eAAe;IAe7B,OAAO,CAAC,UAAU;YAYJ,aAAa;YAeb,eAAe;YA2Cf,cAAc;YA8Cd,oBAAoB;YA2BpB,yBAAyB;YAmCzB,iBAAiB;YAkBjB,iBAAiB;YAgBjB,eAAe;YAmBf,iBAAiB;YA8CjB,sBAAsB;YAwCtB,qBAAqB;CAgBpC"}
@@ -1,3 +1,4 @@
1
+ import type { ReadonlyJsonObject } from "@sixb/core/storage";
1
2
  import { type AiModelCallUsageRecord, type AiUsageExecutionSummary, type AiUsageStorage, type GetLatestAiModelCallForExecutionInput, type RecordAiModelCallInput, type RecordAiModelCallResult, type SummarizeAiUsageExecutionInput, type SummarizeAiUsageExecutionsInput } from "@sixb/core/storage";
2
3
  import { type PgStoreClient } from "./transactions";
3
4
  /** PostgreSQL-backed append-only model-call usage ledger. */
@@ -14,4 +15,31 @@ export declare class PgAiUsageStorage implements AiUsageStorage {
14
15
  private executionRows;
15
16
  private assertExecutionExists;
16
17
  }
18
+ interface AiUsageRow {
19
+ readonly project_id: string;
20
+ readonly id: string;
21
+ readonly execution_id: string;
22
+ readonly attempt: number | string;
23
+ readonly call_id: string;
24
+ readonly provider_id: string;
25
+ readonly provider_ids: Record<string, unknown> | string | null;
26
+ readonly requested_model_id: string;
27
+ readonly requested_reasoning: string | Record<string, unknown> | null;
28
+ readonly response_model_id: string | null;
29
+ readonly response_id: string;
30
+ readonly input_tokens: number | string | null;
31
+ readonly output_tokens: number | string | null;
32
+ readonly total_tokens: number | string | null;
33
+ readonly uncached_input_tokens: number | string | null;
34
+ readonly cache_read_input_tokens: number | string | null;
35
+ readonly cache_write_input_tokens: number | string | null;
36
+ readonly text_output_tokens: number | string | null;
37
+ readonly reasoning_output_tokens: number | string | null;
38
+ readonly reporting_status: AiModelCallUsageRecord["usage"]["reportingStatus"];
39
+ readonly raw_usage: ReadonlyJsonObject | string | null;
40
+ readonly occurred_at: Date | string;
41
+ readonly recorded_at: Date | string;
42
+ }
43
+ export declare function requestedReasoningFromRow(value: Exclude<AiUsageRow["requested_reasoning"], null>): AiModelCallUsageRecord["requestedReasoning"];
44
+ export {};
17
45
  //# sourceMappingURL=pg-ai-usage-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pg-ai-usage-storage.d.ts","sourceRoot":"","sources":["../src/pg-ai-usage-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EAInB,KAAK,qCAAqC,EAE1C,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,gBAAgB,CAAA;AAErE,6DAA6D;AAC7D,qBAAa,gBAAiB,YAAW,cAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,aAAa;IAEzC,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgFhF,kBAAkB,CACtB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,uBAAuB,CAAC;IAQ7B,qBAAqB,CACzB,KAAK,EAAE,qCAAqC,GAC3C,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAYnC,mBAAmB,CACvB,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC;YAShC,oBAAoB;YAkBpB,WAAW;YAYX,WAAW;IA6BzB,OAAO,CAAC,aAAa;YAiBP,qBAAqB;CAgBpC"}
1
+ {"version":3,"file":"pg-ai-usage-storage.d.ts","sourceRoot":"","sources":["../src/pg-ai-usage-storage.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import type { CreateExecutionInput, ExecutionRecord, ExecutionStorage } from "@sixb/core/storage";
1
+ import type { CreateExecutionInput, ExecutionRecord, ExecutionStorage, ShareSessionStorage } from "@sixb/core/storage";
2
2
  import type { PgAuthStorage } from "./auth-storage";
3
3
  import type { PgStoreClient } from "./transactions";
4
4
  export declare class PgExecutionStorage implements ExecutionStorage {
5
5
  private readonly sql;
6
6
  private readonly auth;
7
- constructor(sql: PgStoreClient, auth: PgAuthStorage);
7
+ private readonly shareSessions;
8
+ constructor(sql: PgStoreClient, auth: PgAuthStorage, shareSessions: Pick<ShareSessionStorage, "getById">);
8
9
  create(input: CreateExecutionInput): Promise<ExecutionRecord>;
9
10
  getById(params: {
10
11
  readonly projectId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pg-execution-storage.d.ts","sourceRoot":"","sources":["../src/pg-execution-storage.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,qBAAa,kBAAmB,YAAW,gBAAgB;IAEvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa;IAGhC,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsE7D,OAAO,CAAC,MAAM,EAAE;QACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KACpB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CAQpC"}
1
+ {"version":3,"file":"pg-execution-storage.d.ts","sourceRoot":"","sources":["../src/pg-execution-storage.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,qBAAa,kBAAmB,YAAW,gBAAgB;IAEvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAGhE,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IA6E7D,OAAO,CAAC,MAAM,EAAE;QACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KACpB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CAQpC"}
@@ -0,0 +1,11 @@
1
+ import type { CreateShareGrantInput, GetShareGrantByIdInput, ListShareGrantsInput, ListShareGrantsResult, RevokeShareGrantInput, ShareGrantRecord, ShareGrantStorage } from "@sixb/core/storage";
2
+ import type { PgStoreClient } from "./transactions";
3
+ export declare class PgShareGrantStorage implements ShareGrantStorage {
4
+ private readonly sql;
5
+ constructor(sql: PgStoreClient);
6
+ create(input: CreateShareGrantInput): Promise<ShareGrantRecord>;
7
+ getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null>;
8
+ list(input: ListShareGrantsInput): Promise<ListShareGrantsResult>;
9
+ revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null>;
10
+ }
11
+ //# sourceMappingURL=share-grant-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-grant-storage.d.ts","sourceRoot":"","sources":["../src/share-grant-storage.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,qBAAa,mBAAoB,YAAW,iBAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,aAAa;IAEzC,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqD/D,OAAO,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAUxE,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA8CjE,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAqB7E"}
@@ -0,0 +1,11 @@
1
+ import type { CreateShareSessionInput, GetShareSessionByIdInput, RenewShareSessionIfValidInput, RevokeShareSessionInput, ShareSessionRecord, ShareSessionStorage } from "@sixb/core/storage";
2
+ import type { PgStoreClient } from "./transactions";
3
+ export declare class PgShareSessionStorage implements ShareSessionStorage {
4
+ private readonly sql;
5
+ constructor(sql: PgStoreClient);
6
+ create(input: CreateShareSessionInput): Promise<ShareSessionRecord>;
7
+ getById(input: GetShareSessionByIdInput): Promise<ShareSessionRecord | null>;
8
+ renewIfValid(input: RenewShareSessionIfValidInput): Promise<ShareSessionRecord | null>;
9
+ revoke(input: RevokeShareSessionInput): Promise<ShareSessionRecord | null>;
10
+ }
11
+ //# sourceMappingURL=share-session-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-session-storage.d.ts","sourceRoot":"","sources":["../src/share-session-storage.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,qBAAa,qBAAsB,YAAW,mBAAmB;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,aAAa;IAEzC,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiCnE,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAS5E,YAAY,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAkBtF,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CAgBjF"}
@@ -2,6 +2,8 @@
2
2
  export declare function pgErrorCode(error: unknown): string | undefined;
3
3
  /** True when the error is a PostgreSQL unique-constraint violation (SQLSTATE 23505). */
4
4
  export declare function isUniqueViolation(error: unknown): boolean;
5
+ /** True when the error is a PostgreSQL foreign-key violation (SQLSTATE 23503). */
6
+ export declare function isForeignKeyViolation(error: unknown): boolean;
5
7
  /**
6
8
  * True when the error is a transient transaction-rollback conflict that is safe to retry by
7
9
  * replaying the transaction — a serialization failure (SQLSTATE 40001) or a deadlock (40P01).
@@ -1 +1 @@
1
- {"version":3,"file":"storage-errors.d.ts","sourceRoot":"","sources":["../src/storage-errors.ts"],"names":[],"mappings":"AAgCA,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ9D;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASzD"}
1
+ {"version":3,"file":"storage-errors.d.ts","sourceRoot":"","sources":["../src/storage-errors.ts"],"names":[],"mappings":"AAiCA,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ9D;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASzD"}
@@ -1,10 +1,17 @@
1
1
  import type { SQL, SQLClient } from "./pg-client";
2
2
  export type PgStoreClient = SQL | SQLClient;
3
3
  export interface RunPgTransactionOptions {
4
- /** Open the transaction at `SERIALIZABLE`; omit for the server default (`READ COMMITTED`). */
5
- readonly isolation?: "serializable";
4
+ /** Open the transaction at an explicit isolation; omit for the server default. */
5
+ readonly isolation?: "repeatableRead" | "serializable";
6
6
  }
7
7
  export declare function runPgTransaction<T>(sql: PgStoreClient, run: (tx: SQLClient) => Promise<T>, options?: RunPgTransactionOptions): Promise<T>;
8
+ /**
9
+ * Run a multi-statement read against one proven PostgreSQL snapshot.
10
+ *
11
+ * A provider-owned repeatable-read or serializable transaction may be reused. An external
12
+ * transaction client is rejected because postgres.js does not expose its current isolation.
13
+ */
14
+ export declare function runPgRepeatableReadTransaction<T>(sql: PgStoreClient, run: (tx: SQLClient) => Promise<T>): Promise<T>;
8
15
  export declare function authLockKey(kind: string, ...parts: readonly string[]): string;
9
16
  export declare function lockAdvisoryKeys(sql: SQLClient, keys: readonly string[]): Promise<void>;
10
17
  //# sourceMappingURL=transactions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,SAAS,CAAA;AAE3C,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAA;CACpC;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAClC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE7E;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7F"}
1
+ {"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,SAAS,CAAA;AAE3C,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAAA;CACvD;AAMD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAClC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAAC,CAAC,EACpD,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE7E;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/pg",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "PostgreSQL storage provider for Sixb",
5
5
  "keywords": [
6
6
  "sixb",
@@ -33,17 +33,17 @@
33
33
  "scripts": {
34
34
  "build": "bun ../../scripts/build-package.ts",
35
35
  "typecheck": "tsc --noEmit",
36
- "test:e2e": "bun test --preload ./tests/setup.ts ./tests/*.e2e.ts",
36
+ "test:e2e": "bun ../../scripts/ci-guard.ts --stall 90 --max 600 bun test --preload ./tests/setup.ts ./tests/*.e2e.ts",
37
37
  "prepack": "bun run build"
38
38
  },
39
39
  "dependencies": {
40
40
  "postgres": "^3.4.5"
41
41
  },
42
42
  "peerDependencies": {
43
- "@sixb/core": "0.1.6"
43
+ "@sixb/core": "0.1.8"
44
44
  },
45
45
  "devDependencies": {
46
- "@sixb/core": "0.1.6",
46
+ "@sixb/core": "0.1.8",
47
47
  "@types/bun": "latest",
48
48
  "typescript": "^5.7.0"
49
49
  },
@@ -7,7 +7,10 @@ import {
7
7
  type AgentRunDiagnostic,
8
8
  type AgentRunRecord,
9
9
  type AgentThreadRecord,
10
+ type ConversationAgentRunSpec,
10
11
  coerceAgentRunFinishReason,
12
+ type SubagentRunResult,
13
+ type SubagentRunSpec,
11
14
  } from "@sixb/core/storage"
12
15
  import type { SQLClient, SqlParameter } from "../pg-client"
13
16
 
@@ -17,7 +20,6 @@ import type { SQLClient, SqlParameter } from "../pg-client"
17
20
  export interface AgentThreadRow {
18
21
  project_id: string
19
22
  id: string
20
- agent_id: string
21
23
  owner_principal_type: Principal["type"]
22
24
  owner_principal_id: string
23
25
  title: string | null
@@ -33,9 +35,13 @@ export interface AgentRunRow {
33
35
  project_id: string
34
36
  id: string
35
37
  execution_id: string
36
- thread_id: string
37
- agent_id: string
38
- trigger_message_id: string
38
+ kind: AgentRunRecord["kind"]
39
+ thread_id: string | null
40
+ trigger_message_id: string | null
41
+ parent_run_id: string | null
42
+ spawn_key: string | null
43
+ spec: ConversationAgentRunSpec | SubagentRunSpec | string | null
44
+ result: SubagentRunResult | string | null
39
45
  requester_group_ids: string[] | string
40
46
  status: AgentRunRecord["status"]
41
47
  model_id: string | null
@@ -89,7 +95,6 @@ export function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {
89
95
  return {
90
96
  id: row.id,
91
97
  projectId: row.project_id,
92
- agentId: row.agent_id,
93
98
  ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },
94
99
  title: row.title ?? undefined,
95
100
  status: row.status,
@@ -102,13 +107,10 @@ export function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {
102
107
  }
103
108
 
104
109
  export function rowToRunRecord(row: AgentRunRow): AgentRunRecord {
105
- return {
110
+ const base = {
106
111
  id: row.id,
107
112
  projectId: row.project_id,
108
113
  executionId: row.execution_id,
109
- threadId: row.thread_id,
110
- agentId: row.agent_id,
111
- triggerMessageId: row.trigger_message_id,
112
114
  requesterGroupIds:
113
115
  typeof row.requester_group_ids === "string"
114
116
  ? (JSON.parse(row.requester_group_ids) as string[])
@@ -130,6 +132,29 @@ export function rowToRunRecord(row: AgentRunRow): AgentRunRecord {
130
132
  startedAt: row.started_at ? new Date(row.started_at) : undefined,
131
133
  completedAt: row.completed_at ? new Date(row.completed_at) : undefined,
132
134
  }
135
+ if (row.kind === "conversation") {
136
+ if (!row.thread_id || !row.trigger_message_id) {
137
+ throw new Error(`[SixbPg] Conversational Agent run '${row.id}' has invalid persisted fields.`)
138
+ }
139
+ return {
140
+ ...base,
141
+ kind: "conversation",
142
+ threadId: row.thread_id,
143
+ triggerMessageId: row.trigger_message_id,
144
+ ...(row.spec === null ? {} : { spec: parseJsonColumn<ConversationAgentRunSpec>(row.spec) }),
145
+ }
146
+ }
147
+ if (!row.parent_run_id || !row.spawn_key || row.spec === null) {
148
+ throw new Error(`[SixbPg] Subagent run '${row.id}' has invalid persisted fields.`)
149
+ }
150
+ return {
151
+ ...base,
152
+ kind: "subagent",
153
+ parentRunId: row.parent_run_id,
154
+ spawnKey: row.spawn_key,
155
+ spec: parseJsonColumn<SubagentRunSpec>(row.spec),
156
+ ...(row.result === null ? {} : { result: parseJsonColumn<SubagentRunResult>(row.result) }),
157
+ }
133
158
  }
134
159
 
135
160
  export function rowToMessageRecord(row: AgentMessageRow): AgentMessageRecord {
@@ -203,6 +228,10 @@ function normalizeDiagnostics(
203
228
  return typeof value === "string" ? (JSON.parse(value) as AgentRunDiagnostic[]) : value
204
229
  }
205
230
 
231
+ function parseJsonColumn<T>(value: unknown): T {
232
+ return typeof value === "string" ? (JSON.parse(value) as T) : (value as T)
233
+ }
234
+
206
235
  // ── offset pagination (threads / messages order by their own column, not started_at) ─────────────
207
236
 
208
237
  export async function queryAgentList<TRow>(input: {