titan-agent 6.5.2 → 7.0.0

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 (311) hide show
  1. package/README.md +180 -53
  2. package/assets/agent-skills/NOTICE-ECC.md +39 -0
  3. package/assets/agent-skills/agent-introspection-debugging/SKILL.md +153 -0
  4. package/assets/agent-skills/continuous-agent-loop/SKILL.md +45 -0
  5. package/assets/agent-skills/continuous-learning/SKILL.md +131 -0
  6. package/assets/agent-skills/continuous-learning/config.json +18 -0
  7. package/assets/agent-skills/continuous-learning/evaluate-session.sh +69 -0
  8. package/assets/agent-skills/production-audit/SKILL.md +206 -0
  9. package/assets/agent-skills/recursive-decision-ledger/SKILL.md +79 -0
  10. package/assets/agent-skills/scientific-thinking-literature-review/SKILL.md +192 -0
  11. package/assets/agent-skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  12. package/assets/agent-skills/verification-loop/SKILL.md +126 -0
  13. package/dist/agent/agent.js +67 -26
  14. package/dist/agent/agent.js.map +1 -1
  15. package/dist/agent/agentLoop.js +6 -2
  16. package/dist/agent/agentLoop.js.map +1 -1
  17. package/dist/agent/autoModeClassifier.js +26 -2
  18. package/dist/agent/autoModeClassifier.js.map +1 -1
  19. package/dist/agent/goalDriver.js +2 -0
  20. package/dist/agent/goalDriver.js.map +1 -1
  21. package/dist/agent/goalSpec.js +229 -0
  22. package/dist/agent/goalSpec.js.map +1 -0
  23. package/dist/agent/heartbeat.js +130 -0
  24. package/dist/agent/heartbeat.js.map +1 -0
  25. package/dist/agent/missionDecompose.js +38 -0
  26. package/dist/agent/missionDecompose.js.map +1 -0
  27. package/dist/agent/muscleMemory.js +291 -0
  28. package/dist/agent/muscleMemory.js.map +1 -0
  29. package/dist/agent/observationWriter.js +56 -0
  30. package/dist/agent/observationWriter.js.map +1 -0
  31. package/dist/agent/promptSectionCaps.js +6 -0
  32. package/dist/agent/promptSectionCaps.js.map +1 -1
  33. package/dist/agent/reminders.js +101 -0
  34. package/dist/agent/reminders.js.map +1 -0
  35. package/dist/agent/systemWidgets.js +41 -0
  36. package/dist/agent/systemWidgets.js.map +1 -0
  37. package/dist/agent/toolRunner.js +24 -0
  38. package/dist/agent/toolRunner.js.map +1 -1
  39. package/dist/agent/toolSearch.js +3 -0
  40. package/dist/agent/toolSearch.js.map +1 -1
  41. package/dist/channels/messenger.js +39 -0
  42. package/dist/channels/messenger.js.map +1 -1
  43. package/dist/config/config.js +7 -0
  44. package/dist/config/config.js.map +1 -1
  45. package/dist/config/schema.js +18 -1
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/eval/harness.js +13 -3
  48. package/dist/eval/harness.js.map +1 -1
  49. package/dist/gateway/onboarding.js +91 -0
  50. package/dist/gateway/onboarding.js.map +1 -0
  51. package/dist/gateway/routes/skills.js +2 -1
  52. package/dist/gateway/routes/skills.js.map +1 -1
  53. package/dist/gateway/routes/studioRouter.js +88 -0
  54. package/dist/gateway/routes/studioRouter.js.map +1 -0
  55. package/dist/gateway/routes/watchRouter.js +4 -4
  56. package/dist/gateway/routes/watchRouter.js.map +1 -1
  57. package/dist/gateway/server.js +251 -43
  58. package/dist/gateway/server.js.map +1 -1
  59. package/dist/memory/taxonomy.js +117 -0
  60. package/dist/memory/taxonomy.js.map +1 -0
  61. package/dist/providers/modelCapabilities.js +13 -0
  62. package/dist/providers/modelCapabilities.js.map +1 -1
  63. package/dist/providers/ollama.js +8 -2
  64. package/dist/providers/ollama.js.map +1 -1
  65. package/dist/providers/openai.js +1 -1
  66. package/dist/providers/openai.js.map +1 -1
  67. package/dist/providers/openai_compat.js +38 -2
  68. package/dist/providers/openai_compat.js.map +1 -1
  69. package/dist/providers/router.js +14 -0
  70. package/dist/providers/router.js.map +1 -1
  71. package/dist/recipes/runner.js +8 -1
  72. package/dist/recipes/runner.js.map +1 -1
  73. package/dist/recipes/store.js +2 -1
  74. package/dist/recipes/store.js.map +1 -1
  75. package/dist/skills/builtin/codebase_explore.js +214 -0
  76. package/dist/skills/builtin/codebase_explore.js.map +1 -0
  77. package/dist/skills/builtin/config_audit.js +160 -0
  78. package/dist/skills/builtin/config_audit.js.map +1 -0
  79. package/dist/skills/builtin/delegate_agent.js +107 -0
  80. package/dist/skills/builtin/delegate_agent.js.map +1 -0
  81. package/dist/skills/builtin/memory_map.js +38 -0
  82. package/dist/skills/builtin/memory_map.js.map +1 -0
  83. package/dist/skills/builtin/reminders.js +67 -0
  84. package/dist/skills/builtin/reminders.js.map +1 -0
  85. package/dist/skills/builtin/spec.js +139 -0
  86. package/dist/skills/builtin/spec.js.map +1 -0
  87. package/dist/skills/builtin/widget_gallery.js +12 -5
  88. package/dist/skills/builtin/widget_gallery.js.map +1 -1
  89. package/dist/skills/frontmatterLoader.js +7 -1
  90. package/dist/skills/frontmatterLoader.js.map +1 -1
  91. package/dist/skills/registry.js +12 -0
  92. package/dist/skills/registry.js.map +1 -1
  93. package/dist/substrate/traceBus.js.map +1 -1
  94. package/dist/telemetry/traceStore.js +127 -0
  95. package/dist/telemetry/traceStore.js.map +1 -0
  96. package/dist/utils/constants.js +1 -1
  97. package/dist/utils/constants.js.map +1 -1
  98. package/dist/utils/contrast.js +69 -0
  99. package/dist/utils/contrast.js.map +1 -0
  100. package/dist/watch/sessionContext.js +14 -0
  101. package/dist/watch/sessionContext.js.map +1 -0
  102. package/dist/watch/sessionTrace.js +51 -0
  103. package/dist/watch/sessionTrace.js.map +1 -0
  104. package/dist/watch/studioBuffer.js +53 -0
  105. package/dist/watch/studioBuffer.js.map +1 -0
  106. package/package.json +4 -3
  107. package/ui/dist/assets/AboutYouMemory-CZKEOd_O.js +11 -0
  108. package/ui/dist/assets/AuditPanel-Bu71N5Er.js +1 -0
  109. package/ui/dist/assets/{AutonomyPanel-CmaXJV8d.js → AutonomyPanel-DB-39dX4.js} +2 -2
  110. package/ui/dist/assets/{AutopilotPanel-CbohPtXW.js → AutopilotPanel-Cj8oKxWv.js} +1 -1
  111. package/ui/dist/assets/{AutoresearchPanel-DCwiQ2v2.js → AutoresearchPanel-3s8pjm6Z.js} +2 -2
  112. package/ui/dist/assets/BackupPanel-EUQJMJE7.js +1 -0
  113. package/ui/dist/assets/{BrowserPanel-D6UaSxap.js → BrowserPanel-Beo4F5Ar.js} +2 -2
  114. package/ui/dist/assets/Button-MdXmb4_n.js +1 -0
  115. package/ui/dist/assets/CPActivity-B1Se9VVc.js +1 -0
  116. package/ui/dist/assets/CPAgentDetail-BYji6tT8.js +1 -0
  117. package/ui/dist/assets/CPAgents-BSUKucTe.js +1 -0
  118. package/ui/dist/assets/CPApprovals-B4v0em6e.js +1 -0
  119. package/ui/dist/assets/CPCosts-9ikh61Kv.js +1 -0
  120. package/ui/dist/assets/CPDashboard-sOok2T5v.js +1 -0
  121. package/ui/dist/assets/{CPFiles-BO73EZwJ.js → CPFiles-DB2nY5JE.js} +1 -1
  122. package/ui/dist/assets/CPGoals-8Z1yOY8e.js +1 -0
  123. package/ui/dist/assets/CPInbox-Cq6-UY8F.js +11 -0
  124. package/ui/dist/assets/CPIssueDetail-NAGfmJg8.js +1 -0
  125. package/ui/dist/assets/CPIssues-BzX6Rckx.js +1 -0
  126. package/ui/dist/assets/CPLayout-BcRM6QSg.js +2 -0
  127. package/ui/dist/assets/CPOrg-B7DQ4UQP.js +1 -0
  128. package/ui/dist/assets/CPRuns-D-cpPw_M.js +1 -0
  129. package/ui/dist/assets/{CPSocial-Qw5rKy_4.js → CPSocial-DshtmcK0.js} +3 -3
  130. package/ui/dist/assets/CPVoice-DfXRnQVU.js +1 -0
  131. package/ui/dist/assets/{ChannelsPanel-DS21E-Iz.js → ChannelsPanel-BnaTOeyf.js} +1 -1
  132. package/ui/dist/assets/CheckpointsPanel-C62naE4U.js +1 -0
  133. package/ui/dist/assets/CommandPostHub-B_L1CAss.js +24 -0
  134. package/ui/dist/assets/ConfirmDialog-VErHWAbo.js +1 -0
  135. package/ui/dist/assets/CronPanel-BwMrrZ5d.js +1 -0
  136. package/ui/dist/assets/{DataTable-PnhPeDBG.js → DataTable-BCqSUuN7.js} +1 -1
  137. package/ui/dist/assets/{DreamPanel-DIrtlk2K.js → DreamPanel-BNAcCLBB.js} +2 -2
  138. package/ui/dist/assets/EmptyState-D9kQf1PX.js +1 -0
  139. package/ui/dist/assets/{EvalHarnessPanel-uYb_ZEQG.js → EvalHarnessPanel-BaMLdBNm.js} +2 -2
  140. package/ui/dist/assets/EvalPanel-CW-SSjtg.js +1 -0
  141. package/ui/dist/assets/{FileViewer-CVO3TRs3.js → FileViewer-BL00nsd7.js} +1 -1
  142. package/ui/dist/assets/FilesPanel-CeC6YUSd.js +16 -0
  143. package/ui/dist/assets/FleetPanel-EyWF7l3W.js +1 -0
  144. package/ui/dist/assets/{HomelabPanel-BZvN4LPM.js → HomelabPanel-BRfKRYe7.js} +2 -2
  145. package/ui/dist/assets/InfraView-Jmqhg_Yc.js +2 -0
  146. package/ui/dist/assets/{InlineEditableField-mBzpbcLB.js → InlineEditableField-DgMrLDj1.js} +1 -1
  147. package/ui/dist/assets/Input-CBTwa_Iw.js +1 -0
  148. package/ui/dist/assets/IntegrationsPanel-DQL-7Ec6.js +1 -0
  149. package/ui/dist/assets/IntelligenceView-DxD78qfP.js +2 -0
  150. package/ui/dist/assets/LearningPanel-C_JzSbJU.js +1 -0
  151. package/ui/dist/assets/LiveStudio-Db5yeaWo.js +7 -0
  152. package/ui/dist/assets/{LogsPanel-DbP3Mwnr.js → LogsPanel-CpinKwaZ.js} +1 -1
  153. package/ui/dist/assets/McpPanel-D-MqN_f-.js +1 -0
  154. package/ui/dist/assets/MemoryGraphPanel-BnD5jRqf.js +1 -0
  155. package/ui/dist/assets/MemoryTaxonomyPanel-BBI202dd.js +6 -0
  156. package/ui/dist/assets/MemoryWikiPanel-Dn3XZHL0.js +6 -0
  157. package/ui/dist/assets/{MeshPanel-Bf-4brXL.js → MeshPanel-C-mRJpr0.js} +1 -1
  158. package/ui/dist/assets/{MissionCanvas-CJyhnauG.js → MissionCanvas-CbZW83Ch.js} +1 -1
  159. package/ui/dist/assets/{MissionChat-C2Nto3zM.js → MissionChat-Bs75jPAD.js} +1 -1
  160. package/ui/dist/assets/{MissionLibrary-RXyBHsLL.js → MissionLibrary-BxQ6SxPe.js} +1 -1
  161. package/ui/dist/assets/MissionStart-CBuBPasl.js +1 -0
  162. package/ui/dist/assets/Modal-ybPGvlQs.js +9 -0
  163. package/ui/dist/assets/{NvidiaPanel-4DlcQlyl.js → NvidiaPanel-DdG13OX4.js} +1 -1
  164. package/ui/dist/assets/OrganismPanel-xZWUJKyr.js +1 -0
  165. package/ui/dist/assets/OverviewPanel-B45ZYhJV.js +1 -0
  166. package/ui/dist/assets/{PageHeader-bnc85wQN.js → PageHeader-DdrbS1aq.js} +1 -1
  167. package/ui/dist/assets/PersonaProfilesPanel-CKER-EU5.js +8 -0
  168. package/ui/dist/assets/{PersonasPanel-dR8VppcD.js → PersonasPanel-CMMQ3nh3.js} +1 -1
  169. package/ui/dist/assets/{PhoneDeskPanel-CdVOY7H9.js → PhoneDeskPanel-Bw_Y-cVE.js} +2 -2
  170. package/ui/dist/assets/RecipesPanel-DzMcxpJJ.js +1 -0
  171. package/ui/dist/assets/SecurityPanel-BCq3Fzbr.js +1 -0
  172. package/ui/dist/assets/SelfImprovePanel-YE3hT8jK.js +1 -0
  173. package/ui/dist/assets/SelfProposalsPanel-DXuqBM6p.js +1 -0
  174. package/ui/dist/assets/SessionsPanel-DORz5goR.js +1 -0
  175. package/ui/dist/assets/SessionsTab-qYHDOuC8.js +1 -0
  176. package/ui/dist/assets/SettingsPanel-BbwPu1i7.js +1 -0
  177. package/ui/dist/assets/SettingsView-zgqkDDBJ.js +2 -0
  178. package/ui/dist/assets/{SkeletonLoader-Cax7YTqW.js → SkeletonLoader-r6OGXaU9.js} +1 -1
  179. package/ui/dist/assets/SkillsPanel-BjEOBMRo.js +11 -0
  180. package/ui/dist/assets/{SomaView-eG3wI4S1.js → SomaView-DLzApZVW.js} +2 -2
  181. package/ui/dist/assets/{StatCard-Djr487DV.js → StatCard-DLq8aBps.js} +1 -1
  182. package/ui/dist/assets/{StatusBadge-JpCoA33_.js → StatusBadge-BqlvIbdj.js} +1 -1
  183. package/ui/dist/assets/{Tabs-DJHu-roP.js → Tabs-DdUThlp1.js} +1 -1
  184. package/ui/dist/assets/TeamsPanel-uIIKoU7I.js +1 -0
  185. package/ui/dist/assets/{TelemetryPanel-D4PXsd-X.js → TelemetryPanel-dVr3yQQr.js} +1 -1
  186. package/ui/dist/assets/TitanCanvas-xHAJqwG2.js +945 -0
  187. package/ui/dist/assets/ToolsView-CG1mZdiy.js +2 -0
  188. package/ui/dist/assets/{Tooltip-B1LhTXJ8.js → Tooltip-C2tXJcrN.js} +1 -1
  189. package/ui/dist/assets/TraceViewer-BIMD_Osr.js +1 -0
  190. package/ui/dist/assets/TracesPanel-nMUiyMj5.js +1 -0
  191. package/ui/dist/assets/TrainingPanel-CT5R4HWm.js +1 -0
  192. package/ui/dist/assets/{VoiceOverlay-B_ss7Zg_.js → VoiceOverlay-Br4QnCtw.js} +3 -3
  193. package/ui/dist/assets/VramPanel-CdnJYytg.js +1 -0
  194. package/ui/dist/assets/WatchView-TNU6Ns1Q.js +13 -0
  195. package/ui/dist/assets/WorkTab-wTlX_UKP.js +1 -0
  196. package/ui/dist/assets/WorkflowBuilderPanel-CDpVt5ux.js +6 -0
  197. package/ui/dist/assets/WorkflowsPanel-zsFqsLdn.js +11 -0
  198. package/ui/dist/assets/{archive-gZFnGd5A.js → archive-Bh689DNg.js} +1 -1
  199. package/ui/dist/assets/{arrow-left-qA0Qer2h.js → arrow-left-WkVYLm80.js} +1 -1
  200. package/ui/dist/assets/{book-open-DIxdPqmD.js → book-open-ohEXgUsS.js} +1 -1
  201. package/ui/dist/assets/{bot-CvIF1uHi.js → bot-DvEcyQcD.js} +1 -1
  202. package/ui/dist/assets/{chart-column-BQiM-Td4.js → chart-column-w3goFd5f.js} +1 -1
  203. package/ui/dist/assets/{check-DgyDEFtq.js → check-CuRYh4Zh.js} +1 -1
  204. package/ui/dist/assets/{chevron-right-CQ1NTOtd.js → chevron-right-DbLSHmff.js} +1 -1
  205. package/ui/dist/assets/{circle-check-big-CAFcaPPH.js → circle-check-big-Bkba568b.js} +1 -1
  206. package/ui/dist/assets/{circle-stop-C-8xGv0n.js → circle-stop-Bx2ohEg8.js} +1 -1
  207. package/ui/dist/assets/{clipboard-list-9DdqBj1F.js → clipboard-list-Dj9tORnu.js} +1 -1
  208. package/ui/dist/assets/{clock-CF9BCIpL.js → clock-JyQAYy6X.js} +1 -1
  209. package/ui/dist/assets/{dollar-sign-LDRZBae6.js → dollar-sign-XxwPAA2a.js} +1 -1
  210. package/ui/dist/assets/{download-BBNXvBO0.js → download-D1izVEOL.js} +1 -1
  211. package/ui/dist/assets/{external-link-D_ji4Bec.js → external-link-DZ_rZsIt.js} +1 -1
  212. package/ui/dist/assets/{file-text-DrdTDEYp.js → file-text-Cfawu8Bs.js} +1 -1
  213. package/ui/dist/assets/{flask-conical-BGn5PgFX.js → flask-conical-Ql8QxhgY.js} +1 -1
  214. package/ui/dist/assets/{folder-BeZZUGnK.js → folder-DAdIw-Pb.js} +1 -1
  215. package/ui/dist/assets/{funnel-CAJgGO5M.js → funnel-FycfZcXo.js} +1 -1
  216. package/ui/dist/assets/{git-branch-BcXabeOs.js → git-branch-C2qrhGGu.js} +1 -1
  217. package/ui/dist/assets/index-Cml2x9pA.js +507 -0
  218. package/ui/dist/assets/index-yWybhcfI.css +1 -0
  219. package/ui/dist/assets/{layers-DxYDmPA_.js → layers-yzjtGlHB.js} +1 -1
  220. package/ui/dist/assets/{legacy-dHWI7k8P.js → legacy-D21WSMF1.js} +1 -1
  221. package/ui/dist/assets/{lightbulb-B0Du4SM4.js → lightbulb-BZJNK69S.js} +1 -1
  222. package/ui/dist/assets/{link-CUpaumqr.js → link-CnFkBkaY.js} +1 -1
  223. package/ui/dist/assets/{list-todo-CDDhmPQB.js → list-todo-BlgfQHup.js} +1 -1
  224. package/ui/dist/assets/{message-square-D5VWlv-Q.js → message-square-CRsG9u6_.js} +1 -1
  225. package/ui/dist/assets/{mic-Ddcc6Ann.js → mic-B32RHc7Y.js} +1 -1
  226. package/ui/dist/assets/{missions-2zox16Tc.js → missions-1iw8Z2_0.js} +1 -1
  227. package/ui/dist/assets/{network-DaJ7ugwX.js → network-C9RXQGrV.js} +1 -1
  228. package/ui/dist/assets/{pause-BukaK6rs.js → pause-BT1Bc2q3.js} +1 -1
  229. package/ui/dist/assets/{pencil-D_YwQBeg.js → pencil-BK5IU6o0.js} +1 -1
  230. package/ui/dist/assets/{play-BjdwtYMk.js → play-Cl1nC_gc.js} +1 -1
  231. package/ui/dist/assets/{plug-yISDdeW2.js → plug-DvcpOalj.js} +1 -1
  232. package/ui/dist/assets/{plus-BSjTdepW.js → plus-Dpo1qfrl.js} +1 -1
  233. package/ui/dist/assets/{radio-B7kX_yWE.js → radio-C5c9IyqX.js} +1 -1
  234. package/ui/dist/assets/{refresh-cw-CwDpzXUn.js → refresh-cw-C-iZkzuS.js} +1 -1
  235. package/ui/dist/assets/{rotate-ccw-7SQDTI0_.js → rotate-ccw-qzrB3SNw.js} +1 -1
  236. package/ui/dist/assets/{save-CjTPAQM0.js → save-DwR9wQVu.js} +1 -1
  237. package/ui/dist/assets/{search-BP7VlNxX.js → search-D10l0m3-.js} +1 -1
  238. package/ui/dist/assets/{send-C2XDuRPf.js → send-DtXGsaFW.js} +1 -1
  239. package/ui/dist/assets/{server-BE8W-AT4.js → server-BzisF3LL.js} +1 -1
  240. package/ui/dist/assets/settings-Dbwd1_-c.js +6 -0
  241. package/ui/dist/assets/{shield-check-s7la2J2K.js → shield-check-CXlDJyAW.js} +1 -1
  242. package/ui/dist/assets/square-BBC-JKzY.js +11 -0
  243. package/ui/dist/assets/{terminal-B8IK4WsO.js → terminal-DaBIlWEM.js} +1 -1
  244. package/ui/dist/assets/{test-tube-Xfn9DJeg.js → test-tube-CDATRD5t.js} +1 -1
  245. package/ui/dist/assets/{toggle-right-CHpzOIlj.js → toggle-right-DTmrC5RD.js} +1 -1
  246. package/ui/dist/assets/{trash-2-B1C85ePK.js → trash-2-CTeyjxD_.js} +1 -1
  247. package/ui/dist/assets/{trending-up-DDGHQZY1.js → trending-up-CXPRjRV4.js} +1 -1
  248. package/ui/dist/assets/{trophy-D0LhJSPA.js → trophy-DbVdXRtU.js} +1 -1
  249. package/ui/dist/assets/{volume-2-DMaE91b5.js → volume-2-DYDBmm3M.js} +1 -1
  250. package/ui/dist/assets/{wifi-off-DR9h8HGA.js → wifi-off-BBuIGbiP.js} +1 -1
  251. package/ui/dist/assets/zoom-out-D47_pRAO.js +16 -0
  252. package/ui/dist/index.html +2 -2
  253. package/ui/dist/sw.js +1 -1
  254. package/ui/dist/assets/AuditPanel-BaftX5MP.js +0 -1
  255. package/ui/dist/assets/BackupPanel-DAy9G7Wt.js +0 -1
  256. package/ui/dist/assets/CPActivity-BYDsUoMn.js +0 -1
  257. package/ui/dist/assets/CPAgentDetail-Bb9-GAJY.js +0 -1
  258. package/ui/dist/assets/CPAgents-BTZuGnki.js +0 -1
  259. package/ui/dist/assets/CPApprovals-BME2ARkO.js +0 -1
  260. package/ui/dist/assets/CPCosts-mOXwWq0i.js +0 -1
  261. package/ui/dist/assets/CPDashboard-CTlKGXXQ.js +0 -1
  262. package/ui/dist/assets/CPGoals-BNWhNP14.js +0 -1
  263. package/ui/dist/assets/CPInbox-ybe4r8LW.js +0 -16
  264. package/ui/dist/assets/CPIssueDetail-DaMMGbjw.js +0 -1
  265. package/ui/dist/assets/CPIssues-BgpQOISw.js +0 -1
  266. package/ui/dist/assets/CPLayout-bgErauTx.js +0 -2
  267. package/ui/dist/assets/CPOrg-C8l5SIWJ.js +0 -8
  268. package/ui/dist/assets/CPRuns-DB8S7loF.js +0 -1
  269. package/ui/dist/assets/CPVoice-DfwHPewA.js +0 -1
  270. package/ui/dist/assets/CheckpointsPanel-9-l_8GdG.js +0 -1
  271. package/ui/dist/assets/CommandPostHub-z55Yrhj1.js +0 -24
  272. package/ui/dist/assets/CronPanel-kEZK3gpx.js +0 -1
  273. package/ui/dist/assets/EmptyState-CfvU7SdB.js +0 -1
  274. package/ui/dist/assets/EvalPanel-CDG-njyj.js +0 -1
  275. package/ui/dist/assets/FilesPanel-CaLPog2e.js +0 -16
  276. package/ui/dist/assets/FleetPanel-BtlaV6pH.js +0 -1
  277. package/ui/dist/assets/InfraView-C0zEuFrR.js +0 -2
  278. package/ui/dist/assets/Input-CbrMbLgn.js +0 -1
  279. package/ui/dist/assets/IntegrationsPanel-B4TyR6jC.js +0 -1
  280. package/ui/dist/assets/IntelligenceView-DZ4HxYZ3.js +0 -2
  281. package/ui/dist/assets/LearningPanel-B4RIm_iQ.js +0 -1
  282. package/ui/dist/assets/McpPanel-BmNUFozc.js +0 -1
  283. package/ui/dist/assets/MemoryGraphPanel-JPurHV0L.js +0 -16
  284. package/ui/dist/assets/MemoryWikiPanel-DdvCAZHa.js +0 -6
  285. package/ui/dist/assets/MissionStart-wUkcEP0T.js +0 -1
  286. package/ui/dist/assets/Modal-BmS7C6FN.js +0 -1
  287. package/ui/dist/assets/OrganismPanel-C2LYDPrn.js +0 -1
  288. package/ui/dist/assets/OverviewPanel-DK8uuq4D.js +0 -1
  289. package/ui/dist/assets/PersonaProfilesPanel-DGtokXUu.js +0 -8
  290. package/ui/dist/assets/RecipesPanel-D3Zs2wxr.js +0 -1
  291. package/ui/dist/assets/SecurityPanel-BMERf796.js +0 -1
  292. package/ui/dist/assets/SelfImprovePanel-BxqWHXCU.js +0 -1
  293. package/ui/dist/assets/SelfProposalsPanel-CuC94vdx.js +0 -2
  294. package/ui/dist/assets/SessionsPanel-CQ8qvzp7.js +0 -1
  295. package/ui/dist/assets/SessionsTab-B3eHV3jf.js +0 -1
  296. package/ui/dist/assets/SettingsPanel-Cumls7N2.js +0 -1
  297. package/ui/dist/assets/SettingsView-BtA67pol.js +0 -2
  298. package/ui/dist/assets/SkillsPanel-CA415CT8.js +0 -11
  299. package/ui/dist/assets/TeamsPanel-C_Vu6vnY.js +0 -1
  300. package/ui/dist/assets/TitanCanvas-TuYZSZO7.js +0 -1117
  301. package/ui/dist/assets/ToolsView-BvTN6vFn.js +0 -2
  302. package/ui/dist/assets/TraceViewer-Bh8Jo3Dr.js +0 -1
  303. package/ui/dist/assets/TrainingPanel-Dmbd1rJ-.js +0 -1
  304. package/ui/dist/assets/VramPanel-CPICbZ2s.js +0 -1
  305. package/ui/dist/assets/WatchView-BCgLVfiV.js +0 -13
  306. package/ui/dist/assets/WorkTab-iptofXO9.js +0 -1
  307. package/ui/dist/assets/WorkflowsPanel-3RYkFHyf.js +0 -11
  308. package/ui/dist/assets/chevron-up-UyfdjRp6.js +0 -6
  309. package/ui/dist/assets/index-CUgepw5Q.js +0 -337
  310. package/ui/dist/assets/index-Dm6zcSTS.css +0 -1
  311. package/ui/dist/assets/proxy-CWET5FFX.js +0 -9
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: scholar-evaluation
3
+ description: Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.
4
+ origin: community
5
+ ---
6
+
7
+ # Scholar Evaluation
8
+
9
+ Use this skill to evaluate academic or scientific work with a repeatable rubric.
10
+
11
+ ## When to Use
12
+
13
+ - Reviewing a research paper, proposal, thesis chapter, or literature review.
14
+ - Checking whether claims are supported by cited evidence.
15
+ - Evaluating methodology, study design, analysis, or limitations.
16
+ - Comparing two or more papers for quality or relevance.
17
+ - Producing structured feedback for revision.
18
+
19
+ ## Evaluation Scope
20
+
21
+ Start by identifying the artifact:
22
+
23
+ - empirical research paper
24
+ - theoretical paper
25
+ - technical report
26
+ - systematic or narrative literature review
27
+ - research proposal
28
+ - thesis or dissertation chapter
29
+ - conference abstract or short paper
30
+
31
+ Then choose scope:
32
+
33
+ - **comprehensive**: all rubric dimensions
34
+ - **targeted**: one or two dimensions, such as method or citations
35
+ - **comparative**: rank multiple works against the same rubric
36
+
37
+ ## Rubric
38
+
39
+ Score each applicable dimension from 1 to 5:
40
+
41
+ - 5: excellent; clear, rigorous, and publication-ready
42
+ - 4: good; minor improvements needed
43
+ - 3: adequate; meaningful gaps but usable
44
+ - 2: weak; substantial revision needed
45
+ - 1: poor; major validity or clarity problems
46
+
47
+ Use `N/A` for dimensions that do not apply.
48
+
49
+ ### 1. Problem and Research Question
50
+
51
+ - Is the problem clear and specific?
52
+ - Is the contribution meaningful?
53
+ - Are scope and assumptions explicit?
54
+ - Does the question match the claimed contribution?
55
+
56
+ ### 2. Literature and Context
57
+
58
+ - Is relevant prior work covered?
59
+ - Does the work synthesize rather than merely list sources?
60
+ - Are gaps accurately identified?
61
+ - Are recent and foundational sources balanced?
62
+
63
+ ### 3. Methodology
64
+
65
+ - Does the method answer the research question?
66
+ - Are design choices justified?
67
+ - Are variables, datasets, participants, or materials described clearly?
68
+ - Could another researcher reproduce the work?
69
+ - Are ethical and practical constraints acknowledged?
70
+
71
+ ### 4. Data and Evidence
72
+
73
+ - Are data sources credible and appropriate?
74
+ - Is sample size or corpus coverage adequate?
75
+ - Are inclusion, exclusion, and preprocessing decisions documented?
76
+ - Are missing data and bias risks discussed?
77
+
78
+ ### 5. Analysis
79
+
80
+ - Are statistical, qualitative, or computational methods appropriate?
81
+ - Are baselines and controls fair?
82
+ - Are uncertainty, sensitivity, or robustness checks included when needed?
83
+ - Are alternative explanations considered?
84
+
85
+ ### 6. Results and Interpretation
86
+
87
+ - Are results clearly presented?
88
+ - Do claims stay within the evidence?
89
+ - Are figures, tables, and metrics understandable?
90
+ - Are negative or null results handled honestly?
91
+
92
+ ### 7. Limitations and Threats to Validity
93
+
94
+ - Are limitations specific rather than generic?
95
+ - Are internal, external, construct, and conclusion-validity risks addressed?
96
+ - Does the paper distinguish speculation from demonstrated results?
97
+
98
+ ### 8. Writing and Structure
99
+
100
+ - Is the argument easy to follow?
101
+ - Are sections organized around the research question?
102
+ - Are definitions and notation clear?
103
+ - Is the tone precise and scholarly?
104
+
105
+ ### 9. Citations
106
+
107
+ - Do cited papers support the claims attached to them?
108
+ - Are primary sources used where possible?
109
+ - Are reviews labeled as reviews?
110
+ - Are preprints labeled as preprints?
111
+ - Are citation metadata and links correct?
112
+
113
+ ## Review Process
114
+
115
+ 1. Read the abstract, introduction, figures, and conclusion for claimed
116
+ contribution.
117
+ 2. Read methods and results for evidence quality.
118
+ 3. Check the strongest claims against cited sources.
119
+ 4. Score each applicable dimension.
120
+ 5. Separate critical blockers from revision suggestions.
121
+ 6. End with concrete next edits.
122
+
123
+ ## Output Template
124
+
125
+ ```markdown
126
+ # Scholar Evaluation: <Artifact>
127
+
128
+ ## Overall Assessment
129
+
130
+ - Overall score: <1-5 or N/A>
131
+ - Confidence: <high | medium | low>
132
+ - Summary: <3-5 sentences>
133
+
134
+ ## Dimension Scores
135
+
136
+ | Dimension | Score | Evidence | Revision priority |
137
+ | --- | ---: | --- | --- |
138
+ | Problem and question | | | |
139
+ | Literature and context | | | |
140
+ | Methodology | | | |
141
+ | Data and evidence | | | |
142
+ | Analysis | | | |
143
+ | Results and interpretation | | | |
144
+ | Limitations | | | |
145
+ | Writing and structure | | | |
146
+ | Citations | | | |
147
+
148
+ ## Critical Issues
149
+
150
+ ## Recommended Revisions
151
+
152
+ ## Evidence Checks Needed
153
+ ```
154
+
155
+ ## Pitfalls
156
+
157
+ - Do not use the score as a substitute for concrete feedback.
158
+ - Do not penalize a paper for omitting a dimension outside its scope.
159
+ - Do not treat citation count, venue, or author reputation as proof of quality.
160
+ - Do not accept unsupported claims just because they appear in the abstract.
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: verification-loop
3
+ description: "A comprehensive verification system for TITAN sessions."
4
+ origin: ECC
5
+ ---
6
+
7
+ # Verification Loop Skill
8
+
9
+ A comprehensive verification system for TITAN sessions.
10
+
11
+ ## When to Use
12
+
13
+ Invoke this skill:
14
+ - After completing a feature or significant code change
15
+ - Before creating a PR
16
+ - When you want to ensure quality gates pass
17
+ - After refactoring
18
+
19
+ ## Verification Phases
20
+
21
+ ### Phase 1: Build Verification
22
+ ```bash
23
+ # Check if project builds
24
+ npm run build 2>&1 | tail -20
25
+ # OR
26
+ pnpm build 2>&1 | tail -20
27
+ ```
28
+
29
+ If build fails, STOP and fix before continuing.
30
+
31
+ ### Phase 2: Type Check
32
+ ```bash
33
+ # TypeScript projects
34
+ npx tsc --noEmit 2>&1 | head -30
35
+
36
+ # Python projects
37
+ pyright . 2>&1 | head -30
38
+ ```
39
+
40
+ Report all type errors. Fix critical ones before continuing.
41
+
42
+ ### Phase 3: Lint Check
43
+ ```bash
44
+ # JavaScript/TypeScript
45
+ npm run lint 2>&1 | head -30
46
+
47
+ # Python
48
+ ruff check . 2>&1 | head -30
49
+ ```
50
+
51
+ ### Phase 4: Test Suite
52
+ ```bash
53
+ # Run tests with coverage
54
+ npm run test -- --coverage 2>&1 | tail -50
55
+
56
+ # Check coverage threshold
57
+ # Target: 80% minimum
58
+ ```
59
+
60
+ Report:
61
+ - Total tests: X
62
+ - Passed: X
63
+ - Failed: X
64
+ - Coverage: X%
65
+
66
+ ### Phase 5: Security Scan
67
+ ```bash
68
+ # Check for secrets
69
+ grep -rn "sk-" --include="*.ts" --include="*.js" . 2>/dev/null | head -10
70
+ grep -rn "api_key" --include="*.ts" --include="*.js" . 2>/dev/null | head -10
71
+
72
+ # Check for console.log
73
+ grep -rn "console.log" --include="*.ts" --include="*.tsx" src/ 2>/dev/null | head -10
74
+ ```
75
+
76
+ ### Phase 6: Diff Review
77
+ ```bash
78
+ # Show what changed
79
+ git diff --stat
80
+ git diff HEAD~1 --name-only
81
+ ```
82
+
83
+ Review each changed file for:
84
+ - Unintended changes
85
+ - Missing error handling
86
+ - Potential edge cases
87
+
88
+ ## Output Format
89
+
90
+ After running all phases, produce a verification report:
91
+
92
+ ```
93
+ VERIFICATION REPORT
94
+ ==================
95
+
96
+ Build: [PASS/FAIL]
97
+ Types: [PASS/FAIL] (X errors)
98
+ Lint: [PASS/FAIL] (X warnings)
99
+ Tests: [PASS/FAIL] (X/Y passed, Z% coverage)
100
+ Security: [PASS/FAIL] (X issues)
101
+ Diff: [X files changed]
102
+
103
+ Overall: [READY/NOT READY] for PR
104
+
105
+ Issues to Fix:
106
+ 1. ...
107
+ 2. ...
108
+ ```
109
+
110
+ ## Continuous Mode
111
+
112
+ For long sessions, run verification every 15 minutes or after major changes:
113
+
114
+ ```markdown
115
+ Set a mental checkpoint:
116
+ - After completing each function
117
+ - After finishing a component
118
+ - Before moving to next task
119
+
120
+ Run: /verify
121
+ ```
122
+
123
+ ## Integration with Hooks
124
+
125
+ This skill complements PostToolUse hooks but provides deeper verification.
126
+ Hooks catch issues immediately; this skill provides comprehensive review.
@@ -35,6 +35,7 @@ import { getAgent } from "./multiAgent.js";
35
35
  import { isDangerous } from "../utils/safety.js";
