@rubytech/create-maxy-code 0.1.214 → 0.1.219
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/mcp-eager/dist/index.d.ts +0 -55
- package/payload/platform/lib/mcp-eager/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/mcp-eager/dist/index.js +0 -76
- package/payload/platform/lib/mcp-eager/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-eager/src/index.ts +0 -101
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +4 -1
- package/payload/platform/plugins/admin/hooks/__tests__/hook-emit-stale-lock-ttl.test.sh +102 -0
- package/payload/platform/plugins/admin/hooks/__tests__/post-tool-use-agent.test.sh +97 -1
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-admin-tool-gate.test.sh +55 -74
- package/payload/platform/plugins/admin/hooks/lib/hook-emit.sh +58 -0
- package/payload/platform/plugins/admin/hooks/post-tool-use-agent.sh +100 -29
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +0 -55
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.js +130 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +63 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.d.ts +14 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.js +50 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.d.ts +28 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.js +68 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.js.map +1 -0
- package/payload/platform/plugins/admin/skills/capabilities-here/SKILL.md +31 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +39 -30
- package/payload/platform/plugins/browser/mcp/dist/index.js +19 -19
- package/payload/platform/plugins/browser/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/docs/references/platform.md +28 -25
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
- package/payload/platform/plugins/email/mcp/dist/index.js +12 -12
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index.js +8 -8
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/url-get/mcp/dist/index.js +2 -2
- package/payload/platform/plugins/url-get/mcp/dist/index.js.map +1 -1
- package/payload/platform/scripts/check-architecture-skill-no-drift.mjs +89 -42
- package/payload/platform/scripts/check-roles-doc-completeness.mjs +96 -0
- package/payload/platform/scripts/check-specialist-tool-surface.mjs +1 -1
- 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 +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +0 -14
- 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 +54 -21
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +20 -9
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts +21 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js +118 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +28 -17
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +110 -60
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-life.d.ts +4 -0
- package/payload/platform/services/claude-session-manager/dist/rc-life.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/rc-life.js +16 -0
- package/payload/platform/services/claude-session-manager/dist/rc-life.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.d.ts +80 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.js +306 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts +9 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js +6 -2
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts +12 -46
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.js +24 -73
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +6 -4
- package/payload/platform/templates/specialists/agents/content-producer.md +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js +4 -5
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/src/index.ts +4 -5
- package/payload/premium-plugins/writer-craft/lib/mcp-eager/dist/index.d.ts +0 -116
- package/payload/premium-plugins/writer-craft/lib/mcp-eager/dist/index.d.ts.map +0 -1
- package/payload/premium-plugins/writer-craft/lib/mcp-eager/dist/index.js +0 -125
- package/payload/premium-plugins/writer-craft/lib/mcp-eager/dist/index.js.map +0 -1
- package/payload/premium-plugins/writer-craft/lib/mcp-eager/package.json +0 -7
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { resolve, join } from "node:path";
|
|
3
|
+
function listSpecialists(dir) {
|
|
4
|
+
if (!existsSync(dir))
|
|
5
|
+
return [];
|
|
6
|
+
const out = [];
|
|
7
|
+
for (const entry of readdirSync(dir)) {
|
|
8
|
+
const full = join(dir, entry);
|
|
9
|
+
const st = statSync(full);
|
|
10
|
+
if (st.isFile() && entry.endsWith(".md"))
|
|
11
|
+
out.push(entry.replace(/\.md$/, ""));
|
|
12
|
+
else if (st.isDirectory() && existsSync(join(full, "IDENTITY.md")))
|
|
13
|
+
out.push(entry);
|
|
14
|
+
}
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
function slugify(s) {
|
|
18
|
+
return s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
19
|
+
}
|
|
20
|
+
export function runCatalogueCensus(input) {
|
|
21
|
+
const platformSpecs = listSpecialists(resolve(input.platformRoot, "templates", "specialists", "agents"));
|
|
22
|
+
const premiumSpecs = [];
|
|
23
|
+
for (const bundle of input.enabledBundles) {
|
|
24
|
+
const dir = resolve(input.premiumPluginsRoot, bundle, "agents");
|
|
25
|
+
premiumSpecs.push(...listSpecialists(dir));
|
|
26
|
+
}
|
|
27
|
+
const disk = [...platformSpecs, ...premiumSpecs];
|
|
28
|
+
const body = existsSync(input.shippedSkillPath)
|
|
29
|
+
? readFileSync(input.shippedSkillPath, "utf8")
|
|
30
|
+
: "";
|
|
31
|
+
const bodySlugs = new Set();
|
|
32
|
+
for (const match of body.matchAll(/^\|\s*([^|]+)\s*\|/gm)) {
|
|
33
|
+
const cell = match[1].trim();
|
|
34
|
+
if (!cell || cell.startsWith("---") || cell === "Role" || cell === "Plugin")
|
|
35
|
+
continue;
|
|
36
|
+
bodySlugs.add(slugify(cell));
|
|
37
|
+
}
|
|
38
|
+
const missing = disk.filter((s) => !bodySlugs.has(slugify(s)));
|
|
39
|
+
// Stale signal arrives via the per-brand drift gate and the
|
|
40
|
+
// check-roles-doc-completeness gate; this census closes the F5 leak —
|
|
41
|
+
// disk-but-undocumented — which the drift gates cannot see.
|
|
42
|
+
const stale = [];
|
|
43
|
+
return {
|
|
44
|
+
diskCount: disk.length,
|
|
45
|
+
documentedCount: bodySlugs.size,
|
|
46
|
+
missing,
|
|
47
|
+
stale,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=catalogue-census.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogue-census.js","sourceRoot":"","sources":["../../src/lib/catalogue-census.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAyB1C,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;aAC1E,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAA2B;IAC5D,MAAM,aAAa,GAAG,eAAe,CACnC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,CAClE,CAAC;IACF,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChE,YAAY,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC7C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAC9C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ;YAAE,SAAS;QACtF,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,4DAA4D;IAC5D,sEAAsE;IACtE,4DAA4D;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,eAAe,EAAE,SAAS,CAAC,IAAI;QAC/B,OAAO;QACP,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface CapabilitiesHereInput {
|
|
2
|
+
accountId: string;
|
|
3
|
+
accountConfigPath: string;
|
|
4
|
+
brandConfigPath: string;
|
|
5
|
+
platformRoot: string;
|
|
6
|
+
premiumPluginsRoot: string;
|
|
7
|
+
claudeConfigDir: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CapabilitiesHereResult {
|
|
10
|
+
accountId: string;
|
|
11
|
+
tier: string | null;
|
|
12
|
+
adminModel: string | null;
|
|
13
|
+
publicModel: string | null;
|
|
14
|
+
enabledPlugins: string[];
|
|
15
|
+
installedPlatformSpecialists: string[];
|
|
16
|
+
installedPremiumSpecialists: Array<{
|
|
17
|
+
bundle: string;
|
|
18
|
+
name: string;
|
|
19
|
+
}>;
|
|
20
|
+
registeredAgentTypes: string[];
|
|
21
|
+
brand: {
|
|
22
|
+
productName: string | null;
|
|
23
|
+
shipsPremiumBundles: string[];
|
|
24
|
+
};
|
|
25
|
+
capturedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function resolveCapabilitiesHere(input: CapabilitiesHereInput, nowIso: string): Promise<CapabilitiesHereResult>;
|
|
28
|
+
//# sourceMappingURL=capabilities-here.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-here.d.ts","sourceRoot":"","sources":["../../src/tools/capabilities-here.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2BAA2B,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,sBAAsB,CAAC,CAgDjC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
3
|
+
import { resolve, join } from "node:path";
|
|
4
|
+
function listSpecialistFiles(dir) {
|
|
5
|
+
if (!existsSync(dir))
|
|
6
|
+
return [];
|
|
7
|
+
const out = [];
|
|
8
|
+
for (const entry of readdirSync(dir)) {
|
|
9
|
+
const full = join(dir, entry);
|
|
10
|
+
const st = statSync(full);
|
|
11
|
+
if (st.isFile() && entry.endsWith(".md")) {
|
|
12
|
+
out.push(entry.replace(/\.md$/, ""));
|
|
13
|
+
}
|
|
14
|
+
else if (st.isDirectory() && existsSync(join(full, "IDENTITY.md"))) {
|
|
15
|
+
out.push(entry);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return out.sort();
|
|
19
|
+
}
|
|
20
|
+
function listAgentRegistry(dir) {
|
|
21
|
+
if (!existsSync(dir))
|
|
22
|
+
return [];
|
|
23
|
+
const out = [];
|
|
24
|
+
for (const entry of readdirSync(dir)) {
|
|
25
|
+
if (entry.endsWith(".md"))
|
|
26
|
+
out.push(entry.replace(/\.md$/, ""));
|
|
27
|
+
}
|
|
28
|
+
return out.sort();
|
|
29
|
+
}
|
|
30
|
+
export async function resolveCapabilitiesHere(input, nowIso) {
|
|
31
|
+
const accountRaw = await readFile(input.accountConfigPath, "utf-8");
|
|
32
|
+
const account = JSON.parse(accountRaw);
|
|
33
|
+
const brandRaw = await readFile(input.brandConfigPath, "utf-8");
|
|
34
|
+
const brand = JSON.parse(brandRaw);
|
|
35
|
+
const enabledPlugins = Array.isArray(account.enabledPlugins)
|
|
36
|
+
? account.enabledPlugins.slice().sort()
|
|
37
|
+
: [];
|
|
38
|
+
const tier = typeof account.tier === "string" ? account.tier : null;
|
|
39
|
+
const adminModel = typeof account.adminModel === "string" ? account.adminModel : null;
|
|
40
|
+
const publicModel = typeof account.publicModel === "string" ? account.publicModel : null;
|
|
41
|
+
const productName = typeof brand.productName === "string" ? brand.productName : null;
|
|
42
|
+
const shipsPremiumBundles = Array.isArray(brand.shipsPremiumBundles)
|
|
43
|
+
? brand.shipsPremiumBundles.slice().sort()
|
|
44
|
+
: [];
|
|
45
|
+
const platformSpecialistsDir = resolve(input.platformRoot, "templates", "specialists", "agents");
|
|
46
|
+
const installedPlatformSpecialists = listSpecialistFiles(platformSpecialistsDir);
|
|
47
|
+
const installedPremiumSpecialists = [];
|
|
48
|
+
for (const bundle of shipsPremiumBundles) {
|
|
49
|
+
const bundleAgentsDir = resolve(input.premiumPluginsRoot, bundle, "agents");
|
|
50
|
+
const names = listSpecialistFiles(bundleAgentsDir);
|
|
51
|
+
for (const name of names)
|
|
52
|
+
installedPremiumSpecialists.push({ bundle, name });
|
|
53
|
+
}
|
|
54
|
+
const registeredAgentTypes = listAgentRegistry(resolve(input.claudeConfigDir, "agents"));
|
|
55
|
+
return {
|
|
56
|
+
accountId: input.accountId,
|
|
57
|
+
tier,
|
|
58
|
+
adminModel,
|
|
59
|
+
publicModel,
|
|
60
|
+
enabledPlugins,
|
|
61
|
+
installedPlatformSpecialists,
|
|
62
|
+
installedPremiumSpecialists,
|
|
63
|
+
registeredAgentTypes,
|
|
64
|
+
brand: { productName, shipsPremiumBundles },
|
|
65
|
+
capturedAt: nowIso,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=capabilities-here.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-here.js","sourceRoot":"","sources":["../../src/tools/capabilities-here.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAoC1C,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAA4B,EAC5B,MAAc;IAEd,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAA4B,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;IAE9D,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1D,CAAC,CAAE,OAAO,CAAC,cAA2B,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;QACrD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAClE,CAAC,CAAE,KAAK,CAAC,mBAAgC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;QACxD,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,sBAAsB,GAAG,OAAO,CACpC,KAAK,CAAC,YAAY,EAClB,WAAW,EACX,aAAa,EACb,QAAQ,CACT,CAAC;IACF,MAAM,4BAA4B,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;IAEjF,MAAM,2BAA2B,GAA4C,EAAE,CAAC;IAChF,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACzC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,2BAA2B,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,oBAAoB,GAAG,iBAAiB,CAC5C,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC,CACzC,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI;QACJ,UAAU;QACV,WAAW;QACX,cAAc;QACd,4BAA4B;QAC5B,2BAA2B;QAC3B,oBAAoB;QACpB,KAAK,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC3C,UAAU,EAAE,MAAM;KACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: capabilities-here
|
|
3
|
+
description: Use when grounding any claim about what is installed on the current account — enabled plugins, available specialists, registered Claude Code agent types, brand, tier, models. Call the `capabilities-here` tool; the JSON it returns is the authoritative install snapshot. Never infer install state from the platform-architecture skill (that skill is the install catalogue, not evidence of what is enabled here).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# capabilities-here
|
|
7
|
+
|
|
8
|
+
The `capabilities-here` admin MCP tool returns a single JSON object describing the live install state on the current account. Call it whenever you are about to:
|
|
9
|
+
|
|
10
|
+
- Tell the operator what you can or cannot do here.
|
|
11
|
+
- Decide whether a specialist exists before dispatching it.
|
|
12
|
+
- Say which plugins are available on this account.
|
|
13
|
+
- Compare the install against a catalogue claim from `platform-architecture`.
|
|
14
|
+
|
|
15
|
+
## How to use
|
|
16
|
+
|
|
17
|
+
Call `mcp__plugin_admin_admin__capabilities-here` with no arguments. The tool reads:
|
|
18
|
+
|
|
19
|
+
- `account.json` for `enabledPlugins`, `tier`, `adminModel`, `publicModel`.
|
|
20
|
+
- `brand.json` for `productName` and `shipsPremiumBundles`.
|
|
21
|
+
- `platform/templates/specialists/agents/` for `installedPlatformSpecialists`.
|
|
22
|
+
- Each enabled premium bundle's `agents/` for `installedPremiumSpecialists`.
|
|
23
|
+
- `$CLAUDE_CONFIG_DIR/agents/` for `registeredAgentTypes` (the same registry the Agent tool resolves against).
|
|
24
|
+
|
|
25
|
+
Returns one JSON object with those fields plus `accountId`, `capturedAt`, and the `brand` block. No LLM in the resolution path; pure disk + JSON reads.
|
|
26
|
+
|
|
27
|
+
## Boundary against `platform-architecture`
|
|
28
|
+
|
|
29
|
+
`platform-architecture` is the install catalogue — every plugin, skill, and specialist the platform can ship. It is not evidence that any of them is enabled here. For documented surface (how a plugin works, what a role is for) cite `platform-architecture` with the `Source:` URL. For what is actually installed on this account, cite `capabilities-here`.
|
|
30
|
+
|
|
31
|
+
When the operator asks "what can you do" or "what plugins are enabled" or "do you have X", the answer comes from `capabilities-here`, not from this skill or from `platform-architecture`.
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
|
-
description: Use when grounding any claim about what Maxy
|
|
4
|
-
content-hash: sha256:
|
|
3
|
+
description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
+
content-hash: sha256:d8c18dc6630fbbddd4408fa971e7786cddfe36288714ac1e3840530d18903e91
|
|
5
|
+
brand: maxy-code
|
|
6
|
+
product-name: Maxy
|
|
5
7
|
---
|
|
6
8
|
|
|
7
|
-
#
|
|
9
|
+
# Maxy platform architecture (catalogue)
|
|
8
10
|
|
|
9
|
-
This skill is
|
|
11
|
+
This skill is the install catalogue — every surface the platform can ship. It is not evidence of what is installed on the current account. Cite for documented surface. For 'what is installed here' / 'what can you do', call `capabilities-here` and read `account-manage`; do not infer install state from this body.
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
This skill is generated. Its body is the concatenated source markdown for every public Maxy docs page, emitted by `docs/scripts/copy-docs.mjs` as `docs/public/llms-full.maxy-code.txt` and assembled here by `maxy-code/scripts/assemble-architecture-skill.mjs`. Do not hand-edit — the drift gate in `platform/scripts/check-architecture-skill-no-drift.mjs` will fail CI.
|
|
14
|
+
|
|
15
|
+
When you load this skill to ground a factual claim, cite the `Source:` URL printed above the block you drew from. The URL is the canonical public docs page (https://docs.getmaxy.com); relay it as a markdown link in your reply. Training-data recall is not a permitted source — the body below is.
|
|
12
16
|
|
|
13
17
|
---
|
|
14
18
|
# Maxy Documentation — full corpus
|
|
@@ -145,18 +149,26 @@ Plugins are installed and managed through conversation. You can add marketplace
|
|
|
145
149
|
|
|
146
150
|
## Roles
|
|
147
151
|
|
|
148
|
-
Maxy
|
|
152
|
+
Maxy ships twelve roles it can dispatch for specific tasks — like members of your team. You don't need to configure or manage them — Maxy decides when to use each role and handles everything automatically. You may see activity like "Dispatching personal-assistant..." in the chat timeline when this happens.
|
|
153
|
+
|
|
154
|
+
The catalogue below is what the platform ships. It is not evidence of what is installed on the current account. For the live install set on this account, ask Maxy to call `capabilities-here`.
|
|
149
155
|
|
|
150
156
|
| Role | What it does |
|
|
151
157
|
|------|-------------|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
| Database Operator |
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
| Archive Ingest Operator | Ingests bulk external archives — Obsidian, ICS, X, Notion — and surfaces schema-mapping ambiguity rather than catching all unmapped relations as :MENTIONS. |
|
|
159
|
+
| Citation Auditor | Audits :TimelineEvent rows for missing citations and writes either citations directly or a CitationProposal stub. |
|
|
160
|
+
| Coding Assistant | Runs shell commands, drives git repositories, and reads or edits code on your behalf — the specialist you reach for when the work belongs in a developer terminal. |
|
|
161
|
+
| Compiled Truth Rewriter | Recomputes a node's compiledTruth (and public twin where applicable) from its 90-day timeline plus optional operator hints. |
|
|
162
|
+
| Content Producer | Produces visual output from your graph: generates images, renders pages to PDF, and hosts static websites you upload as a zip. |
|
|
163
|
+
| Database Operator | Executes graph writes on admin's behalf when delegated via the Task tool — admin names each write, the specialist runs it. |
|
|
164
|
+
| Librarian | Owns foreground ingest of documents, conversation transcripts, and external archives into the memory graph. |
|
|
165
|
+
| Personal Assistant | Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf. |
|
|
166
|
+
| Project Manager | Manages your tasks, projects, sessions, and workflows: linking work to people and goals, and keeping everything organised. |
|
|
167
|
+
| Public Session Reviewer | Reads a gated public-agent transcript and dispatches database-operator for each per-visitor memory write. |
|
|
168
|
+
| Research Assistant | Researches topics online, manages your knowledge graph, and produces supporting visuals. |
|
|
169
|
+
| Typed Edge Classifier | Reads recently-written prose nodes and writes typed edges from a closed allowlist. |
|
|
170
|
+
|
|
171
|
+
Roles are installed during setup and listed when Maxy introduces itself. Some premium bundles add their own specialists (e.g. the `real-agent` bundle adds a listing curator, negotiator, valuer, compliance officer, and buyer-enquiry public agent). Roles installed mid-session become active from the next session.
|
|
160
172
|
|
|
161
173
|
## Memory
|
|
162
174
|
|
|
@@ -206,21 +218,23 @@ Each session row also carries a small muted timestamp crumb under the name showi
|
|
|
206
218
|
|
|
207
219
|
**Download JSONL (Task 197).** `GET /<id>/log?download=1` is a one-shot byte-stream of the session's JSONL transcript with attachment-disposition headers, designed for the pane's **Download JSONL** button. Headers: `Content-Type: application/x-ndjson`, `Content-Disposition: attachment; filename="<sessionId>.jsonl"` (the basename is sanitised so any non-`[A-Za-z0-9._-]` character is replaced with underscore), `Cache-Control: no-store`. Four status branches: **200** with the byte-identical file body; **404** `{error: 'session-not-found'}` when the store has no row for the id; **202** `{pending: true, jsonlPath: null}` when the row exists but claude has not flushed the first turn yet; **404** `{error: 'jsonl-missing-on-disk'}` when the row carries a `jsonlPath` but the file has been removed under the manager (post-Purge race). The download branch is declared **before** the follow check, so `?download=1` always wins over `?follow=1` if both are set. The proxy at `app.get('/:sessionId/log')` rebuilds the upstream query from a fixed `follow|download` allowlist; inbound query keys outside that allowlist are dropped. Observability: `[claude-session-manager] log-download sessionId=<sid> bytes=<n> ms=<n>` lands per successful stream completion; the browser console emits `[admin-ui] pane-download-jsonl sessionId=<8> outcome=initiated` on click. `outcome=initiated` rather than `outcome=ok` is intentional — the handler resolves before the browser writes the bytes, so the log line names "the request was kicked off", not "the file landed". If the file does not appear in the operator's downloads folder, check the manager line for the bytes count and the browser's downloads UI for the suppression record. Auth is unchanged from the rest of the `/api/admin/claude-sessions` surface (cookie session via `requireAdminSession`); there is no new key surface.
|
|
208
220
|
|
|
209
|
-
**Two spawn
|
|
221
|
+
**Two spawn surfaces, one primitive (Task 573).** The manager runs two on-device spawn surfaces, both backed by the same primitive: **node-pty wrapped in `systemd-run --user --scope`** (via `index.ts::spawnPtyAdapter`).
|
|
210
222
|
|
|
211
|
-
- **`claude rc` daemon** — spawned at platform boot by `rc-daemon.ts
|
|
212
|
-
- **`claude --remote-control` on-device sidebar spawn** — spawned per-click by `/rc-spawn` in `http-server.ts
|
|
223
|
+
- **`claude rc` daemon** — spawned at platform boot by `rc-daemon.ts`. One supervised daemon per account; owns the long-lived composer session that backs claude.ai/code Remote Control. Master fd held for the daemon's lifetime, released on natural exit / restart.
|
|
224
|
+
- **`claude --remote-control` on-device sidebar spawn** — spawned per-click by `/rc-spawn` in `http-server.ts`. One PTY per click; the manager holds the master fd **for the session's entire lifetime**. The pty master IS the live session — claude operates on the slave, and closing the master hangs up the slave. Valid master-release points: (1) explicit operator teardown — `/stop` → `stopSession` → `op=archive-release` — and (2) the natural-exit path inside `pty.onExit → handlePtyNaturalExit`.
|
|
213
225
|
|
|
214
|
-
|
|
226
|
+
Inside the scope, `sh -c 'trap "" HUP; exec "$@"' sh <claudeBin> <args...>` keeps claude resident across PTY master-close (SIGHUP trap) and preserves the pid through the exec chain. The earlier `script(1)` wrap and the non-PTY scope primitive (Tasks 552/556/562) are gone; node-pty allocates the TTY directly.
|
|
227
|
+
|
|
228
|
+
**`/rc-spawn` lifecycle observability (Task 573).** Every on-device sidebar resume emits a stream of `[rc-spawn]` lines tagged with the same `unitToken=rc-resume-<uuid>` so one spawn's full lifeline can be reconstructed by `grep` alone. The lines, in order:
|
|
215
229
|
|
|
216
230
|
| Step | Line shape |
|
|
217
231
|
|------|-----------|
|
|
218
232
|
| 1 | `[rc-spawn] op=request unitToken=<t> sessionId=<8|new> name=<…|none> mode=<resume|fresh> jsonl=<path|none>` |
|
|
219
233
|
| 2 | `[rc-spawn] op=argv unitToken=<t> cwd=<dir> argv=<json>` (inner claude argv; the `systemd-run --scope` wrap is composed by the spawnPty adapter) |
|
|
220
234
|
| 3 | `[rc-spawn] op=pty-spawned unitToken=<t> pid=<pid> openFds=<n>` (fd baseline) |
|
|
221
|
-
| 4 | `[rc-spawn] op=child-output unitToken=<t> pid=<pid> head=<json>` (first ≤1 KB or 500 ms idle — claude's own words
|
|
222
|
-
| 5 | `[rc-spawn] op=
|
|
223
|
-
| 6 | `[rc-spawn] op=
|
|
235
|
+
| 4 | `[rc-spawn] op=child-output unitToken=<t> pid=<pid> head=<json>` (first ≤1 KB or 500 ms idle — claude's own words) |
|
|
236
|
+
| 5 | `[rc-spawn] op=early-exit unitToken=<t> pid=<pid> ranMs=<n> exitCode=<n> signal=<…>` — fires when `pty.onExit` lands before the pid file |
|
|
237
|
+
| 6 | `[rc-spawn] op=pidfile-present unitToken=<t> pid=<pid> path=<sessions/<pid>.json> ageMs=<n> bridgeId=<…>` — **terminal success.** The on-disk PID file IS the evidence; no synchronous liveness inference. The tracker remains in `livePtys` for the session's lifetime. |
|
|
224
238
|
| 7 | `[pty-tracker] op=spawn sessionId=<8> pid=<pid> size=<n>` (also fires for spawnClaudeSession; same line shape on the rc-spawn path) |
|
|
225
239
|
| 8 | `[rc-spawn] op=exit unitToken=<t> pid=<pid> ranMs=<n>` paired with `[pty-tracker] op=exit` from `handlePtyNaturalExit` — fires when claude exits on its own (operator typed `/quit`, SIGINT in the PTY, crash). |
|
|
226
240
|
|
|
@@ -230,6 +244,8 @@ Each session row also carries a small muted timestamp crumb under the name showi
|
|
|
230
244
|
|
|
231
245
|
`verified=true` requires `master-fd=closed` AND `fdDelta>=1` AND `trackerRemoved=true`. `master-fd=close-failed` is logged at error level (`[rc-spawn-error]` prefix) — never swallowed; the next post-archive sweep is the catch-net.
|
|
232
246
|
|
|
247
|
+
**Cross-arm `[rc-life]` schema.** rc-spawn and rc-daemon emit a shared log shape so the populations can be compared from `server.log` alone. One spawn's full lifeline is `grep <unitToken>`; one surface's signature is `grep 'source=rc-spawn'` or `'source=rc-daemon'`. Success on both surfaces is `op=pidfile-present`; failure is `op=spawn-failed` / `op=early-exit` / `op=wait-pid-failed`. Full schema and operator runbook in [`.docs/rc-life-observability.md`](../../../.docs/rc-life-observability.md).
|
|
248
|
+
|
|
233
249
|
**Post-archive fd sweep (Task 558).** Independent of spawn/archive request traffic, the manager runs a 60 s sweep that walks both directions of the master-fd invariant:
|
|
234
250
|
|
|
235
251
|
- `[fd-audit] op=orphan-master sessionId=<8> pid=<n> archivedAt=<ms> heldSinceArchiveMs=<n> fd=<n|unknown>` — fires per tracker whose row is archived (the leak).
|
|
@@ -243,15 +259,6 @@ The sweep is the catch-net for `master-fd=close-failed` and any future regressio
|
|
|
243
259
|
|
|
244
260
|
`openFdCount()` reads `/proc/self/fd` directly on Linux and returns `-1` on darwin (the dev-Mac path). The fd-leak audit on the laptop: `~/maxy-code/platform/scripts/logs-read.sh --tail server 400 | grep -E '\[fd-audit\]|op=archive-release'`. Full per-spawn lifeline: `grep -E '\[rc-spawn\]|\[pty-tracker\]'` filtered by `unitToken`.
|
|
245
261
|
|
|
246
|
-
**Non-PTY scope spawn — activation gate (Tasks 552 + 554 + 555 + 556).** `claude rc` daemon spawns (and historically `/rc-spawn`, until Task 557 restored node-pty for that path) go through `systemdSpawn` (a `child_process.spawn` around `systemd-run --user --scope ...`, no PTY). The scope's inner command is `script -q -f -c "<claude cmd>" "<captureFilePath>"` (Task 556): `script(1)` allocates a real pty master and slave so claude runs on a TTY (without one, `claude --remote-control --resume` and `claude rc --spawn` early-exit because `--scope` units inherit the launcher's `stdio: 'ignore'` fds), and writes its typescript to a per-spawn capture file at `~/.<brand>/logs/spawn-<unitToken>.log`. The capture file holds the child's stdout/stderr and survives scope reaping, so a fast-exiting child's last words are recoverable by reading the file. (The prior Task 555 attempt — `StandardOutput=journal` + `SyslogIdentifier=` scope properties — was a no-op because those are `Exec*=` *service-unit* fields that systemd silently ignores on `--scope` units.) The activation gate polls `systemctl show -p ActiveState -p ControlGroup -p Result -p SubState` every 50 ms until either the scope reaches `ActiveState=active` with a pid in `cgroup.procs` (success — a handle is returned) or it reaches a terminal state. Four terminal outcomes are distinguished:
|
|
247
|
-
|
|
248
|
-
- **`boot-crash`** — `cgroup.procs` was observed non-empty at some point and is now empty: claude reached init and crashed. The observed pid is included.
|
|
249
|
-
- **`child-exited-during-activation`** — `cgroup.procs` was never observed populated and systemd reports `Result=success`: the child exited normally faster than the poll interval (50 ms). Task 555 added this branch to distinguish a clean fast-exit from a genuine systemd-side start failure. Pre-Task-556 the canonical trigger was a `--remote-control … --resume <sid>` spawn that received `/dev/null` on stdin and exited at the no-input branch in ~50 ms; with the script(1) TTY wrap in place, this branch now fires only for genuine fast-exits (a missing transcript, a bad `--resume` id, etc.).
|
|
250
|
-
- **`systemd-start-failure`** — `cgroup.procs` was never observed populated and systemd reports `Result=failed` (or any non-`success`): systemd itself rejected the unit (bad cwd, missing binary, slice not loaded).
|
|
251
|
-
- **`activation-timeout`** — the 5 s deadline expired without `ActiveState` ever leaving the activating set: a genuine systemd hang.
|
|
252
|
-
|
|
253
|
-
Every terminal-branch error envelope embeds the last ~2 KB of the capture file as `captureTail=<json>`, so the admin-UI log line carries the child's actual exit message without an SSH-into-the-box step. The capture file itself persists at `~/.<brand>/logs/spawn-<unitToken>.log` after the scope is reaped — `cat`, `tail -f`, or any other file tool reads it; no `journalctl` round-trip required.
|
|
254
|
-
|
|
255
262
|
**PTY lifecycle contract (Tasks 170 + 176 + 260).** A PTY reaches its end via one of two branches: **operator-request** (operator clicks End or the auto-archive Stop hook calls `killSession`) or **natural-exit** (the claude child exits on its own — operator typed `/quit`, SIGINT in the PTY, crash, network drop on `--remote-control`). Both branches honour a single invariant: the pty master file descriptor is released by an explicit `pty.destroy()` and the in-process tracker entry is removed before the next `/list` or `/events` tick. As of Task 260 the tracker is a module-scoped `Map<sessionId, PtyTracker>` in `pty-spawner.ts` — the metadata-rich `SessionStore` is gone; the tracker holds only what the file system cannot (PtyHandle + pid + bridge ids + runtime flags). Without the explicit destroy, the master fd lingers in node-pty's internal socket until V8 GC finalises the IPty object — non-deterministic and accumulates under load until the kernel pty cap (Linux 3072, macOS 511) refuses new spawns. Without the explicit row removal, the manager shutdown loop SIGTERMs PIDs that already logged `process-exited`, masking the leak only because the manager restarts every few hours. When both branches fire on the same exit (operator clicks End and node-pty's `onExit` fans out the SIGTERM to both listeners), a per-row `fdReleased` flag short-circuits the second branch so `pty.destroy()` runs exactly once on the live socket — without the flag, the second call throws "socket already destroyed" and the operator-request line would falsely log `master-fd=close-failed`. If the first branch's destroy throws and is rescued, the flag stays unset and the second branch retries (defense in depth). Every `kill … pid=<n>` log line carries a `master-fd=closed` suffix (or `master-fd=close-failed err=<msg>` on the rescued throw branch — a graceful degradation so a corner-case socket-state failure cannot turn a logically-successful exit into a 500); the operator-request line additionally identifies `reason=operator-request`, the natural-exit line identifies `reason=process-exited`. Both branches are verified by the `stop-session-fd-release` and `endpoint-stop-delete` integration tests (operator-request live and already-exited cycles + natural-exit cycle + throw-then-retry coordination, Linux kernel-level ptmx fd accounting on each).
|
|
256
263
|
|
|
257
264
|
The metadata pane subscribes to the same /list projection. When an operator clicks End on an alive row, the DELETE returns 200 and the post-mutation refetch decides what happens next: a session that wrote a JSONL surfaces as a dehydrated `status: 'ended'` row (the pane swaps `End session` for `Purge JSONL` plus `Resume`), and a session that never wrote a JSONL (`Turns: 0`) leaves the list entirely (the pane shows a `Session ended without a transcript. Close this pane.` banner with a Close button and no destructive action). The manager's `/list` and `/meta` are the only authorities on post-End state; the client does not pre-empt either response with an optimistic mutation.
|
|
@@ -305,6 +312,8 @@ A plugin extends what Maxy can do. Each plugin adds a focused capability — con
|
|
|
305
312
|
|
|
306
313
|
Maxy's own capabilities are plugins too. Marketplace plugins (like Stripe) work the same way — Maxy manages all of them through conversation.
|
|
307
314
|
|
|
315
|
+
The tables below are the install catalogue — every plugin the platform can ship. They are not evidence of what is enabled on the current account. For the live install set, ask Maxy to call `capabilities-here`.
|
|
316
|
+
|
|
308
317
|
## Plugin Groups
|
|
309
318
|
|
|
310
319
|
### Core (always active)
|
|
@@ -2,7 +2,7 @@ import { initStderrTee } from "../../../../lib/mcp-stderr-tee/dist/index.js";
|
|
|
2
2
|
initStderrTee("browser");
|
|
3
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
-
import {
|
|
5
|
+
import { eagerTool } from "../../../../lib/mcp-eager/dist/index.js";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { writeFile } from "node:fs/promises";
|
|
8
8
|
import { renderPage } from "./lib/cdp-render.js";
|
|
@@ -29,7 +29,7 @@ function cap(s, max) {
|
|
|
29
29
|
return { body: s, truncated: false };
|
|
30
30
|
return { body: s.slice(0, max), truncated: true };
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
eagerTool(server, "browser-render", "Render a JavaScript-heavy web page in the device's real Chromium and return its fully rendered DOM. Use this for pages that WebFetch and url-get return empty or as a shell because they require JS execution (client-rendered SPAs, content gated behind in-page scripts). Returns the rendered HTML and the page's visible text. For static, server-rendered pages prefer url-get (verbatim) or WebFetch (summary) — this tool is the heavier JS-rendering path.", {
|
|
33
33
|
url: z.string().url().describe("Absolute http(s) URL to render"),
|
|
34
34
|
loadTimeoutMs: z.number().int().positive().optional().describe("Max wait for the page load event (default 30000)"),
|
|
35
35
|
}, async (params) => {
|
|
@@ -79,54 +79,54 @@ function reply(label, r, successText) {
|
|
|
79
79
|
}
|
|
80
80
|
return { content: [{ type: "text", text: successText ?? `${label}: ok` }] };
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
eagerTool(server, "browser-navigate", "Open a URL in the device's Chromium and keep the page alive for follow-up automation (click, fill, snapshot, pdf-save, screenshot). This is the entry point for interactive browser work — call it before any other browser-* automation tool. Reuses the one live automation page; use browser-tabs to open a separate page. For one-shot read-only retrieval of a JS page use browser-render instead.", {
|
|
83
83
|
url: z.string().url().describe("Absolute http(s) URL to open"),
|
|
84
84
|
loadTimeoutMs: z.number().int().positive().optional().describe("Max wait for the page load event (default 30000)"),
|
|
85
85
|
}, async (params) => reply("browser-navigate", await actions.navigate(browserSession, params, actionCtx), `Navigated to ${params.url}`));
|
|
86
|
-
|
|
86
|
+
eagerTool(server, "browser-snapshot", "Return an accessibility snapshot of the current page: each interactive or landmark element as role, accessible name, and a unique CSS selector. Use the returned selector verbatim with browser-click / browser-fill / browser-hover — it targets exactly the element you saw. Call this after browser-navigate (or after an action changes the page) to know what is on the page.", {}, async () => {
|
|
87
87
|
const r = await actions.snapshot(browserSession, {}, actionCtx);
|
|
88
88
|
return reply("browser-snapshot", r, r.data?.text);
|
|
89
89
|
});
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
eagerTool(server, "browser-click", "Click the element matching a CSS selector on the current page. Use a selector from browser-snapshot. Returns selector-not-found if nothing matches.", { selector: z.string().describe("CSS selector of the element to click") }, async (params) => reply("browser-click", await actions.click(browserSession, params, actionCtx), `Clicked ${params.selector}`));
|
|
91
|
+
eagerTool(server, "browser-fill", "Set the value of one input, textarea, or contenteditable matching a CSS selector, firing input/change events. For multiple fields in one call use browser-fill-form.", {
|
|
92
92
|
selector: z.string().describe("CSS selector of the field"),
|
|
93
93
|
value: z.string().describe("Value to set"),
|
|
94
94
|
}, async (params) => reply("browser-fill", await actions.fill(browserSession, params, actionCtx), `Filled ${params.selector}`));
|
|
95
|
-
|
|
95
|
+
eagerTool(server, "browser-fill-form", "Fill several fields in one call. Each field is a CSS selector and the value to set. Reports every selector that matched nothing.", {
|
|
96
96
|
fields: z.array(z.object({
|
|
97
97
|
selector: z.string().describe("CSS selector of the field"),
|
|
98
98
|
value: z.string().describe("Value to set"),
|
|
99
99
|
})).describe("Fields to fill"),
|
|
100
100
|
}, async (params) => reply("browser-fill-form", await actions.fillForm(browserSession, params, actionCtx), `Filled ${params.fields.length} field(s)`));
|
|
101
|
-
|
|
101
|
+
eagerTool(server, "browser-type", "Type text into the focused element via real keyboard input. Pass a selector to focus that element first. Use this when setting value directly (browser-fill) does not trigger the page's keystroke handlers (autocompletes, rich editors).", {
|
|
102
102
|
text: z.string().describe("Text to type"),
|
|
103
103
|
selector: z.string().optional().describe("Optional CSS selector to focus before typing"),
|
|
104
104
|
}, async (params) => reply("browser-type", await actions.type(browserSession, params, actionCtx), "Typed text"));
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
eagerTool(server, "browser-press-key", "Press a single key on the focused element (Enter, Tab, Escape, Backspace, Delete, Arrow keys, Home, End, PageUp, PageDown, Space, or a single character). Use for submitting forms (Enter) or keyboard navigation.", { key: z.string().describe("Key name or single character") }, async (params) => reply("browser-press-key", await actions.pressKey(browserSession, params, actionCtx), `Pressed ${params.key}`));
|
|
106
|
+
eagerTool(server, "browser-hover", "Hover the pointer over the element matching a CSS selector, firing pointer/mouse-over events. Use to reveal hover menus or tooltips before reading or clicking.", { selector: z.string().describe("CSS selector of the element to hover") }, async (params) => reply("browser-hover", await actions.hover(browserSession, params, actionCtx), `Hovered ${params.selector}`));
|
|
107
|
+
eagerTool(server, "browser-select-option", "Choose an option in a <select> dropdown by option value or visible label, firing a change event.", {
|
|
108
108
|
selector: z.string().describe("CSS selector of the <select>"),
|
|
109
109
|
value: z.string().optional().describe("Option value to select"),
|
|
110
110
|
label: z.string().optional().describe("Option visible text/label to select"),
|
|
111
111
|
}, async (params) => reply("browser-select-option", await actions.selectOption(browserSession, params, actionCtx), `Selected option in ${params.selector}`));
|
|
112
|
-
|
|
112
|
+
eagerTool(server, "browser-wait-for", "Wait until an element (CSS selector) appears or some text is present on the page, up to a timeout. Use after an action that loads content asynchronously, before reading or interacting.", {
|
|
113
113
|
selector: z.string().optional().describe("CSS selector to wait for"),
|
|
114
114
|
text: z.string().optional().describe("Visible text to wait for"),
|
|
115
115
|
timeoutMs: z.number().int().positive().optional().describe("Max wait (default 30000)"),
|
|
116
116
|
}, async (params) => reply("browser-wait-for", await actions.waitFor(browserSession, params, actionCtx), "Condition met"));
|
|
117
|
-
|
|
117
|
+
eagerTool(server, "browser-handle-dialog", "Arm how the next JavaScript dialog(s) — alert, confirm, prompt — on the current page are answered. Set this BEFORE the action that triggers the dialog, because dialogs block the page and cannot be answered after the fact. The policy stands until changed. Unarmed dialogs are auto-dismissed and reported by browser-console-messages.", {
|
|
118
118
|
accept: z.boolean().describe("true to accept/OK, false to dismiss/Cancel"),
|
|
119
119
|
promptText: z.string().optional().describe("Text to enter into a prompt() dialog when accepting"),
|
|
120
120
|
}, async (params) => reply("browser-handle-dialog", actions.handleDialog(browserSession, params), `Dialog policy armed: accept=${params.accept}`));
|
|
121
|
-
|
|
121
|
+
eagerTool(server, "browser-evaluate", "Run a JavaScript expression in the current page and return its value (awaits a returned promise). Use for reading page state or driving behaviour that no other tool covers. The expression runs in the page, not in Node.", { expression: z.string().describe("JavaScript expression to evaluate in the page") }, async (params) => {
|
|
122
122
|
const r = await actions.evaluate(browserSession, params, actionCtx);
|
|
123
123
|
return reply("browser-evaluate", r, `Result: ${JSON.stringify(r.data?.value ?? null)}`);
|
|
124
124
|
});
|
|
125
|
-
|
|
125
|
+
eagerTool(server, "browser-console-messages", "Return and clear the buffered console output and uncaught errors from the current page (captured since navigation). Use to debug why a page or interaction did not behave as expected.", {}, async () => {
|
|
126
126
|
const r = actions.consoleMessages(browserSession);
|
|
127
127
|
return reply("browser-console-messages", r, r.data?.text);
|
|
128
128
|
});
|
|
129
|
-
|
|
129
|
+
eagerTool(server, "browser-tabs", "Manage browser tabs/pages: list open pages, open a new page (optionally at a URL and switch to it), select an existing page by id, or close a page by id. Use 'new' or 'select' to get a fresh page so stale state from a prior task does not leak in.", {
|
|
130
130
|
action: z.enum(["list", "new", "select", "close"]).describe("Tab action"),
|
|
131
131
|
id: z.string().optional().describe("Target id (required for select/close)"),
|
|
132
132
|
url: z.string().optional().describe("URL to open (optional for new)"),
|
|
@@ -138,7 +138,7 @@ eagerToolGated(server, "browser-tabs", "research-assistant", "Manage browser tab
|
|
|
138
138
|
: `tabs ${params.action}: ok`;
|
|
139
139
|
return reply("browser-tabs", r, text);
|
|
140
140
|
});
|
|
141
|
-
|
|
141
|
+
eagerTool(server, "browser-pdf-save", "Render the current page to a PDF file on the device using Chromium's print pipeline (honours @page/@media print CSS, prints backgrounds). Pass an absolute output path. This is the on-device replacement for the old Playwright browser_pdf_save: navigate to the HTML (served over http, or a file path the browser can open), then call this.", {
|
|
142
142
|
path: z.string().describe("Absolute output path for the .pdf file"),
|
|
143
143
|
landscape: z.boolean().optional().describe("Landscape orientation (default false)"),
|
|
144
144
|
scale: z.number().optional().describe("Scale of the page rendering (default 1)"),
|
|
@@ -147,7 +147,7 @@ eagerToolGated(server, "browser-pdf-save", "research-assistant", "Render the cur
|
|
|
147
147
|
const r = await actions.pdfSave(browserSession, params, actionCtx);
|
|
148
148
|
return reply("browser-pdf-save", r, `Saved PDF to ${params.path} (${r.data?.bytes ?? 0} bytes)`);
|
|
149
149
|
});
|
|
150
|
-
|
|
150
|
+
eagerTool(server, "browser-screenshot", "Capture a PNG of the current page (or one element, via a CSS selector clip) to a file on the device. Pass an absolute output path. Use selector clips to capture glassmorphism/blur sections as print fallback images for A4 PDFs.", {
|
|
151
151
|
path: z.string().describe("Absolute output path for the .png file"),
|
|
152
152
|
selector: z.string().optional().describe("CSS selector to clip to a single element"),
|
|
153
153
|
fullPage: z.boolean().optional().describe("Capture beyond the viewport (default false)"),
|
|
@@ -155,7 +155,7 @@ eagerToolGated(server, "browser-screenshot", "research-assistant", "Capture a PN
|
|
|
155
155
|
const r = await actions.screenshot(browserSession, params, actionCtx);
|
|
156
156
|
return reply("browser-screenshot", r, `Saved screenshot to ${params.path} (${r.data?.bytes ?? 0} bytes)`);
|
|
157
157
|
});
|
|
158
|
-
|
|
158
|
+
eagerTool(server, "browser-resize", "Set the current page's viewport size in CSS pixels. Use before a screenshot to control the rendered dimensions (e.g. match an element's measured size to avoid scrollbars).", {
|
|
159
159
|
width: z.number().int().positive().describe("Viewport width in CSS pixels"),
|
|
160
160
|
height: z.number().int().positive().describe("Viewport height in CSS pixels"),
|
|
161
161
|
}, async (params) => reply("browser-resize", await actions.resize(browserSession, params, actionCtx), `Resized to ${params.width}x${params.height}`));
|
|
@@ -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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"}
|