gitx.do 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/durable-object/object-store.d.ts +113 -0
  4. package/dist/durable-object/object-store.d.ts.map +1 -0
  5. package/dist/durable-object/object-store.js +387 -0
  6. package/dist/durable-object/object-store.js.map +1 -0
  7. package/dist/durable-object/schema.d.ts +17 -0
  8. package/dist/durable-object/schema.d.ts.map +1 -0
  9. package/dist/durable-object/schema.js +43 -0
  10. package/dist/durable-object/schema.js.map +1 -0
  11. package/dist/durable-object/wal.d.ts +111 -0
  12. package/dist/durable-object/wal.d.ts.map +1 -0
  13. package/dist/durable-object/wal.js +200 -0
  14. package/dist/durable-object/wal.js.map +1 -0
  15. package/dist/index.d.ts +24 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +101 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/mcp/adapter.d.ts +231 -0
  20. package/dist/mcp/adapter.d.ts.map +1 -0
  21. package/dist/mcp/adapter.js +502 -0
  22. package/dist/mcp/adapter.js.map +1 -0
  23. package/dist/mcp/sandbox.d.ts +261 -0
  24. package/dist/mcp/sandbox.d.ts.map +1 -0
  25. package/dist/mcp/sandbox.js +983 -0
  26. package/dist/mcp/sandbox.js.map +1 -0
  27. package/dist/mcp/sdk-adapter.d.ts +413 -0
  28. package/dist/mcp/sdk-adapter.d.ts.map +1 -0
  29. package/dist/mcp/sdk-adapter.js +672 -0
  30. package/dist/mcp/sdk-adapter.js.map +1 -0
  31. package/dist/mcp/tools.d.ts +133 -0
  32. package/dist/mcp/tools.d.ts.map +1 -0
  33. package/dist/mcp/tools.js +1604 -0
  34. package/dist/mcp/tools.js.map +1 -0
  35. package/dist/ops/blame.d.ts +148 -0
  36. package/dist/ops/blame.d.ts.map +1 -0
  37. package/dist/ops/blame.js +754 -0
  38. package/dist/ops/blame.js.map +1 -0
  39. package/dist/ops/branch.d.ts +215 -0
  40. package/dist/ops/branch.d.ts.map +1 -0
  41. package/dist/ops/branch.js +608 -0
  42. package/dist/ops/branch.js.map +1 -0
  43. package/dist/ops/commit-traversal.d.ts +209 -0
  44. package/dist/ops/commit-traversal.d.ts.map +1 -0
  45. package/dist/ops/commit-traversal.js +755 -0
  46. package/dist/ops/commit-traversal.js.map +1 -0
  47. package/dist/ops/commit.d.ts +221 -0
  48. package/dist/ops/commit.d.ts.map +1 -0
  49. package/dist/ops/commit.js +606 -0
  50. package/dist/ops/commit.js.map +1 -0
  51. package/dist/ops/merge-base.d.ts +223 -0
  52. package/dist/ops/merge-base.d.ts.map +1 -0
  53. package/dist/ops/merge-base.js +581 -0
  54. package/dist/ops/merge-base.js.map +1 -0
  55. package/dist/ops/merge.d.ts +385 -0
  56. package/dist/ops/merge.d.ts.map +1 -0
  57. package/dist/ops/merge.js +1203 -0
  58. package/dist/ops/merge.js.map +1 -0
  59. package/dist/ops/tag.d.ts +182 -0
  60. package/dist/ops/tag.d.ts.map +1 -0
  61. package/dist/ops/tag.js +608 -0
  62. package/dist/ops/tag.js.map +1 -0
  63. package/dist/ops/tree-builder.d.ts +82 -0
  64. package/dist/ops/tree-builder.d.ts.map +1 -0
  65. package/dist/ops/tree-builder.js +246 -0
  66. package/dist/ops/tree-builder.js.map +1 -0
  67. package/dist/ops/tree-diff.d.ts +243 -0
  68. package/dist/ops/tree-diff.d.ts.map +1 -0
  69. package/dist/ops/tree-diff.js +657 -0
  70. package/dist/ops/tree-diff.js.map +1 -0
  71. package/dist/pack/delta.d.ts +68 -0
  72. package/dist/pack/delta.d.ts.map +1 -0
  73. package/dist/pack/delta.js +343 -0
  74. package/dist/pack/delta.js.map +1 -0
  75. package/dist/pack/format.d.ts +84 -0
  76. package/dist/pack/format.d.ts.map +1 -0
  77. package/dist/pack/format.js +261 -0
  78. package/dist/pack/format.js.map +1 -0
  79. package/dist/pack/full-generation.d.ts +327 -0
  80. package/dist/pack/full-generation.d.ts.map +1 -0
  81. package/dist/pack/full-generation.js +1159 -0
  82. package/dist/pack/full-generation.js.map +1 -0
  83. package/dist/pack/generation.d.ts +118 -0
  84. package/dist/pack/generation.d.ts.map +1 -0
  85. package/dist/pack/generation.js +459 -0
  86. package/dist/pack/generation.js.map +1 -0
  87. package/dist/pack/index.d.ts +181 -0
  88. package/dist/pack/index.d.ts.map +1 -0
  89. package/dist/pack/index.js +552 -0
  90. package/dist/pack/index.js.map +1 -0
  91. package/dist/refs/branch.d.ts +224 -0
  92. package/dist/refs/branch.d.ts.map +1 -0
  93. package/dist/refs/branch.js +170 -0
  94. package/dist/refs/branch.js.map +1 -0
  95. package/dist/refs/storage.d.ts +208 -0
  96. package/dist/refs/storage.d.ts.map +1 -0
  97. package/dist/refs/storage.js +421 -0
  98. package/dist/refs/storage.js.map +1 -0
  99. package/dist/refs/tag.d.ts +230 -0
  100. package/dist/refs/tag.d.ts.map +1 -0
  101. package/dist/refs/tag.js +188 -0
  102. package/dist/refs/tag.js.map +1 -0
  103. package/dist/storage/lru-cache.d.ts +188 -0
  104. package/dist/storage/lru-cache.d.ts.map +1 -0
  105. package/dist/storage/lru-cache.js +410 -0
  106. package/dist/storage/lru-cache.js.map +1 -0
  107. package/dist/storage/object-index.d.ts +140 -0
  108. package/dist/storage/object-index.d.ts.map +1 -0
  109. package/dist/storage/object-index.js +166 -0
  110. package/dist/storage/object-index.js.map +1 -0
  111. package/dist/storage/r2-pack.d.ts +394 -0
  112. package/dist/storage/r2-pack.d.ts.map +1 -0
  113. package/dist/storage/r2-pack.js +1062 -0
  114. package/dist/storage/r2-pack.js.map +1 -0
  115. package/dist/tiered/cdc-pipeline.d.ts +316 -0
  116. package/dist/tiered/cdc-pipeline.d.ts.map +1 -0
  117. package/dist/tiered/cdc-pipeline.js +771 -0
  118. package/dist/tiered/cdc-pipeline.js.map +1 -0
  119. package/dist/tiered/migration.d.ts +242 -0
  120. package/dist/tiered/migration.d.ts.map +1 -0
  121. package/dist/tiered/migration.js +592 -0
  122. package/dist/tiered/migration.js.map +1 -0
  123. package/dist/tiered/parquet-writer.d.ts +248 -0
  124. package/dist/tiered/parquet-writer.d.ts.map +1 -0
  125. package/dist/tiered/parquet-writer.js +555 -0
  126. package/dist/tiered/parquet-writer.js.map +1 -0
  127. package/dist/tiered/read-path.d.ts +141 -0
  128. package/dist/tiered/read-path.d.ts.map +1 -0
  129. package/dist/tiered/read-path.js +204 -0
  130. package/dist/tiered/read-path.js.map +1 -0
  131. package/dist/types/objects.d.ts +53 -0
  132. package/dist/types/objects.d.ts.map +1 -0
  133. package/dist/types/objects.js +291 -0
  134. package/dist/types/objects.js.map +1 -0
  135. package/dist/types/storage.d.ts +117 -0
  136. package/dist/types/storage.d.ts.map +1 -0
  137. package/dist/types/storage.js +8 -0
  138. package/dist/types/storage.js.map +1 -0
  139. package/dist/utils/hash.d.ts +31 -0
  140. package/dist/utils/hash.d.ts.map +1 -0
  141. package/dist/utils/hash.js +60 -0
  142. package/dist/utils/hash.js.map +1 -0
  143. package/dist/utils/sha1.d.ts +26 -0
  144. package/dist/utils/sha1.d.ts.map +1 -0
  145. package/dist/utils/sha1.js +127 -0
  146. package/dist/utils/sha1.js.map +1 -0
  147. package/dist/wire/capabilities.d.ts +236 -0
  148. package/dist/wire/capabilities.d.ts.map +1 -0
  149. package/dist/wire/capabilities.js +437 -0
  150. package/dist/wire/capabilities.js.map +1 -0
  151. package/dist/wire/pkt-line.d.ts +67 -0
  152. package/dist/wire/pkt-line.d.ts.map +1 -0
  153. package/dist/wire/pkt-line.js +145 -0
  154. package/dist/wire/pkt-line.js.map +1 -0
  155. package/dist/wire/receive-pack.d.ts +302 -0
  156. package/dist/wire/receive-pack.d.ts.map +1 -0
  157. package/dist/wire/receive-pack.js +885 -0
  158. package/dist/wire/receive-pack.js.map +1 -0
  159. package/dist/wire/smart-http.d.ts +321 -0
  160. package/dist/wire/smart-http.d.ts.map +1 -0
  161. package/dist/wire/smart-http.js +654 -0
  162. package/dist/wire/smart-http.js.map +1 -0
  163. package/dist/wire/upload-pack.d.ts +333 -0
  164. package/dist/wire/upload-pack.d.ts.map +1 -0
  165. package/dist/wire/upload-pack.js +850 -0
  166. package/dist/wire/upload-pack.js.map +1 -0
  167. package/package.json +61 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Tiered Read Path
