@x12i/memorix-scoper-functions 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,17 @@
1
- # Temporary Holding Version
1
+ # @x12i/memorix-scoper-functions
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Runs saved query and scope functions, and asks `@x12i/coder-dispatcher` to write one when a question has no saved function yet.
4
+
5
+ A **query** function fetches records through the host SDK. A **scope** function answers the question from those records. A function is kept only after it passes its tests. Each kept function is a `@x12i/pagx` sub-package under the directory in `SCOPER_FUNCTIONS_DIR`, so a later process can install it and run the same file.
6
+
7
+ The parent package is a root and has no `catalog.json`. Each function sub-package has `catalog.json` next to `pagx.json`. Publishing seeds the live catalog and inserts an item id only when that id is not already stored. A later save leaves an existing catalog item as it is.
8
+
9
+ ```ts
10
+ import { createScoper } from "@x12i/memorix-scoper";
11
+ import { createScopeFunctions } from "@x12i/memorix-scoper-functions";
12
+
13
+ const functions = createScopeFunctions({ dir: "./scope-functions" });
14
+ const scoper = createScoper({ functions });
15
+ ```
16
+
17
+ `@x12i/coder-dispatcher` is optional. Without it, saved functions still run, and a question with no saved function uses the reasoner.
@@ -0,0 +1,6 @@
1
+ export { createScopeFunctions, type CreateScopeFunctionsOptions, } from "./registry.js";
2
+ export { signatureId, signatureOf, type FunctionSignature } from "./signature.js";
3
+ export { FunctionSourceError } from "./source.js";
4
+ export { FunctionRunError } from "./run.js";
5
+ export { DEFAULT_PACKAGE_NAME, FUNCTION_AGENT_TYPE } from "./store.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { createScopeFunctions, } from "./registry.js";
2
+ export { signatureId, signatureOf } from "./signature.js";
3
+ export { FunctionSourceError } from "./source.js";
4
+ export { FunctionRunError } from "./run.js";
5
+ export { DEFAULT_PACKAGE_NAME, FUNCTION_AGENT_TYPE } from "./store.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAA0B,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { DispatcherDeps } from "@x12i/coder-dispatcher";
2
+ import type { ScopeRequest, ScoperBudgets, ScoperProfile } from "@x12i/memorix-scoper-contracts";
3
+ import type { ContextualSdk } from "@x12i/memorix-scoper-sdk";
4
+ import type { ScopeFunctionRecord } from "@x12i/memorix-scoper";
5
+ export interface CoderFile {
6
+ path: string;
7
+ content: string;
8
+ }
9
+ export interface CoderRunResult {
10
+ files: CoderFile[];
11
+ }
12
+ export type RequestCodeFn = (input: {
13
+ request: string;
14
+ language: "javascript";
15
+ deliverable: "function";
16
+ backend?: "auto";
17
+ }, deps?: DispatcherDeps) => Promise<CoderRunResult>;
18
+ export declare function sourceFromFiles(files: CoderFile[]): string;
19
+ export declare function executeQuery(options: {
20
+ source: string;
21
+ request: ScopeRequest;
22
+ profile: ScoperProfile;
23
+ budgets: ScoperBudgets;
24
+ sdk: ContextualSdk;
25
+ }): Promise<ScopeFunctionRecord[]>;
26
+ export declare function executeScope(options: {
27
+ source: string;
28
+ request: ScopeRequest;
29
+ records: ScopeFunctionRecord[];
30
+ timeoutMs: number;
31
+ }): Promise<string>;
32
+ export declare function proveQuery(options: {
33
+ source: string;
34
+ request: ScopeRequest;
35
+ profile: ScoperProfile;
36
+ budgets: ScoperBudgets;
37
+ sdk: ContextualSdk;
38
+ }): Promise<ScopeFunctionRecord[]>;
39
+ export declare function proveScope(options: {
40
+ source: string;
41
+ request: ScopeRequest;
42
+ records: ScopeFunctionRecord[];
43
+ timeoutMs: number;
44
+ }): Promise<string>;
45
+ export declare function learnQuery(options: {
46
+ requestCode: RequestCodeFn;
47
+ coderDeps?: DispatcherDeps;
48
+ request: ScopeRequest;
49
+ profile: ScoperProfile;
50
+ budgets: ScoperBudgets;
51
+ sdk: ContextualSdk;
52
+ }): Promise<{
53
+ source: string;
54
+ records: ScopeFunctionRecord[];
55
+ } | undefined>;
56
+ export declare function learnScope(options: {
57
+ requestCode: RequestCodeFn;
58
+ coderDeps?: DispatcherDeps;
59
+ request: ScopeRequest;
60
+ records: ScopeFunctionRecord[];
61
+ timeoutMs: number;
62
+ }): Promise<{
63
+ source: string;
64
+ answer: string;
65
+ } | undefined>;
66
+ //# sourceMappingURL=learn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.d.ts","sourceRoot":"","sources":["../src/learn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAehE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE;IACL,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,EACD,IAAI,CAAC,EAAE,cAAc,KAClB,OAAO,CAAC,cAAc,CAAC,CAAC;AA8C7B,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAU1D;AAyED,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;CACpB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAWjC;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAUlB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;CACpB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA6BjC;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAAG,SAAS,CAAC,CAgB1E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAgB1D"}
package/dist/learn.js ADDED
@@ -0,0 +1,204 @@
1
+ import { acceptAnswer, acceptRecords, createLiveSubjects, FunctionRunError, queryPayload, recordIds, runHandle, scopePayload, } from "./run.js";
2
+ import { assertRunnableSource } from "./source.js";
3
+ function stable(value) {
4
+ if (Array.isArray(value))
5
+ return `[${value.map((item) => stable(item)).join(",")}]`;
6
+ if (value && typeof value === "object") {
7
+ const entries = Object.entries(value).sort(([left], [right]) => left.localeCompare(right));
8
+ return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${stable(item)}`).join(",")}}`;
9
+ }
10
+ return JSON.stringify(value) ?? "null";
11
+ }
12
+ function recording(api, calls) {
13
+ const wrap = (method) => async (args) => {
14
+ const result = await api[method](args);
15
+ calls.push({ method, args: stable(args), result: structuredClone(result) });
16
+ return result;
17
+ };
18
+ return { get: wrap("get"), list: wrap("list"), query: wrap("query") };
19
+ }
20
+ function replay(calls) {
21
+ let index = 0;
22
+ const take = (method, args) => {
23
+ const call = calls[index++];
24
+ if (!call || call.method !== method || call.args !== stable(args)) {
25
+ throw new FunctionRunError("Query function is not deterministic.", "BAD_RESULT");
26
+ }
27
+ return structuredClone(call.result);
28
+ };
29
+ return {
30
+ get: (args) => Promise.resolve(take("get", args)),
31
+ list: (args) => Promise.resolve(take("list", args)),
32
+ query: (args) => Promise.resolve(take("query", args)),
33
+ };
34
+ }
35
+ export function sourceFromFiles(files) {
36
+ const normalized = files.map((file) => ({
37
+ ...file,
38
+ path: file.path.replaceAll("\\", "/"),
39
+ }));
40
+ const preferred = normalized.find((file) => file.path === "function.mjs" || file.path.endsWith("/function.mjs"));
41
+ const handle = normalized.find((file) => /\bfunction\s+handle\b/.test(file.content));
42
+ const file = preferred ?? handle;
43
+ if (!file)
44
+ throw new FunctionRunError("Coder returned no handle function.", "RUN_FAILED");
45
+ return file.content;
46
+ }
47
+ function rules() {
48
+ return [
49
+ "Write one file named function.mjs.",
50
+ "Export async function handle(input).",
51
+ "Do not import anything.",
52
+ "Do not use require, process, fetch, or fs.",
53
+ ].join("\n");
54
+ }
55
+ function queryPrompt(request, profile, failure) {
56
+ return [
57
+ "Kind: query",
58
+ rules(),
59
+ "handle fetches the records that answer the question.",
60
+ "input has question, objective, focus, catalog, and subjects.",
61
+ "subjects.get({ objectType, contentType, id }) returns { record, ref }.",
62
+ "subjects.list({ objectType, contentType, limit }) returns { records, refs }.",
63
+ "subjects.query({ objectType, contentType, limit, filter }) returns { records, refs }.",
64
+ "Return { records: [{ recordId, objectType, contentType, record }] }.",
65
+ "Every recordId must be one subjects returned. Return an empty records array when nothing matches.",
66
+ `Profile: ${profile.id}`,
67
+ `Allowed capabilities: ${profile.allowedCapabilities.join(", ")}`,
68
+ `Question: ${request.question}`,
69
+ `Objective: ${request.objective ?? ""}`,
70
+ `Focus: ${JSON.stringify(request.focus ?? {})}`,
71
+ failure ? `The previous function failed its test: ${failure}\nReturn a corrected function.mjs.` : "",
72
+ ]
73
+ .filter(Boolean)
74
+ .join("\n");
75
+ }
76
+ function scopePrompt(request, failure) {
77
+ return [
78
+ "Kind: scope",
79
+ rules(),
80
+ "handle answers the question from input.records only.",
81
+ "input has question, objective, focus, and records.",
82
+ "Each record has recordId, objectType, contentType, and record.",
83
+ "Return { answer } as a non-empty string.",
84
+ "If records is empty, answer UNKNOWN.",
85
+ "Do not invent record ids.",
86
+ `Question: ${request.question}`,
87
+ `Objective: ${request.objective ?? ""}`,
88
+ `Focus: ${JSON.stringify(request.focus ?? {})}`,
89
+ failure ? `The previous function failed its test: ${failure}\nReturn a corrected function.mjs.` : "",
90
+ ]
91
+ .filter(Boolean)
92
+ .join("\n");
93
+ }
94
+ async function ask(options) {
95
+ const result = await options.requestCode({
96
+ request: options.request,
97
+ language: "javascript",
98
+ deliverable: "function",
99
+ backend: "auto",
100
+ }, options.coderDeps);
101
+ return sourceFromFiles(result.files);
102
+ }
103
+ export async function executeQuery(options) {
104
+ assertRunnableSource(options.source);
105
+ const live = createLiveSubjects(options.sdk, options.profile, options.budgets);
106
+ const raw = await runHandle({
107
+ source: options.source,
108
+ mode: "query",
109
+ input: queryPayload(options.request, options.profile, options.sdk),
110
+ subjects: live.api,
111
+ timeoutMs: options.budgets.maxWallClockMs,
112
+ });
113
+ return acceptRecords(raw, live.seen);
114
+ }
115
+ export async function executeScope(options) {
116
+ assertRunnableSource(options.source);
117
+ return acceptAnswer(await runHandle({
118
+ source: options.source,
119
+ mode: "scope",
120
+ input: scopePayload(options.request, options.records),
121
+ timeoutMs: options.timeoutMs,
122
+ }));
123
+ }
124
+ export async function proveQuery(options) {
125
+ assertRunnableSource(options.source);
126
+ const live = createLiveSubjects(options.sdk, options.profile, options.budgets);
127
+ const calls = [];
128
+ const input = queryPayload(options.request, options.profile, options.sdk);
129
+ const timeoutMs = options.budgets.maxWallClockMs;
130
+ const firstRaw = await runHandle({
131
+ source: options.source,
132
+ mode: "query",
133
+ input,
134
+ subjects: recording(live.api, calls),
135
+ timeoutMs,
136
+ });
137
+ const first = acceptRecords(firstRaw, live.seen);
138
+ if (first.length > options.budgets.maxEvidenceItems) {
139
+ throw new FunctionRunError("Query function returned more records than the evidence budget.", "BAD_RESULT");
140
+ }
141
+ const secondRaw = await runHandle({
142
+ source: options.source,
143
+ mode: "query",
144
+ input,
145
+ subjects: replay(calls),
146
+ timeoutMs,
147
+ });
148
+ const second = acceptRecords(secondRaw, live.seen);
149
+ if (recordIds(first) !== recordIds(second)) {
150
+ throw new FunctionRunError("Query function is not deterministic.", "BAD_RESULT");
151
+ }
152
+ return first;
153
+ }
154
+ export async function proveScope(options) {
155
+ assertRunnableSource(options.source);
156
+ const once = async (records) => acceptAnswer(await runHandle({
157
+ source: options.source,
158
+ mode: "scope",
159
+ input: scopePayload(options.request, records),
160
+ timeoutMs: options.timeoutMs,
161
+ }));
162
+ const first = await once(structuredClone(options.records));
163
+ const second = await once(structuredClone(options.records));
164
+ if (first !== second)
165
+ throw new FunctionRunError("Scope function is not deterministic.", "BAD_RESULT");
166
+ return first;
167
+ }
168
+ export async function learnQuery(options) {
169
+ let failure;
170
+ for (let attempt = 0; attempt < 2; attempt++) {
171
+ try {
172
+ const source = await ask({
173
+ requestCode: options.requestCode,
174
+ coderDeps: options.coderDeps,
175
+ request: queryPrompt(options.request, options.profile, failure),
176
+ });
177
+ const records = await proveQuery({ ...options, source });
178
+ return { source, records };
179
+ }
180
+ catch (error) {
181
+ failure = error instanceof Error ? error.message : String(error);
182
+ }
183
+ }
184
+ return undefined;
185
+ }
186
+ export async function learnScope(options) {
187
+ let failure;
188
+ for (let attempt = 0; attempt < 2; attempt++) {
189
+ try {
190
+ const source = await ask({
191
+ requestCode: options.requestCode,
192
+ coderDeps: options.coderDeps,
193
+ request: scopePrompt(options.request, failure),
194
+ });
195
+ const answer = await proveScope({ ...options, source });
196
+ return { source, answer };
197
+ }
198
+ catch (error) {
199
+ failure = error instanceof Error ? error.message : String(error);
200
+ }
201
+ }
202
+ return undefined;
203
+ }
204
+ //# sourceMappingURL=learn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.js","sourceRoot":"","sources":["../src/learn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { DispatcherDeps } from "@x12i/coder-dispatcher";
2
+ import type { ScopeFunctions } from "@x12i/memorix-scoper";
3
+ import { type RequestCodeFn } from "./learn.js";
4
+ export interface CreateScopeFunctionsOptions {
5
+ /** Writable pagx package that receives new function sub-packages. */
6
+ dir: string;
7
+ /** Parent package name. Default `@x12i/scope-functions`. */
8
+ packageName?: string;
9
+ /** Project whose `.pagx` install tree is also searched. Default `process.cwd()`. */
10
+ projectDir?: string;
11
+ /** When false, a miss does not ask the coder. Default true. */
12
+ learn?: boolean;
13
+ /** Test double for `@x12i/coder-dispatcher` `requestCode`. */
14
+ requestCode?: RequestCodeFn;
15
+ coderDeps?: DispatcherDeps;
16
+ }
17
+ export declare function createScopeFunctions(options: CreateScopeFunctionsOptions): ScopeFunctions;
18
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAwB,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAsD,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAWpG,MAAM,WAAW,2BAA2B;IAC1C,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAWD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAwHzF"}
@@ -0,0 +1,142 @@
1
+ import { executeQuery, executeScope, learnQuery, learnScope } from "./learn.js";
2
+ import { readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { DEFAULT_PACKAGE_NAME, loadFunctionIndex, saveFunction, } from "./store.js";
5
+ import { signatureKey, signatureOf } from "./signature.js";
6
+ async function defaultRequestCode() {
7
+ try {
8
+ const loaded = (await import("@x12i/coder-dispatcher"));
9
+ return typeof loaded.requestCode === "function" ? loaded.requestCode : undefined;
10
+ }
11
+ catch {
12
+ return undefined;
13
+ }
14
+ }
15
+ export function createScopeFunctions(options) {
16
+ const dir = options.dir;
17
+ const packageName = options.packageName ?? DEFAULT_PACKAGE_NAME;
18
+ const projectDir = options.projectDir ?? process.cwd();
19
+ const learn = options.learn !== false;
20
+ let index = new Map();
21
+ let ready = false;
22
+ let loading;
23
+ const inflight = new Map();
24
+ const answering = new Map();
25
+ let requestCode = options.requestCode;
26
+ async function load() {
27
+ if (ready)
28
+ return;
29
+ loading ??= loadFunctionIndex(dir, projectDir).then((found) => {
30
+ index = found;
31
+ ready = true;
32
+ });
33
+ await loading;
34
+ }
35
+ async function coder() {
36
+ if (requestCode)
37
+ return requestCode;
38
+ requestCode = await defaultRequestCode();
39
+ return requestCode;
40
+ }
41
+ async function runSavedQuery(saved, input) {
42
+ const source = saved.source || (await readFile(join(saved.dir, saved.entry), "utf8"));
43
+ return executeQuery({
44
+ source,
45
+ request: input.request,
46
+ profile: input.profile,
47
+ budgets: input.budgets,
48
+ sdk: input.sdk,
49
+ });
50
+ }
51
+ return {
52
+ async query(input) {
53
+ await load();
54
+ const signature = signatureOf(input.request);
55
+ const key = signatureKey("query", signature);
56
+ const saved = index.get(key);
57
+ if (saved)
58
+ return { handled: true, records: await runSavedQuery(saved, input) };
59
+ if (!learn)
60
+ return { handled: false };
61
+ const existing = inflight.get(key);
62
+ if (existing)
63
+ return existing;
64
+ const pending = (async () => {
65
+ const requestCodeFn = await coder();
66
+ if (!requestCodeFn)
67
+ return { handled: false };
68
+ const learned = await learnQuery({
69
+ requestCode: requestCodeFn,
70
+ coderDeps: options.coderDeps,
71
+ request: input.request,
72
+ profile: input.profile,
73
+ budgets: input.budgets,
74
+ sdk: input.sdk,
75
+ });
76
+ if (!learned)
77
+ return { handled: false };
78
+ const stored = await saveFunction({
79
+ dir,
80
+ packageName,
81
+ kind: "query",
82
+ signature,
83
+ source: learned.source,
84
+ });
85
+ index.set(key, stored);
86
+ return { handled: true, records: learned.records };
87
+ })().finally(() => {
88
+ inflight.delete(key);
89
+ });
90
+ inflight.set(key, pending);
91
+ return pending;
92
+ },
93
+ async answer(input) {
94
+ await load();
95
+ const signature = signatureOf(input.request);
96
+ const key = signatureKey("scope", signature);
97
+ const saved = index.get(key);
98
+ if (saved) {
99
+ const answer = await executeScope({
100
+ source: saved.source,
101
+ request: input.request,
102
+ records: input.records,
103
+ timeoutMs: input.budgets.maxWallClockMs,
104
+ });
105
+ return { handled: true, answer };
106
+ }
107
+ if (!learn)
108
+ return { handled: false };
109
+ const existing = answering.get(key);
110
+ if (existing)
111
+ return existing;
112
+ const pending = (async () => {
113
+ const requestCodeFn = await coder();
114
+ if (!requestCodeFn)
115
+ return { handled: false };
116
+ const learned = await learnScope({
117
+ requestCode: requestCodeFn,
118
+ coderDeps: options.coderDeps,
119
+ request: input.request,
120
+ records: input.records,
121
+ timeoutMs: input.budgets.maxWallClockMs,
122
+ });
123
+ if (!learned)
124
+ return { handled: false };
125
+ const stored = await saveFunction({
126
+ dir,
127
+ packageName,
128
+ kind: "scope",
129
+ signature,
130
+ source: learned.source,
131
+ });
132
+ index.set(key, stored);
133
+ return { handled: true, answer: learned.answer };
134
+ })().finally(() => {
135
+ answering.delete(key);
136
+ });
137
+ answering.set(key, pending);
138
+ return pending;
139
+ },
140
+ };
141
+ }
142
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import type { ScopeRequest, ScoperBudgets, ScoperProfile } from "@x12i/memorix-scoper-contracts";
2
+ import type { ContextualSdk } from "@x12i/memorix-scoper-sdk";
3
+ import type { ScopeFunctionRecord } from "@x12i/memorix-scoper";
4
+ import { FunctionSourceError } from "./source.js";
5
+ export declare class FunctionRunError extends Error {
6
+ readonly code: "RUN_FAILED" | "TIMEOUT" | "BAD_RESULT";
7
+ constructor(message: string, code: FunctionRunError["code"]);
8
+ }
9
+ export type SubjectMethod = "get" | "list" | "query";
10
+ export interface SubjectApi {
11
+ get(args: Record<string, unknown>): Promise<unknown>;
12
+ list(args: Record<string, unknown>): Promise<unknown>;
13
+ query(args: Record<string, unknown>): Promise<unknown>;
14
+ }
15
+ export declare function runHandle(options: {
16
+ source: string;
17
+ mode: "query" | "scope";
18
+ input: Record<string, unknown>;
19
+ subjects?: SubjectApi;
20
+ timeoutMs: number;
21
+ }): Promise<unknown>;
22
+ export interface LiveSubjects {
23
+ api: SubjectApi;
24
+ seen: Map<string, ScopeFunctionRecord>;
25
+ }
26
+ export declare function createLiveSubjects(sdk: ContextualSdk, profile: ScoperProfile, budgets: ScoperBudgets): LiveSubjects;
27
+ export declare function queryPayload(request: ScopeRequest, profile: ScoperProfile, sdk: ContextualSdk): Record<string, unknown>;
28
+ export declare function scopePayload(request: ScopeRequest, records: ScopeFunctionRecord[]): Record<string, unknown>;
29
+ export declare function acceptRecords(raw: unknown, seen: Map<string, ScopeFunctionRecord>): ScopeFunctionRecord[];
30
+ export declare function acceptAnswer(raw: unknown): string;
31
+ export declare function recordIds(records: ScopeFunctionRecord[]): string;
32
+ export declare function isSourceRejection(error: unknown): error is FunctionSourceError;
33
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAwB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAExE,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC;gBAE3C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;CAK5D;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AA+BD,wBAAsB,SAAS,CAAC,OAAO,EAAE;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiEnB;AAgCD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACxC;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,GACrB,YAAY,CAwEd;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUvH;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,mBAAmB,EAAE,CAsBzG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CASjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAKhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAE9E"}