@x12i/memorix-service 3.0.6 → 3.2.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 (178) hide show
  1. package/README.md +8 -1
  2. package/dist/ai-services/associate-prep.d.ts +37 -0
  3. package/dist/ai-services/associate-prep.d.ts.map +1 -0
  4. package/dist/ai-services/associate-prep.js +208 -0
  5. package/dist/ai-services/associate-prep.js.map +1 -0
  6. package/dist/ai-services/chunk-markdown.d.ts +22 -0
  7. package/dist/ai-services/chunk-markdown.d.ts.map +1 -0
  8. package/dist/ai-services/chunk-markdown.js +159 -0
  9. package/dist/ai-services/chunk-markdown.js.map +1 -0
  10. package/dist/ai-services/client.d.ts +31 -0
  11. package/dist/ai-services/client.d.ts.map +1 -0
  12. package/dist/ai-services/client.js +104 -0
  13. package/dist/ai-services/client.js.map +1 -0
  14. package/dist/ai-services/config.d.ts +17 -0
  15. package/dist/ai-services/config.d.ts.map +1 -0
  16. package/dist/ai-services/config.js +44 -0
  17. package/dist/ai-services/config.js.map +1 -0
  18. package/dist/ai-services/normalize-output.d.ts +29 -0
  19. package/dist/ai-services/normalize-output.d.ts.map +1 -0
  20. package/dist/ai-services/normalize-output.js +428 -0
  21. package/dist/ai-services/normalize-output.js.map +1 -0
  22. package/dist/ai-services/skill-execution.d.ts +24 -0
  23. package/dist/ai-services/skill-execution.d.ts.map +1 -0
  24. package/dist/ai-services/skill-execution.js +74 -0
  25. package/dist/ai-services/skill-execution.js.map +1 -0
  26. package/dist/ai-services/types.d.ts +62 -0
  27. package/dist/ai-services/types.d.ts.map +1 -0
  28. package/dist/ai-services/types.js +3 -0
  29. package/dist/ai-services/types.js.map +1 -0
  30. package/dist/app.d.ts.map +1 -1
  31. package/dist/app.js +41 -6
  32. package/dist/app.js.map +1 -1
  33. package/dist/assist/ask.d.ts +35 -0
  34. package/dist/assist/ask.d.ts.map +1 -0
  35. package/dist/assist/ask.js +346 -0
  36. package/dist/assist/ask.js.map +1 -0
  37. package/dist/assist/facts.d.ts +5 -0
  38. package/dist/assist/facts.d.ts.map +1 -0
  39. package/dist/assist/facts.js +237 -0
  40. package/dist/assist/facts.js.map +1 -0
  41. package/dist/assist/merge-ask-proposal.d.ts +9 -0
  42. package/dist/assist/merge-ask-proposal.d.ts.map +1 -0
  43. package/dist/assist/merge-ask-proposal.js +57 -0
  44. package/dist/assist/merge-ask-proposal.js.map +1 -0
  45. package/dist/assist/types.d.ts +60 -0
  46. package/dist/assist/types.d.ts.map +1 -0
  47. package/dist/assist/types.js +57 -0
  48. package/dist/assist/types.js.map +1 -0
  49. package/dist/assist/validate.d.ts +4 -0
  50. package/dist/assist/validate.d.ts.map +1 -0
  51. package/dist/assist/validate.js +319 -0
  52. package/dist/assist/validate.js.map +1 -0
  53. package/dist/cli.js +29 -6
  54. package/dist/cli.js.map +1 -1
  55. package/dist/connector-catalog.d.ts +68 -0
  56. package/dist/connector-catalog.d.ts.map +1 -0
  57. package/dist/connector-catalog.js +258 -0
  58. package/dist/connector-catalog.js.map +1 -0
  59. package/dist/connector-role.d.ts +22 -0
  60. package/dist/connector-role.d.ts.map +1 -0
  61. package/dist/connector-role.js +71 -0
  62. package/dist/connector-role.js.map +1 -0
  63. package/dist/destination-runtime.d.ts +8 -0
  64. package/dist/destination-runtime.d.ts.map +1 -0
  65. package/dist/destination-runtime.js +11 -0
  66. package/dist/destination-runtime.js.map +1 -0
  67. package/dist/execution-target.d.ts +141 -0
  68. package/dist/execution-target.d.ts.map +1 -0
  69. package/dist/execution-target.js +853 -0
  70. package/dist/execution-target.js.map +1 -0
  71. package/dist/generic-connectors.d.ts +41 -0
  72. package/dist/generic-connectors.d.ts.map +1 -0
  73. package/dist/generic-connectors.js +158 -0
  74. package/dist/generic-connectors.js.map +1 -0
  75. package/dist/isolation.d.ts +1 -1
  76. package/dist/isolation.d.ts.map +1 -1
  77. package/dist/jobs-scope.d.ts +21 -0
  78. package/dist/jobs-scope.d.ts.map +1 -0
  79. package/dist/jobs-scope.js +83 -0
  80. package/dist/jobs-scope.js.map +1 -0
  81. package/dist/journey/collect.js +2 -2
  82. package/dist/journey/collect.js.map +1 -1
  83. package/dist/journey/coverage.js +3 -3
  84. package/dist/journey/coverage.js.map +1 -1
  85. package/dist/known-packs.d.ts +1 -1
  86. package/dist/known-packs.d.ts.map +1 -1
  87. package/dist/known-packs.js +1 -1
  88. package/dist/known-packs.js.map +1 -1
  89. package/dist/live.d.ts +13 -1
  90. package/dist/live.d.ts.map +1 -1
  91. package/dist/live.js +866 -2
  92. package/dist/live.js.map +1 -1
  93. package/dist/magit/magit-pack-service.d.ts +112 -0
  94. package/dist/magit/magit-pack-service.d.ts.map +1 -1
  95. package/dist/magit/magit-pack-service.js +494 -12
  96. package/dist/magit/magit-pack-service.js.map +1 -1
  97. package/dist/magit/pack-to-patchset.d.ts +20 -1
  98. package/dist/magit/pack-to-patchset.d.ts.map +1 -1
  99. package/dist/magit/pack-to-patchset.js +82 -9
  100. package/dist/magit/pack-to-patchset.js.map +1 -1
  101. package/dist/magit/package-catalog-bridge.d.ts +58 -0
  102. package/dist/magit/package-catalog-bridge.d.ts.map +1 -0
  103. package/dist/magit/package-catalog-bridge.js +220 -0
  104. package/dist/magit/package-catalog-bridge.js.map +1 -0
  105. package/dist/magit/proposal-to-pack.d.ts +22 -0
  106. package/dist/magit/proposal-to-pack.d.ts.map +1 -0
  107. package/dist/magit/proposal-to-pack.js +68 -0
  108. package/dist/magit/proposal-to-pack.js.map +1 -0
  109. package/dist/mongo-metadata-store.d.ts.map +1 -1
  110. package/dist/mongo-metadata-store.js +9 -3
  111. package/dist/mongo-metadata-store.js.map +1 -1
  112. package/dist/openapi/openapi.json +6262 -3139
  113. package/dist/org-sources.d.ts +14 -0
  114. package/dist/org-sources.d.ts.map +1 -0
  115. package/dist/org-sources.js +31 -0
  116. package/dist/org-sources.js.map +1 -0
  117. package/dist/pipeline-compile.d.ts +67 -1
  118. package/dist/pipeline-compile.d.ts.map +1 -1
  119. package/dist/pipeline-compile.js +455 -29
  120. package/dist/pipeline-compile.js.map +1 -1
  121. package/dist/pipeline-invoke.d.ts +63 -0
  122. package/dist/pipeline-invoke.d.ts.map +1 -0
  123. package/dist/pipeline-invoke.js +114 -0
  124. package/dist/pipeline-invoke.js.map +1 -0
  125. package/dist/pipeline-ports.d.ts +13 -0
  126. package/dist/pipeline-ports.d.ts.map +1 -0
  127. package/dist/pipeline-ports.js +104 -0
  128. package/dist/pipeline-ports.js.map +1 -0
  129. package/dist/platform.d.ts +47 -3
  130. package/dist/platform.d.ts.map +1 -1
  131. package/dist/platform.js +309 -26
  132. package/dist/platform.js.map +1 -1
  133. package/dist/routes/ai-services.d.ts +4 -0
  134. package/dist/routes/ai-services.d.ts.map +1 -0
  135. package/dist/routes/ai-services.js +239 -0
  136. package/dist/routes/ai-services.js.map +1 -0
  137. package/dist/routes/assist.d.ts +4 -0
  138. package/dist/routes/assist.d.ts.map +1 -0
  139. package/dist/routes/assist.js +75 -0
  140. package/dist/routes/assist.js.map +1 -0
  141. package/dist/routes/connector-invocations.d.ts.map +1 -1
  142. package/dist/routes/connector-invocations.js +18 -21
  143. package/dist/routes/connector-invocations.js.map +1 -1
  144. package/dist/routes/data-journey.js +11 -11
  145. package/dist/routes/data-journey.js.map +1 -1
  146. package/dist/routes/intelligence.d.ts.map +1 -1
  147. package/dist/routes/intelligence.js +19 -1
  148. package/dist/routes/intelligence.js.map +1 -1
  149. package/dist/routes/jobs.d.ts +4 -0
  150. package/dist/routes/jobs.d.ts.map +1 -0
  151. package/dist/routes/jobs.js +888 -0
  152. package/dist/routes/jobs.js.map +1 -0
  153. package/dist/routes/memory.d.ts.map +1 -1
  154. package/dist/routes/memory.js +278 -80
  155. package/dist/routes/memory.js.map +1 -1
  156. package/dist/routes/metadata.d.ts.map +1 -1
  157. package/dist/routes/metadata.js +770 -21
  158. package/dist/routes/metadata.js.map +1 -1
  159. package/dist/routes/pipelines.d.ts.map +1 -1
  160. package/dist/routes/pipelines.js +98 -22
  161. package/dist/routes/pipelines.js.map +1 -1
  162. package/dist/routes/relationships.d.ts.map +1 -1
  163. package/dist/routes/relationships.js +109 -2
  164. package/dist/routes/relationships.js.map +1 -1
  165. package/dist/routes/simulation.d.ts +7 -0
  166. package/dist/routes/simulation.d.ts.map +1 -0
  167. package/dist/routes/simulation.js +22 -0
  168. package/dist/routes/simulation.js.map +1 -0
  169. package/dist/runx/client.d.ts +18 -0
  170. package/dist/runx/client.d.ts.map +1 -0
  171. package/dist/runx/client.js +59 -0
  172. package/dist/runx/client.js.map +1 -0
  173. package/dist/simulation.d.ts +26 -0
  174. package/dist/simulation.d.ts.map +1 -0
  175. package/dist/simulation.js +46 -0
  176. package/dist/simulation.js.map +1 -0
  177. package/openapi/openapi.json +6262 -3139
  178. package/package.json +18 -8
