@exellix/ai-tasks 7.8.1 → 8.0.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 (90) hide show
  1. package/BREAKING-CHANGES.md +24 -0
  2. package/README.md +10 -7
  3. package/RUNTASK_REQUEST.md +3 -3
  4. package/dist/builders/task-request-builder.d.ts +14 -21
  5. package/dist/builders/task-request-builder.d.ts.map +1 -1
  6. package/dist/builders/task-request-builder.js +33 -20
  7. package/dist/builders/task-request-builder.js.map +1 -1
  8. package/dist/compile/compileTaskConfiguration.d.ts +3 -1
  9. package/dist/compile/compileTaskConfiguration.d.ts.map +1 -1
  10. package/dist/compile/compileTaskConfiguration.js +44 -9
  11. package/dist/compile/compileTaskConfiguration.js.map +1 -1
  12. package/dist/core/task-sdk.d.ts.map +1 -1
  13. package/dist/core/task-sdk.js +4 -5
  14. package/dist/core/task-sdk.js.map +1 -1
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/narrix/bundleToNarrixPack.d.ts +8 -0
  20. package/dist/narrix/bundleToNarrixPack.d.ts.map +1 -0
  21. package/dist/narrix/bundleToNarrixPack.js +60 -0
  22. package/dist/narrix/bundleToNarrixPack.js.map +1 -0
  23. package/dist/narrix/createNarrixRunnerFromBundle.d.ts +8 -0
  24. package/dist/narrix/createNarrixRunnerFromBundle.d.ts.map +1 -0
  25. package/dist/narrix/createNarrixRunnerFromBundle.js +17 -0
  26. package/dist/narrix/createNarrixRunnerFromBundle.js.map +1 -0
  27. package/dist/narrix/index.d.ts +1 -1
  28. package/dist/narrix/index.d.ts.map +1 -1
  29. package/dist/narrix/index.js +1 -1
  30. package/dist/narrix/index.js.map +1 -1
  31. package/dist/narrix/loadNarrixBundleFromCatalox.d.ts +8 -0
  32. package/dist/narrix/loadNarrixBundleFromCatalox.d.ts.map +1 -0
  33. package/dist/narrix/loadNarrixBundleFromCatalox.js +73 -0
  34. package/dist/narrix/loadNarrixBundleFromCatalox.js.map +1 -0
  35. package/dist/narrix/narrixCatalogBundleLoader.d.ts +15 -0
  36. package/dist/narrix/narrixCatalogBundleLoader.d.ts.map +1 -0
  37. package/dist/narrix/narrixCatalogBundleLoader.js +67 -0
  38. package/dist/narrix/narrixCatalogBundleLoader.js.map +1 -0
  39. package/dist/narrix/narrixCatalogCredentials.d.ts +8 -0
  40. package/dist/narrix/narrixCatalogCredentials.d.ts.map +1 -0
  41. package/dist/narrix/narrixCatalogCredentials.js +20 -0
  42. package/dist/narrix/narrixCatalogCredentials.js.map +1 -0
  43. package/dist/narrix/narrixClient.d.ts.map +1 -1
  44. package/dist/narrix/narrixClient.js +4 -3
  45. package/dist/narrix/narrixClient.js.map +1 -1
  46. package/dist/narrix/runNarrixForChat.d.ts.map +1 -1
  47. package/dist/narrix/runNarrixForChat.js +3 -1
  48. package/dist/narrix/runNarrixForChat.js.map +1 -1
  49. package/dist/narrix/runNarrixForDocs.d.ts.map +1 -1
  50. package/dist/narrix/runNarrixForDocs.js +3 -1
  51. package/dist/narrix/runNarrixForDocs.js.map +1 -1
  52. package/dist/narrix/runNarrixForRecord.d.ts.map +1 -1
  53. package/dist/narrix/runNarrixForRecord.js +3 -1
  54. package/dist/narrix/runNarrixForRecord.js.map +1 -1
  55. package/dist/narrix/runNarrixForText.d.ts.map +1 -1
  56. package/dist/narrix/runNarrixForText.js +3 -1
  57. package/dist/narrix/runNarrixForText.js.map +1 -1
  58. package/dist/narrix/runnerDispatch.d.ts.map +1 -1
  59. package/dist/narrix/runnerDispatch.js +2 -1
  60. package/dist/narrix/runnerDispatch.js.map +1 -1
  61. package/dist/narrix/seedBundleRouting.d.ts +13 -3
  62. package/dist/narrix/seedBundleRouting.d.ts.map +1 -1
  63. package/dist/narrix/seedBundleRouting.js +61 -11
  64. package/dist/narrix/seedBundleRouting.js.map +1 -1
  65. package/dist/post-steps/audit/runAudit.d.ts.map +1 -1
  66. package/dist/post-steps/audit/runAudit.js +2 -1
  67. package/dist/post-steps/audit/runAudit.js.map +1 -1
  68. package/dist/strategies/direct-execution-strategy.d.ts.map +1 -1
  69. package/dist/strategies/direct-execution-strategy.js +3 -12
  70. package/dist/strategies/direct-execution-strategy.js.map +1 -1
  71. package/dist/types/index.d.ts +1 -0
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/types/model-config.d.ts +30 -0
  74. package/dist/types/model-config.d.ts.map +1 -0
  75. package/dist/types/model-config.js +82 -0
  76. package/dist/types/model-config.js.map +1 -0
  77. package/dist/types/task-configuration.d.ts +6 -0
  78. package/dist/types/task-configuration.d.ts.map +1 -1
  79. package/dist/utils/routeModelConfigSlots.d.ts +2 -0
  80. package/dist/utils/routeModelConfigSlots.d.ts.map +1 -0
  81. package/dist/utils/routeModelConfigSlots.js +2 -0
  82. package/dist/utils/routeModelConfigSlots.js.map +1 -0
  83. package/dist/validation/helpers.d.ts +6 -0
  84. package/dist/validation/helpers.d.ts.map +1 -1
  85. package/dist/validation/helpers.js +95 -1
  86. package/dist/validation/helpers.js.map +1 -1
  87. package/dist/validation/validateRunTaskConfig.d.ts.map +1 -1
  88. package/dist/validation/validateRunTaskConfig.js +2 -2
  89. package/dist/validation/validateRunTaskConfig.js.map +1 -1
  90. package/package.json +2 -1
