@rubytech/create-maxy-code 0.1.438 → 0.1.440
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/plugins/admin/skills/platform-architecture/SKILL.md +18 -4
- package/payload/platform/plugins/docs/references/admin-identity-gate.md +32 -17
- package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
- package/payload/platform/plugins/docs/references/internals.md +4 -0
- package/payload/platform/plugins/docs/references/outlook-guide.md +2 -2
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
- package/payload/platform/plugins/docs/references/troubleshooting.md +8 -0
- package/payload/platform/plugins/graph/.claude-plugin/plugin.json +19 -0
- package/payload/platform/plugins/graph/PLUGIN.md +10 -4
- package/payload/platform/plugins/graph-viewer/.claude-plugin/plugin.json +13 -0
- package/payload/platform/plugins/graph-viewer/PLUGIN.md +1 -1
- package/payload/platform/plugins/graph-viewer/lib/mcp-spawn-tee/index.js +193 -0
- package/payload/platform/plugins/graph-viewer/lib/mcp-spawn-tee/package.json +3 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-list.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-list.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-list.test.js +55 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-list.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.d.ts +17 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.js +84 -21
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.js.map +1 -1
- package/payload/platform/plugins/outlook/references/graph-surfaces.md +15 -1
- package/payload/platform/scripts/__tests__/account-schema-owned-dirs.test.sh +100 -0
- package/payload/platform/scripts/lib/account-schema-owned-dirs.py +207 -0
- package/payload/platform/scripts/lib/account-schema-owned-dirs.sh +33 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +7 -0
- package/payload/platform/scripts/setup-account.sh +10 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +6 -4
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +36 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.d.ts +58 -0
- package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.js +196 -0
- package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.js.map +1 -0
- package/payload/server/{chunk-UGPQCVIW.js → chunk-WC4WJR6X.js} +0 -6
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{AdminLoginScreens-DeR71H29.js → AdminLoginScreens-CukwQufW.js} +1 -1
- package/payload/server/public/assets/AdminShell-BwEBH6tT.js +2 -0
- package/payload/server/public/assets/{admin-C15h-NL0.js → admin-CdFRCUUZ.js} +1 -1
- package/payload/server/public/assets/{browser-B7xQLIRK.js → browser-BWR59IkB.js} +1 -1
- package/payload/server/public/assets/{calendar-A-vGm6pL.js → calendar-kuTcxX1t.js} +1 -1
- package/payload/server/public/assets/chat-ejnq2rck.js +1 -0
- package/payload/server/public/assets/data-dZbOyLdT.js +1 -0
- package/payload/server/public/assets/{graph-D0orIRAh.js → graph-NgQDY0Pb.js} +1 -1
- package/payload/server/public/assets/{operator-DZzuotDB.js → operator-oSaB1mya.js} +1 -1
- package/payload/server/public/assets/{page-Ck_pLhAk.js → page-DEkI-Gl1.js} +1 -1
- package/payload/server/public/assets/{page-3g0A19Rv.js → page-DMeJHVfA.js} +5 -5
- package/payload/server/public/assets/{public-WFUQw9AD.js → public-C54tl6V4.js} +1 -1
- package/payload/server/public/assets/{useCopyFeedback-CSk9KjhY.js → useCopyFeedback-DHoYHiK9.js} +1 -1
- package/payload/server/public/assets/{useVoiceRecorder-DCyJQkFK.js → useVoiceRecorder-b7HzTFs0.js} +1 -1
- package/payload/server/public/browser.html +2 -2
- package/payload/server/public/calendar.html +2 -2
- package/payload/server/public/chat.html +5 -5
- package/payload/server/public/data.html +3 -3
- package/payload/server/public/graph.html +3 -3
- package/payload/server/public/index.html +5 -5
- package/payload/server/public/operator.html +6 -6
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +186 -112
- package/payload/server/public/assets/AdminShell-DlAVQUda.js +0 -2
- package/payload/server/public/assets/chat-DAae6Z51.js +0 -1
- package/payload/server/public/assets/data-BNWpKx1d.js +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { resolveFolder } from "../tools/mail-list.js";
|
|
4
|
+
// resolveFolder maps a caller-supplied folder value to the Graph
|
|
5
|
+
// `/me/mailFolders/{id}` segment. Graph accepts only a well-known token
|
|
6
|
+
// (single word, no spaces) or a real folder id there; a display name like
|
|
7
|
+
// "Sent Items" is rejected with "Id is malformed". The function is
|
|
8
|
+
// case-insensitive and space-insensitive over the well-known set, and passes
|
|
9
|
+
// anything it does not recognize through unchanged as a raw folder id.
|
|
10
|
+
test("sent-folder aliases all resolve to sentitems", () => {
|
|
11
|
+
for (const input of ["Sent Items", "SentItems", "sent items", "sent", "SENT ITEMS"]) {
|
|
12
|
+
assert.deepEqual(resolveFolder(input), { token: "sentitems", asRawId: false }, input);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
test("deleted-items aliases resolve to deleteditems", () => {
|
|
16
|
+
for (const input of ["Deleted Items", "deleteditems", "trash"]) {
|
|
17
|
+
assert.deepEqual(resolveFolder(input), { token: "deleteditems", asRawId: false }, input);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
test("junk aliases resolve to junkemail", () => {
|
|
21
|
+
for (const input of ["Junk Email", "junkemail", "junk", "spam"]) {
|
|
22
|
+
assert.deepEqual(resolveFolder(input), { token: "junkemail", asRawId: false }, input);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
test("inbox and empty string resolve to Inbox", () => {
|
|
26
|
+
assert.deepEqual(resolveFolder("Inbox"), { token: "Inbox", asRawId: false });
|
|
27
|
+
assert.deepEqual(resolveFolder(""), { token: "Inbox", asRawId: false });
|
|
28
|
+
assert.deepEqual(resolveFolder("inbox"), { token: "Inbox", asRawId: false });
|
|
29
|
+
});
|
|
30
|
+
test("the remaining well-known folders resolve to their tokens", () => {
|
|
31
|
+
assert.deepEqual(resolveFolder("Drafts"), { token: "drafts", asRawId: false });
|
|
32
|
+
assert.deepEqual(resolveFolder("Archive"), { token: "archive", asRawId: false });
|
|
33
|
+
assert.deepEqual(resolveFolder("Outbox"), { token: "outbox", asRawId: false });
|
|
34
|
+
});
|
|
35
|
+
test("an unrecognized value is treated as a raw folder id and passed through unchanged", () => {
|
|
36
|
+
const rawId = "AAMkAGI2TG93AAAAAAA=AQMkADAwATM3ZmYAZS1hNjQ3LWJmYjMtMDACLTAwCgAuAAADAAAA";
|
|
37
|
+
const out = resolveFolder(rawId);
|
|
38
|
+
assert.equal(out.asRawId, true);
|
|
39
|
+
assert.equal(out.token, rawId, "raw id must pass through byte-for-byte");
|
|
40
|
+
});
|
|
41
|
+
test("Object.prototype member names do not resolve — they pass through as raw ids", () => {
|
|
42
|
+
// A bare object-index lookup would read inherited members, so these would
|
|
43
|
+
// wrongly resolve to an Object.prototype value with asRawId=false.
|
|
44
|
+
for (const input of ["constructor", "__proto__", "toString", "hasOwnProperty", "valueOf"]) {
|
|
45
|
+
assert.deepEqual(resolveFolder(input), { token: input, asRawId: true }, input);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
test("a custom folder display name is not in the well-known set (out of scope) and passes through as a raw id", () => {
|
|
49
|
+
// "Projects" is a legitimate custom folder name, but resolving custom folders
|
|
50
|
+
// by display name needs a /me/mailFolders lookup and is out of scope. It is
|
|
51
|
+
// therefore treated as a raw id (and Graph will reject it) rather than
|
|
52
|
+
// silently mis-mapped to a well-known token.
|
|
53
|
+
assert.deepEqual(resolveFolder("Projects"), { token: "Projects", asRawId: true });
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=mail-list.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-list.test.js","sourceRoot":"","sources":["../../src/__tests__/mail-list.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -136,7 +136,7 @@ lifelineTool(server, "outlook-account-register-poll", "Poll for completion of th
|
|
|
136
136
|
return fail(`outlook-account-register-poll failed: ${err.message}`);
|
|
137
137
|
}
|
|
138
138
|
});
|
|
139
|
-
lifelineTool(server, "outlook-mail-list", "List recent messages in the mailbox. Defaults to top=25 ordered by receivedDateTime DESC. Folder defaults to Inbox; pass a folder
|
|
139
|
+
lifelineTool(server, "outlook-mail-list", "List recent messages in the mailbox. Defaults to top=25 ordered by receivedDateTime DESC. Folder defaults to Inbox; pass a well-known folder name or alias (case- and space-insensitive): Inbox, Sent Items (or 'sent'), Drafts, Deleted Items (or 'trash'), Junk Email (or 'junk'/'spam'), Archive, Outbox — or a raw Graph folder id. A custom folder's display name is not resolved. Returns id, subject, from, receivedDateTime, bodyPreview, isRead.", {
|
|
140
140
|
top: z.number().int().min(1).max(250).optional(),
|
|
141
141
|
folder: z.string().optional(),
|
|
142
142
|
}, async ({ top, folder }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,23 @@ export interface MailListArgs {
|
|
|
3
3
|
top?: number;
|
|
4
4
|
folder?: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Map a caller-supplied `folder` value to the Graph `/me/mailFolders/{id}`
|
|
8
|
+
* path segment.
|
|
9
|
+
*
|
|
10
|
+
* Graph accepts only a well-known token (a single word, no spaces:
|
|
11
|
+
* `inbox`, `sentitems`, `drafts`, `deleteditems`, `junkemail`, `archive`,
|
|
12
|
+
* `outbox`) or a real folder id in that segment. A human display name such as
|
|
13
|
+
* "Sent Items" is neither, so Graph rejects it with "Id is malformed". This
|
|
14
|
+
* normalizes the full well-known set plus common aliases — case-insensitively
|
|
15
|
+
* and space-insensitively — to the Graph token. Any value not in the alias
|
|
16
|
+
* table is assumed to be a raw folder id and returned unchanged (`asRawId`),
|
|
17
|
+
* preserving the prior pass-through behaviour.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveFolder(folder: string): {
|
|
20
|
+
token: string;
|
|
21
|
+
asRawId: boolean;
|
|
22
|
+
};
|
|
6
23
|
export interface MailListItem {
|
|
7
24
|
id: string;
|
|
8
25
|
subject: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-list.d.ts","sourceRoot":"","sources":["../../src/tools/mail-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-list.d.ts","sourceRoot":"","sources":["../../src/tools/mail-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IAMb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAUjF;AAsBD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAiBD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiDzB"}
|
|
@@ -1,30 +1,93 @@
|
|
|
1
1
|
import { callGraph } from "../lib/graph-client.js";
|
|
2
2
|
import { log } from "../lib/log.js";
|
|
3
|
+
/**
|
|
4
|
+
* Map a caller-supplied `folder` value to the Graph `/me/mailFolders/{id}`
|
|
5
|
+
* path segment.
|
|
6
|
+
*
|
|
7
|
+
* Graph accepts only a well-known token (a single word, no spaces:
|
|
8
|
+
* `inbox`, `sentitems`, `drafts`, `deleteditems`, `junkemail`, `archive`,
|
|
9
|
+
* `outbox`) or a real folder id in that segment. A human display name such as
|
|
10
|
+
* "Sent Items" is neither, so Graph rejects it with "Id is malformed". This
|
|
11
|
+
* normalizes the full well-known set plus common aliases — case-insensitively
|
|
12
|
+
* and space-insensitively — to the Graph token. Any value not in the alias
|
|
13
|
+
* table is assumed to be a raw folder id and returned unchanged (`asRawId`),
|
|
14
|
+
* preserving the prior pass-through behaviour.
|
|
15
|
+
*/
|
|
16
|
+
export function resolveFolder(folder) {
|
|
17
|
+
const key = folder.toLowerCase().replace(/\s+/g, "");
|
|
18
|
+
// Own-key check only: a bare `WELL_KNOWN_ALIASES[key]` would also read
|
|
19
|
+
// inherited members, so `folder` values like "constructor" or "__proto__"
|
|
20
|
+
// would resolve to an Object.prototype member instead of passing through as
|
|
21
|
+
// raw ids.
|
|
22
|
+
if (Object.hasOwn(WELL_KNOWN_ALIASES, key)) {
|
|
23
|
+
return { token: WELL_KNOWN_ALIASES[key], asRawId: false };
|
|
24
|
+
}
|
|
25
|
+
return { token: folder, asRawId: true };
|
|
26
|
+
}
|
|
27
|
+
// Lookup keys are already lowercased and space-stripped. Inbox maps to the
|
|
28
|
+
// capitalized "Inbox" segment the tool has always used (Graph is
|
|
29
|
+
// case-insensitive on well-known names); the rest map to the lowercase Graph
|
|
30
|
+
// tokens. "" (and whitespace-only) collapses to the key "" → Inbox, folding in
|
|
31
|
+
// the former lone-inbox special case.
|
|
32
|
+
const WELL_KNOWN_ALIASES = {
|
|
33
|
+
"": "Inbox",
|
|
34
|
+
inbox: "Inbox",
|
|
35
|
+
sentitems: "sentitems",
|
|
36
|
+
sent: "sentitems",
|
|
37
|
+
drafts: "drafts",
|
|
38
|
+
deleteditems: "deleteditems",
|
|
39
|
+
trash: "deleteditems",
|
|
40
|
+
junkemail: "junkemail",
|
|
41
|
+
junk: "junkemail",
|
|
42
|
+
spam: "junkemail",
|
|
43
|
+
archive: "archive",
|
|
44
|
+
outbox: "outbox",
|
|
45
|
+
};
|
|
3
46
|
const FIELDS = "id,subject,from,receivedDateTime,bodyPreview,isRead";
|
|
4
47
|
export async function runMailList(config, args) {
|
|
5
48
|
const top = clampTop(args.top, 25);
|
|
6
|
-
const
|
|
49
|
+
const folderIn = args.folder ?? "Inbox";
|
|
50
|
+
const { token: folderResolved, asRawId } = resolveFolder(folderIn);
|
|
7
51
|
const startMs = Date.now();
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
52
|
+
try {
|
|
53
|
+
const result = await callGraph(config, async (client) => {
|
|
54
|
+
const path = `/me/mailFolders/${encodeURIComponent(folderResolved)}/messages`;
|
|
55
|
+
return (await client
|
|
56
|
+
.api(path)
|
|
57
|
+
.top(top)
|
|
58
|
+
.orderby("receivedDateTime DESC")
|
|
59
|
+
.select(FIELDS)
|
|
60
|
+
.get());
|
|
61
|
+
}, { tool: "mail-list" });
|
|
62
|
+
const items = result.value.map(shapeMessage);
|
|
63
|
+
log({
|
|
64
|
+
event: "mail-list",
|
|
65
|
+
op: "resolve",
|
|
66
|
+
account: config.accountId,
|
|
67
|
+
folderIn,
|
|
68
|
+
folderResolved,
|
|
69
|
+
asRawId,
|
|
70
|
+
count: items.length,
|
|
71
|
+
elapsedMs: Date.now() - startMs,
|
|
72
|
+
});
|
|
73
|
+
return items;
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// callGraph already logged the graph-error line (status/code, e.g. the 400
|
|
77
|
+
// "Id is malformed"); this line attaches the folder resolution so the
|
|
78
|
+
// failing input and the token it mapped to are visible on the error path.
|
|
79
|
+
log({
|
|
80
|
+
event: "mail-list",
|
|
81
|
+
op: "resolve",
|
|
82
|
+
account: config.accountId,
|
|
83
|
+
folderIn,
|
|
84
|
+
folderResolved,
|
|
85
|
+
asRawId,
|
|
86
|
+
error: err.message,
|
|
87
|
+
elapsedMs: Date.now() - startMs,
|
|
88
|
+
});
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
28
91
|
}
|
|
29
92
|
function shapeMessage(msg) {
|
|
30
93
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-list.js","sourceRoot":"","sources":["../../src/tools/mail-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-list.js","sourceRoot":"","sources":["../../src/tools/mail-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,21 @@ Microsoft Graph endpoints used by each tool, with the response shape and the fie
|
|
|
6
6
|
|
|
7
7
|
**Endpoint (Inbox):** `GET /me/mailFolders/Inbox/messages?$top={N}&$orderby=receivedDateTime DESC&$select=id,subject,from,receivedDateTime,bodyPreview,isRead`
|
|
8
8
|
|
|
9
|
-
**Endpoint (other folder):** `GET /me/mailFolders/{
|
|
9
|
+
**Endpoint (other folder):** `GET /me/mailFolders/{well-known-token-or-folderId}/messages?...`
|
|
10
|
+
|
|
11
|
+
The `folder` arg is normalized before the path is built. Graph's `{id}` segment accepts only a well-known token (single word, no spaces) or a real folder id — a display name like "Sent Items" is rejected with "Id is malformed". The tool maps the full well-known set plus common aliases, case- and space-insensitively, to the Graph token:
|
|
12
|
+
|
|
13
|
+
| Input (any case/spacing) | Graph token |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `Inbox`, `` (empty) | `Inbox` |
|
|
16
|
+
| `Sent Items`, `sent` | `sentitems` |
|
|
17
|
+
| `Drafts` | `drafts` |
|
|
18
|
+
| `Deleted Items`, `trash` | `deleteditems` |
|
|
19
|
+
| `Junk Email`, `junk`, `spam` | `junkemail` |
|
|
20
|
+
| `Archive` | `archive` |
|
|
21
|
+
| `Outbox` | `outbox` |
|
|
22
|
+
|
|
23
|
+
Any value not in this table is treated as a raw folder id and passed through unchanged. A custom folder's display name (e.g. "Projects") is therefore not resolved — resolving custom folders by name would need a `/me/mailFolders` lookup and is out of scope.
|
|
10
24
|
|
|
11
25
|
**Returned shape:**
|
|
12
26
|
```typescript
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Tests the plugin-declared account-owned-dir merge/reconcile lib: a brand that
|
|
3
|
+
# ships a plugin declaring an owned top-level dir gets it unioned into the
|
|
4
|
+
# account SCHEMA.md allowed-top-level set; a brand without the plugin does not;
|
|
5
|
+
# the merge is idempotent; the reconcile check reports present before/after.
|
|
6
|
+
set -uo pipefail
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PLAT_SCRIPTS="$SCRIPT_DIR/.."
|
|
9
|
+
REAL_PROJECT_DIR="$(cd "$PLAT_SCRIPTS/.." && pwd)"
|
|
10
|
+
REAL_TEMPLATE="$REAL_PROJECT_DIR/templates/account-schema/SCHEMA.md"
|
|
11
|
+
REAL_PREMIUM="$(cd "$REAL_PROJECT_DIR/.." && pwd)/premium-plugins"
|
|
12
|
+
PASS=0; FAIL=0; FAILED=()
|
|
13
|
+
assert_grep() { if printf '%s' "$2" | grep -qF "$1"; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); FAILED+=("$3: expected to find [$1]"); fi; }
|
|
14
|
+
assert_nogrep() { if printf '%s' "$2" | grep -qF "$1"; then FAIL=$((FAIL+1)); FAILED+=("$3: expected NOT to find [$1]"); else PASS=$((PASS+1)); fi; }
|
|
15
|
+
assert_eq() { if [ "$1" = "$2" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); FAILED+=("$3: expected [$2] got [$1]"); fi; }
|
|
16
|
+
|
|
17
|
+
. "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.sh"
|
|
18
|
+
|
|
19
|
+
# Build a fake platform tree at $T/platform whose premium sibling is a symlink to
|
|
20
|
+
# the real premium-plugins (so the real sitedesk-job PLUGIN.md is exercised).
|
|
21
|
+
make_tree() { # $1=ships (json array literal)
|
|
22
|
+
local T; T="$(mktemp -d)"
|
|
23
|
+
mkdir -p "$T/platform/plugins" "$T/platform/config" "$T/platform/templates/account-schema"
|
|
24
|
+
ln -s "$REAL_PREMIUM" "$T/premium-plugins"
|
|
25
|
+
cp "$REAL_TEMPLATE" "$T/platform/templates/account-schema/SCHEMA.md"
|
|
26
|
+
printf '{"installDir":"test-brand","shipsPremiumBundles":%s}\n' "$1" > "$T/platform/config/brand.json"
|
|
27
|
+
echo "$T"
|
|
28
|
+
}
|
|
29
|
+
make_account() { # $1=tree
|
|
30
|
+
local A; A="$(mktemp -d)"
|
|
31
|
+
cp "$1/platform/templates/account-schema/SCHEMA.md" "$A/SCHEMA.md"
|
|
32
|
+
printf '{"accountId":"x","role":"house"}\n' > "$A/account.json"
|
|
33
|
+
echo "$A"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# --- sitedesk-shipping brand: quoting added ---
|
|
37
|
+
T_SD="$(make_tree '["sitedesk"]')"; A_SD="$(make_account "$T_SD")"
|
|
38
|
+
export PROJECT_DIR="$T_SD/platform"
|
|
39
|
+
OUT="$(merge_owned_dirs_into_schema "$A_SD")"
|
|
40
|
+
assert_grep "op=seed-owned-dirs" "$OUT" "sd-seed-log"
|
|
41
|
+
assert_grep "added=quoting" "$OUT" "sd-added-quoting"
|
|
42
|
+
ALLOWED="$(awk '/^```allowed-top-level$/{f=1;next} /^```$/{f=0} f' "$A_SD/SCHEMA.md")"
|
|
43
|
+
assert_grep "quoting" "$ALLOWED" "sd-allowlist-has-quoting"
|
|
44
|
+
assert_grep "Plugin-owned top-level workspaces" "$(cat "$A_SD/SCHEMA.md")" "sd-descriptive-section"
|
|
45
|
+
assert_grep "plugin-owned-dirs:start" "$(cat "$A_SD/SCHEMA.md")" "sd-marker"
|
|
46
|
+
|
|
47
|
+
# --- idempotency: second merge is byte-identical ---
|
|
48
|
+
BEFORE="$(shasum "$A_SD/SCHEMA.md" | awk '{print $1}')"
|
|
49
|
+
OUT2="$(merge_owned_dirs_into_schema "$A_SD")"
|
|
50
|
+
AFTER="$(shasum "$A_SD/SCHEMA.md" | awk '{print $1}')"
|
|
51
|
+
assert_eq "$AFTER" "$BEFORE" "idempotent-second-merge"
|
|
52
|
+
assert_grep "added=none" "$OUT2" "sd-second-added-none"
|
|
53
|
+
|
|
54
|
+
# --- non-sitedesk brand: no quoting ---
|
|
55
|
+
T_MX="$(make_tree '[]')"; A_MX="$(make_account "$T_MX")"
|
|
56
|
+
export PROJECT_DIR="$T_MX/platform"
|
|
57
|
+
merge_owned_dirs_into_schema "$A_MX" >/dev/null
|
|
58
|
+
ALLOWED_MX="$(awk '/^```allowed-top-level$/{f=1;next} /^```$/{f=0} f' "$A_MX/SCHEMA.md")"
|
|
59
|
+
assert_nogrep "quoting" "$ALLOWED_MX" "mx-no-quoting"
|
|
60
|
+
assert_nogrep "Plugin-owned top-level workspaces" "$(cat "$A_MX/SCHEMA.md")" "mx-no-section"
|
|
61
|
+
|
|
62
|
+
# --- reconcile: present=false on bare schema, present=true after merge ---
|
|
63
|
+
A_RC="$(make_account "$T_SD")"
|
|
64
|
+
export PROJECT_DIR="$T_SD/platform"
|
|
65
|
+
RC_BEFORE="$(PROJECT_DIR="$PROJECT_DIR" python3 "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.py" reconcile "$A_RC")"
|
|
66
|
+
assert_grep "ownedDir=quoting present=false" "$RC_BEFORE" "rc-present-false"
|
|
67
|
+
merge_owned_dirs_into_schema "$A_RC" >/dev/null
|
|
68
|
+
RC_AFTER="$(PROJECT_DIR="$PROJECT_DIR" python3 "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.py" reconcile "$A_RC")"
|
|
69
|
+
assert_grep "ownedDir=quoting present=true" "$RC_AFTER" "rc-present-true"
|
|
70
|
+
|
|
71
|
+
# --- sweep: backfills every account with an account.json ---
|
|
72
|
+
ACCTS="$(mktemp -d)"; mkdir -p "$ACCTS/a1"
|
|
73
|
+
cp "$T_SD/platform/templates/account-schema/SCHEMA.md" "$ACCTS/a1/SCHEMA.md"
|
|
74
|
+
printf '{"accountId":"a1","role":"client"}\n' > "$ACCTS/a1/account.json"
|
|
75
|
+
SWEEP="$(reconcile_all_accounts_owned_dirs "$ACCTS" 2>&1)"
|
|
76
|
+
assert_grep "op=reconcile" "$SWEEP" "sweep-reconcile-log"
|
|
77
|
+
ALLOWED_A1="$(awk '/^```allowed-top-level$/{f=1;next} /^```$/{f=0} f' "$ACCTS/a1/SCHEMA.md")"
|
|
78
|
+
assert_grep "quoting" "$ALLOWED_A1" "sweep-backfilled-a1"
|
|
79
|
+
|
|
80
|
+
# --- shape-b: a bundle-root PLUGIN.md declaration is resolved too ---
|
|
81
|
+
# A premium bundle may declare an owned dir in its root PLUGIN.md (depth 1),
|
|
82
|
+
# not only in a sub-plugin manifest (depth 2). Build a fully synthetic tree.
|
|
83
|
+
TB="$(mktemp -d)"
|
|
84
|
+
mkdir -p "$TB/platform/plugins" "$TB/platform/config" "$TB/platform/templates/account-schema"
|
|
85
|
+
mkdir -p "$TB/premium-plugins/acme/plugins/acme-sub"
|
|
86
|
+
cp "$REAL_TEMPLATE" "$TB/platform/templates/account-schema/SCHEMA.md"
|
|
87
|
+
printf '{"installDir":"acme-brand","shipsPremiumBundles":["acme"]}\n' > "$TB/platform/config/brand.json"
|
|
88
|
+
printf -- '---\nname: acme\naccount-owned-dirs: [{"dir": "ledger", "description": "Acme ledger."}]\n---\n' > "$TB/premium-plugins/acme/PLUGIN.md"
|
|
89
|
+
printf -- '---\nname: acme-sub\n---\n' > "$TB/premium-plugins/acme/plugins/acme-sub/PLUGIN.md"
|
|
90
|
+
A_TB="$(mktemp -d)"; cp "$TB/platform/templates/account-schema/SCHEMA.md" "$A_TB/SCHEMA.md"
|
|
91
|
+
export PROJECT_DIR="$TB/platform"
|
|
92
|
+
RES_TB="$(PROJECT_DIR="$PROJECT_DIR" python3 "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.py" resolve)"
|
|
93
|
+
assert_grep "ledger" "$RES_TB" "shapeb-resolve-ledger"
|
|
94
|
+
assert_grep "\"plugin\": \"acme\"" "$RES_TB" "shapeb-owner-is-bundle"
|
|
95
|
+
merge_owned_dirs_into_schema "$A_TB" >/dev/null
|
|
96
|
+
ALLOWED_TB="$(awk '/^```allowed-top-level$/{f=1;next} /^```$/{f=0} f' "$A_TB/SCHEMA.md")"
|
|
97
|
+
assert_grep "ledger" "$ALLOWED_TB" "shapeb-allowlist-has-ledger"
|
|
98
|
+
|
|
99
|
+
echo "PASS=$PASS FAIL=$FAIL"
|
|
100
|
+
if [ "$FAIL" -ne 0 ]; then printf '%s\n' "${FAILED[@]}"; exit 1; fi
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Resolve plugin-declared account-owned top-level dirs for the brand and merge
|
|
3
|
+
them into an account's SCHEMA.md.
|
|
4
|
+
|
|
5
|
+
A plugin declares owned top-level account dirs in its PLUGIN.md frontmatter:
|
|
6
|
+
|
|
7
|
+
account-owned-dirs: [{"dir": "quoting", "description": "..."}]
|
|
8
|
+
|
|
9
|
+
The owned-dir set for a brand is the union declared by every platform plugin
|
|
10
|
+
($PROJECT_DIR/plugins/*/PLUGIN.md) and every premium sub-plugin of a bundle the
|
|
11
|
+
brand ships ($PREMIUM_ROOT/<bundle>/plugins/*/PLUGIN.md, gated by brand.json
|
|
12
|
+
shipsPremiumBundles). Reads PROJECT_DIR from the environment.
|
|
13
|
+
"""
|
|
14
|
+
import json, os, re, sys
|
|
15
|
+
|
|
16
|
+
MARK_START = "<!-- plugin-owned-dirs:start -->"
|
|
17
|
+
MARK_END = "<!-- plugin-owned-dirs:end -->"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _project_dir():
|
|
21
|
+
pd = os.environ.get("PROJECT_DIR", "")
|
|
22
|
+
if not pd:
|
|
23
|
+
sys.stderr.write("account-schema-owned-dirs: PROJECT_DIR unset\n")
|
|
24
|
+
sys.exit(1)
|
|
25
|
+
return os.path.normpath(pd)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _read_brand(project_dir):
|
|
29
|
+
path = os.path.join(project_dir, "config", "brand.json")
|
|
30
|
+
if not os.path.isfile(path):
|
|
31
|
+
return "unknown", []
|
|
32
|
+
try:
|
|
33
|
+
with open(path) as f:
|
|
34
|
+
b = json.load(f)
|
|
35
|
+
return (b.get("installDir") or "unknown"), list(b.get("shipsPremiumBundles") or [])
|
|
36
|
+
except Exception:
|
|
37
|
+
return "unknown", []
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _parse_plugin_md(path):
|
|
41
|
+
"""Return (name, [ {dir, description} ]) from a PLUGIN.md, or (None, [])."""
|
|
42
|
+
try:
|
|
43
|
+
with open(path) as f:
|
|
44
|
+
text = f.read()
|
|
45
|
+
except Exception:
|
|
46
|
+
return None, []
|
|
47
|
+
m = re.match(r"^---\n(.*?)\n---", text, re.DOTALL)
|
|
48
|
+
if not m:
|
|
49
|
+
return None, []
|
|
50
|
+
fm = m.group(1)
|
|
51
|
+
name = None
|
|
52
|
+
nm = re.search(r"^name:\s*(.+)$", fm, re.MULTILINE)
|
|
53
|
+
if nm:
|
|
54
|
+
name = nm.group(1).strip().strip('"').strip("'")
|
|
55
|
+
owned = []
|
|
56
|
+
om = re.search(r"^account-owned-dirs:\s*(.+)$", fm, re.MULTILINE)
|
|
57
|
+
if om:
|
|
58
|
+
try:
|
|
59
|
+
raw = json.loads(om.group(1).strip())
|
|
60
|
+
for e in raw:
|
|
61
|
+
d = (e.get("dir") or "").strip()
|
|
62
|
+
if d:
|
|
63
|
+
owned.append({"dir": d, "description": (e.get("description") or "").strip()})
|
|
64
|
+
except Exception:
|
|
65
|
+
pass
|
|
66
|
+
return name, owned
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _plugin_md_paths(project_dir):
|
|
70
|
+
paths = []
|
|
71
|
+
plugins_root = os.path.join(project_dir, "plugins")
|
|
72
|
+
if os.path.isdir(plugins_root):
|
|
73
|
+
for entry in sorted(os.listdir(plugins_root)):
|
|
74
|
+
p = os.path.join(plugins_root, entry, "PLUGIN.md")
|
|
75
|
+
if os.path.isfile(p):
|
|
76
|
+
paths.append(p)
|
|
77
|
+
_brand, ships = _read_brand(project_dir)
|
|
78
|
+
premium_root = os.path.join(os.path.dirname(project_dir), "premium-plugins")
|
|
79
|
+
for bundle in ships:
|
|
80
|
+
bundle_dir = os.path.join(premium_root, bundle)
|
|
81
|
+
# Bundle-root manifest (shape b): premium-plugins/<bundle>/PLUGIN.md.
|
|
82
|
+
root_md = os.path.join(bundle_dir, "PLUGIN.md")
|
|
83
|
+
if os.path.isfile(root_md):
|
|
84
|
+
paths.append(root_md)
|
|
85
|
+
# Sub-plugin manifests (shape a): premium-plugins/<bundle>/plugins/*/PLUGIN.md.
|
|
86
|
+
subs = os.path.join(bundle_dir, "plugins")
|
|
87
|
+
if not os.path.isdir(subs):
|
|
88
|
+
continue
|
|
89
|
+
for entry in sorted(os.listdir(subs)):
|
|
90
|
+
p = os.path.join(subs, entry, "PLUGIN.md")
|
|
91
|
+
if os.path.isfile(p):
|
|
92
|
+
paths.append(p)
|
|
93
|
+
return paths
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def resolve(project_dir):
|
|
97
|
+
"""Union of owned-dir declarations. First declarer of a dir wins its owner
|
|
98
|
+
label + description."""
|
|
99
|
+
seen = {}
|
|
100
|
+
order = []
|
|
101
|
+
for path in _plugin_md_paths(project_dir):
|
|
102
|
+
name, owned = _parse_plugin_md(path)
|
|
103
|
+
for e in owned:
|
|
104
|
+
if e["dir"] in seen:
|
|
105
|
+
continue
|
|
106
|
+
seen[e["dir"]] = {"dir": e["dir"], "description": e["description"], "plugin": name or "unknown"}
|
|
107
|
+
order.append(e["dir"])
|
|
108
|
+
return [seen[d] for d in order]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _allowed_block(text):
|
|
112
|
+
"""Return (list_of_entries, start_idx, end_idx) for the fenced
|
|
113
|
+
allowed-top-level block. end_idx is the closing-fence line index."""
|
|
114
|
+
lines = text.split("\n")
|
|
115
|
+
start = None
|
|
116
|
+
for i, ln in enumerate(lines):
|
|
117
|
+
if ln.strip() == "```allowed-top-level":
|
|
118
|
+
start = i
|
|
119
|
+
break
|
|
120
|
+
if start is None:
|
|
121
|
+
return None, None, None
|
|
122
|
+
for j in range(start + 1, len(lines)):
|
|
123
|
+
if lines[j].strip() == "```":
|
|
124
|
+
return [l for l in lines[start + 1:j] if l.strip()], start, j
|
|
125
|
+
return None, None, None
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _strip_region(text):
|
|
129
|
+
if MARK_START not in text:
|
|
130
|
+
return text
|
|
131
|
+
pre = text.split(MARK_START, 1)[0]
|
|
132
|
+
post = ""
|
|
133
|
+
if MARK_END in text:
|
|
134
|
+
post = text.split(MARK_END, 1)[1]
|
|
135
|
+
return (pre.rstrip("\n") + "\n" + post.lstrip("\n")).rstrip("\n") + "\n"
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def merge(project_dir, account_dir):
|
|
139
|
+
brand, _ = _read_brand(project_dir)
|
|
140
|
+
owned = resolve(project_dir)
|
|
141
|
+
schema_path = os.path.join(account_dir, "SCHEMA.md")
|
|
142
|
+
if not os.path.isfile(schema_path):
|
|
143
|
+
print(f"brand={brand} added=none")
|
|
144
|
+
return
|
|
145
|
+
with open(schema_path) as f:
|
|
146
|
+
text = f.read()
|
|
147
|
+
entries, start, end = _allowed_block(text)
|
|
148
|
+
added = []
|
|
149
|
+
if entries is not None:
|
|
150
|
+
present = set(entries)
|
|
151
|
+
lines = text.split("\n")
|
|
152
|
+
insert = []
|
|
153
|
+
for e in owned:
|
|
154
|
+
if e["dir"] not in present:
|
|
155
|
+
insert.append(e["dir"])
|
|
156
|
+
added.append(e["dir"])
|
|
157
|
+
if insert:
|
|
158
|
+
lines[end:end] = insert
|
|
159
|
+
text = "\n".join(lines)
|
|
160
|
+
# Regenerate the descriptive region wholesale (idempotent).
|
|
161
|
+
text = _strip_region(text)
|
|
162
|
+
if owned:
|
|
163
|
+
region = [MARK_START, "## Plugin-owned top-level workspaces", "",
|
|
164
|
+
"A plugin that owns a top-level workspace declares it. The internal",
|
|
165
|
+
"structure is owned by that plugin's tools and recreated on the next",
|
|
166
|
+
"write. Never reorganise it.", ""]
|
|
167
|
+
for e in owned:
|
|
168
|
+
desc = e["description"] or f"Owned by the {e['plugin']} plugin."
|
|
169
|
+
region.append(f"- `{e['dir']}/` — {desc}")
|
|
170
|
+
region.append(MARK_END)
|
|
171
|
+
text = text.rstrip("\n") + "\n\n" + "\n".join(region) + "\n"
|
|
172
|
+
with open(schema_path, "w") as f:
|
|
173
|
+
f.write(text)
|
|
174
|
+
print(f"brand={brand} added={','.join(added) if added else 'none'}")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def reconcile(project_dir, account_dir):
|
|
178
|
+
brand, _ = _read_brand(project_dir)
|
|
179
|
+
owned = resolve(project_dir)
|
|
180
|
+
schema_path = os.path.join(account_dir, "SCHEMA.md")
|
|
181
|
+
present = set()
|
|
182
|
+
if os.path.isfile(schema_path):
|
|
183
|
+
with open(schema_path) as f:
|
|
184
|
+
entries, _s, _e = _allowed_block(f.read())
|
|
185
|
+
present = set(entries or [])
|
|
186
|
+
for e in owned:
|
|
187
|
+
is_present = "true" if e["dir"] in present else "false"
|
|
188
|
+
print(f"brand={brand} plugin={e['plugin']} ownedDir={e['dir']} present={is_present}")
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def main():
|
|
192
|
+
if len(sys.argv) < 2:
|
|
193
|
+
sys.exit("usage: account-schema-owned-dirs.py {resolve|merge|reconcile} [account_dir]")
|
|
194
|
+
cmd = sys.argv[1]
|
|
195
|
+
pd = _project_dir()
|
|
196
|
+
if cmd == "resolve":
|
|
197
|
+
print(json.dumps(resolve(pd)))
|
|
198
|
+
elif cmd == "merge":
|
|
199
|
+
merge(pd, sys.argv[2])
|
|
200
|
+
elif cmd == "reconcile":
|
|
201
|
+
reconcile(pd, sys.argv[2])
|
|
202
|
+
else:
|
|
203
|
+
sys.exit(f"unknown command: {cmd}")
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
if __name__ == "__main__":
|
|
207
|
+
main()
|