@@ -0,0 +1,62 @@
1
+ /** AI-services/v1 shapes (consumer side). Matches FR-AIS-1…8. */
2
+ export type AiServiceType = "function" | "skill" | "task" | "graph" | (string & {});
3
+ /** FR-AIS-7 — advertised mutation / subresource support. */
4
+ export type AiServiceCapabilities = {
5
+ itemMutation: boolean;
6
+ actions?: string[];
7
+ subresources?: string[];
8
+ bundles?: boolean;
9
+ };
10
+ export type AiServiceDescriptor = {
11
+ protocolVersion: "ai-services/1";
12
+ aiServiceType: AiServiceType;
13
+ packageId: string;
14
+ zoneId: string;
15
+ title: string;
16
+ cataloxCatalogIds: string[];
17
+ capabilities?: AiServiceCapabilities;
18
+ };
19
+ export type AiServiceItemSummary = {
20
+ id: string;
21
+ title: string;
22
+ summary?: string;
23
+ tags?: string[];
24
+ version?: string;
25
+ meta?: Record<string, unknown>;
26
+ };
27
+ export type AiServiceItemDetail = AiServiceItemSummary & {
28
+ inputSchema?: unknown;
29
+ outputSchema?: unknown;
30
+ defaults?: unknown;
31
+ };
32
+ export type AiServiceInvokeRequest = {
33
+ itemId: string;
34
+ input?: unknown;
35
+ execution?: Record<string, unknown>;
36
+ correlationId?: string;
37
+ };
38
+ export type AiServiceInvokeResponse = {
39
+ ok: boolean;
40
+ itemId: string;
41
+ output?: unknown;
42
+ error?: {
43
+ code: string;
44
+ message: string;
45
+ retryable?: boolean;
46
+ };
47
+ meta?: Record<string, unknown>;
48
+ };
49
+ /** Pack / step binding — ids only, no Catalox row copies. */
50
+ export type AiServiceBinding = {
51
+ aiServiceType: string;
52
+ itemId: string;
53
+ endpointEnv?: string;
54
+ endpoint?: string;
55
+ };
56
+ export type ConfiguredAiServiceOrigin = {
57
+ aiServiceType: AiServiceType;
58
+ env: string;
59
+ url: string | null;
60
+ defaultPort: number;
61
+ };
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai-services/types.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEpF,4DAA4D;AAC5D,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,EAAE,aAAa,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** AI-services/v1 shapes (consumer side). Matches FR-AIS-1…8. */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ai-services/types.ts"],"names":[],"mappings":"AAAA,iEAAiE"}
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAIxD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAgBvB,MAAM,MAAM,8BAA8B,GAAG,YAAY,GAAG;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA0D5E;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,GAAG;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,0BAA0B;;;;;GAM7E"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAIxD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAsBvB,MAAM,MAAM,8BAA8B,GAAG,YAAY,GAAG;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuF5E;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,GAAG;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,0BAA0B;;;;;GAM7E"}
package/dist/app.js CHANGED
@@ -14,14 +14,21 @@ import { registerRelationshipRoutes } from "./routes/relationships.js";
14
14
  import { registerMemoryRoutes } from "./routes/memory.js";