36
36
  import { registerTool } from "./toolRunner.js";
37
37
  import { runAgentLoop } from "./agentLoop.js";
38
+ import { detectSystemWidget, buildSystemWidgetGate } from "./systemWidgets.js";
38
39
  import { startTrace } from "./tracer.js";
39
40
  import { initSoulState, consolidateWisdom, clearSoulState, getWisdomHints } from "./soul.js";
40
41
  import logger from "../utils/logger.js";
@@ -489,12 +490,15 @@ ${memories.map((m) => `- ${m.key}: ${m.value}`).join("\n")}` : "";
489
490
  } catch {
490
491
  }
491
492
  let goalPlanBlock = "";
493
+ let goalSpecBlock = "";
492
494
  try {
493
495
  const { getSessionGoal } = await import("./autonomyContext.js");
494
496
  const goalCtx = sessionId ? getSessionGoal(sessionId) : null;
495
497
  if (goalCtx?.goalId) {
496
498
  const { renderGoalPlanForPrompt } = await import("./goalPlanFile.js");
497
499
  goalPlanBlock = renderGoalPlanForPrompt(goalCtx.goalId);
500
+ const { renderGoalSpecForPrompt } = await import("./goalSpec.js");
501
+ goalSpecBlock = renderGoalSpecForPrompt(goalCtx.goalId);
498
502
  }
499
503
  } catch {
500
504
  }
@@ -674,6 +678,10 @@ ${transientIncludes}` : "" },
674
678
  // Top-N most relevant lessons this agent has learned, injected
