titan-agent 5.3.0 → 5.3.2

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.
Files changed (116) hide show
  1. package/README.md +5 -5
  2. package/dist/agent/agent.js +33 -4
  3. package/dist/agent/agent.js.map +1 -1
  4. package/dist/agent/subAgent.js +16 -1
  5. package/dist/agent/subAgent.js.map +1 -1
  6. package/dist/agent/toolRunner.js +17 -0
  7. package/dist/agent/toolRunner.js.map +1 -1
  8. package/dist/config/schema.js +10 -0
  9. package/dist/config/schema.js.map +1 -1
  10. package/dist/eval/record.js +21 -2
  11. package/dist/eval/record.js.map +1 -1
  12. package/dist/gateway/metrics.js +26 -3
  13. package/dist/gateway/metrics.js.map +1 -1
  14. package/dist/gateway/server.js +58 -6
  15. package/dist/gateway/server.js.map +1 -1
  16. package/dist/organism/drives.js +47 -11
  17. package/dist/organism/drives.js.map +1 -1
  18. package/dist/organism/pressure.js +16 -0
  19. package/dist/organism/pressure.js.map +1 -1
  20. package/dist/skills/builtin/fb_autopilot.js +16 -1
  21. package/dist/skills/builtin/fb_autopilot.js.map +1 -1
  22. package/dist/telemetry/activityLog.js +158 -0
  23. package/dist/telemetry/activityLog.js.map +1 -0
  24. package/dist/utils/constants.js +3 -1
  25. package/dist/utils/constants.js.map +1 -1
  26. package/package.json +1 -1
  27. package/ui/dist/assets/{AuditPanel-C31LRHZX.js → AuditPanel-CM6Wg9hO.js} +1 -1
  28. package/ui/dist/assets/{AutonomyPanel-CxQU72ZY.js → AutonomyPanel-CESx3ANg.js} +1 -1
  29. package/ui/dist/assets/{AutopilotPanel-D4FnBwJm.js → AutopilotPanel-DtEet1hJ.js} +1 -1
  30. package/ui/dist/assets/{AutoresearchPanel-BYHXZ9AO.js → AutoresearchPanel-DR47NqT5.js} +1 -1
  31. package/ui/dist/assets/{BackupPanel-C4CQKf2P.js → BackupPanel-BGP8p3l3.js} +1 -1
  32. package/ui/dist/assets/{BrowserPanel-C-OFYyLm.js → BrowserPanel-C15x9bLn.js} +1 -1
  33. package/ui/dist/assets/{CPAgents-CvkZDm_3.js → CPAgents-DYUtPzSq.js} +1 -1
  34. package/ui/dist/assets/{CPDashboard-JmBLBbj7.js → CPDashboard-Bf0-SyCh.js} +1 -1
  35. package/ui/dist/assets/{CPFiles-BDToRw0a.js → CPFiles-CxgxjQcO.js} +1 -1
  36. package/ui/dist/assets/{CPGoals-Dh9qJNWa.js → CPGoals-BsmCMTvT.js} +1 -1
  37. package/ui/dist/assets/{CPInbox-B6iaIbNG.js → CPInbox-tMSbmQ9H.js} +1 -1
  38. package/ui/dist/assets/{CPSocial-CsFrwZRC.js → CPSocial-nb-j7sOE.js} +1 -1
  39. package/ui/dist/assets/{ChannelsPanel-D-S4ktFn.js → ChannelsPanel-DP5C2OKd.js} +1 -1
  40. package/ui/dist/assets/{CheckpointsPanel-D-sP9ZuS.js → CheckpointsPanel-DlranVLZ.js} +1 -1
  41. package/ui/dist/assets/{CommandPostHub-BhlNyeDH.js → CommandPostHub-BgxIa4Ev.js} +3 -3
  42. package/ui/dist/assets/{CronPanel-Bf3rV7N2.js → CronPanel-LoT5yKwJ.js} +1 -1
  43. package/ui/dist/assets/{DaemonPanel-GGBWjTG2.js → DaemonPanel-DBGMqaE_.js} +1 -1
  44. package/ui/dist/assets/{DataTable-D2Px4o6f.js → DataTable-B2Ma8hfi.js} +1 -1
  45. package/ui/dist/assets/{EmptyState-DH6-Jy6A.js → EmptyState-CcKyk5Yn.js} +1 -1
  46. package/ui/dist/assets/EvalHarnessPanel-BqtMc1ZM.js +2 -0
  47. package/ui/dist/assets/{EvalPanel-CdjxzHlJ.js → EvalPanel-Bc33j0pN.js} +1 -1
  48. package/ui/dist/assets/{FilesPanel-Dz8TFydL.js → FilesPanel-3QKvrWPo.js} +1 -1
  49. package/ui/dist/assets/{FleetPanel-CWwWWTD4.js → FleetPanel-CSsXuQYj.js} +1 -1
  50. package/ui/dist/assets/{HomelabPanel-C7VBV7AC.js → HomelabPanel-DhrjTX9m.js} +1 -1
  51. package/ui/dist/assets/{InfraView-B1TgXARJ.js → InfraView-CR6HyrL6.js} +2 -2
  52. package/ui/dist/assets/{InlineEditableField-DOJNOL8m.js → InlineEditableField-CnvF-yFR.js} +1 -1
  53. package/ui/dist/assets/{Input-BgyHgQ3D.js → Input-GTHp2Rkr.js} +1 -1
  54. package/ui/dist/assets/{IntegrationsPanel-O26b4nhv.js → IntegrationsPanel-CymCRE3T.js} +1 -1
  55. package/ui/dist/assets/{IntelligenceView-DUhTQ8f_.js → IntelligenceView-C1IHxJRC.js} +2 -2
  56. package/ui/dist/assets/{LearningPanel-DX5S9ovg.js → LearningPanel-DOCES3lH.js} +1 -1
  57. package/ui/dist/assets/{LogsPanel-DdeTnATQ.js → LogsPanel-BLnAqEaZ.js} +1 -1
  58. package/ui/dist/assets/{McpPanel-BpXWrP1a.js → McpPanel-ChUzmr3z.js} +1 -1
  59. package/ui/dist/assets/{MemoryGraphPanel-CNkZmTUy.js → MemoryGraphPanel-Bzvjmzvk.js} +1 -1
  60. package/ui/dist/assets/{MemoryWikiPanel-o4L8Df-n.js → MemoryWikiPanel-Dwk3Aqwd.js} +1 -1
  61. package/ui/dist/assets/{MeshPanel-DMBQJFCC.js → MeshPanel-C3LJSlht.js} +1 -1
  62. package/ui/dist/assets/{NvidiaPanel-C8P-tJFG.js → NvidiaPanel-CeZK_-CV.js} +1 -1
  63. package/ui/dist/assets/{OrganismPanel-CcfHDWDk.js → OrganismPanel-BB6YOiQV.js} +1 -1
  64. package/ui/dist/assets/{OverviewPanel-BSotI1Zv.js → OverviewPanel-BmtBhQnv.js} +1 -1
  65. package/ui/dist/assets/{PageHeader-DPJuAgJk.js → PageHeader-BimceqQo.js} +1 -1
  66. package/ui/dist/assets/{PaperclipPanel-aXoXUjo6.js → PaperclipPanel-C-brgwA3.js} +1 -1
  67. package/ui/dist/assets/{PersonasPanel-DdPZxz2C.js → PersonasPanel-L1j78p6H.js} +1 -1
  68. package/ui/dist/assets/{RecipesPanel-D7qffXQN.js → RecipesPanel-34lCfynJ.js} +1 -1
  69. package/ui/dist/assets/{SecurityPanel-BDRK5el7.js → SecurityPanel-CBTPWLj6.js} +1 -1
  70. package/ui/dist/assets/{SelfImprovePanel-oYiMwFnA.js → SelfImprovePanel-BrPbFHhG.js} +1 -1
  71. package/ui/dist/assets/{SelfProposalsPanel-DOpNU_rr.js → SelfProposalsPanel-lNmiDThB.js} +1 -1
  72. package/ui/dist/assets/{SessionsPanel-eRbM3D9P.js → SessionsPanel-DAEYIn83.js} +1 -1
  73. package/ui/dist/assets/{SessionsTab-Jq3UKQCI.js → SessionsTab-JQbltWww.js} +1 -1
  74. package/ui/dist/assets/{SettingsPanel-DBIvKUYY.js → SettingsPanel-CzRROAYQ.js} +1 -1
  75. package/ui/dist/assets/{SettingsView-yfSY4OLt.js → SettingsView-CN7ii2uw.js} +2 -2
  76. package/ui/dist/assets/{SkeletonLoader-D1d-Gyyg.js → SkeletonLoader-atQtpcF5.js} +1 -1
  77. package/ui/dist/assets/{SkillsPanel-bubl9nag.js → SkillsPanel-DlFs2ih7.js} +1 -1
  78. package/ui/dist/assets/{SomaView-D3aFL8Tw.js → SomaView-Ba642Oqb.js} +1 -1
  79. package/ui/dist/assets/{StatCard-CEVFsz7t.js → StatCard-DciE_Iqc.js} +1 -1
  80. package/ui/dist/assets/{StatusBadge-DxeA9LNd.js → StatusBadge-BtfSPoW2.js} +1 -1
  81. package/ui/dist/assets/{TeamsPanel-D6IJJIR_.js → TeamsPanel-DKQ5z2Qe.js} +1 -1
  82. package/ui/dist/assets/{TelemetryPanel-SMPebdjQ.js → TelemetryPanel-B6KAc55Q.js} +1 -1
  83. package/ui/dist/assets/{TitanCanvas-BQU1yxqf.js → TitanCanvas-C-s0A-lv.js} +3 -3
  84. package/ui/dist/assets/{ToolsView-DgP4uRPr.js → ToolsView-Dei0KMP0.js} +2 -2
  85. package/ui/dist/assets/{Tooltip-CNPQr7IO.js → Tooltip-70UK0E2I.js} +1 -1
  86. package/ui/dist/assets/{TraceViewer-BbISy_ET.js → TraceViewer-BniolyBx.js} +1 -1
  87. package/ui/dist/assets/{TrainingPanel-BdCHcv6t.js → TrainingPanel-Bz4CTPGW.js} +1 -1
  88. package/ui/dist/assets/{VoiceOverlay-l6yoasVz.js → VoiceOverlay-CmNCrLcd.js} +1 -1
  89. package/ui/dist/assets/{VramPanel-XLhmen92.js → VramPanel-Xh_OtRDR.js} +1 -1
  90. package/ui/dist/assets/{WatchView-Bt-lNNWJ.js → WatchView-C-sGFpVy.js} +1 -1
  91. package/ui/dist/assets/{WorkTab-IG-F6Qll.js → WorkTab-BjLNmgIK.js} +1 -1
  92. package/ui/dist/assets/{WorkflowsPanel-DsMpnwLK.js → WorkflowsPanel-CvgQU1xI.js} +1 -1
  93. package/ui/dist/assets/{arrow-left-C_H9Z2Tm.js → arrow-left-DwqHtJiU.js} +1 -1
  94. package/ui/dist/assets/{chart-column-rR6tb72l.js → chart-column-BtNO6sRy.js} +1 -1
  95. package/ui/dist/assets/{circle-check-big-B1hMwau0.js → circle-check-big-DZRE_MbN.js} +1 -1
  96. package/ui/dist/assets/{dollar-sign-DhYwsTnR.js → dollar-sign-aVG3a5eL.js} +1 -1
  97. package/ui/dist/assets/{download-UDDcAlZC.js → download-BxiWJU4G.js} +1 -1
  98. package/ui/dist/assets/{eye-off-Cx0M_VQb.js → eye-off-CkgfFYhm.js} +1 -1
  99. package/ui/dist/assets/{funnel-B7YvM1ei.js → funnel-PkLdxKyC.js} +1 -1
  100. package/ui/dist/assets/{git-branch-BhTBN3J6.js → git-branch-BM-Gw95X.js} +1 -1
  101. package/ui/dist/assets/{index-D7Clon2u.js → index-CahJbWSR.js} +2 -2
  102. package/ui/dist/assets/{layers-B6jDzitD.js → layers-BuGf4FIJ.js} +1 -1
  103. package/ui/dist/assets/{legacy-av079XKu.js → legacy-CR6o4t-y.js} +1 -1
  104. package/ui/dist/assets/{lightbulb-DRuQ3Chf.js → lightbulb-n8gc_XAL.js} +1 -1
  105. package/ui/dist/assets/{pause-DqkRWPB_.js → pause-DCV52koX.js} +1 -1
  106. package/ui/dist/assets/{play-hUyR3CVS.js → play-CcJ9BnCh.js} +1 -1
  107. package/ui/dist/assets/{plug-CvpyjJt_.js → plug-CfWBXfCl.js} +1 -1
  108. package/ui/dist/assets/{proxy-Cc5bR828.js → proxy-CzZDfLmm.js} +1 -1
  109. package/ui/dist/assets/{square-CdiC0J8Z.js → square-DJpUhlxi.js} +1 -1
  110. package/ui/dist/assets/{target-DemL8_0v.js → target-DWcmM_9m.js} +1 -1
  111. package/ui/dist/assets/{toggle-right-Dsk892k5.js → toggle-right-YusFQ69L.js} +1 -1
  112. package/ui/dist/assets/{trash-2-Byj4OvKB.js → trash-2-CK7yQ55V.js} +1 -1
  113. package/ui/dist/assets/{trending-up-Dh_CffGX.js → trending-up-DGjFyubC.js} +1 -1
  114. package/ui/dist/assets/{trophy-DDr2AePx.js → trophy-uQv_NgDB.js} +1 -1
  115. package/ui/dist/index.html +1 -1
  116. package/ui/dist/assets/EvalHarnessPanel-Cz9dRg61.js +0 -2
