@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,171 @@
1
+ import { join } from 'node:path';
2
+ import { ProjectLock } from '@lorepack/backend-local';
3
+ import { LORE_DIRECTORY, LoreError, loadConfig, } from '@lorepack/core';
4
+ import { assertActivatable, openStateStore, previousBuild, resolveBuildId, } from '../services/builds.js';
5
+ import { createWranglerDeployAdapter, resolveCloudflareTarget, resolveCloudflareTargetWithAdapter, } from '../services/cloudflare-target.js';
6
+ import { readCloudflareTargetReceipt } from './target.js';
7
+ export function activateCommand() {
8
+ return {
9
+ name: 'activate',
10
+ description: 'Point this project at a build. Never recompiles.',
11
+ arguments: [{ name: 'build', description: 'build id or unambiguous prefix' }],
12
+ handler: async (args, _flags, context) => switchTo(context.options.cwd, (builds) => resolveBuildId(builds, args[0] ?? ''), 'Activated'),
13
+ };
14
+ }
15
+ export function rollbackCommand(options = {}) {
16
+ return {
17
+ name: 'rollback',
18
+ description: 'Return to the previous verified build. Never recompiles.',
19
+ arguments: [{ name: 'build', description: 'build id or unambiguous prefix', required: false }],
20
+ flags: [{ flags: '--target <target>', description: 'roll back a remote deployment target' }],
21
+ handler: async (args, flags, context) => {
22
+ const targetName = typeof flags.target === 'string' && flags.target.trim() !== '' ? flags.target.trim() : null;
23
+ if (targetName !== null) {
24
+ return await rollbackRemote(context.options.cwd, targetName, args[0], options.resolveTarget, options.cloudflareAdapter);
25
+ }
26
+ return await switchTo(context.options.cwd, (builds, active) => args[0] === undefined ? previousBuild(builds, active) : resolveBuildId(builds, args[0]), 'Rolled back to');
27
+ },
28
+ };
29
+ }
30
+ export function buildsCommand() {
31
+ return {
32
+ name: 'builds',
33
+ description: 'List build history, newest first.',
34
+ handler: (_args, _flags, context) => {
35
+ const config = loadConfig({ cwd: context.options.cwd });
36
+ const state = openStateStore(join(config.projectRoot, LORE_DIRECTORY));
37
+ try {
38
+ const builds = state.listBuilds();
39
+ const active = state.current();
40
+ const rows = builds.map((build) => ({
41
+ buildId: build.buildId,
42
+ createdAt: build.createdAt,
43
+ state: build.state,
44
+ active: build.buildId === active?.buildId,
45
+ counts: build.counts,
46
+ }));
47
+ return {
48
+ human: renderBuilds(rows),
49
+ json: { builds: rows, activeBuildId: active?.buildId ?? null },
50
+ };
51
+ }
52
+ finally {
53
+ state.close();
54
+ }
55
+ },
56
+ };
57
+ }
58
+ async function switchTo(cwd, choose, verb) {
59
+ const config = loadConfig({ cwd });
60
+ const loreDirectory = join(config.projectRoot, LORE_DIRECTORY);
61
+ const lock = new ProjectLock(join(loreDirectory, 'lock'));
62
+ const state = openStateStore(loreDirectory);
63
+ try {
64
+ const builds = state.listBuilds();
65
+ const active = state.current();
66
+ const target = choose(builds, active?.buildId ?? null);
67
+ const summary = builds.find((build) => build.buildId === target);
68
+ // Pre-flight before the pointer moves. A corrupt build must fail with the previous one
69
+ // still serving, not after it has already been made live.
70
+ assertActivatable(loreDirectory, summary);
71
+ if (active?.buildId === target) {
72
+ return {
73
+ human: `Build ${target} is already active.`,
74
+ json: { buildId: target, generation: active.generation, changed: false },
75
+ };
76
+ }
77
+ // Held only across the pointer change itself, which is one transaction.
78
+ const generation = await lock.withLock(() => state.activate(target));
79
+ return {
80
+ human: `${verb} ${target} (generation ${generation}).`,
81
+ json: { buildId: target, generation, changed: true },
82
+ };
83
+ }
84
+ finally {
85
+ state.close();
86
+ }
87
+ }
88
+ function renderBuilds(builds) {
89
+ if (builds.length === 0)
90
+ return 'No builds yet. Run `lorepack build`.';
91
+ const lines = [' BUILD CREATED ARTIFACTS CHUNKS STATE'];
92
+ for (const build of builds) {
93
+ const marker = build.active ? '*' : ' ';
94
+ lines.push(`${marker} ${build.buildId.slice(0, 17)} ${build.createdAt.slice(0, 19)} ` +
95
+ `${String(build.counts.artifacts).padStart(9)} ${String(build.counts.chunks).padStart(6)} ${build.state}`);
96
+ }
97
+ lines.push('', '* active');
98
+ return lines.join('\n');
99
+ }
100
+ async function rollbackRemote(cwd, targetName, buildId, resolveTargetOverride, cloudflareAdapter) {
101
+ const config = loadConfig({ cwd });
102
+ const requestedBuildId = buildId === undefined || buildId.trim() === ''
103
+ ? await previousRemoteBuildId(targetName, config.projectRoot, cloudflareAdapter)
104
+ : buildId.trim();
105
+ const target = resolveTargetOverride === undefined
106
+ ? await resolveRemoteTarget(targetName, config.projectRoot, config.configPath, cloudflareAdapter)
107
+ : await resolveTargetOverride(targetName, {
108
+ projectRoot: config.projectRoot,
109
+ configPath: config.configPath,
110
+ });
111
+ const activation = await target.rollback(requestedBuildId);
112
+ return {
113
+ human: [
114
+ `Rolled back ${target.id} to ${activation.buildId}.`,
115
+ `Endpoint: ${activation.endpoint ?? 'unknown'}`,
116
+ `Active build: ${activation.buildId}`,
117
+ ].join('\n'),
118
+ json: {
119
+ buildId: activation.buildId,
120
+ previousBuildId: activation.previousBuildId,
121
+ confirmedBuildId: activation.confirmedBuildId,
122
+ endpoint: activation.endpoint,
123
+ changed: true,
124
+ },
125
+ };
126
+ }
127
+ async function previousRemoteBuildId(targetName, projectRoot, cloudflareAdapter) {
128
+ if (targetName !== 'cloudflare') {
129
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', `Unknown rollback target ${targetName}.`, {
130
+ remediation: 'Use `cloudflare`. Additional remote rollback targets are not implemented in v0.1.',
131
+ subject: targetName,
132
+ });
133
+ }
134
+ const receipt = readCloudflareTargetReceipt(projectRoot);
135
+ const adapter = cloudflareAdapter ?? createWranglerDeployAdapter();
136
+ const db = adapter.openCatalogDatabase(receipt.catalogDatabaseName);
137
+ const hasProjectedBuilds = await db
138
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'projected_builds'")
139
+ .run();
140
+ if ((hasProjectedBuilds.results?.length ?? 0) === 0) {
141
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', 'There is no earlier verified remote build to return to.', { remediation: 'Run `lorepack target status cloudflare` to see the remote history.' });
142
+ }
143
+ const active = await db
144
+ .prepare('SELECT build_id AS buildId FROM active_build WHERE id = 1')
145
+ .run();
146
+ const activeBuildId = active.results?.[0]?.buildId ?? null;
147
+ const projected = await db
148
+ .prepare(`SELECT build_id AS buildId, verified_at AS verifiedAt
149
+ FROM projected_builds
150
+ WHERE project_id = ? AND verified_at IS NOT NULL
151
+ ORDER BY verified_at DESC, projected_at DESC, build_id DESC`)
152
+ .bind(receipt.project)
153
+ .run();
154
+ const previous = (projected.results ?? []).find((row) => row.buildId !== activeBuildId);
155
+ if (previous === undefined) {
156
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', 'There is no earlier verified remote build to return to.', { remediation: 'Run `lorepack target status cloudflare` to see the remote history.' });
157
+ }
158
+ return previous.buildId;
159
+ }
160
+ async function resolveRemoteTarget(name, projectRoot, _configPath, cloudflareAdapter) {
161
+ if (name !== 'cloudflare') {
162
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', `Unknown rollback target ${name}.`, {
163
+ remediation: 'Use `cloudflare`. Additional remote rollback targets are not implemented in v0.1.',
164
+ subject: name,
165
+ });
166
+ }
167
+ return cloudflareAdapter === undefined
168
+ ? await resolveCloudflareTarget(projectRoot)
169
+ : await resolveCloudflareTargetWithAdapter(projectRoot, cloudflareAdapter);
170
+ }
171
+ //# sourceMappingURL=activate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandDefinition } from '../framework/program.js';
2
+ export declare function buildCommand(): CommandDefinition;
3
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,yBAAyB,CAAC;AAGhF,wBAAgB,YAAY,IAAI,iBAAiB,CAyBhD"}
@@ -0,0 +1,53 @@
1
+ import { count, loadConfig } from '@lorepack/core';
2
+ import { runBuild } from '../services/build.js';
3
+ export function buildCommand() {
4
+ return {
5
+ name: 'build',
6
+ description: 'Compile the project into an immutable build and activate it.',
7
+ flags: [
8
+ { flags: '--no-activate', description: 'verify a candidate without moving the pointer' },
9
+ { flags: '--frozen', description: 'fail if lore.lock would change' },
10
+ { flags: '--allow-large-project', description: 'continue past the supported file count' },
11
+ ],
12
+ handler: async (_args, flags, context) => {
13
+ const config = loadConfig({ cwd: context.options.cwd });
14
+ // Commander maps `--no-activate` to `activate: false`, defaulting to true.
15
+ const result = await runBuild({
16
+ config,
17
+ progress: context.progress,
18
+ activate: flags.activate !== false,
19
+ frozen: flags.frozen === true,
20
+ allowLargeProject: flags.allowLargeProject === true,
21
+ ...(context.signal === undefined ? {} : { signal: context.signal }),
22
+ });
23
+ return { human: render(result), json: result };
24
+ },
25
+ };
26
+ }
27
+ function render(result) {
28
+ const lines = [];
29
+ if (!result.created) {
30
+ lines.push(`No changes. The active build is ${result.buildId}.`);
31
+ return lines.join('\n');
32
+ }
33
+ lines.push(`Build ${result.buildId}`);
34
+ lines.push('');
35
+ lines.push(` ${count(result.counts.artifacts, 'artifact')}`);
36
+ lines.push(` ${count(result.counts.nodes, 'node')}`);
37
+ lines.push(` ${count(result.counts.chunks, 'chunk')}`);
38
+ // Only when there are some. A line reading "0 tables" on every Markdown project is noise
39
+ // that trains people to stop reading the summary, and this one has something to say.
40
+ if (result.counts.tables > 0) {
41
+ lines.push(` ${count(result.counts.tables, 'table')}, ${count(result.counts.tableRows, 'row')}`);
42
+ }
43
+ if (result.reusedArtifacts > 0)
44
+ lines.push(` ${count(result.reusedArtifacts, 'artifact')} reused`);
45
+ if (result.warnings > 0)
46
+ lines.push(` ${count(result.warnings, 'warning')}`);
47
+ lines.push('');
48
+ lines.push(result.activated
49
+ ? `Activated in ${result.durationMs} ms.`
50
+ : `Verified in ${result.durationMs} ms. Not activated, because --no-activate was given.`);
51
+ return lines.join('\n');
52
+ }
53
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CommandDefinition } from '../framework/program.js';
2
+ import { ENVIRONMENT_KEYS } from '../services/config-resolve.js';
3
+ /**
4
+ * `lorepack config show --effective` and `lorepack config explain <path>`.
5
+ *
6
+ * Architecture 4.9's transparent-magic contract: defaults work, and nothing is hidden. The
7
+ * test of it is whether a user can learn what Lorepack decided without reading the source,
8
+ * which a bare value does not satisfy. Every line here carries the layer that supplied it,
9
+ * and every value says whether changing it would change the build id.
10
+ */
11
+ export declare function configCommand(): CommandDefinition;
12
+ /** The documented environment layer, exported so the documentation and the code agree. */
13
+ export { ENVIRONMENT_KEYS };
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAGL,gBAAgB,EAIjB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;;GAOG;AAEH,wBAAgB,aAAa,IAAI,iBAAiB,CAgCjD;AAmFD,0FAA0F;AAC1F,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { count, LoreError, loadConfig } from '@lorepack/core';
2
+ import { closestPath, displayValue, ENVIRONMENT_KEYS, resolveConfiguration, } from '../services/config-resolve.js';
3
+ /**
4
+ * `lorepack config show --effective` and `lorepack config explain <path>`.
5
+ *
6
+ * Architecture 4.9's transparent-magic contract: defaults work, and nothing is hidden. The
7
+ * test of it is whether a user can learn what Lorepack decided without reading the source,
8
+ * which a bare value does not satisfy. Every line here carries the layer that supplied it,
9
+ * and every value says whether changing it would change the build id.
10
+ */
11
+ export function configCommand() {
12
+ return {
13
+ name: 'config',
14
+ description: 'Show the resolved configuration, and where each value came from.',
15
+ arguments: [
16
+ { name: 'subject', description: 'show or explain', required: true },
17
+ {
18
+ name: 'path',
19
+ description: 'for explain: a dotted key, e.g. chunking.targetTokens',
20
+ required: false,
21
+ },
22
+ ],
23
+ flags: [
24
+ {
25
+ flags: '--effective',
26
+ description: 'show every resolved value, not only what lore.yaml says',
27
+ },
28
+ ],
29
+ handler: (args, flags, context) => {
30
+ const subject = args[0];
31
+ const config = loadConfig({ cwd: context.options.cwd });
32
+ const resolved = resolveConfiguration(config);
33
+ if (subject === 'show')
34
+ return show(resolved, flags.effective === true);
35
+ if (subject === 'explain')
36
+ return explain(resolved, args[1]);
37
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', `Unknown config subject: ${subject}.`, {
38
+ remediation: 'Use `lorepack config show --effective` or `lorepack config explain <path>`.',
39
+ subject: String(subject),
40
+ });
41
+ },
42
+ };
43
+ }
44
+ function show(resolved, effective) {
45
+ // Without `--effective` the interesting subset is what someone chose, because that is what
46
+ // they can edit. With it, everything, which is the point of the flag.
47
+ const shown = effective
48
+ ? resolved.values
49
+ : resolved.values.filter((entry) => entry.layer !== 'defaults');
50
+ const lines = [];
51
+ lines.push(effective
52
+ ? `Effective configuration for ${resolved.projectRoot}`
53
+ : `Configured values for ${resolved.projectRoot} (run with --effective for all of them)`);
54
+ lines.push('');
55
+ const width = Math.max(...shown.map((entry) => entry.path.length), 10);
56
+ for (const entry of shown) {
57
+ // A leading `#` marks the values the build id is computed from, so the distinction is
58
+ // visible rather than something to look up.
59
+ const mark = entry.buildId ? '#' : ' ';
60
+ lines.push(`${mark} ${entry.path.padEnd(width)} ${displayValue(entry)} [${entry.layer}]`);
61
+ }
62
+ lines.push('');
63
+ lines.push(`# marks the ${count(shown.filter((entry) => entry.buildId).length, 'value')} the build id is computed from.`);
64
+ if (effective) {
65
+ lines.push(`Serving bounds are shown and are not part of it: a port decides nothing about what a build contains.`);
66
+ }
67
+ return { human: lines.join('\n'), json: { projectRoot: resolved.projectRoot, values: shown } };
68
+ }
69
+ function explain(resolved, path) {
70
+ if (path === undefined) {
71
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', 'explain needs a configuration path.', {
72
+ remediation: 'For example: `lorepack config explain chunking.targetTokens`.',
73
+ });
74
+ }
75
+ const entry = resolved.values.find((candidate) => candidate.path === path);
76
+ if (entry === undefined) {
77
+ const known = resolved.values.map((candidate) => candidate.path);
78
+ const closest = closestPath(path, known);
79
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', `No configuration value at ${path}.`, {
80
+ remediation: closest === null
81
+ ? 'Run `lorepack config show --effective` to see every path.'
82
+ : `Did you mean ${closest}? Run \`lorepack config show --effective\` to see every path.`,
83
+ subject: path,
84
+ });
85
+ }
86
+ return { human: renderOne(entry), json: entry };
87
+ }
88
+ function renderOne(entry) {
89
+ const lines = [
90
+ `${entry.path}`,
91
+ '',
92
+ ` value ${displayValue(entry)}`,
93
+ ` layer ${entry.layer}`,
94
+ ` source ${entry.source}`,
95
+ ` build ${entry.buildId ? 'this value is part of the build id' : 'changing this does not change the build id'}`,
96
+ ];
97
+ if (entry.layer === 'defaults') {
98
+ lines.push('');
99
+ lines.push('Nothing set this, so the built-in default applies. Set it in lore.yaml to change it.');
100
+ }
101
+ if (entry.layer === 'environment') {
102
+ lines.push('');
103
+ lines.push(`Set by the environment variable ${entry.source}. Unset it to fall back.`);
104
+ }
105
+ return lines.join('\n');
106
+ }
107
+ /** The documented environment layer, exported so the documentation and the code agree. */
108
+ export { ENVIRONMENT_KEYS };
109
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CommandDefinition } from '../framework/program.js';
2
+ export declare const CLIENT_IDS: readonly string[];
3
+ export declare function connectCommand(): CommandDefinition;
4
+ export declare function disconnectCommand(): CommandDefinition;
5
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,yBAAyB,CAAC;AAmChF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAA0C,CAAC;AAInF,wBAAgB,cAAc,IAAI,iBAAiB,CAiFlD;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,CA2CrD"}
@@ -0,0 +1,196 @@
1
+ import { CLAUDE_CODE_ID, CODEX_ID, createClaudeCodeConnector, createCodexConnector, createVsCodeConnector, renderSnippetAdvice, renderVerifiedSnippet, SERVER_NAME, VSCODE_ID, } from '@lorepack/connect-clients';
2
+ import { LoreError, loadConfig } from '@lorepack/core';
3
+ /**
4
+ * `lorepack connect [client]` and `lorepack disconnect [client]`, the second of the two commands.
5
+ *
6
+ * Architecture 6.6 makes this an eleven step contract rather than a file write, and the
7
+ * ordering is the reason: **plan, show, apply, verify**. Every step exists because skipping
8
+ * it produces a specific, quiet failure.
9
+ *
10
+ * - A plan that is shown before anything changes is what makes editing someone's client
11
+ * configuration acceptable rather than presumptuous.
12
+ * - A verification that spawns the server is the only way to learn that the command in the
13
+ * file does not actually start. Written correctly and pointing at a missing binary looks
14
+ * exactly like success until a person asks their agent a question and gets nothing.
15
+ * - A trust prompt the client will still show is printed rather than left to surprise them.
16
+ *
17
+ * Registration is explicit (architecture 4.8). There is no dynamic discovery of connectors,
18
+ * so `lorepack connect --help` lists what actually exists and a reviewer can see a new client
19
+ * arriving in a diff.
20
+ */
21
+ /**
22
+ * Every connector, named once.
23
+ *
24
+ * This list and `CLIENT_IDS` are the only places a client is registered, so the help text,
25
+ * the snippet advice and the `all` target cannot drift apart from what actually exists.
26
+ */
27
+ function connectors(options) {
28
+ return [
29
+ createClaudeCodeConnector({ shared: options.shared }),
30
+ createCodexConnector(),
31
+ createVsCodeConnector(),
32
+ ];
33
+ }
34
+ export const CLIENT_IDS = [CLAUDE_CODE_ID, CODEX_ID, VSCODE_ID];
35
+ const CLIENT_CHOICES = `${CLIENT_IDS.join(', ')}, or all`;
36
+ export function connectCommand() {
37
+ return {
38
+ name: 'connect',
39
+ description: 'Configure an AI client to read this project, and verify that it works.',
40
+ arguments: [
41
+ { name: 'client', description: `which client (${CLIENT_CHOICES})`, required: false },
42
+ ],
43
+ flags: [
44
+ { flags: '--dry-run', description: 'show the plan and change nothing' },
45
+ { flags: '--yes', description: 'apply without asking' },
46
+ { flags: '--scope <scope>', description: 'project (default) or user' },
47
+ {
48
+ flags: '--shared',
49
+ description: 'write the project file that others will be asked to trust',
50
+ },
51
+ { flags: '--snippet', description: 'print a configuration to paste, and change nothing' },
52
+ ],
53
+ handler: async (args, flags, context) => {
54
+ const config = loadConfig({ cwd: context.options.cwd });
55
+ const scope = resolveScope(flags.scope);
56
+ const chosen = select(args[0], { shared: flags.shared === true });
57
+ const input = {
58
+ projectRoot: config.projectRoot,
59
+ serverName: SERVER_NAME,
60
+ // An executable plus an argument array, never a concatenated string. That is what
61
+ // makes a project path containing a space safe on every platform (6.6 step 7).
62
+ command: {
63
+ executable: 'lorepack',
64
+ args: ['mcp', '--project', config.projectRoot, '--ensure-current'],
65
+ },
66
+ scope,
67
+ };
68
+ // A client nobody has verified, or an explicit request for something to paste. Both
69
+ // land here rather than failing: architecture 14.7 asks for a verified snippet, and an
70
+ // error helps nobody who simply uses a different editor.
71
+ const unknown = args[0] !== undefined && args[0] !== 'all' && chosen.length === 0;
72
+ if (flags.snippet === true || unknown) {
73
+ const snippet = await renderVerifiedSnippet(input);
74
+ return { human: renderSnippet(snippet, args[0]), json: snippet };
75
+ }
76
+ const lines = [];
77
+ const receipts = [];
78
+ for (const connector of chosen) {
79
+ const detected = await connector.detect();
80
+ if (!detected.installed) {
81
+ lines.push(`${connector.title}: not installed. ${detected.reason ?? ''}`.trimEnd());
82
+ lines.push(' Run `lorepack connect --snippet` for a configuration to paste.');
83
+ continue;
84
+ }
85
+ const plan = await connector.plan(input);
86
+ lines.push(`${connector.title}${detected.version === undefined ? '' : ` ${detected.version}`}`);
87
+ for (const change of plan.changes)
88
+ lines.push(` ${change}`);
89
+ // Part of the plan, not of the outcome. A step the client will still require is
90
+ // something to know *before* deciding, which means `--dry-run` has to show it too.
91
+ if (plan.manualStep !== undefined)
92
+ lines.push(` ${plan.manualStep}`);
93
+ if (flags.dryRun === true) {
94
+ // Zero writes, which is the only promise `--dry-run` makes and the only one that
95
+ // matters: someone runs it precisely because they do not trust this yet.
96
+ lines.push(' (dry run, nothing was changed)');
97
+ continue;
98
+ }
99
+ const receipt = await connector.apply(plan);
100
+ receipts.push(receipt);
101
+ if (receipt.backupPath !== undefined)
102
+ lines.push(` Backed up to ${receipt.backupPath}`);
103
+ const check = await connector.verify(receipt);
104
+ lines.push(check.ok ? ` Verified: ${check.detail}` : ` Not working yet: ${check.detail}`);
105
+ }
106
+ return { human: lines.join('\n'), json: { receipts } };
107
+ },
108
+ };
109
+ }
110
+ export function disconnectCommand() {
111
+ return {
112
+ name: 'disconnect',
113
+ description: 'Remove the Lorepack entry from an AI client, leaving everything else.',
114
+ arguments: [
115
+ { name: 'client', description: `which client (${CLIENT_CHOICES})`, required: false },
116
+ ],
117
+ flags: [
118
+ { flags: '--scope <scope>', description: 'project (default) or user' },
119
+ { flags: '--shared', description: 'the project file rather than the local one' },
120
+ ],
121
+ handler: async (args, flags, context) => {
122
+ const config = loadConfig({ cwd: context.options.cwd });
123
+ const scope = resolveScope(flags.scope);
124
+ const chosen = select(args[0], { shared: flags.shared === true });
125
+ const lines = [];
126
+ for (const connector of chosen) {
127
+ const plan = await connector.plan({
128
+ projectRoot: config.projectRoot,
129
+ serverName: SERVER_NAME,
130
+ command: { executable: 'lorepack', args: [] },
131
+ scope,
132
+ });
133
+ await connector.remove({
134
+ clientId: connector.id,
135
+ scope,
136
+ projectRoot: config.projectRoot,
137
+ serverName: SERVER_NAME,
138
+ configPath: plan.configPath,
139
+ connectedAt: new Date().toISOString(),
140
+ });
141
+ // Deliberately unconditional wording: `remove` leaves anything it did not create, so
142
+ // claiming to have removed something would sometimes be untrue.
143
+ lines.push(`${connector.title}: any Lorepack entry in ${plan.configPath} has been removed.`);
144
+ }
145
+ return { human: lines.join('\n'), json: undefined };
146
+ },
147
+ };
148
+ }
149
+ function select(name, options) {
150
+ const all = connectors(options);
151
+ if (name === undefined || name === 'all')
152
+ return all;
153
+ // An unknown client is not an error. The caller renders a verified snippet for it, which
154
+ // is the documented degradation path rather than a dead end (architecture 6.6).
155
+ const found = all.find((connector) => connector.id === name);
156
+ return found === undefined ? [] : [found];
157
+ }
158
+ /** The snippet, and what can honestly be said about a client nobody has verified. */
159
+ function renderSnippet(snippet, client) {
160
+ const lines = [];
161
+ if (client !== undefined)
162
+ lines.push(`Lorepack has no verified adapter for ${client}.`, '');
163
+ lines.push('Add this to your MCP client configuration:', '', snippet.json.trimEnd(), '');
164
+ lines.push('Or, for a client that takes a command:', '');
165
+ lines.push(` ${process.platform === 'win32' ? snippet.windowsCommand : snippet.posixCommand}`);
166
+ lines.push('');
167
+ const check = snippet.verification;
168
+ if (check !== undefined) {
169
+ // Verified means the server was started, not that the JSON parses. A snippet naming a
170
+ // command that does not run is worse than none, because it looks like it should work.
171
+ lines.push(check.ok
172
+ ? `Checked: the server started and answered. ${check.detail}`
173
+ : `Unverified: ${check.detail}`);
174
+ lines.push('');
175
+ }
176
+ lines.push(...renderSnippetAdvice(CLIENT_IDS));
177
+ lines.push('', 'Nothing was changed.');
178
+ return lines.join('\n');
179
+ }
180
+ /**
181
+ * Project unless a user says otherwise, and `all` never implies user scope.
182
+ *
183
+ * Architecture 6.6: a user-scope entry configures every project on the machine to read one
184
+ * project's documents, which for a private corpus is worse than merely surprising.
185
+ */
186
+ function resolveScope(raw) {
187
+ if (raw === undefined || raw === 'project')
188
+ return 'project';
189
+ if (raw === 'user')
190
+ return 'user';
191
+ throw new LoreError('LORE_E_INVALID_ARGUMENT', `Unknown scope: ${String(raw)}.`, {
192
+ remediation: 'Use --scope project (the default) or --scope user.',
193
+ subject: String(raw),
194
+ });
195
+ }
196
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type DeploymentTarget } from '@lorepack/core';
2
+ import type { CommandContext } from '../framework/context.js';
3
+ import type { CommandDefinition } from '../framework/program.js';
4
+ import { type CloudflareResolverAdapter } from '../services/cloudflare-target.js';
5
+ export interface DeployCommandOptions {
6
+ readonly resolveTarget?: (name: string, input: {
7
+ readonly projectRoot: string;
8
+ readonly configPath: string;
9
+ }) => Promise<DeploymentTarget>;
10
+ readonly cloudflareAdapter?: CloudflareResolverAdapter;
11
+ readonly confirm?: (prompt: string, context: CommandContext) => Promise<boolean>;
12
+ }
13
+ export declare function deployCommand(options?: DeployCommandOptions): CommandDefinition;
14
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,gBAAgB,EAKtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,yBAAyB,CAAC;AAGhF,OAAO,EACL,KAAK,yBAAyB,EAG/B,MAAM,kCAAkC,CAAC;AAU1C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KACjE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,iBAAiB,CAyGnF"}