@functional-systems/srcx 0.1.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/CONTRIBUTING.md +54 -0
  3. package/DESIGN.md +1057 -0
  4. package/LICENSE +202 -0
  5. package/README.md +209 -0
  6. package/RELEASING.md +137 -0
  7. package/VALIDATION.md +181 -0
  8. package/dist/build.d.ts +94 -0
  9. package/dist/build.js +433 -0
  10. package/dist/build.js.map +1 -0
  11. package/dist/chunk.d.ts +30 -0
  12. package/dist/chunk.js +296 -0
  13. package/dist/chunk.js.map +1 -0
  14. package/dist/cli.d.ts +2 -0
  15. package/dist/cli.js +276 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/common.d.ts +17 -0
  18. package/dist/common.js +74 -0
  19. package/dist/common.js.map +1 -0
  20. package/dist/git.d.ts +38 -0
  21. package/dist/git.js +224 -0
  22. package/dist/git.js.map +1 -0
  23. package/dist/publish.d.ts +60 -0
  24. package/dist/publish.js +341 -0
  25. package/dist/publish.js.map +1 -0
  26. package/dist/releases.d.ts +8 -0
  27. package/dist/releases.js +79 -0
  28. package/dist/releases.js.map +1 -0
  29. package/dist/remote.d.ts +53 -0
  30. package/dist/remote.js +136 -0
  31. package/dist/remote.js.map +1 -0
  32. package/dist/repository.d.ts +29 -0
  33. package/dist/repository.js +180 -0
  34. package/dist/repository.js.map +1 -0
  35. package/dist/search.d.ts +46 -0
  36. package/dist/search.js +181 -0
  37. package/dist/search.js.map +1 -0
  38. package/dist/settings.d.ts +10 -0
  39. package/dist/settings.js +35 -0
  40. package/dist/settings.js.map +1 -0
  41. package/package.json +58 -0
  42. package/src/build.ts +587 -0
  43. package/src/chunk.ts +328 -0
  44. package/src/cli.ts +366 -0
  45. package/src/common.ts +71 -0
  46. package/src/git.ts +286 -0
  47. package/src/publish.ts +487 -0
  48. package/src/releases.ts +108 -0
  49. package/src/remote.ts +230 -0
  50. package/src/repository.ts +306 -0
  51. package/src/search.ts +282 -0
  52. package/src/settings.ts +59 -0
