@rubytech/create-maxy-code 0.1.348 → 0.1.349
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 +1 -1
- package/payload/platform/lib/graph-style/dist/index.d.ts +1 -1
- package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-style/dist/index.js +20 -12
- package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-style/src/__tests__/parity.test.ts +9 -9
- package/payload/platform/lib/graph-style/src/index.ts +20 -12
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +3 -2
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +3 -2
- package/payload/platform/neo4j/schema.cypher +110 -31
- package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
- package/payload/platform/plugins/admin/hooks/lib/maxy-mcp-plugins.txt +1 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +36 -3
- package/payload/platform/plugins/docs/references/calendar-booking.md +1 -1
- package/payload/platform/plugins/docs/references/joblogic.md +28 -0
- package/payload/platform/plugins/docs/references/memory-guide.md +1 -1
- package/payload/platform/plugins/joblogic/.claude-plugin/plugin.json +21 -0
- package/payload/platform/plugins/joblogic/PLUGIN.md +182 -0
- package/payload/platform/plugins/joblogic/lib/mcp-spawn-tee/index.js +193 -0
- package/payload/platform/plugins/joblogic/lib/mcp-spawn-tee/package.json +3 -0
- package/payload/platform/plugins/joblogic/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/joblogic/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/index.js +229 -0
- package/payload/platform/plugins/joblogic/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.d.ts +31 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.d.ts.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.js +78 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.js.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.d.ts +35 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.d.ts.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.js +106 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.js.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.d.ts +8 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.d.ts.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.js +41 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.js.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.d.ts +21 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.d.ts.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.js +47 -0
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.js.map +1 -0
- package/payload/platform/plugins/joblogic/mcp/package.json +10 -0
- package/payload/platform/plugins/joblogic/skills/joblogic/SKILL.md +32 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js +28 -22
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-cypher-drift.test.js +8 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-cypher-drift.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js +39 -10
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/relationship-patterns.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/relationship-patterns.js +1 -1
- package/payload/platform/plugins/memory/references/schema-construction.md +152 -57
- package/payload/platform/plugins/memory/references/schema-trades.md +22 -24
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +46 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/server/public/assets/{AdminLoginScreens-B_5wYcR-.js → AdminLoginScreens-BEzoTk56.js} +1 -1
- package/payload/server/public/assets/{AdminShell-CMV3XY-s.js → AdminShell-BG7YD4UO.js} +1 -1
- package/payload/server/public/assets/{Checkbox-LplFUKpb.js → Checkbox-CvTFOczj.js} +1 -1
- package/payload/server/public/assets/{OperatorConversations-C4Cx814-.css → OperatorConversations-CnP9Y6g2.css} +1 -1
- package/payload/server/public/assets/{admin-3QQtd7j2.js → admin-Bhxa1HOy.js} +1 -1
- package/payload/server/public/assets/{browser-D5q26eZL.js → browser-BAQFuyma.js} +1 -1
- package/payload/server/public/assets/calendar-sSr6zUjW.js +1 -0
- package/payload/server/public/assets/chat-ZH4Fsyu0.js +1 -0
- package/payload/server/public/assets/{data-HwT5wPmj.js → data-CH6GNBO3.js} +1 -1
- package/payload/server/public/assets/{graph-DFQbqmi9.js → graph-DbGjFYPS.js} +1 -1
- package/payload/server/public/assets/graph-labels-IGIEr-uc.js +1 -0
- package/payload/server/public/assets/{operator-BlCyq4q1.js → operator-Ba5afDyM.js} +1 -1
- package/payload/server/public/assets/{page-drg1V-yA.js → page-D7uwMUOy.js} +1 -1
- package/payload/server/public/assets/{public-BVjeYfsD.js → public-DikYWzOd.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +4 -4
- package/payload/server/public/chat.html +5 -5
- package/payload/server/public/data.html +4 -4
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/operator.html +7 -7
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +32 -15
- package/payload/server/public/assets/calendar-Csbdj7rp.js +0 -1
- package/payload/server/public/assets/chat-Ct86qtMI.js +0 -1
- package/payload/server/public/assets/graph-labels-kCti2CaC.js +0 -1
- /package/payload/server/public/assets/{OperatorConversations-Bp-g80PM.js → OperatorConversations-DU8CqO-z.js} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// JobLogic per-account secret store. Plain 0600 JSON in the brand-isolated,
|
|
2
|
+
// delete-protected secrets/ dir (the quickbooks + cloudflare precedent). Never
|
|
3
|
+
// thrown from on read — a missing/corrupt store yields null so module init and
|
|
4
|
+
// tool enumeration survive a no-creds account.
|
|
5
|
+
import { mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
6
|
+
import { resolve, join } from "node:path";
|
|
7
|
+
function accountsDir(platformRoot) {
|
|
8
|
+
return resolve(platformRoot, "..", "data/accounts");
|
|
9
|
+
}
|
|
10
|
+
export function accountSecretsDir(platformRoot, accountId) {
|
|
11
|
+
return join(accountsDir(platformRoot), accountId, "secrets");
|
|
12
|
+
}
|
|
13
|
+
function storePath(platformRoot, accountId) {
|
|
14
|
+
return join(accountSecretsDir(platformRoot, accountId), "joblogic.json");
|
|
15
|
+
}
|
|
16
|
+
export function readStore(platformRoot, accountId) {
|
|
17
|
+
const file = storePath(platformRoot, accountId);
|
|
18
|
+
if (!existsSync(file))
|
|
19
|
+
return null;
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(readFileSync(file, "utf-8"));
|
|
22
|
+
if (!parsed.clientId || !parsed.clientSecret || !parsed.tenantId || !parsed.environment)
|
|
23
|
+
return null;
|
|
24
|
+
return { engineerMap: {}, ...parsed };
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function writeStore(platformRoot, accountId, store) {
|
|
31
|
+
mkdirSync(accountSecretsDir(platformRoot, accountId), { recursive: true });
|
|
32
|
+
writeFileSync(storePath(platformRoot, accountId), JSON.stringify(store, null, 2), { mode: 0o600 });
|
|
33
|
+
}
|
|
34
|
+
export function setCredentials(platformRoot, accountId, creds) {
|
|
35
|
+
const prev = readStore(platformRoot, accountId);
|
|
36
|
+
writeStore(platformRoot, accountId, { ...creds, engineerMap: prev?.engineerMap ?? {} });
|
|
37
|
+
}
|
|
38
|
+
export function setEngineerMap(platformRoot, accountId, entries) {
|
|
39
|
+
const prev = readStore(platformRoot, accountId);
|
|
40
|
+
if (!prev)
|
|
41
|
+
throw new Error("cannot set engineer map before credentials are set");
|
|
42
|
+
writeStore(platformRoot, accountId, { ...prev, engineerMap: { ...prev.engineerMap, ...entries } });
|
|
43
|
+
}
|
|
44
|
+
export function resolveEngineer(store, senderPhone) {
|
|
45
|
+
return store.engineerMap[senderPhone] ?? null;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,+CAA+C;AAC/C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAc1C,SAAS,WAAW,CAAC,YAAoB;IACvC,OAAO,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AACtD,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,SAAiB;IACvE,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC;AACD,SAAS,SAAS,CAAC,YAAoB,EAAE,SAAiB;IACxD,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,eAAe,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,YAAoB,EAAE,SAAiB;IAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAqB,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACrG,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,MAAM,EAAa,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,YAAoB,EAAE,SAAiB,EAAE,KAAc;IACzE,SAAS,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,aAAa,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,YAAoB,EACpB,SAAiB,EACjB,KAA+F;IAE/F,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAChD,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,YAAoB,EACpB,SAAiB,EACjB,OAA+B;IAE/B,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACjF,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,WAAmB;IACjE,OAAO,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@maxy/joblogic",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"scripts": { "build": "tsc", "start": "node dist/index.js" },
|
|
8
|
+
"dependencies": { "@modelcontextprotocol/sdk": "^1.12.1", "zod": "^3.24.0" },
|
|
9
|
+
"devDependencies": { "typescript": "^5.7.0", "@types/node": "^22.0.0" }
|
|
10
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: joblogic
|
|
3
|
+
description: Connect JobLogic and drive the field-service job lifecycle. Use when the operator wants to link JobLogic, read customers/sites/jobs/visits/quotes/invoices/assets/timesheets, or make writes (create a visit, log job costs, set a job status, raise an invoice) from instructions sent by field staff. Covers the one-time JobLogic Support onboarding and source-IP whitelisting, then the agent-driven read/write surface.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# JobLogic connector
|
|
7
|
+
|
|
8
|
+
JobLogic is the operator's field-service system of record. This connector is bespoke to one account: it does nothing on any other install. The agent reads and writes across the job lifecycle under one company credential. Field staff never call JobLogic themselves; they send a voice note or message to this install, the agent interprets it, and this install makes the write. So only this install's outbound IP ever touches JobLogic.
|
|
9
|
+
|
|
10
|
+
Success is: the credentials are stored, `joblogic-connection-status` acquires a token, and a read such as `joblogic-customer-list` returns the company's data from UAT.
|
|
11
|
+
|
|
12
|
+
## What the operator does once (relay this; the agent cannot do it)
|
|
13
|
+
|
|
14
|
+
The agent cannot raise a support ticket or whitelist an IP. The operator does this once with JobLogic.
|
|
15
|
+
|
|
16
|
+
- **Raise a JobLogic Support ticket** for API access. Ask for a UAT (test) account first, then production. JobLogic Support issues a `client_id` and `client_secret` (OAuth client_credentials) and tells the operator the company `tenantId`.
|
|
17
|
+
- **Whitelist the install's outbound source IP.** JobLogic filters API calls by the public IP they originate from. The install's inbound tunnel does not fix the outbound IP, and a laptop's public IP is usually dynamic. The operator resolves one of: run the install from one location with a stable ISP IP and register that IP; route the connector's outbound through a fixed-egress proxy with a static IP and register that; or confirm with JobLogic that production drops the per-IP filter. Until one holds, calls fail and the logs show `op=access-fault kind=whitelist`.
|
|
18
|
+
|
|
19
|
+
## What the agent does after that
|
|
20
|
+
|
|
21
|
+
- **Store the credentials.** Run `joblogic-credentials-set` with the `client_id`, `client_secret`, `tenantId`, and `environment` (`uat` first). They are written only to this account's secrets file, never echoed.
|
|
22
|
+
- **Confirm it works.** Run `joblogic-connection-status`. It acquires a token and reports the environment and tenant. If it fails, the logs distinguish an auth problem from a whitelist problem from a network blip.
|
|
23
|
+
- **Set up attribution.** The company credential is not per-user, so JobLogic will not auto-attribute a write to the engineer who reported it. Run `joblogic-engineer-map-set` to map each field staffer's phone number to their JobLogic engineer id. When a write comes from a message, pass the sender's phone so the connector stamps the right engineer on it.
|
|
24
|
+
- **Read and write.** Reads cover customers, sites, jobs, engineers, visits, quotes, invoices, assets, and timesheets. Writes cover creating and updating those records and the lifecycle transitions: deploy a visit, log job costs, set a job status, approve a quote, raise an invoice, add a note or attachment.
|
|
25
|
+
|
|
26
|
+
## Authorization and safety
|
|
27
|
+
|
|
28
|
+
A write is authorized by the person who messaged the install asking for it. That instruction is the authorization; the agent does not interpose a second confirmation step. The one write safety that always applies is idempotency: every create takes an idempotency key, so a retry or a write whose response was lost does not create a duplicate record. Derive the key deterministically from the write's natural details so the same instruction maps to the same key.
|
|
29
|
+
|
|
30
|
+
## Use UAT for all testing
|
|
31
|
+
|
|
32
|
+
Every read and write test runs against the UAT environment, never production. Switch `environment` to `production` only once the operator confirms UAT behaves correctly and production credentials and IP whitelisting are in place.
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js
CHANGED
|
@@ -11,11 +11,11 @@ Some table here.
|
|
|
11
11
|
|
|
12
12
|
\`\`\`
|
|
13
13
|
(:Job)-[:HAS_VALUATION]->(:Valuation)
|
|
14
|
-
(:Job)-[:HAS_QUOTE]->(:
|
|
15
|
-
(:
|
|
16
|
-
(:Valuation)-[:VALUES]->(:
|
|
17
|
-
(:Job)-[:
|
|
18
|
-
(:
|
|
14
|
+
(:Job)-[:HAS_QUOTE]->(:Quote)
|
|
15
|
+
(:Quote)-[:HAS_LINE]->(:QuoteLine)
|
|
16
|
+
(:Valuation)-[:VALUES]->(:QuoteLine)
|
|
17
|
+
(:Job)-[:FOR_CUSTOMER]->(:Customer)
|
|
18
|
+
(:Invoice)-[:ON_PURCHASE_ORDER]->(:PurchaseOrder)
|
|
19
19
|
\`\`\`
|
|
20
20
|
|
|
21
21
|
Some trailing prose with an arrow (:Job)-[:NOT_A_PATTERN]->(:Thing) outside the block.
|
|
@@ -37,15 +37,15 @@ describe("parseRelationshipPatterns", () => {
|
|
|
37
37
|
sourceFile: "schema-construction.md",
|
|
38
38
|
});
|
|
39
39
|
expect(out).toContainEqual({
|
|
40
|
-
source: "
|
|
41
|
-
edgeType: "
|
|
42
|
-
target: "
|
|
40
|
+
source: "Quote",
|
|
41
|
+
edgeType: "HAS_LINE",
|
|
42
|
+
target: "QuoteLine",
|
|
43
43
|
sourceFile: "schema-construction.md",
|
|
44
44
|
});
|
|
45
45
|
expect(out).toContainEqual({
|
|
46
46
|
source: "Valuation",
|
|
47
47
|
edgeType: "VALUES",
|
|
48
|
-
target: "
|
|
48
|
+
target: "QuoteLine",
|
|
49
49
|
sourceFile: "schema-construction.md",
|
|
50
50
|
});
|
|
51
51
|
// The arrow outside the fenced block must NOT be parsed.
|
|
@@ -88,7 +88,7 @@ describe("checkEdgeAgainstPatterns (warn-only semantics)", () => {
|
|
|
88
88
|
governed: true,
|
|
89
89
|
allowed: true,
|
|
90
90
|
});
|
|
91
|
-
expect(checkEdgeAgainstPatterns(["
|
|
91
|
+
expect(checkEdgeAgainstPatterns(["Quote"], "HAS_LINE", patterns)).toEqual({
|
|
92
92
|
governed: true,
|
|
93
93
|
allowed: true,
|
|
94
94
|
});
|
|
@@ -110,20 +110,20 @@ describe("checkEdgeAgainstPatterns (warn-only semantics)", () => {
|
|
|
110
110
|
describe("real schema-construction.md (Phase 1 + Phase 2 integration)", () => {
|
|
111
111
|
const md = readFileSync(resolve(import.meta.dirname, "../../../../references/schema-construction.md"), "utf-8");
|
|
112
112
|
const patterns = parseRelationshipPatterns(md, "schema-construction.md");
|
|
113
|
-
it("owns
|
|
113
|
+
it("owns lines on the Quote + adds VALUES, never (:Job)-[:HAS_LINE]", () => {
|
|
114
114
|
expect(patterns).toContainEqual({
|
|
115
|
-
source: "
|
|
116
|
-
edgeType: "
|
|
117
|
-
target: "
|
|
115
|
+
source: "Quote",
|
|
116
|
+
edgeType: "HAS_LINE",
|
|
117
|
+
target: "QuoteLine",
|
|
118
118
|
sourceFile: "schema-construction.md",
|
|
119
119
|
});
|
|
120
120
|
expect(patterns).toContainEqual({
|
|
121
121
|
source: "Valuation",
|
|
122
122
|
edgeType: "VALUES",
|
|
123
|
-
target: "
|
|
123
|
+
target: "QuoteLine",
|
|
124
124
|
sourceFile: "schema-construction.md",
|
|
125
125
|
});
|
|
126
|
-
expect(patterns.find((p) => p.source === "Job" && p.edgeType === "
|
|
126
|
+
expect(patterns.find((p) => p.source === "Job" && p.edgeType === "HAS_LINE")).toBeUndefined();
|
|
127
127
|
});
|
|
128
128
|
it("the observed drift edges are off-allowlist, the canonical ones pass", () => {
|
|
129
129
|
expect(checkEdgeAgainstPatterns(["Job"], "JOB_FOR", patterns).allowed).toBe(false);
|
|
@@ -131,15 +131,21 @@ describe("real schema-construction.md (Phase 1 + Phase 2 integration)", () => {
|
|
|
131
131
|
expect(checkEdgeAgainstPatterns(["Job"], "HAS_VALUATION", patterns).allowed).toBe(true);
|
|
132
132
|
expect(checkEdgeAgainstPatterns(["Job"], "HAS_QUOTE", patterns).allowed).toBe(true);
|
|
133
133
|
});
|
|
134
|
-
it("adopts the
|
|
134
|
+
it("adopts the JobLogic cost ontology: (:Job)-[:HAS_COST]->(:JobCost)-[:INCURRED_BY]->(:Engineer)", () => {
|
|
135
135
|
expect(patterns).toContainEqual({
|
|
136
|
-
source: "
|
|
137
|
-
edgeType: "
|
|
138
|
-
target: "
|
|
136
|
+
source: "Job",
|
|
137
|
+
edgeType: "HAS_COST",
|
|
138
|
+
target: "JobCost",
|
|
139
|
+
sourceFile: "schema-construction.md",
|
|
140
|
+
});
|
|
141
|
+
expect(patterns).toContainEqual({
|
|
142
|
+
source: "JobCost",
|
|
143
|
+
edgeType: "INCURRED_BY",
|
|
144
|
+
target: "Engineer",
|
|
139
145
|
sourceFile: "schema-construction.md",
|
|
140
146
|
});
|
|
141
|
-
//
|
|
142
|
-
// :Person write is never newly governed
|
|
147
|
+
// :Engineer is an additional label on :Person; the construction edges are
|
|
148
|
+
// anchored on :Engineer, so a base :Person write is never newly governed.
|
|
143
149
|
expect(patterns.find((p) => p.source === "Person")).toBeUndefined();
|
|
144
150
|
});
|
|
145
151
|
});
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-patterns.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/relationship-patterns.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEF,MAAM,IAAI,GAAG;;;;;;CAMZ,CAAC;AAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,GAAG,GAAG,yBAAyB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,wBAAwB;SACrC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;YACzB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"relationship-patterns.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/relationship-patterns.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,10 +23,14 @@ const PROSE_ONLY_LABELS = new Set([
|
|
|
23
23
|
// schema-estate-agent.md treats Applicant as an additional label on a
|
|
24
24
|
// base :Person node; there is no standalone :Applicant.
|
|
25
25
|
"Applicant",
|
|
26
|
-
// schema-construction.md treats
|
|
27
|
-
//
|
|
28
|
-
// standalone :
|
|
29
|
-
"
|
|
26
|
+
// schema-construction.md treats Engineer as an additional label on a base
|
|
27
|
+
// :Person node (the field-engineer / CIS worker-pay model); there is no
|
|
28
|
+
// standalone :Engineer, so it carries no constraint/index of its own.
|
|
29
|
+
"Engineer",
|
|
30
|
+
// schema-construction.md treats Supplier as an additional label on a base
|
|
31
|
+
// :Organization node (the supplier-invoice model); there is no standalone
|
|
32
|
+
// :Supplier, so it carries no constraint/index of its own.
|
|
33
|
+
"Supplier",
|
|
30
34
|
// Email is retired: Task 321 folded threads onto :KnowledgeDocument
|
|
31
35
|
// {source:'email'}, Task 426 then moved them onto :ConversationArchive
|
|
32
36
|
// {source:'email'}. The :Email label never reaches the graph; it is
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-cypher-drift.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-cypher-drift.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/schema-cypher-drift.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAE3G,qDAAqD;AACrD,EAAE;AACF,yDAAyD;AACzD,uEAAuE;AACvE,0CAA0C;AAC1C,sEAAsE;AACtE,0EAA0E;AAC1E,uEAAuE;AACvE,oEAAoE;AACpE,qEAAqE;AACrE,iCAAiC;AAEjC,MAAM,cAAc,GAAG,OAAO,CAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,wBAAwB,CACzB,CAAC;AACF,MAAM,kBAAkB,GAAG,OAAO,CAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,uCAAuC,CACxC,CAAC;AAEF,oEAAoE;AACpE,uEAAuE;AACvE,oEAAoE;AACpE,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS;IACxC,sEAAsE;IACtE,wDAAwD;IACxD,WAAW;IACX,0EAA0E;IAC1E,
|
|
1
|
+
{"version":3,"file":"schema-cypher-drift.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/schema-cypher-drift.test.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js
CHANGED
|
@@ -31,10 +31,10 @@ const CONSTRUCTION = {
|
|
|
31
31
|
source: "brand-default",
|
|
32
32
|
},
|
|
33
33
|
};
|
|
34
|
-
test("
|
|
35
|
-
const env = makeEnv(["
|
|
34
|
+
test("Quote with totalPaymentDue is accepted", () => {
|
|
35
|
+
const env = makeEnv(["Quote"]);
|
|
36
36
|
expect(() => validateWrite({
|
|
37
|
-
labels: ["
|
|
37
|
+
labels: ["Quote"],
|
|
38
38
|
properties: {
|
|
39
39
|
jobId: "1840",
|
|
40
40
|
ref: "Q-1840",
|
|
@@ -45,10 +45,10 @@ test("QuoteDocument with totalPaymentDue is accepted", () => {
|
|
|
45
45
|
accountId: ACCT,
|
|
46
46
|
}, env, CONSTRUCTION)).not.toThrow();
|
|
47
47
|
});
|
|
48
|
-
test("
|
|
49
|
-
const env = makeEnv(["
|
|
48
|
+
test("Quote with amount is rejected with the synonym message", () => {
|
|
49
|
+
const env = makeEnv(["Quote"]);
|
|
50
50
|
expect(() => validateWrite({
|
|
51
|
-
labels: ["
|
|
51
|
+
labels: ["Quote"],
|
|
52
52
|
properties: {
|
|
53
53
|
jobId: "1840",
|
|
54
54
|
ref: "Q-1840",
|
|
@@ -102,10 +102,39 @@ test("Job with empty-string required property is still rejected (isPresent bound
|
|
|
102
102
|
labels: ["Job"],
|
|
103
103
|
properties: {
|
|
104
104
|
jobId: "1809",
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
status: "",
|
|
106
|
+
jobType: "Maintenance",
|
|
107
|
+
},
|
|
108
|
+
accountId: ACCT,
|
|
109
|
+
}, env, CONSTRUCTION)).toThrow(/missing required property/);
|
|
110
|
+
});
|
|
111
|
+
// Task 1084 — a logged labour day is a :JobCost {costType:'labour'}. Its
|
|
112
|
+
// required set is the stable identity (accountId, costType) so the timesheet
|
|
113
|
+
// worker-day shape validates; the JobLogic cost attributes are optional.
|
|
114
|
+
test("JobCost labour day with costType is accepted (timesheet roll-up write)", () => {
|
|
115
|
+
const env = makeEnv(["JobCost"]);
|
|
116
|
+
expect(() => validateWrite({
|
|
117
|
+
labels: ["JobCost"],
|
|
118
|
+
properties: {
|
|
119
|
+
costId: "p123-2026-06-22",
|
|
120
|
+
costType: "labour",
|
|
121
|
+
personId: "p123",
|
|
122
|
+
date: "2026-06-22",
|
|
123
|
+
site: "12 The Avenue",
|
|
124
|
+
description: "Full day groundworks",
|
|
125
|
+
dayHundredths: 100,
|
|
126
|
+
},
|
|
127
|
+
accountId: ACCT,
|
|
128
|
+
}, env, CONSTRUCTION)).not.toThrow();
|
|
129
|
+
});
|
|
130
|
+
test("JobCost without costType is rejected (isPresent boundary)", () => {
|
|
131
|
+
const env = makeEnv(["JobCost"]);
|
|
132
|
+
expect(() => validateWrite({
|
|
133
|
+
labels: ["JobCost"],
|
|
134
|
+
properties: {
|
|
135
|
+
costId: "p123-2026-06-22",
|
|
136
|
+
personId: "p123",
|
|
137
|
+
date: "2026-06-22",
|
|
109
138
|
},
|
|
110
139
|
accountId: ACCT,
|
|
111
140
|
}, env, CONSTRUCTION)).toThrow(/missing required property/);
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-write-path-task802.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/schema-write-path-task802.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,8EAA8E;AAC9E,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,IAAI,GAAG,sCAAsC,CAAC;AAEpD,SAAS,cAAc,CAAC,MAAgB;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO;QACL,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QACpC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QAClC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,MAAgB;IAC/B,OAAO;QACL,MAAM,EAAE,UAAU,EAAE;QACpB,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC;QAClC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,qDAAqD;AACrD,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE;QACf,gBAAgB,EAAE,qBAAqB;QACvC,MAAM,EAAE,eAAwB;KACjC;CACF,CAAC;AAEF,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"schema-write-path-task802.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/schema-write-path-task802.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,8EAA8E;AAC9E,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,IAAI,GAAG,sCAAsC,CAAC;AAEpD,SAAS,cAAc,CAAC,MAAgB;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO;QACL,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QACpC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QAClC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,MAAgB;IAC/B,OAAO;QACL,MAAM,EAAE,UAAU,EAAE;QACpB,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC;QAClC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,qDAAqD;AACrD,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE;QACf,gBAAgB,EAAE,qBAAqB;QACvC,MAAM,EAAE,eAAwB;KACjC;CACF,CAAC;AAEF,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,OAAO,CAAC;QACjB,UAAU,EAAE;YACV,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,QAAQ;YACb,eAAe,EAAE,IAAI;YACrB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,UAAU;SACnB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,OAAO,CAAC;QACjB,UAAU,EAAE;YACV,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,UAAU;SACnB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,OAAO,CACP,2EAA2E,CAC5E,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8FAA8F,EAAE,GAAG,EAAE;IACxG,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,UAAU,EAAE;YACV,QAAQ,EAAE,gBAAgB;YAC1B,kBAAkB,EAAE,SAAS;YAC7B,eAAe,EAAE,GAAG;YACpB,MAAM,EAAE,SAAS;SAClB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAEhB,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,UAAU,EAAE;YACV,QAAQ,EAAE,gBAAgB;YAC1B,aAAa,EAAE,SAAS;YACxB,eAAe,EAAE,GAAG;YACpB,MAAM,EAAE,SAAS;SAClB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,UAAU,EAAE;YACV,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,IAAI;SACpB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,GAAG,EAAE;IAC1F,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,UAAU,EAAE;YACV,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,aAAa;SACvB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,SAAS,CAAC;QACnB,UAAU,EAAE;YACV,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,sBAAsB;YACnC,aAAa,EAAE,GAAG;SACnB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,EAAE,CACV,aAAa,CACX;QACE,MAAM,EAAE,CAAC,SAAS,CAAC;QACnB,UAAU,EAAE;YACV,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,YAAY;SACnB;QACD,SAAS,EAAE,IAAI;KAChB,EACD,GAAG,EACH,YAAY,CACb,CACF,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC"}
|