titan-agent 5.4.2 → 5.5.6
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 +1 -1
- package/dist/agent/agent.js +9 -5
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/agentLoop.js +7 -3
- package/dist/agent/agentLoop.js.map +1 -1
- package/dist/agent/checkpoint.js +2 -2
- package/dist/agent/checkpoint.js.map +1 -1
- package/dist/agent/commandPost.js +3 -3
- package/dist/agent/commandPost.js.map +1 -1
- package/dist/agent/goalProposer.js +2 -2
- package/dist/agent/goalProposer.js.map +1 -1
- package/dist/agent/goals.js +3 -3
- package/dist/agent/goals.js.map +1 -1
- package/dist/agent/peerAdvise.js +1 -1
- package/dist/agent/peerAdvise.js.map +1 -1
- package/dist/agent/planner.js +4 -4
- package/dist/agent/planner.js.map +1 -1
- package/dist/agent/userProfile.js +2 -2
- package/dist/agent/userProfile.js.map +1 -1
- package/dist/cli/doctor.js +33 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/onboard.js +4 -4
- package/dist/cli/onboard.js.map +1 -1
- package/dist/config/config.js +3 -3
- package/dist/config/config.js.map +1 -1
- package/dist/config/schema.js +8 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/gateway/routes/adminRouter.js +500 -0
- package/dist/gateway/routes/adminRouter.js.map +1 -0
- package/dist/gateway/routes/agents.js +231 -0
- package/dist/gateway/routes/agents.js.map +1 -0
- package/dist/gateway/routes/agentsRouter.js +32 -0
- package/dist/gateway/routes/agentsRouter.js.map +1 -0
- package/dist/gateway/routes/checkpoints.js +41 -0
- package/dist/gateway/routes/checkpoints.js.map +1 -0
- package/dist/gateway/routes/commandPost.js +755 -0
- package/dist/gateway/routes/commandPost.js.map +1 -0
- package/dist/gateway/routes/companies.js +166 -0
- package/dist/gateway/routes/companies.js.map +1 -0
- package/dist/gateway/routes/files.js +295 -0
- package/dist/gateway/routes/files.js.map +1 -0
- package/dist/gateway/routes/hardwareRouter.js +151 -0
- package/dist/gateway/routes/hardwareRouter.js.map +1 -0
- package/dist/gateway/routes/mcpRouter.js +88 -0
- package/dist/gateway/routes/mcpRouter.js.map +1 -0
- package/dist/gateway/routes/mesh.js +464 -0
- package/dist/gateway/routes/mesh.js.map +1 -0
- package/dist/gateway/routes/metricsRouter.js +131 -0
- package/dist/gateway/routes/metricsRouter.js.map +1 -0
- package/dist/gateway/routes/organism.js +82 -0
- package/dist/gateway/routes/organism.js.map +1 -0
- package/dist/gateway/routes/paperclip.js +101 -0
- package/dist/gateway/routes/paperclip.js.map +1 -0
- package/dist/gateway/routes/sessions.js +227 -0
- package/dist/gateway/routes/sessions.js.map +1 -0
- package/dist/gateway/routes/skills.js +295 -0
- package/dist/gateway/routes/skills.js.map +1 -0
- package/dist/gateway/routes/socialRouter.js +145 -0
- package/dist/gateway/routes/socialRouter.js.map +1 -0
- package/dist/gateway/routes/systemRouter.js +220 -0
- package/dist/gateway/routes/systemRouter.js.map +1 -0
- package/dist/gateway/routes/teamsRecipes.js +297 -0
- package/dist/gateway/routes/teamsRecipes.js.map +1 -0
- package/dist/gateway/routes/tests.js +401 -0
- package/dist/gateway/routes/tests.js.map +1 -0
- package/dist/gateway/routes/traces.js +33 -0
- package/dist/gateway/routes/traces.js.map +1 -0
- package/dist/gateway/routes/voiceRouter.js +770 -0
- package/dist/gateway/routes/voiceRouter.js.map +1 -0
- package/dist/gateway/routes/watchRouter.js +131 -0
- package/dist/gateway/routes/watchRouter.js.map +1 -0
- package/dist/gateway/server.js +1179 -7379
- package/dist/gateway/server.js.map +1 -1
- package/dist/mcp/registry.js +2 -2
- package/dist/mcp/registry.js.map +1 -1
- package/dist/memory/episodic.js +2 -2
- package/dist/memory/episodic.js.map +1 -1
- package/dist/memory/learning.js +3 -3
- package/dist/memory/learning.js.map +1 -1
- package/dist/memory/memory.js +3 -3
- package/dist/memory/memory.js.map +1 -1
- package/dist/organism/drives.js +2 -2
- package/dist/organism/drives.js.map +1 -1
- package/dist/providers/errorTaxonomy.js +13 -0
- package/dist/providers/errorTaxonomy.js.map +1 -1
- package/dist/providers/ollama.js +3 -1
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai_compat.js +4 -3
- package/dist/providers/openai_compat.js.map +1 -1
- package/dist/providers/router.js +13 -0
- package/dist/providers/router.js.map +1 -1
- package/dist/safety/fixOscillation.js +15 -0
- package/dist/safety/fixOscillation.js.map +1 -1
- package/dist/safety/killSwitch.js +2 -2
- package/dist/safety/killSwitch.js.map +1 -1
- package/dist/safety/selfRepair.js +7 -3
- package/dist/safety/selfRepair.js.map +1 -1
- package/dist/skills/builtin/agent_debate.js +2 -2
- package/dist/skills/builtin/agent_debate.js.map +1 -1
- package/dist/skills/builtin/apply_patch.js +3 -3
- package/dist/skills/builtin/apply_patch.js.map +1 -1
- package/dist/skills/builtin/shell.js +2 -2
- package/dist/skills/builtin/shell.js.map +1 -1
- package/dist/skills/builtin/voice_control.js +49 -0
- package/dist/skills/builtin/voice_control.js.map +1 -0
- package/dist/skills/builtin/widget_gallery.js +6 -1
- package/dist/skills/builtin/widget_gallery.js.map +1 -1
- package/dist/skills/registry.js +15 -4
- package/dist/skills/registry.js.map +1 -1
- package/dist/storage/JsonStorage.js +4 -4
- package/dist/storage/JsonStorage.js.map +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/helpers.js +3 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/lifecycle.js +86 -0
- package/dist/utils/lifecycle.js.map +1 -0
- package/dist/voice/bridge.js +136 -0
- package/dist/voice/bridge.js.map +1 -0
- package/docs/COO-MASTER-PLAN-2026-05-02.md +474 -0
- package/docs/HANDOFF/2026-04-29.md +141 -0
- package/docs/HANDOFF-2026-04-30.md +144 -0
- package/docs/HANDOFF-2026-05-03.md +114 -0
- package/docs/adr/2026-04-29-widget-pipeline-traceability.md +49 -0
- package/docs/agent-memory/README.md +45 -0
- package/docs/agent-memory/commands.md +100 -0
- package/docs/agent-memory/context-tree.md +101 -0
- package/docs/agent-memory/current-state.md +54 -0
- package/docs/agent-memory/decisions.md +78 -0
- package/docs/agent-memory/known-issues.md +76 -0
- package/docs/agent-memory/reflections.md +52 -0
- package/docs/agent-memory/skills-candidates.md +80 -0
- package/docs/superpowers/plans/2026-04-29-comprehensive-audit.md +256 -0
- package/docs/superpowers/plans/2026-04-29-comprehensive-test-plan.md +396 -0
- package/docs/superpowers/plans/2026-04-29-fix-all-prs.md +251 -0
- package/docs/superpowers/plans/2026-04-29-gitnexus-gap-remediation.md +969 -0
- package/package.json +5 -2
- package/ui/dist/assets/{AuditPanel-CM6Wg9hO.js → AuditPanel-VzSndmDN.js} +2 -2
- package/ui/dist/assets/{AutonomyPanel-CESx3ANg.js → AutonomyPanel-BiFouzAV.js} +2 -2
- package/ui/dist/assets/AutopilotPanel-fjOfM668.js +1 -0
- package/ui/dist/assets/{AutoresearchPanel-DR47NqT5.js → AutoresearchPanel-CVCxzAH3.js} +2 -2
- package/ui/dist/assets/BackupPanel-CHVTG--q.js +1 -0
- package/ui/dist/assets/{BrowserPanel-C15x9bLn.js → BrowserPanel-D5mvMKFU.js} +2 -2
- package/ui/dist/assets/CPActivity-B12mt35m.js +1 -0
- package/ui/dist/assets/CPAgentDetail-DsdShc-1.js +1 -0
- package/ui/dist/assets/CPAgents-j_7C-oQV.js +1 -0
- package/ui/dist/assets/CPApprovals-BShKSX9X.js +1 -0
- package/ui/dist/assets/CPCosts-CKPlhBDs.js +1 -0
- package/ui/dist/assets/CPDashboard-11c0nkxK.js +1 -0
- package/ui/dist/assets/CPFiles-BhLEOnXy.js +1 -0
- package/ui/dist/assets/CPGoals-Bi3t1b2P.js +1 -0
- package/ui/dist/assets/CPInbox-Bbr7khp6.js +11 -0
- package/ui/dist/assets/CPIssueDetail-DSdgNK8r.js +1 -0
- package/ui/dist/assets/CPIssues-DDEVKhX6.js +1 -0
- package/ui/dist/assets/CPLayout-DgPOfyGv.js +17 -0
- package/ui/dist/assets/CPOrg-Df73RrRJ.js +8 -0
- package/ui/dist/assets/CPRuns-ByioAz8w.js +1 -0
- package/ui/dist/assets/{CPSocial-nb-j7sOE.js → CPSocial-Dlnr_w1X.js} +2 -2
- package/ui/dist/assets/ChannelsPanel-DQjQCTK5.js +1 -0
- package/ui/dist/assets/CheckpointsPanel-C4vKjlAJ.js +1 -0
- package/ui/dist/assets/CommandPostHub-C9pp5Giq.js +24 -0
- package/ui/dist/assets/CronPanel-C6bzUfrD.js +1 -0
- package/ui/dist/assets/DaemonPanel-BA5Tb_UO.js +1 -0
- package/ui/dist/assets/{DataTable-B2Ma8hfi.js → DataTable-CH7IYJJh.js} +1 -1
- package/ui/dist/assets/{EmptyState-CcKyk5Yn.js → EmptyState-jU6yNDnF.js} +1 -1
- package/ui/dist/assets/{EvalHarnessPanel-BqtMc1ZM.js → EvalHarnessPanel-DnYqredY.js} +2 -2
- package/ui/dist/assets/EvalPanel-ChO7CD1r.js +1 -0
- package/ui/dist/assets/{FilesPanel-3QKvrWPo.js → FilesPanel-CaUkv2is.js} +2 -2
- package/ui/dist/assets/FleetPanel-DC_5uj0N.js +1 -0
- package/ui/dist/assets/{HomelabPanel-DhrjTX9m.js → HomelabPanel-CE5PGRpL.js} +2 -2
- package/ui/dist/assets/InfraView-C-uSlvb9.js +2 -0
- package/ui/dist/assets/InlineEditableField-BMQjiE6-.js +1 -0
- package/ui/dist/assets/Input-Bu_b3qmY.js +1 -0
- package/ui/dist/assets/IntegrationsPanel-DsYpAq43.js +1 -0
- package/ui/dist/assets/IntelligenceView-DUdIO1K7.js +2 -0
- package/ui/dist/assets/LearningPanel-UpQZC-mA.js +1 -0
- package/ui/dist/assets/LogsPanel-ClXJ4fcr.js +1 -0
- package/ui/dist/assets/McpPanel-JKgtIERQ.js +1 -0
- package/ui/dist/assets/{MemoryGraphPanel-Bzvjmzvk.js → MemoryGraphPanel-Bo2OrvA6.js} +2 -2
- package/ui/dist/assets/MemoryWikiPanel-BqJ1AmYm.js +11 -0
- package/ui/dist/assets/{MeshPanel-C3LJSlht.js → MeshPanel-BJVGYvwk.js} +2 -2
- package/ui/dist/assets/Modal-CAAooiZU.js +1 -0
- package/ui/dist/assets/NvidiaPanel-BtCg3G4w.js +1 -0
- package/ui/dist/assets/OrganismPanel-DgrTTzcF.js +1 -0
- package/ui/dist/assets/OverviewPanel-rVav1Hox.js +1 -0
- package/ui/dist/assets/{PageHeader-BimceqQo.js → PageHeader-CnZtP8ek.js} +1 -1
- package/ui/dist/assets/PaperclipPanel-C-FKdhiF.js +1 -0
- package/ui/dist/assets/{PersonasPanel-L1j78p6H.js → PersonasPanel-BmlxokfB.js} +1 -1
- package/ui/dist/assets/RecipesPanel-BNKKChis.js +1 -0
- package/ui/dist/assets/SecurityPanel-I7JRHiNy.js +1 -0
- package/ui/dist/assets/SelfImprovePanel-u9h0Lt3p.js +1 -0
- package/ui/dist/assets/{SelfProposalsPanel-lNmiDThB.js → SelfProposalsPanel-DKl9iBjM.js} +2 -2
- package/ui/dist/assets/SessionsPanel-BhRiWI_g.js +1 -0
- package/ui/dist/assets/{SessionsTab-JQbltWww.js → SessionsTab-Bk08wyeY.js} +1 -1
- package/ui/dist/assets/SettingsPanel-haLfmG2k.js +1 -0
- package/ui/dist/assets/SettingsView--gi3fxI8.js +2 -0
- package/ui/dist/assets/{SkeletonLoader-atQtpcF5.js → SkeletonLoader-B5v09EF_.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-DlFs2ih7.js → SkillsPanel-BlAHFLcQ.js} +1 -1
- package/ui/dist/assets/SomaView-CExtS3zw.js +5 -0
- package/ui/dist/assets/{StatCard-DciE_Iqc.js → StatCard-BIsyMybM.js} +1 -1
- package/ui/dist/assets/{StatusBadge-BtfSPoW2.js → StatusBadge-D5nU7El8.js} +1 -1
- package/ui/dist/assets/Tabs-BBYZrBI8.js +1 -0
- package/ui/dist/assets/TeamsPanel-LPXJg823.js +1 -0
- package/ui/dist/assets/TelemetryPanel-EqpRBmOI.js +1 -0
- package/ui/dist/assets/TitanCanvas-BCbWnLMd.js +985 -0
- package/ui/dist/assets/ToolsView-CeP0Zz-N.js +2 -0
- package/ui/dist/assets/{Tooltip-70UK0E2I.js → Tooltip-BSO2XVpF.js} +1 -1
- package/ui/dist/assets/TraceViewer-BKI7o5B0.js +1 -0
- package/ui/dist/assets/TrainingPanel-c-RhjdE1.js +1 -0
- package/ui/dist/assets/VoiceOverlay-D-gc58b0.js +27 -0
- package/ui/dist/assets/VramPanel-C6xc7zgd.js +1 -0
- package/ui/dist/assets/{WatchView-C-sGFpVy.js → WatchView-dqBVCVH0.js} +1 -1
- package/ui/dist/assets/WorkTab-CBoLNrTM.js +1 -0
- package/ui/dist/assets/{WorkflowsPanel-CvgQU1xI.js → WorkflowsPanel-BAnSTOYe.js} +2 -2
- package/ui/dist/assets/approvalHeadline-DB9SgR-9.js +1 -0
- package/ui/dist/assets/{arrow-left-DwqHtJiU.js → arrow-left-5chqas7J.js} +1 -1
- package/ui/dist/assets/briefcase-D4vLzudp.js +6 -0
- package/ui/dist/assets/{chart-column-BtNO6sRy.js → chart-column-CdFlBpoP.js} +1 -1
- package/ui/dist/assets/check-Bpm1IONe.js +6 -0
- package/ui/dist/assets/chevron-down-D7OLjvuD.js +6 -0
- package/ui/dist/assets/chevron-right-aQEw2mUW.js +6 -0
- package/ui/dist/assets/chevron-up-C5g6pEj8.js +6 -0
- package/ui/dist/assets/{circle-check-big-DZRE_MbN.js → circle-check-big-fPhEdP88.js} +1 -1
- package/ui/dist/assets/clock-CTsgP_Sn.js +6 -0
- package/ui/dist/assets/{dollar-sign-aVG3a5eL.js → dollar-sign-CudFVYFc.js} +1 -1
- package/ui/dist/assets/{download-BxiWJU4G.js → download-DZRxDn67.js} +1 -1
- package/ui/dist/assets/external-link-BZ0y_Ahx.js +6 -0
- package/ui/dist/assets/{eye-off-CkgfFYhm.js → eye-off-BmJF0YYx.js} +1 -1
- package/ui/dist/assets/folder-DA43TRCm.js +11 -0
- package/ui/dist/assets/{funnel-PkLdxKyC.js → funnel-J3mULzrz.js} +1 -1
- package/ui/dist/assets/{git-branch-BM-Gw95X.js → git-branch-oHibJqDq.js} +1 -1
- package/ui/dist/assets/{index-D0RJ8701.css → index-BR0vfkIi.css} +1 -1
- package/ui/dist/assets/{index-CahJbWSR.js → index-DzwowwSI.js} +20 -20
- package/ui/dist/assets/{layers-BuGf4FIJ.js → layers-DsyEyu7z.js} +1 -1
- package/ui/dist/assets/{legacy-CR6o4t-y.js → legacy-8ITl64sV.js} +1 -1
- package/ui/dist/assets/{lightbulb-n8gc_XAL.js → lightbulb-C54Ske-p.js} +1 -1
- package/ui/dist/assets/list-todo-Cnd4rdoK.js +6 -0
- package/ui/dist/assets/loader-circle-1YOBsoQp.js +6 -0
- package/ui/dist/assets/network-DbGDAdrn.js +6 -0
- package/ui/dist/assets/{pause-DCV52koX.js → pause-CYhO_uQo.js} +1 -1
- package/ui/dist/assets/{play-CcJ9BnCh.js → play-DVY9c5Ck.js} +1 -1
- package/ui/dist/assets/{plug-CfWBXfCl.js → plug-BcXjlPUL.js} +1 -1
- package/ui/dist/assets/plus-Csu2v9GN.js +6 -0
- package/ui/dist/assets/{proxy-CzZDfLmm.js → proxy-DxS2_9D7.js} +1 -1
- package/ui/dist/assets/rotate-ccw-Co-_W04j.js +6 -0
- package/ui/dist/assets/save-Btx-kpoW.js +6 -0
- package/ui/dist/assets/search-0hXTwEZR.js +6 -0
- package/ui/dist/assets/send-TEpapzQR.js +6 -0
- package/ui/dist/assets/shield-check-DjBJXZUr.js +6 -0
- package/ui/dist/assets/{square-DJpUhlxi.js → square-OweUvjP-.js} +1 -1
- package/ui/dist/assets/{target-DWcmM_9m.js → target-BRW80Xer.js} +1 -1
- package/ui/dist/assets/terminal-BtiqJ628.js +16 -0
- package/ui/dist/assets/{toggle-right-YusFQ69L.js → toggle-right-CKtSrl28.js} +1 -1
- package/ui/dist/assets/{trash-2-CK7yQ55V.js → trash-2-DgWrHVax.js} +1 -1
- package/ui/dist/assets/{trending-up-DGjFyubC.js → trending-up-MpIrE4j6.js} +1 -1
- package/ui/dist/assets/{trophy-uQv_NgDB.js → trophy-CECuZNhX.js} +1 -1
- package/ui/dist/assets/users-dZgv4ePG.js +16 -0
- package/ui/dist/assets/wrench-CDz3xYve.js +11 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/AutopilotPanel-DtEet1hJ.js +0 -1
- package/ui/dist/assets/BackupPanel-BGP8p3l3.js +0 -1
- package/ui/dist/assets/CPAgents-DYUtPzSq.js +0 -1
- package/ui/dist/assets/CPDashboard-Bf0-SyCh.js +0 -6
- package/ui/dist/assets/CPFiles-CxgxjQcO.js +0 -1
- package/ui/dist/assets/CPGoals-BsmCMTvT.js +0 -1
- package/ui/dist/assets/CPInbox-tMSbmQ9H.js +0 -11
- package/ui/dist/assets/ChannelsPanel-DP5C2OKd.js +0 -1
- package/ui/dist/assets/CheckpointsPanel-DlranVLZ.js +0 -1
- package/ui/dist/assets/CommandPostHub-BgxIa4Ev.js +0 -29
- package/ui/dist/assets/CronPanel-LoT5yKwJ.js +0 -1
- package/ui/dist/assets/DaemonPanel-DBGMqaE_.js +0 -1
- package/ui/dist/assets/EvalPanel-Bc33j0pN.js +0 -1
- package/ui/dist/assets/FleetPanel-CSsXuQYj.js +0 -1
- package/ui/dist/assets/InfraView-CR6HyrL6.js +0 -2
- package/ui/dist/assets/InlineEditableField-CnvF-yFR.js +0 -1
- package/ui/dist/assets/Input-GTHp2Rkr.js +0 -1
- package/ui/dist/assets/IntegrationsPanel-CymCRE3T.js +0 -1
- package/ui/dist/assets/IntelligenceView-C1IHxJRC.js +0 -2
- package/ui/dist/assets/LearningPanel-DOCES3lH.js +0 -1
- package/ui/dist/assets/LogsPanel-BLnAqEaZ.js +0 -1
- package/ui/dist/assets/McpPanel-ChUzmr3z.js +0 -1
- package/ui/dist/assets/MemoryWikiPanel-Dwk3Aqwd.js +0 -11
- package/ui/dist/assets/NvidiaPanel-CeZK_-CV.js +0 -1
- package/ui/dist/assets/OrganismPanel-BB6YOiQV.js +0 -1
- package/ui/dist/assets/OverviewPanel-BmtBhQnv.js +0 -1
- package/ui/dist/assets/PaperclipPanel-C-brgwA3.js +0 -1
- package/ui/dist/assets/RecipesPanel-34lCfynJ.js +0 -1
- package/ui/dist/assets/SecurityPanel-CBTPWLj6.js +0 -1
- package/ui/dist/assets/SelfImprovePanel-BrPbFHhG.js +0 -1
- package/ui/dist/assets/SessionsPanel-DAEYIn83.js +0 -1
- package/ui/dist/assets/SettingsPanel-CzRROAYQ.js +0 -1
- package/ui/dist/assets/SettingsView-CN7ii2uw.js +0 -2
- package/ui/dist/assets/SomaView-Ba642Oqb.js +0 -5
- package/ui/dist/assets/TeamsPanel-DKQ5z2Qe.js +0 -1
- package/ui/dist/assets/TelemetryPanel-B6KAc55Q.js +0 -1
- package/ui/dist/assets/TitanCanvas-C-s0A-lv.js +0 -1092
- package/ui/dist/assets/ToolsView-Dei0KMP0.js +0 -2
- package/ui/dist/assets/TraceViewer-BniolyBx.js +0 -1
- package/ui/dist/assets/TrainingPanel-Bz4CTPGW.js +0 -1
- package/ui/dist/assets/VoiceOverlay-CmNCrLcd.js +0 -37
- package/ui/dist/assets/VramPanel-Xh_OtRDR.js +0 -1
- package/ui/dist/assets/WorkTab-BjLNmgIK.js +0 -1
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Router } from "express";
|
|
3
|
+
import logger from "../../utils/logger.js";
|
|
4
|
+
import { loadConfig } from "../../config/config.js";
|
|
5
|
+
import {
|
|
6
|
+
initAutopilot,
|
|
7
|
+
stopAutopilot,
|
|
8
|
+
runAutopilotNow,
|
|
9
|
+
getAutopilotStatus,
|
|
10
|
+
getRunHistory,
|
|
11
|
+
setAutopilotDryRun
|
|
12
|
+
} from "../../agent/autopilot.js";
|
|
13
|
+
import {
|
|
14
|
+
listGoals,
|
|
15
|
+
createGoal,
|
|
16
|
+
getGoal,
|
|
17
|
+
deleteGoal,
|
|
18
|
+
updateGoal,
|
|
19
|
+
completeSubtask,
|
|
20
|
+
addSubtask,
|
|
21
|
+
dedupeGoalsBulk
|
|
22
|
+
} from "../../agent/goals.js";
|
|
23
|
+
import {
|
|
24
|
+
getDaemonStatus,
|
|
25
|
+
pauseDaemonManual,
|
|
26
|
+
resumeDaemon,
|
|
27
|
+
titanEvents
|
|
28
|
+
} from "../../agent/daemon.js";
|
|
29
|
+
const COMPONENT = "AgentsRouter";
|
|
30
|
+
const DAEMON_SSE_EVENTS = [
|
|
31
|
+
"daemon:started",
|
|
32
|
+
"daemon:stopped",
|
|
33
|
+
"daemon:paused",
|
|
34
|
+
"daemon:resumed",
|
|
35
|
+
"daemon:heartbeat",
|
|
36
|
+
"goal:subtask:ready",
|
|
37
|
+
"health:ollama:down",
|
|
38
|
+
"health:ollama:degraded",
|
|
39
|
+
"cron:stuck",
|
|
40
|
+
"initiative:start",
|
|
41
|
+
"initiative:complete",
|
|
42
|
+
"initiative:no_progress",
|
|
43
|
+
"initiative:tool_call",
|
|
44
|
+
"initiative:tool_result",
|
|
45
|
+
"initiative:round"
|
|
46
|
+
];
|
|
47
|
+
function createLifecycleRouter() {
|
|
48
|
+
const router = Router();
|
|
49
|
+
router.get("/autopilot/status", (_req, res) => {
|
|
50
|
+
res.json(getAutopilotStatus());
|
|
51
|
+
});
|
|
52
|
+
router.get("/autopilot/history", (req, res) => {
|
|
53
|
+
const limit = parseInt(req.query.limit, 10) || 30;
|
|
54
|
+
res.json(getRunHistory(limit));
|
|
55
|
+
});
|
|
56
|
+
router.post("/autopilot/run", async (req, res) => {
|
|
57
|
+
try {
|
|
58
|
+
const dryRun = typeof req.body?.dryRun === "boolean" ? req.body.dryRun : void 0;
|
|
59
|
+
const result = await runAutopilotNow({ dryRun });
|
|
60
|
+
res.json(result);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
logger.error(COMPONENT, `Endpoint error: ${e.message}`);
|
|
63
|
+
res.status(500).json({ error: "Something went wrong on our end. Please try again in a moment." });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
router.post("/autopilot/toggle", (req, res) => {
|
|
67
|
+
try {
|
|
68
|
+
const cfg = loadConfig();
|
|
69
|
+
const enable = typeof req.body.enabled === "boolean" ? req.body.enabled : !cfg.autopilot.enabled;
|
|
70
|
+
const dryRun = typeof req.body.dryRun === "boolean" ? req.body.dryRun : void 0;
|
|
71
|
+
cfg.autopilot.enabled = enable;
|
|
72
|
+
if (typeof dryRun === "boolean") {
|
|
73
|
+
cfg.autopilot.dryRun = dryRun;
|
|
74
|
+
setAutopilotDryRun(dryRun);
|
|
75
|
+
}
|
|
76
|
+
if (enable) {
|
|
77
|
+
initAutopilot(cfg);
|
|
78
|
+
} else {
|
|
79
|
+
stopAutopilot();
|
|
80
|
+
}
|
|
81
|
+
const status = getAutopilotStatus();
|
|
82
|
+
res.json({ enabled: enable, dryRun: status.dryRun });
|
|
83
|
+
} catch (e) {
|
|
84
|
+
logger.error(COMPONENT, `Endpoint error: ${e.message}`);
|
|
85
|
+
res.status(500).json({ error: "Something went wrong on our end. Please try again in a moment." });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
router.get("/goals", (_req, res) => {
|
|
89
|
+
res.json({ goals: listGoals() });
|
|
90
|
+
});
|
|
91
|
+
router.post("/goals", (req, res) => {
|
|
92
|
+
const { title, description, subtasks, priority, tags, force } = req.body;
|
|
93
|
+
if (!title) {
|
|
94
|
+
res.status(400).json({ error: "title is required" });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const goal = createGoal({
|
|
99
|
+
title,
|
|
100
|
+
description: description || "",
|
|
101
|
+
subtasks: subtasks || [],
|
|
102
|
+
priority,
|
|
103
|
+
tags,
|
|
104
|
+
force: !!force
|
|
105
|
+
});
|
|
106
|
+
res.status(201).json({ goal });
|
|
107
|
+
} catch (err) {
|
|
108
|
+
res.status(429).json({ error: err.message });
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
router.get("/goals/dedupe", (_req, res) => {
|
|
112
|
+
const result = dedupeGoalsBulk();
|
|
113
|
+
res.status(200).json({ success: true, ...result });
|
|
114
|
+
});
|
|
115
|
+
router.get("/goals/:id", (req, res) => {
|
|
116
|
+
const goal = getGoal(req.params.id);
|
|
117
|
+
if (!goal) {
|
|
118
|
+
res.status(404).json({ error: "Goal not found" });
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
res.json({ goal });
|
|
122
|
+
});
|
|
123
|
+
router.delete("/goals/:id", (req, res) => {
|
|
124
|
+
const deleted = deleteGoal(req.params.id);
|
|
125
|
+
if (!deleted) {
|
|
126
|
+
res.status(404).json({ error: "Goal not found" });
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
res.json({ deleted: true });
|
|
130
|
+
});
|
|
131
|
+
router.patch("/goals/:id", (req, res) => {
|
|
132
|
+
const updated = updateGoal(req.params.id, req.body || {});
|
|
133
|
+
if (!updated) {
|
|
134
|
+
res.status(404).json({ error: "Goal not found" });
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
res.json({ goal: updated });
|
|
138
|
+
});
|
|
139
|
+
router.post("/goals/:id/subtasks", (req, res) => {
|
|
140
|
+
const { title, description } = req.body;
|
|
141
|
+
if (!title) {
|
|
142
|
+
res.status(400).json({ error: "title is required" });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const subtask = addSubtask(req.params.id, title, description || "");
|
|
146
|
+
if (!subtask) {
|
|
147
|
+
res.status(404).json({ error: "Goal not found" });
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
res.status(201).json({ subtask });
|
|
151
|
+
});
|
|
152
|
+
router.post("/goals/:id/subtasks/:sid/complete", (req, res) => {
|
|
153
|
+
const ok = completeSubtask(req.params.id, req.params.sid, req.body.result || "Completed via UI");
|
|
154
|
+
if (!ok) {
|
|
155
|
+
res.status(404).json({ error: "Goal or subtask not found" });
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
res.json({ completed: true });
|
|
159
|
+
});
|
|
160
|
+
router.post("/goals/:id/subtasks/:sid/retry", async (req, res) => {
|
|
161
|
+
const { retrySubtask } = await import("../../agent/goals.js");
|
|
162
|
+
const ok = retrySubtask(req.params.id, req.params.sid);
|
|
163
|
+
if (!ok) {
|
|
164
|
+
res.status(404).json({ error: "Goal or subtask not found" });
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
res.json({ retried: true });
|
|
168
|
+
});
|
|
169
|
+
router.patch("/goals/:id/subtasks/:sid", async (req, res) => {
|
|
170
|
+
const { updateSubtask } = await import("../../agent/goals.js");
|
|
171
|
+
const { title, description } = req.body || {};
|
|
172
|
+
const ok = updateSubtask(req.params.id, req.params.sid, { title, description });
|
|
173
|
+
if (!ok) {
|
|
174
|
+
res.status(404).json({ error: "Goal or subtask not found" });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
res.json({ updated: true });
|
|
178
|
+
});
|
|
179
|
+
router.get("/daemon/status", (_req, res) => {
|
|
180
|
+
res.json(getDaemonStatus());
|
|
181
|
+
});
|
|
182
|
+
router.post("/daemon/stop", (_req, res) => {
|
|
183
|
+
pauseDaemonManual();
|
|
184
|
+
res.json({ paused: true });
|
|
185
|
+
});
|
|
186
|
+
router.post("/daemon/resume", (_req, res) => {
|
|
187
|
+
resumeDaemon();
|
|
188
|
+
res.json({ resumed: true });
|
|
189
|
+
});
|
|
190
|
+
router.get("/daemon/stream", (req, res) => {
|
|
191
|
+
res.writeHead(200, {
|
|
192
|
+
"Content-Type": "text/event-stream",
|
|
193
|
+
"Cache-Control": "no-cache",
|
|
194
|
+
Connection: "keep-alive",
|
|
195
|
+
"X-Accel-Buffering": "no"
|
|
196
|
+
});
|
|
197
|
+
const onEvent = (event, data) => {
|
|
198
|
+
try {
|
|
199
|
+
res.write(`event: ${event}
|
|
200
|
+
data: ${JSON.stringify(data)}
|
|
201
|
+
|
|
202
|
+
`);
|
|
203
|
+
} catch {
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const events = DAEMON_SSE_EVENTS;
|
|
207
|
+
const listeners = /* @__PURE__ */ new Map();
|
|
208
|
+
for (const evt of events) {
|
|
209
|
+
const handler = (data) => onEvent(evt, data);
|
|
210
|
+
listeners.set(evt, handler);
|
|
211
|
+
titanEvents.on(evt, handler);
|
|
212
|
+
}
|
|
213
|
+
const keepalive = setInterval(() => {
|
|
214
|
+
try {
|
|
215
|
+
res.write(": keepalive\n\n");
|
|
216
|
+
} catch {
|
|
217
|
+
}
|
|
218
|
+
}, 15e3);
|
|
219
|
+
req.on("close", () => {
|
|
220
|
+
clearInterval(keepalive);
|
|
221
|
+
for (const [evt, handler] of listeners) {
|
|
222
|
+
titanEvents.removeListener(evt, handler);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
return router;
|
|
227
|
+
}
|
|
228
|
+
export {
|
|
229
|
+
createLifecycleRouter
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/gateway/routes/agents.ts"],"sourcesContent":["/**\n * Agents Router (Lifecycle)\n *\n * Extracted from gateway/server.ts.\n * Consolidates autopilot, goals, and daemon routes.\n */\n\nimport { Router, type Request, type Response } from 'express';\nimport logger from '../../utils/logger.js';\nimport { loadConfig } from '../../config/config.js';\n\n// Autopilot\nimport {\n initAutopilot,\n stopAutopilot,\n runAutopilotNow,\n getAutopilotStatus,\n getRunHistory,\n setAutopilotDryRun,\n} from '../../agent/autopilot.js';\n\n// Goals\nimport {\n listGoals,\n createGoal,\n getGoal,\n deleteGoal,\n updateGoal,\n completeSubtask,\n addSubtask,\n dedupeGoalsBulk,\n} from '../../agent/goals.js';\n\n// Daemon\nimport {\n getDaemonStatus,\n pauseDaemonManual,\n resumeDaemon,\n titanEvents,\n} from '../../agent/daemon.js';\n\nconst COMPONENT = 'AgentsRouter';\n\nconst DAEMON_SSE_EVENTS = ['daemon:started', 'daemon:stopped', 'daemon:paused', 'daemon:resumed',\n 'daemon:heartbeat', 'goal:subtask:ready', 'health:ollama:down',\n 'health:ollama:degraded', 'cron:stuck',\n 'initiative:start', 'initiative:complete', 'initiative:no_progress',\n 'initiative:tool_call', 'initiative:tool_result', 'initiative:round'];\n\nexport function createLifecycleRouter(): Router {\n const router = Router();\n\n // ── Autopilot ───────────────────────────────────────────────\n router.get('/autopilot/status', (_req, res) => {\n res.json(getAutopilotStatus());\n });\n\n router.get('/autopilot/history', (req, res) => {\n const limit = parseInt(req.query.limit as string, 10) || 30;\n res.json(getRunHistory(limit));\n });\n\n router.post('/autopilot/run', async (req, res) => {\n try {\n const dryRun = typeof req.body?.dryRun === 'boolean' ? req.body.dryRun : undefined;\n const result = await runAutopilotNow({ dryRun });\n res.json(result);\n } catch (e) {\n logger.error(COMPONENT, `Endpoint error: ${(e as Error).message}`); res.status(500).json({ error: 'Something went wrong on our end. Please try again in a moment.' });\n }\n });\n\n router.post('/autopilot/toggle', (req, res) => {\n try {\n const cfg = loadConfig();\n const enable = typeof req.body.enabled === 'boolean' ? req.body.enabled : !cfg.autopilot.enabled;\n const dryRun = typeof req.body.dryRun === 'boolean' ? req.body.dryRun : undefined;\n\n cfg.autopilot.enabled = enable;\n if (typeof dryRun === 'boolean') {\n (cfg.autopilot as Record<string, unknown>).dryRun = dryRun;\n setAutopilotDryRun(dryRun);\n }\n\n if (enable) {\n initAutopilot(cfg);\n } else {\n stopAutopilot();\n }\n const status = getAutopilotStatus();\n res.json({ enabled: enable, dryRun: status.dryRun });\n } catch (e) {\n logger.error(COMPONENT, `Endpoint error: ${(e as Error).message}`); res.status(500).json({ error: 'Something went wrong on our end. Please try again in a moment.' });\n }\n });\n\n // ── Goals API ─────────────────────────────────────────────\n\n router.get('/goals', (_req, res) => {\n res.json({ goals: listGoals() });\n });\n\n router.post('/goals', (req, res) => {\n const { title, description, subtasks, priority, tags, force } = req.body;\n if (!title) { res.status(400).json({ error: 'title is required' }); return; }\n try {\n const goal = createGoal({\n title,\n description: description || '',\n subtasks: subtasks || [],\n priority,\n tags,\n force: !!force,\n });\n res.status(201).json({ goal });\n } catch (err) {\n res.status(429).json({ error: (err as Error).message });\n }\n });\n\n router.get('/goals/dedupe', (_req, res) => {\n const result = dedupeGoalsBulk();\n res.status(200).json({ success: true, ...result });\n });\n\n router.get('/goals/:id', (req, res) => {\n const goal = getGoal(req.params.id);\n if (!goal) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.json({ goal });\n });\n\n router.delete('/goals/:id', (req, res) => {\n const deleted = deleteGoal(req.params.id);\n if (!deleted) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.json({ deleted: true });\n });\n\n // v4.3.1: update a goal's top-level fields (status, priority, title, description, etc.).\n // Previously the only way to pause a stuck goal was to hand-edit ~/.titan/goals.json and\n // restart the gateway — which is what we did on Titan PC to clear 3 failed Upwork goals.\n // This endpoint closes that gap so the UI \"pause\" action works end-to-end.\n router.patch('/goals/:id', (req, res) => {\n const updated = updateGoal(req.params.id, req.body || {});\n if (!updated) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.json({ goal: updated });\n });\n\n router.post('/goals/:id/subtasks', (req, res) => {\n const { title, description } = req.body;\n if (!title) { res.status(400).json({ error: 'title is required' }); return; }\n const subtask = addSubtask(req.params.id, title, description || '');\n if (!subtask) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.status(201).json({ subtask });\n });\n\n router.post('/goals/:id/subtasks/:sid/complete', (req, res) => {\n const ok = completeSubtask(req.params.id, req.params.sid, req.body.result || 'Completed via UI');\n if (!ok) { res.status(404).json({ error: 'Goal or subtask not found' }); return; }\n res.json({ completed: true });\n });\n\n // v4.1: retry a failed subtask — resets status, clears error, zeros retries.\n router.post('/goals/:id/subtasks/:sid/retry', async (req, res) => {\n const { retrySubtask } = await import('../../agent/goals.js');\n const ok = retrySubtask(req.params.id, req.params.sid);\n if (!ok) { res.status(404).json({ error: 'Goal or subtask not found' }); return; }\n res.json({ retried: true });\n });\n\n // v4.1: edit a subtask's title/description.\n router.patch('/goals/:id/subtasks/:sid', async (req, res) => {\n const { updateSubtask } = await import('../../agent/goals.js');\n const { title, description } = req.body || {};\n const ok = updateSubtask(req.params.id, req.params.sid, { title, description });\n if (!ok) { res.status(404).json({ error: 'Goal or subtask not found' }); return; }\n res.json({ updated: true });\n });\n\n // ── Daemon API ────────────────────────────────────────────\n\n router.get('/daemon/status', (_req, res) => {\n res.json(getDaemonStatus());\n });\n\n router.post('/daemon/stop', (_req, res) => {\n pauseDaemonManual();\n res.json({ paused: true });\n });\n\n router.post('/daemon/resume', (_req, res) => {\n resumeDaemon();\n res.json({ resumed: true });\n });\n\n router.get('/daemon/stream', (req, res) => {\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n });\n\n const onEvent = (event: string, data: unknown) => {\n try { res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`); } catch { /* client gone */ }\n };\n\n const events = DAEMON_SSE_EVENTS;\n\n // Store per-client listener references so we only remove THIS client's listeners on disconnect\n const listeners = new Map<string, (data: unknown) => void>();\n for (const evt of events) {\n const handler = (data: unknown) => onEvent(evt, data);\n listeners.set(evt, handler);\n titanEvents.on(evt, handler);\n }\n\n const keepalive = setInterval(() => {\n try { res.write(': keepalive\\n\\n'); } catch { /* client gone */ }\n }, 15_000);\n\n req.on('close', () => {\n clearInterval(keepalive);\n for (const [evt, handler] of listeners) {\n titanEvents.removeListener(evt, handler);\n }\n });\n });\n\n return router;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Router } from "express";
|
|
3
|
+
import { listAgents, spawnAgent, stopAgent, getAgentCapacity } from "../../agent/multiAgent.js";
|
|
4
|
+
function createAgentsRouter() {
|
|
5
|
+
const router = Router();
|
|
6
|
+
router.get("/agents", (_req, res) => {
|
|
7
|
+
res.json({ agents: listAgents(), capacity: getAgentCapacity() });
|
|
8
|
+
});
|
|
9
|
+
router.post("/agents/spawn", (req, res) => {
|
|
10
|
+
const { name, model, systemPrompt } = req.body;
|
|
11
|
+
if (!name) {
|
|
12
|
+
res.status(400).json({ error: "name is required" });
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const result = spawnAgent({ name, model, systemPrompt });
|
|
16
|
+
res.json(result);
|
|
17
|
+
});
|
|
18
|
+
router.post("/agents/stop", (req, res) => {
|
|
19
|
+
const { agentId } = req.body;
|
|
20
|
+
if (!agentId) {
|
|
21
|
+
res.status(400).json({ error: "agentId is required" });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const result = stopAgent(agentId);
|
|
25
|
+
res.json(result);
|
|
26
|
+
});
|
|
27
|
+
return router;
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
createAgentsRouter
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=agentsRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/gateway/routes/agentsRouter.ts"],"sourcesContent":["/**\n * Agents Router\n *\n * Extracted from gateway/server.ts.\n * Consolidates multi-agent list/spawn/stop routes.\n */\n\nimport { Router } from 'express';\nimport { listAgents, spawnAgent, stopAgent, getAgentCapacity } from '../../agent/multiAgent.js';\n\nexport function createAgentsRouter(): Router {\n const router = Router();\n\n router.get('/agents', (_req, res) => {\n res.json({ agents: listAgents(), capacity: getAgentCapacity() });\n });\n\n router.post('/agents/spawn', (req, res) => {\n const { name, model, systemPrompt } = req.body;\n if (!name) { res.status(400).json({ error: 'name is required' }); return; }\n const result = spawnAgent({ name, model, systemPrompt });\n res.json(result);\n });\n\n router.post('/agents/stop', (req, res) => {\n const { agentId } = req.body;\n if (!agentId) { res.status(400).json({ error: 'agentId is required' }); return; }\n const result = stopAgent(agentId);\n res.json(result);\n });\n\n return router;\n}\n"],"mappings":";AAOA,SAAS,cAAc;AACvB,SAAS,YAAY,YAAY,WAAW,wBAAwB;AAE7D,SAAS,qBAA6B;AAC3C,QAAM,SAAS,OAAO;AAEtB,SAAO,IAAI,WAAW,CAAC,MAAM,QAAQ;AACnC,QAAI,KAAK,EAAE,QAAQ,WAAW,GAAG,UAAU,iBAAiB,EAAE,CAAC;AAAA,EACjE,CAAC;AAED,SAAO,KAAK,iBAAiB,CAAC,KAAK,QAAQ;AACzC,UAAM,EAAE,MAAM,OAAO,aAAa,IAAI,IAAI;AAC1C,QAAI,CAAC,MAAM;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,mBAAmB,CAAC;AAAG;AAAA,IAAQ;AAC1E,UAAM,SAAS,WAAW,EAAE,MAAM,OAAO,aAAa,CAAC;AACvD,QAAI,KAAK,MAAM;AAAA,EACjB,CAAC;AAED,SAAO,KAAK,gBAAgB,CAAC,KAAK,QAAQ;AACxC,UAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,QAAI,CAAC,SAAS;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,sBAAsB,CAAC;AAAG;AAAA,IAAQ;AAChF,UAAM,SAAS,UAAU,OAAO;AAChC,QAAI,KAAK,MAAM;AAAA,EACjB,CAAC;AAED,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Router } from "express";
|
|
3
|
+
function createCheckpointsRouter() {
|
|
4
|
+
const router = Router();
|
|
5
|
+
router.get("/", async (_req, res) => {
|
|
6
|
+
try {
|
|
7
|
+
const { listCheckpoints } = await import("../../agent/checkpoint.js");
|
|
8
|
+
res.json({ checkpoints: listCheckpoints() });
|
|
9
|
+
} catch {
|
|
10
|
+
res.json({ checkpoints: [] });
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
router.get("/:sessionId", async (req, res) => {
|
|
14
|
+
try {
|
|
15
|
+
const round = req.query.round ? parseInt(req.query.round, 10) : void 0;
|
|
16
|
+
const { loadCheckpoint } = await import("../../agent/checkpoint.js");
|
|
17
|
+
const cp = loadCheckpoint(req.params.sessionId, round);
|
|
18
|
+
if (!cp) {
|
|
19
|
+
res.status(404).json({ error: "Checkpoint not found" });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
res.json(cp);
|
|
23
|
+
} catch {
|
|
24
|
+
res.status(500).json({ error: "Checkpoint unavailable" });
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
router.delete("/:sessionId", async (req, res) => {
|
|
28
|
+
try {
|
|
29
|
+
const { clearCheckpoints } = await import("../../agent/checkpoint.js");
|
|
30
|
+
clearCheckpoints(req.params.sessionId);
|
|
31
|
+
res.json({ ok: true });
|
|
32
|
+
} catch {
|
|
33
|
+
res.status(500).json({ error: "Checkpoint unavailable" });
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return router;
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
createCheckpointsRouter
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=checkpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/gateway/routes/checkpoints.ts"],"sourcesContent":["import { Router } from 'express';\n\nexport function createCheckpointsRouter(): Router {\n const router = Router();\n\n router.get('/', async (_req, res) => {\n try {\n const { listCheckpoints } = await import('../../agent/checkpoint.js');\n res.json({ checkpoints: listCheckpoints() });\n } catch { res.json({ checkpoints: [] }); }\n });\n\n router.get('/:sessionId', async (req, res) => {\n try {\n const round = req.query.round ? parseInt(req.query.round as string, 10) : undefined;\n const { loadCheckpoint } = await import('../../agent/checkpoint.js');\n const cp = loadCheckpoint(req.params.sessionId, round);\n if (!cp) { res.status(404).json({ error: 'Checkpoint not found' }); return; }\n res.json(cp);\n } catch { res.status(500).json({ error: 'Checkpoint unavailable' }); }\n });\n\n router.delete('/:sessionId', async (req, res) => {\n try {\n const { clearCheckpoints } = await import('../../agent/checkpoint.js');\n clearCheckpoints(req.params.sessionId);\n res.json({ ok: true });\n } catch { res.status(500).json({ error: 'Checkpoint unavailable' }); }\n });\n\n return router;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAEhB,SAAS,0BAAkC;AAChD,QAAM,SAAS,OAAO;AAEtB,SAAO,IAAI,KAAK,OAAO,MAAM,QAAQ;AACnC,QAAI;AACF,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,2BAA2B;AACpE,UAAI,KAAK,EAAE,aAAa,gBAAgB,EAAE,CAAC;AAAA,IAC7C,QAAQ;AAAE,UAAI,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;AAAA,IAAG;AAAA,EAC3C,CAAC;AAED,SAAO,IAAI,eAAe,OAAO,KAAK,QAAQ;AAC5C,QAAI;AACF,YAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,IAAI,MAAM,OAAiB,EAAE,IAAI;AAC1E,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,2BAA2B;AACnE,YAAM,KAAK,eAAe,IAAI,OAAO,WAAW,KAAK;AACrD,UAAI,CAAC,IAAI;AAAE,YAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,uBAAuB,CAAC;AAAG;AAAA,MAAQ;AAC5E,UAAI,KAAK,EAAE;AAAA,IACb,QAAQ;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,yBAAyB,CAAC;AAAA,IAAG;AAAA,EACvE,CAAC;AAED,SAAO,OAAO,eAAe,OAAO,KAAK,QAAQ;AAC/C,QAAI;AACF,YAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,2BAA2B;AACrE,uBAAiB,IAAI,OAAO,SAAS;AACrC,UAAI,KAAK,EAAE,IAAI,KAAK,CAAC;AAAA,IACvB,QAAQ;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,yBAAyB,CAAC;AAAA,IAAG;AAAA,EACvE,CAAC;AAED,SAAO;AACT;","names":[]}
|