package/dist/chunk.js ADDED
@@ -0,0 +1,296 @@
1
+ import { createRequire } from "node:module";
2
+ import { Parser, Language } from "web-tree-sitter";
3
+ import { getEncoding } from "js-tiktoken";
4
+ import { invariant, lineAt } from "./common.js";
5
+ const require = createRequire(import.meta.url);
6
+ const encoding = getEncoding("cl100k_base");
7
+ export function tokens(text) {
8
+ return encoding.encode(text, [], []).length;
9
+ }
10
+ export const CHUNKER = {
11
+ version: 1,
12
+ parser: "web-tree-sitter@0.25.10",
13
+ grammars: "tree-sitter-wasms@0.1.13",
14
+ tokenizer: "js-tiktoken@1.0.21/cl100k_base",
15
+ targetTokens: 800,
16
+ maxTokens: 1500,
17
+ fallbackOverlap: 0.1,
18
+ enrichment: "path-scope-symbol-v1",
19
+ policy: "source-v1",
20
+ };
21
+ const languages = new Map();
22
+ let initialized;
23
+ async function language(name) {
24
+ initialized ??= Parser.init();
25
+ await initialized;
26
+ let l = languages.get(name);
27
+ if (!l) {
28
+ l = await Language.load(require.resolve(`tree-sitter-wasms/out/tree-sitter-${name}.wasm`));
29
+ languages.set(name, l);
30
+ }
31
+ return l;
32
+ }
33
+ export function detectLanguage(path) {
34
+ const ext = path.split(".").at(-1)?.toLowerCase();
35
+ return ({
36
+ java: "java",
37
+ ts: "typescript",
38
+ tsx: "tsx",
39
+ js: "javascript",
40
+ jsx: "javascript",
41
+ mjs: "javascript",
42
+ cjs: "javascript",
43
+ md: "markdown",
44
+ mdx: "markdown",
45
+ json: "json",
46
+ yaml: "yaml",
47
+ yml: "yaml",
48
+ toml: "toml",
49
+ ini: "ini",
50
+ }[ext ?? ""] ?? "text");
51
+ }
52
+ function enrichment(path, u) {
53
+ return ([path.slice(0, 240), u.scope?.slice(0, 160), u.symbol?.slice(0, 160)]
54
+ .filter(Boolean)
55
+ .join("\n") + "\n");
56
+ }
57
+ function classify(type) {
58
+ if (/import|package/.test(type))
59
+ return "imports";
60
+ if (/comment/.test(type))
61
+ return "documentation";
62
+ if (/function|method|constructor/.test(type))
63
+ return "function";
64
+ return "declaration";
65
+ }
66
+ function scopeName(n) {
67
+ const names = [];
68
+ let p = n.parent;
69
+ while (p) {
70
+ if (/class|interface|function|method/.test(p.type)) {
71
+ const name = p.childForFieldName("name");
72
+ if (name)
73
+ names.unshift(name.text);
74
+ }
75
+ p = p.parent;
76
+ }
77
+ return names.length ? names.join(".") : undefined;
78
+ }
79
+ /** Bound strings without slicing a surrogate pair; prefer line ends where possible. */
80
+ function splitUnit(source, path, u, overlap) {
81
+ const result = [];
82
+ let start = u.start;
83
+ const prefix = enrichment(path, u);
84
+ invariant(tokens(prefix) < CHUNKER.maxTokens, "Path/scope enrichment exceeds token limit.");
85
+ while (start < u.end) {
86
+ let end = u.end;
87
+ if (tokens(prefix + source.slice(start, end)) > CHUNKER.maxTokens) {
88
+ let lo = start + 1, hi = end, best = start;
89
+ while (lo <= hi) {
90
+ const probe = Math.floor((lo + hi) / 2);
91
+ let mid = probe;
92
+ if (mid < u.end && /[\uDC00-\uDFFF]/.test(source[mid] ?? ""))
93
+ mid--;
94
+ if (mid <= start) {
95
+ lo = probe + 1;
96
+ continue;
97
+ }
98
+ if (tokens(prefix + source.slice(start, mid)) <= CHUNKER.targetTokens) {
99
+ best = mid;
100
+ lo = probe + 1;
101
+ }
102
+ else
103
+ hi = probe - 1;
104
+ }
105
+ invariant(best > start, "Cannot fit source unit in token budget.");
106
+ end = best;
107
+ const newline = source.lastIndexOf("\n", end - 1);
108
+ if (newline >= start + (end - start) / 2)
109
+ end = newline + 1;
110
+ }
111
+ result.push({ ...u, start, end });
112
+ if (end === u.end)
113
+ break;
114
+ let next = end;
115
+ if (overlap) {
116
+ next = Math.max(start + 1, end - Math.floor((end - start) * overlap));
117
+ if (/[\uDC00-\uDFFF]/.test(source[next] ?? ""))
118
+ next++;
119
+ }
120
+ invariant(next > start, "Chunker made no progress.");
121
+ start = next;
122
+ }
123
+ return result;
124
+ }
125
+ function textUnits(source, lang) {
126
+ // Heading/paragraph/fence units for Markdown; config section/line units otherwise.
127
+ const units = [];
128
+ let start = 0, pos = 0, fenced = false;
129
+ for (const line of source.match(/[^\n]*\n|[^\n]+$/g) ?? []) {
130
+ const fence = /^\s*(```|~~~)/.test(line);
131
+ const boundary = lang === "markdown"
132
+ ? !fenced && (/^#{1,6}\s/.test(line) || line.trim() === "")
133
+ : /^\s*(\[|[\w.-]+\s*[:=])/.test(line);
134
+ if (boundary && pos > start) {
135
+ units.push({
136
+ start,
137
+ end: pos,
138
+ kind: lang === "markdown" ? "documentation" : "configuration",
139
+ });
140
+ start = pos;
141
+ }
142
+ if (fence)
143
+ fenced = !fenced;
144
+ pos += line.length;
145
+ }
146
+ if (pos > start)
147
+ units.push({
148
+ start,
149
+ end: pos,
150
+ kind: lang === "markdown" ? "documentation" : "configuration",
151
+ });
152
+ return units;
153
+ }
154
+ export async function chunk(source, path, mode = "syntax") {
155
+ const lang = detectLanguage(path);
156
+ if (!source.length)
157
+ return { spans: [], parseStatus: "empty", language: lang };
158
+ let units = [];
159
+ let status = "parsed";
160
+ if (mode === "window") {
161
+ status = "window-baseline";
162
+ units = [{ start: 0, end: source.length, kind: "fallback" }];
163
+ }
164
+ else if (["java", "typescript", "tsx", "javascript"].includes(lang)) {
165
+ const grammar = await language(lang);
166
+ const parser = new Parser();
167
+ let tree = null;
168
+ try {
169
+ parser.setLanguage(grammar);
170
+ tree = parser.parse(source);
171
+ invariant(tree, "Parser returned no tree.");
172
+ if (tree.rootNode.hasError) {
173
+ status = "parse-error-fallback";
174
+ units = [{ start: 0, end: source.length, kind: "fallback" }];
175
+ }
176
+ else {
177
+ function visit(n) {
178
+ const container = /^(program|source_file|class_body|interface_body|class_declaration|interface_declaration|export_statement)$/.test(n.type);
179
+ const u = {
180
+ start: n.startIndex,
181
+ end: n.endIndex,
182
+ kind: classify(n.type),
183
+ scope: scopeName(n),
184
+ };
185
+ const name = n.childForFieldName("name");
186
+ if (name)
187
+ u.symbol = name.text.slice(0, 200);
188
+ if (u.kind === "function")
189
+ u.signature = n.text.split(/[\n{]/, 1)[0]?.slice(0, 240);
190
+ if (n.namedChildCount &&
191
+ (container ||
192
+ tokens(enrichment(path, u) + n.text) > CHUNKER.maxTokens)) {
193
+ for (const child of n.namedChildren)
194
+ if (child)
195
+ visit(child);
196
+ }
197
+ else if (n.endIndex > n.startIndex)
198
+ units.push(u);
199
+ }
200
+ visit(tree.rootNode);
201
+ // Attach every gap (punctuation, BOM, comments, whitespace) without altering source bytes.
202
+ let cursor = 0;
203
+ const covered = [];
204
+ for (const u of units.sort((a, b) => a.start - b.start)) {
205
+ if (covered.length) {
206
+ const whitespace = source.slice(cursor, u.start).match(/^\s*/)?.[0].length ?? 0;
207
+ cursor += whitespace;
208
+ covered[covered.length - 1].end = cursor;
209
+ }
210
+ covered.push({ ...u, start: cursor });
211
+ cursor = u.end;
212
+ }
213
+ units = covered;
214
+ if (cursor < source.length) {
215
+ if (units.length)
216
+ units[units.length - 1].end = source.length;
217
+ else
218
+ units = [{ start: 0, end: source.length, kind: "declaration" }];
219
+ }
220
+ }
221
+ }
222
+ finally {
223
+ tree?.delete();
224
+ parser.delete();
225
+ }
226
+ }
227
+ else if (["markdown", "json", "yaml", "toml", "ini"].includes(lang)) {
228
+ status =
229
+ lang === "markdown" ? "markdown-boundaries" : "config-text-fallback";
230
+ units = textUnits(source, lang);
231
+ }
232
+ else {
233
+ status = "unsupported-language-fallback";
234
+ units = [{ start: 0, end: source.length, kind: "fallback" }];
235
+ }
236
+ const fallback = mode === "window" || status.includes("fallback");
237
+ // Merge small neighboring non-function declarations only within the same scope/kind.
238
+ const merged = [];
239
+ for (const u of units) {
240
+ const prev = merged.at(-1);
241
+ if (prev &&
242
+ prev.kind !== "function" &&
243
+ u.kind === prev.kind &&
244
+ u.scope === prev.scope &&
245
+ tokens(enrichment(path, prev) + source.slice(prev.start, u.end)) <=
246
+ CHUNKER.targetTokens) {
247
+ prev.end = u.end;
248
+ delete prev.symbol;
249
+ delete prev.signature;
250
+ }
251
+ else
252
+ merged.push({ ...u });
253
+ }
254
+ const bounded = merged.flatMap((u) => splitUnit(source, path, u, fallback ? CHUNKER.fallbackOverlap : 0));
255
+ const offsets = new Uint32Array(source.length + 1);
256
+ let byte = 0;
257
+ for (let i = 0; i < source.length;) {
258
+ const cp = source.codePointAt(i);
259
+ const chars = cp > 0xffff ? 2 : 1;
260
+ offsets[i] = byte;
261
+ if (chars === 2)
262
+ offsets[i + 1] = byte;
263
+ byte += Buffer.byteLength(String.fromCodePoint(cp));
264
+ i += chars;
265
+ offsets[i] = byte;
266
+ }
267
+ const raw = Buffer.from(source);
268
+ const spans = bounded.map((u) => {
269
+ const startByte = offsets[u.start], endByte = offsets[u.end];
270
+ const text = source.slice(u.start, u.end);
271
+ const searchText = enrichment(path, u) + text;
272
+ const kind = text.trim() === "" ? "structural" : u.kind;
273
+ return {
274
+ startByte,
275
+ endByte,
276
+ startLine: lineAt(raw, startByte),
277
+ endLine: lineAt(raw, Math.max(startByte, endByte - 1)),
278
+ chunkKind: kind,
279
+ scope: u.scope,
280
+ symbol: u.symbol,
281
+ signature: u.signature,
282
+ searchText,
283
+ tokenCount: tokens(searchText),
284
+ };
285
+ });
286
+ let covered = 0;
287
+ for (const s of spans) {
288
+ invariant(s.startByte <= covered &&
289
+ s.endByte > s.startByte &&
290
+ s.tokenCount <= CHUNKER.maxTokens, "Invalid chunk coverage or size.");
291
+ covered = Math.max(covered, s.endByte);
292
+ }
293
+ invariant(covered === raw.length, "Incomplete source coverage.");
294
+ return { spans, parseStatus: status, language: lang };
295
+ }
296
+ //# sourceMappingURL=chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../src/chunk.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { Command, InvalidArgumentError } from "commander";
4
+ import { mkdir } from "node:fs/promises";
5
+ import { join, resolve } from "node:path";
6
+ import { randomUUID } from "node:crypto";
7
+ import { configure, loadSettings, stateRoot } from "./settings.js";
8
+ import { identity } from "./git.js";
9
+ import { loadBuild, materialize, validateBuild } from "./build.js";
10
+ import { invariant, optionalJson } from "./common.js";
11
+ import { LambdaRemote } from "./remote.js";
12
+ import { attachment, destination, discover, register, selectRepository, } from "./repository.js";
13
+ import { exclusive, publish, published } from "./publish.js";
14
+ import { resolveVersion, syncTags } from "./releases.js";
15
+ import { directHandle, loadHandle, readHandle, search } from "./search.js";
16
+ const cli = new Command()
17
+ .name("srcx")
18
+ .description("Version-aware code search on LambdaDB")
19
+ .enablePositionalOptions()
20
+ .version(JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version);
21
+ const output = (value) => {
22
+ process.stdout.write(JSON.stringify(value, null, 2) + "\n");
23
+ };
24
+ const integer = (value) => {
25
+ if (!/^\d+$/.test(value))
26
+ throw new InvalidArgumentError("Expected a nonnegative integer.");
27
+ const n = Number(value);
28
+ if (!Number.isSafeInteger(n))
29
+ throw new InvalidArgumentError("Integer is too large.");
30
+ return n;
31
+ };
32
+ async function connected() {
33
+ const settings = await loadSettings();
34
+ return { settings, remote: new LambdaRemote(settings) };
35
+ }
36
+ cli
37
+ .command("configure")
38
+ .requiredOption("--endpoint <origin>")
39
+ .requiredOption("--project <name>")
40
+ .option("--api-key-env <name>", "Environment variable containing the API key", "LAMBDADB_API_KEY")
41
+ .action(async (o) => output(await configure(o.endpoint, o.project, o.apiKeyEnv)));
42
+ cli
43
+ .command("doctor")
44
+ .description("Check authentication/read access; does not establish write/query readiness")
45
+ .action(async () => {
46
+ const { remote, settings } = await connected();
47
+ const collections = await remote.collections();
48
+ output({
49
+ endpoint: settings.endpoint,
50
+ project: settings.project,
51
+ readAccess: true,
52
+ collections: collections.length,
53
+ writeAccess: "not checked",
54
+ queryReadiness: "not checked",
55
+ });
56
+ });
57
+ const repo = cli
58
+ .command("repo")
59
+ .description("Discover and attach Git repositories");
60
+ repo
61
+ .command("add")
62
+ .requiredOption("--path <directory>")
63
+ .option("--remote <name>")
64
+ .option("--description <text>")
65
+ .option("--tag <key=value>", "One optional Collection metadata tag")
66
+ .action(async (o) => {
67
+ const { remote } = await connected();
68
+ let labels;
69
+ if (o.tag) {
70
+ const at = o.tag.indexOf("=");
71
+ invariant(at > 0, "Use --tag key=value.");
72
+ labels = { [o.tag.slice(0, at)]: o.tag.slice(at + 1) };
73
+ }
74
+ output(await register(remote, {
75
+ path: o.path,
76
+ remote: o.remote,
77
+ description: o.description,
78
+ labels,
79
+ }));
80
+ });
81
+ repo.command("list").action(async () => {
82
+ const { remote } = await connected();
83
+ output(await discover(remote));
84
+ });
85
+ repo
86
+ .command("show")
87
+ .requiredOption("--repo <name>")
88
+ .action(async (o) => {
89
+ const { remote } = await connected();
90
+ output(await selectRepository(remote, o.repo));
91
+ });
92
+ cli
93
+ .command("import")
94
+ .description("Build a pinned Git commit; --dry-run exports locally without credentials")
95
+ .option("--path <directory>", "Local checkout (required with credential-free --dry-run)")
96
+ .option("--remote <name>")
97
+ .option("--repo <name>", "Registered remote repository")
98
+ .option("--ref <ref>", "Local branch, Git tag, or commit OID")
99
+ .option("--dry-run", "Only materialize and validate a local build")
100
+ .option("--output <directory>", "New artifact directory")
101
+ .option("--previous <directory>", "Previous build artifact for a dry-run diff")
102
+ .option("--artifact <directory>", "Import a previously previewed artifact")
103
+ .option("--resume", "Resume the same pending artifact after inspecting its journal")
104
+ .option("--timeout <seconds>", "Validation wait deadline", integer, 120)
105
+ .action(async (o) => {
106
+ invariant(!(o.path && o.repo), "Choose --path or --repo.");
107
+ invariant(!o.previous || o.dryRun, "--previous is only accepted with --dry-run.");
108
+ invariant(!o.resume || !o.dryRun, "--resume requires a connected import.");
109
+ invariant(!(o.artifact && (o.ref || o.path || o.output || o.previous)), "--artifact cannot be combined with --ref/--path/--output/--previous.");
110
+ const buildLocal = async (source, previous) => {
111
+ invariant(o.ref, "--ref is required to build a commit.");
112
+ const parent = join(stateRoot(), "builds");
113
+ await mkdir(parent, { recursive: true, mode: 0o700 });
114
+ const path = o.output ? resolve(o.output) : join(parent, randomUUID());
115
+ return materialize({
116
+ identity: source,
117
+ ref: o.ref,
118
+ output: path,
119
+ previous,
120
+ });
121
+ };
122
+ if (o.dryRun) {
123
+ let b;
124
+ if (o.artifact) {
125
+ b = await loadBuild(o.artifact);
126
+ await validateBuild(b);
127
+ }
128
+ else {
129
+ let source;
130
+ if (o.path)
131
+ source = await identity(o.path, o.remote);
132
+ else {
133
+ invariant(o.repo, "Use --path for a credential-free dry run.");
134
+ const { remote, settings } = await connected();
135
+ source = await attachment(settings, await selectRepository(remote, o.repo));
136
+ }
137
+ b = await buildLocal(source, o.previous ? await loadBuild(o.previous) : undefined);
138
+ }
139
+ output({
140
+ status: "locally-validated",
141
+ artifact: b.directory,
142
+ commitOid: b.commitOid,
143
+ configHash: b.configHash,
144
+ counts: b.counts,
145
+ changes: b.changes,
146
+ obsoleteIds: b.obsoleteIds,
147
+ coverage: b.inventory.map((e) => ({
148
+ path: e.path,
149
+ status: e.status,
150
+ reason: e.reason,
151
+ parseStatus: e.parseStatus,
152
+ })),
153
+ uploaded: false,
154
+ });
155
+ return;
156
+ }
157
+ invariant(o.repo, "Connected import requires --repo. Register it with repo add first.");
158
+ invariant(o.timeout > 0, "Timeout must be positive.");
159
+ const { remote, settings } = await connected();
160
+ const r = await selectRepository(remote, o.repo), state = destination(settings, r.collection), store = remote.store(r.collection);
161
+ output(await exclusive(state, async () => {
162
+ // Pending attempts reconcile against the journal's immutable remote
163
+ // baseline; they do not need the previous build's local files.
164
+ const pending = await optionalJson(join(state, "pending.json"));
165
+ let baseline;
166
+ if (!pending) {
167
+ const last = await optionalJson(join(state, "last-build.json"));
168
+ if (last) {
169
+ const b = await loadBuild(last.artifact);
170
+ baseline = { version: last.version, build: b };
171
+ }
172
+ }
173
+ const b = o.artifact
174
+ ? await loadBuild(o.artifact)
175
+ : await buildLocal(await attachment(settings, r), baseline?.build);
176
+ return publish({
177
+ store,
178
+ binding: r,
179
+ build: b,
180
+ state,
181
+ baseline,
182
+ resume: o.resume,
183
+ timeoutMs: o.timeout * 1000,
184
+ });
185
+ }));
186
+ });
187
+ cli
188
+ .command("versions")
189
+ .requiredOption("--repo <name>")
190
+ .action(async (o) => {
191
+ const { remote } = await connected();
192
+ const r = await selectRepository(remote, o.repo);
193
+ output(await published(remote.store(r.collection), r));
194
+ });
195
+ cli
196
+ .command("resolve")
197
+ .requiredOption("--repo <name>")
198
+ .requiredOption("--ref <commit-or-release>")
199
+ .action(async (o) => {
200
+ const { remote } = await connected();
201
+ const r = await selectRepository(remote, o.repo);
202
+ output(await resolveVersion(remote.store(r.collection), r, o.ref));
203
+ });
204
+ cli
205
+ .command("search")
206
+ .requiredOption("--repo <name>")
207
+ .requiredOption("--version <commit-or-release>")
208
+ .requiredOption("--query <text>")
209
+ .option("--limit <count>", "Maximum hits", integer, 10)
210
+ .option("--path <path>", "Exact path filter")
211
+ .option("--language <name>")
212
+ .action(async (o) => {
213
+ const { remote, settings } = await connected();
214
+ const r = await selectRepository(remote, o.repo), store = remote.store(r.collection), v = await resolveVersion(store, r, o.version);
215
+ output(await search(store, settings, r, v, o.query, o.limit, {
216
+ path: o.path,
217
+ language: o.language,
218
+ }));
219
+ });
220
+ cli
221
+ .command("read")
222
+ .option("--result <id>")
223
+ .option("--repo <name>")
224
+ .option("--version <commit-or-release>")
225
+ .option("--path <path>")
226
+ .option("--lines <start:end>")
227
+ .option("--context <lines>", "Expand an evidence span", integer, 0)
228
+ .option("--full-file")
229
+ .action(async (o) => {
230
+ invariant(!(o.fullFile && (o.lines || o.context)), "--full-file cannot be combined with --lines or --context.");
231
+ invariant(!(o.result && (o.repo || o.version || o.path || o.lines)), "Use result mode or direct path mode.");
232
+ const { settings, remote } = await connected();
233
+ let handle;
234
+ if (o.result) {
235
+ handle = await loadHandle(o.result);
236
+ invariant(handle.endpoint === settings.endpoint &&
237
+ handle.project === settings.project, "Result belongs to another endpoint/project.");
238
+ }
239
+ else {
240
+ invariant(o.repo && o.version && o.path, "Provide --result, or --repo/--version/--path.");
241
+ const r = await selectRepository(remote, o.repo), store = remote.store(r.collection);
242
+ handle = await directHandle(store, settings, r, await resolveVersion(store, r, o.version), o.path);
243
+ }
244
+ let lines;
245
+ if (o.lines) {
246
+ invariant(/^\d+:\d+$/.test(o.lines), "Use --lines start:end.");
247
+ lines = o.lines.split(":").map(Number);
248
+ }
249
+ output(await readHandle(remote.store(handle.repository.collection), settings, handle, {
250
+ context: o.context,
251
+ fullFile: o.fullFile || (!o.result && !o.lines),
252
+ lines,
253
+ }));
254
+ });
255
+ cli
256
+ .command("git")
257
+ .command("sync-tags")
258
+ .description("Synchronize currently observed local Git tags; no fetch/import/pruning")
259
+ .requiredOption("--repo <name>")
260
+ .action(async (o) => {
261
+ const { remote, settings } = await connected();
262
+ const r = await selectRepository(remote, o.repo), source = await attachment(settings, r), state = destination(settings, r.collection);
263
+ output(await exclusive(state, async () => {
264
+ invariant(!(await optionalJson(join(state, "pending.json"))), "An import is pending; resume it before tag synchronization.");
265
+ return syncTags(remote.store(r.collection), r, source.path);
266
+ }));
267
+ });
268
+ try {
269
+ await cli.parseAsync();
270
+ }
271
+ catch (e) {
272
+ const message = e instanceof Error ? e.message : "Operation failed.";
273
+ process.stderr.write(`srcx: ${message}\n`);
274
+ process.exitCode = 1;
275
+ }
276
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare const APP = "srcx";
2
+ export declare const PURPOSE = "code-search-v1";
3
+ export type Doc = {
4
+ id: string;
5
+ kind: string;
6
+ [key: string]: unknown;
7
+ };
8
+ export declare function canonical(value: unknown): string;
9
+ export declare function hash(value: unknown): string;
10
+ export declare function invariant(value: unknown, message: string): asserts value;
11
+ export declare function atomic(path: string, value: unknown): Promise<void>;
12
+ export declare function json<T>(path: string): Promise<T>;
13
+ export declare function optionalJson<T>(path: string): Promise<T | undefined>;
14
+ export declare function utf8(bytes: Buffer): string | undefined;
15
+ export declare function sortedHash(docs: Doc[]): string;
16
+ export declare function lineAt(source: Buffer, byte: number): number;
17
+ export declare function sleep(ms: number): Promise<void>;