@x12i/memorix-scoper 2.2.0 → 2.2.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/package.json +14 -14
- package/dist/epistemic.d.ts +0 -4
- package/dist/epistemic.d.ts.map +0 -1
- package/dist/epistemic.js +0 -34
- package/dist/epistemic.js.map +0 -1
- package/dist/guard.test.d.ts +0 -2
- package/dist/guard.test.d.ts.map +0 -1
- package/dist/guard.test.js +0 -13
- package/dist/guard.test.js.map +0 -1
- package/dist/reasoner/ai-dispatcher.test.d.ts +0 -2
- package/dist/reasoner/ai-dispatcher.test.d.ts.map +0 -1
- package/dist/reasoner/ai-dispatcher.test.js +0 -70
- package/dist/reasoner/ai-dispatcher.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/memorix-scoper",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Memorix Scoper core — profiles, reasoner, coordinator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,28 +24,28 @@
|
|
|
24
24
|
"registry": "https://registry.npmjs.org/",
|
|
25
25
|
"tag": "latest"
|
|
26
26
|
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc -p tsconfig.json",
|
|
29
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
30
|
+
"test": "vitest run"
|
|
31
|
+
},
|
|
27
32
|
"dependencies": {
|
|
28
|
-
"
|
|
29
|
-
"@x12i/memorix-scoper-
|
|
30
|
-
"@x12i/memorix-scoper-
|
|
31
|
-
"
|
|
33
|
+
"@x12i/memorix-scoper-contracts": "workspace:*",
|
|
34
|
+
"@x12i/memorix-scoper-profiles": "workspace:*",
|
|
35
|
+
"@x12i/memorix-scoper-sdk": "workspace:*",
|
|
36
|
+
"zod": "^3.25.76"
|
|
32
37
|
},
|
|
33
38
|
"peerDependencies": {
|
|
34
39
|
"@x12i/ai-dispatcher": "^2.4.1"
|
|
35
40
|
},
|
|
36
41
|
"devDependencies": {
|
|
37
42
|
"@x12i/ai-dispatcher": "^2.4.1",
|
|
43
|
+
"@x12i/memorix-scoper-testing": "workspace:*",
|
|
38
44
|
"typescript": "^5.9.3",
|
|
39
|
-
"vitest": "^3.2.7"
|
|
40
|
-
"@x12i/memorix-scoper-testing": "1.0.0"
|
|
45
|
+
"vitest": "^3.2.7"
|
|
41
46
|
},
|
|
42
47
|
"engines": {
|
|
43
48
|
"node": ">=22"
|
|
44
49
|
},
|
|
45
|
-
"license": "MIT"
|
|
46
|
-
|
|
47
|
-
"build": "tsc -p tsconfig.json",
|
|
48
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
49
|
-
"test": "vitest run"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
50
|
+
"license": "MIT"
|
|
51
|
+
}
|
package/dist/epistemic.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { EvidenceItem, WarningItem } from "@x12i/memorix-scoper-contracts";
|
|
2
|
-
export declare function validateEpistemicClaims(items: EvidenceItem[]): WarningItem[];
|
|
3
|
-
export declare function assertEvidenceHasRefs(items: EvidenceItem[]): void;
|
|
4
|
-
//# sourceMappingURL=epistemic.d.ts.map
|
package/dist/epistemic.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"epistemic.d.ts","sourceRoot":"","sources":["../src/epistemic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAQhF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAoB5E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAMjE"}
|
package/dist/epistemic.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const FORBIDDEN_PROMOTIONS = [
|
|
2
|
-
{ from: /POLICY_CANDIDATE/i, to: /\bREACHABLE\b/i, code: "EPSTEMIC_POLICY_TO_REACHABLE" },
|
|
3
|
-
{ from: /\bOBSERVED\b/i, to: /\bREACHABLE\b/i, code: "EPSTEMIC_OBSERVED_TO_REACHABLE" },
|
|
4
|
-
{ from: /\bUNKNOWN\b/i, to: /\bNO_|IMPOSSIBLE|ABSENCE\b/i, code: "EPSTEMIC_UNKNOWN_NEGATIVE" },
|
|
5
|
-
];
|
|
6
|
-
export function validateEpistemicClaims(items) {
|
|
7
|
-
const warnings = [];
|
|
8
|
-
for (const item of items) {
|
|
9
|
-
const blob = `${item.assertionType} ${item.fact} ${JSON.stringify(item.value)}`;
|
|
10
|
-
for (const rule of FORBIDDEN_PROMOTIONS) {
|
|
11
|
-
if (rule.from.test(item.assertionType) && rule.to.test(blob)) {
|
|
12
|
-
warnings.push({
|
|
13
|
-
code: rule.code,
|
|
14
|
-
message: `Evidence ${item.evidenceId} appears to promote ${item.assertionType} incorrectly`,
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if (/weak.?correlation/i.test(item.assertionType) && /\bidentity\b/i.test(blob)) {
|
|
19
|
-
warnings.push({
|
|
20
|
-
code: "EPSTEMIC_WEAK_CORRELATION_IDENTITY",
|
|
21
|
-
message: `Evidence ${item.evidenceId} must not treat weak correlation as identity`,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return warnings;
|
|
26
|
-
}
|
|
27
|
-
export function assertEvidenceHasRefs(items) {
|
|
28
|
-
for (const item of items) {
|
|
29
|
-
if (!item.ref || !item.evidenceId) {
|
|
30
|
-
throw new Error(`Evidence item missing provenance: ${item.evidenceId ?? "?"}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=epistemic.js.map
|
package/dist/epistemic.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"epistemic.js","sourceRoot":"","sources":["../src/epistemic.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAsD;IAC9E,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,8BAA8B,EAAE;IACzF,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gCAAgC,EAAE;IACvF,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,2BAA2B,EAAE;CAC/F,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,KAAqB;IAC3D,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChF,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,YAAY,IAAI,CAAC,UAAU,uBAAuB,IAAI,CAAC,aAAa,cAAc;iBAC5F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,oCAAoC;gBAC1C,OAAO,EAAE,YAAY,IAAI,CAAC,UAAU,8CAA8C;aACnF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAqB;IACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/guard.test.d.ts
DELETED
package/dist/guard.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guard.test.d.ts","sourceRoot":"","sources":["../src/guard.test.ts"],"names":[],"mappings":""}
|
package/dist/guard.test.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, beforeEach } from "vitest";
|
|
2
|
-
import { enterScopeTrace, __resetScopeTracesForTests } from "./guard.js";
|
|
3
|
-
import { ScoperError } from "@x12i/memorix-scoper-contracts";
|
|
4
|
-
describe("invocation guard", () => {
|
|
5
|
-
beforeEach(() => __resetScopeTracesForTests());
|
|
6
|
-
it("rejects recursive scope entry", () => {
|
|
7
|
-
const exit = enterScopeTrace("t1");
|
|
8
|
-
expect(() => enterScopeTrace("t1")).toThrow(ScoperError);
|
|
9
|
-
exit();
|
|
10
|
-
expect(() => enterScopeTrace("t1")).not.toThrow();
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=guard.test.js.map
|
package/dist/guard.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guard.test.js","sourceRoot":"","sources":["../src/guard.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/C,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC;QACP,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-dispatcher.test.d.ts","sourceRoot":"","sources":["../../src/reasoner/ai-dispatcher.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { AiDispatcherReasoner } from "./ai-dispatcher.js";
|
|
3
|
-
import { ScoperError } from "@x12i/memorix-scoper-contracts";
|
|
4
|
-
function planningInput() {
|
|
5
|
-
return {
|
|
6
|
-
request: { objective: "x" },
|
|
7
|
-
context: {
|
|
8
|
-
orgId: "o",
|
|
9
|
-
agentIds: ["a"],
|
|
10
|
-
callerId: "c",
|
|
11
|
-
permissions: ["*"],
|
|
12
|
-
classificationCeiling: "*",
|
|
13
|
-
traceId: "t",
|
|
14
|
-
deadlineAt: new Date().toISOString(),
|
|
15
|
-
budgets: {
|
|
16
|
-
maxWallTimeMs: 1,
|
|
17
|
-
maxSdkCalls: 1,
|
|
18
|
-
maxPages: 1,
|
|
19
|
-
maxRecords: 1,
|
|
20
|
-
maxBytes: 1,
|
|
21
|
-
maxEvidenceItems: 1,
|
|
22
|
-
maxRelationshipDepth: 0,
|
|
23
|
-
maxReasoningRounds: 1,
|
|
24
|
-
maxParallelCalls: 1,
|
|
25
|
-
},
|
|
26
|
-
flags: { bagsOnly: true, nexumExploreEnabled: false },
|
|
27
|
-
},
|
|
28
|
-
catalog: [{
|
|
29
|
-
id: "subjects.list",
|
|
30
|
-
version: "1",
|
|
31
|
-
description: "d",
|
|
32
|
-
surface: "subject",
|
|
33
|
-
operation: "subjects.list",
|
|
34
|
-
physicalContractVersion: "memorix-record/2",
|
|
35
|
-
identifiers: [],
|
|
36
|
-
relationships: [],
|
|
37
|
-
epistemicPlanes: [],
|
|
38
|
-
limits: {},
|
|
39
|
-
classification: "internal",
|
|
40
|
-
requiredPermissions: [],
|
|
41
|
-
mayBeMissing: true,
|
|
42
|
-
limitations: [],
|
|
43
|
-
prohibitedInferences: [],
|
|
44
|
-
owner: "t",
|
|
45
|
-
}],
|
|
46
|
-
profiles: [],
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
describe("AiDispatcherReasoner", () => {
|
|
50
|
-
it("repairs once then fails on invalid output", async () => {
|
|
51
|
-
const run = vi.fn()
|
|
52
|
-
.mockResolvedValueOnce({ text: "not-json" })
|
|
53
|
-
.mockResolvedValueOnce({ text: "{\"planId\":1}" });
|
|
54
|
-
const reasoner = new AiDispatcherReasoner({ provider: "openrouter", openrouter: { apiKey: "test" } }, { provider: "openrouter", run, executeStreamingChat: async function* () { }, compile: () => ({}) });
|
|
55
|
-
await expect(reasoner.createPlan(planningInput())).rejects.toBeInstanceOf(ScoperError);
|
|
56
|
-
expect(run).toHaveBeenCalledTimes(2);
|
|
57
|
-
});
|
|
58
|
-
it("parses a valid plan from dispatcher.run", async () => {
|
|
59
|
-
const plan = {
|
|
60
|
-
planId: "p1",
|
|
61
|
-
objective: "x",
|
|
62
|
-
profiles: ["general"],
|
|
63
|
-
steps: [],
|
|
64
|
-
};
|
|
65
|
-
const run = vi.fn().mockResolvedValue({ text: JSON.stringify(plan) });
|
|
66
|
-
const reasoner = new AiDispatcherReasoner({ provider: "openrouter", openrouter: { apiKey: "test" } }, { provider: "openrouter", run, executeStreamingChat: async function* () { }, compile: () => ({}) });
|
|
67
|
-
await expect(reasoner.createPlan(planningInput())).resolves.toEqual(plan);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
//# sourceMappingURL=ai-dispatcher.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-dispatcher.test.js","sourceRoot":"","sources":["../../src/reasoner/ai-dispatcher.test.ts"],"names":[],"mappings":"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"}
|