@nestm/storage 0.1.0-alpha.2 → 0.1.0-alpha.20

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 (198) hide show
  1. package/CHANGELOG.md +320 -0
  2. package/README.md +975 -29
  3. package/SECURITY.md +128 -0
  4. package/dist/ai-sdk/ai-sdk-file-workflow-tools.d.ts +53 -0
  5. package/dist/ai-sdk/ai-sdk-file-workflow-tools.d.ts.map +1 -0
  6. package/dist/ai-sdk/ai-sdk-file-workflow-tools.js +370 -0
  7. package/dist/ai-sdk/ai-sdk-file-workflow-tools.js.map +1 -0
  8. package/dist/ai-sdk/ai-sdk-workspace-tools.d.ts +91 -0
  9. package/dist/ai-sdk/ai-sdk-workspace-tools.d.ts.map +1 -0
  10. package/dist/ai-sdk/ai-sdk-workspace-tools.js +497 -0
  11. package/dist/ai-sdk/ai-sdk-workspace-tools.js.map +1 -0
  12. package/dist/ai-sdk/index.d.ts +3 -0
  13. package/dist/ai-sdk/index.d.ts.map +1 -0
  14. package/dist/ai-sdk/index.js +3 -0
  15. package/dist/ai-sdk/index.js.map +1 -0
  16. package/dist/bytes/index.d.ts +30 -0
  17. package/dist/bytes/index.d.ts.map +1 -0
  18. package/dist/bytes/index.js +96 -0
  19. package/dist/bytes/index.js.map +1 -0
  20. package/dist/core/index.d.ts +5 -0
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +5 -0
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/storage-staged-content.d.ts +39 -0
  25. package/dist/core/storage-staged-content.d.ts.map +1 -0
  26. package/dist/core/storage-staged-content.js +109 -0
  27. package/dist/core/storage-staged-content.js.map +1 -0
  28. package/dist/core/storage-streams.d.ts +19 -0
  29. package/dist/core/storage-streams.d.ts.map +1 -0
  30. package/dist/core/storage-streams.js +95 -0
  31. package/dist/core/storage-streams.js.map +1 -0
  32. package/dist/core/storage-text-edit.d.ts +38 -0
  33. package/dist/core/storage-text-edit.d.ts.map +1 -0
  34. package/dist/core/storage-text-edit.js +86 -0
  35. package/dist/core/storage-text-edit.js.map +1 -0
  36. package/dist/core/storage-text-stream-edit.d.ts +8 -0
  37. package/dist/core/storage-text-stream-edit.d.ts.map +1 -0
  38. package/dist/core/storage-text-stream-edit.js +114 -0
  39. package/dist/core/storage-text-stream-edit.js.map +1 -0
  40. package/dist/core/storage-text.d.ts +22 -0
  41. package/dist/core/storage-text.d.ts.map +1 -0
  42. package/dist/core/storage-text.js +69 -0
  43. package/dist/core/storage-text.js.map +1 -0
  44. package/dist/crypto/index.d.ts +2 -0
  45. package/dist/crypto/index.d.ts.map +1 -0
  46. package/dist/crypto/index.js +2 -0
  47. package/dist/crypto/index.js.map +1 -0
  48. package/dist/crypto/storage-encrypted-content.d.ts +49 -0
  49. package/dist/crypto/storage-encrypted-content.d.ts.map +1 -0
  50. package/dist/crypto/storage-encrypted-content.js +212 -0
  51. package/dist/crypto/storage-encrypted-content.js.map +1 -0
  52. package/dist/files-sdk/azure/azure-conditional.d.ts +5 -0
  53. package/dist/files-sdk/azure/azure-conditional.d.ts.map +1 -0
  54. package/dist/files-sdk/azure/azure-conditional.js +184 -0
  55. package/dist/files-sdk/azure/azure-conditional.js.map +1 -0
  56. package/dist/files-sdk/azure/index.d.ts +10 -0
  57. package/dist/files-sdk/azure/index.d.ts.map +1 -0
  58. package/dist/files-sdk/azure/index.js +34 -0
  59. package/dist/files-sdk/azure/index.js.map +1 -0
  60. package/dist/files-sdk/files-sdk.driver.d.ts +85 -3
  61. package/dist/files-sdk/files-sdk.driver.d.ts.map +1 -1
  62. package/dist/files-sdk/files-sdk.driver.js +1437 -37
  63. package/dist/files-sdk/files-sdk.driver.js.map +1 -1
  64. package/dist/files-sdk/fs/index.d.ts +42 -0
  65. package/dist/files-sdk/fs/index.d.ts.map +1 -0
  66. package/dist/files-sdk/fs/index.js +1117 -0
  67. package/dist/files-sdk/fs/index.js.map +1 -0
  68. package/dist/files-sdk/index.d.ts +1 -1
  69. package/dist/files-sdk/index.d.ts.map +1 -1
  70. package/dist/files-sdk/index.js.map +1 -1
  71. package/dist/files-sdk/memory.d.ts +7 -0
  72. package/dist/files-sdk/memory.d.ts.map +1 -0
  73. package/dist/files-sdk/memory.js +72 -0
  74. package/dist/files-sdk/memory.js.map +1 -0
  75. package/dist/files-sdk/provider/index.d.ts +58 -0
  76. package/dist/files-sdk/provider/index.d.ts.map +1 -0
  77. package/dist/files-sdk/provider/index.js +169 -0
  78. package/dist/files-sdk/provider/index.js.map +1 -0
  79. package/dist/files-sdk/s3/construction-metadata.d.ts +9 -0
  80. package/dist/files-sdk/s3/construction-metadata.d.ts.map +1 -0
  81. package/dist/files-sdk/s3/construction-metadata.js +24 -0
  82. package/dist/files-sdk/s3/construction-metadata.js.map +1 -0
  83. package/dist/files-sdk/s3/index.d.ts +54 -0
  84. package/dist/files-sdk/s3/index.d.ts.map +1 -0
  85. package/dist/files-sdk/s3/index.js +1505 -0
  86. package/dist/files-sdk/s3/index.js.map +1 -0
  87. package/dist/gateway/index.d.ts +1 -1
  88. package/dist/gateway/index.d.ts.map +1 -1
  89. package/dist/gateway/index.js.map +1 -1
  90. package/dist/gateway/storage-gateway-fastify-parser.d.ts.map +1 -1
  91. package/dist/gateway/storage-gateway-fastify-parser.js.map +1 -1
  92. package/dist/gateway/storage-gateway.controller.d.ts +12 -11
  93. package/dist/gateway/storage-gateway.controller.d.ts.map +1 -1
  94. package/dist/gateway/storage-gateway.controller.js +240 -70
  95. package/dist/gateway/storage-gateway.controller.js.map +1 -1
  96. package/dist/gateway/storage-gateway.guard.d.ts.map +1 -1
  97. package/dist/gateway/storage-gateway.guard.js.map +1 -1
  98. package/dist/gateway/storage-gateway.module.d.ts.map +1 -1
  99. package/dist/gateway/storage-gateway.module.js +60 -1
  100. package/dist/gateway/storage-gateway.module.js.map +1 -1
  101. package/dist/gateway/storage-gateway.tokens.d.ts +1 -0
  102. package/dist/gateway/storage-gateway.tokens.d.ts.map +1 -1
  103. package/dist/gateway/storage-gateway.tokens.js +1 -0
  104. package/dist/gateway/storage-gateway.tokens.js.map +1 -1
  105. package/dist/gateway/storage-gateway.types.d.ts +53 -10
  106. package/dist/gateway/storage-gateway.types.d.ts.map +1 -1
  107. package/dist/gateway/storage-gateway.types.js.map +1 -1
  108. package/dist/inject-storage.decorator.js.map +1 -1
  109. package/dist/storage-etag.d.ts +13 -0
  110. package/dist/storage-etag.d.ts.map +1 -0
  111. package/dist/storage-etag.js +31 -0
  112. package/dist/storage-etag.js.map +1 -0
  113. package/dist/storage-upload-control.d.ts.map +1 -1
  114. package/dist/storage.client.d.ts +14 -1
  115. package/dist/storage.client.d.ts.map +1 -1
  116. package/dist/storage.client.js +204 -2
  117. package/dist/storage.client.js.map +1 -1
  118. package/dist/storage.driver.d.ts +28 -1
  119. package/dist/storage.driver.d.ts.map +1 -1
  120. package/dist/storage.driver.js.map +1 -1
  121. package/dist/storage.error.d.ts +17 -10
  122. package/dist/storage.error.d.ts.map +1 -1
  123. package/dist/storage.error.js +47 -1
  124. package/dist/storage.error.js.map +1 -1
  125. package/dist/storage.module.d.ts.map +1 -1
  126. package/dist/storage.module.js.map +1 -1
  127. package/dist/storage.service.d.ts.map +1 -1
  128. package/dist/storage.service.js +28 -3
  129. package/dist/storage.service.js.map +1 -1
  130. package/dist/storage.tokens.js.map +1 -1
  131. package/dist/storage.types.d.ts +150 -1
  132. package/dist/storage.types.d.ts.map +1 -1
  133. package/dist/storage.types.js.map +1 -1
  134. package/dist/testing/index.d.ts +1 -0
  135. package/dist/testing/index.d.ts.map +1 -1
  136. package/dist/testing/index.js +3 -1
  137. package/dist/testing/index.js.map +1 -1
  138. package/dist/testing/provider-conformance.d.ts +65 -0
  139. package/dist/testing/provider-conformance.d.ts.map +1 -0
  140. package/dist/testing/provider-conformance.js +869 -0
  141. package/dist/testing/provider-conformance.js.map +1 -0
  142. package/dist/workspace/index.d.ts +12 -0
  143. package/dist/workspace/index.d.ts.map +1 -0
  144. package/dist/workspace/index.js +10 -0
  145. package/dist/workspace/index.js.map +1 -0
  146. package/dist/workspace/storage-catalog-checkout.d.ts +7 -0
  147. package/dist/workspace/storage-catalog-checkout.d.ts.map +1 -0
  148. package/dist/workspace/storage-catalog-checkout.js +13 -0
  149. package/dist/workspace/storage-catalog-checkout.js.map +1 -0
  150. package/dist/workspace/storage-draft-stream.d.ts +3 -0
  151. package/dist/workspace/storage-draft-stream.d.ts.map +1 -0
  152. package/dist/workspace/storage-draft-stream.js +57 -0
  153. package/dist/workspace/storage-draft-stream.js.map +1 -0
  154. package/dist/workspace/storage-file-catalog.types.d.ts +73 -0
  155. package/dist/workspace/storage-file-catalog.types.d.ts.map +1 -0
  156. package/dist/workspace/storage-file-catalog.types.js +2 -0
  157. package/dist/workspace/storage-file-catalog.types.js.map +1 -0
  158. package/dist/workspace/storage-file-workflow.d.ts +7 -0
  159. package/dist/workspace/storage-file-workflow.d.ts.map +1 -0
  160. package/dist/workspace/storage-file-workflow.js +657 -0
  161. package/dist/workspace/storage-file-workflow.js.map +1 -0
  162. package/dist/workspace/storage-file-workflow.protection.d.ts +31 -0
  163. package/dist/workspace/storage-file-workflow.protection.d.ts.map +1 -0
  164. package/dist/workspace/storage-file-workflow.protection.js +339 -0
  165. package/dist/workspace/storage-file-workflow.protection.js.map +1 -0
  166. package/dist/workspace/storage-file-workflow.types.d.ts +184 -0
  167. package/dist/workspace/storage-file-workflow.types.d.ts.map +1 -0
  168. package/dist/workspace/storage-file-workflow.types.js +10 -0
  169. package/dist/workspace/storage-file-workflow.types.js.map +1 -0
  170. package/dist/workspace/storage-text-draft.d.ts +21 -0
  171. package/dist/workspace/storage-text-draft.d.ts.map +1 -0
  172. package/dist/workspace/storage-text-draft.js +77 -0
  173. package/dist/workspace/storage-text-draft.js.map +1 -0
  174. package/dist/workspace/storage-working-files.d.ts +34 -0
  175. package/dist/workspace/storage-working-files.d.ts.map +1 -0
  176. package/dist/workspace/storage-working-files.js +326 -0
  177. package/dist/workspace/storage-working-files.js.map +1 -0
  178. package/dist/workspace/storage-workspace.cursor.d.ts +71 -0
  179. package/dist/workspace/storage-workspace.cursor.d.ts.map +1 -0
  180. package/dist/workspace/storage-workspace.cursor.js +408 -0
  181. package/dist/workspace/storage-workspace.cursor.js.map +1 -0
  182. package/dist/workspace/storage-workspace.d.ts +6 -0
  183. package/dist/workspace/storage-workspace.d.ts.map +1 -0
  184. package/dist/workspace/storage-workspace.error.d.ts +32 -0
  185. package/dist/workspace/storage-workspace.error.d.ts.map +1 -0
  186. package/dist/workspace/storage-workspace.error.js +75 -0
  187. package/dist/workspace/storage-workspace.error.js.map +1 -0
  188. package/dist/workspace/storage-workspace.js +849 -0
  189. package/dist/workspace/storage-workspace.js.map +1 -0
  190. package/dist/workspace/storage-workspace.path.d.ts +9 -0
  191. package/dist/workspace/storage-workspace.path.d.ts.map +1 -0
  192. package/dist/workspace/storage-workspace.path.js +68 -0
  193. package/dist/workspace/storage-workspace.path.js.map +1 -0
  194. package/dist/workspace/storage-workspace.types.d.ts +123 -0
  195. package/dist/workspace/storage-workspace.types.d.ts.map +1 -0
  196. package/dist/workspace/storage-workspace.types.js +22 -0
  197. package/dist/workspace/storage-workspace.types.js.map +1 -0
  198. package/package.json +99 -20
