@lorepack/cli 0.0.0-stage → 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/commands/activate.d.ts +20 -0
  3. package/dist/commands/activate.d.ts.map +1 -0
  4. package/dist/commands/activate.js +171 -0
  5. package/dist/commands/activate.js.map +1 -0
  6. package/dist/commands/build.d.ts +3 -0
  7. package/dist/commands/build.d.ts.map +1 -0
  8. package/dist/commands/build.js +53 -0
  9. package/dist/commands/build.js.map +1 -0
  10. package/dist/commands/config.d.ts +14 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +109 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/connect.d.ts +5 -0
  15. package/dist/commands/connect.d.ts.map +1 -0
  16. package/dist/commands/connect.js +196 -0
  17. package/dist/commands/connect.js.map +1 -0
  18. package/dist/commands/deploy.d.ts +14 -0
  19. package/dist/commands/deploy.d.ts.map +1 -0
  20. package/dist/commands/deploy.js +248 -0
  21. package/dist/commands/deploy.js.map +1 -0
  22. package/dist/commands/dev.d.ts +25 -0
  23. package/dist/commands/dev.d.ts.map +1 -0
  24. package/dist/commands/dev.js +227 -0
  25. package/dist/commands/dev.js.map +1 -0
  26. package/dist/commands/diff.d.ts +3 -0
  27. package/dist/commands/diff.d.ts.map +1 -0
  28. package/dist/commands/diff.js +75 -0
  29. package/dist/commands/diff.js.map +1 -0
  30. package/dist/commands/doctor.d.ts +14 -0
  31. package/dist/commands/doctor.d.ts.map +1 -0
  32. package/dist/commands/doctor.js +96 -0
  33. package/dist/commands/doctor.js.map +1 -0
  34. package/dist/commands/export.d.ts +3 -0
  35. package/dist/commands/export.d.ts.map +1 -0
  36. package/dist/commands/export.js +126 -0
  37. package/dist/commands/export.js.map +1 -0
  38. package/dist/commands/index.d.ts +8 -0
  39. package/dist/commands/index.d.ts.map +1 -0
  40. package/dist/commands/index.js +51 -0
  41. package/dist/commands/index.js.map +1 -0
  42. package/dist/commands/init.d.ts +3 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +95 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/inspect.d.ts +15 -0
  47. package/dist/commands/inspect.d.ts.map +1 -0
  48. package/dist/commands/inspect.js +527 -0
  49. package/dist/commands/inspect.js.map +1 -0
  50. package/dist/commands/mcp.d.ts +12 -0
  51. package/dist/commands/mcp.d.ts.map +1 -0
  52. package/dist/commands/mcp.js +219 -0
  53. package/dist/commands/mcp.js.map +1 -0
  54. package/dist/commands/pack.d.ts +9 -0
  55. package/dist/commands/pack.d.ts.map +1 -0
  56. package/dist/commands/pack.js +57 -0
  57. package/dist/commands/pack.js.map +1 -0
  58. package/dist/commands/plan.d.ts +3 -0
  59. package/dist/commands/plan.d.ts.map +1 -0
  60. package/dist/commands/plan.js +44 -0
  61. package/dist/commands/plan.js.map +1 -0
  62. package/dist/commands/prune.d.ts +7 -0
  63. package/dist/commands/prune.d.ts.map +1 -0
  64. package/dist/commands/prune.js +341 -0
  65. package/dist/commands/prune.js.map +1 -0
  66. package/dist/commands/search.d.ts +3 -0
  67. package/dist/commands/search.d.ts.map +1 -0
  68. package/dist/commands/search.js +84 -0
  69. package/dist/commands/search.js.map +1 -0
  70. package/dist/commands/serve.d.ts +20 -0
  71. package/dist/commands/serve.d.ts.map +1 -0
  72. package/dist/commands/serve.js +66 -0
  73. package/dist/commands/serve.js.map +1 -0
  74. package/dist/commands/status.d.ts +3 -0
  75. package/dist/commands/status.d.ts.map +1 -0
  76. package/dist/commands/status.js +27 -0
  77. package/dist/commands/status.js.map +1 -0
  78. package/dist/commands/target.d.ts +71 -0
  79. package/dist/commands/target.d.ts.map +1 -0
  80. package/dist/commands/target.js +945 -0
  81. package/dist/commands/target.js.map +1 -0
  82. package/dist/entry.d.ts +3 -0
  83. package/dist/entry.d.ts.map +1 -0
  84. package/dist/entry.js +19 -0
  85. package/dist/entry.js.map +1 -0
  86. package/dist/framework/context.d.ts +49 -0
  87. package/dist/framework/context.d.ts.map +1 -0
  88. package/dist/framework/context.js +47 -0
  89. package/dist/framework/context.js.map +1 -0
  90. package/dist/framework/exit.d.ts +36 -0
  91. package/dist/framework/exit.d.ts.map +1 -0
  92. package/dist/framework/exit.js +57 -0
  93. package/dist/framework/exit.js.map +1 -0
  94. package/dist/framework/metadata.d.ts +38 -0
  95. package/dist/framework/metadata.d.ts.map +1 -0
  96. package/dist/framework/metadata.js +47 -0
  97. package/dist/framework/metadata.js.map +1 -0
  98. package/dist/framework/program.d.ts +47 -0
  99. package/dist/framework/program.d.ts.map +1 -0
  100. package/dist/framework/program.js +189 -0
  101. package/dist/framework/program.js.map +1 -0
  102. package/dist/index.d.ts +7 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +7 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/migrations/README.md +7 -0
  107. package/dist/migrations/build/0001_catalog.sql +85 -0
  108. package/dist/migrations/build/0002_tables.sql +43 -0
  109. package/dist/migrations/build/0003_table-cell-range.sql +13 -0
  110. package/dist/migrations/build/0004_chunk-page.sql +11 -0
  111. package/dist/migrations/state/0001_state.sql +40 -0
  112. package/dist/public-entry.js +38563 -0
  113. package/dist/public-entry.js.map +7 -0
  114. package/dist/public-index.js +36428 -0
  115. package/dist/public-index.js.map +7 -0
  116. package/dist/services/build.d.ts +48 -0
  117. package/dist/services/build.d.ts.map +1 -0
  118. package/dist/services/build.js +499 -0
  119. package/dist/services/build.js.map +1 -0
  120. package/dist/services/builds.d.ts +40 -0
  121. package/dist/services/builds.d.ts.map +1 -0
  122. package/dist/services/builds.js +184 -0
  123. package/dist/services/builds.js.map +1 -0
  124. package/dist/services/cancellation.d.ts +27 -0
  125. package/dist/services/cancellation.d.ts.map +1 -0
  126. package/dist/services/cancellation.js +41 -0
  127. package/dist/services/cancellation.js.map +1 -0
  128. package/dist/services/cloudflare-target.d.ts +38 -0
  129. package/dist/services/cloudflare-target.d.ts.map +1 -0
  130. package/dist/services/cloudflare-target.js +471 -0
  131. package/dist/services/cloudflare-target.js.map +1 -0
  132. package/dist/services/comparer.d.ts +15 -0
  133. package/dist/services/comparer.d.ts.map +1 -0
  134. package/dist/services/comparer.js +43 -0
  135. package/dist/services/comparer.js.map +1 -0
  136. package/dist/services/config-resolve.d.ts +60 -0
  137. package/dist/services/config-resolve.d.ts.map +1 -0
  138. package/dist/services/config-resolve.js +178 -0
  139. package/dist/services/config-resolve.js.map +1 -0
  140. package/dist/services/deploy.d.ts +70 -0
  141. package/dist/services/deploy.d.ts.map +1 -0
  142. package/dist/services/deploy.js +260 -0
  143. package/dist/services/deploy.js.map +1 -0
  144. package/dist/services/dev-session.d.ts +52 -0
  145. package/dist/services/dev-session.d.ts.map +1 -0
  146. package/dist/services/dev-session.js +102 -0
  147. package/dist/services/dev-session.js.map +1 -0
  148. package/dist/services/doctor.d.ts +35 -0
  149. package/dist/services/doctor.d.ts.map +1 -0
  150. package/dist/services/doctor.js +389 -0
  151. package/dist/services/doctor.js.map +1 -0
  152. package/dist/services/export.d.ts +20 -0
  153. package/dist/services/export.d.ts.map +1 -0
  154. package/dist/services/export.js +129 -0
  155. package/dist/services/export.js.map +1 -0
  156. package/dist/services/init.d.ts +46 -0
  157. package/dist/services/init.d.ts.map +1 -0
  158. package/dist/services/init.js +231 -0
  159. package/dist/services/init.js.map +1 -0
  160. package/dist/services/packing.d.ts +25 -0
  161. package/dist/services/packing.d.ts.map +1 -0
  162. package/dist/services/packing.js +69 -0
  163. package/dist/services/packing.js.map +1 -0
  164. package/dist/services/parse-cache.d.ts +47 -0
  165. package/dist/services/parse-cache.d.ts.map +1 -0
  166. package/dist/services/parse-cache.js +65 -0
  167. package/dist/services/parse-cache.js.map +1 -0
  168. package/dist/services/project.d.ts +49 -0
  169. package/dist/services/project.d.ts.map +1 -0
  170. package/dist/services/project.js +119 -0
  171. package/dist/services/project.js.map +1 -0
  172. package/dist/services/remote-prune.d.ts +7 -0
  173. package/dist/services/remote-prune.d.ts.map +1 -0
  174. package/dist/services/remote-prune.js +34 -0
  175. package/dist/services/remote-prune.js.map +1 -0
  176. package/dist/services/retention.d.ts +20 -0
  177. package/dist/services/retention.d.ts.map +1 -0
  178. package/dist/services/retention.js +106 -0
  179. package/dist/services/retention.js.map +1 -0
  180. package/dist/services/revalidate.d.ts +36 -0
  181. package/dist/services/revalidate.d.ts.map +1 -0
  182. package/dist/services/revalidate.js +73 -0
  183. package/dist/services/revalidate.js.map +1 -0
  184. package/dist/services/search.d.ts +25 -0
  185. package/dist/services/search.d.ts.map +1 -0
  186. package/dist/services/search.js +88 -0
  187. package/dist/services/search.js.map +1 -0
  188. package/dist/services/serving.d.ts +70 -0
  189. package/dist/services/serving.d.ts.map +1 -0
  190. package/dist/services/serving.js +240 -0
  191. package/dist/services/serving.js.map +1 -0
  192. package/dist/services/status.d.ts +54 -0
  193. package/dist/services/status.d.ts.map +1 -0
  194. package/dist/services/status.js +203 -0
  195. package/dist/services/status.js.map +1 -0
  196. package/dist/services/studio-assets.d.ts +13 -0
  197. package/dist/services/studio-assets.d.ts.map +1 -0
  198. package/dist/services/studio-assets.js +94 -0
  199. package/dist/services/studio-assets.js.map +1 -0
  200. package/dist/services/studio-diagnostics.d.ts +28 -0
  201. package/dist/services/studio-diagnostics.d.ts.map +1 -0
  202. package/dist/services/studio-diagnostics.js +88 -0
  203. package/dist/services/studio-diagnostics.js.map +1 -0
  204. package/dist/services/studio-endpoints.d.ts +61 -0
  205. package/dist/services/studio-endpoints.d.ts.map +1 -0
  206. package/dist/services/studio-endpoints.js +88 -0
  207. package/dist/services/studio-endpoints.js.map +1 -0
  208. package/dist/services/studio-mutations.d.ts +32 -0
  209. package/dist/services/studio-mutations.d.ts.map +1 -0
  210. package/dist/services/studio-mutations.js +149 -0
  211. package/dist/services/studio-mutations.js.map +1 -0
  212. package/dist/services/versions.d.ts +38 -0
  213. package/dist/services/versions.d.ts.map +1 -0
  214. package/dist/services/versions.js +46 -0
  215. package/dist/services/versions.js.map +1 -0
  216. package/dist/services/watch.d.ts +103 -0
  217. package/dist/services/watch.d.ts.map +1 -0
  218. package/dist/services/watch.js +420 -0
  219. package/dist/services/watch.js.map +1 -0
  220. package/package.json +73 -4
  221. package/studio-dist/assets/ibm-plex-mono-latin-400-normal-Dm_PoFIZ.woff2 +0 -0
  222. package/studio-dist/assets/ibm-plex-mono-latin-500-normal-C_OblDzq.woff2 +0 -0
  223. package/studio-dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  224. package/studio-dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  225. package/studio-dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  226. package/studio-dist/assets/index-BuAYbQVX.js +66 -0
  227. package/studio-dist/assets/index-C_3XEUt4.css +1 -0
  228. package/studio-dist/index.html +30 -0
  229. package/README.md +0 -3