3
+ *
4
+ * Implements reading objects from the multi-tier storage system:
5
+ * - Hot tier: Durable Object SQLite (fastest, local)
6
+ * - Warm tier: R2 object storage (medium latency, packed objects)
7
+ * - Cold tier: Analytics/Parquet (highest latency, cold storage)
8
+ *
9
+ * Features:
10
+ * - Tier fallback on miss
11
+ * - Cache promotion (read-through caching)
12
+ * - Configurable promotion policies
13
+ *
14
+ * gitdo-aaw: Tiered read path implementation
15
+ */
16
+ import { ObjectType } from '../types/objects';
17
+ /**
18
+ * Stored object representation
19
+ */
20
+ export interface StoredObject {
21
+ sha: string;
22
+ type: ObjectType;
23
+ size: number;
24
+ data: Uint8Array;
25
+ createdAt: number;
26
+ }
27
+ /**
28
+ * Configuration for a single tier
29
+ */
30
+ export interface TierConfig {
31
+ enabled: boolean;
32
+ maxSize?: number;
33
+ ttl?: number;
34
+ }
35
+ /**
36
+ * Configuration for the tiered storage system
37
+ */
38
+ export interface TieredStorageConfig {
39
+ hot: TierConfig;
40
+ warm: TierConfig;
41
+ cold: TierConfig;
42
+ promotionPolicy: 'aggressive' | 'conservative' | 'none';
43
+ }
44
+ /**
45
+ * Result of a read operation
46
+ */
47
+ export interface ReadResult {
48
+ object: StoredObject | null;
49
+ tier: 'hot' | 'warm' | 'cold' | null;
50
+ promoted: boolean;
51
+ latencyMs: number;
52
+ }
53
+ /**
54
+ * Interface for the tiered object store
55
+ */
56
+ export interface TieredObjectStore {
57
+ read(sha: string): Promise<ReadResult>;
58
+ readFromHot(sha: string): Promise<StoredObject | null>;
59
+ readFromWarm(sha: string): Promise<StoredObject | null>;
60
+ readFromCold(sha: string): Promise<StoredObject | null>;
61
+ promoteToHot(sha: string, object: StoredObject): Promise<void>;
62
+ getConfig(): TieredStorageConfig;
63
+ }
64
+ /**
65
+ * Hot tier backend interface (Durable Object SQLite)
66
+ */
67
+ export interface HotTierBackend {
68
+ get(sha: string): Promise<StoredObject | null>;
69
+ put(sha: string, object: StoredObject): Promise<void>;
70
+ delete(sha: string): Promise<boolean>;
71
+ has(sha: string): Promise<boolean>;
72
+ }
73
+ /**
74
+ * Warm tier backend interface (R2 object storage)
75
+ */
76
+ export interface WarmTierBackend {
77
+ get(sha: string): Promise<StoredObject | null>;
78
+ getFromPack(packId: string, offset: number): Promise<StoredObject | null>;
79
+ }
80
+ /**
81
+ * Cold tier backend interface (Analytics/Parquet)
82
+ */
83
+ export interface ColdTierBackend {
84
+ get(sha: string): Promise<StoredObject | null>;
85
+ query(filter: {
86
+ type?: ObjectType;
87
+ minSize?: number;
88
+ maxSize?: number;
89
+ }): Promise<StoredObject[]>;
90
+ }
91
+ /**
92
+ * TieredReader - Main implementation of the tiered read path
93
+ *
94
+ * Reads objects from multiple storage tiers with fallback logic
95
+ * and optional promotion to hotter tiers.
96
+ */
97
+ export declare class TieredReader implements TieredObjectStore {
98
+ private hotBackend;
99
+ private warmBackend;
100
+ private coldBackend;
101
+ private config;
102
+ constructor(hotBackend: HotTierBackend, warmBackend: WarmTierBackend, coldBackend: ColdTierBackend, config: TieredStorageConfig);
103
+ /**
104
+ * Read an object from the tiered storage system
105
+ *
106
+ * Tries each enabled tier in order: hot -> warm -> cold
107
+ * Promotes objects to hot tier based on promotion policy
108
+ */
109
+ read(sha: string): Promise<ReadResult>;
110
+ /**
111
+ * Read an object directly from the hot tier
112
+ */
113
+ readFromHot(sha: string): Promise<StoredObject | null>;
114
+ /**
115
+ * Read an object directly from the warm tier
116
+ */
117
+ readFromWarm(sha: string): Promise<StoredObject | null>;
118
+ /**
119
+ * Read an object directly from the cold tier
120
+ */
121
+ readFromCold(sha: string): Promise<StoredObject | null>;
122
+ /**
123
+ * Manually promote an object to the hot tier
124
+ */
125
+ promoteToHot(sha: string, object: StoredObject): Promise<void>;
126
+ /**
127
+ * Get the current configuration
128
+ */
129
+ getConfig(): TieredStorageConfig;
130
+ /**
131
+ * Try to promote an object to the hot tier based on policy
132
+ *
133
+ * @param sha - The object's SHA
134
+ * @param object - The object to promote
135
+ * @param sourceTier - The tier the object was read from
136
+ * @returns true if promotion was successful
137
+ */
138
+ private tryPromote;
139
+ }
140
+ export { TieredReader as TieredObjectStoreStub };
141
+ //# sourceMappingURL=read-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-path.d.ts","sourceRoot":"","sources":["../../src/tiered/read-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,UAAU,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,eAAe,EAAE,YAAY,GAAG,cAAc,GAAG,MAAM,CAAA;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IACtD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IACvD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IACvD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,SAAS,IAAI,mBAAmB,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC9C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC9C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC9C,KAAK,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CAClG;AAYD;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IACpD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,MAAM,CAAqB;gBAGjC,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,mBAAmB;IAQ7B;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA2E5C;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ5D;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ7D;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ7D;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;OAEG;IACH,SAAS,IAAI,mBAAmB;IAIhC;;;;;;;OAOG;YACW,UAAU;CAmCzB;AAGD,OAAO,EAAE,YAAY,IAAI,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Tiered Read Path
3
+ *
4
+ * Implements reading objects from the multi-tier storage system:
5
+ * - Hot tier: Durable Object SQLite (fastest, local)
6
+ * - Warm tier: R2 object storage (medium latency, packed objects)
7
+ * - Cold tier: Analytics/Parquet (highest latency, cold storage)
8
+ *
9
+ * Features:
10
+ * - Tier fallback on miss
11
+ * - Cache promotion (read-through caching)
12
+ * - Configurable promotion policies
13
+ *
14
+ * gitdo-aaw: Tiered read path implementation
15
+ */
16
+ /**
17
+ * Validates a SHA-1 hash
18
+ */
19
+ function isValidSha(sha) {
20
+ if (!sha || sha.length !== 40) {
21
+ return false;
22
+ }
23
+ return /^[0-9a-f]{40}$/i.test(sha);
24
+ }
25
+ /**
26
+ * TieredReader - Main implementation of the tiered read path
27
+ *
28
+ * Reads objects from multiple storage tiers with fallback logic
29
+ * and optional promotion to hotter tiers.
30
+ */
31
+ export class TieredReader {
32
+ hotBackend;
33
+ warmBackend;
34
+ coldBackend;
35
+ config;
36
+ constructor(hotBackend, warmBackend, coldBackend, config) {
37
+ this.hotBackend = hotBackend;
38
+ this.warmBackend = warmBackend;
39
+ this.coldBackend = coldBackend;
40
+ this.config = config;
41
+ }
42
+ /**
43
+ * Read an object from the tiered storage system
44
+ *
45
+ * Tries each enabled tier in order: hot -> warm -> cold
46
+ * Promotes objects to hot tier based on promotion policy
47
+ */
48
+ async read(sha) {
49
+ const startTime = performance.now();
50
+ // Validate SHA
51
+ if (!isValidSha(sha)) {
52
+ return {
53
+ object: null,
54
+ tier: null,
55
+ promoted: false,
56
+ latencyMs: performance.now() - startTime
57
+ };
58
+ }
59
+ // Try hot tier first
60
+ if (this.config.hot.enabled) {
61
+ try {
62
+ const obj = await this.hotBackend.get(sha);
63
+ if (obj) {
64
+ return {
65
+ object: obj,
66
+ tier: 'hot',
67
+ promoted: false,
68
+ latencyMs: performance.now() - startTime
69
+ };
70
+ }
71
+ }
72
+ catch {
73
+ // Hot tier failed, continue to next tier
74
+ }
75
+ }
76
+ // Try warm tier
77
+ if (this.config.warm.enabled) {
78
+ try {
79
+ const obj = await this.warmBackend.get(sha);
80
+ if (obj) {
81
+ const promoted = await this.tryPromote(sha, obj, 'warm');
82
+ return {
83
+ object: obj,
84
+ tier: 'warm',
85
+ promoted,
86
+ latencyMs: performance.now() - startTime
87
+ };
88
+ }
89
+ }
90
+ catch {
91
+ // Warm tier failed, continue to cold tier
92
+ }
93
+ }
94
+ // Try cold tier
95
+ if (this.config.cold.enabled) {
96
+ try {
97
+ const obj = await this.coldBackend.get(sha);
98
+ if (obj) {
99
+ const promoted = await this.tryPromote(sha, obj, 'cold');
100
+ return {
101
+ object: obj,
102
+ tier: 'cold',
103
+ promoted,
104
+ latencyMs: performance.now() - startTime
105
+ };
106
+ }
107
+ }
108
+ catch {
109
+ // Cold tier failed
110
+ }
111
+ }
112
+ // Object not found in any tier
113
+ return {
114
+ object: null,
115
+ tier: null,
116
+ promoted: false,
117
+ latencyMs: performance.now() - startTime
118
+ };
119
+ }
120
+ /**
121
+ * Read an object directly from the hot tier
122
+ */
123
+ async readFromHot(sha) {
124
+ try {
125
+ return await this.hotBackend.get(sha);
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ /**
132
+ * Read an object directly from the warm tier
133
+ */
134
+ async readFromWarm(sha) {
135
+ try {
136
+ return await this.warmBackend.get(sha);
137
+ }
138
+ catch {
139
+ return null;
140
+ }
141
+ }
142
+ /**
143
+ * Read an object directly from the cold tier
144
+ */
145
+ async readFromCold(sha) {
146
+ try {
147
+ return await this.coldBackend.get(sha);
148
+ }
149
+ catch {
150
+ return null;
151
+ }
152
+ }
153
+ /**
154
+ * Manually promote an object to the hot tier
155
+ */
156
+ async promoteToHot(sha, object) {
157
+ await this.hotBackend.put(sha, object);
158
+ }
159
+ /**
160
+ * Get the current configuration
161
+ */
162
+ getConfig() {
163
+ return this.config;
164
+ }
165
+ /**
166
+ * Try to promote an object to the hot tier based on policy
167
+ *
168
+ * @param sha - The object's SHA
169
+ * @param object - The object to promote
170
+ * @param sourceTier - The tier the object was read from
171
+ * @returns true if promotion was successful
172
+ */
173
+ async tryPromote(sha, object, _sourceTier) {
174
+ // Check if hot tier is enabled
175
+ if (!this.config.hot.enabled) {
176
+ return false;
177
+ }
178
+ // Check promotion policy
179
+ if (this.config.promotionPolicy === 'none') {
180
+ return false;
181
+ }
182
+ // Conservative policy only promotes from warm tier on repeated access
183
+ // For now, conservative means no automatic promotion on first read
184
+ if (this.config.promotionPolicy === 'conservative') {
185
+ return false;
186
+ }
187
+ // Check size limit for hot tier
188
+ if (this.config.hot.maxSize !== undefined && object.size > this.config.hot.maxSize) {
189
+ return false;
190
+ }
191
+ // Try to promote
192
+ try {
193
+ await this.hotBackend.put(sha, object);
194
+ return true;
195
+ }
196
+ catch {
197
+ // Promotion failed, but we still have the object
198
+ return false;
199
+ }
200
+ }
201
+ }
202
+ // Re-export as TieredObjectStoreStub for backward compatibility with tests
203
+ export { TieredReader as TieredObjectStoreStub };
204
+ //# sourceMappingURL=read-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-path.js","sourceRoot":"","sources":["../../src/tiered/read-path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export type ObjectType = 'blob' | 'tree' | 'commit' | 'tag';
2
+ export interface GitObject {
3
+ type: ObjectType;
4
+ data: Uint8Array;
5
+ }
6
+ export interface BlobObject extends GitObject {
7
+ type: 'blob';
8
+ }
9
+ export interface TreeEntry {
10
+ mode: string;
11
+ name: string;
12
+ sha: string;
13
+ }
14
+ export interface TreeObject extends GitObject {
15
+ type: 'tree';
16
+ entries: TreeEntry[];
17
+ }
18
+ export interface Author {
19
+ name: string;
20
+ email: string;
21
+ timestamp: number;
22
+ timezone: string;
23
+ }
24
+ export interface CommitObject extends GitObject {
25
+ type: 'commit';
26
+ tree: string;
27
+ parents: string[];
28
+ author: Author;
29
+ committer: Author;
30
+ message: string;
31
+ }
32
+ export interface TagObject extends GitObject {
33
+ type: 'tag';
34
+ object: string;
35
+ objectType: ObjectType;
36
+ tagger?: Author;
37
+ message: string;
38
+ name: string;
39
+ tag?: string;
40
+ }
41
+ export declare function isBlob(obj: GitObject): obj is BlobObject;
42
+ export declare function isTree(obj: GitObject): obj is TreeObject;
43
+ export declare function isCommit(obj: GitObject): obj is CommitObject;
44
+ export declare function isTag(obj: GitObject): obj is TagObject;
45
+ export declare function serializeBlob(data: Uint8Array): Uint8Array;
46
+ export declare function serializeTree(entries: TreeEntry[]): Uint8Array;
47
+ export declare function serializeCommit(commit: Omit<CommitObject, 'type' | 'data'>): Uint8Array;
48
+ export declare function serializeTag(tag: Omit<TagObject, 'type' | 'data'>): Uint8Array;
49
+ export declare function parseBlob(data: Uint8Array): BlobObject;
50
+ export declare function parseTree(data: Uint8Array): TreeObject;
51
+ export declare function parseCommit(data: Uint8Array): CommitObject;
52
+ export declare function parseTag(data: Uint8Array): TagObject;
53
+ //# sourceMappingURL=objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/types/objects.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;AAE3D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAGD,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,IAAI,UAAU,CAExD;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,IAAI,UAAU,CAExD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,IAAI,YAAY,CAE5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,IAAI,SAAS,CAEtD;AAuCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAO1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,CAqC9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,UAAU,CAuBvF;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,UAAU,CAuB9E;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAmBtD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CA2CtD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAwD1D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAwDpD"}