titan-agent 5.2.1 → 5.3.1
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/README.md +33 -3
- package/dist/agent/agent.js +33 -4
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/subAgent.js +1 -1
- package/dist/agent/subAgent.js.map +1 -1
- package/dist/config/schema.js +10 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/eval/harness.js +49 -0
- package/dist/eval/harness.js.map +1 -1
- package/dist/eval/parity.js +148 -0
- package/dist/eval/parity.js.map +1 -0
- package/dist/eval/record.js +115 -0
- package/dist/eval/record.js.map +1 -0
- package/dist/gateway/metrics.js +26 -3
- package/dist/gateway/metrics.js.map +1 -1
- package/dist/gateway/server.js +58 -6
- package/dist/gateway/server.js.map +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/safety.js +31 -1
- package/dist/utils/safety.js.map +1 -1
- package/package.json +5 -1
- package/scripts/eval-gate.sh +189 -0
- package/scripts/eval-record.ts +133 -0
- package/ui/dist/assets/{AuditPanel-DLy0WJQZ.js → AuditPanel-CM6Wg9hO.js} +1 -1
- package/ui/dist/assets/{AutonomyPanel-DjFAQGns.js → AutonomyPanel-CESx3ANg.js} +1 -1
- package/ui/dist/assets/{AutopilotPanel-nBluaHA4.js → AutopilotPanel-DtEet1hJ.js} +1 -1
- package/ui/dist/assets/{AutoresearchPanel-BDy8y_Cs.js → AutoresearchPanel-DR47NqT5.js} +1 -1
- package/ui/dist/assets/{BackupPanel-B_Fv2pJA.js → BackupPanel-BGP8p3l3.js} +1 -1
- package/ui/dist/assets/{BrowserPanel-DOCT3-Rq.js → BrowserPanel-C15x9bLn.js} +1 -1
- package/ui/dist/assets/{CPAgents-CpkHf0b8.js → CPAgents-DYUtPzSq.js} +1 -1
- package/ui/dist/assets/{CPDashboard-CnMd6qNK.js → CPDashboard-Bf0-SyCh.js} +1 -1
- package/ui/dist/assets/{CPFiles-BDRjJpYl.js → CPFiles-CxgxjQcO.js} +1 -1
- package/ui/dist/assets/{CPGoals-2DrwHk62.js → CPGoals-BsmCMTvT.js} +1 -1
- package/ui/dist/assets/{CPInbox-C6l2o4FD.js → CPInbox-tMSbmQ9H.js} +1 -1
- package/ui/dist/assets/{CPSocial-Cea6NptR.js → CPSocial-nb-j7sOE.js} +1 -1
- package/ui/dist/assets/{ChannelsPanel-5EhhyXeg.js → ChannelsPanel-DP5C2OKd.js} +1 -1
- package/ui/dist/assets/{CheckpointsPanel-BVt2oEUe.js → CheckpointsPanel-DlranVLZ.js} +1 -1
- package/ui/dist/assets/{CommandPostHub-PXKE62DN.js → CommandPostHub-BgxIa4Ev.js} +3 -3
- package/ui/dist/assets/{CronPanel-lAsoKavq.js → CronPanel-LoT5yKwJ.js} +1 -1
- package/ui/dist/assets/{DaemonPanel-xt08Rs10.js → DaemonPanel-DBGMqaE_.js} +1 -1
- package/ui/dist/assets/{DataTable-BHOu7fZP.js → DataTable-B2Ma8hfi.js} +1 -1
- package/ui/dist/assets/{EmptyState-Dk7BBthD.js → EmptyState-CcKyk5Yn.js} +1 -1
- package/ui/dist/assets/EvalHarnessPanel-BqtMc1ZM.js +2 -0
- package/ui/dist/assets/{EvalPanel-D9rDf1bk.js → EvalPanel-Bc33j0pN.js} +1 -1
- package/ui/dist/assets/{FilesPanel-CNrDLmix.js → FilesPanel-3QKvrWPo.js} +1 -1
- package/ui/dist/assets/{FleetPanel-DP_ji0AE.js → FleetPanel-CSsXuQYj.js} +1 -1
- package/ui/dist/assets/{HomelabPanel-B4bCsrBw.js → HomelabPanel-DhrjTX9m.js} +1 -1
- package/ui/dist/assets/{InfraView-C5OYx_9s.js → InfraView-CR6HyrL6.js} +2 -2
- package/ui/dist/assets/{InlineEditableField-DyBCbIoN.js → InlineEditableField-CnvF-yFR.js} +1 -1
- package/ui/dist/assets/{Input-DWnbv1Yh.js → Input-GTHp2Rkr.js} +1 -1
- package/ui/dist/assets/{IntegrationsPanel-DsB6hjvE.js → IntegrationsPanel-CymCRE3T.js} +1 -1
- package/ui/dist/assets/{IntelligenceView-PIFGvIg_.js → IntelligenceView-C1IHxJRC.js} +2 -2
- package/ui/dist/assets/{LearningPanel-D_S4HFX5.js → LearningPanel-DOCES3lH.js} +1 -1
- package/ui/dist/assets/{LogsPanel-BnWNREPX.js → LogsPanel-BLnAqEaZ.js} +1 -1
- package/ui/dist/assets/{McpPanel-CIMxZ2Am.js → McpPanel-ChUzmr3z.js} +1 -1
- package/ui/dist/assets/{MemoryGraphPanel-DD7x4rrm.js → MemoryGraphPanel-Bzvjmzvk.js} +1 -1
- package/ui/dist/assets/{MemoryWikiPanel-BPPVAH0b.js → MemoryWikiPanel-Dwk3Aqwd.js} +1 -1
- package/ui/dist/assets/{MeshPanel-CiuwR3oV.js → MeshPanel-C3LJSlht.js} +1 -1
- package/ui/dist/assets/{NvidiaPanel-DVntoRrH.js → NvidiaPanel-CeZK_-CV.js} +1 -1
- package/ui/dist/assets/{OrganismPanel-pqIKtHrW.js → OrganismPanel-BB6YOiQV.js} +1 -1
- package/ui/dist/assets/OverviewPanel-BmtBhQnv.js +1 -0
- package/ui/dist/assets/{PageHeader-CF75km05.js → PageHeader-BimceqQo.js} +1 -1
- package/ui/dist/assets/{PaperclipPanel-CwN5-cKg.js → PaperclipPanel-C-brgwA3.js} +1 -1
- package/ui/dist/assets/{PersonasPanel-ClC_TTGX.js → PersonasPanel-L1j78p6H.js} +1 -1
- package/ui/dist/assets/{RecipesPanel-Di2l-eOe.js → RecipesPanel-34lCfynJ.js} +1 -1
- package/ui/dist/assets/{SecurityPanel-DjC4pXGM.js → SecurityPanel-CBTPWLj6.js} +1 -1
- package/ui/dist/assets/{SelfImprovePanel-CNpCp5N4.js → SelfImprovePanel-BrPbFHhG.js} +1 -1
- package/ui/dist/assets/{SelfProposalsPanel-BJL6Fjxo.js → SelfProposalsPanel-lNmiDThB.js} +1 -1
- package/ui/dist/assets/{SessionsPanel-EAGKDQp0.js → SessionsPanel-DAEYIn83.js} +1 -1
- package/ui/dist/assets/{SessionsTab-tc0njI15.js → SessionsTab-JQbltWww.js} +1 -1
- package/ui/dist/assets/{SettingsPanel-BdSGImIa.js → SettingsPanel-CzRROAYQ.js} +1 -1
- package/ui/dist/assets/{SettingsView-DQB64bjy.js → SettingsView-CN7ii2uw.js} +2 -2
- package/ui/dist/assets/{SkeletonLoader-P8SFCyGi.js → SkeletonLoader-atQtpcF5.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-lDMl_8da.js → SkillsPanel-DlFs2ih7.js} +1 -1
- package/ui/dist/assets/{SomaView-BG7YvBu2.js → SomaView-Ba642Oqb.js} +1 -1
- package/ui/dist/assets/{StatCard-Cv2u-yqA.js → StatCard-DciE_Iqc.js} +1 -1
- package/ui/dist/assets/{StatusBadge-JJeoEdCm.js → StatusBadge-BtfSPoW2.js} +1 -1
- package/ui/dist/assets/{TeamsPanel-D-iCyyYd.js → TeamsPanel-DKQ5z2Qe.js} +1 -1
- package/ui/dist/assets/{TelemetryPanel-DHNFyCwn.js → TelemetryPanel-B6KAc55Q.js} +1 -1
- package/ui/dist/assets/{TitanCanvas-BhurNMK3.js → TitanCanvas-C-s0A-lv.js} +3 -3
- package/ui/dist/assets/ToolsView-Dei0KMP0.js +2 -0
- package/ui/dist/assets/{Tooltip-D4IeQDJL.js → Tooltip-70UK0E2I.js} +1 -1
- package/ui/dist/assets/{TraceViewer-CMd-Wi0z.js → TraceViewer-BniolyBx.js} +1 -1
- package/ui/dist/assets/{TrainingPanel-CLtiBq2h.js → TrainingPanel-Bz4CTPGW.js} +1 -1
- package/ui/dist/assets/{VoiceOverlay-BXPVdnJc.js → VoiceOverlay-CmNCrLcd.js} +1 -1
- package/ui/dist/assets/{VramPanel-DjuwGUzA.js → VramPanel-Xh_OtRDR.js} +1 -1
- package/ui/dist/assets/{WatchView-B7sDnMpl.js → WatchView-C-sGFpVy.js} +1 -1
- package/ui/dist/assets/{WorkTab-B5nQ4Y7A.js → WorkTab-BjLNmgIK.js} +1 -1
- package/ui/dist/assets/{WorkflowsPanel-2z0TeXyR.js → WorkflowsPanel-CvgQU1xI.js} +1 -1
- package/ui/dist/assets/{arrow-left-BKOkzkae.js → arrow-left-DwqHtJiU.js} +1 -1
- package/ui/dist/assets/{chart-column-D39PCk17.js → chart-column-BtNO6sRy.js} +1 -1
- package/ui/dist/assets/{circle-check-big-CMz0QouP.js → circle-check-big-DZRE_MbN.js} +1 -1
- package/ui/dist/assets/{dollar-sign-Bu8fZOQl.js → dollar-sign-aVG3a5eL.js} +1 -1
- package/ui/dist/assets/{download-vvx6zJ-U.js → download-BxiWJU4G.js} +1 -1
- package/ui/dist/assets/{eye-off-BPXFIzlW.js → eye-off-CkgfFYhm.js} +1 -1
- package/ui/dist/assets/{funnel-Bqns-i8I.js → funnel-PkLdxKyC.js} +1 -1
- package/ui/dist/assets/{git-branch-CdmeqL8d.js → git-branch-BM-Gw95X.js} +1 -1
- package/ui/dist/assets/{index-C6oarzis.js → index-CahJbWSR.js} +2 -2
- package/ui/dist/assets/index-D0RJ8701.css +1 -0
- package/ui/dist/assets/layers-BuGf4FIJ.js +6 -0
- package/ui/dist/assets/{legacy-DFIaZTiF.js → legacy-CR6o4t-y.js} +1 -1
- package/ui/dist/assets/{lightbulb-DOL6Q-iP.js → lightbulb-n8gc_XAL.js} +1 -1
- package/ui/dist/assets/{pause-B0XymOnS.js → pause-DCV52koX.js} +1 -1
- package/ui/dist/assets/{play-Dwp2l5HG.js → play-CcJ9BnCh.js} +1 -1
- package/ui/dist/assets/{plug-DRlTjWqQ.js → plug-CfWBXfCl.js} +1 -1
- package/ui/dist/assets/{proxy-sXxWK7WF.js → proxy-CzZDfLmm.js} +1 -1
- package/ui/dist/assets/{square-yh0jffQZ.js → square-DJpUhlxi.js} +1 -1
- package/ui/dist/assets/{target-GxtNG2RW.js → target-DWcmM_9m.js} +1 -1
- package/ui/dist/assets/{toggle-right-CYQd_Ux1.js → toggle-right-YusFQ69L.js} +1 -1
- package/ui/dist/assets/{trash-2-B4jp_pAQ.js → trash-2-CK7yQ55V.js} +1 -1
- package/ui/dist/assets/{trending-up-B26tNhFP.js → trending-up-DGjFyubC.js} +1 -1
- package/ui/dist/assets/{trophy-Bf3ZeSeb.js → trophy-uQv_NgDB.js} +1 -1
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/EvalHarnessPanel-CJv8CUDy.js +0 -1
- package/ui/dist/assets/OverviewPanel-gqYRhmpF.js +0 -6
- package/ui/dist/assets/ToolsView-C8sWxLny.js +0 -2
- package/ui/dist/assets/index-DsFoD9SP.css +0 -1
package/dist/gateway/server.js
CHANGED
|
@@ -45,7 +45,7 @@ import { TITAN_VERSION, TITAN_NAME, TITAN_LOGS_DIR, TITAN_HOME } from "../utils/
|
|
|
45
45
|
import { collectSystemProfile, recordStartupAnalytics, startHeartbeatAnalytics } from "../analytics/collector.js";
|
|
46
46
|
import { getUpdateInfo } from "../utils/updater.js";
|
|
47
47
|
import { getMissionControlHTML } from "./dashboard.js";
|
|
48
|
-
import { serializePrometheus, getMetricsSummary, titanRequestsTotal, titanRequestDuration, titanErrorsTotal, titanActiveSessions, titanToolCallsTotal, titanTokensTotal, titanModelRequestsTotal, recordEvalSuiteResult } from "./metrics.js";
|
|
48
|
+
import { serializePrometheus, getMetricsSummary, titanRequestsTotal, titanRequestDuration, titanErrorsTotal, titanActiveSessions, titanToolCallsTotal, titanTokensTotal, titanModelRequestsTotal, recordEvalSuiteResult, recordEvalTimeout, recordEvalError } from "./metrics.js";
|
|
49
49
|
import { initSlashCommands, handleSlashCommand } from "./slashCommands.js";
|
|
50
50
|
import { initMcpServers, listMcpServers, addMcpServer, removeMcpServer, setMcpServerEnabled, getMcpStatus, BUILTIN_PRESETS } from "../mcp/registry.js";
|
|
51
51
|
import { connectMcpServer, testMcpServer } from "../mcp/client.js";
|
|
@@ -2266,8 +2266,20 @@ ${msg.content}
|
|
|
2266
2266
|
}
|
|
2267
2267
|
});
|
|
2268
2268
|
app.post("/api/eval/run", async (req, res) => {
|
|
2269
|
+
const requestedSuite = req.body?.suite ?? "";
|
|
2270
|
+
const timeoutMs = (() => {
|
|
2271
|
+
const raw = req.query?.timeoutMs;
|
|
2272
|
+
if (typeof raw !== "string") return 6e5;
|
|
2273
|
+
const n = Number(raw);
|
|
2274
|
+
if (!Number.isFinite(n) || n <= 0) return 6e5;
|
|
2275
|
+
return Math.max(1e4, Math.min(36e5, Math.round(n)));
|
|
2276
|
+
})();
|
|
2277
|
+
if (requestedSuite) {
|
|
2278
|
+
res.setHeader("X-Eval-Suite", requestedSuite);
|
|
2279
|
+
}
|
|
2280
|
+
const tStart = Date.now();
|
|
2281
|
+
logger.info(COMPONENT, `/api/eval/run START suite=${requestedSuite || "(none)"} timeoutMs=${timeoutMs}`);
|
|
2269
2282
|
try {
|
|
2270
|
-
const { suite } = req.body;
|
|
2271
2283
|
const {
|
|
2272
2284
|
runEvalSuite,
|
|
2273
2285
|
WIDGET_CREATION_SUITE,
|
|
@@ -2315,6 +2327,7 @@ _____widget
|
|
|
2315
2327
|
};
|
|
2316
2328
|
};
|
|
2317
2329
|
let cases;
|
|
2330
|
+
const suite = requestedSuite;
|
|
2318
2331
|
switch (suite) {
|
|
2319
2332
|
case "widget-creation":
|
|
2320
2333
|
cases = WIDGET_CREATION_SUITE;
|
|
@@ -2350,18 +2363,57 @@ _____widget
|
|
|
2350
2363
|
cases = CONTENT_SUITE;
|
|
2351
2364
|
break;
|
|
2352
2365
|
default:
|
|
2353
|
-
res.status(
|
|
2366
|
+
res.status(404).json({
|
|
2367
|
+
error: `Unknown suite: ${suite || "(empty)"}. Choose: widget-creation, safety, tool-routing, gate-format, pipeline, adversarial, tool-routing-v2, session, widget-v2, gate-format-v2, content.`
|
|
2368
|
+
});
|
|
2354
2369
|
return;
|
|
2355
2370
|
}
|
|
2356
|
-
const
|
|
2371
|
+
const TIMEOUT = /* @__PURE__ */ Symbol("eval-timeout");
|
|
2372
|
+
const result = await Promise.race([
|
|
2373
|
+
runEvalSuite(suite, cases, agentCall),
|
|
2374
|
+
new Promise((resolve2) => {
|
|
2375
|
+
setTimeout(() => resolve2(TIMEOUT), timeoutMs);
|
|
2376
|
+
})
|
|
2377
|
+
]);
|
|
2378
|
+
if (result === TIMEOUT) {
|
|
2379
|
+
const elapsed2 = Date.now() - tStart;
|
|
2380
|
+
logger.warn(COMPONENT, `/api/eval/run TIMEOUT suite=${suite} elapsedMs=${elapsed2} timeoutMs=${timeoutMs}`);
|
|
2381
|
+
try {
|
|
2382
|
+
recordEvalTimeout(suite);
|
|
2383
|
+
} catch {
|
|
2384
|
+
}
|
|
2385
|
+
res.status(504).json({
|
|
2386
|
+
suite,
|
|
2387
|
+
passed: 0,
|
|
2388
|
+
total: 0,
|
|
2389
|
+
results: [],
|
|
2390
|
+
timedOut: true,
|
|
2391
|
+
timeoutMs,
|
|
2392
|
+
elapsedMs: elapsed2,
|
|
2393
|
+
error: `Eval suite '${suite}' timed out after ${timeoutMs}ms`
|
|
2394
|
+
});
|
|
2395
|
+
return;
|
|
2396
|
+
}
|
|
2357
2397
|
try {
|
|
2358
2398
|
recordEvalSuiteResult(suite, result.passed, result.total);
|
|
2359
2399
|
} catch {
|
|
2360
2400
|
}
|
|
2401
|
+
const elapsed = Date.now() - tStart;
|
|
2402
|
+
logger.info(COMPONENT, `/api/eval/run DONE suite=${suite} passed=${result.passed}/${result.total} elapsedMs=${elapsed}`);
|
|
2361
2403
|
res.json(result);
|
|
2362
2404
|
} catch (e) {
|
|
2363
|
-
|
|
2364
|
-
|
|
2405
|
+
const err = e;
|
|
2406
|
+
const elapsed = Date.now() - tStart;
|
|
2407
|
+
logger.warn(COMPONENT, `/api/eval/run ERROR suite=${requestedSuite || "(none)"} elapsedMs=${elapsed} message=${err.message}`);
|
|
2408
|
+
try {
|
|
2409
|
+
recordEvalError(requestedSuite || "unknown", err.name || "unknown");
|
|
2410
|
+
} catch {
|
|
2411
|
+
}
|
|
2412
|
+
res.status(500).json({
|
|
2413
|
+
suite: requestedSuite || void 0,
|
|
2414
|
+
error: err.message || "Eval run failed",
|
|
2415
|
+
errorClass: err.name || "Error"
|
|
2416
|
+
});
|
|
2365
2417
|
}
|
|
2366
2418
|
});
|
|
2367
2419
|
app.get("/api/eval/suites", async (_req, res) => {
|