675
679
  // near the recency position so they actually inform the next move.
676
680
  { name: "agentLessons", content: agentLessonsBlock },
681
+ // v7.0 — Living goal SPEC (spec-driven workflow). The definition-of-done
682
+ // lands just before the plan so the agent checks acceptance criteria
683
+ // ("are we done?") before reciting the step ladder ("what's next?").
684
+ { name: "goalSpec", content: goalSpecBlock },
677
685
  // v6.0 Command Post upgrade #2 — Living goal plan (Manus recitation).
678
686
  // When the session is tied to a goal, the goal's plan.md surfaces
679
687
  // so the agent recites + updates progress every turn.
@@ -1148,34 +1156,19 @@ Continue executing this task NOW using the appropriate tools. Do NOT re-explain,
1148
1156
  taskEnforcementActive = true;
1149
1157
  }
1150
1158
  if (/\b(fix|change|modify|update|refactor|implement|add|remove|replace|uncomment|activate|enable|rewrite|patch|upgrade)\b.{0,80}\b(code|function|file|class|method|module|component|logic|bug|feature|session|title|tool|test)\b/i.test(message)) {
1151
- systemPrompt += "\n\nWhen editing code: 1) read the relevant files first, 2) make the actual changes using write_file or edit_file, 3) run tests to verify, 4) report what you changed. Do NOT stop after reading \u2014 actually save your changes.";
1159
+ systemPrompt += "\n\nWhen editing code: 1) read the relevant file first with read_file, 2) make the change with edit_file (for a small change) or write_file \u2014 do NOT use shell/sed/echo/cat to edit files; edit_file is the correct, verifiable tool, 3) run tests to verify, 4) report what you changed. Do NOT stop after reading \u2014 actually save your changes.";
1152
1160
  taskEnforcementActive = true;
1153
1161
  }
