prompsit-cli 26.304.1130 → 26.304.1307

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.
@@ -1,5 +1,4 @@
1
- type FormatSource = "document" | "qe" | "score" | "annotate";
1
+ import { type FormatSource } from "../runtime/format-extensions.ts";
2
2
  /** Fetch format metadata from the appropriate API endpoint and render the unified table. */
3
3
  export declare function showFormats(source: FormatSource): Promise<void>;
4
- export {};
5
4
  //# sourceMappingURL=show-formats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"show-formats.d.ts","sourceRoot":"","sources":["../../src/commands/show-formats.ts"],"names":[],"mappings":"AAOA,KAAK,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;AAO7D,4FAA4F;AAC5F,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE"}
1
+ {"version":3,"file":"show-formats.d.ts","sourceRoot":"","sources":["../../src/commands/show-formats.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAO1F,4FAA4F;AAC5F,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAQrE"}
@@ -2,6 +2,7 @@
2
2
  // Each command calls showFormats(source) instead of duplicating fetch + map + render logic.
3
3
  import { getApiClient } from "../api/client.js";
4
4
  import { terminal, createFormatsTableModel } from "../output/index.js";
5
+ import { saveFormatExtensions } from "../runtime/format-extensions.js";
5
6
  function buildExamples(selfId, outputFormats) {
6
7
  const other = outputFormats.find((f) => f !== selfId);
7
8
  return other ? `--output-format "${other}"` : "";
@@ -10,6 +11,8 @@ function buildExamples(selfId, outputFormats) {
10
11
  export async function showFormats(source) {
11
12
  const entries = await fetchFormats(source);
12
13
  terminal.table(createFormatsTableModel(entries));
14
+ // Side effect: update format extensions cache for file autocomplete
15
+ saveFormatExtensions(source, entries.flatMap((e) => e.extensions));
13
16
  }
14
17
  async function fetchFormats(source) {
15
18
  const api = getApiClient().discovery;
@@ -1 +1 @@
1
- {"version":3,"file":"show-formats.js","sourceRoot":"","sources":["../../src/commands/show-formats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"show-formats.js","sourceRoot":"","sources":["../../src/commands/show-formats.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-provider.d.ts","sourceRoot":"","sources":["../../../src/repl/input/autocomplete-provider.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAc9B,qBAAa,wBAAyB,YAAW,oBAAoB;IACnE,cAAc,CACZ,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA+BvD,eAAe,CACb,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAoB9D"}
1
+ {"version":3,"file":"autocomplete-provider.d.ts","sourceRoot":"","sources":["../../../src/repl/input/autocomplete-provider.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAe9B,qBAAa,wBAAyB,YAAW,oBAAoB;IACnE,cAAc,CACZ,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAyCvD,eAAe,CACb,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAoB9D"}
@@ -8,6 +8,7 @@
8
8
  import { CombinedAutocompleteProvider, } from "@mariozechner/pi-tui";
9
9
  import { completer } from "./completer.js";
10
10
  import { getDropdownCommands } from "../registry.js";
11
+ import { getAllowedExtensions } from "../../runtime/format-extensions.js";
11
12
  // pi-tui file provider (no fd — third arg null → uses readdirSync internally)
12
13
  let _fileProvider = null;
13
14
  function getFileProvider() {
@@ -20,9 +21,17 @@ export class ReplAutocompleteProvider {
20
21
  getSuggestions(lines, cursorLine, cursorCol) {
21
22
  const currentLine = lines[cursorLine] ?? "";
22
23
  const textBeforeCursor = currentLine.slice(0, cursorCol);
23
- // --- @"file" completion: delegate entirely to pi-tui ---
24
+ // --- @"file" completion: delegate to pi-tui, then filter by command formats ---
24
25
  if (AT_FILE_RE.test(textBeforeCursor)) {
25
- return getFileProvider().getForceFileSuggestions(lines, cursorLine, cursorCol);
26
+ const result = getFileProvider().getForceFileSuggestions(lines, cursorLine, cursorCol);
27
+ if (!result)
28
+ return null;
29
+ const command = parseCommandName(lines[0] ?? "");
30
+ const allowed = getAllowedExtensions(command);
31
+ if (!allowed)
32
+ return result; // cache not ready → show all
33
+ const filtered = result.items.filter((item) => item.value.endsWith("/") || matchesExtensions(item.value, allowed));
34
+ return filtered.length > 0 ? { items: filtered, prefix: result.prefix } : result;
26
35
  }
27
36
  // --- Command name completion ---
28
37
  const [completions, prefix] = completer(textBeforeCursor);
@@ -60,4 +69,26 @@ export class ReplAutocompleteProvider {
60
69
  };
61
70
  }
62
71
  }
72
+ // ---------------------------------------------------------------------------
73
+ // Helpers for format-aware file filtering
74
+ // ---------------------------------------------------------------------------
75
+ /** Implicit-translate regex: line starts with @" or " (no command prefix). */
76
+ const IMPLICIT_TRANSLATE_RE = /^@?"/;
77
+ /** Extract the REPL command name from the first line of input. */
78
+ function parseCommandName(line) {
79
+ const trimmed = line.trimStart();
80
+ if (IMPLICIT_TRANSLATE_RE.test(trimmed))
81
+ return "translate";
82
+ const spaceIdx = trimmed.indexOf(" ");
83
+ return spaceIdx === -1 ? trimmed : trimmed.slice(0, spaceIdx);
84
+ }
85
+ /** Check if a filename matches any of the allowed extensions (handles compound like .jsonl.gz). */
86
+ function matchesExtensions(filename, allowed) {
87
+ const lower = filename.toLowerCase();
88
+ for (const ext of allowed) {
89
+ if (lower.endsWith(ext))
90
+ return true;
91
+ }
92
+ return false;
93
+ }
63
94
  //# sourceMappingURL=autocomplete-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-provider.js","sourceRoot":"","sources":["../../../src/repl/input/autocomplete-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-provider.js","sourceRoot":"","sources":["../../../src/repl/input/autocomplete-provider.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,YAAY;AACZ,2DAA2D;AAC3D,8EAA8E;AAC9E,mFAAmF;AACnF,EAAE;AACF,+EAA+E;AAE/E,OAAO,EACL,4BAA4B,GAG7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,8EAA8E;AAC9E,IAAI,aAAa,GAAwC,IAAI,CAAC;AAC9D,SAAS,eAAe;IACtB,aAAa,KAAK,IAAI,4BAA4B,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5E,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,MAAM,OAAO,wBAAwB;IACnC,cAAc,CACZ,KAAe,EACf,UAAkB,EAClB,SAAiB;QAEjB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEzD,iFAAiF;QACjF,IAAI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YACvF,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEzB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,OAAO,MAAM,CAAC,CAAC,6BAA6B;YAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAC7E,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACnF,CAAC;QAED,kCAAkC;QAClC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAE1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,kFAAkF;YAClF,sFAAsF;YACtF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAuB,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3D,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;aACpC,CAAC,CAAC,CAAC;YACJ,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CACb,KAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,IAAsB,EACtB,MAAc;QAEd,+EAA+E;QAC/E,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,eAAe,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvF,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjD,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,UAAU;YACV,SAAS,EAAE,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;SACnD,CAAC;IACJ,CAAC;CACF;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,8EAA8E;AAC9E,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,kEAAkE;AAClE,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,WAAW,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED,mGAAmG;AACnG,SAAS,iBAAiB,CAAC,QAAgB,EAAE,OAA4B;IACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/repl/loop.ts"],"names":[],"mappings":"AAuBA,qCAAqC;AACrC,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA0C7C"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/repl/loop.ts"],"names":[],"mappings":"AAwBA,qCAAqC;AACrC,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C7C"}
package/dist/repl/loop.js CHANGED
@@ -17,6 +17,7 @@ import { currentLang, needsRefresh, clearRefreshFlag, setTranslations } from "..
17
17
  import { translateCatalog } from "../i18n/translator.js";
18
18
  import { createTranslator } from "../api/translator-adapter.js";
19
19
  import { NULL_SINK } from "../runtime/progress-sink.js";
20
+ import { warmFormatExtensions } from "../runtime/format-extensions.js";
20
21
  const log = getLogger(import.meta.url);
21
22
  /** Run the interactive REPL mode. */
22
23
  export async function runRepl() {
@@ -43,6 +44,10 @@ export async function runRepl() {
43
44
  log.warn("i18n background refresh failed", { error: String(error) });
44
45
  });
45
46
  }
47
+ // Background warm format extensions cache for file autocomplete (no auth needed)
48
+ warmFormatExtensions().catch((error) => {
49
+ log.warn("format extensions warm failed", { error: String(error) });
50
+ });
46
51
  // Deploy bundled example files to ~/.prompsit/examples/ on first run
47
52
  try {
48
53
  ensureExamples();
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/repl/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/repl/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** Shared type across format-extensions and show-formats. */
2
+ export type FormatSource = "document" | "qe" | "score" | "annotate";
3
+ /**
4
+ * Background-warm all format sources. Load from disk if fresh, else fetch API.
5
+ * Best-effort: errors are logged, never thrown.
6
+ */
7
+ export declare function warmFormatExtensions(): Promise<void>;
8
+ /**
9
+ * Save already-fetched extensions to cache (avoids re-fetching in --formats).
10
+ */
11
+ export declare function saveFormatExtensions(source: FormatSource, extensions: string[]): void;
12
+ /**
13
+ * Get allowed file extensions for a REPL command name.
14
+ * Returns null if command is unknown or cache not populated yet.
15
+ */
16
+ export declare function getAllowedExtensions(command: string): ReadonlySet<string> | null;
17
+ //# sourceMappingURL=format-extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-extensions.d.ts","sourceRoot":"","sources":["../../src/runtime/format-extensions.ts"],"names":[],"mappings":"AAiBA,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;AAiGpE;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAGrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAIhF"}
@@ -0,0 +1,134 @@
1
+ // Two-tier format extensions cache (disk + memory) for file autocomplete filtering.
2
+ //
3
+ // Disk: ~/.prompsit/formats/{source}.json with 24h TTL.
4
+ // Memory: Map<command, Set<extension>> for sync access from getSuggestions().
5
+ //
6
+ // Format API endpoints are public (no auth required), so we warm on REPL startup.
7
+ // --formats command also updates the cache as a side effect.
8
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { getConfigDir } from "../config/paths.js";
11
+ import { atomicWriteFile } from "../config/file-utils.js";
12
+ import { getApiClient } from "../api/client.js";
13
+ import { getLogger } from "../logging/index.js";
14
+ const log = getLogger(import.meta.url);
15
+ const TTL_MS = 86_400_000; // 24 hours
16
+ /** Command name → FormatSource mapping (includes aliases). */
17
+ const CMD_SOURCE = {
18
+ translate: "document",
19
+ t: "document",
20
+ eval: "qe",
21
+ evaluate: "qe",
22
+ score: "score",
23
+ annotate: "annotate",
24
+ };
25
+ const ALL_SOURCES = ["document", "qe", "score", "annotate"];
26
+ function getFormatsDir() {
27
+ const dir = join(getConfigDir(), "formats");
28
+ if (!existsSync(dir)) {
29
+ mkdirSync(dir, { recursive: true });
30
+ }
31
+ return dir;
32
+ }
33
+ function diskPath(source) {
34
+ return join(getFormatsDir(), `${source}.json`);
35
+ }
36
+ function loadDisk(source) {
37
+ const path = diskPath(source);
38
+ if (!existsSync(path))
39
+ return null;
40
+ try {
41
+ const data = JSON.parse(readFileSync(path, "utf8"));
42
+ if (Date.now() - Date.parse(data.timestamp) > TTL_MS)
43
+ return null; // expired
44
+ return data.extensions;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ function saveDisk(source, extensions) {
51
+ const entry = { timestamp: new Date().toISOString(), extensions };
52
+ atomicWriteFile(diskPath(source), JSON.stringify(entry, null, 2));
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // API fetch
56
+ // ---------------------------------------------------------------------------
57
+ async function fetchExtensions(source) {
58
+ const api = getApiClient().discovery;
59
+ switch (source) {
60
+ case "document": {
61
+ const formats = await api.documentFormats();
62
+ return formats.flatMap((f) => f.extensions);
63
+ }
64
+ case "qe": {
65
+ const formats = await api.qeFormats();
66
+ return formats.flatMap((f) => f.extensions);
67
+ }
68
+ case "score": {
69
+ const resp = await api.dataScoreFormats();
70
+ return resp.input_formats.flatMap((f) => f.extensions);
71
+ }
72
+ case "annotate": {
73
+ const resp = await api.dataAnnotateFormats();
74
+ return resp.input_formats.flatMap((f) => f.extensions);
75
+ }
76
+ }
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // In-memory cache
80
+ // ---------------------------------------------------------------------------
81
+ // source → Set<".docx", ".pdf", ...>
82
+ const _memory = new Map();
83
+ function storeInMemory(source, extensions) {
84
+ // Normalize: ensure dot prefix, deduplicate
85
+ const normalized = new Set(extensions.map((e) => (e.startsWith(".") ? e : `.${e}`)));
86
+ _memory.set(source, normalized);
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Public API
90
+ // ---------------------------------------------------------------------------
91
+ /**
92
+ * Background-warm all format sources. Load from disk if fresh, else fetch API.
93
+ * Best-effort: errors are logged, never thrown.
94
+ */
95
+ export async function warmFormatExtensions() {
96
+ const fetches = [];
97
+ for (const source of ALL_SOURCES) {
98
+ const cached = loadDisk(source);
99
+ if (cached) {
100
+ storeInMemory(source, cached);
101
+ log.debug("format cache hit (disk)", { source });
102
+ continue;
103
+ }
104
+ // Stale or missing → fetch from API
105
+ fetches.push(fetchExtensions(source)
106
+ .then((exts) => {
107
+ storeInMemory(source, exts);
108
+ saveDisk(source, exts);
109
+ log.debug("format cache refreshed (api)", { source, count: String(exts.length) });
110
+ })
111
+ .catch((error) => {
112
+ log.warn("format cache fetch failed", { source, error: String(error) });
113
+ }));
114
+ }
115
+ await Promise.all(fetches);
116
+ }
117
+ /**
118
+ * Save already-fetched extensions to cache (avoids re-fetching in --formats).
119
+ */
120
+ export function saveFormatExtensions(source, extensions) {
121
+ storeInMemory(source, extensions);
122
+ saveDisk(source, extensions);
123
+ }
124
+ /**
125
+ * Get allowed file extensions for a REPL command name.
126
+ * Returns null if command is unknown or cache not populated yet.
127
+ */
128
+ export function getAllowedExtensions(command) {
129
+ const source = CMD_SOURCE[command];
130
+ if (!source)
131
+ return null;
132
+ return _memory.get(source) ?? null;
133
+ }
134
+ //# sourceMappingURL=format-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-extensions.js","sourceRoot":"","sources":["../../src/runtime/format-extensions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prompsit-cli",
3
- "version": "26.304.1130",
3
+ "version": "26.304.1307",
4
4
  "description": "CLI for the Prompsit Translation API",
5
5
  "license": "MIT",
6
6
  "type": "module",