@dollhousemcp/mcp-server 2.0.30 → 2.0.32
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/CHANGELOG.md +9 -0
- package/data/ensembles/welcome-to-the-dollhouse.md +94 -0
- package/data/personas/dollhouse-expert.md +242 -14
- package/data/skills/research-to-elements.md +136 -0
- package/dist/elements/agents/AgentManager.d.ts +8 -1
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +49 -9
- package/dist/elements/ensembles/EnsembleManager.d.ts +36 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -1
- package/dist/elements/ensembles/EnsembleManager.js +94 -5
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +8 -7
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/evaluatePermission.js +6 -3
- package/dist/server/tools/MCPAQLTools.js +21 -5
- package/dist/services/BuildInfoService.d.ts +3 -1
- package/dist/services/BuildInfoService.d.ts.map +1 -1
- package/dist/services/BuildInfoService.js +27 -5
- package/dist/utils/permissionHookShared.d.ts +39 -0
- package/dist/utils/permissionHookShared.d.ts.map +1 -1
- package/dist/utils/permissionHookShared.js +38 -1
- package/dist/utils/permissionHookStatus.d.ts.map +1 -1
- package/dist/utils/permissionHookStatus.js +6 -2
- package/dist/utils/permissionHooks.d.ts +1 -1
- package/dist/utils/permissionHooks.d.ts.map +1 -1
- package/dist/utils/permissionHooks.js +2 -2
- package/dist/web/public/app.js +213 -12
- package/dist/web/public/index.html +16 -7
- package/dist/web/public/styles.css +229 -30
- package/dist/web/routes/healthRoutes.d.ts.map +1 -1
- package/dist/web/routes/healthRoutes.js +3 -1
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +10 -2
- package/package.json +1 -1
- package/scripts/pretooluse-dollhouse.sh +157 -39
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionHookStatus.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAGhC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,
|
|
1
|
+
{"version":3,"file":"permissionHookStatus.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAGhC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EAapC,MAAM,2BAA2B,CAAC;AAInC,wBAAgB,uBAAuB,CAAC,OAAO,SAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAMhG;AAED,wBAAsB,4BAA4B,CAAC,OAAO,SAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAMpH;AA2FD,wBAAgB,yCAAyC,IAAI,kCAAkC,GAAG,IAAI,CAErG;AAED,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE;AAED,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAgC/B;AAED,wBAAsB,6BAA6B,CAAC,OAAO,SAAY,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAgC5G;AA4CD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,GAClC,2BAA2B,CAmD7B;AAED,wBAAsB,8BAA8B,CAClD,OAAO,SAAY,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,kCAAkC,CAAC,CA0D7C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { logger } from './logger.js';
|
|
3
|
-
import { AUTO_REPAIRABLE_HOOK_HOSTS, auditHookAssets, collectHookMarkerPaths, collectHookMarkerPathsAsync, getPrimaryHookScriptPath, installHookAssetsForHost, normalizeHookHost, readHostSpecificHookStatus, summarizeMarkerStatuses, supportsManagedHookAssets, } from './permissionHookShared.js';
|
|
3
|
+
import { AUTO_REPAIRABLE_HOOK_HOSTS, auditHookAssets, collectHookMarkerPaths, collectHookMarkerPathsAsync, getPermissionHookDiagnosticsPath, getPrimaryHookScriptPath, installHookAssetsForHost, normalizeHookHost, readLastPermissionHookDiagnostic, readHostSpecificHookStatus, summarizeMarkerStatuses, supportsManagedHookAssets, } from './permissionHookShared.js';
|
|
4
4
|
let lastPermissionHookStartupRepairSummary = null;
|
|
5
5
|
export function getPermissionHookStatus(homeDir = homedir(), host) {
|
|
6
6
|
if (host) {
|
|
@@ -122,11 +122,15 @@ export async function getPermissionHookAuditSummary(homeDir = homedir()) {
|
|
|
122
122
|
const needsRepairHosts = statuses
|
|
123
123
|
.filter(({ status }) => status.needsRepair)
|
|
124
124
|
.map(({ host }) => host);
|
|
125
|
+
const diagnosticsPath = getPermissionHookDiagnosticsPath(homeDir);
|
|
126
|
+
const lastDiagnostic = await readLastPermissionHookDiagnostic(homeDir);
|
|
125
127
|
return {
|
|
126
128
|
installedHosts,
|
|
127
129
|
currentHosts,
|
|
128
130
|
repairedHosts,
|
|
129
131
|
needsRepairHosts,
|
|
132
|
+
diagnosticsPath,
|
|
133
|
+
lastDiagnostic,
|
|
130
134
|
lastStartupRepair: getLastPermissionHookStartupRepairSummary(),
|
|
131
135
|
};
|
|
132
136
|
}
|
|
@@ -253,4 +257,4 @@ export async function repairPermissionHooksOnStartup(homeDir = homedir(), source
|
|
|
253
257
|
`(repaired=${repairedCount}, needsRepair=${needsRepairCount})`);
|
|
254
258
|
return summary;
|
|
255
259
|
}
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFRTCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2Qix5QkFBeUIsR0FDMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxJQUFJLHNDQUFzQyxHQUE4QyxJQUFJLENBQUM7QUFFN0YsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFhO0lBQ3hFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLDRCQUE0QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFhO0lBQ25GLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLE1BQTRCLEVBQzVCLEtBQTJCO0lBRTNCLE9BQU8sT0FBTyxD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QUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNyRCxNQUFNLENBQUMsT0FBTyxLQUFLLGNBQWMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQXVDO1FBQ2xELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDaEQsVUFBVSxFQUFFLFdBQVcsR0FBRyxTQUFTO1FBQ25DLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsV0FBVztLQUNaLENBQUM7SUFDRixzQ0FBc0MsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsSUFBSSxDQUNULDJEQUEyRCxPQUFPLENBQUMsVUFBVSxLQUFLO1FBQ2xGLGFBQWEsYUFBYSxpQkFBaUIsZ0JBQWdCLEdBQUcsQ0FDL0QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBIb29rQXNzZXRBdWRpdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIHR5cGUgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zLFxuICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUyxcbiAgYXVkaXRIb29rQXNzZXRzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMsXG4gIGdldFByaW1hcnlIb29rU2NyaXB0UGF0aCxcbiAgaW5zdGFsbEhvb2tBc3NldHNGb3JIb3N0LFxuICBub3JtYWxpemVIb29rSG9zdCxcbiAgcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMsXG4gIHN1bW1hcml6ZU1hcmtlclN0YXR1c2VzLFxuICBzdXBwb3J0c01hbmFnZWRIb29rQXNzZXRzLFxufSBmcm9tICcuL3Blcm1pc3Npb25Ib29rU2hhcmVkLmpzJztcblxubGV0IGxhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5OiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1N0YXR1cyhob21lRGlyID0gaG9tZWRpcigpLCBob3N0Pzogc3RyaW5nKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBpZiAoaG9zdCkge1xuICAgIHJldHVybiByZWFkSG9zdFNwZWNpZmljSG9va1N0YXR1cyhob21lRGlyLCBob3N0KTtcbiAgfVxuXG4gIHJldHVybiBzdW1tYXJpemVNYXJrZXJTdGF0dXNlcyhjb2xsZWN0SG9va01hcmtlclBhdGhzKGhvbWVEaXIpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMoaG9tZURpciA9IGhvbWVkaXIoKSwgaG9zdD86IHN0cmluZyk6IFByb21pc2U8UGVybWlzc2lvbkhvb2tTdGF0dXM+IHtcbiAgaWYgKGhvc3QpIHtcbiAgICByZXR1cm4gcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMoaG9tZURpciwgaG9zdCk7XG4gIH1cblxuICByZXR1cm4gc3VtbWFyaXplTWFya2VyU3RhdHVzZXMoYXdhaXQgY29sbGVjdEhvb2tNYXJrZXJQYXRoc0FzeW5jKGhvbWVEaXIpKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQXR0ZW1wdEhvb2tBc3NldFJlcGFpcihcbiAgc3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgYXVkaXQ6IEhvb2tBc3NldEF1ZGl0UmVzdWx0LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHN0YXR1cy5pbnN0YWxsZWRcbiAgICB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWRcbiAgICB8fCBzdGF0dXMuc2NyaXB0UGF0aFxuICAgIHx8IGF1ZGl0LmFzc2V0c1ByZXBhcmVkXG4gICAgfHwgYXVkaXQuc3RhbGVBc3NldHMubGVuZ3RoID4gMCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWxsYmFja1Blcm1pc3Npb25Ib29rU3RhdHVzKFxuICBiYXNlU3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgbm9ybWFsaXplZEhvc3Q6IHN0cmluZyxcbiAgaG9tZURpcjogc3RyaW5nLFxuKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0dXMsXG4gICAgaG9zdDogYmFzZVN0YXR1cy5ob3N0ID8/IG5vcm1hbGl6ZWRIb3N0LFxuICAgIHNjcmlwdFBhdGg6IGJhc2VTdGF0dXMuc2NyaXB0UGF0aCA/PyBnZXRQcmltYXJ5SG9va1NjcmlwdFBhdGgobm9ybWFsaXplZEhvc3QsIGhvbWVEaXIpLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhdWRpdEFuZE1heWJlUmVwYWlySG9va0Fzc2V0cyhcbiAgbm9ybWFsaXplZEhvc3Q6IHN0cmluZyxcbiAgaG9tZURpcjogc3RyaW5nLFxuICBzb3VyY2VTY3JpcHRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGF1dG9SZXBhaXI6IGJvb2xlYW4sXG4gIGZhbGxiYWNrU3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbik6IFByb21pc2U8eyBhdWRpdDogSG9va0Fzc2V0QXVkaXRSZXN1bHQ7IGF1dG9SZXBhaXJlZDogYm9vbGVhbiB9PiB7XG4gIGxldCBhdWRpdCA9IGF3YWl0IGF1ZGl0SG9va0Fzc2V0cyhub3JtYWxpemVkSG9zdCwgaG9tZURpciwgc291cmNlU2NyaXB0UGF0aCk7XG4gIGxldCBhdXRvUmVwYWlyZWQgPSBmYWxzZTtcblxuICBpZiAoIWF1ZGl0LmFzc2V0c0N1cnJlbnQgJiYgYXV0b1JlcGFpciAmJiBzaG91bGRBdHRlbXB0SG9va0Fzc2V0UmVwYWlyKGZhbGxiYWNrU3RhdHVzLCBhdWRpdCkpIHtcbiAgICBhd2FpdCBpbnN0YWxsSG9va0Fzc2V0c0Zvckhvc3Qobm9ybWFsaXplZEhvc3QsIGhvbWVEaXIsIHNvdXJjZVNjcmlwdFBhdGgpO1xuICAgIGF1ZGl0ID0gYXdhaXQgYXVkaXRIb29rQXNzZXRzKG5vcm1hbGl6ZWRIb3N0LCBob21lRGlyLCBzb3VyY2VTY3JpcHRQYXRoKTtcbiAgICBhdXRvUmVwYWlyZWQgPSBhdWRpdC5hc3NldHNDdXJyZW50O1xuICB9XG5cbiAgcmV0dXJuIHsgYXVkaXQsIGF1dG9SZXBhaXJlZCB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEhvb2tSZXBhaXJGYWlsdXJlU3RhdHVzKFxuICBmYWxsYmFja1N0YXR1czogUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIGVycm9yOiB1bmtub3duLFxuKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gRmFpbGVkIHRvIHJlY29uY2lsZSBob29rIGFzc2V0cyBmb3IgJHtmYWxsYmFja1N0YXR1cy5ob3N0fTogJHttZXNzYWdlfWApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uZmFsbGJhY2tTdGF0dXMsXG4gICAgYXNzZXRzQ3VycmVudDogZmFsc2UsXG4gICAgYXV0b1JlcGFpcmVkOiBmYWxzZSxcbiAgICBuZWVkc1JlcGFpcjogdHJ1ZSxcbiAgICByZXBhaXJFcnJvcjogbWVzc2FnZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9TdGFydHVwUmVwYWlyT3V0Y29tZShzdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdFsnb3V0Y29tZSddIHtcbiAgaWYgKHN0YXR1cy5yZXBhaXJFcnJvcikgcmV0dXJuICdlcnJvcic7XG4gIGlmIChzdGF0dXMuYXV0b1JlcGFpcmVkKSByZXR1cm4gJ3JlcGFpcmVkJztcbiAgaWYgKHN0YXR1cy5uZWVkc1JlcGFpciAmJiAoc3RhdHVzLmluc3RhbGxlZCB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpKSByZXR1cm4gJ25lZWRzX3JlcGFpcic7XG4gIGlmIChzdGF0dXMuYXNzZXRzQ3VycmVudCkgcmV0dXJuICdjdXJyZW50JztcbiAgcmV0dXJuICdub3RfaW5zdGFsbGVkJztcbn1cblxuZnVuY3Rpb24gdG9TdGFydHVwUmVwYWlySG9zdFJlc3VsdChcbiAgaG9zdDogc3RyaW5nLFxuICBzdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdHVzLFxuICAgIGhvc3QsXG4gICAgb3V0Y29tZTogdG9TdGFydHVwUmVwYWlyT3V0Y29tZShzdGF0dXMpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVN0YXJ0dXBSZXBhaXJTdW1tYXJ5KFxuICBzdW1tYXJ5OiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbCxcbik6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsIHtcbiAgaWYgKCFzdW1tYXJ5KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdW1tYXJ5LFxuICAgIGhvc3RSZXN1bHRzOiBzdW1tYXJ5Lmhvc3RSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiAoeyAuLi5yZXN1bHQgfSkpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkoKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSB8IG51bGwge1xuICByZXR1cm4gY2xvbmVTdGFydHVwUmVwYWlyU3VtbWFyeShsYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5Rm9yVGVzdHMoKTogdm9pZCB7XG4gIGxhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5ID0gbnVsbDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29uY2lsZVBlcm1pc3Npb25Ib29rU3RhdHVzKFxuICBob3N0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29uY2lsZVBlcm1pc3Npb25Ib29rT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxQZXJtaXNzaW9uSG9va1N0YXR1cz4ge1xuICBjb25zdCBub3JtYWxpemVkSG9zdCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpO1xuICBjb25zdCBob21lRGlyID0gb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKTtcbiAgY29uc3Qgc291cmNlU2NyaXB0UGF0aCA9IG9wdGlvbnMuc291cmNlU2NyaXB0UGF0aDtcbiAgY29uc3QgYXV0b1JlcGFpciA9IG9wdGlvbnMuYXV0b1JlcGFpciA/PyBmYWxzZTtcbiAgY29uc3QgYmFzZVN0YXR1cyA9IHJlYWRIb3N0U3BlY2lmaWNIb29rU3RhdHVzKGhvbWVEaXIsIG5vcm1hbGl6ZWRIb3N0KTtcblxuICBpZiAoIXN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMobm9ybWFsaXplZEhvc3QpKSB7XG4gICAgcmV0dXJuIGJhc2VTdGF0dXM7XG4gIH1cblxuICBjb25zdCBmYWxsYmFja1N0YXR1cyA9IGJ1aWxkRmFsbGJhY2tQZXJtaXNzaW9uSG9va1N0YXR1cyhiYXNlU3RhdHVzLCBub3JtYWxpemVkSG9zdCwgaG9tZURpcik7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IGF1ZGl0LCBhdXRvUmVwYWlyZWQgfSA9IGF3YWl0IGF1ZGl0QW5kTWF5YmVSZXBhaXJIb29rQXNzZXRzKFxuICAgICAgbm9ybWFsaXplZEhvc3QsXG4gICAgICBob21lRGlyLFxuICAgICAgc291cmNlU2NyaXB0UGF0aCxcbiAgICAgIGF1dG9SZXBhaXIsXG4gICAgICBmYWxsYmFja1N0YXR1cyxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZhbGxiYWNrU3RhdHVzLFxuICAgICAgYXNzZXRzUHJlcGFyZWQ6IGF1ZGl0LmFzc2V0c1ByZXBhcmVkLFxuICAgICAgYXNzZXRzQ3VycmVudDogYXVkaXQuYXNzZXRzQ3VycmVudCxcbiAgICAgIGF1dG9SZXBhaXJlZCxcbiAgICAgIG5lZWRzUmVwYWlyOiAhYXVkaXQuYXNzZXRzQ3VycmVudCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBidWlsZEhvb2tSZXBhaXJGYWlsdXJlU3RhdHVzKGZhbGxiYWNrU3RhdHVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5KGhvbWVEaXIgPSBob21lZGlyKCkpOiBQcm9taXNlPFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5PiB7XG4gIGNvbnN0IHN0YXR1c2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQVVUT19SRVBBSVJBQkxFX0hPT0tfSE9TVFMubWFwKGFzeW5jIChob3N0KSA9PiAoe1xuICAgICAgaG9zdCxcbiAgICAgIHN0YXR1czogYXdhaXQgcmVjb25jaWxlUGVybWlzc2lvbkhvb2tTdGF0dXMoaG9zdCwgeyBob21lRGlyIH0pLFxuICAgIH0pKSxcbiAgKTtcblxuICBjb25zdCBpbnN0YWxsZWRIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmluc3RhbGxlZCB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpXG4gICAgLm1hcCgoeyBob3N0IH0pID0+IGhvc3QpO1xuICBjb25zdCBjdXJyZW50SG9zdHMgPSBzdGF0dXNlc1xuICAgIC5maWx0ZXIoKHsgc3RhdHVzIH0pID0+IHN0YXR1cy5hc3NldHNDdXJyZW50KVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcbiAgY29uc3QgcmVwYWlyZWRIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmF1dG9SZXBhaXJlZClcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG4gIGNvbnN0IG5lZWRzUmVwYWlySG9zdHMgPSBzdGF0dXNlc1xuICAgIC5maWx0ZXIoKHsgc3RhdHVzIH0pID0+IHN0YXR1cy5uZWVkc1JlcGFpcilcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZWRIb3N0cyxcbiAgICBjdXJyZW50SG9zdHMsXG4gICAgcmVwYWlyZWRIb3N0cyxcbiAgICBuZWVkc1JlcGFpckhvc3RzLFxuICAgIGxhc3RTdGFydHVwUmVwYWlyOiBnZXRMYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb29rSG9zdExhYmVsKGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Y291bnR9IGhvb2sgaG9zdCR7Y291bnQgPT09IDEgPyAnJyA6ICdzJ31gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb29rVmVyYihjb3VudDogbnVtYmVyLCBzaW5ndWxhcjogc3RyaW5nLCBwbHVyYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb3VudCA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xufVxuXG5mdW5jdGlvbiBidWlsZFBlcm1pc3Npb25Ib29rSGVhbHRoTWVzc2FnZShcbiAgc3VtbWFyeTogUGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnksXG4gIGhhZEVycm9yczogYm9vbGVhbixcbiAgcmVwYWlyZWRDb3VudDogbnVtYmVyLFxuICBuZWVkc1JlcGFpckNvdW50OiBudW1iZXIsXG4pOiBzdHJpbmcge1xuICBpZiAoaGFkRXJyb3JzKSB7XG4gICAgaWYgKG5lZWRzUmVwYWlyQ291bnQgPiAwKSB7XG4gICAgICBjb25zdCBob3N0TGFiZWwgPSBmb3JtYXRIb29rSG9zdExhYmVsKG5lZWRzUmVwYWlyQ291bnQpO1xuICAgICAgY29uc3QgdmVyYiA9IGZvcm1hdEhvb2tWZXJiKG5lZWRzUmVwYWlyQ291bnQsICduZWVkcycsICduZWVkJyk7XG4gICAgICByZXR1cm4gYCR7aG9zdExhYmVsfSBzdGlsbCAke3ZlcmJ9IGF0dGVudGlvbiBhZnRlciBzdGFydHVwIHJlcGFpcmA7XG4gICAgfVxuXG4gICAgcmV0dXJuICdBIHN0YXJ0dXAgaG9vayByZXBhaXIgZmFpbGVkIGFuZCBuZWVkcyBhdHRlbnRpb24nO1xuICB9XG5cbiAgaWYgKG5lZWRzUmVwYWlyQ291bnQgPiAwKSB7XG4gICAgY29uc3QgaG9zdExhYmVsID0gZm9ybWF0SG9va0hvc3RMYWJlbChuZWVkc1JlcGFpckNvdW50KTtcbiAgICBjb25zdCB2ZXJiID0gZm9ybWF0SG9va1ZlcmIobmVlZHNSZXBhaXJDb3VudCwgJ25lZWRzJywgJ25lZWQnKTtcbiAgICByZXR1cm4gYCR7aG9zdExhYmVsfSBzdGlsbCAke3ZlcmJ9IHJlcGFpcmA7XG4gIH1cblxuICBpZiAocmVwYWlyZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBob3N0TGFiZWwgPSBmb3JtYXRIb29rSG9zdExhYmVsKHJlcGFpcmVkQ291bnQpO1xuICAgIHJldHVybiBgJHtob3N0TGFiZWx9IHJlcGFpcmVkIG9uIHN0YXJ0dXBgO1xuICB9XG5cbiAgaWYgKHN1bW1hcnkuY3VycmVudEhvc3RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gJ01hbmFnZWQgaG9vayBhc3NldHMgYXJlIGN1cnJlbnQnO1xuICB9XG5cbiAgcmV0dXJuICdObyBtYW5hZ2VkIGhvb2sgYXNzZXRzIGN1cnJlbnRseSBpbnN0YWxsZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgoXG4gIHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuKTogUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5IHtcbiAgY29uc3QgbGFzdFN0YXJ0dXBSZXBhaXIgPSBzdW1tYXJ5Lmxhc3RTdGFydHVwUmVwYWlyO1xuICBjb25zdCBoYWRFcnJvcnMgPSBCb29sZWFuKFxuICAgIGxhc3RTdGFydHVwUmVwYWlyPy5ob3N0UmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdC5vdXRjb21lID09PSAnZXJyb3InKSxcbiAgKTtcbiAgY29uc3QgbmVlZHNSZXBhaXJDb3VudCA9IGxhc3RTdGFydHVwUmVwYWlyPy5uZWVkc1JlcGFpckNvdW50ID8/IHN1bW1hcnkubmVlZHNSZXBhaXJIb3N0cy5sZW5ndGg7XG4gIGNvbnN0IHJlcGFpcmVkQ291bnQgPSBsYXN0U3RhcnR1cFJlcGFpcj8ucmVwYWlyZWRDb3VudCA/PyBzdW1tYXJ5LnJlcGFpcmVkSG9zdHMubGVuZ3RoO1xuICBjb25zdCBtZXNzYWdlID0gYnVpbGRQZXJtaXNzaW9uSG9va0hlYWx0aE1lc3NhZ2UoXG4gICAgc3VtbWFyeSxcbiAgICBoYWRFcnJvcnMsXG4gICAgcmVwYWlyZWRDb3VudCxcbiAgICBuZWVkc1JlcGFpckNvdW50LFxuICApO1xuXG4gIGlmIChoYWRFcnJvcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcGFpcmVkQ291bnQsXG4gICAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgICAgbGFzdENoZWNrZWRBdDogbGFzdFN0YXJ0dXBSZXBhaXI/LmNvbXBsZXRlZEF0LFxuICAgIH07XG4gIH1cblxuICBpZiAobmVlZHNSZXBhaXJDb3VudCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnd2FybmluZycsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcmVwYWlyZWRDb3VudCxcbiAgICAgIG5lZWRzUmVwYWlyQ291bnQsXG4gICAgICBsYXN0Q2hlY2tlZEF0OiBsYXN0U3RhcnR1cFJlcGFpcj8uY29tcGxldGVkQXQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXBhaXJlZENvdW50ID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdvaycsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcmVwYWlyZWRDb3VudCxcbiAgICAgIG5lZWRzUmVwYWlyQ291bnQsXG4gICAgICBsYXN0Q2hlY2tlZEF0OiBsYXN0U3RhcnR1cFJlcGFpcj8uY29tcGxldGVkQXQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiAnb2snLFxuICAgIG1lc3NhZ2UsXG4gICAgcmVwYWlyZWRDb3VudCxcbiAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgIGxhc3RDaGVja2VkQXQ6IGxhc3RTdGFydHVwUmVwYWlyPy5jb21wbGV0ZWRBdCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGFpclBlcm1pc3Npb25Ib29rc09uU3RhcnR1cChcbiAgaG9tZURpciA9IGhvbWVkaXIoKSxcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZyxcbik6IFByb21pc2U8UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeT4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICBjb25zdCBzdGFydGVkQXRJc28gPSBuZXcgRGF0ZShzdGFydGVkQXQpLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IGhvc3RSZXN1bHRzOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0W10gPSBbXTtcblxuICAvLyBQcm9jZXNzIHNlcXVlbnRpYWxseSBiZWNhdXNlIHNldmVyYWwgaG9zdHMgc2hhcmUgdGhlIHNhbWUgYnJpZGdlL2hlbHBlclxuICAvLyB0YXJnZXRzIHVuZGVyIH4vLmRvbGxob3VzZS9ob29rcywgYW5kIGNvbmN1cnJlbnQgd3JpdGVzIGFyZSBmbGFreSBvbiBXaW5kb3dzLlxuICBmb3IgKGNvbnN0IGhvc3Qgb2YgQVVUT19SRVBBSVJBQkxFX0hPT0tfSE9TVFMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcmVjb25jaWxlUGVybWlzc2lvbkhvb2tTdGF0dXMoaG9zdCwge1xuICAgICAgICBob21lRGlyLFxuICAgICAgICBhdXRvUmVwYWlyOiB0cnVlLFxuICAgICAgICBzb3VyY2VTY3JpcHRQYXRoLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGF0dXMuYXV0b1JlcGFpcmVkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbUGVybWlzc2lvbkhvb2tzXSBSZWZyZXNoZWQgaW5zdGFsbGVkIGhvb2sgYXNzZXRzIGZvciAke2hvc3R9YCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5uZWVkc1JlcGFpciAmJiBzdGF0dXMuaW5zdGFsbGVkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBbUGVybWlzc2lvbkhvb2tzXSBIb29rIGFzc2V0cyBzdGlsbCBuZWVkIHJlcGFpciBmb3IgJHtob3N0fWAgK1xuICAgICAgICAgIChzdGF0dXMucmVwYWlyRXJyb3IgPyBgOiAke3N0YXR1cy5yZXBhaXJFcnJvcn1gIDogJycpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBob3N0UmVzdWx0cy5wdXNoKHRvU3RhcnR1cFJlcGFpckhvc3RSZXN1bHQoaG9zdCwgc3RhdHVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gU3RhcnR1cCBob29rIHJlcGFpciBmYWlsZWQgZm9yICR7aG9zdH06ICR7bWVzc2FnZX1gKTtcbiAgICAgIGhvc3RSZXN1bHRzLnB1c2goe1xuICAgICAgICBob3N0LFxuICAgICAgICBpbnN0YWxsZWQ6IGZhbHNlLFxuICAgICAgICBhc3NldHNQcmVwYXJlZDogZmFsc2UsXG4gICAgICAgIGFzc2V0c0N1cnJlbnQ6IGZhbHNlLFxuICAgICAgICBhdXRvUmVwYWlyZWQ6IGZhbHNlLFxuICAgICAgICBuZWVkc1JlcGFpcjogdHJ1ZSxcbiAgICAgICAgcmVwYWlyRXJyb3I6IG1lc3NhZ2UsXG4gICAgICAgIG91dGNvbWU6ICdlcnJvcicsXG4gICAgICB9IHNhdGlzZmllcyBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVwYWlyZWRDb3VudCA9IGhvc3RSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ3JlcGFpcmVkJykubGVuZ3RoO1xuICBjb25zdCBuZWVkc1JlcGFpckNvdW50ID0gaG9zdFJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+XG4gICAgcmVzdWx0Lm91dGNvbWUgPT09ICduZWVkc19yZXBhaXInIHx8IHJlc3VsdC5vdXRjb21lID09PSAnZXJyb3InKS5sZW5ndGg7XG4gIGNvbnN0IGNvbXBsZXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3VtbWFyeTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSA9IHtcbiAgICBzdGFydGVkQXQ6IHN0YXJ0ZWRBdElzbyxcbiAgICBjb21wbGV0ZWRBdDogbmV3IERhdGUoY29tcGxldGVkQXQpLnRvSVNPU3RyaW5nKCksXG4gICAgZHVyYXRpb25NczogY29tcGxldGVkQXQgLSBzdGFydGVkQXQsXG4gICAgcmVwYWlyZWRDb3VudCxcbiAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgIGhvc3RSZXN1bHRzLFxuICB9O1xuICBsYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSA9IGNsb25lU3RhcnR1cFJlcGFpclN1bW1hcnkoc3VtbWFyeSk7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBbUGVybWlzc2lvbkhvb2tzXSBTdGFydHVwIGhvb2sgYXNzZXQgYXVkaXQgY29tcGxldGVkIGluICR7c3VtbWFyeS5kdXJhdGlvbk1zfW1zIGAgK1xuICAgIGAocmVwYWlyZWQ9JHtyZXBhaXJlZENvdW50fSwgbmVlZHNSZXBhaXI9JHtuZWVkc1JlcGFpckNvdW50fSlgLFxuICApO1xuICByZXR1cm4gc3VtbWFyeTtcbn1cbiJdfQ==
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFRTCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUNoQywwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixHQUMxQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLElBQUksc0NBQXNDLEdBQThDLElBQUksQ0FBQztBQUU3RixNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQWE7SUFDeEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sMEJBQTBCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsNEJBQTRCLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQWE7SUFDbkYsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sMEJBQTBCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLHVCQUF1QixDQUFDLE1BQU0sMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsTUFBNEIsRUFD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Z0JBQ2pCLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixPQUFPLEVBQUUsT0FBTzthQUMrQixDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNyRCxNQUFNLENBQUMsT0FBTyxLQUFLLGNBQWMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQXVDO1FBQ2xELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDaEQsVUFBVSxFQUFFLFdBQVcsR0FBRyxTQUFTO1FBQ25DLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsV0FBVztLQUNaLENBQUM7SUFDRixzQ0FBc0MsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsSUFBSSxDQUNULDJEQUEyRCxPQUFPLENBQUMsVUFBVSxLQUFLO1FBQ2xGLGFBQWEsYUFBYSxpQkFBaUIsZ0JBQWdCLEdBQUcsQ0FDL0QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBIb29rQXNzZXRBdWRpdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIHR5cGUgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zLFxuICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUyxcbiAgYXVkaXRIb29rQXNzZXRzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMsXG4gIGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoLFxuICBnZXRQcmltYXJ5SG9va1NjcmlwdFBhdGgsXG4gIGluc3RhbGxIb29rQXNzZXRzRm9ySG9zdCxcbiAgbm9ybWFsaXplSG9va0hvc3QsXG4gIHJlYWRMYXN0UGVybWlzc2lvbkhvb2tEaWFnbm9zdGljLFxuICByZWFkSG9zdFNwZWNpZmljSG9va1N0YXR1cyxcbiAgc3VtbWFyaXplTWFya2VyU3RhdHVzZXMsXG4gIHN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMsXG59IGZyb20gJy4vcGVybWlzc2lvbkhvb2tTaGFyZWQuanMnO1xuXG5sZXQgbGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnk6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzKGhvbWVEaXIgPSBob21lZGlyKCksIGhvc3Q/OiBzdHJpbmcpOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGlmIChob3N0KSB7XG4gICAgcmV0dXJuIHJlYWRIb3N0U3BlY2lmaWNIb29rU3RhdHVzKGhvbWVEaXIsIGhvc3QpO1xuICB9XG5cbiAgcmV0dXJuIHN1bW1hcml6ZU1hcmtlclN0YXR1c2VzKGNvbGxlY3RIb29rTWFya2VyUGF0aHMoaG9tZURpcikpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXNBc3luYyhob21lRGlyID0gaG9tZWRpcigpLCBob3N0Pzogc3RyaW5nKTogUHJvbWlzZTxQZXJtaXNzaW9uSG9va1N0YXR1cz4ge1xuICBpZiAoaG9zdCkge1xuICAgIHJldHVybiByZWFkSG9zdFNwZWNpZmljSG9va1N0YXR1cyhob21lRGlyLCBob3N0KTtcbiAgfVxuXG4gIHJldHVybiBzdW1tYXJpemVNYXJrZXJTdGF0dXNlcyhhd2FpdCBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMoaG9tZURpcikpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRBdHRlbXB0SG9va0Fzc2V0UmVwYWlyKFxuICBzdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICBhdWRpdDogSG9va0Fzc2V0QXVkaXRSZXN1bHQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgc3RhdHVzLmluc3RhbGxlZFxuICAgIHx8IHN0YXR1cy5hc3NldHNQcmVwYXJlZFxuICAgIHx8IHN0YXR1cy5zY3JpcHRQYXRoXG4gICAgfHwgYXVkaXQuYXNzZXRzUHJlcGFyZWRcbiAgICB8fCBhdWRpdC5zdGFsZUFzc2V0cy5sZW5ndGggPiAwLFxuICApO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhbGxiYWNrUGVybWlzc2lvbkhvb2tTdGF0dXMoXG4gIGJhc2VTdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICBub3JtYWxpemVkSG9zdDogc3RyaW5nLFxuICBob21lRGlyOiBzdHJpbmcsXG4pOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVN0YXR1cyxcbiAgICBob3N0OiBiYXNlU3RhdHVzLmhvc3QgPz8gbm9ybWFsaXplZEhvc3QsXG4gICAgc2NyaXB0UGF0aDogYmFzZVN0YXR1cy5zY3JpcHRQYXRoID8/IGdldFByaW1hcnlIb29rU2NyaXB0UGF0aChub3JtYWxpemVkSG9zdCwgaG9tZURpciksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF1ZGl0QW5kTWF5YmVSZXBhaXJIb29rQXNzZXRzKFxuICBub3JtYWxpemVkSG9zdDogc3RyaW5nLFxuICBob21lRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNjcmlwdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgYXV0b1JlcGFpcjogYm9vbGVhbixcbiAgZmFsbGJhY2tTdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuKTogUHJvbWlzZTx7IGF1ZGl0OiBIb29rQXNzZXRBdWRpdFJlc3VsdDsgYXV0b1JlcGFpcmVkOiBib29sZWFuIH0+IHtcbiAgbGV0IGF1ZGl0ID0gYXdhaXQgYXVkaXRIb29rQXNzZXRzKG5vcm1hbGl6ZWRIb3N0LCBob21lRGlyLCBzb3VyY2VTY3JpcHRQYXRoKTtcbiAgbGV0IGF1dG9SZXBhaXJlZCA9IGZhbHNlO1xuXG4gIGlmICghYXVkaXQuYXNzZXRzQ3VycmVudCAmJiBhdXRvUmVwYWlyICYmIHNob3VsZEF0dGVtcHRIb29rQXNzZXRSZXBhaXIoZmFsbGJhY2tTdGF0dXMsIGF1ZGl0KSkge1xuICAgIGF3YWl0IGluc3RhbGxIb29rQXNzZXRzRm9ySG9zdChub3JtYWxpemVkSG9zdCwgaG9tZURpciwgc291cmNlU2NyaXB0UGF0aCk7XG4gICAgYXVkaXQgPSBhd2FpdCBhdWRpdEhvb2tBc3NldHMobm9ybWFsaXplZEhvc3QsIGhvbWVEaXIsIHNvdXJjZVNjcmlwdFBhdGgpO1xuICAgIGF1dG9SZXBhaXJlZCA9IGF1ZGl0LmFzc2V0c0N1cnJlbnQ7XG4gIH1cblxuICByZXR1cm4geyBhdWRpdCwgYXV0b1JlcGFpcmVkIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSG9va1JlcGFpckZhaWx1cmVTdGF0dXMoXG4gIGZhbGxiYWNrU3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgZXJyb3I6IHVua25vd24sXG4pOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbkhvb2tzXSBGYWlsZWQgdG8gcmVjb25jaWxlIGhvb2sgYXNzZXRzIGZvciAke2ZhbGxiYWNrU3RhdHVzLmhvc3R9OiAke21lc3NhZ2V9YCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5mYWxsYmFja1N0YXR1cyxcbiAgICBhc3NldHNDdXJyZW50OiBmYWxzZSxcbiAgICBhdXRvUmVwYWlyZWQ6IGZhbHNlLFxuICAgIG5lZWRzUmVwYWlyOiB0cnVlLFxuICAgIHJlcGFpckVycm9yOiBtZXNzYWdlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB0b1N0YXJ0dXBSZXBhaXJPdXRjb21lKHN0YXR1czogUGVybWlzc2lvbkhvb2tTdGF0dXMpOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0WydvdXRjb21lJ10ge1xuICBpZiAoc3RhdHVzLnJlcGFpckVycm9yKSByZXR1cm4gJ2Vycm9yJztcbiAgaWYgKHN0YXR1cy5hdXRvUmVwYWlyZWQpIHJldHVybiAncmVwYWlyZWQnO1xuICBpZiAoc3RhdHVzLm5lZWRzUmVwYWlyICYmIChzdGF0dXMuaW5zdGFsbGVkIHx8IHN0YXR1cy5hc3NldHNQcmVwYXJlZCkpIHJldHVybiAnbmVlZHNfcmVwYWlyJztcbiAgaWYgKHN0YXR1cy5hc3NldHNDdXJyZW50KSByZXR1cm4gJ2N1cnJlbnQnO1xuICByZXR1cm4gJ25vdF9pbnN0YWxsZWQnO1xufVxuXG5mdW5jdGlvbiB0b1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0KFxuICBob3N0OiBzdHJpbmcsXG4gIHN0YXR1czogUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4pOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0dXMsXG4gICAgaG9zdCxcbiAgICBvdXRjb21lOiB0b1N0YXJ0dXBSZXBhaXJPdXRjb21lKHN0YXR1cyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb25lU3RhcnR1cFJlcGFpclN1bW1hcnkoXG4gIHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsLFxuKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSB8IG51bGwge1xuICBpZiAoIXN1bW1hcnkpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIC4uLnN1bW1hcnksXG4gICAgaG9zdFJlc3VsdHM6IHN1bW1hcnkuaG9zdFJlc3VsdHMubWFwKChyZXN1bHQpID0+ICh7IC4uLnJlc3VsdCB9KSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSgpOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbCB7XG4gIHJldHVybiBjbG9uZVN0YXJ0dXBSZXBhaXJTdW1tYXJ5KGxhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnlGb3JUZXN0cygpOiB2b2lkIHtcbiAgbGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgPSBudWxsO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb25jaWxlUGVybWlzc2lvbkhvb2tTdGF0dXMoXG4gIGhvc3Q6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFBlcm1pc3Npb25Ib29rU3RhdHVzPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRIb3N0ID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIGNvbnN0IGhvbWVEaXIgPSBvcHRpb25zLmhvbWVEaXIgPz8gaG9tZWRpcigpO1xuICBjb25zdCBzb3VyY2VTY3JpcHRQYXRoID0gb3B0aW9ucy5zb3VyY2VTY3JpcHRQYXRoO1xuICBjb25zdCBhdXRvUmVwYWlyID0gb3B0aW9ucy5hdXRvUmVwYWlyID8/IGZhbHNlO1xuICBjb25zdCBiYXNlU3RhdHVzID0gcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMoaG9tZURpciwgbm9ybWFsaXplZEhvc3QpO1xuXG4gIGlmICghc3VwcG9ydHNNYW5hZ2VkSG9va0Fzc2V0cyhub3JtYWxpemVkSG9zdCkpIHtcbiAgICByZXR1cm4gYmFzZVN0YXR1cztcbiAgfVxuXG4gIGNvbnN0IGZhbGxiYWNrU3RhdHVzID0gYnVpbGRGYWxsYmFja1Blcm1pc3Npb25Ib29rU3RhdHVzKGJhc2VTdGF0dXMsIG5vcm1hbGl6ZWRIb3N0LCBob21lRGlyKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHsgYXVkaXQsIGF1dG9SZXBhaXJlZCB9ID0gYXdhaXQgYXVkaXRBbmRNYXliZVJlcGFpckhvb2tBc3NldHMoXG4gICAgICBub3JtYWxpemVkSG9zdCxcbiAgICAgIGhvbWVEaXIsXG4gICAgICBzb3VyY2VTY3JpcHRQYXRoLFxuICAgICAgYXV0b1JlcGFpcixcbiAgICAgIGZhbGxiYWNrU3RhdHVzLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZmFsbGJhY2tTdGF0dXMsXG4gICAgICBhc3NldHNQcmVwYXJlZDogYXVkaXQuYXNzZXRzUHJlcGFyZWQsXG4gICAgICBhc3NldHNDdXJyZW50OiBhdWRpdC5hc3NldHNDdXJyZW50LFxuICAgICAgYXV0b1JlcGFpcmVkLFxuICAgICAgbmVlZHNSZXBhaXI6ICFhdWRpdC5hc3NldHNDdXJyZW50LFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGJ1aWxkSG9va1JlcGFpckZhaWx1cmVTdGF0dXMoZmFsbGJhY2tTdGF0dXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkoaG9tZURpciA9IGhvbWVkaXIoKSk6IFByb21pc2U8UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnk+IHtcbiAgY29uc3Qgc3RhdHVzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUy5tYXAoYXN5bmMgKGhvc3QpID0+ICh7XG4gICAgICBob3N0LFxuICAgICAgc3RhdHVzOiBhd2FpdCByZWNvbmNpbGVQZXJtaXNzaW9uSG9va1N0YXR1cyhob3N0LCB7IGhvbWVEaXIgfSksXG4gICAgfSkpLFxuICApO1xuXG4gIGNvbnN0IGluc3RhbGxlZEhvc3RzID0gc3RhdHVzZXNcbiAgICAuZmlsdGVyKCh7IHN0YXR1cyB9KSA9PiBzdGF0dXMuaW5zdGFsbGVkIHx8IHN0YXR1cy5hc3NldHNQcmVwYXJlZClcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG4gIGNvbnN0IGN1cnJlbnRIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmFzc2V0c0N1cnJlbnQpXG4gICAgLm1hcCgoeyBob3N0IH0pID0+IGhvc3QpO1xuICBjb25zdCByZXBhaXJlZEhvc3RzID0gc3RhdHVzZXNcbiAgICAuZmlsdGVyKCh7IHN0YXR1cyB9KSA9PiBzdGF0dXMuYXV0b1JlcGFpcmVkKVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcbiAgY29uc3QgbmVlZHNSZXBhaXJIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLm5lZWRzUmVwYWlyKVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcbiAgY29uc3QgZGlhZ25vc3RpY3NQYXRoID0gZ2V0UGVybWlzc2lvbkhvb2tEaWFnbm9zdGljc1BhdGgoaG9tZURpcik7XG4gIGNvbnN0IGxhc3REaWFnbm9zdGljID0gYXdhaXQgcmVhZExhc3RQZXJtaXNzaW9uSG9va0RpYWdub3N0aWMoaG9tZURpcik7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZWRIb3N0cyxcbiAgICBjdXJyZW50SG9zdHMsXG4gICAgcmVwYWlyZWRIb3N0cyxcbiAgICBuZWVkc1JlcGFpckhvc3RzLFxuICAgIGRpYWdub3N0aWNzUGF0aCxcbiAgICBsYXN0RGlhZ25vc3RpYyxcbiAgICBsYXN0U3RhcnR1cFJlcGFpcjogZ2V0TGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG9va0hvc3RMYWJlbChjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NvdW50fSBob29rIGhvc3Qke2NvdW50ID09PSAxID8gJycgOiAncyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG9va1ZlcmIoY291bnQ6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZywgcGx1cmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY291bnQgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbDtcbn1cblxuZnVuY3Rpb24gYnVpbGRQZXJtaXNzaW9uSG9va0hlYWx0aE1lc3NhZ2UoXG4gIHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICBoYWRFcnJvcnM6IGJvb2xlYW4sXG4gIHJlcGFpcmVkQ291bnQ6IG51bWJlcixcbiAgbmVlZHNSZXBhaXJDb3VudDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgaWYgKGhhZEVycm9ycykge1xuICAgIGlmIChuZWVkc1JlcGFpckNvdW50ID4gMCkge1xuICAgICAgY29uc3QgaG9zdExhYmVsID0gZm9ybWF0SG9va0hvc3RMYWJlbChuZWVkc1JlcGFpckNvdW50KTtcbiAgICAgIGNvbnN0IHZlcmIgPSBmb3JtYXRIb29rVmVyYihuZWVkc1JlcGFpckNvdW50LCAnbmVlZHMnLCAnbmVlZCcpO1xuICAgICAgcmV0dXJuIGAke2hvc3RMYWJlbH0gc3RpbGwgJHt2ZXJifSBhdHRlbnRpb24gYWZ0ZXIgc3RhcnR1cCByZXBhaXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnQSBzdGFydHVwIGhvb2sgcmVwYWlyIGZhaWxlZCBhbmQgbmVlZHMgYXR0ZW50aW9uJztcbiAgfVxuXG4gIGlmIChuZWVkc1JlcGFpckNvdW50ID4gMCkge1xuICAgIGNvbnN0IGhvc3RMYWJlbCA9IGZvcm1hdEhvb2tIb3N0TGFiZWwobmVlZHNSZXBhaXJDb3VudCk7XG4gICAgY29uc3QgdmVyYiA9IGZvcm1hdEhvb2tWZXJiKG5lZWRzUmVwYWlyQ291bnQsICduZWVkcycsICduZWVkJyk7XG4gICAgcmV0dXJuIGAke2hvc3RMYWJlbH0gc3RpbGwgJHt2ZXJifSByZXBhaXJgO1xuICB9XG5cbiAgaWYgKHJlcGFpcmVkQ291bnQgPiAwKSB7XG4gICAgY29uc3QgaG9zdExhYmVsID0gZm9ybWF0SG9va0hvc3RMYWJlbChyZXBhaXJlZENvdW50KTtcbiAgICByZXR1cm4gYCR7aG9zdExhYmVsfSByZXBhaXJlZCBvbiBzdGFydHVwYDtcbiAgfVxuXG4gIGlmIChzdW1tYXJ5LmN1cnJlbnRIb3N0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuICdNYW5hZ2VkIGhvb2sgYXNzZXRzIGFyZSBjdXJyZW50JztcbiAgfVxuXG4gIHJldHVybiAnTm8gbWFuYWdlZCBob29rIGFzc2V0cyBjdXJyZW50bHkgaW5zdGFsbGVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoKFxuICBzdW1tYXJ5OiBQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbik6IFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSB7XG4gIGNvbnN0IGxhc3RTdGFydHVwUmVwYWlyID0gc3VtbWFyeS5sYXN0U3RhcnR1cFJlcGFpcjtcbiAgY29uc3QgaGFkRXJyb3JzID0gQm9vbGVhbihcbiAgICBsYXN0U3RhcnR1cFJlcGFpcj8uaG9zdFJlc3VsdHMuc29tZSgocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJyksXG4gICk7XG4gIGNvbnN0IG5lZWRzUmVwYWlyQ291bnQgPSBsYXN0U3RhcnR1cFJlcGFpcj8ubmVlZHNSZXBhaXJDb3VudCA/PyBzdW1tYXJ5Lm5lZWRzUmVwYWlySG9zdHMubGVuZ3RoO1xuICBjb25zdCByZXBhaXJlZENvdW50ID0gbGFzdFN0YXJ0dXBSZXBhaXI/LnJlcGFpcmVkQ291bnQgPz8gc3VtbWFyeS5yZXBhaXJlZEhvc3RzLmxlbmd0aDtcbiAgY29uc3QgbWVzc2FnZSA9IGJ1aWxkUGVybWlzc2lvbkhvb2tIZWFsdGhNZXNzYWdlKFxuICAgIHN1bW1hcnksXG4gICAgaGFkRXJyb3JzLFxuICAgIHJlcGFpcmVkQ291bnQsXG4gICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgKTtcblxuICBpZiAoaGFkRXJyb3JzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICByZXBhaXJlZENvdW50LFxuICAgICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgICAgIGxhc3RDaGVja2VkQXQ6IGxhc3RTdGFydHVwUmVwYWlyPy5jb21wbGV0ZWRBdCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5lZWRzUmVwYWlyQ291bnQgPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3dhcm5pbmcnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcGFpcmVkQ291bnQsXG4gICAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgICAgbGFzdENoZWNrZWRBdDogbGFzdFN0YXJ0dXBSZXBhaXI/LmNvbXBsZXRlZEF0LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVwYWlyZWRDb3VudCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnb2snLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcGFpcmVkQ291bnQsXG4gICAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgICAgbGFzdENoZWNrZWRBdDogbGFzdFN0YXJ0dXBSZXBhaXI/LmNvbXBsZXRlZEF0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogJ29rJyxcbiAgICBtZXNzYWdlLFxuICAgIHJlcGFpcmVkQ291bnQsXG4gICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgICBsYXN0Q2hlY2tlZEF0OiBsYXN0U3RhcnR1cFJlcGFpcj8uY29tcGxldGVkQXQsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBhaXJQZXJtaXNzaW9uSG9va3NPblN0YXJ0dXAoXG4gIGhvbWVEaXIgPSBob21lZGlyKCksXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnk+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3RhcnRlZEF0SXNvID0gbmV3IERhdGUoc3RhcnRlZEF0KS50b0lTT1N0cmluZygpO1xuICBjb25zdCBob3N0UmVzdWx0czogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdFtdID0gW107XG5cbiAgLy8gUHJvY2VzcyBzZXF1ZW50aWFsbHkgYmVjYXVzZSBzZXZlcmFsIGhvc3RzIHNoYXJlIHRoZSBzYW1lIGJyaWRnZS9oZWxwZXJcbiAgLy8gdGFyZ2V0cyB1bmRlciB+Ly5kb2xsaG91c2UvaG9va3MsIGFuZCBjb25jdXJyZW50IHdyaXRlcyBhcmUgZmxha3kgb24gV2luZG93cy5cbiAgZm9yIChjb25zdCBob3N0IG9mIEFVVE9fUkVQQUlSQUJMRV9IT09LX0hPU1RTKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHJlY29uY2lsZVBlcm1pc3Npb25Ib29rU3RhdHVzKGhvc3QsIHtcbiAgICAgICAgaG9tZURpcixcbiAgICAgICAgYXV0b1JlcGFpcjogdHJ1ZSxcbiAgICAgICAgc291cmNlU2NyaXB0UGF0aCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdHVzLmF1dG9SZXBhaXJlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1Blcm1pc3Npb25Ib29rc10gUmVmcmVzaGVkIGluc3RhbGxlZCBob29rIGFzc2V0cyBmb3IgJHtob3N0fWApO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMubmVlZHNSZXBhaXIgJiYgc3RhdHVzLmluc3RhbGxlZCkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgW1Blcm1pc3Npb25Ib29rc10gSG9vayBhc3NldHMgc3RpbGwgbmVlZCByZXBhaXIgZm9yICR7aG9zdH1gICtcbiAgICAgICAgICAoc3RhdHVzLnJlcGFpckVycm9yID8gYDogJHtzdGF0dXMucmVwYWlyRXJyb3J9YCA6ICcnKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaG9zdFJlc3VsdHMucHVzaCh0b1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0KGhvc3QsIHN0YXR1cykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uSG9va3NdIFN0YXJ0dXAgaG9vayByZXBhaXIgZmFpbGVkIGZvciAke2hvc3R9OiAke21lc3NhZ2V9YCk7XG4gICAgICBob3N0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaW5zdGFsbGVkOiBmYWxzZSxcbiAgICAgICAgYXNzZXRzUHJlcGFyZWQ6IGZhbHNlLFxuICAgICAgICBhc3NldHNDdXJyZW50OiBmYWxzZSxcbiAgICAgICAgYXV0b1JlcGFpcmVkOiBmYWxzZSxcbiAgICAgICAgbmVlZHNSZXBhaXI6IHRydWUsXG4gICAgICAgIHJlcGFpckVycm9yOiBtZXNzYWdlLFxuICAgICAgICBvdXRjb21lOiAnZXJyb3InLFxuICAgICAgfSBzYXRpc2ZpZXMgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlcGFpcmVkQ291bnQgPSBob3N0UmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0Lm91dGNvbWUgPT09ICdyZXBhaXJlZCcpLmxlbmd0aDtcbiAgY29uc3QgbmVlZHNSZXBhaXJDb3VudCA9IGhvc3RSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PlxuICAgIHJlc3VsdC5vdXRjb21lID09PSAnbmVlZHNfcmVwYWlyJyB8fCByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJykubGVuZ3RoO1xuICBjb25zdCBjb21wbGV0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgPSB7XG4gICAgc3RhcnRlZEF0OiBzdGFydGVkQXRJc28sXG4gICAgY29tcGxldGVkQXQ6IG5ldyBEYXRlKGNvbXBsZXRlZEF0KS50b0lTT1N0cmluZygpLFxuICAgIGR1cmF0aW9uTXM6IGNvbXBsZXRlZEF0IC0gc3RhcnRlZEF0LFxuICAgIHJlcGFpcmVkQ291bnQsXG4gICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgICBob3N0UmVzdWx0cyxcbiAgfTtcbiAgbGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgPSBjbG9uZVN0YXJ0dXBSZXBhaXJTdW1tYXJ5KHN1bW1hcnkpO1xuICBsb2dnZXIuaW5mbyhcbiAgICBgW1Blcm1pc3Npb25Ib29rc10gU3RhcnR1cCBob29rIGFzc2V0IGF1ZGl0IGNvbXBsZXRlZCBpbiAke3N1bW1hcnkuZHVyYXRpb25Nc31tcyBgICtcbiAgICBgKHJlcGFpcmVkPSR7cmVwYWlyZWRDb3VudH0sIG5lZWRzUmVwYWlyPSR7bmVlZHNSZXBhaXJDb3VudH0pYCxcbiAgKTtcbiAgcmV0dXJuIHN1bW1hcnk7XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, type HookAssetAuditResult, type HookAssetDescriptor, type InstallPermissionHookOptions, type InstallPermissionHookResult, type PermissionHookAuditSummary, type PermissionHookHealthSummary, type PermissionHookMarker, type PermissionHookStartupRepairHostResult, type PermissionHookStartupRepairSummary, type PermissionHookStatus, type ReconcilePermissionHookOptions, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
|
|
1
|
+
export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, type HookAssetAuditResult, type HookAssetDescriptor, type InstallPermissionHookOptions, type InstallPermissionHookResult, type PermissionHookAuditSummary, type PermissionHookDiagnosticRecord, type PermissionHookHealthSummary, type PermissionHookMarker, type PermissionHookStartupRepairHostResult, type PermissionHookStartupRepairSummary, type PermissionHookStatus, type ReconcilePermissionHookOptions, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getPermissionHookDiagnosticsPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readLastPermissionHookDiagnostic, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
|
|
2
2
|
export { ensureClaudePreToolUseHook, ensureCodexPreToolUseHook, ensureCursorPreToolUseHook, ensureGeminiBeforeToolHook, ensureVsCodePreToolUseHook, ensureWindsurfHooks, installPermissionHook, } from './permissionHookInstallers.js';
|
|
3
3
|
export { _resetPermissionHookStartupRepairSummaryForTests, getLastPermissionHookStartupRepairSummary, getPermissionHookAuditSummary, getPermissionHookStatus, getPermissionHookStatusAsync, reconcilePermissionHookStatus, repairPermissionHooksOnStartup, summarizePermissionHookHealth, } from './permissionHookStatus.js';
|
|
4
4
|
//# sourceMappingURL=permissionHooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionHooks.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,qCAAqC,EAC1C,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,gDAAgD,EAChD,yCAAyC,EACzC,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"permissionHooks.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,qCAAqC,EAC1C,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,gCAAgC,EAChC,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,gCAAgC,EAChC,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,gDAAgD,EAChD,yCAAyC,EACzC,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
|
|
1
|
+
export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getPermissionHookDiagnosticsPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readLastPermissionHookDiagnostic, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
|
|
2
2
|
export { ensureClaudePreToolUseHook, ensureCodexPreToolUseHook, ensureCursorPreToolUseHook, ensureGeminiBeforeToolHook, ensureVsCodePreToolUseHook, ensureWindsurfHooks, installPermissionHook, } from './permissionHookInstallers.js';
|
|
3
3
|
export { _resetPermissionHookStartupRepairSummaryForTests, getLastPermissionHookStartupRepairSummary, getPermissionHookAuditSummary, getPermissionHookStatus, getPermissionHookStatusAsync, reconcilePermissionHookStatus, repairPermissionHooksOnStartup, summarizePermissionHookHealth, } from './permissionHookStatus.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Blcm1pc3Npb25Ib29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUM5QixrQkFBa0IsRUFhbEIsWUFBWSxFQUNaLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQ0FBZ0MsRUFDaEMsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixvQkFBb0IsR0FDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixtQkFBbUIsRUFDbkIscUJBQXFCLEdBQ3RCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUNMLGdEQUFnRCxFQUNoRCx5Q0FBeUMsRUFDekMsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2Qiw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5Qiw2QkFBNkIsR0FDOUIsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEFVVE9fUkVQQUlSQUJMRV9IT09LX0hPU1RTLFxuICBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVMsXG4gIFdSQVBQRVJfSE9PS19IT1NUUyxcbiAgdHlwZSBIb29rQXNzZXRBdWRpdFJlc3VsdCxcbiAgdHlwZSBIb29rQXNzZXREZXNjcmlwdG9yLFxuICB0eXBlIEluc3RhbGxQZXJtaXNzaW9uSG9va09wdGlvbnMsXG4gIHR5cGUgSW5zdGFsbFBlcm1pc3Npb25Ib29rUmVzdWx0LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY1JlY29yZCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0hlYWx0aFN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tNYXJrZXIsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICB0eXBlIFJlY29uY2lsZVBlcm1pc3Npb25Ib29rT3B0aW9ucyxcbiAgZGV0ZWN0SW5kZW50LFxuICBnZXRDbGF1ZGVIb29rU2V0dGluZ3NQYXRoLFxuICBnZXRDb2RleENvbmZpZ1BhdGgsXG4gIGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoLFxuICBnZXRDb2RleEhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldEN1cnNvckhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldEdlbWluaUhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldEhvb2tTb3VyY2VQYXRoLFxuICBnZXRIb29rV3JhcHBlckJhc2VuYW1lLFxuICBnZXRIb29rV3JhcHBlclBhdGgsXG4gIGdldE1hbmFnZWRIb29rQXNzZXRzLFxuICBnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgsXG4gIGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aCxcbiAgZ2V0UHJpbWFyeUhvb2tTY3JpcHRQYXRoLFxuICBnZXRWc0NvZGVIb29rU2V0dGluZ3NQYXRoLFxuICBnZXRWc0NvZGVVc2VyU2V0dGluZ3NQYXRoLFxuICBnZXRXaW5kc3VyZkhvb2tTZXR0aW5nc1BhdGgsXG4gIGluc3RhbGxIb29rQXNzZXRzRm9ySG9zdCxcbiAgaXNNaXNzaW5nRmlsZUVycm9yLFxuICBub3JtYWxpemVIb29rSG9zdCxcbiAgcmVhZExhc3RQZXJtaXNzaW9uSG9va0RpYWdub3N0aWMsXG4gIHJlYWRPcHRpb25hbFV0ZjgsXG4gIHN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMsXG4gIHdyaXRlQmFja3VwSWZQcmVzZW50LFxufSBmcm9tICcuL3Blcm1pc3Npb25Ib29rU2hhcmVkLmpzJztcblxuZXhwb3J0IHtcbiAgZW5zdXJlQ2xhdWRlUHJlVG9vbFVzZUhvb2ssXG4gIGVuc3VyZUNvZGV4UHJlVG9vbFVzZUhvb2ssXG4gIGVuc3VyZUN1cnNvclByZVRvb2xVc2VIb29rLFxuICBlbnN1cmVHZW1pbmlCZWZvcmVUb29sSG9vayxcbiAgZW5zdXJlVnNDb2RlUHJlVG9vbFVzZUhvb2ssXG4gIGVuc3VyZVdpbmRzdXJmSG9va3MsXG4gIGluc3RhbGxQZXJtaXNzaW9uSG9vayxcbn0gZnJvbSAnLi9wZXJtaXNzaW9uSG9va0luc3RhbGxlcnMuanMnO1xuXG5leHBvcnQge1xuICBfcmVzZXRQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5Rm9yVGVzdHMsXG4gIGdldExhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMsXG4gIHJlY29uY2lsZVBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICByZXBhaXJQZXJtaXNzaW9uSG9va3NPblN0YXJ0dXAsXG4gIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoLFxufSBmcm9tICcuL3Blcm1pc3Npb25Ib29rU3RhdHVzLmpzJztcbiJdfQ==
|
package/dist/web/public/app.js
CHANGED
|
@@ -2006,6 +2006,9 @@ globalThis.DollhouseConsoleUI.clearBanner = function(bannerId) {
|
|
|
2006
2006
|
|
|
2007
2007
|
// ── Tab switching ─────────────────────────────────────────────────────────
|
|
2008
2008
|
const consoleTabs = document.getElementById('console-tabs');
|
|
2009
|
+
const headerNavRow = document.querySelector('.header-nav-row');
|
|
2010
|
+
const consoleTabMenuToggle = document.getElementById('console-tab-menu-toggle');
|
|
2011
|
+
const consoleTabMenu = document.getElementById('console-tab-menu');
|
|
2009
2012
|
const tabInits = { logs: false, metrics: false, permissions: false, security: false };
|
|
2010
2013
|
|
|
2011
2014
|
const TAB_KEY = 'dollhousemcp-active-tab';
|
|
@@ -2090,8 +2093,157 @@ globalThis.DollhouseConsoleUI.clearBanner = function(bannerId) {
|
|
|
2090
2093
|
p.hidden = p.id !== 'tab-' + tabName;
|
|
2091
2094
|
p.classList.toggle('active', p.id === 'tab-' + tabName);
|
|
2092
2095
|
});
|
|
2096
|
+
syncConsoleTabMenuSelection();
|
|
2097
|
+
closeConsoleTabMenu();
|
|
2098
|
+
scheduleConsoleTabOverflowCheck();
|
|
2093
2099
|
};
|
|
2094
2100
|
|
|
2101
|
+
function renderConsoleTabMenu() {
|
|
2102
|
+
if (!consoleTabs || !consoleTabMenu) return;
|
|
2103
|
+
consoleTabMenu.innerHTML = '';
|
|
2104
|
+
consoleTabs.querySelectorAll('.console-tab').forEach((btn) => {
|
|
2105
|
+
const item = document.createElement('button');
|
|
2106
|
+
item.type = 'button';
|
|
2107
|
+
item.className = 'console-tab-menu-item';
|
|
2108
|
+
item.dataset.tab = btn.dataset.tab || '';
|
|
2109
|
+
item.setAttribute('role', 'menuitem');
|
|
2110
|
+
item.textContent = btn.textContent || '';
|
|
2111
|
+
if (btn.classList.contains('active')) item.classList.add('active');
|
|
2112
|
+
consoleTabMenu.appendChild(item);
|
|
2113
|
+
});
|
|
2114
|
+
}
|
|
2115
|
+
|
|
2116
|
+
function syncConsoleTabMenuSelection() {
|
|
2117
|
+
if (!consoleTabs || !consoleTabMenu) return;
|
|
2118
|
+
const activeTab = consoleTabs.querySelector('.console-tab.active')?.dataset.tab || '';
|
|
2119
|
+
consoleTabMenu.querySelectorAll('.console-tab-menu-item').forEach((item) => {
|
|
2120
|
+
item.classList.toggle('active', item.dataset.tab === activeTab);
|
|
2121
|
+
});
|
|
2122
|
+
}
|
|
2123
|
+
|
|
2124
|
+
function closeConsoleTabMenu() {
|
|
2125
|
+
if (!consoleTabMenu || !consoleTabMenuToggle) return;
|
|
2126
|
+
consoleTabMenu.hidden = true;
|
|
2127
|
+
consoleTabMenuToggle.setAttribute('aria-expanded', 'false');
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2130
|
+
function getConsoleTabMenuItems() {
|
|
2131
|
+
if (!consoleTabMenu) return [];
|
|
2132
|
+
return Array.from(consoleTabMenu.querySelectorAll('.console-tab-menu-item'));
|
|
2133
|
+
}
|
|
2134
|
+
|
|
2135
|
+
function openConsoleTabMenu(focusTarget) {
|
|
2136
|
+
if (!consoleTabMenu || !consoleTabMenuToggle) return;
|
|
2137
|
+
consoleTabMenu.hidden = false;
|
|
2138
|
+
consoleTabMenuToggle.setAttribute('aria-expanded', 'true');
|
|
2139
|
+
|
|
2140
|
+
if (!focusTarget) return;
|
|
2141
|
+
|
|
2142
|
+
const items = getConsoleTabMenuItems();
|
|
2143
|
+
if (!items.length) return;
|
|
2144
|
+
const focusItem = (index) => {
|
|
2145
|
+
const boundedIndex = Math.max(0, Math.min(index, items.length - 1));
|
|
2146
|
+
items[boundedIndex].focus();
|
|
2147
|
+
};
|
|
2148
|
+
|
|
2149
|
+
if (focusTarget === 'first') {
|
|
2150
|
+
focusItem(0);
|
|
2151
|
+
return;
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
if (focusTarget === 'last') {
|
|
2155
|
+
focusItem(items.length - 1);
|
|
2156
|
+
return;
|
|
2157
|
+
}
|
|
2158
|
+
|
|
2159
|
+
const activeIndex = Math.max(items.findIndex((item) => item.classList.contains('active')), 0);
|
|
2160
|
+
focusItem(activeIndex);
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
function moveConsoleTabMenuFocus(step, origin) {
|
|
2164
|
+
const items = getConsoleTabMenuItems();
|
|
2165
|
+
if (!items.length) return;
|
|
2166
|
+
|
|
2167
|
+
const currentIndex = origin instanceof Element
|
|
2168
|
+
? items.findIndex((item) => item === origin || item.contains(origin))
|
|
2169
|
+
: -1;
|
|
2170
|
+
const activeIndex = Math.max(items.findIndex((item) => item.classList.contains('active')), 0);
|
|
2171
|
+
const baseIndex = currentIndex >= 0 ? currentIndex : activeIndex;
|
|
2172
|
+
const nextIndex = (baseIndex + step + items.length) % items.length;
|
|
2173
|
+
items[nextIndex].focus();
|
|
2174
|
+
}
|
|
2175
|
+
|
|
2176
|
+
function handleConsoleTabMenuToggleKeydown(event) {
|
|
2177
|
+
if (event.key === 'ArrowDown') {
|
|
2178
|
+
event.preventDefault();
|
|
2179
|
+
openConsoleTabMenu('first');
|
|
2180
|
+
} else if (event.key === 'ArrowUp') {
|
|
2181
|
+
event.preventDefault();
|
|
2182
|
+
openConsoleTabMenu('last');
|
|
2183
|
+
}
|
|
2184
|
+
}
|
|
2185
|
+
|
|
2186
|
+
function handleConsoleTabMenuKeydown(event) {
|
|
2187
|
+
switch (event.key) {
|
|
2188
|
+
case 'ArrowDown':
|
|
2189
|
+
event.preventDefault();
|
|
2190
|
+
moveConsoleTabMenuFocus(1, event.target);
|
|
2191
|
+
break;
|
|
2192
|
+
case 'ArrowUp':
|
|
2193
|
+
event.preventDefault();
|
|
2194
|
+
moveConsoleTabMenuFocus(-1, event.target);
|
|
2195
|
+
break;
|
|
2196
|
+
case 'Home':
|
|
2197
|
+
event.preventDefault();
|
|
2198
|
+
getConsoleTabMenuItems()[0]?.focus();
|
|
2199
|
+
break;
|
|
2200
|
+
case 'End': {
|
|
2201
|
+
event.preventDefault();
|
|
2202
|
+
const items = getConsoleTabMenuItems();
|
|
2203
|
+
items.at(-1)?.focus();
|
|
2204
|
+
break;
|
|
2205
|
+
}
|
|
2206
|
+
case 'Escape':
|
|
2207
|
+
event.preventDefault();
|
|
2208
|
+
closeConsoleTabMenu();
|
|
2209
|
+
consoleTabMenuToggle?.focus();
|
|
2210
|
+
break;
|
|
2211
|
+
default:
|
|
2212
|
+
break;
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
|
|
2216
|
+
function tabsNeedOverflowMenu() {
|
|
2217
|
+
if (!consoleTabs) return false;
|
|
2218
|
+
const buttons = Array.from(consoleTabs.querySelectorAll('.console-tab'));
|
|
2219
|
+
if (buttons.length < 2) return false;
|
|
2220
|
+
const firstTop = buttons[0].offsetTop;
|
|
2221
|
+
return buttons.some((btn) => btn.offsetTop !== firstTop);
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2224
|
+
let consoleTabOverflowFrame = 0;
|
|
2225
|
+
function updateConsoleTabOverflow() {
|
|
2226
|
+
if (!consoleTabs || !headerNavRow || !consoleTabMenuToggle) return;
|
|
2227
|
+
headerNavRow.classList.remove('header-nav-row--collapsed');
|
|
2228
|
+
consoleTabMenuToggle.hidden = true;
|
|
2229
|
+
const shouldCollapse = tabsNeedOverflowMenu();
|
|
2230
|
+
if (shouldCollapse) {
|
|
2231
|
+
headerNavRow.classList.add('header-nav-row--collapsed');
|
|
2232
|
+
consoleTabMenuToggle.hidden = false;
|
|
2233
|
+
}
|
|
2234
|
+
if (!shouldCollapse) {
|
|
2235
|
+
closeConsoleTabMenu();
|
|
2236
|
+
}
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
function scheduleConsoleTabOverflowCheck() {
|
|
2240
|
+
if (consoleTabOverflowFrame) cancelAnimationFrame(consoleTabOverflowFrame);
|
|
2241
|
+
consoleTabOverflowFrame = requestAnimationFrame(() => {
|
|
2242
|
+
consoleTabOverflowFrame = 0;
|
|
2243
|
+
updateConsoleTabOverflow();
|
|
2244
|
+
});
|
|
2245
|
+
}
|
|
2246
|
+
|
|
2095
2247
|
/**
|
|
2096
2248
|
* Parse the URL hash into tab name and query parameters.
|
|
2097
2249
|
* Supports fragment-query pattern: #tab?key=value&key=value
|
|
@@ -2208,26 +2360,41 @@ globalThis.DollhouseConsoleUI.clearBanner = function(bannerId) {
|
|
|
2208
2360
|
return false;
|
|
2209
2361
|
}
|
|
2210
2362
|
|
|
2211
|
-
|
|
2363
|
+
function restoreInitialConsoleTab() {
|
|
2212
2364
|
// Version check takes priority over saved tab — upgraders must see Setup
|
|
2213
2365
|
// regardless of whether they have a saved tab from their previous session.
|
|
2214
2366
|
if (localStorage.getItem(SETUP_SEEN_KEY) === currentServerVersion) {
|
|
2215
2367
|
const savedTab = localStorage.getItem(TAB_KEY);
|
|
2216
|
-
if (savedTab)
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
} else {
|
|
2221
|
-
localStorage.setItem(SETUP_SEEN_KEY, currentServerVersion);
|
|
2222
|
-
switchToTab('setup');
|
|
2368
|
+
if (!savedTab) return;
|
|
2369
|
+
switchToTab(savedTab);
|
|
2370
|
+
lazyInitTab(savedTab, tabInits);
|
|
2371
|
+
return;
|
|
2223
2372
|
}
|
|
2373
|
+
|
|
2374
|
+
localStorage.setItem(SETUP_SEEN_KEY, currentServerVersion);
|
|
2375
|
+
switchToTab('setup');
|
|
2376
|
+
}
|
|
2377
|
+
|
|
2378
|
+
function initializeConsoleTabs() {
|
|
2379
|
+
if (applyHashTab()) return;
|
|
2380
|
+
restoreInitialConsoleTab();
|
|
2224
2381
|
}
|
|
2225
2382
|
|
|
2226
|
-
|
|
2227
|
-
|
|
2383
|
+
function registerConsoleTabObservers() {
|
|
2384
|
+
globalThis.addEventListener('hashchange', () => applyHashTab());
|
|
2385
|
+
renderConsoleTabMenu();
|
|
2386
|
+
syncConsoleTabMenuSelection();
|
|
2387
|
+
scheduleConsoleTabOverflowCheck();
|
|
2388
|
+
globalThis.addEventListener('resize', scheduleConsoleTabOverflowCheck);
|
|
2389
|
+
|
|
2390
|
+
if (typeof ResizeObserver !== 'function' || !headerNavRow) return;
|
|
2228
2391
|
|
|
2229
|
-
|
|
2230
|
-
|
|
2392
|
+
const tabOverflowObserver = new ResizeObserver(() => scheduleConsoleTabOverflowCheck());
|
|
2393
|
+
tabOverflowObserver.observe(headerNavRow);
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2396
|
+
function registerConsoleTabInteractions() {
|
|
2397
|
+
consoleTabs?.addEventListener('click', (e) => {
|
|
2231
2398
|
const btn = e.target.closest('.console-tab');
|
|
2232
2399
|
if (!btn) return;
|
|
2233
2400
|
const tab = btn.dataset.tab;
|
|
@@ -2238,8 +2405,42 @@ globalThis.DollhouseConsoleUI.clearBanner = function(bannerId) {
|
|
|
2238
2405
|
|
|
2239
2406
|
lazyInitTab(tab, tabInits);
|
|
2240
2407
|
});
|
|
2408
|
+
|
|
2409
|
+
consoleTabMenuToggle?.addEventListener('click', () => {
|
|
2410
|
+
if (!consoleTabMenu) return;
|
|
2411
|
+
if (consoleTabMenu.hidden) {
|
|
2412
|
+
openConsoleTabMenu();
|
|
2413
|
+
return;
|
|
2414
|
+
}
|
|
2415
|
+
|
|
2416
|
+
closeConsoleTabMenu();
|
|
2417
|
+
});
|
|
2418
|
+
|
|
2419
|
+
consoleTabMenuToggle?.addEventListener('keydown', handleConsoleTabMenuToggleKeydown);
|
|
2420
|
+
consoleTabMenu?.addEventListener('keydown', handleConsoleTabMenuKeydown);
|
|
2421
|
+
consoleTabMenu?.addEventListener('click', (e) => {
|
|
2422
|
+
const btn = e.target.closest('.console-tab-menu-item');
|
|
2423
|
+
const tab = btn?.dataset.tab;
|
|
2424
|
+
if (!tab) return;
|
|
2425
|
+
switchToTab(tab);
|
|
2426
|
+
localStorage.setItem(TAB_KEY, tab);
|
|
2427
|
+
lazyInitTab(tab, tabInits);
|
|
2428
|
+
});
|
|
2429
|
+
|
|
2430
|
+
globalThis.addEventListener('click', (e) => {
|
|
2431
|
+
if (!consoleTabMenu || !consoleTabMenuToggle) return;
|
|
2432
|
+
if (consoleTabMenu.hidden) return;
|
|
2433
|
+
const target = e.target;
|
|
2434
|
+
if (!(target instanceof Element)) return;
|
|
2435
|
+
if (consoleTabMenu.contains(target) || consoleTabMenuToggle.contains(target)) return;
|
|
2436
|
+
closeConsoleTabMenu();
|
|
2437
|
+
});
|
|
2241
2438
|
}
|
|
2242
2439
|
|
|
2440
|
+
initializeConsoleTabs();
|
|
2441
|
+
registerConsoleTabObservers();
|
|
2442
|
+
registerConsoleTabInteractions();
|
|
2443
|
+
|
|
2243
2444
|
function lazyInitTab(tab, tabInits, params) {
|
|
2244
2445
|
const dc = globalThis.DollhouseConsole;
|
|
2245
2446
|
const module = dc?.[tab];
|
|
@@ -43,7 +43,14 @@
|
|
|
43
43
|
<p class="site-tagline">Management Console</p>
|
|
44
44
|
</div>
|
|
45
45
|
</div>
|
|
46
|
-
<div class="header-
|
|
46
|
+
<div class="header-controls">
|
|
47
|
+
<div class="site-stats" id="stats" aria-live="polite"></div>
|
|
48
|
+
<button class="theme-toggle" id="theme-toggle" type="button" aria-label="Switch to dark mode" title="Switch to dark mode">
|
|
49
|
+
<span class="theme-toggle-icon" id="theme-toggle-icon" aria-hidden="true">☾</span>
|
|
50
|
+
<span class="sr-only" id="theme-toggle-label">Switch to dark mode</span>
|
|
51
|
+
</button>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="header-nav-row">
|
|
47
54
|
<nav class="console-tabs" id="console-tabs" aria-label="Console tabs">
|
|
48
55
|
<button class="console-tab" data-tab="setup">Setup</button>
|
|
49
56
|
<button class="console-tab" data-tab="security">Auth</button>
|
|
@@ -52,12 +59,14 @@
|
|
|
52
59
|
<button class="console-tab" data-tab="permissions">Permissions</button>
|
|
53
60
|
<button class="console-tab active" data-tab="portfolio">Portfolio</button>
|
|
54
61
|
</nav>
|
|
62
|
+
<div class="console-tab-menu-shell" id="console-tab-menu-shell">
|
|
63
|
+
<button class="console-tab-menu-toggle" id="console-tab-menu-toggle" type="button" hidden aria-haspopup="menu" aria-expanded="false" aria-controls="console-tab-menu">
|
|
64
|
+
<span class="console-tab-menu-icon" aria-hidden="true">☰</span>
|
|
65
|
+
<span class="console-tab-menu-label">Menu</span>
|
|
66
|
+
</button>
|
|
67
|
+
<div class="console-tab-menu" id="console-tab-menu" role="menu" aria-orientation="vertical" hidden></div>
|
|
68
|
+
</div>
|
|
55
69
|
<div class="session-indicator" id="session-indicator" title="Active sessions"></div>
|
|
56
|
-
<div class="site-stats" id="stats" aria-live="polite"></div>
|
|
57
|
-
<button class="theme-toggle" id="theme-toggle" type="button" aria-label="Switch to dark mode" title="Switch to dark mode">
|
|
58
|
-
<span class="theme-toggle-icon" id="theme-toggle-icon" aria-hidden="true">☾</span>
|
|
59
|
-
<span class="sr-only" id="theme-toggle-label">Switch to dark mode</span>
|
|
60
|
-
</button>
|
|
61
70
|
</div>
|
|
62
71
|
</header>
|
|
63
72
|
|
|
@@ -572,7 +581,7 @@ npm install @dollhousemcp/mcp-server</code></pre>
|
|
|
572
581
|
<a href="https://github.com/DollhouseMCP/mcp-server" class="footer-link">GitHub Repository</a>
|
|
573
582
|
<a href="./collection-index.json" class="footer-link">JSON API</a>
|
|
574
583
|
<a href="https://dollhousemcp.com" class="footer-link">DollhouseMCP</a>
|
|
575
|
-
<span class="footer-version" id="footer-version"></span>
|
|
584
|
+
<span class="footer-version" id="footer-version" aria-live="polite" aria-atomic="true"></span>
|
|
576
585
|
<span class="footer-updated" id="footer-updated"></span>
|
|
577
586
|
<span class="footer-copyright">© 2026 DollhouseMCP</span>
|
|
578
587
|
</div>
|