1154
- const systemWidgetPatterns = [
1155
- { pattern: /\b(?:backups?|snapshots?|archives?)\b/i, widget: "system:backup", name: "Backup Manager" },
1156
- { pattern: /\b(?:training|train|specialists?|models?)\b/i, widget: "system:training", name: "Training Dashboard" },
1157
- { pattern: /\b(?:recipes?|playbooks?|workflows?|jarvis)\b/i, widget: "system:recipes", name: "Recipe Kitchen" },
1158
- { pattern: /\b(?:vram|gpu|nvidia)\b/i, widget: "system:vram", name: "VRAM Monitor" },
1159
- { pattern: /\b(?:teams?|members?|roles?|permissions?|rbac)\b/i, widget: "system:teams", name: "Team Hub" },
1160
- { pattern: /\b(?:cron|schedules?|jobs?|timers?)\b/i, widget: "system:cron", name: "Cron Scheduler" },
1161
- { pattern: /\b(?:checkpoints?|restores?|save state)\b/i, widget: "system:checkpoints", name: "Checkpoints" },
1162
- { pattern: /\b(?:organism|guardrails?)\b/i, widget: "system:organism", name: "Organism Monitor" },
1163
- { pattern: /\b(?:fleet|nodes?|routes?|mesh)\b/i, widget: "system:fleet", name: "Fleet Router" },
1164
- { pattern: /\b(?:captcha|form fill|web automation)\b/i, widget: "system:browser", name: "Browser Tools" },
1165
- // v6.0 step 1 — paperclip Bucket C / killed
1166
- { pattern: /\b(?:tests?|flaky|failing|coverage|eval)\b/i, widget: "system:eval", name: "Test Lab" }
1167
- ];
1168
- const imperativeRe = /\b(?:add|open|show|pin|create|launch|put|give\s+me|i\s+want|let'?s\s+see|i\s+need)\b/i;
1169
- const widgetNounRe = /\b(?:widget|panel|dashboard|hub|gallery|kitchen|scheduler)\b/i;
1170
- const hasWidgetIntent = imperativeRe.test(message) && widgetNounRe.test(message);
1171
- const matchedWidget = hasWidgetIntent ? systemWidgetPatterns.find((p) => p.pattern.test(message)) : null;
1162
+ if (/\b(remind|schedule|every (day|week|morning|hour)|later|tomorrow|at \d|recurring|cron|alarm|automat)/i.test(message)) {
1163
+ systemPrompt += "\n\nHONESTY RULE: never claim you scheduled, set a reminder, automated, sent, or posted something unless you ACTUALLY called the corresponding tool in this turn (the `reminder` tool for one-time reminders \u2014 action=set with message + ISO `when`; the `cron` tool for recurring jobs). If you cannot do it with your tools, say so plainly instead of pretending.";
1164
+ }
1165
+ const matchedWidget = detectSystemWidget(message);
1172
1166
  if (matchedWidget && !taskEnforcementActive) {
1173
1167
  systemPrompt += `
1174
1168
 
1175
- The user is asking about ${matchedWidget.name}. You MUST call gallery_search for "${matchedWidget.widget}" FIRST to find the widget template, then call gallery_get to fetch it, and emit it through the _____widget gate as JSON with format "system":
1169
+ The user is asking about ${matchedWidget.name}. You MUST call gallery_search for "${matchedWidget.source}" FIRST to find the widget template, then call gallery_get to fetch it, and emit it through the _____widget gate as JSON with format "system":
1176
1170
 
1177
- _____widget
1178
- { "name": "${matchedWidget.name}", "format": "system", "source": "${matchedWidget.widget}", "w": 6, "h": 6 }
1171
+ ${buildSystemWidgetGate(matchedWidget)}
1179
1172
 
1180
1173
  Do NOT just describe it \u2014 actually create the widget on the canvas.`;
1181
1174
  taskEnforcementActive = true;
@@ -1479,7 +1472,7 @@ Synthesize these results into a coherent response for the user.`
1479
1472
  if (!budgetExhausted) {
1480
1473
  import("./checkpoint.js").then((m) => m.clearCheckpoints(session.id)).catch((e) => logger.debug("Agent", `Background op failed: ${e.message}`));
1481
1474
  }
1482
- if (toolsUsed.length > 0) {
1475
+ if (toolsUsed.length > 0 && channel !== "eval") {
1483
1476
  const success = !finalContent.toLowerCase().includes("error") && !budgetExhausted;
1484
1477
  recordStrategy(message, [...new Set(toolsUsed)], orderedToolSequence.length, success, orderedToolSequence);
1485
1478
  if (orderedToolSequence.length > 0) {
@@ -1509,6 +1502,23 @@ Synthesize these results into a coherent response for the user.`
1509
1502
  logger.warn(COMPONENT, `[HallucinationGuard] Cloud model claimed action but toolsUsed is empty \u2014 sanitizing response`);
1510
1503
  finalContent = "I wasn't able to finish that task \u2014 the connection to my brain hiccupped. Try asking again, or I can switch to my offline mode if you prefer.";
1511
1504
  }
1505
+ {
1506
+ const sw = detectSystemWidget(message);
1507
+ if (sw && !finalContent.includes("_____widget")) {
1508
+ finalContent = finalContent ? `${finalContent}
1509
+
1510
+ ${buildSystemWidgetGate(sw)}` : buildSystemWidgetGate(sw);
1511
+ logger.info(COMPONENT, `[SystemWidgetShortcut] Deterministically emitted _____widget gate for ${sw.source}`);
1512
+ }
1513
+ }
1514
+ {
1515
+ const claimsScheduled = /\b(i(?:'|’)?(?:ve| have)\s+(?:set|scheduled|created)|(?:reminder|schedule[d]?)\s+(?:is\s+)?(?:set|created|scheduled)|i(?:'|’)?ll remind you|scheduled a reminder)\b/i.test(finalContent);
1516
+ const schedulingToolRan = toolsUsed.some((t) => /^(reminder|cron|schedule|event_trigger|workflows?|social_scheduler)/i.test(t));
1517
+ if (claimsScheduled && !schedulingToolRan) {
1518
+ finalContent += "\n\n\u26A0\uFE0F Correction: I described scheduling that, but I did not actually create a scheduled job this turn. Ask me again and I'll set it with the reminder tool properly.";
1519
+ logger.warn(COMPONENT, "[HonestyGuard] Reply claimed scheduling without a scheduling tool \u2014 appended correction");
1520
+ }
1521
+ }
1512
1522
  addMessage(session, "assistant", finalContent, {
1513
1523
  model: modelUsed,
1514
1524
  tokenCount: totalCompletionTokens
@@ -1586,9 +1596,11 @@ Synthesize these results into a coherent response for the user.`
1586
1596
  durationMs,
1587
1597
  sessionId: session.id
1588
1598
  };
1589
- logTrajectory(trajectory);
1590
- processTrajectoryForSkills(trajectory);
1591
- processTrajectoryForLearningReview(trajectory);
1599
+ if (channel !== "eval") {
1600
+ logTrajectory(trajectory);
1601
+ processTrajectoryForSkills(trajectory);
1602
+ }
1603
+ if (channel !== "eval") processTrajectoryForLearningReview(trajectory);
1592
1604
  trace.setModel(modelUsed);
1593
1605
  trace.setRounds(loopResult.toolCallDetails.length);
1594
1606
  trace.setTokens(totalPromptTokens, totalCompletionTokens);
@@ -1611,11 +1623,40 @@ Synthesize these results into a coherent response for the user.`
1611
1623
  });
1612
1624
  } catch {
1613
1625
  }