package/README.md CHANGED
@@ -23,7 +23,7 @@
23
23
  <a href="https://www.npmjs.com/package/titan-agent"><img src="https://img.shields.io/npm/v/titan-agent?color=blue&label=npm" alt="npm version"/></a>
24
24
  <a href="https://github.com/Djtony707/TITAN/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"/></a>
25
25
  <a href="#providers"><img src="https://img.shields.io/badge/providers-37-purple" alt="37 Providers"/></a>
26
- <a href="#built-in-tools"><img src="https://img.shields.io/badge/tools-248-orange" alt="248 Tools"/></a>
26
+ <a href="#built-in-tools"><img src="https://img.shields.io/badge/tools-253-orange" alt="253 Tools"/></a>
27
27
  <a href="#widget-gallery"><img src="https://img.shields.io/badge/widgets-110-pink" alt="110 Widgets"/></a>
28
28
  </p>
29
29
 
@@ -56,7 +56,7 @@ TITAN is like having a super-smart intern who never sleeps, never asks for a rai
56
56
  **"Talk to me in Andrew's voice"**
57
57
  → Done. It clones voices with 10 seconds of audio. Creepy? A little. Useful? Absolutely.
58
58
 
59
- No coding required. TITAN comes with **248 tools** out of the box. If it needs something new, it builds it on the fly.
59
+ No coding required. TITAN comes with **253 tools** out of the box. If it needs something new, it builds it on the fly.
60
60
 
