@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,527 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { describeStoredTable, openReadOnly } from '@lorepack/backend-local';
4
+ import { buildManifestSchema, count, LORE_DIRECTORY, LoreError, loadConfig, } from '@lorepack/core';
5
+ import { buildDirectory, openStateStore, resolveBuildId } from '../services/builds.js';
6
+ /**
7
+ * `lorepack inspect` makes every compiler decision visible without re-running the build.
8
+ *
9
+ * One command with subjects rather than five verbs, and every subject reads sealed build
10
+ * data only. Nothing here re-parses, so inspection is fast, works on any retained build,
11
+ * and keeps working after the sources are gone. That is what "transparent magic"
12
+ * (architecture section 4.9) has to mean to be worth anything.
13
+ */
14
+ /** Example rows read for the detail view. The shape is the point, not a data preview. */
15
+ const INSPECT_SAMPLE_ROWS = 5;
16
+ const SUBJECTS = [
17
+ 'warnings',
18
+ 'exclusions',
19
+ 'sources',
20
+ 'build',
21
+ 'chunks',
22
+ 'tables',
23
+ 'rules',
24
+ 'builds',
25
+ ];
26
+ export function inspectCommand() {
27
+ return {
28
+ name: 'inspect',
29
+ description: `Show what the build contains. Subjects: ${SUBJECTS.join(', ')}, or a source path.`,
30
+ arguments: [
31
+ { name: 'subject', description: `one of ${SUBJECTS.join(', ')}, or a source path` },
32
+ {
33
+ name: 'target',
34
+ description: 'path or build id, depending on the subject',
35
+ required: false,
36
+ },
37
+ ],
38
+ flags: [{ flags: '--build <id>', description: 'inspect a build other than the active one' }],
39
+ handler: (args, flags, context) => {
40
+ const config = loadConfig({ cwd: context.options.cwd });
41
+ const loreDirectory = join(config.projectRoot, LORE_DIRECTORY);
42
+ const state = openStateStore(loreDirectory);
43
+ try {
44
+ const builds = state.listBuilds();
45
+ const active = state.current();
46
+ const subject = (args[0] ?? '');
47
+ const requested = typeof flags.build === 'string' ? flags.build : undefined;
48
+ const buildId = requested !== undefined
49
+ ? resolveBuildId(builds, requested)
50
+ : subject === 'build' && args[1] !== undefined
51
+ ? resolveBuildId(builds, args[1])
52
+ : activeOrFail(active?.buildId);
53
+ switch (subject) {
54
+ case 'warnings':
55
+ return inspectWarnings(loreDirectory, buildId);
56
+ case 'exclusions':
57
+ return inspectExclusions(loreDirectory, buildId);
58
+ case 'build':
59
+ return inspectBuild(loreDirectory, buildId, active?.buildId ?? null);
60
+ case 'sources':
61
+ return inspectSources(loreDirectory, buildId);
62
+ case 'builds':
63
+ return {
64
+ human: 'Run `lorepack builds` for build history.',
65
+ json: { builds: builds.map((build) => build.buildId) },
66
+ };
67
+ case 'chunks':
68
+ return inspectChunks(loreDirectory, buildId, args[1] ?? '');
69
+ case 'tables':
70
+ return inspectTables(loreDirectory, buildId, args[1] ?? '');
71
+ case 'rules':
72
+ return inspectRules(loreDirectory, buildId);
73
+ default:
74
+ // Anything else is treated as a source path, which is the common case and
75
+ // saves typing `lorepack inspect sources <path>`.
76
+ return inspectArtifact(loreDirectory, buildId, subject);
77
+ }
78
+ }
79
+ finally {
80
+ state.close();
81
+ }
82
+ },
83
+ };
84
+ }
85
+ function activeOrFail(buildId) {
86
+ if (buildId === undefined) {
87
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', 'This project has no active build.', {
88
+ remediation: 'Run `lorepack build`, or pass `--build <id>`.',
89
+ });
90
+ }
91
+ return buildId;
92
+ }
93
+ function withDatabase(loreDirectory, buildId, read) {
94
+ const path = join(buildDirectory(loreDirectory, buildId), 'context.sqlite');
95
+ if (!existsSync(path)) {
96
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', `Build ${buildId} has no database.`, {
97
+ remediation: 'Run `lorepack build` to recreate it.',
98
+ subject: buildId,
99
+ });
100
+ }
101
+ const db = openReadOnly(path);
102
+ try {
103
+ return read(db);
104
+ }
105
+ finally {
106
+ db.close();
107
+ }
108
+ }
109
+ function inspectWarnings(loreDirectory, buildId) {
110
+ const warnings = withDatabase(loreDirectory, buildId, (db) => db
111
+ .prepare('SELECT code, class, path, message FROM build_warnings ORDER BY class, path, code')
112
+ .all());
113
+ const byClass = new Map();
114
+ for (const warning of warnings) {
115
+ byClass.set(warning.class, [...(byClass.get(warning.class) ?? []), warning]);
116
+ }
117
+ const lines = [];
118
+ if (warnings.length === 0) {
119
+ lines.push('No warnings. Everything discovered was indexed.');
120
+ }
121
+ else {
122
+ lines.push(`${count(warnings.length, 'warning')} in ${buildId.slice(0, 17)}`, '');
123
+ // Sorted by class name explicitly: the default comparator stringifies each pair, and
124
+ // node:sqlite hands back null-prototype rows that have no `toString` to call.
125
+ for (const [className, group] of [...byClass].sort(([a], [b]) => (a < b ? -1 : 1))) {
126
+ lines.push(`${className} (${group.length})`);
127
+ for (const warning of group) {
128
+ lines.push(` ${warning.path ?? '.'}: ${warning.message}`);
129
+ }
130
+ lines.push('');
131
+ }
132
+ }
133
+ return {
134
+ human: lines.join('\n').trimEnd(),
135
+ json: {
136
+ buildId,
137
+ total: warnings.length,
138
+ byClass: Object.fromEntries([...byClass].map(([name, group]) => [name, group.length])),
139
+ warnings,
140
+ },
141
+ };
142
+ }
143
+ /** The sealed manifest, validated. One reader, so two subjects cannot disagree about it. */
144
+ function readManifest(loreDirectory, buildId) {
145
+ const manifestPath = join(buildDirectory(loreDirectory, buildId), 'manifest.json');
146
+ if (!existsSync(manifestPath)) {
147
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', `Build ${buildId} has no manifest.`, {
148
+ remediation: 'Run `lorepack builds` to see which builds are complete.',
149
+ subject: buildId,
150
+ });
151
+ }
152
+ return buildManifestSchema.parse(JSON.parse(readFileSync(manifestPath, 'utf8')));
153
+ }
154
+ /**
155
+ * What ignore rules removed, read from the sealed manifest.
156
+ *
157
+ * The other half of "exactly what was not parsed". `lorepack inspect warnings` lists files the
158
+ * walk read and could not use; this lists the ones a rule removed before anything was read,
159
+ * which is the more common reason a document is missing and was recorded nowhere until #202.
160
+ *
161
+ * Grouped by rule, because one line of configuration is one decision however many files it
162
+ * covers, and a per-file listing of an excluded dependency tree would be longer than the
163
+ * project.
164
+ */
165
+ function inspectExclusions(loreDirectory, buildId) {
166
+ const manifest = readManifest(loreDirectory, buildId);
167
+ const exclusions = manifest.exclusions;
168
+ if (exclusions === undefined) {
169
+ return {
170
+ human: [
171
+ `${buildId.slice(0, 17)} does not record what its ignore rules removed.`,
172
+ '',
173
+ 'It was built before that record existed. Run `lorepack build` to make one that does.',
174
+ ].join('\n'),
175
+ json: { buildId, recorded: false, total: 0, exclusions: [] },
176
+ };
177
+ }
178
+ const total = exclusions.reduce((sum, exclusion) => sum + exclusion.count, 0);
179
+ const lines = [];
180
+ if (exclusions.length === 0) {
181
+ lines.push('No ignore rule removed anything. Every file in scope reached the build.');
182
+ }
183
+ else {
184
+ lines.push(`${count(total, 'path')} removed by ${count(exclusions.length, 'rule')} in ${buildId.slice(0, 17)}`, '');
185
+ for (const exclusion of exclusions) {
186
+ lines.push(`${exclusion.pattern} ${count(exclusion.count, 'path')}, from ${exclusion.source}`);
187
+ // A sample entry that repeats the pattern says nothing, and a pruned directory records
188
+ // itself as its own sample. The heading above already named it.
189
+ const pattern = exclusion.pattern.replace(/\/$/, '');
190
+ const sample = exclusion.sample.filter((path) => path.replace(/\/$/, '') !== pattern);
191
+ for (const path of sample)
192
+ lines.push(` ${path}`);
193
+ // Against the whole sample, not the filtered one: the dropped entry was shown, in the
194
+ // heading. Subtracting it here made a pruned directory claim a hidden file.
195
+ const remaining = exclusion.count - exclusion.sample.length;
196
+ if (remaining > 0)
197
+ lines.push(` and ${count(remaining, 'more path')}`);
198
+ lines.push('');
199
+ }
200
+ }
201
+ return {
202
+ human: lines.join('\n').trimEnd(),
203
+ json: { buildId, recorded: true, total, exclusions },
204
+ };
205
+ }
206
+ function inspectBuild(loreDirectory, buildId, activeBuildId) {
207
+ const manifest = readManifest(loreDirectory, buildId);
208
+ const lines = [
209
+ `Build ${manifest.buildId}${manifest.buildId === activeBuildId ? ' (active)' : ''}`,
210
+ '',
211
+ ` project ${manifest.projectName}`,
212
+ ` compiler ${manifest.compilerVersion}`,
213
+ ` schema ${manifest.schemaVersion}`,
214
+ ` format ${manifest.formatVersion}`,
215
+ ` capabilities ${manifest.capabilities.join(', ')}`,
216
+ '',
217
+ ` artifacts ${manifest.counts.artifacts}`,
218
+ ` nodes ${manifest.counts.nodes}`,
219
+ ` chunks ${manifest.counts.chunks}`,
220
+ ` tables ${manifest.counts.tables}`,
221
+ ` warnings ${manifest.warnings.length}`,
222
+ '',
223
+ ' canonical roots',
224
+ ];
225
+ for (const [name, hash] of Object.entries(manifest.canonicalRoots)) {
226
+ lines.push(` ${name.padEnd(10)} ${hash}`);
227
+ }
228
+ lines.push('', ` configuration ${manifest.configurationHash}`);
229
+ lines.push(` sources ${manifest.sourceFingerprint}`);
230
+ return { human: lines.join('\n'), json: manifest };
231
+ }
232
+ function inspectSources(loreDirectory, buildId) {
233
+ const artifacts = withDatabase(loreDirectory, buildId, (db) => db
234
+ .prepare(`SELECT a.display_path AS displayPath, a.media_type AS mediaType, a.status AS status,
235
+ a.authority AS authority, a.parser_id AS parserId, a.byte_size AS byteSize,
236
+ (SELECT count(*) FROM chunks c WHERE c.artifact_id = a.id) AS chunks
237
+ FROM artifacts a ORDER BY a.relative_path`)
238
+ .all());
239
+ const lines = [`${count(artifacts.length, 'artifact')} in ${buildId.slice(0, 17)}`, ''];
240
+ for (const artifact of artifacts) {
241
+ lines.push(` ${String(artifact.displayPath)} ${count(Number(artifact.chunks), 'chunk')}, ${artifact.parserId}, ` +
242
+ `${artifact.status}, authority ${artifact.authority}`);
243
+ }
244
+ return { human: lines.join('\n'), json: { buildId, artifacts } };
245
+ }
246
+ function inspectArtifact(loreDirectory, buildId, path) {
247
+ return withDatabase(loreDirectory, buildId, (db) => {
248
+ const artifact = findArtifact(db, path);
249
+ // Ordered by the ordinal path in the node id, not by `ordinal`.
250
+ //
251
+ // `ordinal` is a node's position among its siblings, which is exactly what it says it
252
+ // is and exactly what node ids need. It is not a document position, so ordering by it
253
+ // across different parents sorted a document's paragraphs ahead of the sections they
254
+ // belong to and left ties for SQLite to break (#149). The id carries the whole path,
255
+ // `demo:a.md#0.1.2.1`, so it orders and nests the tree by itself.
256
+ const nodes = orderByTree(db
257
+ .prepare(`SELECT id, kind, title, heading_path AS headingPath, line_start AS lineStart
258
+ FROM nodes WHERE artifact_id = ?`)
259
+ .all(artifact.id));
260
+ const chunks = db
261
+ .prepare('SELECT count(*) AS n FROM chunks WHERE artifact_id = ?')
262
+ .get(artifact.id);
263
+ const lines = [
264
+ artifact.display_path,
265
+ '',
266
+ ` artifact ${artifact.id}`,
267
+ ` media type ${artifact.media_type}`,
268
+ ` parser ${artifact.parser_id} ${artifact.parser_version}`,
269
+ ` status ${artifact.status}`,
270
+ ` authority ${artifact.authority}`,
271
+ ` bytes ${artifact.byte_size}`,
272
+ ` content hash ${artifact.content_hash}`,
273
+ ` chunks ${chunks.n}`,
274
+ '',
275
+ ` structure (${count(nodes.length, 'node')})`,
276
+ ];
277
+ for (const node of nodes) {
278
+ // Depth from the tree, not from how many headings are above the node. A paragraph
279
+ // inside "Access" has two entries in its heading path while the "Access" section
280
+ // itself has one, so heading depth rendered a leaf deeper than its own parent.
281
+ const depth = Math.max(0, ordinalPath(String(node.id)).length - 1);
282
+ const where = node.lineStart === null ? '' : ` line ${node.lineStart}`;
283
+ lines.push(` ${' '.repeat(depth)}${node.kind} ${node.title ?? ''}${where}`.trimEnd());
284
+ }
285
+ return {
286
+ human: lines.join('\n'),
287
+ json: { buildId, artifact, chunkCount: chunks.n, nodes },
288
+ };
289
+ });
290
+ }
291
+ /**
292
+ * The ordinal path a node id ends with, as numbers.
293
+ *
294
+ * `demo:docs/a.md#0.1.2` is `[0, 1, 2]`. Numbers rather than the string, because a
295
+ * lexicographic sort puts the tenth sibling before the second.
296
+ */
297
+ export function ordinalPath(id) {
298
+ const suffix = id.slice(id.lastIndexOf('#') + 1);
299
+ if (suffix === '' || suffix === id)
300
+ return [];
301
+ return suffix.split('.').map((segment) => {
302
+ const value = Number(segment);
303
+ return Number.isFinite(value) ? value : 0;
304
+ });
305
+ }
306
+ /** Document order: every node after its parent, siblings in the order they were written. */
307
+ export function orderByTree(nodes) {
308
+ return [...nodes].sort((left, right) => {
309
+ const a = ordinalPath(String(left.id));
310
+ const b = ordinalPath(String(right.id));
311
+ for (let index = 0; index < Math.max(a.length, b.length); index += 1) {
312
+ const difference = (a[index] ?? -1) - (b[index] ?? -1);
313
+ if (difference !== 0)
314
+ return difference;
315
+ }
316
+ return 0;
317
+ });
318
+ }
319
+ /**
320
+ * How many chunks the bare subject lists before it stops.
321
+ *
322
+ * A whole build is tens of thousands of chunks, which is a scroll rather than an answer.
323
+ * The limit is stated in the output: a listing that silently truncates reads as "that is
324
+ * all there is", which is a quieter version of the same defect this command had.
325
+ */
326
+ const CHUNK_LISTING_LIMIT = 50;
327
+ /**
328
+ * With a path, the chunks of one artifact. Without one, the chunks of the build.
329
+ *
330
+ * The bare form used to look the empty string up as an artifact and fail with "No artifact
331
+ * matches ." and a list of suggestions for a word the user never typed (#166). Every other
332
+ * subject works bare, and the help text has always said this one does too.
333
+ */
334
+ function inspectChunks(loreDirectory, buildId, path) {
335
+ return withDatabase(loreDirectory, buildId, (db) => {
336
+ const artifact = path === '' ? null : findArtifact(db, path);
337
+ const select = `SELECT id, heading_path AS headingPath, estimated_tokens AS estimatedTokens,
338
+ relative_path AS relativePath, line_start AS lineStart, line_end AS lineEnd
339
+ FROM chunks`;
340
+ const chunks = (artifact === null
341
+ ? db.prepare(`${select} ORDER BY relative_path, id`).all()
342
+ : db.prepare(`${select} WHERE artifact_id = ? ORDER BY id`).all(artifact.id));
343
+ const where = artifact === null ? buildId.slice(0, 17) : String(artifact.display_path);
344
+ const shown = artifact === null ? chunks.slice(0, CHUNK_LISTING_LIMIT) : chunks;
345
+ const lines = [`${count(chunks.length, 'chunk')} in ${where}`, ''];
346
+ for (const chunk of shown) {
347
+ const heading = JSON.parse(String(chunk.headingPath ?? '[]')).join(' > ');
348
+ const span = chunk.lineStart === null
349
+ ? String(chunk.relativePath)
350
+ : `${chunk.relativePath}:${chunk.lineStart}-${chunk.lineEnd}`;
351
+ lines.push(` ${span} about ${count(Number(chunk.estimatedTokens), 'token')}`);
352
+ if (heading !== '')
353
+ lines.push(` ${heading}`);
354
+ }
355
+ if (shown.length < chunks.length) {
356
+ lines.push('', `Showing the first ${shown.length}. Pass a source path for one artifact's chunks, or use --json for all of them.`);
357
+ }
358
+ return {
359
+ human: lines.join('\n'),
360
+ json: { buildId, artifactId: artifact === null ? null : artifact.id, chunks },
361
+ };
362
+ });
363
+ }
364
+ /**
365
+ * The typed tables in a build: bare, a listing; with a table id or a path, one schema.
366
+ *
367
+ * Columns come out in source order with their inferred types, because the type is the decision
368
+ * a user is most likely to want to argue with, and with the generated names, because those are
369
+ * what a `lore_query_table` call has to address.
370
+ *
371
+ * The detail view projects through `describeStoredTable`, the same function the runtime port
372
+ * serves `describeTable` from. It used to issue its own SQL and assemble its own columns, and
373
+ * the two drifted exactly as that arrangement invites: this command showed the per-column
374
+ * statistics while the model-facing surface silently dropped them (#235). Sharing the
375
+ * projection is what stops that recurring, so it is worth the read going through a function
376
+ * whose shape is set by the port rather than by this renderer.
377
+ */
378
+ function inspectTables(loreDirectory, buildId, target) {
379
+ return withDatabase(loreDirectory, buildId, (db) => {
380
+ const tables = db
381
+ .prepare(`SELECT id, name, sheet, row_count AS rowCount, relative_path AS relativePath, metadata
382
+ FROM tables ORDER BY relative_path, name`)
383
+ .all();
384
+ if (target === '') {
385
+ if (tables.length === 0) {
386
+ return {
387
+ human: 'This build contains no tables.\n\nCSV and spreadsheet files become tables; other formats become text.',
388
+ json: { buildId, tables: [] },
389
+ };
390
+ }
391
+ const lines = [`${count(tables.length, 'table')} in ${buildId.slice(0, 17)}`, ''];
392
+ for (const table of tables) {
393
+ const sheet = table.sheet === null ? '' : ` (sheet ${String(table.sheet)})`;
394
+ lines.push(` ${String(table.name)}${sheet} ${count(Number(table.rowCount), 'row')} ${String(table.relativePath)}`);
395
+ lines.push(` ${String(table.id)}`);
396
+ }
397
+ lines.push('', 'Pass a table id or a source path to see its columns.');
398
+ return { human: lines.join('\n'), json: { buildId, tables } };
399
+ }
400
+ const table = tables.find((one) => one.id === target || one.relativePath === target || one.name === target);
401
+ if (table === undefined) {
402
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', `No table matches ${target}.`, {
403
+ remediation: 'Run `lorepack inspect tables` to see the tables this build contains.',
404
+ subject: target,
405
+ });
406
+ }
407
+ // The same projection the runtime port serves, rather than a second query that agrees
408
+ // until someone changes one of them.
409
+ const described = describeStoredTable(db, String(table.id), INSPECT_SAMPLE_ROWS);
410
+ if (described === null) {
411
+ throw new LoreError('LORE_E_INTERNAL', `Table ${String(table.id)} is listed but unreadable.`, {
412
+ remediation: 'The build directory may be damaged. Run `lorepack build` to compile it again.',
413
+ subject: String(table.id),
414
+ });
415
+ }
416
+ const lines = [
417
+ `Table ${described.name} (${described.locator.relativePath})`,
418
+ '',
419
+ ` rows ${String(described.rowCount)}`,
420
+ ` columns ${String(described.columns.length)}`,
421
+ // The generated name, because a query has to address it and nothing else prints it.
422
+ ` sql name ${described.sqlName}`,
423
+ '',
424
+ ' column sql name type nulls distinct range',
425
+ ];
426
+ for (const column of described.columns) {
427
+ const { statistics } = column;
428
+ const distinct = `${statistics.distinctIsExact ? '' : '>='}${String(statistics.distinctEstimate)}`;
429
+ const range = statistics.min === undefined
430
+ ? ''
431
+ : `${String(statistics.min)} .. ${String(statistics.max)}`;
432
+ lines.push(` ${column.name.slice(0, 30).padEnd(30)} ${column.sqlName.slice(0, 20).padEnd(20)} ${column.type.padEnd(8)} ${String(statistics.nullCount).padEnd(6)} ${distinct.padEnd(8)} ${range.slice(0, 40)}`);
433
+ }
434
+ // How the file was read is a judgement the build made, and a column typed unexpectedly
435
+ // is usually explained by it. Printing it here saves reading the manifest.
436
+ const metadata = JSON.parse(String(table.metadata ?? '{}'));
437
+ if (Object.keys(metadata).length > 0) {
438
+ lines.push('', ' how it was read');
439
+ for (const [key, value] of Object.entries(metadata).sort()) {
440
+ lines.push(` ${key.padEnd(20)} ${JSON.stringify(value)}`);
441
+ }
442
+ }
443
+ return {
444
+ human: lines.join('\n'),
445
+ json: { buildId, table: described, metadata },
446
+ };
447
+ });
448
+ }
449
+ /**
450
+ * What the declared rules actually did to each artifact.
451
+ *
452
+ * Only artifacts a rule *changed* are listed. A build of two thousand files where three carry
453
+ * a declaration should print three lines, not two thousand: the question this answers is
454
+ * "did my rules do what I meant", and every neutral row is noise against that.
455
+ *
456
+ * The heading says plainly what `authority` is. Architecture section 4.5 and section 24.6 both
457
+ * insist on it, and a number in a column is exactly where a reader starts believing it was
458
+ * measured rather than declared.
459
+ */
460
+ function inspectRules(loreDirectory, buildId) {
461
+ return withDatabase(loreDirectory, buildId, (db) => {
462
+ const rows = db
463
+ .prepare(`SELECT a.display_path AS displayPath, a.status, a.authority,
464
+ (SELECT group_concat(s.superseded_id, ' ')
465
+ FROM supersessions s WHERE s.artifact_id = a.id) AS supersedes
466
+ FROM artifacts a
467
+ WHERE a.status != 'active' OR a.authority != 50
468
+ OR EXISTS (SELECT 1 FROM supersessions s WHERE s.artifact_id = a.id)
469
+ ORDER BY a.relative_path`)
470
+ .all();
471
+ if (rows.length === 0) {
472
+ return {
473
+ human: 'No rule changed anything in this build.\n\nEvery artifact is active with authority 50 and supersedes nothing. Declare rules in lore.yaml under `rules:`.',
474
+ json: { buildId, rules: [] },
475
+ };
476
+ }
477
+ const lines = [
478
+ `${count(rows.length, 'artifact')} carry a declared rule in ${buildId.slice(0, 17)}`,
479
+ '',
480
+ ' authority is a ranking hint you declared. It is never evidence that a document is',
481
+ ' correct, and Lorepack never decides which of two documents is true.',
482
+ '',
483
+ ];
484
+ for (const row of rows) {
485
+ lines.push(` ${String(row.displayPath)}`);
486
+ lines.push(` status ${String(row.status)}, authority ${String(row.authority)}`);
487
+ const supersedes = row.supersedes === null ? [] : String(row.supersedes).split(' ');
488
+ if (supersedes.length === 1) {
489
+ lines.push(` supersedes ${supersedes[0]}`);
490
+ }
491
+ else if (supersedes.length > 1) {
492
+ lines.push(` supersedes ${count(supersedes.length, 'artifact')}`);
493
+ for (const target of supersedes)
494
+ lines.push(` ${target}`);
495
+ }
496
+ }
497
+ return {
498
+ human: lines.join('\n'),
499
+ json: {
500
+ buildId,
501
+ rules: rows.map((row) => ({
502
+ displayPath: String(row.displayPath),
503
+ status: String(row.status),
504
+ authority: Number(row.authority),
505
+ supersedes: row.supersedes === null ? [] : String(row.supersedes).split(' '),
506
+ })),
507
+ },
508
+ };
509
+ });
510
+ }
511
+ function findArtifact(db, path) {
512
+ const row = db
513
+ .prepare('SELECT * FROM artifacts WHERE display_path = ? OR relative_path = ? OR id = ? LIMIT 1')
514
+ .get(path, path, path);
515
+ if (row !== undefined)
516
+ return row;
517
+ const all = db.prepare('SELECT display_path FROM artifacts ORDER BY display_path').all().map((entry) => entry.display_path);
518
+ const needle = path.toLowerCase();
519
+ const close = all.filter((candidate) => candidate.toLowerCase().includes(needle)).slice(0, 5);
520
+ throw new LoreError('LORE_E_BUILD_NOT_FOUND', `No artifact matches ${path}.`, {
521
+ remediation: close.length > 0
522
+ ? `Did you mean:\n${close.map((candidate) => ` ${candidate}`).join('\n')}`
523
+ : 'Run `lorepack inspect sources` to list what this build contains.',
524
+ subject: path,
525
+ });
526
+ }
527
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CommandDefinition } from '../framework/program.js';
2
+ /**
3
+ * `lorepack mcp`: the stdio server a coding agent launches.
4
+ *
5
+ * The startup sequence is architecture 14.3, and its order is the whole point. Freshness is
6
+ * reconciled **before the first protocol byte**, so a client that launched against a dirty
7
+ * project never sees stale context and never has to ask. Once the protocol starts, stdout
8
+ * belongs to it: every diagnostic goes to stderr, and a stray `console.log` here would
9
+ * corrupt a frame and give the client a parse error with no explanation.
10
+ */
11
+ export declare function mcpCommand(): CommandDefinition;
12
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,yBAAyB,CAAC;AAMhF;;;;;;;;GAQG;AAEH,wBAAgB,UAAU,IAAI,iBAAiB,CA6G9C"}