@@ -10,5 +10,5 @@ export { runNarrixForChat } from "./runNarrixForChat.js";
10
10
  export { getNarrixClient } from "./narrixClient.js";
11
11
  export { narrixFlags } from "./flags.js";
12
12
  export { NARRIX_RUN_SKILL_KEY } from "./task.js";
13
- export { getNarrixCatalogBundle, pickQuestionIdForDataset, resolveDatasetIngestHints } from "./seedBundleRouting.js";
13
+ export { ensureNarrixCatalogBundle, getNarrixCatalogBundle, listRunnableNarrixDatasetIds, pickQuestionIdForDataset, pickRunnableNarrixDataset, resolveDatasetIngestHints, isNarrixCatalogSourceAvailable, narrixArchivePresent, resetNarrixCatalogBundleCache, } from "./seedBundleRouting.js";
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/narrix/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEnE,mFAAmF;AACnF,iBAAiB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AAE1D,yCAAyC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/narrix/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEnE,mFAAmF;AACnF,iBAAiB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AAE1D,yCAAyC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { CataloxSeedBundle } from "@exellix/narrix-catalox";
2
+ import type { Catalox } from "@x12i/catalox";
3
+ /**
4
+ * Rebuild a {@link CataloxSeedBundle} from Narrix native catalogs in Catalox/Firestore
5
+ * (same rows written by `@exellix/narrix-catalox` `runCataloxSeed`).
6
+ */
7
+ export declare function loadNarrixBundleFromCatalox(catalox: Catalox): Promise<CataloxSeedBundle>;
8
+ //# sourceMappingURL=loadNarrixBundleFromCatalox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadNarrixBundleFromCatalox.d.ts","sourceRoot":"","sources":["../../src/narrix/loadNarrixBundleFromCatalox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAC;AA2D7D;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2B9F"}
@@ -0,0 +1,73 @@
1
+ import { CATALOG_SPECS } from "@exellix/narrix-catalox";
2
+ import { resolveNarrixCataloxAppId } from "./narrixCatalogCredentials.js";
3
+ const CATALOG_ID_TO_BUNDLE_KEY = {
4
+ categories: "categories",
5
+ signals: "signals",
6
+ narratives: "narratives",
7
+ "narrator-mappings": "narratorMappings",
8
+ "rule-packs": "rulePacks",
9
+ processors: "processors",
10
+ pipelines: "pipelines",
11
+ "answer-mappings": "answerMappings",
12
+ "record-schemas": "recordSchemas",
13
+ "record-properties": "recordProperties",
14
+ "use-cases": "useCases",
15
+ };
16
+ function asRecord(v) {
17
+ return v && typeof v === "object" && !Array.isArray(v) ? v : {};
18
+ }
19
+ async function listAllNativeCatalogData(catalox, ctx, catalogId) {
20
+ const rows = [];
21
+ let offset = 0;
22
+ let cursor;
23
+ for (;;) {
24
+ const page = await catalox.listCatalogItems(ctx, catalogId, {
25
+ limit: 500,
26
+ ...(cursor ? { cursor } : { offset }),
27
+ scope: { superAdmin: true },
28
+ });
29
+ if (page.listOutcome === "mapping_blocked") {
30
+ throw new Error(`Catalox listCatalogItems mapping_blocked for catalog "${catalogId}"` +
31
+ (page.issues?.length ? `: ${JSON.stringify(page.issues)}` : ""));
32
+ }
33
+ for (const item of page.items) {
34
+ rows.push(asRecord(item.data));
35
+ }
36
+ if (page.nextCursor) {
37
+ cursor = page.nextCursor;
38
+ offset = 0;
39
+ continue;
40
+ }
41
+ if (!page.items.length || page.items.length < 500)
42
+ break;
43
+ offset += page.items.length;
44
+ }
45
+ return rows;
46
+ }
47
+ /**
48
+ * Rebuild a {@link CataloxSeedBundle} from Narrix native catalogs in Catalox/Firestore
49
+ * (same rows written by `@exellix/narrix-catalox` `runCataloxSeed`).
50
+ */
51
+ export async function loadNarrixBundleFromCatalox(catalox) {
52
+ const appId = resolveNarrixCataloxAppId();
53
+ const ctx = {
54
+ appId,
55
+ superAdmin: true,
56
+ actor: { type: "service", id: "ai-tasks-narrix-catalog" },
57
+ };
58
+ const catalogs = {};
59
+ for (const spec of CATALOG_SPECS) {
60
+ const bundleKey = CATALOG_ID_TO_BUNDLE_KEY[spec.catalogId];
61
+ if (!bundleKey)
62
+ continue;
63
+ catalogs[bundleKey] = (await listAllNativeCatalogData(catalox, ctx, spec.catalogId));
64
+ }
65
+ const categories = catalogs.categories ?? [];
66
+ const categoryId = categories[0]?.categoryId ?? "network-security";
67
+ if (!catalogs.processors?.length) {
68
+ throw new Error(`Narrix Catalox catalog is empty or not seeded for appId="${appId}". ` +
69
+ "Run `@exellix/narrix-catalox` seed against this app, or populate `.archive/packages` locally.");
70
+ }
71
+ return { categoryId, catalogs };
72
+ }
73
+ //# sourceMappingURL=loadNarrixBundleFromCatalox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadNarrixBundleFromCatalox.js","sourceRoot":"","sources":["../../src/narrix/loadNarrixBundleFromCatalox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,MAAM,wBAAwB,GAAqC;IACjE,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,kBAAkB;IACvC,YAAY,EAAE,WAAW;IACzB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,gBAAgB;IACnC,gBAAgB,EAAE,eAAe;IACjC,mBAAmB,EAAE,kBAAkB;IACvC,WAAW,EAAE,UAAU;CACxB,CAAC;AAEF,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,OAAgB,EAChB,GAAmB,EACnB,SAAiB;IAEjB,MAAM,IAAI,GAA8B,EAAE,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAA0B,CAAC;IAE/B,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE;YAC1D,KAAK,EAAE,GAAG;YACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,MAAM,EAAyB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;SAC5B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,WAAW,KAAK,iBAAiB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,yDAAyD,SAAS,GAAG;gBACnE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM;QACzD,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAgB;IAChE,MAAM,KAAK,GAAG,yBAAyB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAmB;QAC1B,KAAK;QACL,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,yBAAyB,EAAE;KAC1D,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAmC,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAU,CAAC;IAChG,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7C,MAAM,UAAU,GACb,UAAU,CAAC,CAAC,CAAyC,EAAE,UAAU,IAAI,kBAAkB,CAAC;IAE3F,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,4DAA4D,KAAK,KAAK;YACpE,+FAA+F,CAClG,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type CataloxSeedBundle } from "@exellix/narrix-catalox";
2
+ /** True when the on-disk Narrix pack archive is present (dev checkout layout). */
3
+ export declare function narrixArchivePresent(): boolean;
4
+ /** Archive on disk or Catalox credentials to load Narrix catalogs from Firestore. */
5
+ export declare function isNarrixCatalogSourceAvailable(): boolean;
6
+ export declare function resetNarrixCatalogBundleCache(): void;
7
+ /**
8
+ * Load Narrix catalog once (archive first, then Catalox). Safe to call concurrently.
9
+ */
10
+ export declare function ensureNarrixCatalogBundle(): Promise<CataloxSeedBundle>;
11
+ /**
12
+ * Sync accessor after {@link ensureNarrixCatalogBundle} (or when `.archive` is present).
13
+ */
14
+ export declare function getNarrixCatalogBundleSync(): CataloxSeedBundle;
15
+ //# sourceMappingURL=narrixCatalogBundleLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrixCatalogBundleLoader.d.ts","sourceRoot":"","sources":["../../src/narrix/narrixCatalogBundleLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAejC,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,qFAAqF;AACrF,wBAAgB,8BAA8B,IAAI,OAAO,CAExD;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAGpD;AAsBD;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAa5E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,iBAAiB,CAS9D"}
@@ -0,0 +1,67 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { getSeedBundle, narrixArchiveManifest, } from "@exellix/narrix-catalox";
4
+ import { loadNarrixBundleFromCatalox } from "./loadNarrixBundleFromCatalox.js";
5
+ import { narrixCataloxCredentialsReady } from "./narrixCatalogCredentials.js";
6
+ const ARCHIVE_SIGNAL = path.join(process.cwd(), ".archive", "packages", "pack", "signals.catalog.json");
7
+ let cachedBundle = null;
8
+ let loading = null;
9
+ /** True when the on-disk Narrix pack archive is present (dev checkout layout). */
10
+ export function narrixArchivePresent() {
11
+ return existsSync(ARCHIVE_SIGNAL);
12
+ }
13
+ /** Archive on disk or Catalox credentials to load Narrix catalogs from Firestore. */
14
+ export function isNarrixCatalogSourceAvailable() {
15
+ return narrixArchivePresent() || narrixCataloxCredentialsReady();
16
+ }
17
+ export function resetNarrixCatalogBundleCache() {
18
+ cachedBundle = null;
19
+ loading = null;
20
+ }
21
+ function loadNarrixCatalogBundleFromArchive() {
22
+ return getSeedBundle(narrixArchiveManifest());
23
+ }
24
+ async function loadNarrixCatalogBundleAuto() {
25
+ if (narrixArchivePresent()) {
26
+ return loadNarrixCatalogBundleFromArchive();
27
+ }
28
+ if (narrixCataloxCredentialsReady()) {
29
+ const { createCataloxFromEnv } = await import("@exellix/ai-skills");
30
+ const catalox = createCataloxFromEnv();
31
+ return loadNarrixBundleFromCatalox(catalox);
32
+ }
33
+ throw new Error("Narrix catalog unavailable: populate `.archive/packages` (see BREAKING-CHANGES-NARRIX-V5.md) " +
34
+ "or configure Catalox env (FIREBASE_PROJECT_ID, GOOGLE_SERVICE_ACCOUNT_BASE64, CATALOX_APP_ID) " +
35
+ "with Narrix native catalogs seeded via @exellix/narrix-catalox.");
36
+ }
37
+ /**
38
+ * Load Narrix catalog once (archive first, then Catalox). Safe to call concurrently.
39
+ */
40
+ export async function ensureNarrixCatalogBundle() {
41
+ if (cachedBundle)
42
+ return cachedBundle;
43
+ if (!loading) {
44
+ loading = loadNarrixCatalogBundleAuto()
45
+ .then((bundle) => {
46
+ cachedBundle = bundle;
47
+ return bundle;
48
+ })
49
+ .finally(() => {
50
+ loading = null;
51
+ });
52
+ }
53
+ return loading;
54
+ }
55
+ /**
56
+ * Sync accessor after {@link ensureNarrixCatalogBundle} (or when `.archive` is present).
57
+ */
58
+ export function getNarrixCatalogBundleSync() {
59
+ if (cachedBundle)
60
+ return cachedBundle;
61
+ if (narrixArchivePresent()) {
62
+ cachedBundle = loadNarrixCatalogBundleFromArchive();
63
+ return cachedBundle;
64
+ }
65
+ throw new Error("Narrix catalog bundle not loaded. Await ensureNarrixCatalogBundle() when `.archive/packages` is absent.");
66
+ }
67
+ //# sourceMappingURL=narrixCatalogBundleLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrixCatalogBundleLoader.js","sourceRoot":"","sources":["../../src/narrix/narrixCatalogBundleLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAE9E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,OAAO,CAAC,GAAG,EAAE,EACb,UAAU,EACV,UAAU,EACV,MAAM,EACN,sBAAsB,CACvB,CAAC;AAEF,IAAI,YAAY,GAA6B,IAAI,CAAC;AAClD,IAAI,OAAO,GAAsC,IAAI,CAAC;AAEtD,kFAAkF;AAClF,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,8BAA8B;IAC5C,OAAO,oBAAoB,EAAE,IAAI,6BAA6B,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,YAAY,GAAG,IAAI,CAAC;IACpB,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED,SAAS,kCAAkC;IACzC,OAAO,aAAa,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,2BAA2B;IACxC,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,OAAO,kCAAkC,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,6BAA6B,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;QACvC,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,KAAK,CACb,+FAA+F;QAC7F,gGAAgG;QAChG,iEAAiE,CACpE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,2BAA2B,EAAE;aACpC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,YAAY,GAAG,MAAM,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,YAAY,GAAG,kCAAkC,EAAE,CAAC;QACpD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** True when Catalox/Firebase env is sufficient for {@link createCataloxFromEnv}. */
2
+ export declare function narrixCataloxCredentialsReady(): boolean;
3
+ /**
4
+ * Catalox app that owns Narrix native catalogs (`categories`, `processors`, …).
5
+ * Defaults to `CATALOX_APP_ID` (same as `@exellix/narrix-catalox` seed).
6
+ */
7
+ export declare function resolveNarrixCataloxAppId(): string;
8
+ //# sourceMappingURL=narrixCatalogCredentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrixCatalogCredentials.d.ts","sourceRoot":"","sources":["../../src/narrix/narrixCatalogCredentials.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,wBAAgB,6BAA6B,IAAI,OAAO,CAIvD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAQlD"}
@@ -0,0 +1,20 @@
1
+ /** True when Catalox/Firebase env is sufficient for {@link createCataloxFromEnv}. */
2
+ export function narrixCataloxCredentialsReady() {
3
+ const projectId = process.env.FIREBASE_PROJECT_ID?.trim();
4
+ const b64 = process.env.GOOGLE_SERVICE_ACCOUNT_BASE64?.trim();
5
+ return Boolean(projectId && b64);
6
+ }
7
+ /**
8
+ * Catalox app that owns Narrix native catalogs (`categories`, `processors`, …).
9
+ * Defaults to `CATALOX_APP_ID` (same as `@exellix/narrix-catalox` seed).
10
+ */
11
+ export function resolveNarrixCataloxAppId() {
12
+ const explicit = process.env.NARRIX_CATALOX_APP_ID?.trim();
13
+ if (explicit)
14
+ return explicit;
15
+ const appId = process.env.CATALOX_APP_ID?.trim();
16
+ if (appId)
17
+ return appId;
18
+ throw new Error("Narrix Catalox app id is required when loading catalog from Firestore. Set NARRIX_CATALOX_APP_ID or CATALOX_APP_ID.");
19
+ }
20
+ //# sourceMappingURL=narrixCatalogCredentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrixCatalogCredentials.js","sourceRoot":"","sources":["../../src/narrix/narrixCatalogCredentials.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,UAAU,6BAA6B;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IAC9D,OAAO,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,IAAI,KAAK,CACb,qHAAqH,CACtH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"narrixClient.d.ts","sourceRoot":"","sources":["../../src/narrix/narrixClient.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAuB3D,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAIF,wBAAgB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAqBvD"}
1
+ {"version":3,"file":"narrixClient.d.ts","sourceRoot":"","sources":["../../src/narrix/narrixClient.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAuB3D,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAIF,wBAAgB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAoBvD"}
@@ -1,5 +1,6 @@
1
1
  import { createIngest } from "@exellix/narrix-ingest";
2
- import { getNarrixRunnerModule } from "./narrixRunnerModule.js";
2
+ import { createNarrixRunnerFromBundle } from "./createNarrixRunnerFromBundle.js";
3
+ import { ensureNarrixCatalogBundle } from "./narrixCatalogBundleLoader.js";
3
4
  import { recordAdapter } from "@exellix/narrix-adapter-records";
4
5
  import { adapter as textAdapter } from "@exellix/narrix-adapter-text";
5
6
  import { toCni as chatToCni } from "@exellix/narrix-adapter-chat";
@@ -27,8 +28,8 @@ export function getNarrixClient() {
27
28
  if (!singleton) {
28
29
  singleton = (async () => {
29
30
  const ingest = createFullIngest();
30
- const { createRunner } = await getNarrixRunnerModule();
31
- const runner = await createRunner({
31
+ const bundle = await ensureNarrixCatalogBundle();
32
+ const runner = await createNarrixRunnerFromBundle(bundle, {
32
33
  runtime: {
33
34
  onProcessorNotMatched: "attachError",
34
35
  onMissingMapping: "attachError",
@@ -1 +1 @@
1
- {"version":3,"file":"narrixClient.js","sourceRoot":"","sources":["../../src/narrix/narrixClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAItE,MAAM,eAAe,GAAG,8BAA8B,CAAC;AACvD,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B,MAAM,YAAY,GAAmB;IACnC,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,YAAY;IACrB,KAAK,CAAC,KAAc,EAAE,OAAiB;QACrC,OAAO,SAAS,CAAC,KAAwC,EAAE,OAA0C,CAAC,CAAC;IACzG,CAAC;CACF,CAAC;AAEF,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,IAAI,SAAS,GAAiC,IAAI,CAAC;AAEnD,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAElC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,qBAAqB,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,OAAO,EAAE;oBACP,qBAAqB,EAAE,aAAa;oBACpC,gBAAgB,EAAE,aAAa;oBAC/B,iBAAiB,EAAE,IAAI;iBACxB;aACF,CAAC,CAAC;YAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"narrixClient.js","sourceRoot":"","sources":["../../src/narrix/narrixClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAItE,MAAM,eAAe,GAAG,8BAA8B,CAAC;AACvD,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B,MAAM,YAAY,GAAmB;IACnC,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,YAAY;IACrB,KAAK,CAAC,KAAc,EAAE,OAAiB;QACrC,OAAO,SAAS,CAAC,KAAwC,EAAE,OAA0C,CAAC,CAAC;IACzG,CAAC;CACF,CAAC;AAEF,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,IAAI,SAAS,GAAiC,IAAI,CAAC;AAEnD,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,MAAM,EAAE;gBACxD,OAAO,EAAE;oBACP,qBAAqB,EAAE,aAAa;oBACpC,gBAAgB,EAAE,aAAa;oBAC/B,iBAAiB,EAAE,IAAI;iBACxB;aACF,CAAC,CAAC;YAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForChat.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForChat.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQtE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAqD1B"}
1
+ {"version":3,"file":"runNarrixForChat.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForChat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQtE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
@@ -1,11 +1,13 @@
1
1
  import { getNarrixClient } from "./narrixClient.js";
2
2
  import { resolveDatasetIngestHints } from "./seedBundleRouting.js";
3
+ import { ensureNarrixCatalogBundle } from "./narrixCatalogBundleLoader.js";
3
4
  import { dispatchNarrixRunner } from "./runnerDispatch.js";
4
5
  function isIngestError(res) {
5
6
  return "error" in res && res.error === true;
6
7
  }
7
8
  export async function runNarrixForChat(input) {
8
9
  const { datasetId, thread } = input;
10
+ await ensureNarrixCatalogBundle();
9
11
  const hints = resolveDatasetIngestHints(datasetId);
10
12
  const { ingest, runner } = await getNarrixClient();
11
13
  const ingestRes = ingest.toCni({
@@ -29,7 +31,7 @@ export async function runNarrixForChat(input) {
29
31
  meta: { datasetId, packId: hints.packId, entityKind: hints.recordType },
30
32
  };
31
33
  }
32
- const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: {} });
34
+ const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId ?? hints.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: {} });
33
35
  return {
34
36
  ok: true,
35
37
  entity: runRes.entity,
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForChat.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,SAAS;aACV;SACF;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EACxE,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"runNarrixForChat.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,yBAAyB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,SAAS;aACV;SACF;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EAC5F,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForDocs.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForDocs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQtE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAoD1B"}
1
+ {"version":3,"file":"runNarrixForDocs.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForDocs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQtE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAqD1B"}
@@ -1,11 +1,13 @@
1
1
  import { getNarrixClient } from "./narrixClient.js";
2
2
  import { resolveDatasetIngestHints } from "./seedBundleRouting.js";
3
+ import { ensureNarrixCatalogBundle } from "./narrixCatalogBundleLoader.js";
3
4
  import { dispatchNarrixRunner } from "./runnerDispatch.js";
4
5
  function isIngestError(res) {
5
6
  return "error" in res && res.error === true;
6
7
  }
7
8
  export async function runNarrixForDocs(input) {
8
9
  const { datasetId, document } = input;
10
+ await ensureNarrixCatalogBundle();
9
11
  const hints = resolveDatasetIngestHints(datasetId);
10
12
  const { ingest, runner } = await getNarrixClient();
11
13
  const ingestRes = ingest.toCni({
@@ -28,7 +30,7 @@ export async function runNarrixForDocs(input) {
28
30
  meta: { datasetId, packId: hints.packId, entityKind: hints.recordType },
29
31
  };
30
32
  }
31
- const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: {} });
33
+ const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId ?? hints.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: {} });
32
34
  return {
33
35
  ok: true,
34
36
  entity: runRes.entity,
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForDocs.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForDocs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE;gBACV,IAAI,EAAE,KAAK;gBACX,SAAS;aACV;SACF;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EACxE,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"runNarrixForDocs.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForDocs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,yBAAyB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE;gBACV,IAAI,EAAE,KAAK;gBACX,SAAS;aACV;SACF;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EAC5F,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForRecord.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForRecord.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQxE,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAiD1B"}
1
+ {"version":3,"file":"runNarrixForRecord.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForRecord.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQxE,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkD1B"}
@@ -1,11 +1,13 @@
1
1
  import { getNarrixClient } from "./narrixClient.js";
2
2
  import { resolveDatasetIngestHints } from "./seedBundleRouting.js";
3
+ import { ensureNarrixCatalogBundle } from "./narrixCatalogBundleLoader.js";
3
4
  import { dispatchNarrixRunner } from "./runnerDispatch.js";
4
5
  function isIngestError(res) {
5
6
  return "error" in res && res.error === true;
6
7
  }
7
8
  export async function runNarrixForRecord(input) {
8
9
  const { datasetId, record } = input;
10
+ await ensureNarrixCatalogBundle();
9
11
  const hints = resolveDatasetIngestHints(datasetId);
10
12
  const recordType = input.recordType ?? hints.recordType;
11
13
  const { ingest, runner } = await getNarrixClient();
@@ -25,7 +27,7 @@ export async function runNarrixForRecord(input) {
25
27
  meta: { datasetId, packId: hints.packId, entityKind: recordType },
26
28
  };
27
29
  }
28
- const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: input.sourceMeta ?? {} });
30
+ const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId ?? hints.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: input.sourceMeta ?? {} });
29
31
  return {
30
32
  ok: true,
31
33
  entity: runRes.entity,
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForRecord.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA2B;IAE3B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,SAAS;QACf,KAAK,EAAE;YACL,MAAM;YACN,UAAU;YACV,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;SAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EACxE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CACvC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"runNarrixForRecord.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA2B;IAE3B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,yBAAyB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,SAAS;QACf,KAAK,EAAE;YACL,MAAM;YACN,UAAU;YACV,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;SAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EAC5F,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CACvC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForText.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForText.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQtE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAmD1B"}
1
+ {"version":3,"file":"runNarrixForText.d.ts","sourceRoot":"","sources":["../../src/narrix/runNarrixForText.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQtE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAoD1B"}
@@ -1,11 +1,13 @@
1
1
  import { getNarrixClient } from "./narrixClient.js";
2
2
  import { resolveDatasetIngestHints } from "./seedBundleRouting.js";
3
+ import { ensureNarrixCatalogBundle } from "./narrixCatalogBundleLoader.js";
3
4
  import { dispatchNarrixRunner } from "./runnerDispatch.js";
4
5
  function isIngestError(res) {
5
6
  return "error" in res && res.error === true;
6
7
  }
7
8
  export async function runNarrixForText(input) {
8
9
  const { datasetId, text, meta } = input;
10
+ await ensureNarrixCatalogBundle();
9
11
  const hints = resolveDatasetIngestHints(datasetId);
10
12
  const { ingest, runner } = await getNarrixClient();
11
13
  const ingestRes = ingest.toCni({
@@ -27,7 +29,7 @@ export async function runNarrixForText(input) {
27
29
  meta: { datasetId, packId: hints.packId, entityKind: hints.recordType },
28
30
  };
29
31
  }
30
- const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: {} });
32
+ const runRes = await dispatchNarrixRunner(runner, datasetId, ingestRes.cni, { questionId: input.questionId ?? hints.questionId, narrativeTypeId: input.narrativeTypeId }, { sourceMeta: {} });
31
33
  return {
32
34
  ok: true,
33
35
  entity: runRes.entity,
@@ -1 +1 @@
1
- {"version":3,"file":"runNarrixForText.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,IAAI;YACJ,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,SAAS;aACV;YACD,IAAI;SACL;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EACxE,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"runNarrixForText.js","sourceRoot":"","sources":["../../src/narrix/runNarrixForText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,SAAS,aAAa,CACpB,GAAwE;IAExE,OAAO,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACxC,MAAM,yBAAyB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,IAAI;YACJ,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,SAAS;aACV;YACD,IAAI;SACL;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,MAAM,EACN,SAAS,EACT,SAAS,CAAC,GAAG,EACb,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EAC5F,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE;YACJ,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runnerDispatch.d.ts","sourceRoot":"","sources":["../../src/narrix/runnerDispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIvE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,YAAY,CAAC,CAevB"}
1
+ {"version":3,"file":"runnerDispatch.d.ts","sourceRoot":"","sources":["../../src/narrix/runnerDispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIvE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
@@ -1,5 +1,5 @@
1
1
  import { getNarrixRunnerModule } from "./narrixRunnerModule.js";
2
- import { getNarrixCatalogBundle, pickQuestionIdForDataset } from "./seedBundleRouting.js";
2
+ import { ensureNarrixCatalogBundle, getNarrixCatalogBundle, pickQuestionIdForDataset } from "./seedBundleRouting.js";
3
3
  /**
4
4
  * Prefer explicit narrativeTypeId; else questionId; else first catalog question for datasetId.
5
5
  */
@@ -9,6 +9,7 @@ export async function dispatchNarrixRunner(runner, datasetId, cni, routing, runO
9
9
  if (routing.narrativeTypeId && !routing.questionId) {
10
10
  return runner.runByNarrative(routing.narrativeTypeId, cni, opts);
11
11
  }
12
+ await ensureNarrixCatalogBundle();
12
13
  const bundle = getNarrixCatalogBundle();
13
14
  const qid = routing.questionId ?? pickQuestionIdForDataset(datasetId, bundle);
14
15
  if (!qid) {
@@ -1 +1 @@
1
- {"version":3,"file":"runnerDispatch.js","sourceRoot":"","sources":["../../src/narrix/runnerDispatch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAO1F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAoB,EACpB,SAAiB,EACjB,GAAW,EACX,OAA2B,EAC3B,OAAoB;IAEpB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,WAAW,CACnB,uBAAuB,EACvB,gDAAgD,SAAS,wCAAwC,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"runnerDispatch.js","sourceRoot":"","sources":["../../src/narrix/runnerDispatch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAOrH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAoB,EACpB,SAAiB,EACjB,GAAW,EACX,OAA2B,EAC3B,OAAoB;IAEpB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,yBAAyB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,WAAW,CACnB,uBAAuB,EACvB,gDAAgD,SAAS,wCAAwC,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -1,13 +1,23 @@
1
1
  import type { CataloxSeedBundle } from "@exellix/narrix-catalox";
2
- import type { RoleMap } from "@exellix/narrix-adapters-core";
3
- export declare function getNarrixCatalogBundle(): CataloxSeedBundle;
2
+ export { ensureNarrixCatalogBundle, getNarrixCatalogBundleSync as getNarrixCatalogBundle, isNarrixCatalogSourceAvailable, narrixArchivePresent, resetNarrixCatalogBundleCache, } from "./narrixCatalogBundleLoader.js";
3
+ export { narrixCataloxCredentialsReady, resolveNarrixCataloxAppId } from "./narrixCatalogCredentials.js";
4
+ export { loadNarrixBundleFromCatalox } from "./loadNarrixBundleFromCatalox.js";
4
5
  /**
5
6
  * First question id (lexicographic) that the catalog marks as supported for this datasetId.
7
+ * Also checks processor `route.datasetIds` aliases (e.g. `runtime-db.*` → `network.vuln.instances`).
6
8
  */
7
9
  export declare function pickQuestionIdForDataset(datasetId: string, bundle?: CataloxSeedBundle): string | undefined;
10
+ /**
11
+ * Dataset ids that have both a processor and a catalog question mapping (runnable end-to-end).
12
+ */
13
+ export declare function listRunnableNarrixDatasetIds(bundle?: CataloxSeedBundle): string[];
14
+ export declare function pickRunnableNarrixDataset(preferredDatasetIds?: string[], bundle?: CataloxSeedBundle): {
15
+ datasetId: string;
16
+ questionId: string;
17
+ };
8
18
  export type DatasetIngestHints = {
9
19
  recordType: string;
10
- roleMap?: RoleMap;
20
+ roleMap?: import("@exellix/narrix-adapters-core").RoleMap;
11
21
  packId: string;
12
22
  questionId?: string;
13
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"seedBundleRouting.d.ts","sourceRoot":"","sources":["../../src/narrix/seedBundleRouting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AASjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAI7D,wBAAgB,sBAAsB,IAAI,iBAAiB,CAK1D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,iBAA4C,GACnD,MAAM,GAAG,SAAS,CAYpB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,iBAA4C,GACnD,kBAAkB,CAgBpB"}
1
+ {"version":3,"file":"seedBundleRouting.d.ts","sourceRoot":"","sources":["../../src/narrix/seedBundleRouting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAYjE,OAAO,EACL,yBAAyB,EACzB,0BAA0B,IAAI,sBAAsB,EACpD,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACzG,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAsB/E;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,iBAAgD,GACvD,MAAM,GAAG,SAAS,CAkBpB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,GAAE,iBAAgD,GACvD,MAAM,EAAE,CASV;AAED,wBAAgB,yBAAyB,CACvC,mBAAmB,GAAE,MAAM,EAAO,EAClC,MAAM,GAAE,iBAAgD,GACvD;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAc3C;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,+BAA+B,EAAE,OAAO,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,iBAAgD,GACvD,kBAAkB,CAgBpB"}
@@ -1,16 +1,13 @@
1
- import { getSeedBundle, narrixArchiveManifest, findProcessorByDatasetId, getRecordSchemaByDatasetId, } from "@exellix/narrix-catalox";
1
+ import { findProcessorByDatasetId, getRecordSchemaByDatasetId, } from "@exellix/narrix-catalox";
2
2
  import { schemaToRoleMap } from "@exellix/narrix-adapter-records";
3
- let cachedBundle = null;
4
- export function getNarrixCatalogBundle() {
5
- if (!cachedBundle) {
6
- cachedBundle = getSeedBundle(narrixArchiveManifest());
7
- }
8
- return cachedBundle;
9
- }
3
+ import { getNarrixCatalogBundleSync, } from "./narrixCatalogBundleLoader.js";
4
+ export { ensureNarrixCatalogBundle, getNarrixCatalogBundleSync as getNarrixCatalogBundle, isNarrixCatalogSourceAvailable, narrixArchivePresent, resetNarrixCatalogBundleCache, } from "./narrixCatalogBundleLoader.js";
5
+ export { narrixCataloxCredentialsReady, resolveNarrixCataloxAppId } from "./narrixCatalogCredentials.js";
6
+ export { loadNarrixBundleFromCatalox } from "./loadNarrixBundleFromCatalox.js";
10
7
  /**
11
- * First question id (lexicographic) that the catalog marks as supported for this datasetId.
8
+ * First question id (lexicographic) for an exact datasetId key in use-case capabilities.
12
9
  */
13
- export function pickQuestionIdForDataset(datasetId, bundle = getNarrixCatalogBundle()) {
10
+ function pickQuestionIdForExactDatasetId(datasetId, bundle) {
14
11
  const hits = [];
15
12
  for (const uc of bundle.catalogs.useCases) {
16
13
  const caps = uc.datasetCapabilities;
@@ -26,7 +23,60 @@ export function pickQuestionIdForDataset(datasetId, bundle = getNarrixCatalogBun
26
23
  return undefined;
27
24
  return [...new Set(hits)].sort((a, b) => a.localeCompare(b))[0];
28
25
  }
29
- export function resolveDatasetIngestHints(datasetId, bundle = getNarrixCatalogBundle()) {
26
+ /**
27
+ * First question id (lexicographic) that the catalog marks as supported for this datasetId.
28
+ * Also checks processor `route.datasetIds` aliases (e.g. `runtime-db.*` → `network.vuln.instances`).
29
+ */
30
+ export function pickQuestionIdForDataset(datasetId, bundle = getNarrixCatalogBundleSync()) {
31
+ const candidateIds = new Set([datasetId]);
32
+ const proc = findProcessorByDatasetId(datasetId, bundle);
33
+ const route = proc?.route;
34
+ const routeIds = route?.datasetIds;
35
+ if (Array.isArray(routeIds)) {
36
+ for (const id of routeIds) {
37
+ if (typeof id === "string" && id.trim())
38
+ candidateIds.add(id);
39
+ }
40
+ }
41
+ const hits = [];
42
+ for (const id of candidateIds) {
43
+ const qid = pickQuestionIdForExactDatasetId(id, bundle);
44
+ if (qid)
45
+ hits.push(qid);
46
+ }
47
+ if (hits.length === 0)
48
+ return undefined;
49
+ return [...new Set(hits)].sort((a, b) => a.localeCompare(b))[0];
50
+ }
51
+ /**
52
+ * Dataset ids that have both a processor and a catalog question mapping (runnable end-to-end).
53
+ */
54
+ export function listRunnableNarrixDatasetIds(bundle = getNarrixCatalogBundleSync()) {
55
+ const ids = [];
56
+ for (const rp of bundle.catalogs.recordProperties) {
57
+ const datasetId = rp.datasetId;
58
+ if (!findProcessorByDatasetId(datasetId, bundle))
59
+ continue;
60
+ if (!pickQuestionIdForDataset(datasetId, bundle))
61
+ continue;
62
+ ids.push(datasetId);
63
+ }
64
+ return [...new Set(ids)].sort((a, b) => a.localeCompare(b));
65
+ }
66
+ export function pickRunnableNarrixDataset(preferredDatasetIds = [], bundle = getNarrixCatalogBundleSync()) {
67
+ const runnable = listRunnableNarrixDatasetIds(bundle);
68
+ if (runnable.length === 0) {
69
+ throw new Error("No runnable Narrix datasets in loaded catalog (need record-properties + processor + use-case question). " +
70
+ "Seed `@exellix/narrix-catalox` into CATALOX_APP_ID or populate `.archive/packages`.");
71
+ }
72
+ const datasetId = preferredDatasetIds.find((id) => runnable.includes(id)) ?? runnable[0];
73
+ const questionId = pickQuestionIdForDataset(datasetId, bundle);
74
+ if (!questionId) {
75
+ throw new Error(`Narrix: internal error — dataset "${datasetId}" listed as runnable but has no questionId`);
76
+ }
77
+ return { datasetId, questionId };
78
+ }
79
+ export function resolveDatasetIngestHints(datasetId, bundle = getNarrixCatalogBundleSync()) {
30
80
  const proc = findProcessorByDatasetId(datasetId, bundle);
31
81
  if (!proc) {
32
82
  throw new Error(`Narrix: no processor for datasetId "${datasetId}"`);