61
61
  ---
62
62
 
@@ -137,7 +137,7 @@ Open `http://localhost:48420` and you get a beautiful canvas of draggable widget
137
137
  | **Command Post** | Agents, budgets, approvals, org chart, ancestry validation, atomic checkout. Run a business with TITAN agents as employees. |
138
138
  | **SOMA** | Watch TITAN's digital hormones pulse in real time. Weirdly mesmerizing. |
139
139
  | **Skills** | 143 skills loaded, 248 tools. Toggle each on/off. |
140
- | **Voice** | F5-TTS voice cloning + WebRTC streaming. Any voice, any language. |
140
+ | **Voice** | F5-TTS voice cloning via a Python sidecar (mlx-audio on Mac, container on Linux) + WebRTC streaming. Any voice, any language. |
141
141
  | **Memory Graph** | A visual web of everything TITAN remembers about you. |
142
142
  | **Security** | Audit log, checkpoint history, time travel for your files, bug-report viewer. |
143
143
 
@@ -260,9 +260,9 @@ Start in supervised mode. Review what it does. Don't give it access to systems y
260
260
 
261
261
  - **Version:** 5.3.0 "Spacewalk: CI Gate + Parity"
262
262
  - **Tests:** 500+ deterministic tests (unit + mock trajectory + parity), pass in under 5 s — plus 11 live-eval suites and a CI merge gate at 80 % per suite
