feat: Claude Code Monitor — lanes, pipelines and a merged workspace
Internal SmartGift build of a Claude Code monitoring dashboard. Lanes: a durable unit of parallel agent work, one per working directory, tracked across session restarts. Managed lanes are git worktrees the dashboard provisions and can reset or remove behind a three-check destroy guard and a counted preflight; adopted lanes are directories you already own and are never destroyable. Pipelines: a lane moves through pipeline stages. A stage the agent declares with evidence renders green; a stage inferred from the tool-event stream renders dashed amber and never counts as done. Detection is forward-only within a 30-minute window, and never writes the declared stage. Workspace: one page at /run with a lane grid, the selected lane's pipeline, and a full Claude console behind a disclosure.
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* @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 run = require("./openapi-extra/run");
|
||||
const lanes = require("./openapi-extra/lanes");
|
||||
const push = require("./openapi-extra/push");
|
||||
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,
|
||||
run,
|
||||
lanes,
|
||||
push,
|
||||
misc,
|
||||
overrideSessionsAgents,
|
||||
overrideCore,
|
||||
overridePricingAlerts,
|
||||
overrideOps
|
||||
);
|
||||
Reference in New Issue
Block a user