fcfebe44f1
Settings → Dashboard gains an AI Tools section (installed tools with Enabled/Disabled and Set default, available ones with a homepage link, Refresh). useAiTools shares one catalog copy across the app and replaces LANE_TOOL_LABEL. The Add-lane modal picks Default (<tool>) or Other…; the router row reads Native (<tool>) and disables AI Router profiles for tools that cannot use one. The run form gives catalog tools resume and a red per-run Bypass permissions switch (Codex too). Claude Code / Codex settings tabs hide while that tool is disabled. The Workspace probes each lane tool's CLI fresh. Docs: CLAUDE.md tool/bypass rule, AGENTS.md, LANES.md, API.md, CLI.md, server/README.md, OpenAPI fragment + regenerated openapi.yaml.
60 lines
2.2 KiB
JavaScript
60 lines
2.2 KiB
JavaScript
/**
|
|
* @file Supplementary OpenAPI fragments merged into the base spec by
|
|
* `createOpenApiSpec()` (server/openapi.js). Each domain fragment under
|
|
* `server/openapi-extra/` exports `{ tags, schemas, paths }`; this module
|
|
* deep-combines them into one `{ tags, schemas, paths }` object. Extra paths
|
|
* and schemas OVERRIDE base entries with the same key, so a comprehensive
|
|
* entry here can supersede a terser one in the base literal; tags are appended
|
|
* only when their `name` is not already present.
|
|
* @author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
|
|
*/
|
|
|
|
// New endpoint groups (previously-undocumented gaps in the base spec).
|
|
const ccConfig = require("./openapi-extra/cc-config");
|
|
const codexConfig = require("./openapi-extra/codex-config");
|
|
const run = require("./openapi-extra/run");
|
|
const lanes = require("./openapi-extra/lanes");
|
|
const push = require("./openapi-extra/push");
|
|
const aiTools = require("./openapi-extra/ai-tools");
|
|
const misc = require("./openapi-extra/misc");
|
|
// Enriched overrides of already-documented endpoints — same operationId, tags,
|
|
// and request/response `$ref` schemas as the base, with added examples and
|
|
// richer descriptions. Listed last so they win the merge.
|
|
const overrideSessionsAgents = require("./openapi-extra/override-sessions-agents");
|
|
const overrideCore = require("./openapi-extra/override-core");
|
|
const overridePricingAlerts = require("./openapi-extra/override-pricing-alerts");
|
|
const overrideOps = require("./openapi-extra/override-ops");
|
|
|
|
/** Combine N fragments into a single { tags, schemas, paths }. Later fragments
|
|
* override earlier ones on path/schema key collisions; tags dedupe by name. */
|
|
function combine(...fragments) {
|
|
const out = { tags: [], schemas: {}, paths: {} };
|
|
const tagNames = new Set();
|
|
for (const frag of fragments) {
|
|
if (!frag) continue;
|
|
for (const tag of frag.tags || []) {
|
|
if (tag && !tagNames.has(tag.name)) {
|
|
tagNames.add(tag.name);
|
|
out.tags.push(tag);
|
|
}
|
|
}
|
|
Object.assign(out.schemas, frag.schemas || {});
|
|
Object.assign(out.paths, frag.paths || {});
|
|
}
|
|
return out;
|
|
}
|
|
|
|
module.exports = combine(
|
|
ccConfig,
|
|
codexConfig,
|
|
run,
|
|
lanes,
|
|
push,
|
|
aiTools,
|
|
misc,
|
|
overrideSessionsAgents,
|
|
overrideCore,
|
|
overridePricingAlerts,
|
|
overrideOps
|
|
);
|