263
- - **Widget templates:** 110 across 25 categories
263
+ - **Widget templates:** 109 production templates + 19 system widgets = 128 runtime entries across 26 categories
264
264
  - **Skills:** 143 loaded
265
- - **Tools:** 248 across all skills
265
+ - **Tools:** 253 across all skills (verified at runtime by `tests/unit/readme-claims.test.ts`)
266
266
  - **AI Providers:** 37 (Anthropic, OpenAI, Google, Ollama, Groq, Mistral, and 31 more)
267
267
  - **Chat Channels:** 16
268
268
  - **Node:** ≥ 22, pure ESM
@@ -132,7 +132,7 @@ function ensureSpawnAgentRegistered() {
132
132
  const templateName = args.template || "";
133
133
  let configAgent = null;
134
134
  try {
135
- const { resolveAgentConfig } = await import("./agentScope.js");
135
+ const { resolveAgentConfig, agentAllowsSkill } = await import("./agentScope.js");
136
136
  configAgent = resolveAgentConfig(templateName);
137
137
  } catch {
138
138
  }
@@ -140,6 +140,18 @@ function ensureSpawnAgentRegistered() {
140
140
  const template = SUB_AGENT_TEMPLATES[baseTemplateName] || {};
141
141
  const agentName = args.name || configAgent?.name || template.name || "SubAgent";
142
142
  const task = args.task;
143
+ let appliedFields = [];
144
+ if (configAgent) {
145
+ if (configAgent.maxRounds !== 15) appliedFields.push(`maxRounds=${configAgent.maxRounds}`);
146
+ if (configAgent.maxTokens !== 4e3) appliedFields.push(`maxTokens=${configAgent.maxTokens}`);
147
+ if (configAgent.persona && configAgent.persona !== "default") appliedFields.push(`persona=${configAgent.persona}`);
148
+ if (configAgent.skillsFilter) appliedFields.push(`skillsFilter=[${configAgent.skillsFilter.join(",")}]`);
149
+ if (configAgent.modelFallbacks.length > 0) logger.info("Agent", `Agent "${agentName}" has modelFallbacks \u2014 not yet implemented in spawn path`);
150
+ if (configAgent.workspaceDir) appliedFields.push(`workspaceDir=${configAgent.workspaceDir}`);
151
+ if (configAgent.tags.length > 0) appliedFields.push(`tags=[${configAgent.tags.join(",")}]`);
152
+ if (configAgent.systemPromptOverride) appliedFields.push("systemPromptOverride=set");
153
+ if (appliedFields.length > 0) logger.info("Agent", `Applied config agent fields for "${agentName}": ${appliedFields.join(", ")}`);
154
+ }
143
155
  try {
144
156
  const { isKilled } = await import("../safety/killSwitch.js");
145
157
  if (isKilled()) {
@@ -207,13 +219,30 @@ function ensureSpawnAgentRegistered() {
207
219
  const { updateAgentStatus } = await import("./commandPost.js");
208
220
  updateAgentStatus(specialistId, "active");
209
221
  }
222
+ let allowedTools = template.tools;
223
+ if (configAgent?.skillsFilter) {
224
+ try {
225
+ const { agentAllowsSkill } = await import("./agentScope.js");
226
+ allowedTools = template.tools?.filter((t) => agentAllowsSkill(configAgent, t));
227
+ if (allowedTools && allowedTools.length === 0) {
228
+ logger.warn("Agent", `Agent "${agentName}" skillsFilter blocks all template tools \u2014 falling back to template default`);
229
+ allowedTools = template.tools;
230
+ }
231
+ } catch {
232
+ }
233
+ }
210
234
  const result = await spawnSubAgent({
211
235
  name: agentName,
212
236
  task,
213
- tools: template.tools,
214
- systemPrompt: specialistPrompt || template.systemPrompt,
215
- model: args.model || specialistModel,
237
+ tools: allowedTools,
238
+ systemPrompt: configAgent?.systemPromptOverride || specialistPrompt || template.systemPrompt,
239
+ model: args.model || configAgent?.model || specialistModel,
216
240
  tier: template.tier,
241
+ persona: configAgent?.persona,
242
+ maxRounds: configAgent?.maxRounds,
243
+ maxTokens: configAgent?.maxTokens,
244
+ workspaceDir: configAgent?.workspaceDir ?? void 0,
245
+ tags: configAgent?.tags,
217
246
  depth: 1
218
247
  // v4.7.0: this IS a child (was incorrectly 0)
219
248
  });