1626
+ try {
1627
+ const { recordSpan } = await import("../telemetry/traceStore.js");
1628
+ let costUsd = 0;
1629
+ try {
1630
+ const { calculateActualCost } = await import("./costEstimator.js");
1631
+ costUsd = calculateActualCost(modelUsed, { prompt: totalPromptTokens, completion: totalCompletionTokens });
1632
+ } catch {
1633
+ }
1634
+ recordSpan({
1635
+ sessionId: session.id,
1636
+ startedAt: new Date(startTime).toISOString(),
1637
+ durationMs,
1638
+ model: modelUsed,
1639
+ input: (message || "").slice(0, 500),
1640
+ output: (finalContent || "").slice(0, 1e3),
1641
+ toolsUsed: [...new Set(toolsUsed)],
1642
+ promptTokens: totalPromptTokens,
1643
+ completionTokens: totalCompletionTokens,
1644
+ costUsd,
1645
+ ok: !budgetExhausted && !!finalContent
1646
+ });
1647
+ } catch {
1648
+ }
1649
+ try {
1650
+ const { maybeObserve } = await import("./observationWriter.js");
1651
+ maybeObserve(channel, message || "", finalContent || "");
1652
+ } catch {
1653
+ }
1614
1654
  return {
1615
1655
  content: finalContent,
1616
1656
  sessionId: session.id,
1617
1657
  toolsUsed: [...new Set(toolsUsed)],
1618
1658
  attemptedTools: [...new Set(attemptedTools)],
1659
+ orderedToolSequence: [...orderedToolSequence],
1619
1660
  tokenUsage: {
1620
1661
  prompt: totalPromptTokens,
1621
1662
  completion: totalCompletionTokens,