@x12i/memorix-client-api 0.0.0-stage → 0.16.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 (108) hide show
  1. package/HANDOVER.md +97 -0
  2. package/dist/app.d.ts +64 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +412 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/authix.d.ts +9 -0
  7. package/dist/authix.d.ts.map +1 -0
  8. package/dist/authix.js +26 -0
  9. package/dist/authix.js.map +1 -0
  10. package/dist/catalog.d.ts +160 -0
  11. package/dist/catalog.d.ts.map +1 -0
  12. package/dist/catalog.js +371 -0
  13. package/dist/catalog.js.map +1 -0
  14. package/dist/cli.d.ts +2 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +102 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config.d.ts +33 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +109 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/derived.d.ts +2 -0
  23. package/dist/derived.d.ts.map +1 -0
  24. package/dist/derived.js +35 -0
  25. package/dist/derived.js.map +1 -0
  26. package/dist/errors.d.ts +11 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +21 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/fetch.d.ts +17 -0
  31. package/dist/fetch.d.ts.map +1 -0
  32. package/dist/fetch.js +741 -0
  33. package/dist/fetch.js.map +1 -0
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +4 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/live-ops-nav.d.ts +2 -0
  39. package/dist/live-ops-nav.d.ts.map +1 -0
  40. package/dist/live-ops-nav.js +42 -0
  41. package/dist/live-ops-nav.js.map +1 -0
  42. package/dist/live.d.ts +20 -0
  43. package/dist/live.d.ts.map +1 -0
  44. package/dist/live.js +8 -0
  45. package/dist/live.js.map +1 -0
  46. package/dist/markdown.d.ts +19 -0
  47. package/dist/markdown.d.ts.map +1 -0
  48. package/dist/markdown.js +102 -0
  49. package/dist/markdown.js.map +1 -0
  50. package/dist/peers.d.ts +51 -0
  51. package/dist/peers.d.ts.map +1 -0
  52. package/dist/peers.js +127 -0
  53. package/dist/peers.js.map +1 -0
  54. package/dist/processed.d.ts +22 -0
  55. package/dist/processed.d.ts.map +1 -0
  56. package/dist/processed.js +397 -0
  57. package/dist/processed.js.map +1 -0
  58. package/dist/project.d.ts +25 -0
  59. package/dist/project.d.ts.map +1 -0
  60. package/dist/project.js +76 -0
  61. package/dist/project.js.map +1 -0
  62. package/dist/reads-live-routes.d.ts +4 -0
  63. package/dist/reads-live-routes.d.ts.map +1 -0
  64. package/dist/reads-live-routes.js +56 -0
  65. package/dist/reads-live-routes.js.map +1 -0
  66. package/dist/reads-live-ui.d.ts +3 -0
  67. package/dist/reads-live-ui.d.ts.map +1 -0
  68. package/dist/reads-live-ui.js +204 -0
  69. package/dist/reads-live-ui.js.map +1 -0
  70. package/dist/reads-ring.d.ts +29 -0
  71. package/dist/reads-ring.d.ts.map +1 -0
  72. package/dist/reads-ring.js +44 -0
  73. package/dist/reads-ring.js.map +1 -0
  74. package/dist/refs.d.ts +24 -0
  75. package/dist/refs.d.ts.map +1 -0
  76. package/dist/refs.js +354 -0
  77. package/dist/refs.js.map +1 -0
  78. package/dist/request-countex.d.ts +53 -0
  79. package/dist/request-countex.d.ts.map +1 -0
  80. package/dist/request-countex.js +171 -0
  81. package/dist/request-countex.js.map +1 -0
  82. package/dist/scope.d.ts +13 -0
  83. package/dist/scope.d.ts.map +1 -0
  84. package/dist/scope.js +46 -0
  85. package/dist/scope.js.map +1 -0
  86. package/dist/scoper.d.ts +75 -0
  87. package/dist/scoper.d.ts.map +1 -0
  88. package/dist/scoper.js +475 -0
  89. package/dist/scoper.js.map +1 -0
  90. package/dist/shaped-refs.d.ts +23 -0
  91. package/dist/shaped-refs.d.ts.map +1 -0
  92. package/dist/shaped-refs.js +395 -0
  93. package/dist/shaped-refs.js.map +1 -0
  94. package/dist/skills.d.ts +102 -0
  95. package/dist/skills.d.ts.map +1 -0
  96. package/dist/skills.js +609 -0
  97. package/dist/skills.js.map +1 -0
  98. package/dist/story.d.ts +43 -0
  99. package/dist/story.d.ts.map +1 -0
  100. package/dist/story.js +121 -0
  101. package/dist/story.js.map +1 -0
  102. package/dist/upstream.d.ts +13 -0
  103. package/dist/upstream.d.ts.map +1 -0
  104. package/dist/upstream.js +58 -0
  105. package/dist/upstream.js.map +1 -0
  106. package/openapi/openapi.json +480 -0
  107. package/package.json +60 -6
  108. package/README.md +0 -3
