titan-agent 6.1.1 → 6.2.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.
- package/README.md +25 -5
- package/dist/config/schema.js +23 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/gateway/routes/telephony.js +497 -0
- package/dist/gateway/routes/telephony.js.map +1 -0
- package/dist/gateway/server.js +6 -0
- package/dist/gateway/server.js.map +1 -1
- package/dist/skills/builtin/phone_call.js +66 -0
- package/dist/skills/builtin/phone_call.js.map +1 -0
- package/dist/skills/registry.js +2 -0
- package/dist/skills/registry.js.map +1 -1
- package/dist/telephony/dograhClient.js +175 -0
- package/dist/telephony/dograhClient.js.map +1 -0
- package/dist/telephony/optOutStore.js +71 -0
- package/dist/telephony/optOutStore.js.map +1 -0
- package/dist/telephony/phonePolicy.js +120 -0
- package/dist/telephony/phonePolicy.js.map +1 -0
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/AuditPanel-DuxwAH5U.js +1 -0
- package/ui/dist/assets/{AutonomyPanel-zsQ6kIP7.js → AutonomyPanel-VWBgurnv.js} +1 -1
- package/ui/dist/assets/{AutopilotPanel-NlxdRleV.js → AutopilotPanel-Dw8MYOtj.js} +1 -1
- package/ui/dist/assets/{AutoresearchPanel-CHeEcUmN.js → AutoresearchPanel-CpEX0Zub.js} +1 -1
- package/ui/dist/assets/{BackupPanel-C7RHr9Gu.js → BackupPanel-n41_6i6x.js} +1 -1
- package/ui/dist/assets/{BrowserPanel-Cxu9bCLW.js → BrowserPanel-DEBTIt6h.js} +1 -1
- package/ui/dist/assets/{CPActivity-B0QSTuSq.js → CPActivity-em82PTiQ.js} +1 -1
- package/ui/dist/assets/{CPAgentDetail-BUqGIkaM.js → CPAgentDetail-Bd8lKqcL.js} +1 -1
- package/ui/dist/assets/{CPAgents-DO0RVLLA.js → CPAgents-GRBrDd6c.js} +1 -1
- package/ui/dist/assets/{CPApprovals-DRceMgME.js → CPApprovals-DdLaCgJZ.js} +1 -1
- package/ui/dist/assets/{CPCosts-D9l4mkiW.js → CPCosts-Cm8Hv9fv.js} +1 -1
- package/ui/dist/assets/{CPDashboard-DaCCdMjs.js → CPDashboard-Dm9vUKLu.js} +1 -1
- package/ui/dist/assets/{CPFiles-DTphWHsR.js → CPFiles-DxMn1x2m.js} +1 -1
- package/ui/dist/assets/{CPGoals-DeJBRV3M.js → CPGoals-Wr1tCn6y.js} +1 -1
- package/ui/dist/assets/{CPInbox-DsT5O636.js → CPInbox-CGYpK1rG.js} +2 -2
- package/ui/dist/assets/{CPIssueDetail-D8pG5Tnq.js → CPIssueDetail-dTU59sgQ.js} +1 -1
- package/ui/dist/assets/{CPIssues-oeffaZSb.js → CPIssues-wgjI2eqS.js} +1 -1
- package/ui/dist/assets/CPLayout-CBtGEYSs.js +2 -0
- package/ui/dist/assets/{CPOrg-CesGXL8r.js → CPOrg-eT6LNmyy.js} +1 -1
- package/ui/dist/assets/{CPRuns-CfYgZUGv.js → CPRuns-B3sdo5g2.js} +1 -1
- package/ui/dist/assets/{CPSocial-CK0qGSa0.js → CPSocial-B99Mfee_.js} +3 -3
- package/ui/dist/assets/{CPVoice-iIkC-KnQ.js → CPVoice-D4J6yFWu.js} +1 -1
- package/ui/dist/assets/{ChannelsPanel-DTS5SXlC.js → ChannelsPanel--lhZqYLD.js} +1 -1
- package/ui/dist/assets/{CheckpointsPanel-c5dwo2eW.js → CheckpointsPanel-DaOIUcEi.js} +1 -1
- package/ui/dist/assets/{CommandPostHub-BsdfjoBN.js → CommandPostHub-Pq9lQMW5.js} +3 -3
- package/ui/dist/assets/{CronPanel-BkeP_mIS.js → CronPanel-CywjWM7O.js} +1 -1
- package/ui/dist/assets/{DataTable-Gajb24Ni.js → DataTable-Bt0cxehB.js} +1 -1
- package/ui/dist/assets/{DreamPanel-CGrozxjo.js → DreamPanel-Ct7MuLzD.js} +1 -1
- package/ui/dist/assets/{EmptyState-B3lWjJU-.js → EmptyState-iLOrbdU7.js} +1 -1
- package/ui/dist/assets/{EvalHarnessPanel-DQ4O9caO.js → EvalHarnessPanel-7KKDzeXw.js} +2 -2
- package/ui/dist/assets/{EvalPanel-BOUHXllR.js → EvalPanel-70LzkLDO.js} +1 -1
- package/ui/dist/assets/{FileViewer-00_4kM0_.js → FileViewer-h6A7YYTm.js} +1 -1
- package/ui/dist/assets/{FilesPanel-DISpHxEJ.js → FilesPanel-l8qC6eLD.js} +1 -1
- package/ui/dist/assets/{FleetPanel-Vz7_88zK.js → FleetPanel-Z3ResHIb.js} +1 -1
- package/ui/dist/assets/{HomelabPanel-CCqGyERB.js → HomelabPanel-9QhrXzo1.js} +1 -1
- package/ui/dist/assets/InfraView-G1q6vF0Q.js +2 -0
- package/ui/dist/assets/{InlineEditableField-BGjdtpGQ.js → InlineEditableField-DsVfGRH2.js} +1 -1
- package/ui/dist/assets/{Input-CzDjGc5Y.js → Input-Bzh0-cXU.js} +1 -1
- package/ui/dist/assets/{IntegrationsPanel-BOe9ybbQ.js → IntegrationsPanel-DBOdLYJ8.js} +1 -1
- package/ui/dist/assets/IntelligenceView-J8Nbh4zs.js +2 -0
- package/ui/dist/assets/{LearningPanel-5zb6yYZW.js → LearningPanel-CiSLVxUX.js} +1 -1
- package/ui/dist/assets/{LogsPanel-C_1bqy9b.js → LogsPanel-CPAAItsq.js} +1 -1
- package/ui/dist/assets/{McpPanel-CY7_7erZ.js → McpPanel-MYWE2Zqs.js} +1 -1
- package/ui/dist/assets/{MemoryGraphPanel-DsF8er1w.js → MemoryGraphPanel-BFr51D_1.js} +1 -1
- package/ui/dist/assets/{MemoryWikiPanel-D4KPpOX7.js → MemoryWikiPanel-BA7GUxhg.js} +1 -1
- package/ui/dist/assets/{MeshPanel-C_cNMUcI.js → MeshPanel-5BDbwBVR.js} +1 -1
- package/ui/dist/assets/{MissionCanvas-BMw5bJcw.js → MissionCanvas-CrDZIQX6.js} +1 -1
- package/ui/dist/assets/{MissionChat-CrgPUYhU.js → MissionChat-BDTWMQjj.js} +1 -1
- package/ui/dist/assets/{MissionLibrary-ASkOLTWA.js → MissionLibrary-DEPH2eEu.js} +1 -1
- package/ui/dist/assets/{MissionStart-DDoZMkie.js → MissionStart-COLFZLHB.js} +1 -1
- package/ui/dist/assets/{Modal-DTzLKnUQ.js → Modal-nvni-LGR.js} +1 -1
- package/ui/dist/assets/{NvidiaPanel-dtkQr6gS.js → NvidiaPanel-BCgVrdWt.js} +1 -1
- package/ui/dist/assets/{OrganismPanel-DLfHCoYh.js → OrganismPanel-Cab4MV9i.js} +1 -1
- package/ui/dist/assets/{OverviewPanel-COcMqu-y.js → OverviewPanel-isNUxBki.js} +1 -1
- package/ui/dist/assets/{PageHeader-BXEGoqDX.js → PageHeader-BJ1jHtOy.js} +1 -1
- package/ui/dist/assets/{PersonaProfilesPanel-BKWsHE1j.js → PersonaProfilesPanel-BGiDuDPj.js} +1 -1
- package/ui/dist/assets/{PersonasPanel-tsXvN_8B.js → PersonasPanel-4-USk8fm.js} +1 -1
- package/ui/dist/assets/PhoneDeskPanel-CUz5YVUY.js +11 -0
- package/ui/dist/assets/{RecipesPanel-B8GOxD4_.js → RecipesPanel-DJd6Otdy.js} +1 -1
- package/ui/dist/assets/{SecurityPanel-CqhRhXZ8.js → SecurityPanel-CKqTnhNY.js} +1 -1
- package/ui/dist/assets/{SelfImprovePanel-Di0XhdJJ.js → SelfImprovePanel-BiCjKpTM.js} +1 -1
- package/ui/dist/assets/{SelfProposalsPanel-CbgdHeQY.js → SelfProposalsPanel-BQCwEHdF.js} +1 -1
- package/ui/dist/assets/{SessionsPanel-DBdDx51G.js → SessionsPanel-MTMSODP7.js} +1 -1
- package/ui/dist/assets/{SessionsTab-C8cEt83E.js → SessionsTab-CEFFZWMK.js} +1 -1
- package/ui/dist/assets/{SettingsPanel-BAenxGtq.js → SettingsPanel-CniESkQQ.js} +1 -1
- package/ui/dist/assets/SettingsView-2AwXqlvc.js +2 -0
- package/ui/dist/assets/{SkeletonLoader-DGQ0Q7vy.js → SkeletonLoader-IpWkLmoy.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-r91e0ype.js → SkillsPanel-CCP-gCR4.js} +1 -1
- package/ui/dist/assets/{SomaView-CGoJDjEX.js → SomaView-BK_thK9H.js} +1 -1
- package/ui/dist/assets/{StatCard-D0Q7T1EQ.js → StatCard-I0fVw2CH.js} +1 -1
- package/ui/dist/assets/{StatusBadge-Do8GEljT.js → StatusBadge-e3tFf05B.js} +1 -1
- package/ui/dist/assets/{Tabs-B-g5Ghos.js → Tabs-vGpPiBzr.js} +1 -1
- package/ui/dist/assets/{TeamsPanel-BrT1eigj.js → TeamsPanel-AFIQBzRK.js} +1 -1
- package/ui/dist/assets/{TelemetryPanel-C9vV_ydx.js → TelemetryPanel-DKZGVmcp.js} +1 -1
- package/ui/dist/assets/{TitanCanvas-BPVdmdYo.js → TitanCanvas-CqvuuIjd.js} +4 -4
- package/ui/dist/assets/{ToolsView-COEuSnLh.js → ToolsView-DnIkrUvP.js} +2 -2
- package/ui/dist/assets/{Tooltip-Ip86jr39.js → Tooltip-DNc5AWi0.js} +1 -1
- package/ui/dist/assets/{TraceViewer-BcK-DNNV.js → TraceViewer-MD9YRFVc.js} +1 -1
- package/ui/dist/assets/{TrainingPanel-s5yKr9vs.js → TrainingPanel-BfXoR7_N.js} +1 -1
- package/ui/dist/assets/{VoiceOverlay-BKtgGRK8.js → VoiceOverlay-Bl81c4yf.js} +1 -1
- package/ui/dist/assets/{VramPanel-C2vulpkc.js → VramPanel-Ba8H8Qs2.js} +1 -1
- package/ui/dist/assets/{WatchView-GXZc0v1H.js → WatchView-CoLHPGd7.js} +1 -1
- package/ui/dist/assets/{WorkTab-CCQpoRi6.js → WorkTab-UppfR_AF.js} +1 -1
- package/ui/dist/assets/{WorkflowsPanel-CjU5wOPV.js → WorkflowsPanel-CdN7Epxr.js} +1 -1
- package/ui/dist/assets/{archive-Cty0CkR8.js → archive-DWgNklp0.js} +1 -1
- package/ui/dist/assets/{arrow-left-pfqo1Fw_.js → arrow-left-CW5NV7E0.js} +1 -1
- package/ui/dist/assets/{book-open-B6YYAKPS.js → book-open-DRI_Y6cW.js} +1 -1
- package/ui/dist/assets/{bot-CF5xQRRg.js → bot-DSGZRM5O.js} +1 -1
- package/ui/dist/assets/{chart-column-DmdEaxIF.js → chart-column-D6yK9tts.js} +1 -1
- package/ui/dist/assets/{check-B06kj6lQ.js → check-Cxp-6q4k.js} +1 -1
- package/ui/dist/assets/{chevron-right-BANsqvxz.js → chevron-right-DkIMxdwH.js} +1 -1
- package/ui/dist/assets/{chevron-up-DZTojCej.js → chevron-up-BbDu8x1d.js} +1 -1
- package/ui/dist/assets/{circle-check-big-2NAZFdp9.js → circle-check-big-DnJPBAGU.js} +1 -1
- package/ui/dist/assets/{circle-stop-AU_Yx5I3.js → circle-stop-DOe0OacY.js} +1 -1
- package/ui/dist/assets/clipboard-list-Dj5RQbT8.js +6 -0
- package/ui/dist/assets/{clock-DXDS0v3F.js → clock-BS8fh7Rt.js} +1 -1
- package/ui/dist/assets/{dollar-sign-DLLEescF.js → dollar-sign-DMXBeaTj.js} +1 -1
- package/ui/dist/assets/{download-CsU2Repn.js → download-BykARpbG.js} +1 -1
- package/ui/dist/assets/{external-link-Chx9uvWw.js → external-link-BfXhMi9L.js} +1 -1
- package/ui/dist/assets/{file-text-RZVxniN-.js → file-text-CUkSytWL.js} +1 -1
- package/ui/dist/assets/{flask-conical-BMH8pJKb.js → flask-conical-BS4cuENu.js} +1 -1
- package/ui/dist/assets/{folder-DgwmNgPQ.js → folder-BDwoUobN.js} +1 -1
- package/ui/dist/assets/{funnel-BR7hTVZW.js → funnel-xr6Dd1ub.js} +1 -1
- package/ui/dist/assets/{git-branch-B5R0dCYG.js → git-branch-C0Qk52W8.js} +1 -1
- package/ui/dist/assets/{index-BUCi9exS.js → index-CmaGnHzR.js} +30 -30
- package/ui/dist/assets/index-OZm1iJy9.css +1 -0
- package/ui/dist/assets/{layers-DGEsxpYY.js → layers-DPHYdeRk.js} +1 -1
- package/ui/dist/assets/{legacy-DgcX067d.js → legacy-DzagVk5C.js} +1 -1
- package/ui/dist/assets/{lightbulb-BvNv5S2z.js → lightbulb-Bj6cj6Xl.js} +1 -1
- package/ui/dist/assets/{list-todo-BYS3IIni.js → list-todo-Cm4jNFHV.js} +1 -1
- package/ui/dist/assets/{message-square-I2Wa53bg.js → message-square-BrWLAovN.js} +1 -1
- package/ui/dist/assets/{mic-CLF69wwf.js → mic-BXNK4d7X.js} +1 -1
- package/ui/dist/assets/{missions-a23pAr7Z.js → missions-DEjMYSre.js} +1 -1
- package/ui/dist/assets/{network-DPPIz6Io.js → network-CrQn1GKv.js} +1 -1
- package/ui/dist/assets/{pause-4M6u54u8.js → pause-DS5xgDMT.js} +1 -1
- package/ui/dist/assets/{pencil-CmthDu_c.js → pencil-DAI6FtFQ.js} +1 -1
- package/ui/dist/assets/{play-C5er2jT3.js → play-DxBy837b.js} +1 -1
- package/ui/dist/assets/{plug-Cj409xHk.js → plug-D0Bstfm0.js} +1 -1
- package/ui/dist/assets/{plus-C63FIH_4.js → plus-DxgNIt8h.js} +1 -1
- package/ui/dist/assets/{proxy-CV0RFkNZ.js → proxy-KYomRnLW.js} +1 -1
- package/ui/dist/assets/{radio-DJcw-8Fl.js → radio-2vniRFTO.js} +1 -1
- package/ui/dist/assets/{refresh-cw-D7RrQJQl.js → refresh-cw-BFBnnWj8.js} +1 -1
- package/ui/dist/assets/{rotate-ccw-wDOKy6Sz.js → rotate-ccw-B9wWlKRc.js} +1 -1
- package/ui/dist/assets/{save-Cy8s5sjb.js → save--wCYre_u.js} +1 -1
- package/ui/dist/assets/{search-BXNHN7Ra.js → search-DOD1aOm8.js} +1 -1
- package/ui/dist/assets/{send-DU7Jy0ph.js → send-Bb57UxT7.js} +1 -1
- package/ui/dist/assets/{server-Cg6QHqG3.js → server-CBsCfofY.js} +1 -1
- package/ui/dist/assets/{shield-check-nn5B33Zk.js → shield-check-B24N03VU.js} +1 -1
- package/ui/dist/assets/{terminal-D3qHXhYo.js → terminal-CZ77Swtc.js} +1 -1
- package/ui/dist/assets/{test-tube-qD4BUs0u.js → test-tube-CkkvIu5j.js} +1 -1
- package/ui/dist/assets/{toggle-right-B8VL5BEg.js → toggle-right-DgphAedS.js} +1 -1
- package/ui/dist/assets/{trash-2-BscnSMjc.js → trash-2-C5KNXS-O.js} +1 -1
- package/ui/dist/assets/{trending-up-CusGuaj_.js → trending-up-B3H8xrGD.js} +1 -1
- package/ui/dist/assets/{trophy-SEdQm3z6.js → trophy-C-xSgHD2.js} +1 -1
- package/ui/dist/assets/{volume-2-lPPI8coL.js → volume-2-BXwRjeve.js} +1 -1
- package/ui/dist/assets/{wifi-off-Deo-Hgei.js → wifi-off-DOm__Zn6.js} +1 -1
- package/ui/dist/index.html +2 -2
- package/ui/dist/sw.js +1 -1
- package/ui/dist/assets/AuditPanel-Dln-nzxR.js +0 -6
- package/ui/dist/assets/CPLayout-DVvrBIqI.js +0 -2
- package/ui/dist/assets/InfraView-KVwWRhIp.js +0 -2
- package/ui/dist/assets/IntelligenceView-CGUmFDYY.js +0 -2
- package/ui/dist/assets/SettingsView-DqklKAud.js +0 -2
- package/ui/dist/assets/index-CUxC9gxc.css +0 -1
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</p>
|
|
27
27
|
|
|
28
28
|
<p align="center">
|
|
29
|
-
<a href="#-the-numbers"><img src="https://img.shields.io/badge/version-6.
|
|
29
|
+
<a href="#-the-numbers"><img src="https://img.shields.io/badge/version-6.2.0-blueviolet" alt="v6.2.0"/></a>
|
|
30
30
|
<a href="#-36-llm-providers"><img src="https://img.shields.io/badge/providers-36-purple" alt="36 Providers"/></a>
|
|
31
31
|
<a href="#-the-numbers"><img src="https://img.shields.io/badge/tools-248%2B-orange" alt="248+ Tools"/></a>
|
|
32
32
|
<a href="#-build-anything-on-demand"><img src="https://img.shields.io/badge/widgets-109-pink" alt="109 Widgets"/></a>
|
|
@@ -46,11 +46,31 @@
|
|
|
46
46
|
|
|
47
47
|
## 🪵 NEW in v6.1 — Mission Chat + Desk view
|
|
48
48
|
|
|
49
|
-
> Status: `v6.
|
|
49
|
+
> Status: `v6.2.0` — stable npm `@latest` release with TITAN Phone Desk: optional Dograh sidecar integration for Twilio/Telnyx voice workflows, approval-gated outbound calls, inbound admin/receptionist webhooks, opt-out enforcement, receipts, and a dashboard panel.
|
|
50
50
|
> Install with `npm i -g titan-agent` (or `npm update -g titan-agent`).
|
|
51
51
|
> The v6.0 "Presence" feature set below still applies — v6.1.0 layers
|
|
52
52
|
> a beautiful new surface on top of it.
|
|
53
53
|
|
|
54
|
+
## 📞 NEW in v6.2 — TITAN Phone Desk with Dograh
|
|
55
|
+
|
|
56
|
+
TITAN can now connect to a self-hosted or hosted Dograh sidecar for Twilio/Telnyx-powered phone workflows without storing carrier credentials directly in TITAN. The integration is optional and disabled by default.
|
|
57
|
+
|
|
58
|
+
What is verified in v6.2.0:
|
|
59
|
+
|
|
60
|
+
- `GET /api/telephony/dograh/status` checks Dograh reachability and redacts the API key.
|
|
61
|
+
- `GET /api/telephony/dograh/workflows` lists active Dograh workflows.
|
|
62
|
+
- `POST /api/telephony/dograh/call` creates an approval request first, then starts an outbound Dograh call only when a matching approval action is supplied.
|
|
63
|
+
- The `phone_call` tool is approval-request-only; it never dials directly from an LLM tool call.
|
|
64
|
+
- `POST /api/telephony/dograh/inbound` handles inbound Dograh webhooks for admin-control and receptionist lines.
|
|
65
|
+
- Admin control is restricted to configured E.164 `telephony.adminNumbers`.
|
|
66
|
+
- Public/receptionist numbers do not receive admin privileges.
|
|
67
|
+
- Campaign/cold-call mode is locked unless `allowCampaigns`, recording disclosure, opt-out keywords, and hourly rate limits are configured.
|
|
68
|
+
- Inbound opt-out phrases are recorded and block future campaign calls to that number.
|
|
69
|
+
- Phone numbers and Dograh API keys are redacted from responses, receipts, and UI lists.
|
|
70
|
+
- `/tools/phone-desk` provides status, workflow, call-receipt, opt-out, and approval-request UI.
|
|
71
|
+
|
|
72
|
+
Dograh is BSD-2-Clause. TITAN integrates with it as an external sidecar/API so the npm package stays lightweight and Dograh can own the Twilio/Telnyx credentials.
|
|
73
|
+
|
|
54
74
|
Every TITAN canvas page now carries a **🪵 Mission Chat** launcher in
|
|
55
75
|
the header (with a small **NEW** badge). Click it and you walk into a
|
|
56
76
|
chat-style team-control surface — plus a literal **wood desk** view
|
|
@@ -349,7 +369,7 @@ curl -fsSL https://raw.githubusercontent.com/Djtony707/TITAN/main/install.sh | b
|
|
|
349
369
|
**Or npm:**
|
|
350
370
|
|
|
351
371
|
```bash
|
|
352
|
-
npm install -g titan-agent
|
|
372
|
+
npm install -g titan-agent # stable latest release
|
|
353
373
|
titan onboard # Interactive setup wizard
|
|
354
374
|
titan gateway # Launches Mission Control at http://localhost:48420
|
|
355
375
|
```
|
|
@@ -367,7 +387,7 @@ Requirements: **Node ≥ 22** (pure ESM, no CJS). For GPU features (LoRA fine-tu
|
|
|
367
387
|
|
|
368
388
|
### Upgrading from v5.x
|
|
369
389
|
|
|
370
|
-
Just run `npm install -g titan-agent
|
|
390
|
+
Just run `npm install -g titan-agent`. The migration runner kicks in on first boot, takes an automatic backup first (`~/.titan/backups/`), then applies the schema migrations. If anything goes sideways, `titan backup restore <id>` puts you back.
|
|
371
391
|
|
|
372
392
|
---
|
|
373
393
|
|
|
@@ -425,7 +445,7 @@ Start in supervised mode. Review what it does. Don't give it access to systems y
|
|
|
425
445
|
|
|
426
446
|
| Thing | Count | Where to verify |
|
|
427
447
|
| ---------------------------------- | -------------------------------- | ---------------------------------------------- |
|
|
428
|
-
| **Version** | 6.
|
|
448
|
+
| **Version** | 6.2.0 | `package.json` + `src/utils/constants.ts` |
|
|
429
449
|
| **LLM providers** | 36 (4 native + 32 OpenAI-compat) | `src/providers/openai_compat.ts` |
|
|
430
450
|
| **Channel adapters** | 19 | `src/channels/*.ts` (minus base) |
|
|
431
451
|
| **Built-in skill modules** | 91 files | `src/skills/builtin/` |
|
package/dist/config/schema.js
CHANGED
|
@@ -524,6 +524,27 @@ const SelfModConfigSchema = z.object({
|
|
|
524
524
|
maxPRsPerDrivePer48h: z.number().min(1).max(20).default(1).describe("Rate limit \u2014 how many self-proposal PRs a single drive can generate in a rolling 48h window."),
|
|
525
525
|
pollIntervalMs: z.number().min(6e4).max(36e5).default(3e5).describe("How often to poll GitHub for merge/close status on open PRs. 5 min default.")
|
|
526
526
|
});
|
|
527
|
+
const TelephonyConfigSchema = z.object({
|
|
528
|
+
/** Optional production telephony sidecar. Dograh owns Twilio/Telnyx credentials; TITAN stores only Dograh connection policy. */
|
|
529
|
+
enabled: z.boolean().default(false),
|
|
530
|
+
provider: z.enum(["dograh"]).default("dograh"),
|
|
531
|
+
dograh: z.object({
|
|
532
|
+
baseUrl: z.string().default("http://localhost:8000"),
|
|
533
|
+
apiKey: z.string().optional(),
|
|
534
|
+
defaultOutboundWorkflowId: z.string().optional(),
|
|
535
|
+
defaultInboundWorkflowId: z.string().optional()
|
|
536
|
+
}).default({}),
|
|
537
|
+
/** E.164 numbers allowed to control TITAN over the admin line. */
|
|
538
|
+
adminNumbers: z.array(z.string()).default([]),
|
|
539
|
+
/** Public/receptionist numbers mapped in Dograh. These never receive admin privileges. */
|
|
540
|
+
publicNumbers: z.array(z.string()).default([]),
|
|
541
|
+
/** Outbound calls are approval-gated by default; campaign/cold-call mode is separately disabled. */
|
|
542
|
+
requireApprovalForOutbound: z.boolean().default(true),
|
|
543
|
+
allowCampaigns: z.boolean().default(false),
|
|
544
|
+
maxCallsPerHour: z.number().int().min(0).max(1e4).default(10),
|
|
545
|
+
recordingDisclosure: z.string().default(""),
|
|
546
|
+
optOutKeywords: z.array(z.string()).default(["STOP", "UNSUBSCRIBE", "REMOVE"])
|
|
547
|
+
}).default({});
|
|
527
548
|
const TitanConfigSchema = z.object({
|
|
528
549
|
/** Whether the user has completed the web onboarding wizard */
|
|
529
550
|
onboarded: z.boolean().default(false),
|
|
@@ -543,6 +564,7 @@ const TitanConfigSchema = z.object({
|
|
|
543
564
|
organism: OrganismConfigSchema.default({}),
|
|
544
565
|
selfMod: SelfModConfigSchema.default({}),
|
|
545
566
|
homelab: HomelabConfigSchema.default({}),
|
|
567
|
+
telephony: TelephonyConfigSchema,
|
|
546
568
|
providers: z.object({
|
|
547
569
|
/** v5.4.1: Per-model output-token caps override. Keys are provider/model IDs.
|
|
548
570
|
* Values override the built-in static table + family heuristics. */
|
|
@@ -1521,6 +1543,7 @@ export {
|
|
|
1521
1543
|
SelfModConfigSchema,
|
|
1522
1544
|
TeachingConfigSchema,
|
|
1523
1545
|
TeamConfigSchema,
|
|
1546
|
+
TelephonyConfigSchema,
|
|
1524
1547
|
TitanConfigSchema,
|
|
1525
1548
|
ToolSearchConfigSchema,
|
|
1526
1549
|
TunnelConfigSchema,
|