Files
NetMesh/electron/capabilities/registry.cjs
zhaolei 3c72efcb7f
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
[Init] Initial commit - NetMesh terminal manager
2026-09-13 18:24:01 +08:00

112 lines
3.5 KiB
JavaScript

"use strict";
const { ALL_CAPABILITIES } = require("./catalog/index.cjs");
const { CAPABILITY_STATUS, CAPABILITY_SURFACES } = require("./constants.cjs");
function buildRegistryIndex(capabilities) {
const byId = new Map();
const byRpcMethod = new Map();
const byMcpTool = new Map();
const byCliCommand = new Map();
const byDomain = new Map();
const byCattyTool = new Map();
for (const capability of capabilities) {
byId.set(capability.id, capability);
const domainList = byDomain.get(capability.domain) || [];
domainList.push(capability);
byDomain.set(capability.domain, domainList);
for (const [surfaceName, binding] of Object.entries(capability.surfaces || {})) {
if (binding?.rpcMethod) {
byRpcMethod.set(`${surfaceName}:${binding.rpcMethod}`, capability);
}
if (binding?.mcpTool) {
byMcpTool.set(`${surfaceName}:${binding.mcpTool}`, capability);
}
if (Array.isArray(binding?.command) && binding.command.length > 0) {
byCliCommand.set(binding.command.join(" "), capability);
}
if (binding?.toolName) {
byCattyTool.set(binding.toolName, capability);
}
}
}
return {
capabilities,
byId,
byRpcMethod,
byMcpTool,
byCliCommand,
byCattyTool,
byDomain,
};
}
const registryIndex = buildRegistryIndex(ALL_CAPABILITIES);
function listCapabilities(options = {}) {
const { status, domain, surface } = options;
return registryIndex.capabilities.filter((capability) => {
if (status && capability.status !== status) return false;
if (domain && capability.domain !== domain) return false;
if (surface && !capability.surfaces?.[surface]) return false;
return true;
});
}
function getCapabilityById(id) {
return registryIndex.byId.get(id) || null;
}
function getCapabilityByRpcMethod(rpcMethod, surface = CAPABILITY_SURFACES.BUILTIN) {
return registryIndex.byRpcMethod.get(`${surface}:${rpcMethod}`) || null;
}
function getCapabilityByMcpTool(toolName, surface = CAPABILITY_SURFACES.BUILTIN) {
return registryIndex.byMcpTool.get(`${surface}:${toolName}`) || null;
}
function getCapabilityByCliCommand(commandParts) {
const key = Array.isArray(commandParts) ? commandParts.join(" ") : String(commandParts || "");
return registryIndex.byCliCommand.get(key) || null;
}
function getCapabilityByCattyToolName(toolName) {
return registryIndex.byCattyTool.get(toolName) || null;
}
function getRpcMethodsForSurface(surface, filter = {}) {
const methods = new Set();
for (const capability of registryIndex.capabilities) {
const binding = capability.surfaces?.[surface];
if (!binding?.rpcMethod) continue;
if (filter.status && capability.status !== filter.status) continue;
if (filter.write === true && !capability.policy.write) continue;
if (filter.write === false && capability.policy.write) continue;
if (filter.longRunning === true && !capability.policy.longRunning) continue;
if (filter.longRunning === false && capability.policy.longRunning) continue;
methods.add(binding.rpcMethod);
}
return methods;
}
function getImplementedRpcMethodsForSurface(surface) {
return getRpcMethodsForSurface(surface, { status: CAPABILITY_STATUS.IMPLEMENTED });
}
module.exports = {
ALL_CAPABILITIES,
listCapabilities,
getCapabilityById,
getCapabilityByRpcMethod,
getCapabilityByMcpTool,
getCapabilityByCliCommand,
getCapabilityByCattyToolName,
getRpcMethodsForSurface,
getImplementedRpcMethodsForSurface,
buildRegistryIndex,
};