@@ -0,0 +1,471 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ import { LoreError } from '@lorepack/core';
7
+ import { createCloudflareDeploymentTarget, } from '@lorepack/deploy-cloudflare';
8
+ import { createWranglerAdapter, isRetryableWranglerRemoteD1Failure, readCloudflareTargetReceipt, } from '../commands/target.js';
9
+ const execFileAsync = promisify(execFile);
10
+ const WRANGLER_REMOTE_D1_RETRY_LIMIT = 3;
11
+ const WRANGLER_BIN = join(import.meta.dirname, '..', '..', '..', 'deploy-cloudflare', 'node_modules', 'wrangler', 'bin', 'wrangler.js');
12
+ const WRANGLER_CWD = join(import.meta.dirname, '..', '..', '..', 'deploy-cloudflare');
13
+ const WRANGLER_D1_TRANSACTION_CONTROL = new Set(['begin immediate', 'commit', 'rollback']);
14
+ export async function resolveCloudflareTarget(projectRoot) {
15
+ return await resolveCloudflareTargetWithAdapter(projectRoot, createWranglerDeployAdapter());
16
+ }
17
+ export async function resolveCloudflareTargetWithAdapter(projectRoot, adapter) {
18
+ const resolved = await resolveCloudflareResourcesWithAdapter(projectRoot, adapter);
19
+ return createCloudflareDeploymentTarget({
20
+ projectId: resolved.receipt.project,
21
+ endpoint: resolved.endpoint,
22
+ workerName: resolved.receipt.workerName,
23
+ catalogDatabaseName: resolved.receipt.catalogDatabaseName,
24
+ objectsBucketName: resolved.receipt.objectsBucketName,
25
+ catalogDb: resolved.catalogDb,
26
+ objects: resolved.objects,
27
+ publicBuildId: async () => await readPublicBuildId(resolved.receipt.workerName),
28
+ });
29
+ }
30
+ export async function resolveCloudflareResourcesWithAdapter(projectRoot, adapter) {
31
+ const receipt = readCloudflareTargetReceipt(projectRoot);
32
+ const detection = await adapter.detect();
33
+ if (!detection.installed) {
34
+ throw new LoreError('LORE_E_TARGET_NOT_CONFIGURED', 'The pinned Cloudflare Wrangler dependency is not available for deploy resolution.', {
35
+ remediation: 'Run `pnpm install` so the pinned Wrangler dependency is available.',
36
+ subject: 'cloudflare',
37
+ });
38
+ }
39
+ const identity = await adapter.whoami();
40
+ if (!identity.authenticated) {
41
+ throw new LoreError('LORE_E_TARGET_NOT_CONFIGURED', 'Wrangler is installed, but no Cloudflare login is available for this machine.', {
42
+ remediation: `Log in first with \`${process.execPath} ${detection.path ?? WRANGLER_BIN} login --device\`.`,
43
+ subject: 'cloudflare',
44
+ });
45
+ }
46
+ if (identity.accountId !== undefined && identity.accountId !== receipt.accountId) {
47
+ throw new LoreError('LORE_E_TARGET_NOT_CONFIGURED', `The cloudflare target receipt belongs to account ${receipt.accountId}, but Wrangler is logged into ${identity.accountId}.`, {
48
+ remediation: 'Log into the matching Cloudflare account or rewrite the receipt with `lorepack target add cloudflare`.',
49
+ subject: receipt.accountId,
50
+ });
51
+ }
52
+ const databases = await adapter.listDatabases().catch((cause) => {
53
+ throw new LoreError('LORE_E_TARGET_NOT_CONFIGURED', 'The CLI could not inspect Cloudflare D1 databases through the pinned Wrangler dependency.', {
54
+ remediation: 'Check that Wrangler is installed and authenticated, then retry `lorepack deploy cloudflare`.',
55
+ subject: receipt.catalogDatabaseName,
56
+ cause,
57
+ });
58
+ });
59
+ if (!databases.some((database) => database.name === receipt.catalogDatabaseName)) {
60
+ throw new LoreError('LORE_E_TARGET_NOT_CONFIGURED', `The cloudflare target receipt refers to D1 database ${receipt.catalogDatabaseName}, but it is not visible to the current Cloudflare account.`, {
61
+ remediation: 'Fix the receipt or create the expected D1 database, then run `lorepack target add cloudflare` again.',
62
+ subject: receipt.catalogDatabaseName,
63
+ });
64
+ }
65
+ return {
66
+ receipt,
67
+ endpoint: `https://${receipt.workerName}.workers.dev/mcp`,
68
+ catalogDb: adapter.openCatalogDatabase(receipt.catalogDatabaseName),
69
+ objects: adapter.openObjectsBucket(receipt.objectsBucketName),
70
+ };
71
+ }
72
+ export function createWranglerDeployAdapter() {
73
+ return {
74
+ ...createWranglerAdapter(),
75
+ async listDatabases() {
76
+ const { stdout } = await execWrangler(['d1', 'list', '--json']);
77
+ const parsed = parseWranglerJson(stdout);
78
+ if (!Array.isArray(parsed) || !parsed.every(isDatabaseInfo)) {
79
+ throw new LoreError('LORE_E_TARGET_NOT_CONFIGURED', 'Wrangler returned an unreadable Cloudflare D1 list response.', {
80
+ remediation: 'Check that Wrangler is current and authenticated, then retry `lorepack deploy cloudflare`.',
81
+ subject: 'cloudflare',
82
+ });
83
+ }
84
+ return parsed;
85
+ },
86
+ openCatalogDatabase(name) {
87
+ return new WranglerCatalogDatabase(name);
88
+ },
89
+ openObjectsBucket(name) {
90
+ return new WranglerR2Bucket(name);
91
+ },
92
+ };
93
+ }
94
+ class WranglerCatalogDatabase {
95
+ #name;
96
+ #transaction = new WranglerD1TransactionBatch();
97
+ constructor(name) {
98
+ this.#name = name;
99
+ }
100
+ prepare(query) {
101
+ return new WranglerStatement(this.#name, this.#transaction, query);
102
+ }
103
+ }
104
+ class WranglerStatement {
105
+ #databaseName;
106
+ #transaction;
107
+ #query;
108
+ #bindings = [];
109
+ constructor(databaseName, transaction, query) {
110
+ this.#databaseName = databaseName;
111
+ this.#transaction = transaction;
112
+ this.#query = query;
113
+ }
114
+ bind(...values) {
115
+ this.#bindings = values;
116
+ return this;
117
+ }
118
+ async run() {
119
+ const control = wranglerD1TransactionControl(this.#query);
120
+ if (control === 'begin') {
121
+ this.#transaction.begin();
122
+ return {};
123
+ }
124
+ if (control === 'rollback') {
125
+ this.#transaction.rollback();
126
+ return {};
127
+ }
128
+ if (control === 'commit') {
129
+ const flushed = this.#transaction.commit();
130
+ if (flushed === null)
131
+ return {};
132
+ const { stdout } = await execWranglerSqlFile(this.#databaseName, flushed);
133
+ return { results: readD1Results(parseWranglerJson(stdout)) };
134
+ }
135
+ const mode = wranglerD1ExecutionMode(this.#query);
136
+ const rendered = renderSql(this.#query, this.#bindings);
137
+ if (mode === 'file' && this.#transaction.active) {
138
+ this.#transaction.stage(rendered);
139
+ return {};
140
+ }
141
+ if (mode === 'command' && this.#transaction.active) {
142
+ const flushed = this.#transaction.flush();
143
+ if (flushed !== null) {
144
+ await execWranglerSqlFile(this.#databaseName, flushed);
145
+ }
146
+ }
147
+ const { stdout } = mode === 'file'
148
+ ? await execWranglerSqlFile(this.#databaseName, rendered)
149
+ : await execWrangler([
150
+ 'd1',
151
+ 'execute',
152
+ this.#databaseName,
153
+ '--remote',
154
+ '--json',
155
+ '--command',
156
+ rendered,
157
+ ]);
158
+ return { results: readD1Results(parseWranglerJson(stdout)) };
159
+ }
160
+ async first() {
161
+ const results = await this.run();
162
+ return results.results?.[0] ?? null;
163
+ }
164
+ }
165
+ export function isWranglerD1TransactionControl(query) {
166
+ return wranglerD1TransactionControl(query) !== null;
167
+ }
168
+ export function wranglerD1ExecutionMode(query) {
169
+ if (wranglerD1TransactionControl(query) !== null)
170
+ return 'skip';
171
+ return isWranglerD1ReadQuery(query) ? 'command' : 'file';
172
+ }
173
+ export class WranglerD1TransactionBatch {
174
+ #statements = null;
175
+ get active() {
176
+ return this.#statements !== null;
177
+ }
178
+ begin() {
179
+ this.#statements = [];
180
+ }
181
+ stage(sql) {
182
+ if (this.#statements === null)
183
+ return;
184
+ this.#statements.push(sql);
185
+ }
186
+ flush() {
187
+ const statements = this.#statements;
188
+ if (statements === null || statements.length === 0)
189
+ return null;
190
+ this.#statements = [];
191
+ return renderWranglerSqlBatch(statements);
192
+ }
193
+ commit() {
194
+ const flushed = this.flush();
195
+ this.#statements = null;
196
+ return flushed;
197
+ }
198
+ rollback() {
199
+ this.#statements = null;
200
+ }
201
+ }
202
+ export function renderWranglerSqlBatch(statements) {
203
+ return statements.map(terminateSql).join('\n');
204
+ }
205
+ function wranglerD1TransactionControl(query) {
206
+ const normalized = query.trim().toLowerCase();
207
+ if (!WRANGLER_D1_TRANSACTION_CONTROL.has(normalized))
208
+ return null;
209
+ if (normalized === 'begin immediate')
210
+ return 'begin';
211
+ if (normalized === 'commit')
212
+ return 'commit';
213
+ return 'rollback';
214
+ }
215
+ function isWranglerD1ReadQuery(query) {
216
+ const normalized = query.trim().toLowerCase();
217
+ return (normalized.startsWith('select') ||
218
+ normalized.startsWith('pragma') ||
219
+ normalized.startsWith('with'));
220
+ }
221
+ class WranglerR2Bucket {
222
+ #name;
223
+ constructor(name) {
224
+ this.#name = name;
225
+ }
226
+ async put(key, value) {
227
+ const temp = tempPath('lore-r2-put-');
228
+ try {
229
+ writeFileSync(temp, value);
230
+ await execWrangler([
231
+ 'r2',
232
+ 'object',
233
+ 'put',
234
+ `${this.#name}/${key}`,
235
+ '--remote',
236
+ '--file',
237
+ temp,
238
+ ]);
239
+ }
240
+ finally {
241
+ rmSync(temp, { force: true });
242
+ }
243
+ }
244
+ async get(key) {
245
+ const temp = tempPath('lore-r2-get-');
246
+ try {
247
+ const result = await execWrangler(['r2', 'object', 'get', `${this.#name}/${key}`, '--remote', '--file', temp], true);
248
+ if (result.missingObject === true)
249
+ return null;
250
+ if (!readableFileExists(temp))
251
+ return null;
252
+ const body = readFileSync(temp);
253
+ return {
254
+ arrayBuffer: async () => body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength),
255
+ };
256
+ }
257
+ finally {
258
+ rmSync(temp, { force: true });
259
+ }
260
+ }
261
+ async head(key) {
262
+ return (await this.get(key)) === null ? null : {};
263
+ }
264
+ async delete(key) {
265
+ await execWrangler(['r2', 'object', 'delete', `${this.#name}/${key}`, '--remote']);
266
+ }
267
+ }
268
+ function isDatabaseInfo(value) {
269
+ return (typeof value === 'object' &&
270
+ value !== null &&
271
+ typeof value.name === 'string');
272
+ }
273
+ function readD1Results(raw) {
274
+ if (Array.isArray(raw)) {
275
+ for (const item of raw) {
276
+ const results = readResultsArray(item);
277
+ if (results !== null)
278
+ return results;
279
+ }
280
+ return [];
281
+ }
282
+ return readResultsArray(raw) ?? [];
283
+ }
284
+ function readResultsArray(raw) {
285
+ if (typeof raw !== 'object' || raw === null)
286
+ return null;
287
+ const value = raw;
288
+ if (Array.isArray(value.results))
289
+ return value.results;
290
+ if (Array.isArray(value.result))
291
+ return value.result;
292
+ return null;
293
+ }
294
+ export function parseWranglerJson(stdout) {
295
+ try {
296
+ return JSON.parse(stdout);
297
+ }
298
+ catch (error) {
299
+ const start = findWranglerJsonStart(stdout);
300
+ if (start === null)
301
+ throw error;
302
+ return JSON.parse(stdout.slice(start));
303
+ }
304
+ }
305
+ function renderSql(query, bindings) {
306
+ let index = 0;
307
+ const rendered = query.replace(/\?/g, () => {
308
+ if (index >= bindings.length) {
309
+ throw new LoreError('LORE_E_INTERNAL', 'A Cloudflare D1 statement was missing a bound value.', {
310
+ remediation: 'Fix the Cloudflare CLI adapter so every placeholder is bound exactly once.',
311
+ });
312
+ }
313
+ return literalFor(bindings[index++]);
314
+ });
315
+ if (index !== bindings.length) {
316
+ throw new LoreError('LORE_E_INTERNAL', 'A Cloudflare D1 statement bound too many values.', {
317
+ remediation: 'Fix the Cloudflare CLI adapter so every placeholder is bound exactly once.',
318
+ });
319
+ }
320
+ return rendered;
321
+ }
322
+ function findWranglerJsonStart(stdout) {
323
+ const objectStart = stdout.indexOf('{');
324
+ const arrayStart = stdout.indexOf('[');
325
+ if (objectStart === -1 && arrayStart === -1)
326
+ return null;
327
+ if (objectStart === -1)
328
+ return arrayStart;
329
+ if (arrayStart === -1)
330
+ return objectStart;
331
+ return Math.min(objectStart, arrayStart);
332
+ }
333
+ function literalFor(value) {
334
+ if (value === null)
335
+ return 'NULL';
336
+ if (typeof value === 'string')
337
+ return `'${value.replaceAll("'", "''")}'`;
338
+ if (typeof value === 'number') {
339
+ if (!Number.isFinite(value)) {
340
+ throw new LoreError('LORE_E_INTERNAL', 'Refusing to render a non-finite D1 number literal.', {
341
+ remediation: 'Fix the Cloudflare CLI adapter so it writes only finite numeric values.',
342
+ });
343
+ }
344
+ return String(value);
345
+ }
346
+ if (typeof value === 'boolean')
347
+ return value ? '1' : '0';
348
+ throw new LoreError('LORE_E_INTERNAL', `Unsupported Cloudflare D1 binding type ${typeof value}.`, {
349
+ remediation: 'Fix the Cloudflare CLI adapter so it writes only scalar SQLite values.',
350
+ });
351
+ }
352
+ function terminateSql(sql) {
353
+ return sql.trimEnd().endsWith(';') ? sql : `${sql};`;
354
+ }
355
+ function isWranglerRemoteD1Execute(args) {
356
+ return args[0] === 'd1' && args[1] === 'execute' && args.includes('--remote');
357
+ }
358
+ function wranglerExecFailure(cause) {
359
+ const failure = cause;
360
+ const stdout = failure.stdout === undefined ? '' : String(failure.stdout);
361
+ const stderr = failure.stderr === undefined ? '' : String(failure.stderr);
362
+ const message = [failure.message ?? 'Wrangler execution failed.', stderr, stdout]
363
+ .filter((part) => part.trim() !== '')
364
+ .join('\n');
365
+ return new Error(message);
366
+ }
367
+ export function isWranglerMissingObjectFailure(text) {
368
+ return (text.includes('No such object') ||
369
+ text.includes('The specified key does not exist') ||
370
+ text.includes('Not Found'));
371
+ }
372
+ export function isRetryableWranglerRemoteR2Failure(text) {
373
+ return (text.includes("Unable to resolve Cloudflare's API hostname") || text.includes('fetch failed'));
374
+ }
375
+ function sleep(ms) {
376
+ return new Promise((resolve) => setTimeout(resolve, ms));
377
+ }
378
+ async function execWrangler(args, allowMissingObject = false) {
379
+ const attempts = isWranglerRemoteD1Execute(args) || isWranglerRemoteR2ObjectCommand(args)
380
+ ? WRANGLER_REMOTE_D1_RETRY_LIMIT
381
+ : 1;
382
+ let lastFailure = null;
383
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
384
+ try {
385
+ const { stdout } = await execFileAsync(process.execPath, [WRANGLER_BIN, ...args], {
386
+ cwd: WRANGLER_CWD,
387
+ env: { ...process.env, NO_D1_WARNING: 'true' },
388
+ encoding: 'utf8',
389
+ maxBuffer: 10 * 1024 * 1024,
390
+ });
391
+ return { stdout };
392
+ }
393
+ catch (cause) {
394
+ const failure = wranglerExecFailure(cause);
395
+ lastFailure = failure;
396
+ if (allowMissingObject && isWranglerMissingObjectFailure(failure.message)) {
397
+ return { stdout: '', missingObject: true };
398
+ }
399
+ if (attempt >= attempts || !isRetryableWranglerRemoteWranglerFailure(args, failure.message)) {
400
+ throw failure;
401
+ }
402
+ await sleep(250 * attempt);
403
+ }
404
+ }
405
+ throw lastFailure ?? new Error('Wrangler execution failed without an error message.');
406
+ }
407
+ async function execWranglerSqlFile(databaseName, sql) {
408
+ const path = tempPath('lore-d1-execute-', 'statement.sql');
409
+ try {
410
+ writeFileSync(path, sql, 'utf8');
411
+ return await execWrangler([
412
+ 'd1',
413
+ 'execute',
414
+ databaseName,
415
+ '--remote',
416
+ '--json',
417
+ '--file',
418
+ path,
419
+ ]);
420
+ }
421
+ finally {
422
+ rmSync(path, { force: true });
423
+ }
424
+ }
425
+ function tempPath(prefix, filename = 'object.bin') {
426
+ const directory = mkdtempSync(join(tmpdir(), prefix));
427
+ return join(directory, filename);
428
+ }
429
+ function isWranglerRemoteR2ObjectCommand(args) {
430
+ return args[0] === 'r2' && args[1] === 'object' && args.includes('--remote');
431
+ }
432
+ function isRetryableWranglerRemoteWranglerFailure(args, text) {
433
+ if (isWranglerRemoteD1Execute(args)) {
434
+ return isRetryableWranglerRemoteD1Failure(text);
435
+ }
436
+ if (isWranglerRemoteR2ObjectCommand(args)) {
437
+ return isRetryableWranglerRemoteR2Failure(text);
438
+ }
439
+ return false;
440
+ }
441
+ function readableFileExists(path) {
442
+ try {
443
+ readFileSync(path);
444
+ return true;
445
+ }
446
+ catch {
447
+ return false;
448
+ }
449
+ }
450
+ async function readPublicBuildId(workerName) {
451
+ try {
452
+ const token = process.env.LORE_REMOTE_BEARER_TOKEN;
453
+ const headers = token === undefined || token.trim() === ''
454
+ ? null
455
+ : { Authorization: `Bearer ${token.trim()}` };
456
+ const response = await fetch(`https://${workerName}.workers.dev/v1/build`, {
457
+ ...(headers === null ? {} : { headers }),
458
+ });
459
+ if (!response.ok)
460
+ return null;
461
+ const payload = (await response.json());
462
+ return isBuildId(payload.buildId) ? payload.buildId : null;
463
+ }
464
+ catch {
465
+ return null;
466
+ }
467
+ }
468
+ function isBuildId(value) {
469
+ return typeof value === 'string' && /^lore_[0-9a-f]{64}$/.test(value);
470
+ }
471
+ //# sourceMappingURL=cloudflare-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-target.js","sourceRoot":"","sources":["../../src/services/cloudflare-target.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type BuildComparer } from '@lorepack/core';
2
+ /**
3
+ * The local build comparer, which is what makes `lore://build/{a}/diff/{b}` answerable.
4
+ *
5
+ * A diff is not a runtime capability: it reads two builds, neither of which need be the
6
+ * active one, so it cannot go through the seven-capability boundary that reads exactly one
7
+ * build through one handle. It is a separate port, and this is the local adapter for it.
8
+ *
9
+ * Every read is of build records alone, never of the sources, so the comparison is instant
10
+ * and still possible after the source directory is gone (architecture 15.6). State is
11
+ * opened and closed per comparison rather than held: a server may sit idle for hours
12
+ * between diffs, and a long-lived handle on the state database is a lock nobody is using.
13
+ */
14
+ export declare function createLocalComparer(projectRoot: string): BuildComparer;
15
+ //# sourceMappingURL=comparer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparer.d.ts","sourceRoot":"","sources":["../../src/services/comparer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAA6B,MAAM,gBAAgB,CAAC;AAG/E;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAkBtE"}
@@ -0,0 +1,43 @@
1
+ import { join } from 'node:path';
2
+ import { diffBuilds } from '@lorepack/compiler';
3
+ import { LORE_DIRECTORY, LoreError } from '@lorepack/core';
4
+ import { openStateStore, readSnapshot, resolveBuildId } from './builds.js';
5
+ /**
6
+ * The local build comparer, which is what makes `lore://build/{a}/diff/{b}` answerable.
7
+ *
8
+ * A diff is not a runtime capability: it reads two builds, neither of which need be the
9
+ * active one, so it cannot go through the seven-capability boundary that reads exactly one
10
+ * build through one handle. It is a separate port, and this is the local adapter for it.
11
+ *
12
+ * Every read is of build records alone, never of the sources, so the comparison is instant
13
+ * and still possible after the source directory is gone (architecture 15.6). State is
14
+ * opened and closed per comparison rather than held: a server may sit idle for hours
15
+ * between diffs, and a long-lived handle on the state database is a lock nobody is using.
16
+ */
17
+ export function createLocalComparer(projectRoot) {
18
+ const loreDirectory = join(projectRoot, LORE_DIRECTORY);
19
+ return {
20
+ async compare(fromBuildId, toBuildId) {
21
+ const state = openStateStore(loreDirectory);
22
+ try {
23
+ const builds = state.listBuilds();
24
+ // Resolved through history, so a prefix works and an id this project never built is
25
+ // refused by name instead of read as a missing directory.
26
+ const from = resolveBuildId(builds, requireId(fromBuildId, 'from'));
27
+ const to = resolveBuildId(builds, requireId(toBuildId, 'to'));
28
+ return diffBuilds(readSnapshot(loreDirectory, from), readSnapshot(loreDirectory, to));
29
+ }
30
+ finally {
31
+ state.close();
32
+ }
33
+ },
34
+ };
35
+ }
36
+ function requireId(value, position) {
37
+ if (value.trim() !== '')
38
+ return value;
39
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', `The ${position} build id is empty.`, {
40
+ remediation: 'Address the resource as lore://build/{buildId}/diff/{otherBuildId}.',
41
+ });
42
+ }
43
+ //# sourceMappingURL=comparer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparer.js","sourceRoot":"","sources":["../../src/services/comparer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAsB,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAExD,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS;YAClC,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBAClC,oFAAoF;gBACpF,0DAA0D;gBAC1D,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpE,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9D,OAAO,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,QAAuB;IACvD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,SAAS,CAAC,yBAAyB,EAAE,OAAO,QAAQ,qBAAqB,EAAE;QACnF,WAAW,EAAE,qEAAqE;KACnF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { type LoadedConfig } from '@lorepack/core';
2
+ /**
3
+ * Every resolved value, with the layer that supplied it and where that layer said it.
4
+ *
5
+ * Architecture 4.9 calls this transparent magic: defaults work, and nothing is hidden. The
6
+ * test of it is whether a user can find out what Lorepack decided without reading the
7
+ * source, which means a value is not enough. A number with no provenance still leaves them
8
+ * asking where it came from and what to edit.
9
+ *
10
+ * ## The distinction that matters most
11
+ *
12
+ * Some of these participate in the **build id** and some do not, and confusing the two is a
13
+ * expensive mistake in both directions. A value that decides what a build *contains*
14
+ * belongs in the hashed effective configuration; a value that decides how a build is
15
+ * *served* does not, and moving one in would change the identity of every build in
16
+ * existence for a number that decides nothing about what any of them hold.
17
+ *
18
+ * The Phase 3 audit on #4 called this out specifically for `RUNTIME_LIMITS`, ports and
19
+ * revalidation intervals. They are shown here, because a user asking "what did you decide"
20
+ * means all of it, and they are marked `buildId: false`.
21
+ */
22
+ /** Architecture 6.8, in precedence order, lowest first. */
23
+ export declare const LAYERS: readonly ['defaults', 'project', 'targets', 'environment', 'flags'];
24
+ export type Layer = (typeof LAYERS)[number];
25
+ export interface ResolvedValue {
26
+ /** Dotted, for example `chunking.targetTokens`. What `config explain` takes. */
27
+ readonly path: string;
28
+ readonly value: unknown;
29
+ readonly layer: Layer;
30
+ /** Where that layer said it: a file path, an environment variable name, or `built-in`. */
31
+ readonly source: string;
32
+ /** Whether changing this changes the build id (architecture 11.4). */
33
+ readonly buildId: boolean;
34
+ /** Redacted everywhere it is rendered. */
35
+ readonly secret?: boolean;
36
+ }
37
+ export interface ResolvedConfiguration {
38
+ readonly projectRoot: string;
39
+ readonly values: readonly ResolvedValue[];
40
+ }
41
+ /** `LORE_`-prefixed, and deliberately a short list rather than a general override channel. */
42
+ export declare const ENVIRONMENT_KEYS: readonly ['LORE_DEV_PORT', 'LORE_REVALIDATE_INTERVAL_MS', 'LORE_LOCK_WAIT_MS'];
43
+ export declare function resolveConfiguration(config: LoadedConfig, environment?: NodeJS.ProcessEnv): ResolvedConfiguration;
44
+ /** Redacted for display. Never the value, only the fact that there is one. */
45
+ export declare function displayValue(entry: ResolvedValue): string;
46
+ /**
47
+ * The closest known path to something a user typed.
48
+ *
49
+ * `closestMatch` lives in core because `lore.yaml` validation needs the same answer for an
50
+ * unrecognized key. Two implementations of "what did they probably mean" would give two
51
+ * different answers to the same typo.
52
+ *
53
+ * The threshold scales with the length here, because a configuration path is much longer
54
+ * than a top-level key and a fixed distance of three is nearly meaningless across
55
+ * `chunking.targetTokens`.
56
+ */
57
+ export declare function closestPath(wanted: string, known: readonly string[]): string | null;
58
+ /** Where the targets layer will read from, once Phase 6 gives it something to say. */
59
+ export declare function targetsDirectory(projectRoot: string): string;
60
+ //# sourceMappingURL=config-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-resolve.d.ts","sourceRoot":"","sources":["../../src/services/config-resolve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAIjF;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,2DAA2D;AAC3D,eAAO,MAAM,MAAM,YAAI,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAU,CAAC;AAC1F,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAED,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB,YAC3B,eAAe,EACf,6BAA6B,EAC7B,mBAAmB,CACX,CAAC;AAKX,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,qBAAqB,CA4EvB;AA4DD,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAOzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAEnF;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D"}