package/dist/cli.js ADDED
@@ -0,0 +1,102 @@
1
+ import { resolve } from "node:path";
2
+ import { createAuthixOrgResolver } from "./authix.js";
3
+ import { createClientApi } from "./app.js";
4
+ import { loadEnvFiles, resolveApiHost, resolveApiPort, resolveAuthMode, resolveMgcMcpUrl, resolveMemorixServiceUrl, resolveOptionalUrl, resolvePeerMode, resolveScoperFunctionsDir, resolveScoperReasoner, } from "./config.js";
5
+ import { DEFAULT_SKILL_API_URL, SCOPER_CONTRACT_VERSION, SKILLS_CONTRACT_VERSION, probeScoper, probeSkillApi, selectPeer, } from "./peers.js";
6
+ loadEnvFiles([resolve(process.cwd(), ".env"), resolve(process.cwd(), "../.env")]);
7
+ let memorixUrl;
8
+ let port;
9
+ let host;
10
+ let authMode;
11
+ let mgcMcpUrl;
12
+ let scoperReasoner;
13
+ let scoperFunctionsDir;
14
+ try {
15
+ memorixUrl = resolveMemorixServiceUrl();
16
+ port = resolveApiPort();
17
+ host = resolveApiHost();
18
+ authMode = resolveAuthMode();
19
+ mgcMcpUrl = resolveMgcMcpUrl();
20
+ scoperReasoner = resolveScoperReasoner();
21
+ scoperFunctionsDir = resolveScoperFunctionsDir();
22
+ }
23
+ catch (err) {
24
+ console.error(err instanceof Error ? err.message : String(err));
25
+ process.exit(1);
26
+ }
27
+ let auth;
28
+ try {
29
+ auth =
30
+ authMode === "authix"
31
+ ? { mode: "authix", verify: await createAuthixOrgResolver() }
32
+ : { mode: "header" };
33
+ }
34
+ catch (err) {
35
+ console.error(err instanceof Error ? err.message : String(err));
36
+ process.exit(1);
37
+ }
38
+ let skillsPeer;
39
+ let scoperPeer;
40
+ try {
41
+ skillsPeer = await selectPeer({
42
+ kind: "skills",
43
+ mode: resolvePeerMode(process.env.SKILLS_MODE, "SKILLS_MODE"),
44
+ url: resolveOptionalUrl(process.env.SKILL_API_URL),
45
+ autoUrl: DEFAULT_SKILL_API_URL,
46
+ probe: probeSkillApi,
47
+ embedded: { source: "@x12i/memorix-client-api", version: SKILLS_CONTRACT_VERSION },
48
+ externalSource: "skill-api",
49
+ });
50
+ scoperPeer = await selectPeer({
51
+ kind: "scoper",
52
+ mode: resolvePeerMode(process.env.SCOPER_MODE, "SCOPER_MODE"),
53
+ url: resolveOptionalUrl(process.env.SCOPER_URL),
54
+ probe: probeScoper,
55
+ embedded: { source: "@x12i/memorix-scoper", version: SCOPER_CONTRACT_VERSION },
56
+ externalSource: "scoper",
57
+ });
58
+ }
59
+ catch (err) {
60
+ console.error(err instanceof Error ? err.message : String(err));
61
+ process.exit(1);
62
+ }
63
+ const contentAgentIds = (process.env.MEMORIX_AGENT_IDS ?? process.env.PROCESS_AGENT_ID ?? "")
64
+ .split(",")
65
+ .map((id) => id.trim())
66
+ .filter(Boolean);
67
+ const mongoUri = process.env.ASSISTANT_MONGO_URI?.trim() || process.env.MONGO_URI?.trim() || undefined;
68
+ const app = await createClientApi({
69
+ memorixUrl,
70
+ auth,
71
+ port,
72
+ mgcMcpUrl,
73
+ scoper: {
74
+ reasoner: scoperReasoner,
75
+ functionsDir: scoperPeer.mode === "embedded" ? scoperFunctionsDir : undefined,
76
+ functionsPackage: process.env.SCOPER_FUNCTIONS_PACKAGE,
77
+ learnFunctions: process.env.SCOPER_FUNCTIONS_LEARN?.trim() === "true",
78
+ peer: scoperPeer,
79
+ },
80
+ skills: {
81
+ peer: skillsPeer,
82
+ packDir: process.env.SKILLS_PACK_DIR,
83
+ agentsDir: process.env.AGENTS_DIR,
84
+ contentAgentIds,
85
+ mongoUri: skillsPeer.mode === "embedded" ? mongoUri : undefined,
86
+ },
87
+ });
88
+ await app.listen({ port: app.port, host });
89
+ const displayHost = host === "0.0.0.0" || host === "::" ? "127.0.0.1" : host;
90
+ const origin = `http://${displayHost}:${app.port}/`;
91
+ console.log(`[memorix-client-api] listening ${origin}`);
92
+ console.log(`[memorix-client-api] health ${origin}health`);
93
+ console.log(`[memorix-client-api] live ${origin}_live`);
94
+ console.log(`[memorix-client-api] docs ${origin}api/openapi.json`);
95
+ console.log(`[memorix-client-api] reads ${origin}_live/reads`);
96
+ console.log(`[memorix-client-api] memorix ${memorixUrl}`);
97
+ console.log(`[memorix-client-api] nexum ${memorixUrl}/mcp/nexum`);
98
+ console.log(`[memorix-client-api] mgc ${mgcMcpUrl ?? "discover from /api/connectors"}`);
99
+ console.log(`[memorix-client-api] skills ${skillsPeer.mode} ${skillsPeer.source}${skillsPeer.baseUrl ? ` ${skillsPeer.baseUrl}` : ""}`);
100
+ console.log(`[memorix-client-api] scoper ${scoperPeer.mode} @x12i/memorix-scoper@${scoperPeer.version} ${scoperReasoner}${scoperPeer.mode === "embedded" && scoperFunctionsDir ? ` functions ${scoperFunctionsDir}` : ""}${scoperPeer.baseUrl ? ` ${scoperPeer.baseUrl}` : ""}`);
101
+ console.log(`[memorix-client-api] auth ${auth.mode}`);
102
+ //# 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,33 @@
1
+ export declare const DEFAULT_MEMORIX_SERVICE_HOST = "127.0.0.1";
2
+ export declare const DEFAULT_MEMORIX_SERVICE_PORT = 5100;
3
+ export declare const DEFAULT_API_PORT = 5120;
4
+ export declare const DEFAULT_API_HOST = "0.0.0.0";
5
+ export type AuthMode = "header" | "authix";
6
+ /** `auto` probes a peer and hosts locally when that peer is absent. */
7
+ export type PeerMode = "auto" | "external" | "embedded";
8
+ type Env = Record<string, string | undefined>;
9
+ /** Memorix host. A full URL wins. Otherwise host and port default to localhost:5100. */
10
+ export declare function resolveMemorixServiceUrl(env?: Env): string;
11
+ /** Port this process listens on. Default 5120. */
12
+ export declare function resolveApiPort(env?: Env): number;
13
+ export declare function resolveApiHost(env?: Env): string;
14
+ /**
15
+ * MGC MCP endpoint.
16
+ * `MGC_MCP_URL` wins. Otherwise `MGC_SOURCE_SERVICE_URL` (or `MGC_URL`) with `/mcp` appended.
17
+ * `undefined` means discover `genericConnectors.mcpUrl` from Memorix.
18
+ */
19
+ export declare function resolveMgcMcpUrl(env?: Env): string | null | undefined;
20
+ export type ScoperReasonerKind = "scripted" | "ai-dispatcher";
21
+ /** Explicit `scripted` stays scripted. An unset reasoner plus an OpenRouter key selects the model. */
22
+ export declare function resolveScoperReasoner(env?: Env): ScoperReasonerKind;
23
+ /** Directory of saved query and scope functions. Unset means the reasoner answers alone. */
24
+ export declare function resolveScoperFunctionsDir(env?: Env): string | undefined;
25
+ /** `auto` probes. `external` requires a healthy peer. `embedded` does not probe. */
26
+ export declare function resolvePeerMode(raw: string | undefined, name: string): PeerMode;
27
+ /** Trimmed URL without a trailing slash. Empty is unset. */
28
+ export declare function resolveOptionalUrl(raw: string | undefined): string | undefined;
29
+ /** `header` takes the org from the request. `authix` takes it from the bearer token. */
30
+ export declare function resolveAuthMode(env?: Env): AuthMode;
31
+ export declare function loadEnvFiles(paths: string[], env?: Env): void;
32
+ export {};
33
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3C,uEAAuE;AACvE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAExD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAY9C,wFAAwF;AACxF,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,CAQvE;AAED,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,CAE7D;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAOlF;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,eAAe,CAAC;AAE9D,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,GAAiB,GAAG,kBAAkB,CAMhF;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,GAAG,SAAS,CAGpF;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAK/E;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,GAAE,GAAiB,GAAG,QAAQ,CAKhE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,GAAiB,GAAG,IAAI,CAmB1E"}
package/dist/config.js ADDED
@@ -0,0 +1,109 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ export const DEFAULT_MEMORIX_SERVICE_HOST = "127.0.0.1";
3
+ export const DEFAULT_MEMORIX_SERVICE_PORT = 5100;
4
+ export const DEFAULT_API_PORT = 5120;
5
+ export const DEFAULT_API_HOST = "0.0.0.0";
6
+ function portOf(raw, fallback, name) {
7
+ const trimmed = raw?.trim();
8
+ if (!trimmed)
9
+ return fallback;
10
+ const port = Number(trimmed);
11
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
12
+ throw new Error(`${name} must be an integer from 1 to 65535`);
13
+ }
14
+ return port;
15
+ }
16
+ /** Memorix host. A full URL wins. Otherwise host and port default to localhost:5100. */
17
+ export function resolveMemorixServiceUrl(env = process.env) {
18
+ const explicit = env.MEMORIX_SERVICE_URL?.trim() || env.MEMORIX_URL?.trim();
19
+ if (explicit)
20
+ return explicit.replace(/\/+$/, "");
21
+ const rawHost = env.MEMORIX_SERVICE_HOST?.trim() || DEFAULT_MEMORIX_SERVICE_HOST;
22
+ const host = rawHost === "0.0.0.0" || rawHost === "::" ? DEFAULT_MEMORIX_SERVICE_HOST : rawHost;
23
+ const port = portOf(env.MEMORIX_SERVICE_PORT, DEFAULT_MEMORIX_SERVICE_PORT, "MEMORIX_SERVICE_PORT");
24
+ return `http://${host}:${port}`;
25
+ }
26
+ /** Port this process listens on. Default 5120. */
27
+ export function resolveApiPort(env = process.env) {
28
+ return portOf(env.MEMORIX_CLIENT_API_PORT, DEFAULT_API_PORT, "MEMORIX_CLIENT_API_PORT");
29
+ }
30
+ export function resolveApiHost(env = process.env) {
31
+ return env.HOST?.trim() || DEFAULT_API_HOST;
32
+ }
33
+ /**
34
+ * MGC MCP endpoint.
35
+ * `MGC_MCP_URL` wins. Otherwise `MGC_SOURCE_SERVICE_URL` (or `MGC_URL`) with `/mcp` appended.
36
+ * `undefined` means discover `genericConnectors.mcpUrl` from Memorix.
37
+ */
38
+ export function resolveMgcMcpUrl(env = process.env) {
39
+ const explicit = env.MGC_MCP_URL?.trim();
40
+ if (explicit)
41
+ return explicit.replace(/\/+$/, "");
42
+ const source = env.MGC_SOURCE_SERVICE_URL?.trim() || env.MGC_URL?.trim();
43
+ if (!source)
44
+ return undefined;
45
+ const base = source.replace(/\/+$/, "");
46
+ return base.endsWith("/mcp") ? base : `${base}/mcp`;
47
+ }
48
+ /** Explicit `scripted` stays scripted. An unset reasoner plus an OpenRouter key selects the model. */
49
+ export function resolveScoperReasoner(env = process.env) {
50
+ const explicit = env.SCOPER_REASONER?.trim();
51
+ if (explicit === "scripted" || explicit === "ai-dispatcher")
52
+ return explicit;
53
+ if (explicit)
54
+ throw new Error('SCOPER_REASONER must be "scripted" or "ai-dispatcher"');
55
+ if (env.OPENROUTER_API_KEY?.trim())
56
+ return "ai-dispatcher";
57
+ return "scripted";
58
+ }
59
+ /** Directory of saved query and scope functions. Unset means the reasoner answers alone. */
60
+ export function resolveScoperFunctionsDir(env = process.env) {
61
+ const dir = env.SCOPER_FUNCTIONS_DIR?.trim();
62
+ return dir || undefined;
63
+ }
64
+ /** `auto` probes. `external` requires a healthy peer. `embedded` does not probe. */
65
+ export function resolvePeerMode(raw, name) {
66
+ const value = raw?.trim().toLowerCase();
67
+ if (!value || value === "auto")
68
+ return "auto";
69
+ if (value === "external" || value === "embedded")
70
+ return value;
71
+ throw new Error(`${name} must be "auto", "external", or "embedded"`);
72
+ }
73
+ /** Trimmed URL without a trailing slash. Empty is unset. */
74
+ export function resolveOptionalUrl(raw) {
75
+ const trimmed = raw?.trim().replace(/\/+$/, "");
76
+ return trimmed || undefined;
77
+ }
78
+ /** `header` takes the org from the request. `authix` takes it from the bearer token. */
79
+ export function resolveAuthMode(env = process.env) {
80
+ const raw = env.MEMORIX_AUTH?.trim().toLowerCase();
81
+ if (!raw || raw === "header" || raw === "off" || raw === "none")
82
+ return "header";
83
+ if (raw === "authix")
84
+ return "authix";
85
+ throw new Error('MEMORIX_AUTH must be "header" or "authix"');
86
+ }
87
+ export function loadEnvFiles(paths, env = process.env) {
88
+ for (const file of paths) {
89
+ if (!existsSync(file))
90
+ continue;
91
+ for (const line of readFileSync(file, "utf8").split(/\r?\n/)) {
92
+ const trimmed = line.trim();
93
+ if (!trimmed || trimmed.startsWith("#"))
94
+ continue;
95
+ const eq = trimmed.indexOf("=");
96
+ if (eq <= 0)
97
+ continue;
98
+ const key = trimmed.slice(0, eq).trim();
99
+ let value = trimmed.slice(eq + 1).trim();
100
+ if ((value.startsWith('"') && value.endsWith('"')) ||
101
+ (value.startsWith("'") && value.endsWith("'"))) {
102
+ value = value.slice(1, -1);
103
+ }
104
+ if (env[key] === undefined)
105
+ env[key] = value;
106
+ }
107
+ }
108
+ }
109
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function contentTypeIsDerived(id: string, explicit?: boolean): boolean;
2
+ //# sourceMappingURL=derived.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"AA0BA,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAK5E"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Processing-result content types. A stored row of one of these belongs to
3
+ * that record. Source content does not. Any object type in the catalog may
4
+ * declare them. Metadata `derived: true` or `derived: false` on a content
5
+ * type wins over this list.
6
+ */
7
+ const PROCESSING_RESULT_CONTENT_TYPES = new Set([
8
+ "overview",
9
+ "analysis",
10
+ "analysis-refined",
11
+ "analysis-enriched",
12
+ "analysis-closure",
13
+ "analysis-repair",
14
+ "analysis-deepened",
15
+ "analysis-mechanism-gap",
16
+ "analysis-corrected",
17
+ "triage",
18
+ "triage-model",
19
+ "triage-reassessment",
20
+ "predicted-attack",
21
+ "mitigation",
22
+ "observation",
23
+ "estate-analytics",
24
+ "process-manifest",
25
+ ]);
26
+ export function contentTypeIsDerived(id, explicit) {
27
+ if (id === "relationships")
28
+ return false;
29
+ if (explicit === true)
30
+ return true;
31
+ if (explicit === false)
32
+ return false;
33
+ return PROCESSING_RESULT_CONTENT_TYPES.has(id);
34
+ }
35
+ //# sourceMappingURL=derived.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived.js","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAC;IAC9C,UAAU;IACV,UAAU;IACV,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,oBAAoB;IACpB,QAAQ;IACR,cAAc;IACd,qBAAqB;IACrB,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,QAAkB;IACjE,IAAI,EAAE,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,+BAA+B,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare class ApiError extends Error {
2
+ readonly statusCode: number;
3
+ readonly code: string;
4
+ constructor(statusCode: number, code: string, message: string);
5
+ }
6
+ export declare class UpstreamError extends Error {
7
+ readonly statusCode: number;
8
+ readonly body: unknown;
9
+ constructor(statusCode: number, body: unknown);
10
+ }
11
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM9D;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEX,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAM9C"}
package/dist/errors.js ADDED
@@ -0,0 +1,21 @@
1
+ export class ApiError extends Error {
2
+ statusCode;
3
+ code;
4
+ constructor(statusCode, code, message) {
5
+ super(message);
6
+ this.name = "ApiError";
7
+ this.statusCode = statusCode;
8
+ this.code = code;
9
+ }
10
+ }
11
+ export class UpstreamError extends Error {
12
+ statusCode;
13
+ body;
14
+ constructor(statusCode, body) {
15
+ super(`Memorix responded ${statusCode}`);
16
+ this.name = "UpstreamError";
17
+ this.statusCode = statusCode;
18
+ this.body = body;
19
+ }
20
+ }
21
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,UAAU,CAAS;IACnB,IAAI,CAAS;IAEtB,YAAY,UAAkB,EAAE,IAAY,EAAE,OAAe;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,UAAU,CAAS;IACnB,IAAI,CAAU;IAEvB,YAAY,UAAkB,EAAE,IAAa;QAC3C,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { FastifyInstance, FastifyRequest } from "fastify";
2
+ import { type ObjectTypeView } from "./catalog.js";
3
+ import { type ClientScope } from "./scope.js";
4
+ import { type Upstream } from "./upstream.js";
5
+ /** Read-only Nexum tools served by memorix-service `POST /mcp/nexum`. */
6
+ export declare const NEXUM_MCP_TOOLS: readonly ["nexum_list_snapshots", "nexum_get_snapshot", "nexum_get_connected_content", "nexum_knowledge_status", "nexum_list_entities", "nexum_get_entity", "nexum_query"];
7
+ export type FetchRouteOptions = {
8
+ upstream: Upstream;
9
+ memorixUrl: string;
10
+ fetchImpl: typeof fetch;
11
+ scopeFor: (req: FastifyRequest) => Promise<ClientScope>;
12
+ loadCatalog: (upstream: Upstream, scope: ClientScope) => Promise<ObjectTypeView[]>;
13
+ /** MGC MCP URL. `null` disables the proxy. `undefined` discovers it from `GET /api/connectors`. */
14
+ mgcMcpUrl?: string | null;
15
+ };
16
+ export declare function registerFetchRoutes(app: FastifyInstance, options: FetchRouteOptions): void;
17
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAUpF,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,yEAAyE;AACzE,eAAO,MAAM,eAAe,4KAQlB,CAAC;AA2BX,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACnF,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CA2Y1F"}