@@ -0,0 +1,184 @@
1
+ import type { StorageStagedBody, StorageStagedContent } from '../core/storage-staged-content.js';
2
+ import type { StorageTextChange } from '../core/storage-text-edit.js';
3
+ import type { StorageTextSearchResult } from '../core/storage-text.js';
4
+ import type { StorageTextWindow } from '../core/storage-streams.js';
5
+ export type StorageFileWorkflowPermission = 'read' | 'write' | 'commit';
6
+ export type StorageFileWorkflowMutation = 'create' | 'replace';
7
+ export interface StorageFileWorkflowLimits {
8
+ maxChunkBytes: number;
9
+ maxReadBytes: number;
10
+ maxPageSize: number;
11
+ maxCommitFiles: number;
12
+ maxPathBytes: number;
13
+ /** Buffered input and host read ceiling; streamed file edits are not limited by total file size. */
14
+ maxTextBytes: number;
15
+ maxEdits: number;
16
+ }
17
+ export declare const DEFAULT_STORAGE_FILE_WORKFLOW_LIMITS: Readonly<StorageFileWorkflowLimits>;
18
+ export interface StorageFileWorkflowOperation {
19
+ readonly signal?: AbortSignal | undefined;
20
+ }
21
+ export interface StorageFileDraftBegin extends StorageFileWorkflowOperation {
22
+ readonly path: string;
23
+ readonly idempotencyKey: string;
24
+ readonly text: boolean;
25
+ readonly expectedEtag?: string | undefined;
26
+ }
27
+ export interface StorageFileDraftStageText extends Omit<StorageFileDraftBegin, 'text'> {
28
+ readonly content: string;
29
+ }
30
+ export interface StorageFileDraftStageStream extends StorageFileDraftBegin {
31
+ /** Stable trusted source identity used to detect conflicting command replay. */
32
+ readonly contentIdentity: string;
33
+ /** Open only after authorization and replay lookup; bytes are never exposed to the model. */
34
+ readonly body: () => ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
35
+ readonly sourceDraftId?: string | undefined;
36
+ readonly expectedSize?: number | undefined;
37
+ }
38
+ export interface StorageFileDraftReviseText extends StorageFileDraftRequest {
39
+ /** Optional host request identity, included in replay validation. */
40
+ readonly requestIdentity?: string | undefined;
41
+ readonly expectedSize: number;
42
+ readonly idempotencyKey: string;
43
+ readonly changes: readonly StorageTextChange[];
44
+ }
45
+ export interface StorageFileDraftRequest extends StorageFileWorkflowOperation {
46
+ readonly draftId: string;
47
+ }
48
+ export interface StorageFileDraftPageRequest extends StorageFileWorkflowOperation {
49
+ readonly offset?: number | undefined;
50
+ }
51
+ export interface StorageFileDraftAppend extends StorageFileDraftRequest {
52
+ readonly offset: number;
53
+ readonly bytes: Uint8Array;
54
+ }
55
+ export interface StorageFileDraftCommit {
56
+ readonly draftId: string;
57
+ readonly size: number;
58
+ readonly sha256?: string | undefined;
59
+ }
60
+ export interface StorageFileWorkflowCommit extends StorageFileWorkflowOperation {
61
+ readonly drafts: readonly StorageFileDraftCommit[];
62
+ }
63
+ export interface StorageFileDraft<Receipt> {
64
+ readonly id: string;
65
+ readonly path: string;
66
+ readonly expectedEtag: string | null;
67
+ /** Predecessor checkpoint; null for a new draft or catalog checkout. */
68
+ readonly sourceDraftId: string | null;
69
+ readonly text: boolean;
70
+ readonly status: 'open' | 'sealed' | 'committed' | 'cancelled';
71
+ readonly size: number;
72
+ readonly result: Receipt | null;
73
+ readonly createdAt: string;
74
+ }
75
+ export interface StorageFileDraftRecord<Receipt> extends StorageFileDraft<Receipt> {
76
+ readonly idempotencyKey: string;
77
+ readonly requestFingerprint: string;
78
+ /** Whole-file verified body; persisted only with successful head commit. */
79
+ readonly body: StorageStagedBody | null;
80
+ }
81
+ export interface StorageFilePartReceipt {
82
+ readonly offset: number;
83
+ readonly size: number;
84
+ readonly sha256: string;
85
+ }
86
+ export interface StorageFilePartRecord extends StorageFilePartReceipt {
87
+ readonly body: StorageStagedBody;
88
+ }
89
+ export interface StorageFileWorkflowPage<Item> {
90
+ readonly items: readonly Item[];
91
+ readonly nextOffset: number | null;
92
+ }
93
+ export interface StorageFileHeadChange<Receipt> {
94
+ readonly draft: StorageFileDraftRecord<Receipt>;
95
+ readonly body: StorageStagedBody;
96
+ }
97
+ /** All methods execute in the SAME host transaction. Records are detached values. */
98
+ export interface StorageFileWorkflowTransaction<Receipt> {
99
+ findDraftByKey(key: string): Promise<StorageFileDraftRecord<Receipt> | null>;
100
+ getDraft(id: string): Promise<StorageFileDraftRecord<Receipt> | null>;
101
+ saveDraft(draft: StorageFileDraftRecord<Receipt>): Promise<void>;
102
+ /** Stable order, at most limit entries; scoped to the authorized principal. */
103
+ listDrafts(offset: number, limit: number): Promise<readonly StorageFileDraftRecord<Receipt>[]>;
104
+ /** Ordered by offset; include the part containing offset, then later parts. */
105
+ listParts(draftId: string, offset: number, limit: number): Promise<readonly StorageFilePartRecord[]>;
106
+ putPart(draftId: string, part: StorageFilePartRecord): Promise<void>;
107
+ /**
108
+ * Compare every expected head/create predicate and update all heads atomically.
109
+ * Return one receipt per change, in the supplied order. Must join this transaction;
110
+ * never implement this as serial provider writes or independent transactions.
111
+ * Paths arrive sorted to permit consistent lock ordering.
112
+ */
113
+ commitHeads(changes: readonly StorageFileHeadChange<Receipt>[]): Promise<readonly Receipt[]>;
114
+ }
115
+ export interface StorageFileWorkflowPersistence<Scope, Receipt> {
116
+ /**
117
+ * Reauthorize scope on EVERY call; lock/serialize its draft/idempotency state
118
+ * before work begins, including across replicas. Roll back ALL callback effects
119
+ * on rejection. Resolve only after durable commit. Do not retry the callback.
120
+ * Check signal before committing; once committed, return its result even if
121
+ * signal subsequently aborts. Lost responses are reconciled by replay.
122
+ */
123
+ transaction<Result>(scope: Scope, options: StorageFileWorkflowOperation & {
124
+ readonly permission: StorageFileWorkflowPermission;
125
+ }, work: (transaction: StorageFileWorkflowTransaction<Receipt>) => Promise<Result>): Promise<Result>;
126
+ }
127
+ export interface StorageFileWorkflowOptions<Scope, Receipt> {
128
+ readonly persistence: StorageFileWorkflowPersistence<Scope, Receipt>;
129
+ readonly content: StorageStagedContent<Scope>;
130
+ }
131
+ export interface MountStorageFileWorkflowOptions extends StorageFileWorkflowOperation {
132
+ readonly permissions?: Iterable<StorageFileWorkflowPermission>;
133
+ /** Checked against each persisted draft on append/cancel/commit, including replay. */
134
+ readonly mutations?: Iterable<StorageFileWorkflowMutation>;
135
+ readonly limits?: Partial<StorageFileWorkflowLimits>;
136
+ }
137
+ /** A host-scope-bound capability. Scope, provider keys and staged bodies stay private. */
138
+ export interface StorageFileWorkflowCapability<Receipt = unknown> {
139
+ readonly kind: 'storage-file-workflow';
140
+ readonly version: 1;
141
+ readonly limits: Readonly<StorageFileWorkflowLimits>;
142
+ allows(permission: StorageFileWorkflowPermission): boolean;
143
+ /** Narrow only; cannot change scope, widen grants/limits, or detach parent abort. */
144
+ restrict(options: MountStorageFileWorkflowOptions): StorageFileWorkflowCapability<Receipt>;
145
+ /** Atomically save a bounded text buffer as a sealed, resumable checkpoint. */
146
+ stageText(input: StorageFileDraftStageText): Promise<StorageFileDraft<Receipt>>;
147
+ /** Stage arbitrary-size text or binary source in bounded, integrity-checked chunks. */
148
+ stageStream(input: StorageFileDraftStageStream): Promise<StorageFileDraft<Receipt>>;
149
+ /** Save a new sealed checkpoint; preserve the source and original head precondition. */
150
+ reviseText(input: StorageFileDraftReviseText): Promise<StorageFileDraft<Receipt>>;
151
+ /** Recover a host command receipt without reopening its source. */
152
+ lookup(input: StorageFileWorkflowOperation & {
153
+ readonly idempotencyKey: string;
154
+ }): Promise<StorageFileDraft<Receipt> | null>;
155
+ begin(input: StorageFileDraftBegin): Promise<StorageFileDraft<Receipt>>;
156
+ list(input?: StorageFileDraftPageRequest): Promise<StorageFileWorkflowPage<StorageFileDraft<Receipt>>>;
157
+ read(input: StorageFileDraftRequest & StorageFileDraftPageRequest): Promise<StorageFileDraft<Receipt> & StorageTextWindow>;
158
+ /** Host-only stream of an exact checkpoint; end is exclusive. */
159
+ readStream(input: StorageFileDraftRequest & {
160
+ readonly expectedSize: number;
161
+ readonly start?: number | undefined;
162
+ readonly end?: number | undefined;
163
+ }): Promise<StorageFileDraft<Receipt> & {
164
+ readonly body: ReadableStream<Uint8Array>;
165
+ }>;
166
+ searchText(input: StorageFileDraftRequest & StorageFileDraftPageRequest & {
167
+ readonly expectedSize: number;
168
+ readonly query: string;
169
+ }): Promise<StorageTextSearchResult & {
170
+ readonly path: string;
171
+ readonly etag: string;
172
+ }>;
173
+ /** Buffer one exact text revision within maxTextBytes for host validation. */
174
+ readText(input: StorageFileDraftRequest & {
175
+ readonly expectedSize: number;
176
+ }): Promise<StorageFileDraft<Receipt> & {
177
+ readonly content: string;
178
+ }>;
179
+ append(input: StorageFileDraftAppend): Promise<StorageFileDraft<Receipt>>;
180
+ parts(input: StorageFileDraftRequest & StorageFileDraftPageRequest): Promise<StorageFileWorkflowPage<StorageFilePartReceipt>>;
181
+ cancel(input: StorageFileDraftRequest): Promise<StorageFileDraft<Receipt>>;
182
+ commit(input: StorageFileWorkflowCommit): Promise<readonly Receipt[]>;
183
+ }
184
+ //# sourceMappingURL=storage-file-workflow.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-file-workflow.types.d.ts","sourceRoot":"","sources":["../../src/workspace/storage-file-workflow.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export const DEFAULT_STORAGE_FILE_WORKFLOW_LIMITS = Object.freeze({
2
+ maxChunkBytes: 262_144,
3
+ maxReadBytes: 4096,
4
+ maxPageSize: 64,
5
+ maxCommitFiles: 20,
6
+ maxPathBytes: 1024,
7
+ maxTextBytes: 16 * 1024 * 1024,
8
+ maxEdits: 64,
9
+ });
10
+ //# sourceMappingURL=storage-file-workflow.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-file-workflow.types.js","sourceRoot":"","sources":["../../src/workspace/storage-file-workflow.types.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,oCAAoC,GAC/C,MAAM,CAAC,MAAM,CAAC;IACZ,aAAa,EAAE,OAAO;IACtB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC9B,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC","sourcesContent":["import type {\n StorageStagedBody,\n StorageStagedContent,\n} from '../core/storage-staged-content.js';\nimport type { StorageTextChange } from '../core/storage-text-edit.js';\nimport type { StorageTextSearchResult } from '../core/storage-text.js';\nimport type { StorageTextWindow } from '../core/storage-streams.js';\n\nexport type StorageFileWorkflowPermission = 'read' | 'write' | 'commit';\nexport type StorageFileWorkflowMutation = 'create' | 'replace';\nexport interface StorageFileWorkflowLimits {\n maxChunkBytes: number;\n maxReadBytes: number;\n maxPageSize: number;\n maxCommitFiles: number;\n maxPathBytes: number;\n /** Buffered input and host read ceiling; streamed file edits are not limited by total file size. */\n maxTextBytes: number;\n maxEdits: number;\n}\nexport const DEFAULT_STORAGE_FILE_WORKFLOW_LIMITS: Readonly<StorageFileWorkflowLimits> =\n Object.freeze({\n maxChunkBytes: 262_144,\n maxReadBytes: 4096,\n maxPageSize: 64,\n maxCommitFiles: 20,\n maxPathBytes: 1024,\n maxTextBytes: 16 * 1024 * 1024,\n maxEdits: 64,\n });\nexport interface StorageFileWorkflowOperation {\n readonly signal?: AbortSignal | undefined;\n}\nexport interface StorageFileDraftBegin extends StorageFileWorkflowOperation {\n readonly path: string;\n readonly idempotencyKey: string;\n readonly text: boolean;\n readonly expectedEtag?: string | undefined;\n}\nexport interface StorageFileDraftStageText extends Omit<\n StorageFileDraftBegin,\n 'text'\n> {\n readonly content: string;\n}\nexport interface StorageFileDraftStageStream extends StorageFileDraftBegin {\n /** Stable trusted source identity used to detect conflicting command replay. */\n readonly contentIdentity: string;\n /** Open only after authorization and replay lookup; bytes are never exposed to the model. */\n readonly body: () =>\n ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;\n readonly sourceDraftId?: string | undefined;\n readonly expectedSize?: number | undefined;\n}\nexport interface StorageFileDraftReviseText extends StorageFileDraftRequest {\n /** Optional host request identity, included in replay validation. */\n readonly requestIdentity?: string | undefined;\n readonly expectedSize: number;\n readonly idempotencyKey: string;\n readonly changes: readonly StorageTextChange[];\n}\nexport interface StorageFileDraftRequest extends StorageFileWorkflowOperation {\n readonly draftId: string;\n}\nexport interface StorageFileDraftPageRequest extends StorageFileWorkflowOperation {\n readonly offset?: number | undefined;\n}\nexport interface StorageFileDraftAppend extends StorageFileDraftRequest {\n readonly offset: number;\n readonly bytes: Uint8Array;\n}\nexport interface StorageFileDraftCommit {\n readonly draftId: string;\n readonly size: number;\n readonly sha256?: string | undefined;\n}\nexport interface StorageFileWorkflowCommit extends StorageFileWorkflowOperation {\n readonly drafts: readonly StorageFileDraftCommit[];\n}\nexport interface StorageFileDraft<Receipt> {\n readonly id: string;\n readonly path: string;\n readonly expectedEtag: string | null;\n /** Predecessor checkpoint; null for a new draft or catalog checkout. */\n readonly sourceDraftId: string | null;\n readonly text: boolean;\n readonly status: 'open' | 'sealed' | 'committed' | 'cancelled';\n readonly size: number;\n readonly result: Receipt | null;\n readonly createdAt: string;\n}\nexport interface StorageFileDraftRecord<\n Receipt,\n> extends StorageFileDraft<Receipt> {\n readonly idempotencyKey: string;\n readonly requestFingerprint: string;\n /** Whole-file verified body; persisted only with successful head commit. */\n readonly body: StorageStagedBody | null;\n}\nexport interface StorageFilePartReceipt {\n readonly offset: number;\n readonly size: number;\n readonly sha256: string;\n}\nexport interface StorageFilePartRecord extends StorageFilePartReceipt {\n readonly body: StorageStagedBody;\n}\nexport interface StorageFileWorkflowPage<Item> {\n readonly items: readonly Item[];\n readonly nextOffset: number | null;\n}\nexport interface StorageFileHeadChange<Receipt> {\n readonly draft: StorageFileDraftRecord<Receipt>;\n readonly body: StorageStagedBody;\n}\n\n/** All methods execute in the SAME host transaction. Records are detached values. */\nexport interface StorageFileWorkflowTransaction<Receipt> {\n findDraftByKey(key: string): Promise<StorageFileDraftRecord<Receipt> | null>;\n getDraft(id: string): Promise<StorageFileDraftRecord<Receipt> | null>;\n saveDraft(draft: StorageFileDraftRecord<Receipt>): Promise<void>;\n /** Stable order, at most limit entries; scoped to the authorized principal. */\n listDrafts(\n offset: number,\n limit: number,\n ): Promise<readonly StorageFileDraftRecord<Receipt>[]>;\n /** Ordered by offset; include the part containing offset, then later parts. */\n listParts(\n draftId: string,\n offset: number,\n limit: number,\n ): Promise<readonly StorageFilePartRecord[]>;\n putPart(draftId: string, part: StorageFilePartRecord): Promise<void>;\n /**\n * Compare every expected head/create predicate and update all heads atomically.\n * Return one receipt per change, in the supplied order. Must join this transaction;\n * never implement this as serial provider writes or independent transactions.\n * Paths arrive sorted to permit consistent lock ordering.\n */\n commitHeads(\n changes: readonly StorageFileHeadChange<Receipt>[],\n ): Promise<readonly Receipt[]>;\n}\nexport interface StorageFileWorkflowPersistence<Scope, Receipt> {\n /**\n * Reauthorize scope on EVERY call; lock/serialize its draft/idempotency state\n * before work begins, including across replicas. Roll back ALL callback effects\n * on rejection. Resolve only after durable commit. Do not retry the callback.\n * Check signal before committing; once committed, return its result even if\n * signal subsequently aborts. Lost responses are reconciled by replay.\n */\n transaction<Result>(\n scope: Scope,\n options: StorageFileWorkflowOperation & {\n readonly permission: StorageFileWorkflowPermission;\n },\n work: (\n transaction: StorageFileWorkflowTransaction<Receipt>,\n ) => Promise<Result>,\n ): Promise<Result>;\n}\nexport interface StorageFileWorkflowOptions<Scope, Receipt> {\n readonly persistence: StorageFileWorkflowPersistence<Scope, Receipt>;\n readonly content: StorageStagedContent<Scope>;\n}\nexport interface MountStorageFileWorkflowOptions extends StorageFileWorkflowOperation {\n readonly permissions?: Iterable<StorageFileWorkflowPermission>;\n /** Checked against each persisted draft on append/cancel/commit, including replay. */\n readonly mutations?: Iterable<StorageFileWorkflowMutation>;\n readonly limits?: Partial<StorageFileWorkflowLimits>;\n}\n/** A host-scope-bound capability. Scope, provider keys and staged bodies stay private. */\nexport interface StorageFileWorkflowCapability<Receipt = unknown> {\n readonly kind: 'storage-file-workflow';\n readonly version: 1;\n readonly limits: Readonly<StorageFileWorkflowLimits>;\n allows(permission: StorageFileWorkflowPermission): boolean;\n /** Narrow only; cannot change scope, widen grants/limits, or detach parent abort. */\n restrict(\n options: MountStorageFileWorkflowOptions,\n ): StorageFileWorkflowCapability<Receipt>;\n /** Atomically save a bounded text buffer as a sealed, resumable checkpoint. */\n stageText(\n input: StorageFileDraftStageText,\n ): Promise<StorageFileDraft<Receipt>>;\n /** Stage arbitrary-size text or binary source in bounded, integrity-checked chunks. */\n stageStream(\n input: StorageFileDraftStageStream,\n ): Promise<StorageFileDraft<Receipt>>;\n /** Save a new sealed checkpoint; preserve the source and original head precondition. */\n reviseText(\n input: StorageFileDraftReviseText,\n ): Promise<StorageFileDraft<Receipt>>;\n /** Recover a host command receipt without reopening its source. */\n lookup(\n input: StorageFileWorkflowOperation & { readonly idempotencyKey: string },\n ): Promise<StorageFileDraft<Receipt> | null>;\n begin(input: StorageFileDraftBegin): Promise<StorageFileDraft<Receipt>>;\n list(\n input?: StorageFileDraftPageRequest,\n ): Promise<StorageFileWorkflowPage<StorageFileDraft<Receipt>>>;\n read(\n input: StorageFileDraftRequest & StorageFileDraftPageRequest,\n ): Promise<StorageFileDraft<Receipt> & StorageTextWindow>;\n /** Host-only stream of an exact checkpoint; end is exclusive. */\n readStream(\n input: StorageFileDraftRequest & {\n readonly expectedSize: number;\n readonly start?: number | undefined;\n readonly end?: number | undefined;\n },\n ): Promise<\n StorageFileDraft<Receipt> & { readonly body: ReadableStream<Uint8Array> }\n >;\n searchText(\n input: StorageFileDraftRequest &\n StorageFileDraftPageRequest & {\n readonly expectedSize: number;\n readonly query: string;\n },\n ): Promise<\n StorageTextSearchResult & { readonly path: string; readonly etag: string }\n >;\n /** Buffer one exact text revision within maxTextBytes for host validation. */\n readText(\n input: StorageFileDraftRequest & { readonly expectedSize: number },\n ): Promise<StorageFileDraft<Receipt> & { readonly content: string }>;\n append(input: StorageFileDraftAppend): Promise<StorageFileDraft<Receipt>>;\n parts(\n input: StorageFileDraftRequest & StorageFileDraftPageRequest,\n ): Promise<StorageFileWorkflowPage<StorageFilePartReceipt>>;\n cancel(input: StorageFileDraftRequest): Promise<StorageFileDraft<Receipt>>;\n commit(input: StorageFileWorkflowCommit): Promise<readonly Receipt[]>;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import type { StorageStagedContent } from '../core/storage-staged-content.js';
2
+ import type { StorageFileDraftRecord, StorageFileWorkflowLimits, StorageFileWorkflowTransaction } from './storage-file-workflow.types.js';
3
+ /** Stage bytes outside the host transaction, then atomically publish all part references. */
4
+ export declare function stageStorageTextDraft<Scope, Receipt>(options: {
5
+ readonly scope: Scope;
6
+ readonly signal: AbortSignal;
7
+ readonly limits: Readonly<StorageFileWorkflowLimits>;
8
+ readonly content: StorageStagedContent<Scope>;
9
+ readonly idempotencyKey: string;
10
+ readonly fingerprint: string;
11
+ readonly requireMutation: (expectedEtag: string | null) => void;
12
+ readonly transaction: <T>(work: (tx: StorageFileWorkflowTransaction<Receipt>) => Promise<T>) => Promise<T>;
13
+ readonly load: () => Promise<{
14
+ content: string | ReadableStream<Uint8Array>;
15
+ text?: boolean;
16
+ path: string;
17
+ expectedEtag: string | null;
18
+ source: StorageFileDraftRecord<Receipt> | null;
19
+ }>;
20
+ }): Promise<StorageFileDraftRecord<Receipt>>;
21
+ //# sourceMappingURL=storage-text-draft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-text-draft.d.ts","sourceRoot":"","sources":["../../src/workspace/storage-text-draft.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EAEtB,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,6FAA6F;AAC7F,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;IACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EACtB,IAAI,EAAE,CAAC,EAAE,EAAE,8BAA8B,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAC9D,OAAO,CAAC,CAAC,CAAC,CAAC;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KAChD,CAAC,CAAC;CACJ,GAAG,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CA4F3C"}
@@ -0,0 +1,77 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { chunkStorageDraftStream } from './storage-draft-stream.js';
3
+ import { StorageError } from '../storage.error.js';
4
+ import { storageBytesStream } from '../core/storage-streams.js';
5
+ /** Stage bytes outside the host transaction, then atomically publish all part references. */
6
+ export async function stageStorageTextDraft(options) {
7
+ const { transaction, signal, limits } = options;
8
+ const replay = async (tx) => {
9
+ const prior = await tx.findDraftByKey(options.idempotencyKey);
10
+ if (prior !== null) {
11
+ options.requireMutation(prior.expectedEtag);
12
+ if (prior.requestFingerprint !== options.fingerprint)
13
+ throw new StorageError('Draft key was already used for different input.', { code: 'CONFLICT' });
14
+ }
15
+ return prior;
16
+ };
17
+ const prior = await transaction(replay);
18
+ if (prior !== null)
19
+ return prior;
20
+ const loaded = await options.load();
21
+ options.requireMutation(loaded.expectedEtag);
22
+ if (typeof loaded.content === 'string' &&
23
+ /[\uD800-\uDFFF]/u.test(loaded.content))
24
+ throw new StorageError('Text must be well-formed UTF-8.', {
25
+ code: 'INVALID_ARGUMENT',
26
+ });
27
+ const source = typeof loaded.content === 'string'
28
+ ? storageBytesStream(new TextEncoder().encode(loaded.content))
29
+ : loaded.content;
30
+ const parts = [];
31
+ let size = 0;
32
+ for await (const chunk of chunkStorageDraftStream(source, limits.maxChunkBytes, loaded.text ?? true, signal)) {
33
+ signal.throwIfAborted();
34
+ const body = await options.content.write(options.scope, storageBytesStream(chunk), { maxBytes: limits.maxChunkBytes, signal });
35
+ if (body.size !== chunk.length ||
36
+ body.sha256 !== createHash('sha256').update(chunk).digest('hex'))
37
+ throw new StorageError('Invalid draft chunk receipt.', {
38
+ code: 'PROVIDER',
39
+ });
40
+ parts.push({ offset: size, size: body.size, sha256: body.sha256, body });
41
+ size += chunk.length;
42
+ if (!Number.isSafeInteger(size))
43
+ throw new StorageError('Draft size exceeds supported integer precision.', { code: 'LIMIT_EXCEEDED' });
44
+ }
45
+ return transaction(async (tx) => {
46
+ const concurrent = await replay(tx);
47
+ if (concurrent !== null)
48
+ return concurrent;
49
+ if (loaded.source !== null) {
50
+ const current = await tx.getDraft(loaded.source.id);
51
+ if (current === null ||
52
+ current.size !== loaded.source.size ||
53
+ !['open', 'sealed'].includes(current.status))
54
+ throw new StorageError('The source draft changed while editing. Read its latest size.', { code: 'CONFLICT' });
55
+ await tx.saveDraft({ ...current, status: 'sealed' });
56
+ }
57
+ const draft = {
58
+ id: randomUUID(),
59
+ path: loaded.path,
60
+ expectedEtag: loaded.expectedEtag,
61
+ sourceDraftId: loaded.source?.id ?? null,
62
+ text: loaded.text ?? true,
63
+ status: 'sealed',
64
+ size,
65
+ result: null,
66
+ createdAt: new Date().toISOString(),
67
+ idempotencyKey: options.idempotencyKey,
68
+ requestFingerprint: options.fingerprint,
69
+ body: null,
70
+ };
71
+ await tx.saveDraft(draft);
72
+ for (const part of parts)
73
+ await tx.putPart(draft.id, part);
74
+ return draft;
75
+ });
76
+ }
77
+ //# sourceMappingURL=storage-text-draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-text-draft.js","sourceRoot":"","sources":["../../src/workspace/storage-text-draft.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\nimport { chunkStorageDraftStream } from './storage-draft-stream.js';\nimport { StorageError } from '../storage.error.js';\nimport { storageBytesStream } from '../core/storage-streams.js';\nimport type { StorageStagedContent } from '../core/storage-staged-content.js';\nimport type {\n StorageFileDraftRecord,\n StorageFilePartRecord,\n StorageFileWorkflowLimits,\n StorageFileWorkflowTransaction,\n} from './storage-file-workflow.types.js';\n\n/** Stage bytes outside the host transaction, then atomically publish all part references. */\nexport async function stageStorageTextDraft<Scope, Receipt>(options: {\n readonly scope: Scope;\n readonly signal: AbortSignal;\n readonly limits: Readonly<StorageFileWorkflowLimits>;\n readonly content: StorageStagedContent<Scope>;\n readonly idempotencyKey: string;\n readonly fingerprint: string;\n readonly requireMutation: (expectedEtag: string | null) => void;\n readonly transaction: <T>(\n work: (tx: StorageFileWorkflowTransaction<Receipt>) => Promise<T>,\n ) => Promise<T>;\n readonly load: () => Promise<{\n content: string | ReadableStream<Uint8Array>;\n text?: boolean;\n path: string;\n expectedEtag: string | null;\n source: StorageFileDraftRecord<Receipt> | null;\n }>;\n}): Promise<StorageFileDraftRecord<Receipt>> {\n const { transaction, signal, limits } = options;\n const replay = async (tx: StorageFileWorkflowTransaction<Receipt>) => {\n const prior = await tx.findDraftByKey(options.idempotencyKey);\n if (prior !== null) {\n options.requireMutation(prior.expectedEtag);\n if (prior.requestFingerprint !== options.fingerprint)\n throw new StorageError(\n 'Draft key was already used for different input.',\n { code: 'CONFLICT' },\n );\n }\n return prior;\n };\n const prior = await transaction(replay);\n if (prior !== null) return prior;\n const loaded = await options.load();\n options.requireMutation(loaded.expectedEtag);\n if (\n typeof loaded.content === 'string' &&\n /[\\uD800-\\uDFFF]/u.test(loaded.content)\n )\n throw new StorageError('Text must be well-formed UTF-8.', {\n code: 'INVALID_ARGUMENT',\n });\n const source =\n typeof loaded.content === 'string'\n ? storageBytesStream(new TextEncoder().encode(loaded.content))\n : loaded.content;\n const parts: StorageFilePartRecord[] = [];\n let size = 0;\n for await (const chunk of chunkStorageDraftStream(\n source,\n limits.maxChunkBytes,\n loaded.text ?? true,\n signal,\n )) {\n signal.throwIfAborted();\n const body = await options.content.write(\n options.scope,\n storageBytesStream(chunk),\n { maxBytes: limits.maxChunkBytes, signal },\n );\n if (\n body.size !== chunk.length ||\n body.sha256 !== createHash('sha256').update(chunk).digest('hex')\n )\n throw new StorageError('Invalid draft chunk receipt.', {\n code: 'PROVIDER',\n });\n parts.push({ offset: size, size: body.size, sha256: body.sha256, body });\n size += chunk.length;\n if (!Number.isSafeInteger(size))\n throw new StorageError(\n 'Draft size exceeds supported integer precision.',\n { code: 'LIMIT_EXCEEDED' },\n );\n }\n return transaction(async (tx) => {\n const concurrent = await replay(tx);\n if (concurrent !== null) return concurrent;\n if (loaded.source !== null) {\n const current = await tx.getDraft(loaded.source.id);\n if (\n current === null ||\n current.size !== loaded.source.size ||\n !['open', 'sealed'].includes(current.status)\n )\n throw new StorageError(\n 'The source draft changed while editing. Read its latest size.',\n { code: 'CONFLICT' },\n );\n await tx.saveDraft({ ...current, status: 'sealed' });\n }\n const draft: StorageFileDraftRecord<Receipt> = {\n id: randomUUID(),\n path: loaded.path,\n expectedEtag: loaded.expectedEtag,\n sourceDraftId: loaded.source?.id ?? null,\n text: loaded.text ?? true,\n status: 'sealed',\n size,\n result: null,\n createdAt: new Date().toISOString(),\n idempotencyKey: options.idempotencyKey,\n requestFingerprint: options.fingerprint,\n body: null,\n };\n await tx.saveDraft(draft);\n for (const part of parts) await tx.putPart(draft.id, part);\n return draft;\n });\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import type { StorageFileCatalogCapability, StorageCatalogFile, StorageCatalogPath, StorageCatalogCommand } from './storage-file-catalog.types.js';
2
+ import type { StorageFileDraft, StorageFileWorkflowCapability, StorageFileWorkflowOperation } from './storage-file-workflow.types.js';
3
+ export interface StorageWorkingFile extends StorageCatalogFile {
4
+ readonly operation: 'created' | 'updated';
5
+ readonly pending: true;
6
+ }
7
+ export interface StorageWorkingFileReceipt {
8
+ readonly path: string;
9
+ readonly etag: string;
10
+ readonly size: number;
11
+ }
12
+ /** A path-based editing view over durable checkpoints. Saved heads change only on commit. */
13
+ export declare class StorageWorkingFiles<Receipt extends StorageWorkingFileReceipt> {
14
+ readonly files: StorageFileCatalogCapability<Receipt>;
15
+ readonly workflow: StorageFileWorkflowCapability<Receipt>;
16
+ readonly catalog: StorageFileCatalogCapability<Receipt | StorageWorkingFile>;
17
+ constructor(files: StorageFileCatalogCapability<Receipt>, workflow: StorageFileWorkflowCapability<Receipt>);
18
+ write(input: StorageCatalogCommand & {
19
+ readonly content: string;
20
+ }): Promise<Receipt | StorageWorkingFile>;
21
+ /** Resolve an exact candidate (including committed replay) or the unique unfinished leaf. */
22
+ draft(input: StorageCatalogPath): Promise<StorageFileDraft<Receipt> | null>;
23
+ /** Discovery derives from persisted lineage, so process restarts need no local registry. */
24
+ pending(input: StorageFileWorkflowOperation): Promise<StorageFileDraft<Receipt>[]>;
25
+ private page;
26
+ private saved;
27
+ private result;
28
+ private receipt;
29
+ private textLimit;
30
+ private requireWrite;
31
+ private denied;
32
+ private conflict;
33
+ }
34
+ //# sourceMappingURL=storage-working-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-working-files.d.ts","sourceRoot":"","sources":["../../src/workspace/storage-working-files.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,4BAA4B,EAE7B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB;AACD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,6FAA6F;AAC7F,qBAAa,mBAAmB,CAAC,OAAO,SAAS,yBAAyB;IAGtE,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC,OAAO,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC,OAAO,CAAC;IAH3D,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC7E,YACW,KAAK,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAC5C,QAAQ,EAAE,6BAA6B,CAAC,OAAO,CAAC,EA2H1D;IAEK,KAAK,CACT,KAAK,EAAE,qBAAqB,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAkDvC;IAED,6FAA6F;IACvF,KAAK,CACT,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAyB3C;IAED,4FAA4F;IACtF,OAAO,CACX,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAyBtC;YAEa,IAAI;IAuDlB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,YAAY;IAGpB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;CAMjB"}