15
15
  import { registerConnectorInvocationRoutes } from "./routes/connector-invocations.js";
16
16
  import { registerPipelineRoutes } from "./routes/pipelines.js";
17
+ import { registerJobsRoutes } from "./routes/jobs.js";
17
18
  import { registerOperationsRoutes } from "./routes/operations.js";
18
19
  import { registerWorkflowRoutes } from "./routes/workflow.js";
19
20
  import { registerIntelligenceRoutes } from "./routes/intelligence.js";
20
21
  import { registerDataJourneyRoutes } from "./routes/data-journey.js";
22
+ import { registerSimulationRoutes } from "./routes/simulation.js";
23
+ import { registerAssistRoutes } from "./routes/assist.js";
24
+ import { registerAiServicesRoutes } from "./routes/ai-services.js";
25
+ import { createSimulationController } from "./simulation.js";
21
26
  import { memorixLiveRing } from "./live.js";
27
+ import { resolveConfiguredAiServiceOrigins } from "./ai-services/config.js";
22
28
  const __dirname = dirname(fileURLToPath(import.meta.url));
23
29
  export async function createMemorixServiceApp(opts) {
24
30
  const platform = opts.platform ?? (await createMemorixPlatform(opts));
31
+ const simulation = createSimulationController();
25
32
  const app = Fastify({ logger: opts.logger ?? false });
26
33
  await app.register(cors, { origin: true });
27
34
  const core = await attachCoreFastify(app, {
@@ -36,11 +43,20 @@ export async function createMemorixServiceApp(opts) {
36
43
  docsPath: "/api/openapi.json",
37
44
  description: "Sole HTTP composition root",
38
45
  },
39
- getHealth: async () => ({
40
- ok: true,
41
- service: "@x12i/memorix-service",
42
- mode: platform.mode,
43
- }),
46
+ getHealth: async () => {
47
+ const sim = simulation.getState();
48
+ return {
49
+ ok: true,
50
+ service: "@x12i/memorix-service",
51
+ mode: platform.mode,
52
+ simulation: {
53
+ supported: sim.supported,
54
+ active: sim.active,
55
+ apsPackageSim: sim.apsPackageSim,
56
+ blockedOn: sim.blockedOn,
57
+ },
58
+ };
59
+ },
44
60
  });
45
61
  app.setErrorHandler((err, req, reply) => {
46
62
  const correlationId = req.correlationId ?? randomUUID();
@@ -55,20 +71,39 @@ export async function createMemorixServiceApp(opts) {
55
71
  });
56
72
  app.get("/api/diagnostics/scope", async (req) => {
57
73
  const scope = resolveScope(req);
58
- return { scope, platform: platform.diagnostics(scope) };
74
+ const base = platform.diagnostics(scope);
75
+ return {
76
+ scope,
77
+ platform: {
78
+ ...base,
79
+ aiServices: resolveConfiguredAiServiceOrigins().map((o) => ({
80
+ aiServiceType: o.aiServiceType,
81
+ env: o.env,
82
+ url: o.url,
83
+ configured: Boolean(o.url),
84
+ defaultPort: o.defaultPort,
85
+ })),
86
+ },
87
+ };
59
88
  });
89
+ registerSimulationRoutes(app, simulation);
60
90
  await registerMetadataRoutes(app, platform);
61
91
  await registerDataRoutes(app, platform);
62
92
  await registerRelationshipRoutes(app, platform);
63
93
  await registerMemoryRoutes(app, platform);
64
94
  await registerConnectorInvocationRoutes(app, platform);
65
95
  await registerPipelineRoutes(app, platform);
96
+ await registerJobsRoutes(app, platform);
66
97
  await registerOperationsRoutes(app, platform);
67
98
  await registerWorkflowRoutes(app, platform);
68
99
  await registerIntelligenceRoutes(app, platform);
69
100
  await registerDataJourneyRoutes(app, platform);
101
+ await registerAssistRoutes(app, platform);
102
+ await registerAiServicesRoutes(app, platform);
70
103
  // Minute-resolution Memory pull schedule ticker (collector-only; not pipelines).
71
104
  platform.startMemoryScheduleTicker({ intervalMs: 60_000 });
105
+ // Jobs continuous Work evaluation + held-run promotion.
106
+ platform.startJobsWorkTicker({ intervalMs: 15_000 });
72
107
  return { app, platform, port: core.port };
73
108
  }
74
109
  export async function startMemorixServiceHttp(opts) {
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { MemorixPlatform } from "../platform.js";
2
+ import type { AskIntent, AskResult, EntityRef } from "./types.js";
3
+ type AssistRouting = {
4
+ explicitIntent: Record<string, string>;
5
+ autoByEntityKind: Record<string, string>;
6
+ fallback: string;
7
+ };
8
+ export declare function resolveAssistantsRoot(): string;
9
+ /** Load routing.json from assistants root; fall back to built-in map. */
10
+ export declare function loadAssistRouting(rootDir?: string): AssistRouting;
11
+ /** True when FuncX / LLM Ask can run (OPENROUTER_API_KEY set). */
12
+ export declare function isAskLlmEnabled(): boolean;
13
+ export type AssistStatus = {
14
+ validateEnabled: true;
15
+ askEnabled: boolean;
16
+ /** Human-readable reason when Ask is disabled. */
17
+ askDisabledReason: string | null;
18
+ };
19
+ export declare function getAssistStatus(): AssistStatus;
20
+ /** Test hook to reset cached router and routing. */
21
+ export declare function resetAssistRouterForTests(): void;
22
+ /**
23
+ * Precedence: platform-magit → explicit non-auto intent → auto-by-kind → fallback.
24
+ * Mirrors .assistants-functions/routing.json.
25
+ */
26
+ export declare function assistantIdForIntent(entity: EntityRef, intent: AskIntent): string;
27
+ export declare function resolveAskIntent(entity: EntityRef, intent: AskIntent): AskIntent;
28
+ /**
29
+ * Render assistant prompt.rendrix.md with Ask payload as working memory.
30
+ * Falls back to JSON.stringify when template is missing or render fails.
31
+ */
32
+ export declare function renderAskPrompt(assistantId: string, payload: unknown, rootDir?: string): Promise<string>;
33
+ export declare function askEntity(platform: MemorixPlatform, entity: EntityRef, intentIn: AskIntent, prompt?: string): Promise<AskResult>;
34
+ export {};
35
+ //# sourceMappingURL=ask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/assist/ask.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,KAAK,EAEV,SAAS,EAET,SAAS,EAET,SAAS,EACV,MAAM,YAAY,CAAC;AAmCpB,KAAK,aAAa,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAgBF,wBAAgB,qBAAqB,IAAI,MAAM,CAa9C;AAUD,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,OAAO,SAA0B,GAAG,aAAa,CA+BlF;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe,EAAE,IAAI,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,wBAAgB,eAAe,IAAI,YAAY,CAc9C;AAeD,oDAAoD;AACpD,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,GAChB,MAAM,CAgBR;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,GAChB,SAAS,CAGX;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,SAA0B,GAChC,OAAO,CAAC,MAAM,CAAC,CAejB;AA+GD,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,SAAS,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,CA8EpB"}
@@ -0,0 +1,346 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { gatherEntityFacts } from "./facts.js";
5
+ import { validateEntity } from "./validate.js";
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ const ALLOWED_ACTION_IDS = new Set([
8
+ "stage-proposal",
9
+ "validate-draft-pack",
10
+ "install-draft",
11
+ "navigate",
12
+ ]);
13
+ /** Fallback when routing.json is missing — mirrors .assistants-functions/routing.json */
14
+ const DEFAULT_EXPLICIT_INTENT = {
15
+ "platform-magit": "platform-magit-enable",
16
+ "match-abstracts": "entity-match-abstracts",
17
+ "propose-mappings": "entity-propose-mappings",
18
+ "propose-relationships": "entity-propose-relationships",
19
+ };
20
+ const DEFAULT_AUTO_BY_KIND = {
21
+ "object-type": "entity-match-abstracts",
22
+ abstract: "entity-match-abstracts",
23
+ mapping: "entity-propose-mappings",
24
+ relationship: "entity-propose-relationships",
25
+ connector: "entity-connector-assist",
26
+ "memory-source": "entity-memory-pull-assist",
27
+ agent: "entity-agent-assist",
28
+ service: "entity-service-assist",
29
+ pipeline: "entity-pipeline-assist",
30
+ run: "entity-run-assist",
31
+ "platform-magit": "platform-magit-enable",
32
+ };
33
+ const DEFAULT_FALLBACK = "entity-page-default";
34
+ let routerPromise = null;
35
+ let routingCache = null;
36
+ export function resolveAssistantsRoot() {
37
+ const fromEnv = process.env.ASSISTANTS_ROOT?.trim();
38
+ if (fromEnv)
39
+ return resolve(fromEnv);
40
+ // memorix-service/src/assist → repo root .assistants-functions
41
+ const candidates = [
42
+ resolve(__dirname, "../../../.assistants-functions"),
43
+ resolve(process.cwd(), ".assistants-functions"),
44
+ resolve(process.cwd(), "../.assistants-functions"),
45
+ ];
46
+ for (const c of candidates) {
47
+ if (existsSync(c))
48
+ return c;
49
+ }
50
+ return candidates[0];
51
+ }
52
+ function defaultRouting() {
53
+ return {
54
+ explicitIntent: { ...DEFAULT_EXPLICIT_INTENT },
55
+ autoByEntityKind: { ...DEFAULT_AUTO_BY_KIND },
56
+ fallback: DEFAULT_FALLBACK,
57
+ };
58
+ }
59
+ /** Load routing.json from assistants root; fall back to built-in map. */
60
+ export function loadAssistRouting(rootDir = resolveAssistantsRoot()) {
61
+ if (routingCache)
62
+ return routingCache;
63
+ const path = join(rootDir, "routing.json");
64
+ if (!existsSync(path)) {
65
+ routingCache = defaultRouting();
66
+ return routingCache;
67
+ }
68
+ try {
69
+ const raw = JSON.parse(readFileSync(path, "utf8"));
70
+ routingCache = {
71
+ explicitIntent: {
72
+ ...DEFAULT_EXPLICIT_INTENT,
73
+ ...(raw.explicitIntent ?? {}),
74
+ },
75
+ autoByEntityKind: {
76
+ ...DEFAULT_AUTO_BY_KIND,
77
+ ...(raw.autoByEntityKind ?? {}),
78
+ },
79
+ fallback: typeof raw.fallback === "string" && raw.fallback.trim()
80
+ ? raw.fallback.trim()
81
+ : DEFAULT_FALLBACK,
82
+ };
83
+ }
84
+ catch {
85
+ routingCache = defaultRouting();
86
+ }
87
+ return routingCache;
88
+ }
89
+ /** True when FuncX / LLM Ask can run (OPENROUTER_API_KEY set). */
90
+ export function isAskLlmEnabled() {
91
+ return Boolean(process.env.OPENROUTER_API_KEY?.trim());
92
+ }
93
+ export function getAssistStatus() {
94
+ if (isAskLlmEnabled()) {
95
+ return {
96
+ validateEnabled: true,
97
+ askEnabled: true,
98
+ askDisabledReason: null,
99
+ };
100
+ }
101
+ return {
102
+ validateEnabled: true,
103
+ askEnabled: false,
104
+ askDisabledReason: "Ask needs OPENROUTER_API_KEY on memorix-service. Validate still works.",
105
+ };
106
+ }
107
+ async function getRouter() {
108
+ if (!routerPromise) {
109
+ // Dynamic import so Validate / offline Ask do not load FuncX at module init
110
+ // (FuncX rejects MODE=test used by Vitest).
111
+ routerPromise = import("@x12i/assistant-functions").then(({ createAssistantRouter }) => createAssistantRouter({
112
+ rootDir: resolveAssistantsRoot(),
113
+ }));
114
+ }
115
+ return routerPromise;
116
+ }
117
+ /** Test hook to reset cached router and routing. */
118
+ export function resetAssistRouterForTests() {
119
+ routerPromise = null;
120
+ routingCache = null;
121
+ }
122
+ /**
123
+ * Precedence: platform-magit → explicit non-auto intent → auto-by-kind → fallback.
124
+ * Mirrors .assistants-functions/routing.json.
125
+ */
126
+ export function assistantIdForIntent(entity, intent) {
127
+ const routing = loadAssistRouting();
128
+ if (entity.kind === "platform-magit" || intent === "platform-magit") {
129
+ return (routing.explicitIntent["platform-magit"] ??
130
+ routing.autoByEntityKind["platform-magit"] ??
131
+ "platform-magit-enable");
132
+ }
133
+ if (intent !== "auto") {
134
+ const mapped = routing.explicitIntent[intent];
135
+ if (mapped)
136
+ return mapped;
137
+ }
138
+ const byKind = routing.autoByEntityKind[entity.kind];
139
+ if (byKind)
140
+ return byKind;
141
+ return routing.fallback || DEFAULT_FALLBACK;
142
+ }
143
+ export function resolveAskIntent(entity, intent) {
144
+ if (entity.kind === "platform-magit")
145
+ return "platform-magit";
146
+ return intent;
147
+ }
148
+ /**
149
+ * Render assistant prompt.rendrix.md with Ask payload as working memory.
150
+ * Falls back to JSON.stringify when template is missing or render fails.
151
+ */
152
+ export async function renderAskPrompt(assistantId, payload, rootDir = resolveAssistantsRoot()) {
153
+ const templatePath = join(rootDir, assistantId, "prompt.rendrix.md");
154
+ if (!existsSync(templatePath)) {
155
+ return JSON.stringify(payload);
156
+ }
157
+ try {
158
+ const template = readFileSync(templatePath, "utf8");
159
+ const { render } = await import("@x12i/rendrix");
160
+ const output = render(template, payload);
161
+ return typeof output === "string" && output.trim()
162
+ ? output
163
+ : JSON.stringify(payload);
164
+ }
165
+ catch {
166
+ return JSON.stringify(payload);
167
+ }
168
+ }
169
+ function defaultActions(entity) {
170
+ if (entity.kind === "platform-magit") {
171
+ return [
172
+ {
173
+ id: "navigate",
174
+ label: "Open Magit get started",
175
+ requiresConfirm: false,
176
+ href: "/design/pack-versions/get-started",
177
+ },
178
+ ];
179
+ }
180
+ return [
181
+ {
182
+ id: "validate-draft-pack",
183
+ label: "Validate draft",
184
+ requiresConfirm: false,
185
+ },
186
+ {
187
+ id: "stage-proposal",
188
+ label: "Stage proposal",
189
+ requiresConfirm: true,
190
+ },
191
+ {
192
+ id: "install-draft",
193
+ label: "Install draft",
194
+ requiresConfirm: true,
195
+ },
196
+ ];
197
+ }
198
+ function sanitizeActions(raw, entity) {
199
+ if (!Array.isArray(raw) || raw.length === 0)
200
+ return defaultActions(entity);
201
+ const out = [];
202
+ for (const item of raw) {
203
+ if (!item || typeof item !== "object")
204
+ continue;
205
+ const o = item;
206
+ const id = String(o.id ?? "").trim();
207
+ if (!ALLOWED_ACTION_IDS.has(id))
208
+ continue;
209
+ out.push({
210
+ id: id,
211
+ label: String(o.label ?? id),
212
+ requiresConfirm: Boolean(o.requiresConfirm),
213
+ href: typeof o.href === "string" ? o.href : undefined,
214
+ });
215
+ }
216
+ return out.length ? out : defaultActions(entity);
217
+ }
218
+ function sanitizeProposal(raw, entity) {
219
+ if (entity.kind === "platform-magit")
220
+ return {};
221
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
222
+ return {};
223
+ const p = raw;
224
+ const out = {};
225
+ for (const key of [
226
+ "abstractTypes",
227
+ "objectTypes",
228
+ "mappings",
229
+ "relationshipDefinitions",
230
+ "sources",
231
+ "services",
232
+ "pipelines",
233
+ ]) {
234
+ if (Array.isArray(p[key]))
235
+ out[key] = p[key];
236
+ }
237
+ return out;
238
+ }
239
+ function offlineAskResult(entity, intent, facts, reportSummary) {
240
+ return {
241
+ entity,
242
+ summary: `Ask unavailable (no OPENROUTER_API_KEY). Validate says: ${reportSummary}`,
243
+ intent,
244
+ proposal: {},
245
+ rationale: [
246
+ "Set OPENROUTER_API_KEY on memorix-service to enable Ask.",
247
+ "Use Validate for deterministic checks without an LLM.",
248
+ ],
249
+ actions: defaultActions(entity),
250
+ askUnavailable: true,
251
+ autoInstall: false,
252
+ };
253
+ }
254
+ function heuristicAskFromValidate(entity, intent, report) {
255
+ const gaps = report.checks.filter((c) => c.status !== "pass");
256
+ return {
257
+ entity,
258
+ summary: gaps.length === 0
259
+ ? "Entity looks healthy. Ask can still propose refinements when LLM is configured."
260
+ : `Found ${gaps.length} gap(s)/error(s). Primary work: match abstracts, then mappings, then relationships.`,
261
+ intent,
262
+ proposal: {},
263
+ rationale: gaps.map((g) => `${g.id}: ${g.message}`),
264
+ actions: defaultActions(entity),
265
+ askUnavailable: true,
266
+ autoInstall: false,
267
+ };
268
+ }
269
+ export async function askEntity(platform, entity, intentIn, prompt) {
270
+ const intent = resolveAskIntent(entity, intentIn);
271
+ const report = validateEntity(platform, entity);
272
+ const facts = gatherEntityFacts(platform, entity);
273
+ const reportSummary = `${report.status} (${report.checks.filter((c) => c.status !== "pass").length} non-pass)`;
274
+ if (!isAskLlmEnabled()) {
275
+ if (entity.kind === "platform-magit") {
276
+ return offlineAskResult(entity, intent, facts, reportSummary);
277
+ }
278
+ return heuristicAskFromValidate(entity, intent, report);
279
+ }
280
+ const assistantId = assistantIdForIntent(entity, intent);
281
+ const payload = {
282
+ entity,
283
+ intent,
284
+ prompt: prompt?.trim() || undefined,
285
+ validate: {
286
+ status: report.status,
287
+ checks: report.checks,
288
+ },
289
+ facts,
290
+ };
291
+ try {
292
+ const router = await getRouter();
293
+ const names = router.list();
294
+ if (!names.includes(assistantId)) {
295
+ return {
296
+ entity,
297
+ summary: `Assistant "${assistantId}" not found under ${resolveAssistantsRoot()}`,
298
+ intent,
299
+ proposal: {},
300
+ rationale: [`Available: ${names.join(", ") || "(none)"}`],
301
+ actions: defaultActions(entity),
302
+ askUnavailable: true,
303
+ autoInstall: false,
304
+ };
305
+ }
306
+ const renderedPrompt = await renderAskPrompt(assistantId, payload);
307
+ const run = await router.run(assistantId, renderedPrompt);
308
+ if (!run.ok) {
309
+ return {
310
+ entity,
311
+ summary: `Ask failed: ${run.error?.message ?? "unknown error"}`,
312
+ intent,
313
+ proposal: {},
314
+ rationale: [String(run.error?.message ?? "run failed")],
315
+ actions: defaultActions(entity),
316
+ askUnavailable: true,
317
+ autoInstall: false,
318
+ };
319
+ }
320
+ const data = (run.data ?? {});
321
+ return {
322
+ entity,
323
+ summary: String(data.summary ?? "Ask completed"),
324
+ intent: String(data.intent ?? intent),
325
+ proposal: sanitizeProposal(data.proposal, entity),
326
+ rationale: Array.isArray(data.rationale)
327
+ ? data.rationale.map((r) => String(r))
328
+ : [],
329
+ actions: sanitizeActions(data.actions, entity),
330
+ autoInstall: false,
331
+ };
332
+ }
333
+ catch (err) {
334
+ return {
335
+ entity,
336
+ summary: `Ask error: ${err instanceof Error ? err.message : String(err)}`,
337
+ intent,
338
+ proposal: {},
339
+ rationale: [err instanceof Error ? err.message : String(err)],
340
+ actions: defaultActions(entity),
341
+ askUnavailable: true,
342
+ autoInstall: false,
343
+ };
344
+ }
345
+ }
346
+ //# sourceMappingURL=ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/assist/ask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { MemorixPlatform } from "../platform.js";
2
+ import type { EntityRef } from "./types.js";
3
+ /** Bounded metadata slice for Validate + Ask. */
4
+ export declare function gatherEntityFacts(platform: MemorixPlatform, entity: EntityRef): Record<string, unknown>;
5
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/assist/facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA8C5C,iDAAiD;AACjD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,SAAS,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2NzB"}